mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 15:02:58 +02:00
libeplayer3: let writers use AVPacket
This commit is contained in:
@@ -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);
|
||||
|
@@ -37,9 +37,6 @@ typedef enum {
|
||||
} OutputCmd_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t *data;
|
||||
unsigned int len;
|
||||
|
||||
int uNoOfChannels;
|
||||
int uSampleRate;
|
||||
int uBitsPerSample;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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 =
|
||||
|
Reference in New Issue
Block a user