static VdpStatus vlVdpDecoderRenderVC1(struct pipe_vc1_picture_desc *picture, VdpPictureInfoVC1 *picture_info) { VdpStatus r; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Decoding VC-1\n"); r = vlVdpGetReferenceFrame(picture_info->forward_reference, &picture->ref[0]); if (r != VDP_STATUS_OK) return r; r = vlVdpGetReferenceFrame(picture_info->backward_reference, &picture->ref[1]); if (r != VDP_STATUS_OK) return r; picture->slice_count = picture_info->slice_count; picture->picture_type = picture_info->picture_type; picture->frame_coding_mode = picture_info->frame_coding_mode; picture->postprocflag = picture_info->postprocflag; picture->pulldown = picture_info->pulldown; picture->interlace = picture_info->interlace; picture->tfcntrflag = picture_info->tfcntrflag; picture->finterpflag = picture_info->finterpflag; picture->psf = picture_info->psf; picture->dquant = picture_info->dquant; picture->panscan_flag = picture_info->panscan_flag; picture->refdist_flag = picture_info->refdist_flag; picture->quantizer = picture_info->quantizer; picture->extended_mv = picture_info->extended_mv; picture->extended_dmv = picture_info->extended_dmv; picture->overlap = picture_info->overlap; picture->vstransform = picture_info->vstransform; picture->loopfilter = picture_info->loopfilter; picture->fastuvmc = picture_info->fastuvmc; picture->range_mapy_flag = picture_info->range_mapy_flag; picture->range_mapy = picture_info->range_mapy; picture->range_mapuv_flag = picture_info->range_mapuv_flag; picture->range_mapuv = picture_info->range_mapuv; picture->multires = picture_info->multires; picture->syncmarker = picture_info->syncmarker; picture->rangered = picture_info->rangered; picture->maxbframes = picture_info->maxbframes; picture->deblockEnable = picture_info->deblockEnable; picture->pquant = picture_info->pquant; return VDP_STATUS_OK; }
static VdpStatus vlVdpDecoderRenderH264(struct pipe_h264_picture_desc *picture, VdpPictureInfoH264 *picture_info) { unsigned i; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Decoding H264\n"); picture->slice_count = picture_info->slice_count; picture->field_order_cnt[0] = picture_info->field_order_cnt[0]; picture->field_order_cnt[1] = picture_info->field_order_cnt[1]; picture->is_reference = picture_info->is_reference; picture->frame_num = picture_info->frame_num; picture->field_pic_flag = picture_info->field_pic_flag; picture->bottom_field_flag = picture_info->bottom_field_flag; picture->num_ref_frames = picture_info->num_ref_frames; picture->mb_adaptive_frame_field_flag = picture_info->mb_adaptive_frame_field_flag; picture->constrained_intra_pred_flag = picture_info->constrained_intra_pred_flag; picture->weighted_pred_flag = picture_info->weighted_pred_flag; picture->weighted_bipred_idc = picture_info->weighted_bipred_idc; picture->frame_mbs_only_flag = picture_info->frame_mbs_only_flag; picture->transform_8x8_mode_flag = picture_info->transform_8x8_mode_flag; picture->chroma_qp_index_offset = picture_info->chroma_qp_index_offset; picture->second_chroma_qp_index_offset = picture_info->second_chroma_qp_index_offset; picture->pic_init_qp_minus26 = picture_info->pic_init_qp_minus26; picture->num_ref_idx_l0_active_minus1 = picture_info->num_ref_idx_l0_active_minus1; picture->num_ref_idx_l1_active_minus1 = picture_info->num_ref_idx_l1_active_minus1; picture->log2_max_frame_num_minus4 = picture_info->log2_max_frame_num_minus4; picture->pic_order_cnt_type = picture_info->pic_order_cnt_type; picture->log2_max_pic_order_cnt_lsb_minus4 = picture_info->log2_max_pic_order_cnt_lsb_minus4; picture->delta_pic_order_always_zero_flag = picture_info->delta_pic_order_always_zero_flag; picture->direct_8x8_inference_flag = picture_info->direct_8x8_inference_flag; picture->entropy_coding_mode_flag = picture_info->entropy_coding_mode_flag; picture->pic_order_present_flag = picture_info->pic_order_present_flag; picture->deblocking_filter_control_present_flag = picture_info->deblocking_filter_control_present_flag; picture->redundant_pic_cnt_present_flag = picture_info->redundant_pic_cnt_present_flag; memcpy(picture->scaling_lists_4x4, picture_info->scaling_lists_4x4, 6*16); memcpy(picture->scaling_lists_8x8, picture_info->scaling_lists_8x8, 2*64); for (i = 0; i < 16; ++i) { VdpStatus ret = vlVdpGetReferenceFrame ( picture_info->referenceFrames[i].surface, &picture->ref[i] ); if (ret != VDP_STATUS_OK) return ret; picture->is_long_term[i] = picture_info->referenceFrames[i].is_long_term; picture->top_is_reference[i] = picture_info->referenceFrames[i].top_is_reference; picture->bottom_is_reference[i] = picture_info->referenceFrames[i].bottom_is_reference; picture->field_order_cnt_list[i][0] = picture_info->referenceFrames[i].field_order_cnt[0]; picture->field_order_cnt_list[i][1] = picture_info->referenceFrames[i].field_order_cnt[1]; picture->frame_num_list[i] = picture_info->referenceFrames[i].frame_idx; } return VDP_STATUS_OK; }
/** * Decode a mpeg 4 video. */ static VdpStatus vlVdpDecoderRenderMpeg4(struct pipe_mpeg4_picture_desc *picture, VdpPictureInfoMPEG4Part2 *picture_info) { VdpStatus r; unsigned i; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Decoding MPEG4\n"); r = vlVdpGetReferenceFrame(picture_info->forward_reference, &picture->ref[0]); if (r != VDP_STATUS_OK) return r; r = vlVdpGetReferenceFrame(picture_info->backward_reference, &picture->ref[1]); if (r != VDP_STATUS_OK) return r; for (i = 0; i < 2; ++i) { picture->trd[i] = picture_info->trd[i]; picture->trb[i] = picture_info->trb[i]; } picture->vop_time_increment_resolution = picture_info->vop_time_increment_resolution; picture->vop_coding_type = picture_info->vop_coding_type; picture->vop_fcode_forward = picture_info->vop_fcode_forward; picture->vop_fcode_backward = picture_info->vop_fcode_backward; picture->resync_marker_disable = picture_info->resync_marker_disable; picture->interlaced = picture_info->interlaced; picture->quant_type = picture_info->quant_type; picture->quarter_sample = picture_info->quarter_sample; picture->short_video_header = picture_info->short_video_header; picture->rounding_control = picture_info->rounding_control; picture->alternate_vertical_scan_flag = picture_info->alternate_vertical_scan_flag; picture->top_field_first = picture_info->top_field_first; picture->intra_matrix = picture_info->intra_quantizer_matrix; picture->non_intra_matrix = picture_info->non_intra_quantizer_matrix; return VDP_STATUS_OK; }
/** * Decode a mpeg 1/2 video. */ static VdpStatus vlVdpDecoderRenderMpeg12(struct pipe_mpeg12_picture_desc *picture, VdpPictureInfoMPEG1Or2 *picture_info) { VdpStatus r; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Decoding MPEG12\n"); r = vlVdpGetReferenceFrame(picture_info->forward_reference, &picture->ref[0]); if (r != VDP_STATUS_OK) return r; r = vlVdpGetReferenceFrame(picture_info->backward_reference, &picture->ref[1]); if (r != VDP_STATUS_OK) return r; picture->picture_coding_type = picture_info->picture_coding_type; picture->picture_structure = picture_info->picture_structure; picture->frame_pred_frame_dct = picture_info->frame_pred_frame_dct; picture->q_scale_type = picture_info->q_scale_type; picture->alternate_scan = picture_info->alternate_scan; picture->intra_vlc_format = picture_info->intra_vlc_format; picture->concealment_motion_vectors = picture_info->concealment_motion_vectors; picture->intra_dc_precision = picture_info->intra_dc_precision; picture->f_code[0][0] = picture_info->f_code[0][0] - 1; picture->f_code[0][1] = picture_info->f_code[0][1] - 1; picture->f_code[1][0] = picture_info->f_code[1][0] - 1; picture->f_code[1][1] = picture_info->f_code[1][1] - 1; picture->num_slices = picture_info->slice_count; picture->top_field_first = picture_info->top_field_first; picture->full_pel_forward_vector = picture_info->full_pel_forward_vector; picture->full_pel_backward_vector = picture_info->full_pel_backward_vector; picture->intra_matrix = picture_info->intra_quantizer_matrix; picture->non_intra_matrix = picture_info->non_intra_quantizer_matrix; return VDP_STATUS_OK; }