libeplayer3/container_ffmpeg: don't modify AVPacket internals (I don't believe this actually hurts, but better safe than sorry)

This commit is contained in:
martii
2013-12-15 19:23:15 +01:00
parent 9b7139ada1
commit 4a4bb1e06f

View File

@@ -403,13 +403,15 @@ static void FFMPEGThread(Context_t * context)
break; // while break; // while
} }
long long int pts; long long int pts;
uint8_t *packet_data = packet.data;
int packet_size = packet.size;
Track_t *videoTrack = NULL; Track_t *videoTrack = NULL;
Track_t *audioTrack = NULL; Track_t *audioTrack = NULL;
Track_t *subtitleTrack = NULL; Track_t *subtitleTrack = NULL;
Track_t *dvbsubtitleTrack = NULL; Track_t *dvbsubtitleTrack = NULL;
Track_t *teletextTrack = NULL; Track_t *teletextTrack = NULL;
context->playback->readCount += packet.size; context->playback->readCount += packet_size;
int pid = avContext->streams[packet.stream_index]->id; int pid = avContext->streams[packet.stream_index]->id;
@@ -428,7 +430,7 @@ static void FFMPEGThread(Context_t * context)
if (context->manager->teletext->Command(context, MANAGER_GET_TRACK, &teletextTrack) < 0) if (context->manager->teletext->Command(context, MANAGER_GET_TRACK, &teletextTrack) < 0)
ffmpeg_err("error getting teletext track\n"); 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)) { if (videoTrack && (videoTrack->Id == pid)) {
currentVideoPts = videoTrack->pts = pts = calcPts(videoTrack->stream, packet.pts); currentVideoPts = videoTrack->pts = pts = calcPts(videoTrack->stream, packet.pts);
@@ -439,8 +441,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(200, "VideoTrack index = %d %lld\n", pid, currentVideoPts); ffmpeg_printf(200, "VideoTrack index = %d %lld\n", pid, currentVideoPts);
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = videoTrack->extraData; avOut.extradata = videoTrack->extraData;
avOut.extralen = videoTrack->extraSize; avOut.extralen = videoTrack->extraSize;
@@ -470,8 +472,8 @@ static void FFMPEGThread(Context_t * context)
extradata.uBitsPerSample = 16; extradata.uBitsPerSample = 16;
extradata.bLittleEndian = 1; extradata.bLittleEndian = 1;
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = (unsigned char *) &extradata; avOut.extradata = (unsigned char *) &extradata;
avOut.extralen = sizeof(extradata); avOut.extralen = sizeof(extradata);
@@ -505,7 +507,7 @@ static void FFMPEGThread(Context_t * context)
fprintf(stderr, "%s %d: avcodec_open2 failed\n", __func__, __LINE__); fprintf(stderr, "%s %d: avcodec_open2 failed\n", __func__, __LINE__);
} }
while (packet.size > 0) { while (packet_size > 0) {
int got_frame = 0; int got_frame = 0;
if (!decoded_frame) { if (!decoded_frame) {
if (!(decoded_frame = avcodec_alloc_frame())) { if (!(decoded_frame = avcodec_alloc_frame())) {
@@ -524,8 +526,8 @@ static void FFMPEGThread(Context_t * context)
break; break;
} }
packet.data += len; packet_data += len;
packet.size -= len; packet_size -= len;
if (!got_frame) if (!got_frame)
continue; continue;
@@ -622,8 +624,8 @@ static void FFMPEGThread(Context_t * context)
} else if (audioTrack->have_aacheader == 1) { } else if (audioTrack->have_aacheader == 1) {
ffmpeg_printf(200, "write audio aac\n"); ffmpeg_printf(200, "write audio aac\n");
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = audioTrack->aacbuf; avOut.extradata = audioTrack->aacbuf;
avOut.extralen = audioTrack->aacbuflen; avOut.extralen = audioTrack->aacbuflen;
@@ -637,8 +639,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_err("(aac) writing data to audio device failed\n"); ffmpeg_err("(aac) writing data to audio device failed\n");
#endif #endif
} else { } else {
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = NULL; avOut.extradata = NULL;
avOut.extralen = 0; avOut.extralen = 0;
@@ -673,7 +675,7 @@ static void FFMPEGThread(Context_t * context)
/*Hellmaster1024 if the duration is not stored in packet.duration or /*Hellmaster1024 if the duration is not stored in packet.duration or
packet.convergence_duration we need to calculate it any other way, for SSA it is stored in packet.convergence_duration we need to calculate it any other way, for SSA it is stored in
the Text line */ the Text line */
duration = getDurationFromSSALine(packet.data); duration = getDurationFromSSALine(packet_data);
} else { } else {
/* no clue yet */ /* no clue yet */
} }
@@ -719,8 +721,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(10, "videoPts %lld\n", currentVideoPts); ffmpeg_printf(10, "videoPts %lld\n", currentVideoPts);
data.data = packet.data; data.data = packet_data;
data.len = packet.size; data.len = packet_size;
data.extradata = subtitleTrack->extraData; data.extradata = subtitleTrack->extraData;
data.extralen = subtitleTrack->extraSize; data.extralen = subtitleTrack->extraSize;
data.pts = pts; data.pts = pts;
@@ -730,9 +732,9 @@ static void FFMPEGThread(Context_t * context)
} else { } else {
/* hopefully native text ;) */ /* hopefully native text ;) */
unsigned char *line = text_to_ass((char *) packet.data, pts / 90, unsigned char *line = text_to_ass((char *) packet_data, pts / 90,
duration); duration);
ffmpeg_printf(50, "text line is %s\n", (char *) packet.data); ffmpeg_printf(50, "text line is %s\n", (char *) packet_data);
ffmpeg_printf(50, "Sub line is %s\n", line); ffmpeg_printf(50, "Sub line is %s\n", line);
ffmpeg_printf(20, "videoPts %lld %f\n", currentVideoPts, currentVideoPts / 90000.0); ffmpeg_printf(20, "videoPts %lld %f\n", currentVideoPts, currentVideoPts / 90000.0);
SubtitleData_t data; SubtitleData_t data;
@@ -753,8 +755,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(200, "DvbSubTitle index = %d\n", pid); ffmpeg_printf(200, "DvbSubTitle index = %d\n", pid);
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = NULL; avOut.extradata = NULL;
avOut.extralen = 0; avOut.extralen = 0;
@@ -772,8 +774,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(200, "TeleText index = %d\n", pid); ffmpeg_printf(200, "TeleText index = %d\n", pid);
avOut.data = packet.data; avOut.data = packet_data;
avOut.len = packet.size; avOut.len = packet_size;
avOut.pts = pts; avOut.pts = pts;
avOut.extradata = NULL; avOut.extradata = NULL;
avOut.extralen = 0; avOut.extralen = 0;