mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 23:13:16 +02:00
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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user