[FFmpeg-devel] [PATCH 3/3] WIP: lavf/utils: try to avoid decoding a frame to get the codec parameters
Hendrik Leppkes
h.leppkes at gmail.com
Thu Oct 29 09:26:14 CET 2015
On Thu, Oct 29, 2015 at 8:34 AM, Clément Bœsch <u at pkh.me> wrote:
> On Wed, Oct 28, 2015 at 06:34:06PM +0100, Hendrik Leppkes wrote:
>> On Sat, Oct 17, 2015 at 10:34 PM, Matthieu Bouron
>> <matthieu.bouron at gmail.com> wrote:
>> > From: Matthieu Bouron <matthieu.bouron at stupeflix.com>
>> >
>> > Avoid decoding twice images such as jpeg and png, once in the
>> > avformat_find_stream_info and once when the actual decode is made.
>> >
>> > The decoder must honor the skip_frame option in order to skip
>> > decoding. For now the AVDISCARD_ALL flag is only set for the mjpeg and
>> > png decoders.
>> > ---
>> > libavformat/utils.c | 15 +++++++++++++++
>> > 1 file changed, 15 insertions(+)
>> >
>> > diff --git a/libavformat/utils.c b/libavformat/utils.c
>> > index 689473e..67dfffc 100644
>> > --- a/libavformat/utils.c
>> > +++ b/libavformat/utils.c
>> > @@ -2676,11 +2676,16 @@ static int has_codec_parameters(AVStream *st, const char **errmsg_ptr)
>> > static int try_decode_frame(AVFormatContext *s, AVStream *st, AVPacket *avpkt,
>> > AVDictionary **options)
>> > {
>> > + int i;
>> > const AVCodec *codec;
>> > int got_picture = 1, ret = 0;
>> > AVFrame *frame = av_frame_alloc();
>> > AVSubtitle subtitle;
>> > AVPacket pkt = *avpkt;
>> > + int skip_frame;
>> > + static const enum AVCodecID no_decode_codecs[] = {
>> > + AV_CODEC_ID_MJPEG, AV_CODEC_ID_PNG,
>> > + };
>>
>> Hardcoded lists of codecs in random places are never a good thing to have.
>> If this is a feature we agree to have, its codecs should just get an
>> internal capability that tells this code if it can parse all params
>> without decoding.
>>
>
> This list is supposed to be temporary (yes I know) until all other
> decoders that currently support AVDISCARD_ALL set the information field
> required for probing.
>
We all know what happens to temporary solutions, don't we. :)
Rather have a temporary internal capability, its not part of the
API/ABI or anything, but avoids such an ugly list inside generic code.
- Hendrik
More information about the ffmpeg-devel
mailing list