libeplayer3: let writers use AVPacket

Origin commit data
------------------
Branch: master
Commit: 1c380d1167
Author: martii <m4rtii@gmx.de>
Date: 2014-04-05 (Sat, 05 Apr 2014)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
martii
2014-04-05 16:17:57 +02:00
parent ccd2c57a83
commit aa19fb8024
15 changed files with 77 additions and 110 deletions

View File

@@ -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);

View File

@@ -37,9 +37,6 @@ typedef enum {
} OutputCmd_t;
typedef struct {
uint8_t *data;
unsigned int len;
int uNoOfChannels;
int uSampleRate;
int uBitsPerSample;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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 =