On Sat, May 9, 2015 at 7:26 PM, Diego Biurrun <[email protected]> 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
> [email protected]
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel