Merge commit 'ce0972ecddef3eee3c03e393108e5728821e3e37' into release/2.4
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Oct 2014 21:14:07 +0000 (23:14 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Oct 2014 21:14:07 +0000 (23:14 +0200)
* commit 'ce0972ecddef3eee3c03e393108e5728821e3e37':
  mpeg12: Always invoke the get_format() callback

Conflicts:
libavcodec/mpeg12dec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/mpeg12dec.c

@@@ -1209,42 -1181,37 +1209,54 @@@ static const enum AVPixelFormat mpeg2_h
      AV_PIX_FMT_NONE
  };
  
+ static const enum AVPixelFormat mpeg12_pixfmt_list_422[] = {
+     AV_PIX_FMT_YUV422P,
+     AV_PIX_FMT_NONE
+ };
+ static const enum AVPixelFormat mpeg12_pixfmt_list_444[] = {
+     AV_PIX_FMT_YUV444P,
+     AV_PIX_FMT_NONE
+ };
 +static inline int uses_vdpau(AVCodecContext *avctx) {
 +    return avctx->pix_fmt == AV_PIX_FMT_VDPAU_MPEG1 || avctx->pix_fmt == AV_PIX_FMT_VDPAU_MPEG2;
 +}
 +
  static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
  {
      Mpeg1Context *s1  = avctx->priv_data;
      MpegEncContext *s = &s1->mpeg_enc_ctx;
+     const enum AVPixelFormat *pix_fmts;
  
 -#if FF_API_XVMC
 -FF_DISABLE_DEPRECATION_WARNINGS
 -    if (avctx->xvmc_acceleration)
 -        return ff_get_format(avctx, pixfmt_xvmc_mpg2_420);
 -FF_ENABLE_DEPRECATION_WARNINGS
 -#endif /* FF_API_XVMC */
 -
      if (s->chroma_format < 2)
-         return ff_thread_get_format(avctx,
-                                 avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
 -        pix_fmts = mpeg12_hwaccel_pixfmt_list_420;
++        pix_fmts = avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
 +                                mpeg1_hwaccel_pixfmt_list_420 :
-                                 mpeg2_hwaccel_pixfmt_list_420);
++                                mpeg2_hwaccel_pixfmt_list_420;
      else if (s->chroma_format == 2)
-         return AV_PIX_FMT_YUV422P;
+         pix_fmts = mpeg12_pixfmt_list_422;
      else
-         return AV_PIX_FMT_YUV444P;
+         pix_fmts = mpeg12_pixfmt_list_444;
 -    return ff_get_format(avctx, pix_fmts);
++    return ff_thread_get_format(avctx, pix_fmts);
 +}
 +
 +static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx)
 +{
 +    // until then pix_fmt may be changed right after codec init
 +    if (avctx->hwaccel || uses_vdpau(avctx))
 +        if (avctx->idct_algo == FF_IDCT_AUTO)
 +            avctx->idct_algo = FF_IDCT_SIMPLE;
 +
 +    if (avctx->hwaccel && avctx->pix_fmt == AV_PIX_FMT_XVMC) {
 +        Mpeg1Context *s1 = avctx->priv_data;
 +        MpegEncContext *s = &s1->mpeg_enc_ctx;
 +
 +        s->pack_pblocks = 1;
 +#if FF_API_XVMC
 +        avctx->xvmc_acceleration = 2;
 +#endif /* FF_API_XVMC */
 +    }
  }
  
  /* Call this function when we know all parameters.