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

Origin commit data
------------------
Branch: master
Commit: 4a4bb1e06f
Author: martii <m4rtii@gmx.de>
Date: 2013-12-15 (Sun, 15 Dec 2013)


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

------------------
This commit was generated by Migit
This commit is contained in:
martii
2013-12-15 19:23:15 +01:00
parent e220f43813
commit 6a3d250949

View File

@@ -403,13 +403,15 @@ static void FFMPEGThread(Context_t * context)
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 *dvbsubtitleTrack = NULL;
Track_t *teletextTrack = NULL;
context->playback->readCount += packet.size;
context->playback->readCount += packet_size;
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)
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 = 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);
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = videoTrack->extraData;
avOut.extralen = videoTrack->extraSize;
@@ -470,8 +472,8 @@ static void FFMPEGThread(Context_t * context)
extradata.uBitsPerSample = 16;
extradata.bLittleEndian = 1;
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = (unsigned char *) &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__);
}
while (packet.size > 0) {
while (packet_size > 0) {
int got_frame = 0;
if (!decoded_frame) {
if (!(decoded_frame = avcodec_alloc_frame())) {
@@ -524,8 +526,8 @@ static void FFMPEGThread(Context_t * context)
break;
}
packet.data += len;
packet.size -= len;
packet_data += len;
packet_size -= len;
if (!got_frame)
continue;
@@ -622,8 +624,8 @@ static void FFMPEGThread(Context_t * context)
} else if (audioTrack->have_aacheader == 1) {
ffmpeg_printf(200, "write audio aac\n");
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = audioTrack->aacbuf;
avOut.extralen = audioTrack->aacbuflen;
@@ -637,8 +639,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_err("(aac) writing data to audio device failed\n");
#endif
} else {
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = NULL;
avOut.extralen = 0;
@@ -673,7 +675,7 @@ static void FFMPEGThread(Context_t * context)
/*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
the Text line */
duration = getDurationFromSSALine(packet.data);
duration = getDurationFromSSALine(packet_data);
} else {
/* no clue yet */
}
@@ -719,8 +721,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(10, "videoPts %lld\n", currentVideoPts);
data.data = packet.data;
data.len = packet.size;
data.data = packet_data;
data.len = packet_size;
data.extradata = subtitleTrack->extraData;
data.extralen = subtitleTrack->extraSize;
data.pts = pts;
@@ -730,9 +732,9 @@ static void FFMPEGThread(Context_t * context)
} else {
/* 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);
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(20, "videoPts %lld %f\n", currentVideoPts, currentVideoPts / 90000.0);
SubtitleData_t data;
@@ -753,8 +755,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(200, "DvbSubTitle index = %d\n", pid);
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = NULL;
avOut.extralen = 0;
@@ -772,8 +774,8 @@ static void FFMPEGThread(Context_t * context)
ffmpeg_printf(200, "TeleText index = %d\n", pid);
avOut.data = packet.data;
avOut.len = packet.size;
avOut.data = packet_data;
avOut.len = packet_size;
avOut.pts = pts;
avOut.extradata = NULL;
avOut.extralen = 0;