I've a first patch, working with the software decoder. But it fails with the crystalhd decoder. If you know how to fix it.
Wallak. ----- Mail original ----- De: "Philip Langdale" <phil...@overt.org> À: "Marton Balint" <c...@passwd.hu> Cc: "FFmpeg development discussions and patches" <ffmpeg-devel@ffmpeg.org> Envoyé: Mardi 14 Mars 2017 04:40:34 Objet: Re: [FFmpeg-devel] The Crystalhd video decoder is broken - last ffmpeg good commit: 6d160afab2fa8d3bfb216fee96d3537ffc9e86e8 On Mon, 13 Mar 2017 19:39:35 -0700 Philip Langdale <phil...@overt.org> wrote: > On Tue, 14 Mar 2017 02:49:27 +0100 (CET) > wal...@free.fr wrote: > > > Indeed 7447ec91b5a692121b81a04c6501a5811d867775 is working; But I > > have the following errors with the last ffmpeg git state: > > [h264_crystalhd @ 0x7fda3c060500] This decoder requires using the > > avcodec_send_packet() API. Last message repeated 456 times ... > > > > I've 'bisected' this last issue; The last good commit (with ffplay > > -vcodec h264_crystalhd <file> working without error) is the > > following one: 234d3cbf469e9feef255e229202d4b029e66e9fe > > > > Is there a configuration flag to fix this issue? A software update > > is required? > > Heh - I switched the crystalhd decoder to the new send_packet API in > the next change, so that's entirely expected. CrystalHD basically > requires the new API as it allows for flexibility in how often frames > are returned vs submitted to the decoder; I only ever got it barely > working with the old API using vicious hacks that failed in many edge > cases. > > As it uses the new API, the application using the decoder must also > support the new API. 'ffmpeg' does, but I guess ffplay does not. My > first reaction is to ask why you're using ffplay. I'd recommend using > mpv - which is much more capable, and does support the new API; it's > what I use for all my testing. > Marton, Would you be interested in updating ffplay to use the new decode API? --phil _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
From 0a221c04973b988fda41d96e4e96f274f8f3caee Mon Sep 17 00:00:00 2001 From: wallak <wal...@free.fr> Date: Tue, 14 Mar 2017 21:46:16 +0100 Subject: [PATCH] ffplay: new send_packet API test. --- ffplay.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/ffplay.c b/ffplay.c index cf138dc515..486dc6e26b 100644 --- a/ffplay.c +++ b/ffplay.c @@ -583,7 +583,28 @@ static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { switch (d->avctx->codec_type) { case AVMEDIA_TYPE_VIDEO: - ret = avcodec_decode_video2(d->avctx, frame, &got_frame, &d->pkt_temp); +#define CONFIG_FFMPEGNEWAPISENDPACKET +#ifdef CONFIG_FFMPEGNEWAPISENDPACKET + { + int decoded = 0; + ret = avcodec_send_packet(d->avctx, &d->pkt_temp); + got_frame = 0; + if (ret >= 0 || ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { + if (ret >= 0) { decoded = d->pkt_temp.size; } + ret = avcodec_receive_frame(d->avctx, frame); + if (ret >= 0) + got_frame = 1; + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + ret = 0; + } else { + decoded = d->pkt_temp.size; + } + if (ret >= 0) ret = decoded; + } +#else /*CONFIG_FFMPEGNEWAPISENDPACKET*/ + ret = avcodec_decode_video2(d->avctx, frame, &got_frame, &d->pkt_temp); +#endif /*CONFIG_FFMPEGNEWAPISENDPACKET*/ + if (got_frame) { if (decoder_reorder_pts == -1) { frame->pts = av_frame_get_best_effort_timestamp(frame); @@ -593,7 +614,26 @@ static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { } break; case AVMEDIA_TYPE_AUDIO: +#ifdef CONFIG_FFMPEGNEWAPISENDPACKET + { + int decoded = 0; + ret = avcodec_send_packet(d->avctx, &d->pkt_temp); + got_frame = 0; + if (ret >= 0 || ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { + if (ret >= 0) { decoded = d->pkt_temp.size; } + ret = avcodec_receive_frame(d->avctx, frame); + if (ret >= 0) + got_frame = 1; + if (ret == AVERROR_EOF) + ret = 0; + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + ret = 0; + } + ret = decoded; + } +#else /*CONFIG_FFMPEGNEWAPISENDPACKET*/ ret = avcodec_decode_audio4(d->avctx, frame, &got_frame, &d->pkt_temp); +#endif /*CONFIG_FFMPEGNEWAPISENDPACKET*/ if (got_frame) { AVRational tb = (AVRational){1, frame->sample_rate}; if (frame->pts != AV_NOPTS_VALUE) -- 2.12.0
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel