On Wed, 21 Oct 2015 16:07:08 +0200 Hendrik Leppkes <h.lepp...@gmail.com> wrote:
> On Wed, Oct 21, 2015 at 3:55 PM, Julian Scheel <jul...@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 <jul...@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. Oh, you're right. It's used in ffmal_update_format(), so this patch can only work if the decoder sends MMAL_EVENT_FORMAT_CHANGED on init, or if the entire decoding init is delayed and not done in AVCodec.init. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel