diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-12-27 13:37:39 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-12-27 14:46:15 +0100 |
commit | 6f764d291121f4980b292cdaa537aa8fb10cb93b (patch) | |
tree | d5b576132ba517872c2bad8e8423a96e3d0bef3b | |
parent | a6ab9ed50d8a5b749f3e0a670e4fd6ee52d92b94 (diff) | |
parent | 737d35e33408263c04d7730f5487eed0d04938ba (diff) | |
download | ffmpeg-6f764d291121f4980b292cdaa537aa8fb10cb93b.tar.gz |
Merge commit '737d35e33408263c04d7730f5487eed0d04938ba'
* commit '737d35e33408263c04d7730f5487eed0d04938ba':
vdpau: add support for the H.264 High 4:4:4 Predictive profile
Conflicts:
libavcodec/vdpau_internal.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/vdpau.c | 4 | ||||
-rw-r--r-- | libavcodec/vdpau_h264.c | 19 | ||||
-rw-r--r-- | libavcodec/vdpau_internal.h | 11 |
3 files changed, 28 insertions, 6 deletions
diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c index 7578e62a86..6f9afa9fcc 100644 --- a/libavcodec/vdpau.c +++ b/libavcodec/vdpau.c @@ -288,7 +288,9 @@ int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame, #if FF_API_BUFS_VDPAU FF_DISABLE_DEPRECATION_WARNINGS - hwctx->info = pic_ctx->info; + av_assert0(sizeof(hwctx->info) >= sizeof(pic_ctx->info)); + memset(&hwctx->info, 0, sizeof(hwctx->info)); + memcpy(&hwctx->info, &pic_ctx->info, sizeof(pic_ctx->info)); hwctx->bitstream_buffers = pic_ctx->bitstream_buffers; hwctx->bitstream_buffers_used = pic_ctx->bitstream_buffers_used; hwctx->bitstream_buffers_allocated = pic_ctx->bitstream_buffers_allocated; diff --git a/libavcodec/vdpau_h264.c b/libavcodec/vdpau_h264.c index 0b2c0466b4..1736bbd178 100644 --- a/libavcodec/vdpau_h264.c +++ b/libavcodec/vdpau_h264.c @@ -123,6 +123,9 @@ static int vdpau_h264_start_frame(AVCodecContext *avctx, H264Picture *pic = h->cur_pic_ptr; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; VdpPictureInfoH264 *info = &pic_ctx->info.h264; +#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE + VdpPictureInfoH264Predictive *info2 = &pic_ctx->info.h264_predictive; +#endif /* init VdpPictureInfoH264 */ info->slice_count = 0; @@ -149,6 +152,10 @@ static int vdpau_h264_start_frame(AVCodecContext *avctx, info->log2_max_pic_order_cnt_lsb_minus4 = h->sps.poc_type ? 0 : h->sps.log2_max_poc_lsb - 4; info->delta_pic_order_always_zero_flag = h->sps.delta_pic_order_always_zero_flag; info->direct_8x8_inference_flag = h->sps.direct_8x8_inference_flag; +#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE + info2->qpprime_y_zero_transform_bypass_flag = h->sps.transform_bypass; + info2->separate_colour_plane_flag = h->sps.residual_color_transform_flag; +#endif info->entropy_coding_mode_flag = h->pps.cabac; info->pic_order_present_flag = h->pps.pic_order_present; info->deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present; @@ -228,6 +235,18 @@ static int vdpau_h264_init(AVCodecContext *avctx) profile = VDP_DECODER_PROFILE_H264_EXTENDED; break; #endif + case FF_PROFILE_H264_HIGH_10: + /* XXX: High 10 can be treated as High so long as only 8-bits per + * formats are supported. */ + profile = VDP_DECODER_PROFILE_H264_HIGH; + break; +#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE + case FF_PROFILE_H264_HIGH_422: + case FF_PROFILE_H264_HIGH_444_PREDICTIVE: + case FF_PROFILE_H264_CAVLC_444: + profile = VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE; + break; +#endif default: return AVERROR(ENOTSUP); } diff --git a/libavcodec/vdpau_internal.h b/libavcodec/vdpau_internal.h index e1ea4306f2..e5fe63dd19 100644 --- a/libavcodec/vdpau_internal.h +++ b/libavcodec/vdpau_internal.h @@ -44,16 +44,17 @@ static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic) struct vdpau_picture_context; #if CONFIG_VDPAU -#if !FF_API_BUFS_VDPAU -union AVVDPAUPictureInfo { +union VDPAUPictureInfo { VdpPictureInfoH264 h264; VdpPictureInfoMPEG1Or2 mpeg; VdpPictureInfoVC1 vc1; VdpPictureInfoMPEG4Part2 mpeg4; +#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE + VdpPictureInfoH264Predictive h264_predictive; +#endif }; -#else + #include "vdpau.h" -#endif typedef struct VDPAUHWContext { AVVDPAUContext context; @@ -92,7 +93,7 @@ struct vdpau_picture_context { /** * VDPAU picture information. */ - union AVVDPAUPictureInfo info; + union VDPAUPictureInfo info; /** * Allocated size of the bitstream_buffers table. |