Merge commit 'bf52f773913cf74bdf0d2c8c2cb4473fa1b7801e'
authorMichael Niedermayer <michael@niedermayer.cc>
Sat, 25 Jul 2015 22:51:04 +0000 (00:51 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 25 Jul 2015 22:59:57 +0000 (00:59 +0200)
* commit 'bf52f773913cf74bdf0d2c8c2cb4473fa1b7801e':
  lavc: add Intel libmfx-based MPEG2 decoder.

Conflicts:
configure
libavcodec/qsvdec_mpeg2.c

Some cosmetics merged, rest is related to the removed parser code and
thus not merged

Merged-by: Michael Niedermayer <michael@niedermayer.cc>
1  2 
configure
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/qsvdec_mpeg2.c

diff --cc configure
+++ b/configure
@@@ -2429,23 -2051,15 +2429,23 @@@ mpeg2_d3d11va_hwaccel_deps="d3d11va
  mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
  mpeg2_dxva2_hwaccel_deps="dxva2"
  mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
+ mpeg2_qsv_hwaccel_deps="libmfx"
++mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
  mpeg2_vaapi_hwaccel_deps="vaapi"
  mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
  mpeg2_vdpau_hwaccel_deps="vdpau"
  mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
- mpeg2_qsv_hwaccel_deps="libmfx"
- mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
 +mpeg2_xvmc_hwaccel_deps="xvmc"
 +mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
 +mpeg4_crystalhd_decoder_select="crystalhd"
  mpeg4_vaapi_hwaccel_deps="vaapi"
  mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
 +mpeg4_vdpau_decoder_deps="vdpau"
 +mpeg4_vdpau_decoder_select="mpeg4_decoder"
  mpeg4_vdpau_hwaccel_deps="vdpau"
  mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
 +msmpeg4_crystalhd_decoder_select="crystalhd"
 +vc1_crystalhd_decoder_select="crystalhd"
  vc1_d3d11va_hwaccel_deps="d3d11va"
  vc1_d3d11va_hwaccel_select="vc1_decoder"
  vc1_dxva2_hwaccel_deps="dxva2"
@@@ -363,10 -307,9 +363,10 @@@ OBJS-$(CONFIG_MPEG1VIDEO_DECODER)      
  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)      += mpeg12enc.o mpeg12.o
  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)      += mpeg12dec.o mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)      += mpeg12enc.o mpeg12.o
- OBJS-$(CONFIG_MPEG2_QSV_ENCODER)       += qsvenc_mpeg2.o
  OBJS-$(CONFIG_MPEG2_QSV_DECODER)       += qsvdec_mpeg2.o
+ OBJS-$(CONFIG_MPEG2_QSV_ENCODER)       += qsvenc_mpeg2.o
  OBJS-$(CONFIG_MPEG4_DECODER)           += xvididct.o
 +OBJS-$(CONFIG_MPL2_DECODER)            += mpl2dec.o ass.o
  OBJS-$(CONFIG_MSMPEG4V1_DECODER)       += msmpeg4dec.o msmpeg4.o msmpeg4data.o
  OBJS-$(CONFIG_MSMPEG4V2_DECODER)       += msmpeg4dec.o msmpeg4.o msmpeg4data.o
  OBJS-$(CONFIG_MSMPEG4V2_ENCODER)       += msmpeg4enc.o msmpeg4.o msmpeg4data.o
@@@ -86,15 -86,12 +86,15 @@@ void avcodec_register_all(void
      REGISTER_HWACCEL(H264_VDPAU,        h264_vdpau);
      REGISTER_HWACCEL(HEVC_D3D11VA,      hevc_d3d11va);
      REGISTER_HWACCEL(HEVC_DXVA2,        hevc_dxva2);
 +    REGISTER_HWACCEL(HEVC_VDPAU,        hevc_vdpau);
 +    REGISTER_HWACCEL(MPEG1_XVMC,        mpeg1_xvmc);
      REGISTER_HWACCEL(MPEG1_VDPAU,       mpeg1_vdpau);
 +    REGISTER_HWACCEL(MPEG2_XVMC,        mpeg2_xvmc);
      REGISTER_HWACCEL(MPEG2_D3D11VA,     mpeg2_d3d11va);
      REGISTER_HWACCEL(MPEG2_DXVA2,       mpeg2_dxva2);
+     REGISTER_HWACCEL(MPEG2_QSV,         mpeg2_qsv);
      REGISTER_HWACCEL(MPEG2_VAAPI,       mpeg2_vaapi);
      REGISTER_HWACCEL(MPEG2_VDPAU,       mpeg2_vdpau);
-     REGISTER_HWACCEL(MPEG2_QSV,         mpeg2_qsv);
      REGISTER_HWACCEL(MPEG4_VAAPI,       mpeg4_vaapi);
      REGISTER_HWACCEL(MPEG4_VDPAU,       mpeg4_vdpau);
      REGISTER_HWACCEL(VC1_D3D11VA,       vc1_d3d11va);
  #include "libavutil/opt.h"
  
  #include "avcodec.h"
 -#include "internal.h"
 -#include "qsv_internal.h"
  #include "qsvdec.h"
 -#include "qsv.h"
  
- typedef struct QSVMPVContext {
+ typedef struct QSVMPEG2Context {
      AVClass *class;
      QSVContext qsv;
- } QSVMPVContext;
 -
 -    AVFifoBuffer *packet_fifo;
 -
 -    AVPacket input_ref;
+ } QSVMPEG2Context;
  
 -static void qsv_clear_buffers(QSVMPEG2Context *s)
 -{
 -    AVPacket pkt;
 -    while (av_fifo_size(s->packet_fifo) >= sizeof(pkt)) {
 -        av_fifo_generic_read(s->packet_fifo, &pkt, sizeof(pkt), NULL);
 -        av_packet_unref(&pkt);
 -    }
 -
 -    av_packet_unref(&s->input_ref);
 -}
 -
  static av_cold int qsv_decode_close(AVCodecContext *avctx)
  {
-     QSVMPVContext *s = avctx->priv_data;
+     QSVMPEG2Context *s = avctx->priv_data;
  
      ff_qsv_decode_close(&s->qsv);
  
@@@ -49,10 -91,48 +49,10 @@@ static av_cold int qsv_decode_init(AVCo
  static int qsv_decode_frame(AVCodecContext *avctx, void *data,
                              int *got_frame, AVPacket *avpkt)
  {
-     QSVMPVContext *s = avctx->priv_data;
+     QSVMPEG2Context *s = avctx->priv_data;
      AVFrame *frame    = data;
 -    int ret;
 -
 -    /* buffer the input packet */
 -    if (avpkt->size) {
 -        AVPacket input_ref = { 0 };
 -
 -        if (av_fifo_space(s->packet_fifo) < sizeof(input_ref)) {
 -            ret = av_fifo_realloc2(s->packet_fifo,
 -                                   av_fifo_size(s->packet_fifo) + sizeof(input_ref));
 -            if (ret < 0)
 -                return ret;
 -        }
 -
 -        ret = av_packet_ref(&input_ref, avpkt);
 -        if (ret < 0)
 -            return ret;
 -        av_fifo_generic_write(s->packet_fifo, &input_ref, sizeof(input_ref), NULL);
 -    }
  
 -    /* process buffered data */
 -    while (!*got_frame) {
 -        /* prepare the input data -- convert to Annex B if needed */
 -        if (s->input_ref.size <= 0) {
 -            /* no more data */
 -            if (av_fifo_size(s->packet_fifo) < sizeof(AVPacket))
 -                return avpkt->size ? avpkt->size : ff_qsv_process_data(avctx, &s->qsv, frame, got_frame, avpkt);
 -
 -            av_packet_unref(&s->input_ref);
 -            av_fifo_generic_read(s->packet_fifo, &s->input_ref, sizeof(s->input_ref), NULL);
 -        }
 -
 -        ret = ff_qsv_process_data(avctx, &s->qsv, frame, got_frame, &s->input_ref);
 -        if (ret < 0)
 -            return ret;
 -
 -        s->input_ref.size -= ret;
 -        s->input_ref.data += ret;
 -    }
 -
 -    return avpkt->size;
 +    return ff_qsv_decode(avctx, &s->qsv, frame, got_frame, avpkt);
  }
  
  static void qsv_decode_flush(AVCodecContext *avctx)