vsp_vp8.c revision 233384d7e88c1295775705f074fbe3fd2e57ff35
1ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo/* 2ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * 4ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * Permission is hereby granted, free of charge, to any person obtaining a 5ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * copy of this software and associated documentation files (the 6ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * "Software"), to deal in the Software without restriction, including 7ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * without limitation the rights to use, copy, modify, merge, publish, 8ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * distribute, sub license, and/or sell copies of the Software, and to 9ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * permit persons to whom the Software is furnished to do so, subject to 10ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * the following conditions: 11ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * 12ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * The above copyright notice and this permission notice (including the 13ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * next paragraph) shall be included in all copies or substantial portions 14ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * of the Software. 15ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * 16ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 20ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * 24ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * Authors: 25ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * Zhangfei Zhang <zhangfei.zhang@intel.com> 26ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * Mingruo Sun <mingruo.sun@intel.com> 27ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo * 28ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo */ 29ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "vsp_VPP.h" 30ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "vsp_vp8.h" 31ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "psb_buffer.h" 32ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "psb_surface.h" 33ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "vsp_cmdbuf.h" 34ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "psb_drv_debug.h" 35ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#include "va/va_enc_vp8.h" 36ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 37ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define INIT_DRIVER_DATA psb_driver_data_p driver_data = (psb_driver_data_p) ctx->pDriverData; 38ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define INIT_CONTEXT_VPP context_VPP_p ctx = (context_VPP_p) obj_context->format_data; 39ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define CONFIG(id) ((object_config_p) object_heap_lookup( &driver_data->config_heap, id )) 40ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define CONTEXT(id) ((object_context_p) object_heap_lookup( &driver_data->context_heap, id )) 41ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define BUFFER(id) ((object_buffer_p) object_heap_lookup( &driver_data->buffer_heap, id )) 42ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 43ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define SURFACE(id) ((object_surface_p) object_heap_lookup( &ctx->obj_context->driver_data->surface_heap, id )) 44ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 45ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define KB 1024 46ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define MB (KB * KB) 47901ada31b87b21f8fd87f64597581f55830f2669Sun, Mingruo#define VSP_VP8ENC_STATE_SIZE (1*MB) 48ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 49ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define ALIGN_TO_128(value) ((value + 128 - 1) & ~(128 - 1)) 50ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 51ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define REF_FRAME_WIDTH 1920 52ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define REF_FRAME_HEIGHT 1088 53ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define REF_FRAME_BORDER 32 54ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 5519fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo#define VP8_ENC_CBR 0 5619fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo#define VP8_ENC_CBR_HRD 1 579ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 58ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define XMEM_FRAME_BUFFER_SIZE_IN_BYTE ((REF_FRAME_WIDTH + 2 * REF_FRAME_BORDER) * (REF_FRAME_HEIGHT + 2 * REF_FRAME_BORDER) + \ 59ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 2 * ((REF_FRAME_WIDTH + 2 * REF_FRAME_BORDER) >> 1) * (REF_FRAME_HEIGHT / 2 + REF_FRAME_BORDER)) // Allocated for HD 60ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 61ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruoenum filter_status { 62ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo FILTER_DISABLED = 0, 63ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo FILTER_ENABLED 64ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo}; 65ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 6620b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruotypedef struct _Ref_frame_surface { 6720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo struct VssProcPictureVP8 ref_frame_buffers[4]; 6820b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo} ref_frame_surface; 6920b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo 70ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define FUNCTION_NAME \ 71ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo printf("ENTER %s.\n",__FUNCTION__); 72ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 73ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define EXIT_FUNCTION_NAME \ 74ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo printf("EXIT %s.\n",__FUNCTION__); 75ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 76ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 774dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhatypedef union{ 784dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha struct { 794dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha /* force this frame to be a keyframe */ 804dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int force_kf : 1; 81233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the last frame */ 824dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_ref_last : 1; 83233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the golden frame */ 844dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_ref_gf : 1; 85233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the alternate reference frame */ 864dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_ref_arf : 1; 874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 884dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int upd_last : 1; 894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int upd_gf : 2; 904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int upd_arf : 2; 914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_upd_last : 1; 924dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_upd_gf : 1; 934dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_upd_arf : 1; 944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int no_upd_entropy : 1; 954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } bits; 964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha unsigned int value; 974dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } vp8_fw_pic_flags; 984dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 100ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_DestroyContext(object_context_p obj_context); 101ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 102ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp__VP8_check_legal_picture(object_context_p obj_context, object_config_p obj_config); 103ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 104ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_QueryConfigAttributes( 105ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAProfile profile, 106ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEntrypoint entrypoint, 107ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAConfigAttrib *attrib_list, 108ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_attribs) 109ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 1109ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo int i; 1119ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s\n", __FUNCTION__); 1129ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 1139ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo for (i = 0; i < num_attribs; i++) { 1149ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo switch (attrib_list[i].type) { 115233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha case VAConfigAttribRTFormat: 116233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 117233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha case VAConfigAttribRateControl: 118233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha attrib_list[i].value = VA_RC_CBR | VA_RC_VBR; 119233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 120233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha case VAConfigAttribEncAutoReference: 121233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha attrib_list[i].value = 1; 122233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 123233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha case VAConfigAttribEncMaxRefFrames: 124233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha attrib_list[i].value = 4; 125233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 126233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 127233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha default: 128233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; 129233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 130233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 1319ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 132ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 133ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 134ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_ValidateConfig( 135ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 136ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 137ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 1389ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s\n", __FUNCTION__); 1399ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 140ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Check all attributes */ 141ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 142ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_config->attrib_list[i].type) { 143ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAConfigAttribRTFormat: 144ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Ignore */ 145ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 1469ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribRateControl: 147233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 1489ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncAutoReference: 149233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 1509ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncMaxRefFrames: 151233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 152ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 153ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 154ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; 155ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 156ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 157ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 158ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 159ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 160ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 161233384d7e88c1295775705f074fbe3fd2e57ff35zhangzhavoid vsp_VP8_set_default_params(struct VssVp8encSequenceParameterBuffer *vp8_seq) 162233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha{ 163233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 164233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->frame_width= 1280; 165233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->frame_height= 720; 166233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->frame_rate= 30; 167233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->error_resilient= 0; 168233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->num_token_partitions= 2; 169233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->kf_mode= 1; 170233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->kf_min_dist= 0; 171233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->kf_max_dist= 30; 172233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_target_bitrate= 2000; 173233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_min_quantizer= 4; 174233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_max_quantizer= 63; 175233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_undershoot_pct= 100; 176233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_overshoot_pct= 100; 177233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_end_usage= VP8_ENC_CBR_HRD; 178233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_buf_sz= 6000; 179233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_buf_initial_sz= 4000; 180233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->rc_buf_optimal_sz= 5000; 181233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->max_intra_rate= 0; 182233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->cyclic_intra_refresh= 0; 183233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->concatenate_partitions= 1; 184233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->recon_buffer_mode= vss_vp8enc_seq_param_recon_buffer_mode_per_seq; 185233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->ts_number_layers = 1; 186233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 187233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha} 188233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 189ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_CreateContext( 190ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 191ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 192ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 193ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 1949ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo /* currently vp8 will use vpp's context since they will use the same cmdbuf */ 195ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx; 196ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 197ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 198ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx = (context_VPP_p) calloc(1, sizeof(struct context_VPP_s)); 199ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx) { 200ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 201ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 202ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 203ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 204ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 205233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //set default VP8 sequence params 206233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vsp_VP8_set_default_params(&ctx->vp8_seq_param); 207233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->temporal_layer_number = 1; 208233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 2099ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 210233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (obj_config->attrib_list[i].type == VAConfigAttribRateControl) { 211233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->vp8_seq_param.rc_end_usage = 212233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha obj_config->attrib_list[i].value == VA_RC_VBR ? 213233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VP8_ENC_CBR: 214233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VP8_ENC_CBR_HRD; 215233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 216233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 217233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (obj_config->attrib_list[i].type == VAConfigAttribEncRateControlExt) { 218233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VAConfigAttribValEncRateControlExt rc; 219233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha rc.value=obj_config->attrib_list[i].value; 220233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->temporal_layer_number = 221233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->vp8_seq_param.ts_number_layers = rc.bits.num_temporal_layers_minus1 + 1; 222233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 2239ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 224ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 225ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set size */ 226ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz = 0; 227ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encPictureParameterBuffer)); 228ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->pic_param_sz; 229ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encSequenceParameterBuffer)); 230ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->seq_param_sz; 23120b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->ref_param_sz = ALIGN_TO_128(sizeof(ref_frame_surface)); 23220b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->param_sz += ctx->ref_param_sz; 233ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 234ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set offset */ 235ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset = 0; 236ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_offset = ctx->pic_param_sz; 23720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->ref_param_offset = ctx->pic_param_sz + ctx->seq_param_sz; 238ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 239025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo 240ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = (psb_buffer_p) calloc(1, sizeof(struct psb_buffer_s)); 241ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx->context_buf) { 242ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 243ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 244ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 245ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 246ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 247ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_create(obj_context->driver_data, VSP_VP8ENC_STATE_SIZE, psb_bt_vpu_only, ctx->context_buf); 248ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 249ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) { 250ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 251ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 252ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 253ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = (void*) ctx; 254ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->obj_context = obj_context; 2559ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 256ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 257ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 258ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruoout: 259ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext(obj_context); 260ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 261ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx) 262ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx); 263ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 264ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 265ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 266ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 267ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_DestroyContext( 268ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 269ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 270ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 271ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 272ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->context_buf) { 273ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_destroy(ctx->context_buf); 274ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->context_buf); 275ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = NULL; 276ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 277ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 278ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->filters) { 279ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->filters); 280ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->num_filters = 0; 281ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 282ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 283ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(obj_context->format_data); 284ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = NULL; 285ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 286ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 287ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_seqence_param( 2881e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo psb_driver_data_p driver_data, 289ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 290ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer) 291ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 292ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 293ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 294ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 295ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 296233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha int ref_frame_width, ref_frame_height,ref_chroma_height, ref_size; 297ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 298ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncSequenceParameterBufferVP8 *va_seq = 299ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (VAEncSequenceParameterBufferVP8 *) obj_buffer->buffer_data; 300233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha struct VssVp8encSequenceParameterBuffer * seq = &ctx->vp8_seq_param; 301233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha struct VssVp8encSequenceParameterBuffer *seq_to_firmware = 302ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 303ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 30420b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ref_frame_surface *ref = 305233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha (struct ref_frame_surface*)cmdbuf->ref_param_p; 306ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 307ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_width = va_seq->frame_width; 308ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_height = va_seq->frame_height; 3099ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_target_bitrate = va_seq->bits_per_second / 1000; 310233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->max_intra_rate = 100 * ctx->max_frame_size / 311233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha (va_seq->bits_per_second / seq->frame_rate); 312ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* FIXME: API doc says max 5000, but for current default test vector we still use 6000 */ 313233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->kf_mode = va_seq->kf_auto; /* AUTO */ 3149ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_max_dist = va_seq->kf_max_dist; 3159ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_min_dist = va_seq->kf_min_dist; 3169ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->error_resilient = va_seq->error_resilient; 317ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 318233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (seq->frame_width + 2 * 32 + 63) & (~63); 319233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (seq->frame_height + 2 * 32 + 63) & (~63); 320233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_chroma_height = (ref_frame_height / 2 + 63) & (~63); 321233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_size = ref_frame_width * (ref_frame_height + ref_chroma_height); 322de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 32320b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo for (i = 0; i < 4; i++) { 3241e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].surface_id = va_seq->reference_frames[i]; 3251e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].width = ref_frame_width; 3261e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].height = ref_frame_height; 32720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo } 32820b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo 329ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < 4; i++) { 3301e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo object_surface_p ref_surf = SURFACE(va_seq->reference_frames[i]); 331233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (!ref_surf) 332233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha return VA_STATUS_ERROR_UNKNOWN; 333233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_surf->is_ref_surface = 2; 3340b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 3351e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (ref_surf->psb_surface->size < ref_size) { 3361e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo /* re-alloc buffer */ 3371e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ref_surf->psb_surface->size = ref_size; 3381e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo psb_buffer_destroy(&ref_surf->psb_surface->buf); 3391e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = psb_buffer_create(driver_data, ref_surf->psb_surface->size, psb_bt_surface, &ref_surf->psb_surface->buf); 3401e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) 3411e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo return VA_STATUS_ERROR_ALLOCATION_FAILED; 3421e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo } 3431e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 344233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vsp_cmdbuf_reloc_pic_param(&(seq->ref_frame_buffers[i].base), 345233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 0, 346233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha &(ref_surf->psb_surface->buf), 347233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha cmdbuf->param_mem_loc, seq); 348ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 349ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 350233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *seq_to_firmware = *seq; 3511e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 3521e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 3531e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo VssVp8encSetSequenceParametersCommand, 3541e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->seq_param_offset, 3551e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo sizeof(struct VssVp8encSequenceParameterBuffer)); 3561e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->vp8_seq_cmd_send = 1; 357ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 358ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 359ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 360ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 3614dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_dynamic_seqence_param( 3624dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha context_VPP_p ctx) 3634dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 3644dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3654dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 3664dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 3674dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha int ref_frame_width, ref_frame_height; 3684dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3694dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha struct VssVp8encSequenceParameterBuffer *seq = 3704dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 3714dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3724dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha *seq = ctx->vp8_seq_param ; 373233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //todo: fix it for multi temporal layers 374233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->max_intra_rate = 100 * ctx->max_frame_size / 375233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha (seq->rc_target_bitrate*1000 / seq->frame_rate); 3764dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3776e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo if (!ctx->vp8_seq_cmd_send) { 3786e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 3794dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VssVp8encSetSequenceParametersCommand, 3804dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->seq_param_offset, 3814dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha sizeof(struct VssVp8encSequenceParameterBuffer)); 3826e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo } 3834dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3844dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 3854dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 386ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 387ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 388ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_picture_param( 389ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data, 390ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 391ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer, 392ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id) 393ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 394ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 395ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 396ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 397ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 398ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncPictureParameterBufferVP8 *va_pic = 399ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (VAProcPipelineParameterBuffer *) obj_buffer->buffer_data; 400ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = cmdbuf->pic_param_p; 401ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 402ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 403ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VACodedBufferSegment *p = &obj_buffer->codedbuf_mapinfo[0]; 404de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo int ref_frame_width, ref_frame_height; 405de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 406233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (ctx->vp8_seq_param.frame_width + 2 * 32 + 63) & (~63); 407233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (ctx->vp8_seq_param.frame_height + 2 * 32 + 63) & (~63); 408ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 409ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //map parameters 410ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p pObj = BUFFER(va_pic->coded_buf); //tobe modified 4110b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if (!pObj) 412233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha return VA_STATUS_ERROR_UNKNOWN; 4130b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 414ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p src_surface = SURFACE(surface_id); 415ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 416ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.surface_id = surface_id; 417ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.irq = 1; 418233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.height = ctx->vp8_seq_param.frame_height; 419233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.width = ctx->vp8_seq_param.frame_width; 420591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* NOTE: In VIED API doc, stride must be the nearest integer multiple of 32 */ 421591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* use vaCreateSurfaceWithAttribute with VAExternalMemoryNULL to create surface*/ 422591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo //pic->input_frame.stride = (ctx->frame_width + 31) & (~31); 423591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo pic->input_frame.stride = ctx->obj_context->current_render_target->psb_surface->stride; 424ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.format = 0; /* TODO: Specify NV12 = 0 */ 425ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 426de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.irq = 0; 427de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.width = ref_frame_width; 428de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.height = ref_frame_height; 429de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 430ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->version = 0; 4314dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#if 0 432ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->pic_flags = (1<< 2) | /* corresponds to VP8_EFLAG_NO_REF_GF */ 433ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 3) | /* corresponds to VP8_EFLAG_NO_REF_ARF */ 434ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 12); /* corresponds to ~VP8_EFLAG_NO_UPD_ENTROPY */ 4354dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#else 4364dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vp8_fw_pic_flags flags; 4374dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.value =0; 4384dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 439025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.force_kf = va_pic->ref_flags.bits.force_kf; 440025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_last = va_pic->ref_flags.bits.no_ref_last; 441025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_gf = va_pic->ref_flags.bits.no_ref_gf; 442025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_arf = va_pic->ref_flags.bits.no_ref_arf; 4434dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.upd_last = va_pic->pic_flags.bits.refresh_last; 44419fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo flags.bits.upd_gf = va_pic->pic_flags.bits.copy_buffer_to_golden; 44519fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo flags.bits.upd_arf = va_pic->pic_flags.bits.copy_buffer_to_alternate; 4464dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_last = !va_pic->pic_flags.bits.refresh_last; 4474dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_gf = !va_pic->pic_flags.bits.refresh_golden_frame; 4484dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_arf = !va_pic->pic_flags.bits.refresh_alternate_frame; 4494dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_entropy = !va_pic->pic_flags.bits.refresh_entropy_probs; 4504dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 4514dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->pic_flags = flags.value; 4524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#endif 453ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->prev_frame_dropped = 0; /* Not yet used */ 454ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->cpuused = 5; 4554dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->sharpness = va_pic->sharpness_level; 4564dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->num_token_partitions = va_pic->pic_flags.bits.num_token_partitions; /* 2^2 = 4 partitions */ 4574dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->encoded_frame_size = pObj->size & ~31; 458ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->encoded_frame_base = pObj->buffer_data ;//tobe modified 459ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 460ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 461ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->encoded_frame_base), 462ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset, pObj->psb_buffer, 463ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 464ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 465ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 466ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 467ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p cur_surf = SURFACE(surface_id); 468233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if(!cur_surf) 469233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha return VA_STATUS_ERROR_UNKNOWN; 4700b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 471ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base), 4721e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 0, &(cur_surf->psb_surface->buf), 473ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 4741e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base_uv), 475233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.stride * ctx->obj_context->current_render_target->height, 476233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha &(cur_surf->psb_surface->buf), 477233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha cmdbuf->param_mem_loc, pic); 478ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 479ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 480233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = CONTEXT_VP8_ID; 481233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = VssVp8encEncodeFrameCommand; 482233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VSP_RELOC_CMDBUF(cmdbuf->cmd_idx++, ctx->pic_param_offset, &cmdbuf->param_mem); 483233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = sizeof(struct VssVp8encPictureParameterBuffer); 484233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = 0; *cmdbuf->cmd_idx++ = 0; 485233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf(pObj->psb_buffer->drm_buf)) ; 486233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf((&cmdbuf->param_mem)->drm_buf)); 487ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 488ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 489ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 490ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 4914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_misc_param(context_VPP_p ctx, object_buffer_p obj_buffer) 4924dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 4934dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBuffer *pBuffer; 4944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterAIR *air_param; 4954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBufferMaxFrameSize *max_frame_size_param; 4964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterFrameRate *frame_rate_param; 4974dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterRateControl *rate_control_param; 498025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo VAEncMiscParameterHRD *hrd_param; 499233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha struct VssVp8encSequenceParameterBuffer * seq = &ctx->vp8_seq_param; 5004dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 501233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha int layer_id; 5024dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ASSERT(obj_buffer->type == VAEncMiscParameterBufferType); 5034dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pBuffer = (VAEncMiscParameterBuffer *) obj_buffer->buffer_data; 5044dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->size = 0; 5054dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha switch (pBuffer->type) { 5064dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeFrameRate: 5074dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha frame_rate_param = (VAEncMiscParameterFrameRate *)pBuffer->data; 5084dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (frame_rate_param->framerate < 1 || frame_rate_param->framerate > 65535) { 5094dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 5104dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5114dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 512233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (ctx->temporal_layer_number == 1 ) 513233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 514233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (seq->frame_rate != frame_rate_param->framerate) 515233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 516233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate changed from %d to %d\n", 517233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->frame_rate, 518233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha frame_rate_param->framerate); 519233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->frame_rate= frame_rate_param->framerate; 520233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->re_send_seq_params = 1 ; 521233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 522233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 523233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha else 524233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 525233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha layer_id = frame_rate_param->framerate_flags.bits.temporal_id % 3; 526233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (ctx->frame_rate[layer_id] != frame_rate_param->framerate) 527233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 528233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate of layer %d will be changed from %d to %d\n", 529233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha layer_id, ctx->frame_rate[layer_id], frame_rate_param->framerate); 530233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->frame_rate[layer_id] = frame_rate_param->framerate; 531233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //convert to ts_rate 532233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //todo: convert to ts_period_id 533233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->ts_rate_decimator[layer_id] = 534233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->frame_rate / ctx->frame_rate[layer_id]; 535233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->re_send_seq_params = 1 ; 536233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 537233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 5384dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5394dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeRateControl: 5404dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param = (VAEncMiscParameterRateControl *)pBuffer->data; 5414dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (rate_control_param->initial_qp > 63 || 5424dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param->min_qp > 63) { 5434dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "Initial_qp(%d) and min_qpinitial_qp(%d) " 5444dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "are invalid.\nQP shouldn't be larger than 63 for VP8\n", 5454dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param->initial_qp, rate_control_param->min_qp); 5464dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 5474dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5484dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 549233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 550233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->min_qp != seq->rc_min_quantizer) { 5514dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "min_qp was changed from %d to %d\n", 552233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer, rate_control_param->min_qp); 553233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer = rate_control_param->min_qp; 5544dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 555233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->max_qp != seq->rc_max_quantizer) { 556025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max_qp was changed from %d to %d\n", 557233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer, rate_control_param->max_qp); 558233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer = rate_control_param->max_qp; 559025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 560233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 561233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha // no initial qp for vp8 562233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 563233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->target_percentage != seq->rc_undershoot_pct) { 564025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "rc_undershoot was changed from %d to %d\n", 565233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct, rate_control_param->target_percentage); 566233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct = rate_control_param->target_percentage; 567025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 568025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo 569233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (ctx->temporal_layer_number == 1 ) 570233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 571233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if(rate_control_param->bits_per_second/1000 != seq->rc_target_bitrate) { 572233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 573233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_target_bitrate, rate_control_param->bits_per_second/1000); 574233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_target_bitrate = rate_control_param->bits_per_second / 1000; 575233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 576233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 577233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha else 578233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha { 579233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha layer_id = rate_control_param->rc_flags.bits.temporal_id %3 ; 580233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if(rate_control_param->bits_per_second/1000 != seq->ts_target_bitrate[layer_id]) { 581233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 582233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->ts_target_bitrate[layer_id], rate_control_param->bits_per_second/1000); 583233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->ts_target_bitrate[layer_id] = rate_control_param->bits_per_second / 1000; 584233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 585233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 5864dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 1 ; 5874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5884dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeMaxFrameSize: 5894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha max_frame_size_param = (VAEncMiscParameterBufferMaxFrameSize *)pBuffer->data; 5904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (ctx->max_frame_size == max_frame_size_param->max_frame_size) 5914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5926e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max frame size changed from %d to %d\n", 5934dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size, max_frame_size_param->max_frame_size); 5944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size = max_frame_size_param->max_frame_size ; 5954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 1 ; 5964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5974dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeAIR: 5984dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param = (VAEncMiscParameterAIR *)pBuffer->data; 5994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (air_param->air_num_mbs > 65535 || 6004dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_threshold > 65535) { 6014dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 6024dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6034dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6044dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_GENERAL, "air slice size changed to num_air_mbs %d " 6054dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "air_threshold %d, air_auto %d\n", 6064dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_num_mbs, air_param->air_threshold, 6074dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_auto); 608233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->cyclic_intra_refresh = air_param->air_threshold; 6094dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 610025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeHRD: 611233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha hrd_param = (VAEncMiscParameterHRD *)pBuffer->data; 612233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_buf_sz = hrd_param->buffer_size; 613233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_buf_initial_sz = hrd_param->initial_buffer_fullness; 614233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_buf_optimal_sz = hrd_param->optimal_buffer_fullness; 615233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->re_send_seq_params = 1 ; 616233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 617025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeQualityLevel: 618233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha break; 6194dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha default: 6204dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_UNKNOWN; 6214dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha DEBUG_FAILURE; 6224dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6234dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6244dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha free(obj_buffer->buffer_data); 6254dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->buffer_data = NULL; 6264dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 6274dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 628ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_RenderPicture( 629ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 630ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p *buffers, 631ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_buffers) 632ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 633ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 634ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 635ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 636ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 637ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id; 638ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 639ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 640ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < num_buffers; i++) 641ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 642ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 643ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer = buffers[i]; 644ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_buffer->type) { 645ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncSequenceParameterBufferType: 6461e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = vsp_vp8_process_seqence_param(driver_data, ctx, obj_buffer); 647ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 648ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncPictureParameterBufferType: 649ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo surface_id = obj_context->current_render_surface_id; 650ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = vsp_vp8_process_picture_param(driver_data,ctx, obj_buffer,surface_id); 651ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 6524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterBufferType: 6534dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = vsp_vp8_process_misc_param(ctx, obj_buffer); 6544dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 655ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 656ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_SUCCESS;//VA_STATUS_ERROR_UNKNOWN; 657ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 658ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 659ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus != VA_STATUS_SUCCESS) { 660ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 661ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 662ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 663ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 664ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 665ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 666ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 667ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_BeginPicture( 668ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 669ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 670ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int ret; 671ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 672ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 673ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf; 674ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 675ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Initialise the command buffer */ 676ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ret = vsp_context_get_next_cmdbuf(ctx->obj_context); 677ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ret) { 678ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "get next cmdbuf fail\n"); 679ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_UNKNOWN; 680ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 681ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 682ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 683ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf = obj_context->vsp_cmdbuf; 684ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 685ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->obj_context->frame_count == 0) /* first picture */ 686ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 6878672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, ctx->context_buf, Vss_Sys_STATE_BUF_COMMAND, 688ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 0, VSP_VP8ENC_STATE_SIZE); 689ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 690ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 691ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* map param mem */ 692ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_map(&cmdbuf->param_mem, &cmdbuf->param_mem_p); 693ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus) { 694ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 695ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 696ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 697ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = cmdbuf->param_mem_p; 698ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->seq_param_p = cmdbuf->param_mem_p + ctx->seq_param_offset; 69920b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = cmdbuf->param_mem_p + ctx->ref_param_offset; 7004dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->vp8_seq_cmd_send = 0; 7014dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 0; 702ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 703ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 704ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 705ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_EndPicture( 706ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 707ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 708ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 709ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 710ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = obj_context->vsp_cmdbuf; 711ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7124dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if(ctx->re_send_seq_params) 7134dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha { 7144dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_vp8_process_dynamic_seqence_param(ctx); 7154dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 7164dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 717ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (cmdbuf->param_mem_p != NULL) { 718ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_unmap(&cmdbuf->param_mem); 719ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_p = NULL; 720ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = NULL; 721ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->end_param_p = NULL; 722ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pipeline_param_p = NULL; 723ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->denoise_param_p = NULL; 724ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->enhancer_param_p = NULL; 725ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->sharpen_param_p = NULL; 726ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->frc_param_p = NULL; 72720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = NULL; 728ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 729ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7309ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo// ctx->obj_context->frame_count++; 731ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7324dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 7338f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo if (vsp_context_flush_cmdbuf(ctx->obj_context)) { 734ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "psb_VPP: flush deblock cmdbuf error\n"); 7356e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 7368f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo } 737ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 738ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 739ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 740ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 741ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostruct format_vtable_s vsp_VP8_vtable = { 742ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoqueryConfigAttributes: 743ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_QueryConfigAttributes, 744ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruovalidateConfig: 745ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_ValidateConfig, 746ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruocreateContext: 747ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_CreateContext, 748ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruodestroyContext: 749ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext, 750ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruobeginPicture: 751ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_BeginPicture, 752ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruorenderPicture: 753ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_RenderPicture, 754ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoendPicture: 755ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_EndPicture 756ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo}; 757ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 758