#include "avcodec.h"
#include "internal.h"
-#include "h264.h"
+#include "h264dec.h"
+#include "h264_ps.h"
#include "mpegutils.h"
#include "vdpau.h"
#include "vdpau_internal.h"
static void vdpau_h264_set_rf(VdpReferenceFrameH264 *rf, H264Picture *pic,
int pic_structure)
{
- VdpVideoSurface surface = ff_vdpau_get_surface_id(&pic->f);
+ VdpVideoSurface surface = ff_vdpau_get_surface_id(pic->f);
if (pic_structure == 0)
pic_structure = pic->reference;
if (!pic || !pic->reference)
continue;
pic_frame_idx = pic->long_ref ? pic->pic_id : pic->frame_num;
- surface_ref = ff_vdpau_get_surface_id(&pic->f);
+ surface_ref = ff_vdpau_get_surface_id(pic->f);
rf2 = &info->referenceFrames[0];
while (rf2 != rf) {
const uint8_t *buffer, uint32_t size)
{
H264Context * const h = avctx->priv_data;
+ const PPS *pps = h->ps.pps;
+ const SPS *sps = h->ps.sps;
H264Picture *pic = h->cur_pic_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
VdpPictureInfoH264 *info = &pic_ctx->info.h264;
info->field_order_cnt[0] = h264_foc(pic->field_poc[0]);
info->field_order_cnt[1] = h264_foc(pic->field_poc[1]);
info->is_reference = h->nal_ref_idc != 0;
- info->frame_num = h->frame_num;
+ info->frame_num = h->poc.frame_num;
info->field_pic_flag = h->picture_structure != PICT_FRAME;
info->bottom_field_flag = h->picture_structure == PICT_BOTTOM_FIELD;
- info->num_ref_frames = h->sps.ref_frame_count;
- info->mb_adaptive_frame_field_flag = h->sps.mb_aff && !info->field_pic_flag;
- info->constrained_intra_pred_flag = h->pps.constrained_intra_pred;
- info->weighted_pred_flag = h->pps.weighted_pred;
- info->weighted_bipred_idc = h->pps.weighted_bipred_idc;
- info->frame_mbs_only_flag = h->sps.frame_mbs_only_flag;
- info->transform_8x8_mode_flag = h->pps.transform_8x8_mode;
- info->chroma_qp_index_offset = h->pps.chroma_qp_index_offset[0];
- info->second_chroma_qp_index_offset = h->pps.chroma_qp_index_offset[1];
- info->pic_init_qp_minus26 = h->pps.init_qp - 26;
- info->num_ref_idx_l0_active_minus1 = h->pps.ref_count[0] - 1;
- info->num_ref_idx_l1_active_minus1 = h->pps.ref_count[1] - 1;
- info->log2_max_frame_num_minus4 = h->sps.log2_max_frame_num - 4;
- info->pic_order_cnt_type = h->sps.poc_type;
- 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;
+ info->num_ref_frames = sps->ref_frame_count;
+ info->mb_adaptive_frame_field_flag = sps->mb_aff && !info->field_pic_flag;
+ info->constrained_intra_pred_flag = pps->constrained_intra_pred;
+ info->weighted_pred_flag = pps->weighted_pred;
+ info->weighted_bipred_idc = pps->weighted_bipred_idc;
+ info->frame_mbs_only_flag = sps->frame_mbs_only_flag;
+ info->transform_8x8_mode_flag = pps->transform_8x8_mode;
+ info->chroma_qp_index_offset = pps->chroma_qp_index_offset[0];
+ info->second_chroma_qp_index_offset = pps->chroma_qp_index_offset[1];
+ info->pic_init_qp_minus26 = pps->init_qp - 26;
+ info->num_ref_idx_l0_active_minus1 = pps->ref_count[0] - 1;
+ info->num_ref_idx_l1_active_minus1 = pps->ref_count[1] - 1;
+ info->log2_max_frame_num_minus4 = sps->log2_max_frame_num - 4;
+ info->pic_order_cnt_type = sps->poc_type;
+ info->log2_max_pic_order_cnt_lsb_minus4 = sps->poc_type ? 0 : sps->log2_max_poc_lsb - 4;
+ info->delta_pic_order_always_zero_flag = sps->delta_pic_order_always_zero_flag;
+ info->direct_8x8_inference_flag = 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;
+ info2->qpprime_y_zero_transform_bypass_flag = sps->transform_bypass;
+ info2->separate_colour_plane_flag = 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;
- info->redundant_pic_cnt_present_flag = h->pps.redundant_pic_cnt_present;
+ info->entropy_coding_mode_flag = pps->cabac;
+ info->pic_order_present_flag = pps->pic_order_present;
+ info->deblocking_filter_control_present_flag = pps->deblocking_filter_parameters_present;
+ info->redundant_pic_cnt_present_flag = pps->redundant_pic_cnt_present;
- memcpy(info->scaling_lists_4x4, h->pps.scaling_matrix4,
+ memcpy(info->scaling_lists_4x4, pps->scaling_matrix4,
sizeof(info->scaling_lists_4x4));
- memcpy(info->scaling_lists_8x8[0], h->pps.scaling_matrix8[0],
+ memcpy(info->scaling_lists_8x8[0], pps->scaling_matrix8[0],
sizeof(info->scaling_lists_8x8[0]));
- memcpy(info->scaling_lists_8x8[1], h->pps.scaling_matrix8[3],
+ memcpy(info->scaling_lists_8x8[1], pps->scaling_matrix8[3],
sizeof(info->scaling_lists_8x8[1]));
vdpau_h264_set_reference_frames(avctx);
static int vdpau_h264_end_frame(AVCodecContext *avctx)
{
H264Context *h = avctx->priv_data;
+ H264SliceContext *sl = &h->slice_ctx[0];
H264Picture *pic = h->cur_pic_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
int val;
- val = ff_vdpau_common_end_frame(avctx, &pic->f, pic_ctx);
+ val = ff_vdpau_common_end_frame(avctx, pic->f, pic_ctx);
if (val < 0)
return val;
- ff_h264_draw_horiz_band(h, 0, h->avctx->height);
+ ff_h264_draw_horiz_band(h, sl, 0, h->avctx->height);
return 0;
}
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. */
+ /* XXX: High 10 can be treated as High so long as only 8 bits per
+ * format are supported. */
profile = VDP_DECODER_PROFILE_H264_HIGH;
break;
#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE