|
|
|
@@ -546,9 +546,8 @@ static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, |
|
|
|
d->start_pts = AV_NOPTS_VALUE; |
|
|
|
} |
|
|
|
|
|
|
|
static int decoder_decode_frame(Decoder *d, void *fframe) { |
|
|
|
static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { |
|
|
|
int got_frame = 0; |
|
|
|
AVFrame *frame = fframe; |
|
|
|
|
|
|
|
d->flushed = 0; |
|
|
|
|
|
|
|
@@ -608,7 +607,7 @@ static int decoder_decode_frame(Decoder *d, void *fframe) { |
|
|
|
} |
|
|
|
break; |
|
|
|
case AVMEDIA_TYPE_SUBTITLE: |
|
|
|
ret = avcodec_decode_subtitle2(d->avctx, fframe, &got_frame, &d->pkt_temp); |
|
|
|
ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, &d->pkt_temp); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -1863,7 +1862,7 @@ static int get_video_frame(VideoState *is, AVFrame *frame) |
|
|
|
{ |
|
|
|
int got_picture; |
|
|
|
|
|
|
|
if ((got_picture = decoder_decode_frame(&is->viddec, frame)) < 0) |
|
|
|
if ((got_picture = decoder_decode_frame(&is->viddec, frame, NULL)) < 0) |
|
|
|
return -1; |
|
|
|
|
|
|
|
if (got_picture) { |
|
|
|
@@ -2219,7 +2218,7 @@ static int subtitle_thread(void *arg) |
|
|
|
if (!(sp = frame_queue_peek_writable(&is->subpq))) |
|
|
|
return 0; |
|
|
|
|
|
|
|
if ((got_subtitle = decoder_decode_frame(&is->subdec, &sp->sub)) < 0) |
|
|
|
if ((got_subtitle = decoder_decode_frame(&is->subdec, NULL, &sp->sub)) < 0) |
|
|
|
break; |
|
|
|
|
|
|
|
pts = 0; |
|
|
|
@@ -2483,7 +2482,7 @@ static int audio_decode_frame(VideoState *is) |
|
|
|
return resampled_data_size; |
|
|
|
} |
|
|
|
|
|
|
|
if ((got_frame = decoder_decode_frame(&is->auddec, is->frame)) < 0) |
|
|
|
if ((got_frame = decoder_decode_frame(&is->auddec, is->frame, NULL)) < 0) |
|
|
|
return -1; |
|
|
|
|
|
|
|
if (is->auddec.flushed) |
|
|
|
|