[FFmpeg-devel] [PATCH] mmaldec: Set the output pix_fmt after detecting format

Hendrik Leppkes h.leppkes at gmail.com
Wed Oct 21 16:07:08 CEST 2015


On Wed, Oct 21, 2015 at 3:55 PM, Julian Scheel <julian at jusst.de> wrote:
> Wait for the first decoded frame to be returned by mmal before setting
> pix_fmt. This is important for avformat probing to work properly as it is one
> of the criterions to decide whether to decode a frame or not for probing.
>
> Signed-off-by: Julian Scheel <julian at jusst.de>
> ---
>  libavcodec/mmaldec.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c
> index 7db90d2..429990a 100644
> --- a/libavcodec/mmaldec.c
> +++ b/libavcodec/mmaldec.c
> @@ -338,11 +338,6 @@ static av_cold int ffmmal_init_decoder(AVCodecContext *avctx)
>          return AVERROR(ENOSYS);
>      }
>
> -    if ((ret = ff_get_format(avctx, avctx->codec->pix_fmts)) < 0)
> -        return ret;
> -
> -    avctx->pix_fmt = ret;
> -
>      if ((status = mmal_component_create(MMAL_COMPONENT_DEFAULT_VIDEO_DECODER, &ctx->decoder)))
>          goto fail;
>
> @@ -678,6 +673,11 @@ static int ffmmal_read_frame(AVCodecContext *avctx, AVFrame *frame, int *got_fra
>
>              av_log(avctx, AV_LOG_INFO, "Changing output format.\n");
>
> +            if ((ret = ff_get_format(avctx, avctx->codec->pix_fmts)) < 0)
> +                return ret;
> +
> +            avctx->pix_fmt = ret;
> +
>              if ((status = mmal_port_disable(decoder->output[0])))
>                  goto done;
>

pix_fmt is already used by the decoder before this point to decide if
mmal surfaces or memory buffers are to be used, changing it afterwards
will not have the same effect as doing it in init.

- Hendrik


More information about the ffmpeg-devel mailing list