[FFmpeg-cvslog] vdpau: add support for the H.264 High 4:4:4 Predictive profile
Rémi Denis-Courmont
git at videolan.org
Sat Dec 27 14:54:42 CET 2014
ffmpeg | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Dec 19 19:15:05 2014 +0200| [737d35e33408263c04d7730f5487eed0d04938ba] | committer: Anton Khirnov
vdpau: add support for the H.264 High 4:4:4 Predictive profile
Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=737d35e33408263c04d7730f5487eed0d04938ba
---
libavcodec/vdpau_h264.c | 19 +++++++++++++++++++
libavcodec/vdpau_internal.h | 11 +++++------
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/libavcodec/vdpau_h264.c b/libavcodec/vdpau_h264.c
index 5ed1fff..742b648 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 16493b0..9cc9538 100644
--- a/libavcodec/vdpau_internal.h
+++ b/libavcodec/vdpau_internal.h
@@ -37,16 +37,15 @@ static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
return (uintptr_t)pic->data[3];
}
-#if !FF_API_BUFS_VDPAU
-union AVVDPAUPictureInfo {
+union VDPAUPictureInfo {
VdpPictureInfoH264 h264;
VdpPictureInfoMPEG1Or2 mpeg;
VdpPictureInfoVC1 vc1;
VdpPictureInfoMPEG4Part2 mpeg4;
-};
-#else
-#include "vdpau.h"
+#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE
+ VdpPictureInfoH264Predictive h264_predictive;
#endif
+};
typedef struct VDPAUHWContext {
AVVDPAUContext context;
@@ -85,7 +84,7 @@ struct vdpau_picture_context {
/**
* VDPAU picture information.
*/
- union AVVDPAUPictureInfo info;
+ union VDPAUPictureInfo info;
/**
* Allocated size of the bitstream_buffers table.
More information about the ffmpeg-cvslog
mailing list