On Sat, May 9, 2015 at 7:26 PM, Diego Biurrun <di...@biurrun.de> wrote:
> On Thu, May 07, 2015 at 10:04:50PM +0200, Steve Lhomme wrote:
>> ---
>>  configure                   |  31 +++++++-
>>  libavcodec/Makefile         |   7 ++
>>  libavcodec/allcodecs.c      |   5 ++
>>  libavcodec/d3d11va.h        |  98 +++++++++++++++++++++++++
>>  libavcodec/dxva2.c          | 170 
>> ++++++++++++++++++++++++++++++++++++--------
>>  libavcodec/dxva2_h264.c     | 140 +++++++++++++++++++++++++-----------
>>  libavcodec/dxva2_hevc.c     | 110 +++++++++++++++++++++-------
>>  libavcodec/dxva2_internal.h |  32 +++++++--
>>  libavcodec/dxva2_mpeg2.c    | 104 +++++++++++++++++++++------
>>  libavcodec/dxva2_vc1.c      | 133 ++++++++++++++++++++++++++--------
>>  libavcodec/h264_slice.c     |   3 +
>>  libavcodec/hevc.c           |   3 +
>>  libavcodec/mpeg12dec.c      |   3 +
>>  libavcodec/vc1dec.c         |   3 +
>>  libavutil/pixdesc.c         |   6 ++
>>  libavutil/pixfmt.h          |   2 +
>>  16 files changed, 696 insertions(+), 154 deletions(-)
>>  create mode 100644 libavcodec/d3d11va.h
>
> https://www.libav.org/developer.html#New-codecs-or-formats-checklist
>
>> --- a/configure
>> +++ b/configure
>> @@ -134,6 +134,7 @@ Component options:
>>
>>  Hardware accelerators:
>>    --enable-dxva2           enable DXVA2 code
>> +  --enable-d3d11va        disable D3D11VA code [autodetect]
>
> Drop the autodetect, fix the alignment and move the entry up one line.
> Numbers come before letters in alphabetical order.
>
>> @@ -1207,6 +1208,7 @@ FEATURE_LIST="
>>
>>  HWACCEL_LIST="
>>      dxva2
>> +    d3d11va
>
> order
>
>> @@ -1397,6 +1399,7 @@ HEADERS_LIST="
>>      direct_h
>>      dlfcn_h
>>      dxva_h
>> +    d3d11_h
>
> same
>
>> @@ -1552,6 +1555,8 @@ HAVE_LIST="
>>      atomics_native
>>      dos_paths
>>      dxva2_lib
>> +    d3d11_cobj
>> +    d3d11va_lib
>
> same
>
>> @@ -1966,6 +1971,7 @@ zmbv_encoder_deps="zlib"
>>
>>  # hardware accelerators
>>  dxva2_deps="dxva2api_h"
>> +d3d11va_deps="d3d11_h dxva_h"
>
> same
>
>> @@ -4157,6 +4172,7 @@ check_header direct.h
>>  check_header dlfcn.h
>>  check_header dxva.h
>>  check_header dxva2api.h
>> +check_header d3d11.h
>
> order
>
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -3,6 +3,7 @@ NAME = avcodec
>>  HEADERS = avcodec.h                                                     \
>>            avfft.h                                                       \
>>            dv_profile.h                                                  \
>> +          d3d11va.h                                                     \
>
> same
>
>> --- /dev/null
>> +++ b/libavcodec/d3d11va.h
>> @@ -0,0 +1,98 @@
>> +
>> +#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600
>> +#undef _WIN32_WINNT
>> +#define _WIN32_WINNT 0x0600
>> +#endif
>
> This stanza also appears in dxva2.h, maybe it could be shared.

They are public headers and independent.

>> --- a/libavcodec/dxva2.c
>> +++ b/libavcodec/dxva2.c
>> @@ -60,8 +61,20 @@ int ff_dxva2_commit_buffer(AVCodecContext *avctx,
>> +#if CONFIG_D3D11VA
>> +    if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD) {
>> +        hr = 
>> ID3D11VideoContext_GetDecoderBuffer(D3D11VA_CONTEXT(ctx)->video_context,
>> +                                                 
>> D3D11VA_CONTEXT(ctx)->decoder,
>> +                                                 type,
>> +                                                 &dxva_size, &dxva_data);
>> +    }
>> +#endif
>> +#if CONFIG_DXVA2
>> +    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {
>> +        hr = IDirectXVideoDecoder_GetBuffer(DXVA2_CONTEXT(ctx)->decoder, 
>> type,
>> +                                            &dxva_data, &dxva_size);
>> +    }
>> +#endif
>
> nit: pointless {}, more below
>
>> @@ -70,10 +83,24 @@ int ff_dxva2_commit_buffer(AVCodecContext *avctx,
>> +#if CONFIG_D3D11VA
>> +        if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD) {
>> +            D3D11_VIDEO_DECODER_BUFFER_DESC *dsc11 = dsc;
>> +            memset(dsc11, 0, sizeof(*dsc11));
>
> You could zero-initialize instead of memsetting here.
>
>> +#if CONFIG_DXVA2
>> +        if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {
>> +            DXVA2_DecodeBufferDesc *dsc2 = dsc;
>> +            memset(dsc2, 0, sizeof(*dsc2));
>
> same
>
>> @@ -154,17 +240,39 @@ int ff_dxva2_common_end_frame(AVCodecContext *avctx, 
>> AVFrame *frame,
>>
>> +#if CONFIG_DXVA2
>> +    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {
>> +        DXVA2_DecodeExecuteParams exec = {
>> +            .NumCompBuffers = buffer_count,
>> +            .pCompressedBuffers = buffer2,
>> +            .pExtensionData = NULL,
>
> Please align the = for better readability.
>
>> --- a/libavcodec/dxva2_h264.c
>> +++ b/libavcodec/dxva2_h264.c
>> @@ -363,18 +379,45 @@ static int 
>> commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
>> +#if CONFIG_D3D11VA
>> +    if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD) {
>> +        D3D11_VIDEO_DECODER_BUFFER_DESC *dsc11 = bs;
>> +        memset(dsc11, 0, sizeof(*dsc11));
>> +#endif
>> +#if CONFIG_DXVA2
>> +    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {
>> +        DXVA2_DecodeBufferDesc *dsc2 = bs;
>> +        memset(dsc2, 0, sizeof(*dsc2));
>
> see above about memset vs. '= { 0 }'.
>
>> @@ -393,18 +436,20 @@ static int dxva2_h264_start_frame(AVCodecContext 
>> *avctx,
>>
>> -    if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0)
>> +    if (DXVA_CONTEXT_DECODER(avctx, ctx)==NULL ||
>> +        DXVA_CONTEXT_CFG(avctx, ctx)==NULL ||
>
> spaces around ==
>
>> --- a/libavcodec/dxva2_hevc.c
>> +++ b/libavcodec/dxva2_hevc.c
>> @@ -284,23 +300,50 @@ static int 
>> commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
>>
>> -    memset(bs, 0, sizeof(*bs));
>> -    bs->CompressedBufferType = DXVA2_BitStreamDateBufferType;
>> -    bs->DataSize             = current - dxva_data;
>> -    bs->NumMBsInBuffer       = 0;
>> +#if CONFIG_D3D11VA
>> +    if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD) {
>> +        D3D11_VIDEO_DECODER_BUFFER_DESC *dsc11 = bs;
>> +        memset(dsc11, 0, sizeof(*dsc11));
>> +#if CONFIG_DXVA2
>> +    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {
>> +        DXVA2_DecodeBufferDesc *dsc2 = bs;
>> +        memset(dsc2, 0, sizeof(*dsc2));
>
> see above
>
>> --- a/libavcodec/dxva2_internal.h
>> +++ b/libavcodec/dxva2_internal.h
>> @@ -35,13 +36,34 @@
>> +
>> +typedef union {
>> +    struct av_d3d11va_context  d3d11va;
>> +    struct dxva_context        dxva2;
>> +} av_dxva_context_t;
>
> The _t namespace is reserved by POSIX, you must not invade it.
>
> Diego
> _______________________________________________
> libav-devel mailing list
> libav-devel@libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to