From 659bc1dc194b6f70f5dd248036d3981c2b1c056f Mon Sep 17 00:00:00 2001 From: martii Date: Sun, 21 Jul 2013 19:02:58 +0200 Subject: [PATCH] libeplayer3/container_ffmpeg: initialize stream ids, if unset Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/034ab89f28ef2c1bd69ff7f3d681301a6fc8b3ec Author: martii Date: 2013-07-21 (Sun, 21 Jul 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libeplayer3/container/container_ffmpeg.c | 28 +++++++----------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/libeplayer3/container/container_ffmpeg.c b/libeplayer3/container/container_ffmpeg.c index 078262a..693ccd8 100644 --- a/libeplayer3/container/container_ffmpeg.c +++ b/libeplayer3/container/container_ffmpeg.c @@ -454,8 +454,7 @@ static void FFMPEGThread(Context_t *context) { ffmpeg_printf(200, "packet.size %d - index %d\n", packet.size, pid); - if (videoTrack != NULL) { - if (videoTrack->Id == pid) { + if (videoTrack && (videoTrack->Id == pid)) { currentVideoPts = videoTrack->pts = pts = calcPts(videoTrack->stream, packet.pts); if ((currentVideoPts > latestPts) && (currentVideoPts != INVALID_PTS_VALUE)) @@ -477,11 +476,7 @@ static void FFMPEGThread(Context_t *context) { if (context->output->video->Write(context, &avOut) < 0) { ffmpeg_err("writing data to video device failed\n"); } - } - } - - if (audioTrack != NULL) { - if (audioTrack->Id == pid) { + } else if (audioTrack && (audioTrack->Id == pid)) { currentAudioPts = audioTrack->pts = pts = calcPts(audioTrack->stream, packet.pts); if ((currentAudioPts > latestPts) && (!videoTrack)) @@ -534,7 +529,6 @@ static void FFMPEGThread(Context_t *context) { while(avpkt.size > 0) { - int got_frame = 0; if (!decoded_frame) { if (!(decoded_frame = avcodec_alloc_frame())) { @@ -659,7 +653,6 @@ static void FFMPEGThread(Context_t *context) { } else { - avOut.data = packet.data; avOut.len = packet.size; avOut.pts = pts; @@ -676,11 +669,9 @@ static void FFMPEGThread(Context_t *context) { ffmpeg_err("writing data to audio device failed\n"); } } - } } - if (subtitleTrack != NULL) { - if (subtitleTrack->Id == pid) { + if (subtitleTrack && (subtitleTrack->Id == pid)) { float duration=3.0; ffmpeg_printf(100, "subtitleTrack->stream %p \n", subtitleTrack->stream); @@ -785,10 +776,8 @@ static void FFMPEGThread(Context_t *context) { free(line); } } /* duration */ - } } - if (dvbsubtitleTrack != NULL) { - if (dvbsubtitleTrack->Id == pid) { + else if (dvbsubtitleTrack && (dvbsubtitleTrack->Id == pid)) { dvbsubtitleTrack->pts = pts = calcPts(dvbsubtitleTrack->stream, packet.pts); ffmpeg_printf(200, "DvbSubTitle index = %d\n",pid); @@ -808,10 +797,7 @@ static void FFMPEGThread(Context_t *context) { { //ffmpeg_err("writing data to dvbsubtitle fifo failed\n"); } - } - } - if (teletextTrack != NULL) { - if (teletextTrack->Id == pid) { + } else if (teletextTrack && (teletextTrack->Id == pid)) { teletextTrack->pts = pts = calcPts(teletextTrack->stream, packet.pts); ffmpeg_printf(200, "TeleText index = %d\n",pid); @@ -831,7 +817,6 @@ static void FFMPEGThread(Context_t *context) { { //ffmpeg_err("writing data to teletext fifo failed\n"); } - } } if (packet.data) @@ -1002,6 +987,9 @@ int container_ffmpeg_update_tracks(Context_t *context, char *filename) if (encoding != NULL) ffmpeg_printf(1, "%d. encoding = %s - version %d\n", n, encoding, version); + if (!stream->id) + stream->id = n; + /* some values in track are unset and therefor copyTrack segfaults. * so set it by default to NULL! */