Commit 6f764d29 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '737d35e3'

* commit '737d35e3':
  vdpau: add support for the H.264 High 4:4:4 Predictive profile

Conflicts:
	libavcodec/vdpau_internal.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents a6ab9ed5 737d35e3
...@@ -288,7 +288,9 @@ int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame, ...@@ -288,7 +288,9 @@ int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame,
#if FF_API_BUFS_VDPAU #if FF_API_BUFS_VDPAU
FF_DISABLE_DEPRECATION_WARNINGS 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 = pic_ctx->bitstream_buffers;
hwctx->bitstream_buffers_used = pic_ctx->bitstream_buffers_used; hwctx->bitstream_buffers_used = pic_ctx->bitstream_buffers_used;
hwctx->bitstream_buffers_allocated = pic_ctx->bitstream_buffers_allocated; hwctx->bitstream_buffers_allocated = pic_ctx->bitstream_buffers_allocated;
......
...@@ -123,6 +123,9 @@ static int vdpau_h264_start_frame(AVCodecContext *avctx, ...@@ -123,6 +123,9 @@ static int vdpau_h264_start_frame(AVCodecContext *avctx,
H264Picture *pic = h->cur_pic_ptr; H264Picture *pic = h->cur_pic_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
VdpPictureInfoH264 *info = &pic_ctx->info.h264; VdpPictureInfoH264 *info = &pic_ctx->info.h264;
#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE
VdpPictureInfoH264Predictive *info2 = &pic_ctx->info.h264_predictive;
#endif
/* init VdpPictureInfoH264 */ /* init VdpPictureInfoH264 */
info->slice_count = 0; info->slice_count = 0;
...@@ -149,6 +152,10 @@ static int vdpau_h264_start_frame(AVCodecContext *avctx, ...@@ -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->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->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; 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->entropy_coding_mode_flag = h->pps.cabac;
info->pic_order_present_flag = h->pps.pic_order_present; info->pic_order_present_flag = h->pps.pic_order_present;
info->deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present; info->deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present;
...@@ -227,6 +234,18 @@ static int vdpau_h264_init(AVCodecContext *avctx) ...@@ -227,6 +234,18 @@ static int vdpau_h264_init(AVCodecContext *avctx)
case FF_PROFILE_H264_EXTENDED: case FF_PROFILE_H264_EXTENDED:
profile = VDP_DECODER_PROFILE_H264_EXTENDED; profile = VDP_DECODER_PROFILE_H264_EXTENDED;
break; 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 #endif
default: default:
return AVERROR(ENOTSUP); return AVERROR(ENOTSUP);
......
...@@ -44,16 +44,17 @@ static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic) ...@@ -44,16 +44,17 @@ static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
struct vdpau_picture_context; struct vdpau_picture_context;
#if CONFIG_VDPAU #if CONFIG_VDPAU
#if !FF_API_BUFS_VDPAU union VDPAUPictureInfo {
union AVVDPAUPictureInfo {
VdpPictureInfoH264 h264; VdpPictureInfoH264 h264;
VdpPictureInfoMPEG1Or2 mpeg; VdpPictureInfoMPEG1Or2 mpeg;
VdpPictureInfoVC1 vc1; VdpPictureInfoVC1 vc1;
VdpPictureInfoMPEG4Part2 mpeg4; VdpPictureInfoMPEG4Part2 mpeg4;
#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE
VdpPictureInfoH264Predictive h264_predictive;
#endif
}; };
#else
#include "vdpau.h" #include "vdpau.h"
#endif
typedef struct VDPAUHWContext { typedef struct VDPAUHWContext {
AVVDPAUContext context; AVVDPAUContext context;
...@@ -92,7 +93,7 @@ struct vdpau_picture_context { ...@@ -92,7 +93,7 @@ struct vdpau_picture_context {
/** /**
* VDPAU picture information. * VDPAU picture information.
*/ */
union AVVDPAUPictureInfo info; union VDPAUPictureInfo info;
/** /**
* Allocated size of the bitstream_buffers table. * Allocated size of the bitstream_buffers table.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment