diff --git a/libeplayer3/container/container_ffmpeg.cpp b/libeplayer3/container/container_ffmpeg.cpp index 82db104..08d600f 100644 --- a/libeplayer3/container/container_ffmpeg.cpp +++ b/libeplayer3/container/container_ffmpeg.cpp @@ -334,14 +334,14 @@ static void *FFMPEGThread(void *arg) break; // while } long long int pts; - uint8_t *packet_data = packet.data; - int packet_size = packet.size; Track_t *videoTrack = NULL; Track_t *audioTrack = NULL; Track_t *subtitleTrack = NULL; Track_t *teletextTrack = NULL; - context->playback->readCount += packet_size; + context->playback->readCount += packet.size; + + avOut.packet = &packet; int pid = avContext->streams[packet.stream_index]->id; @@ -357,17 +357,14 @@ static void *FFMPEGThread(void *arg) if (context->manager->teletext->Command(context, MANAGER_GET_TRACK, &teletextTrack) < 0) ffmpeg_err("error getting teletext track\n"); - ffmpeg_printf(200, "packet_size %d - index %d\n", packet_size, pid); + ffmpeg_printf(200, "packet_size %d - index %d\n", packet.size, pid); if (videoTrack && (videoTrack->Id == pid)) { currentVideoPts = /* CHECK videoTrack->pts = */pts = calcPts(avContext, videoTrack->stream, packet.pts); ffmpeg_printf(200, "VideoTrack index = %d %lld\n", pid, currentVideoPts); - avOut.data = packet_data; - avOut.len = packet_size; avOut.pts = pts; - avOut.packet = &packet; avOut.type = "video"; avOut.stream = videoTrack->stream; @@ -382,10 +379,7 @@ static void *FFMPEGThread(void *arg) currentAudioPts = /* CHECK audioTrack->pts = */pts = calcPts(avContext, audioTrack->stream, packet.pts); ffmpeg_printf(200, "AudioTrack index = %d\n", pid); - avOut.data = packet_data; - avOut.len = packet_size; avOut.pts = pts; - avOut.packet = &packet; avOut.type = "audio"; avOut.stream = audioTrack->stream; avOut.avfc = avContext; @@ -428,7 +422,7 @@ static void *FFMPEGThread(void *arg) } } /* duration */ } else if (teletextTrack && (teletextTrack->Id == pid)) { - teletext_write(pid, packet_data, packet_size); + teletext_write(pid, packet.data, packet.size); } av_free_packet(&packet); diff --git a/libeplayer3/include/output.h b/libeplayer3/include/output.h index e924f75..d0d8844 100644 --- a/libeplayer3/include/output.h +++ b/libeplayer3/include/output.h @@ -37,9 +37,6 @@ typedef enum { } OutputCmd_t; typedef struct { - uint8_t *data; - unsigned int len; - int uNoOfChannels; int uSampleRate; int uBitsPerSample; diff --git a/libeplayer3/include/writer.h b/libeplayer3/include/writer.h index c3dbc3b..2364b8e 100644 --- a/libeplayer3/include/writer.h +++ b/libeplayer3/include/writer.h @@ -19,8 +19,6 @@ typedef struct Context_s Context_t; typedef struct { int fd; - uint8_t *data; - unsigned int len; int64_t Pts; int uNoOfChannels; int uSampleRate; diff --git a/libeplayer3/output/linuxdvb.cpp b/libeplayer3/output/linuxdvb.cpp index 01d94cd..9fdb12c 100644 --- a/libeplayer3/output/linuxdvb.cpp +++ b/libeplayer3/output/linuxdvb.cpp @@ -913,7 +913,7 @@ static int Write(Context_t *context, AudioVideoOut_t *out) video = !strcmp("video", out->type); audio = !strcmp("audio", out->type); - linuxdvb_printf(20, "DataLength=%u Pts=%llu\n", out->len, out->pts); + linuxdvb_printf(20, "DataLength=%u Pts=%llu\n", out->packet->size, out->pts); linuxdvb_printf(20, "v%d a%d\n", video, audio); if (video) { @@ -937,8 +937,6 @@ static int Write(Context_t *context, AudioVideoOut_t *out) ret = cERR_LINUXDVB_ERROR; } else { call.fd = videofd; - call.data = out->data; - call.len = out->len; call.Pts = out->pts; call.packet = out->packet; @@ -975,8 +973,6 @@ static int Write(Context_t *context, AudioVideoOut_t *out) ret = cERR_LINUXDVB_ERROR; } else { call.fd = audiofd; - call.data = out->data; - call.len = out->len; call.Pts = out->pts; call.packet = out->packet; diff --git a/libeplayer3/output/writer/ac3.cpp b/libeplayer3/output/writer/ac3.cpp index 117982c..dcda562 100644 --- a/libeplayer3/output/writer/ac3.cpp +++ b/libeplayer3/output/writer/ac3.cpp @@ -104,7 +104,7 @@ static int writeData(WriterAVCallData_t *call) ac3_printf(10, "AudioPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { ac3_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -118,10 +118,10 @@ static int writeData(WriterAVCallData_t *call) iov[0].iov_base = PesHeader; iov[0].iov_len = - InsertPesHeader(PesHeader, call->len, + InsertPesHeader(PesHeader, call->packet->size, PRIVATE_STREAM_1_PES_START_CODE, call->Pts, 0); - iov[1].iov_base = call->data; - iov[1].iov_len = call->len; + iov[1].iov_base = call->packet->data; + iov[1].iov_len = call->packet->size; return writev(call->fd, iov, 2); } diff --git a/libeplayer3/output/writer/divx.cpp b/libeplayer3/output/writer/divx.cpp index 08608fc..b536c22 100644 --- a/libeplayer3/output/writer/divx.cpp +++ b/libeplayer3/output/writer/divx.cpp @@ -109,7 +109,7 @@ static int writeData(WriterAVCallData_t *call) return 0; } - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { divx_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -147,7 +147,7 @@ static int writeData(WriterAVCallData_t *call) int ic = 0; iov[ic].iov_base = PesHeader; iov[ic++].iov_len = - InsertPesHeader(PesHeader, call->len, MPEG_VIDEO_PES_START_CODE, + InsertPesHeader(PesHeader, call->packet->size, MPEG_VIDEO_PES_START_CODE, call->Pts, FakeStartCode); iov[ic].iov_base = FakeHeaders; iov[ic++].iov_len = FakeHeaderLength; @@ -158,8 +158,8 @@ static int writeData(WriterAVCallData_t *call) initialHeader = 0; } - iov[ic].iov_base = call->data; - iov[ic++].iov_len = call->len; + iov[ic].iov_base = call->packet->data; + iov[ic++].iov_len = call->packet->size; int len = writev(call->fd, iov, ic); diff --git a/libeplayer3/output/writer/dts.cpp b/libeplayer3/output/writer/dts.cpp index b0fa22f..f63b33f 100644 --- a/libeplayer3/output/writer/dts.cpp +++ b/libeplayer3/output/writer/dts.cpp @@ -106,7 +106,7 @@ static int writeData(WriterAVCallData_t *call) dts_printf(10, "AudioPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { dts_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -117,11 +117,11 @@ static int writeData(WriterAVCallData_t *call) } // #define DO_BYTESWAP #ifdef DO_BYTESWAP - unsigned char *Data = (unsigned char *) malloc(call->len); - memcpy(Data, call->data, call->len); + unsigned char *Data = (unsigned char *) malloc(call->packet->size); + memcpy(Data, call->packet->data, call->packet->size); /* 16-bit byte swap all data before injecting it */ - for (i = 0; i < call->len; i += 2) { + for (i = 0; i < call->packet->size; i += 2) { unsigned char Tmp = Data[i]; Data[i] = Data[i + 1]; Data[i + 1] = Tmp; @@ -132,16 +132,16 @@ static int writeData(WriterAVCallData_t *call) iov[0].iov_base = PesHeader; iov[0].iov_len = - InsertPesHeader(PesHeader, call->len, + InsertPesHeader(PesHeader, call->packet->size, MPEG_AUDIO_PES_START_CODE /*PRIVATE_STREAM_1_PES_START_CODE */ , call->Pts, 0); #ifdef DO_BYTESPWAP iov[1].iov_base = Data; #else - iov[1].iov_base = call->data; + iov[1].iov_base = call->packet->data; #endif - iov[1].iov_len = call->len; + iov[1].iov_len = call->packet->size; int len = writev(call->fd, iov, 2); diff --git a/libeplayer3/output/writer/flac.cpp b/libeplayer3/output/writer/flac.cpp index 5e0df41..0841914 100644 --- a/libeplayer3/output/writer/flac.cpp +++ b/libeplayer3/output/writer/flac.cpp @@ -102,7 +102,7 @@ static int writeData(WriterAVCallData_t *call) flac_printf(10, "AudioPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { flac_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -115,10 +115,10 @@ static int writeData(WriterAVCallData_t *call) struct iovec iov[2]; iov[0].iov_base = PesHeader; iov[0].iov_len = - InsertPesHeader(PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, + InsertPesHeader(PesHeader, call->packet->size, MPEG_AUDIO_PES_START_CODE, call->Pts, 0); - iov[1].iov_base = call->data; - iov[1].iov_len = call->len; + iov[1].iov_base = call->packet->data; + iov[1].iov_len = call->packet->size; int len = writev(call->fd, iov, 2); diff --git a/libeplayer3/output/writer/h263.cpp b/libeplayer3/output/writer/h263.cpp index 6b4d8b0..41bc366 100644 --- a/libeplayer3/output/writer/h263.cpp +++ b/libeplayer3/output/writer/h263.cpp @@ -103,7 +103,7 @@ static int writeData(WriterAVCallData_t *call) h263_printf(10, "VideoPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { h263_err("NULL Data. ignoring...\n"); return 0; } @@ -114,11 +114,11 @@ static int writeData(WriterAVCallData_t *call) } int HeaderLength = - InsertPesHeader(PesHeader, call->len, H263_VIDEO_PES_START_CODE, + InsertPesHeader(PesHeader, call->packet->size, H263_VIDEO_PES_START_CODE, call->Pts, 0); int PrivateHeaderLength = - InsertVideoPrivateDataHeader(&PesHeader[HeaderLength], call->len); + InsertVideoPrivateDataHeader(&PesHeader[HeaderLength], call->packet->size); int PesLength = PesHeader[PES_LENGTH_BYTE_0] + @@ -134,8 +134,8 @@ static int writeData(WriterAVCallData_t *call) struct iovec iov[2]; iov[0].iov_base = PesHeader; iov[0].iov_len = HeaderLength; - iov[1].iov_base = call->data; - iov[1].iov_len = call->len; + iov[1].iov_base = call->packet->data; + iov[1].iov_len = call->packet->size; len = writev(call->fd, iov, 2); h263_printf(10, "< len %d\n", len); diff --git a/libeplayer3/output/writer/h264.cpp b/libeplayer3/output/writer/h264.cpp index 9ce4064..9a1304c 100644 --- a/libeplayer3/output/writer/h264.cpp +++ b/libeplayer3/output/writer/h264.cpp @@ -132,7 +132,7 @@ static int writeData(WriterAVCallData_t *call) h264_printf(10, "VideoPts %lld - %d %d\n", call->Pts, TimeDelta, TimeScale); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { h264_err("NULL Data. ignoring...\n"); return 0; } @@ -142,12 +142,12 @@ static int writeData(WriterAVCallData_t *call) return 0; } - if ((call->len > 3) + if ((call->packet->size > 3) && - ((call->data[0] == 0x00 && call->data[1] == 0x00 - && call->data[2] == 0x00 && call->data[3] == 0x01) - || (call->data[0] == 0xff && call->data[1] == 0xff - && call->data[2] == 0xff && call->data[3] == 0xff))) { + ((call->packet->data[0] == 0x00 && call->packet->data[1] == 0x00 + && call->packet->data[2] == 0x00 && call->packet->data[3] == 0x01) + || (call->packet->data[0] == 0xff && call->packet->data[1] == 0xff + && call->packet->data[2] == 0xff && call->packet->data[3] == 0xff))) { unsigned int PacketLength = 0; unsigned int FakeStartCode = /* (call->Version << 8) | */ PES_VERSION_FAKE_START_CODE; iov[ic++].iov_base = PesHeader; @@ -157,9 +157,9 @@ static int writeData(WriterAVCallData_t *call) iov[ic++].iov_len = call->stream->codec->extradata_size; PacketLength += call->stream->codec->extradata_size; } - iov[ic].iov_base = call->data; - iov[ic++].iov_len = call->len; - PacketLength += call->len; + iov[ic].iov_base = call->packet->data; + iov[ic++].iov_len = call->packet->size; + PacketLength += call->packet->size; /*Hellmaster1024: some packets will only be accepted by the player if we send one byte more than data is available. The content of this byte does not matter. It will be ignored by the player */ @@ -305,7 +305,7 @@ static int writeData(WriterAVCallData_t *call) initialHeader = 0; } - unsigned int SampleSize = call->len; + unsigned int SampleSize = call->packet->size; unsigned int NalStart = 0; unsigned int VideoPosition = 0; @@ -314,7 +314,7 @@ static int writeData(WriterAVCallData_t *call) unsigned char NalData[4]; int NalPresent = 1; - memcpy(NalData, call->data + VideoPosition, NalLengthBytes); + memcpy(NalData, call->packet->data + VideoPosition, NalLengthBytes); VideoPosition += NalLengthBytes; NalStart += NalLengthBytes; switch (NalLengthBytes) { @@ -356,7 +356,7 @@ static int writeData(WriterAVCallData_t *call) iov[ic++].iov_len = sizeof(Head); } - iov[ic].iov_base = call->data + VideoPosition; + iov[ic].iov_base = call->packet->data + VideoPosition; iov[ic++].iov_len = NalLength; VideoPosition += NalLength; @@ -394,7 +394,7 @@ static int writeReverseData(WriterAVCallData_t *call) h264_printf(10, "VideoPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { h264_err("NULL Data. ignoring...\n"); return 0; } diff --git a/libeplayer3/output/writer/mp3.cpp b/libeplayer3/output/writer/mp3.cpp index ca49c15..1b6d849 100644 --- a/libeplayer3/output/writer/mp3.cpp +++ b/libeplayer3/output/writer/mp3.cpp @@ -102,7 +102,7 @@ static int writeData(WriterAVCallData_t *call) mp3_printf(10, "AudioPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { mp3_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -115,10 +115,10 @@ static int writeData(WriterAVCallData_t *call) struct iovec iov[2]; iov[0].iov_base = PesHeader; iov[0].iov_len = - InsertPesHeader(PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, + InsertPesHeader(PesHeader, call->packet->size, MPEG_AUDIO_PES_START_CODE, call->Pts, 0); - iov[1].iov_base = call->data; - iov[1].iov_len = call->len; + iov[1].iov_base = call->packet->data; + iov[1].iov_len = call->packet->size; int len = writev(call->fd, iov, 2); diff --git a/libeplayer3/output/writer/mpeg2.cpp b/libeplayer3/output/writer/mpeg2.cpp index 177d805..a825231 100644 --- a/libeplayer3/output/writer/mpeg2.cpp +++ b/libeplayer3/output/writer/mpeg2.cpp @@ -105,7 +105,7 @@ static int writeData(WriterAVCallData_t *call) mpeg2_printf(10, "VideoPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { mpeg2_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -115,11 +115,11 @@ static int writeData(WriterAVCallData_t *call) return 0; } - while (Position < call->len) { - int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ? - (call->len - Position) : MAX_PES_PACKET_SIZE; + while (Position < call->packet->size) { + int PacketLength = (call->packet->size - Position) <= MAX_PES_PACKET_SIZE ? + (call->packet->size - Position) : MAX_PES_PACKET_SIZE; - int Remaining = call->len - Position - PacketLength; + int Remaining = call->packet->size - Position - PacketLength; mpeg2_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position); @@ -128,7 +128,7 @@ static int writeData(WriterAVCallData_t *call) iov[0].iov_base = PesHeader; iov[0].iov_len = InsertPesHeader(PesHeader, PacketLength, 0xe0, call->Pts, 0); - iov[1].iov_base = call->data + Position; + iov[1].iov_base = call->packet->data + Position; iov[1].iov_len = PacketLength; ssize_t l = writev(call->fd, iov, 2); diff --git a/libeplayer3/output/writer/pcm.cpp b/libeplayer3/output/writer/pcm.cpp index 84a9f9b..a2c3822 100644 --- a/libeplayer3/output/writer/pcm.cpp +++ b/libeplayer3/output/writer/pcm.cpp @@ -196,7 +196,7 @@ static int writeData(WriterAVCallData_t *call) pcm_printf(10, "AudioPts %lld\n", call->Pts); - if (!call->data || (call->len <= 0)) { + if (!call->packet->data || (call->packet->size <= 0)) { pcm_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -214,8 +214,8 @@ static int writeData(WriterAVCallData_t *call) call->bLittleEndian); } - unsigned char *buffer = call->data; - unsigned int size = call->len; + unsigned char *buffer = call->packet->data; + unsigned int size = call->packet->size; unsigned int n; unsigned char *injectBuffer = (unsigned char *) malloc(SubFrameLen); @@ -427,8 +427,10 @@ static int writeDataIpcm(WriterAVCallData_t *call) pcmOut.uBitsPerSample = 16; pcmOut.bLittleEndian = 1; - pcmOut.data = output; - pcmOut.len = out_samples * sizeof(short) * out_channels; + AVPacket packet; + packet.data = output; + packet.size = out_samples * sizeof(short) * out_channels; + pcmOut.packet = &packet; pcmOut.Pts = pts; // FIXME videoTrack ? pts : 0; pcmOut.stream = call->stream; diff --git a/libeplayer3/output/writer/vc1.cpp b/libeplayer3/output/writer/vc1.cpp index 34d378f..e08c157 100644 --- a/libeplayer3/output/writer/vc1.cpp +++ b/libeplayer3/output/writer/vc1.cpp @@ -132,7 +132,7 @@ static int writeData(WriterAVCallData_t *call) return 0; } - if ((call->data == NULL) || (call->len <= 0)) { + if ((call->packet->data == NULL) || (call->packet->size <= 0)) { vc1_err("parsing NULL Data. ignoring...\n"); return 0; } @@ -214,18 +214,18 @@ static int writeData(WriterAVCallData_t *call) initialHeader = 0; } - if (call->len > 0 && call->data) { - unsigned int Position = 0; + if (call->packet->size > 0 && call->packet->data) { + int Position = 0; unsigned char insertSampleHeader = 1; - while (Position < call->len) { + while (Position < call->packet->size) { int PacketLength = - (call->len - Position) <= - MAX_PES_PACKET_SIZE ? (call->len - + (call->packet->size - Position) <= + MAX_PES_PACKET_SIZE ? (call->packet->size - Position) : MAX_PES_PACKET_SIZE; - int Remaining = call->len - Position - PacketLength; + int Remaining = call->packet->size - Position - PacketLength; vc1_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position); @@ -242,12 +242,12 @@ static int writeData(WriterAVCallData_t *call) /* vc1_printf(10, "Data Start: {00 00 01 0d} - "); int i; - for (i = 0; i < 4; i++) vc1_printf(10, "%02x ", call->data[i]); + for (i = 0; i < 4; i++) vc1_printf(10, "%02x ", call->packet->data[i]); vc1_printf(10, "\n"); */ - if (!FrameHeaderSeen && (call->len > 3) - && (memcmp(call->data, Vc1FrameStartCode, 4) == 0)) + if (!FrameHeaderSeen && (call->packet->size > 3) + && (memcmp(call->packet->data, Vc1FrameStartCode, 4) == 0)) FrameHeaderSeen = 1; if (!FrameHeaderSeen) { memcpy(&PesHeader[HeaderLength], Vc1FrameStartCode, @@ -260,7 +260,7 @@ static int writeData(WriterAVCallData_t *call) struct iovec iov[2]; iov[0].iov_base = PesHeader; iov[0].iov_len = HeaderLength; - iov[1].iov_base = call->data + Position; + iov[1].iov_base = call->packet->data + Position; iov[1].iov_len = PacketLength; ssize_t l = writev(call->fd, iov, 2); diff --git a/libeplayer3/output/writer/wmv.cpp b/libeplayer3/output/writer/wmv.cpp index 3615a1e..68f5aa5 100644 --- a/libeplayer3/output/writer/wmv.cpp +++ b/libeplayer3/output/writer/wmv.cpp @@ -125,16 +125,6 @@ static int writeData(WriterAVCallData_t *call) wmv_printf(10, "\n"); - if (call == NULL) { - wmv_err("call data is NULL...\n"); - return 0; - } - - if ((call->data == NULL) || (call->len <= 0)) { - wmv_err("parsing NULL Data. ignoring...\n"); - return 0; - } - if (call->fd < 0) { wmv_err("file pointer < 0. ignoring ...\n"); return 0; @@ -200,20 +190,12 @@ static int writeData(WriterAVCallData_t *call) initialHeader = 0; } - if (call->len > 0 && call->data) { + if (call->packet->size > 0 && call->packet->data) { unsigned int Position = 0; unsigned char insertSampleHeader = 1; - while (Position < call->len) { + while (Position < call->packet->size) { - int PacketLength = - (call->len - Position) <= - MAX_PES_PACKET_SIZE ? (call->len - - Position) : MAX_PES_PACKET_SIZE; - - int Remaining = call->len - Position - PacketLength; - - wmv_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", - PacketLength, Remaining, Position); + int PacketLength = (call->packet->size - Position) <= MAX_PES_PACKET_SIZE ? (call->packet->size - Position) : MAX_PES_PACKET_SIZE; unsigned char PesHeader[PES_MAX_HEADER_SIZE]; memset(PesHeader, '0', PES_MAX_HEADER_SIZE); @@ -226,9 +208,7 @@ static int writeData(WriterAVCallData_t *call) unsigned int PesLength; unsigned int PrivateHeaderLength; - PrivateHeaderLength = - InsertVideoPrivateDataHeader(&PesHeader[HeaderLength], - call->len); + PrivateHeaderLength = InsertVideoPrivateDataHeader(&PesHeader[HeaderLength], call->packet->size); /* Update PesLength */ PesLength = PesHeader[PES_LENGTH_BYTE_0] + (PesHeader[PES_LENGTH_BYTE_1] << 8) + @@ -243,9 +223,9 @@ static int writeData(WriterAVCallData_t *call) insertSampleHeader = 0; } - PacketStart = (unsigned char *) malloc(call->len + HeaderLength); + PacketStart = (unsigned char *) malloc(call->packet->size + HeaderLength); memcpy(PacketStart, PesHeader, HeaderLength); - memcpy(PacketStart + HeaderLength, call->data + Position, + memcpy(PacketStart + HeaderLength, call->packet->data + Position, PacketLength); len =