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 7794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzhatypedef union { 7894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha struct { 7994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha /* force this frame to be a keyframe */ 8094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int force_kf : 1; 81233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the last frame */ 8294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_ref_last : 1; 83233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the golden frame */ 8494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_ref_gf : 1; 85233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha /* don't reference the alternate reference frame */ 8694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_ref_arf : 1; 874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 8894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int upd_last : 1; 8994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int upd_gf : 2; 9094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int upd_arf : 2; 9194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_upd_last : 1; 9294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_upd_gf : 1; 9394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int no_upd_arf : 1; 9494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int upd_entropy : 1; 9594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } bits; 9694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha unsigned int value; 9794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha} 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( 105d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel VAProfile __maybe_unused profile, 106b35344f5c0b8568df0630efe9fce076e810de8d3ywan VAEntrypoint __maybe_unused 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) { 1150cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRTFormat: 1160cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1170cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRateControl: 118b35344f5c0b8568df0630efe9fce076e810de8d3ywan attrib_list[i].value = VA_RC_CBR | VA_RC_VCM | VA_RC_VBR; 1190cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1200cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncAutoReference: 1210cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo attrib_list[i].value = 1; 1220cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1230cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncMaxRefFrames: 1240cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo attrib_list[i].value = 4; 1250cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1260cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncRateControlExt: 12794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha attrib_list[i].value = 3; 12894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 129233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 1300cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo default: 1310cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; 1320cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1330cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 1349ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 135ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 136ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 137ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_ValidateConfig( 138ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 139ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 140ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 1419ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s\n", __FUNCTION__); 1429ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 143ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Check all attributes */ 144ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 145ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_config->attrib_list[i].type) { 1460cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRTFormat: 1470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* Ignore */ 1480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRateControl: 1500cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1510cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncAutoReference: 1520cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1530cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncMaxRefFrames: 1540cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1550cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribEncRateControlExt: 1560cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 157ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 1580cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo default: 1590cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; 160ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 161ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 162ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 163ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 164ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 165ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 166233384d7e88c1295775705f074fbe3fd2e57ff35zhangzhavoid vsp_VP8_set_default_params(struct VssVp8encSequenceParameterBuffer *vp8_seq) 167233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha{ 168233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 1690cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->frame_width = 1280; 1700cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->frame_height = 720; 1710cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->frame_rate = 30; 1720cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->error_resilient = 0; 1730cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->num_token_partitions = 2; 1740cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->kf_mode = 1; 1750cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->kf_min_dist = 0; 1760cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->kf_max_dist = 30; 1770cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_target_bitrate = 2000; 1780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_min_quantizer = 4; 1790cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_max_quantizer = 63; 1800cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_undershoot_pct = 100; 1810cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_overshoot_pct = 100; 182f9b37afdf8d0bdc0c570ded077bf9f834cc74fc3Bolun vp8_seq->rc_end_usage = VP8_ENC_CBR; 1830cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_buf_sz = 6000; 1840cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_buf_initial_sz = 4000; 1850cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_buf_optimal_sz = 5000; 1860cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->max_intra_rate = 0; 1870cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->cyclic_intra_refresh = 0; 1880cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->concatenate_partitions = 1; 1890cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->recon_buffer_mode = vss_vp8enc_seq_param_recon_buffer_mode_per_seq; 190233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vp8_seq->ts_number_layers = 1; 191768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo vp8_seq->ts_layer_id[0] = 0; 1924457eceae6652c2336b5a1440b846456cd0b455cSun, Mingruo vp8_seq->ts_rate_decimator[0] = 0; 1934457eceae6652c2336b5a1440b846456cd0b455cSun, Mingruo vp8_seq->ts_periodicity = 0; 1944457eceae6652c2336b5a1440b846456cd0b455cSun, Mingruo vp8_seq->ts_target_bitrate[0] = 0; 195233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha} 196233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 197ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_CreateContext( 198ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 199ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 200ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 201ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 2029ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo /* currently vp8 will use vpp's context since they will use the same cmdbuf */ 203ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx; 204ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 205ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 206ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx = (context_VPP_p) calloc(1, sizeof(struct context_VPP_s)); 207ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx) { 208ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 209ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 210ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 211ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 212ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 213233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //set default VP8 sequence params 214233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha vsp_VP8_set_default_params(&ctx->vp8_seq_param); 215233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->temporal_layer_number = 1; 216233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 2179ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 2180cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (obj_config->attrib_list[i].type == VAConfigAttribRateControl) { 219f9b37afdf8d0bdc0c570ded077bf9f834cc74fc3Bolun if (obj_config->attrib_list[i].value == VA_RC_VCM) 220f9b37afdf8d0bdc0c570ded077bf9f834cc74fc3Bolun ctx->vp8_seq_param.rc_end_usage = VP8_ENC_CBR_HRD; 221f9b37afdf8d0bdc0c570ded077bf9f834cc74fc3Bolun else 222f9b37afdf8d0bdc0c570ded077bf9f834cc74fc3Bolun ctx->vp8_seq_param.rc_end_usage = VP8_ENC_CBR; 22394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 2249ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 225ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 226ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set size */ 227ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz = 0; 228ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encPictureParameterBuffer)); 229ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->pic_param_sz; 230ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encSequenceParameterBuffer)); 231ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->seq_param_sz; 23220b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->ref_param_sz = ALIGN_TO_128(sizeof(ref_frame_surface)); 23320b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->param_sz += ctx->ref_param_sz; 234ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 235ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set offset */ 236ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset = 0; 237ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_offset = ctx->pic_param_sz; 23820b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo ctx->ref_param_offset = ctx->pic_param_sz + ctx->seq_param_sz; 239ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 240025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo 241ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = (psb_buffer_p) calloc(1, sizeof(struct psb_buffer_s)); 242ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx->context_buf) { 243ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 244ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 245ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 246ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 247ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 248ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_create(obj_context->driver_data, VSP_VP8ENC_STATE_SIZE, psb_bt_vpu_only, ctx->context_buf); 249ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 250ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) { 251ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 252ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 253ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 254ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = (void*) ctx; 255ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->obj_context = obj_context; 2569ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 257ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 258ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 259ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruoout: 260ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext(obj_context); 261ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 262ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx) 263ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx); 264ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 265ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 266ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 267ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 268ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_DestroyContext( 269ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 270ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 271ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 272ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 273ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->context_buf) { 274ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_destroy(ctx->context_buf); 275ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->context_buf); 276ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = NULL; 277ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 278ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 279ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->filters) { 280ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->filters); 281ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->num_filters = 0; 282ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 283ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 284ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(obj_context->format_data); 285ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = NULL; 286ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 287ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 288ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_seqence_param( 2891e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo psb_driver_data_p driver_data, 290ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 291ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer) 292ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 293ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 294ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 295ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 296ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 29794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha int ref_frame_width, ref_frame_height, ref_chroma_height, ref_size; 298ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 299ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncSequenceParameterBufferVP8 *va_seq = 30094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (VAEncSequenceParameterBufferVP8 *) obj_buffer->buffer_data; 3010cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = &ctx->vp8_seq_param; 302233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha struct VssVp8encSequenceParameterBuffer *seq_to_firmware = 30394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 304ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 305daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct ref_frame_surface *ref = 306233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha (struct ref_frame_surface*)cmdbuf->ref_param_p; 307ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 308ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_width = va_seq->frame_width; 309ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_height = va_seq->frame_height; 3109ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_target_bitrate = va_seq->bits_per_second / 1000; 311233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->max_intra_rate = 100 * ctx->max_frame_size / 31294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (va_seq->bits_per_second / seq->frame_rate); 313ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* FIXME: API doc says max 5000, but for current default test vector we still use 6000 */ 3140cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->kf_mode = va_seq->kf_auto; /* AUTO */ 3159ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_max_dist = va_seq->kf_max_dist; 3169ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_min_dist = va_seq->kf_min_dist; 3179ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->error_resilient = va_seq->error_resilient; 3180cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 319233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (seq->frame_width + 2 * 32 + 63) & (~63); 320233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (seq->frame_height + 2 * 32 + 63) & (~63); 321233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_chroma_height = (ref_frame_height / 2 + 63) & (~63); 322233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_size = ref_frame_width * (ref_frame_height + ref_chroma_height); 323de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 32420b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo for (i = 0; i < 4; i++) { 3251e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].surface_id = va_seq->reference_frames[i]; 3261e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].width = ref_frame_width; 3271e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].height = ref_frame_height; 32820b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo } 32920b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo 330ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < 4; i++) { 3311e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo object_surface_p ref_surf = SURFACE(va_seq->reference_frames[i]); 3320cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (!ref_surf) 3330cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 3340cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 3350cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ref_surf->is_ref_surface = 2; 3360b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 3371e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (ref_surf->psb_surface->size < ref_size) { 3381e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo /* re-alloc buffer */ 3391e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ref_surf->psb_surface->size = ref_size; 3401e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo psb_buffer_destroy(&ref_surf->psb_surface->buf); 3411e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = psb_buffer_create(driver_data, ref_surf->psb_surface->size, psb_bt_surface, &ref_surf->psb_surface->buf); 3421e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) 3431e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo return VA_STATUS_ERROR_ALLOCATION_FAILED; 3441e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo } 3451e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 3460cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(seq->ref_frame_buffers[i].base), 3470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 0, 3480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo &(ref_surf->psb_surface->buf), 3490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo cmdbuf->param_mem_loc, seq); 350ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 351ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 352233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *seq_to_firmware = *seq; 3531e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 3541e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 3551e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo VssVp8encSetSequenceParametersCommand, 3561e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->seq_param_offset, 3571e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo sizeof(struct VssVp8encSequenceParameterBuffer)); 3581e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->vp8_seq_cmd_send = 1; 359ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 360ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 361ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 362ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 3634dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_dynamic_seqence_param( 3644dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha context_VPP_p ctx) 3654dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 3664dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3674dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 3684dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 3694dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha int ref_frame_width, ref_frame_height; 3704dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3714dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha struct VssVp8encSequenceParameterBuffer *seq = 37294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 3734dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3744dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha *seq = ctx->vp8_seq_param ; 3750cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->max_intra_rate = 100 * ctx->max_frame_size / 37694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (seq->rc_target_bitrate * 1000 / seq->frame_rate); 3774dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (!ctx->vp8_seq_cmd_send) { 3790cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 38094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha VssVp8encSetSequenceParametersCommand, 38194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha ctx->seq_param_offset, 38294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha sizeof(struct VssVp8encSequenceParameterBuffer)); 3830cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 3844dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3854dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 3864dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 387ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 388ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 389ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_picture_param( 390ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data, 391ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 392ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer, 393ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id) 394ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 395ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 396ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 397ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 398ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 399ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncPictureParameterBufferVP8 *va_pic = 40094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (VAEncPictureParameterBufferVP8 *) obj_buffer->buffer_data; 401daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = 40294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encPictureParameterBuffer *)cmdbuf->pic_param_p; 403ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 40494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 405de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo int ref_frame_width, ref_frame_height; 40694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vp8_fw_pic_flags flags; 407de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 408233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (ctx->vp8_seq_param.frame_width + 2 * 32 + 63) & (~63); 409233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (ctx->vp8_seq_param.frame_height + 2 * 32 + 63) & (~63); 410ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 411ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //map parameters 412ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p pObj = BUFFER(va_pic->coded_buf); //tobe modified 4130b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if (!pObj) 414233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha return VA_STATUS_ERROR_UNKNOWN; 4150b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 416ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p src_surface = SURFACE(surface_id); 417ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 418ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.surface_id = surface_id; 419ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.irq = 1; 420233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.height = ctx->vp8_seq_param.frame_height; 421233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.width = ctx->vp8_seq_param.frame_width; 422591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* NOTE: In VIED API doc, stride must be the nearest integer multiple of 32 */ 423591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* use vaCreateSurfaceWithAttribute with VAExternalMemoryNULL to create surface*/ 424591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo //pic->input_frame.stride = (ctx->frame_width + 31) & (~31); 425591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo pic->input_frame.stride = ctx->obj_context->current_render_target->psb_surface->stride; 426ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.format = 0; /* TODO: Specify NV12 = 0 */ 427ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 428de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.irq = 0; 429de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.width = ref_frame_width; 430de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.height = ref_frame_height; 431de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 432ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->version = 0; 43394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha 43494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.value = 0; 43594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.force_kf = va_pic->ref_flags.bits.force_kf; 43694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_ref_last = va_pic->ref_flags.bits.no_ref_last; 43794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_ref_gf = va_pic->ref_flags.bits.no_ref_gf; 43894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_ref_arf = va_pic->ref_flags.bits.no_ref_arf; 43994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.upd_last = va_pic->pic_flags.bits.refresh_last; 44094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.upd_gf = va_pic->pic_flags.bits.copy_buffer_to_golden; 44194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.upd_arf = va_pic->pic_flags.bits.copy_buffer_to_alternate; 44294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_upd_last = !va_pic->pic_flags.bits.refresh_last; 44394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_upd_gf = !va_pic->pic_flags.bits.refresh_golden_frame; 44494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.no_upd_arf = !va_pic->pic_flags.bits.refresh_alternate_frame; 44594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.upd_entropy = va_pic->pic_flags.bits.refresh_entropy_probs; 44694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (ctx->temporal_layer_number > 1) 44794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha flags.bits.upd_entropy = 0; 44894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha pic->pic_flags = flags.value; 4490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 450ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->prev_frame_dropped = 0; /* Not yet used */ 451ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->cpuused = 5; 4524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->sharpness = va_pic->sharpness_level; 4534dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->num_token_partitions = va_pic->pic_flags.bits.num_token_partitions; /* 2^2 = 4 partitions */ 4544dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->encoded_frame_size = pObj->size & ~31; 455daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo pic->encoded_frame_base = (uint32_t)pObj->buffer_data; 456ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 457ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 458ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->encoded_frame_base), 459ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset, pObj->psb_buffer, 460ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 461ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 462ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 463ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 464ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p cur_surf = SURFACE(surface_id); 46594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (!cur_surf) 4660cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 4670b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 468ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base), 4691e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 0, &(cur_surf->psb_surface->buf), 470ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 4711e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base_uv), 47294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha pic->input_frame.stride * ctx->obj_context->current_render_target->height, 47394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha &(cur_surf->psb_surface->buf), 47494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha cmdbuf->param_mem_loc, pic); 475ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 476ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 47794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = CONTEXT_VP8_ID; 47894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = VssVp8encEncodeFrameCommand; 47994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha VSP_RELOC_CMDBUF(cmdbuf->cmd_idx++, ctx->pic_param_offset, &cmdbuf->param_mem); 48094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = sizeof(struct VssVp8encPictureParameterBuffer); 48194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = 0; 48294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = 0; 48394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf(pObj->psb_buffer->drm_buf)) ; 48494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf((&cmdbuf->param_mem)->drm_buf)); 485ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 486ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 487ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 488ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 4894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_misc_param(context_VPP_p ctx, object_buffer_p obj_buffer) 4904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 4914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBuffer *pBuffer; 4924dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterAIR *air_param; 4934dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBufferMaxFrameSize *max_frame_size_param; 4944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterFrameRate *frame_rate_param; 4954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterRateControl *rate_control_param; 496025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo VAEncMiscParameterHRD *hrd_param; 49716752f679f82f92454ac160f0457be83e0fa4b77zhangzha VAEncMiscParameterTemporalLayerStructure* tslayer_param; 4980cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = &ctx->vp8_seq_param; 4994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 500daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo uint32_t layer_id, i; 5010cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5024dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ASSERT(obj_buffer->type == VAEncMiscParameterBufferType); 5034dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pBuffer = (VAEncMiscParameterBuffer *) obj_buffer->buffer_data; 5044dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->size = 0; 5050cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5064dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha switch (pBuffer->type) { 50716752f679f82f92454ac160f0457be83e0fa4b77zhangzha case VAEncMiscParameterTypeTemporalLayerStructure: 50894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha tslayer_param = (VAEncMiscParameterTemporalLayerStructure *)pBuffer->data; 50994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha //verify parameter 51094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (tslayer_param->number_of_layers < 2 && tslayer_param->number_of_layers > 3) { 51194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "Temporal Layer Number should be 2 or 3\n"); 51294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 51394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 51494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 51594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha 51694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (tslayer_param->periodicity > 32 || tslayer_param->periodicity < 1) { 51794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "ts_periodicity shoulde be 1 - 32\n"); 51894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 51994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 52094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 52194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha 52294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha for (i = 0; i < tslayer_param->periodicity; i++) { 52394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha layer_id = tslayer_param->layer_id[i]; 524daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (layer_id > (tslayer_param->number_of_layers - 1)) { 525daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "layer_id shoulde be 0 - %d\n", 52694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha tslayer_param->number_of_layers - 1); 527daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 528daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo break; 52916752f679f82f92454ac160f0457be83e0fa4b77zhangzha } 53094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 53116752f679f82f92454ac160f0457be83e0fa4b77zhangzha 53294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (vaStatus == VA_STATUS_ERROR_INVALID_PARAMETER) 53394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 53416752f679f82f92454ac160f0457be83e0fa4b77zhangzha 53594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_number_layers = tslayer_param->number_of_layers; 53694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha ctx->temporal_layer_number = tslayer_param->number_of_layers; 53794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_periodicity = tslayer_param->periodicity; 538daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 53994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha for (i = 0; i < seq->ts_periodicity; i++) 54094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_layer_id[i] = tslayer_param->layer_id[i]; 541daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 54294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha //set default bitrate and framerate 54394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (seq->ts_number_layers == 2) { 54494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[0] = seq->rc_target_bitrate * 6 / 10; 54594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[1] = seq->rc_target_bitrate ; 54694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_rate_decimator[0] = 2; 54794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_rate_decimator[1] = 1; 54894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 54994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (seq->ts_number_layers == 3) { 55094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[0] = seq->rc_target_bitrate * 4 / 10; 55194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[1] = seq->rc_target_bitrate * 6 / 10; 55294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[2] = seq->rc_target_bitrate ; 55394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_rate_decimator[0] = 4; 55494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_rate_decimator[1] = 2; 55594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_rate_decimator[2] = 1; 55694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 55794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha 55894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha ctx->re_send_seq_params = 1; 55994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 5604dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeFrameRate: 5614dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha frame_rate_param = (VAEncMiscParameterFrameRate *)pBuffer->data; 562fe436fee778fb0470d1d07150a8150eb38232533hding if (frame_rate_param->framerate > 120) { 563fe436fee778fb0470d1d07150a8150eb38232533hding drv_debug_msg(VIDEO_DEBUG_ERROR, "%d is invalid." 564fe436fee778fb0470d1d07150a8150eb38232533hding "framerate could not be larger than 120\n", 565fe436fee778fb0470d1d07150a8150eb38232533hding frame_rate_param->framerate); 566fe436fee778fb0470d1d07150a8150eb38232533hding frame_rate_param->framerate = 120; 567fe436fee778fb0470d1d07150a8150eb38232533hding } 568fe436fee778fb0470d1d07150a8150eb38232533hding if (frame_rate_param->framerate < 1) { 569fe436fee778fb0470d1d07150a8150eb38232533hding drv_debug_msg(VIDEO_DEBUG_ERROR, "%d is invalid." 570fe436fee778fb0470d1d07150a8150eb38232533hding "framerate could not be smaller than 1\n", 571fe436fee778fb0470d1d07150a8150eb38232533hding frame_rate_param->framerate); 572fe436fee778fb0470d1d07150a8150eb38232533hding frame_rate_param->framerate = 1; 5734dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 5740cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5750cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 1) { 5760cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (seq->frame_rate != frame_rate_param->framerate) { 5770cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate changed from %d to %d\n", 5780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->frame_rate, 5790cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo frame_rate_param->framerate); 580daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo seq->frame_rate = frame_rate_param->framerate; 581daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo ctx->re_send_seq_params = 1; 58294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 5830cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 5840cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id = frame_rate_param->framerate_flags.bits.temporal_id % 3; 5850cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->frame_rate[layer_id] != frame_rate_param->framerate) { 5860cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate of layer %d will be changed from %d to %d\n", 5870cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id, ctx->frame_rate[layer_id], frame_rate_param->framerate); 5880cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->frame_rate[layer_id] = frame_rate_param->framerate; 589daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (layer_id == ctx->temporal_layer_number - 1) { //top layer 59094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->frame_rate = ctx->frame_rate[layer_id]; 591daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 5920cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1 ; 5930cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 594233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 5954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 5964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeRateControl: 5974dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param = (VAEncMiscParameterRateControl *)pBuffer->data; 598fe436fee778fb0470d1d07150a8150eb38232533hding if (rate_control_param->max_qp > 63 || 5994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param->min_qp > 63) { 600fe436fee778fb0470d1d07150a8150eb38232533hding drv_debug_msg(VIDEO_DEBUG_ERROR, "max_qp(%d) and min_qp(%d) " 6014dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "are invalid.\nQP shouldn't be larger than 63 for VP8\n", 602fe436fee778fb0470d1d07150a8150eb38232533hding rate_control_param->max_qp, rate_control_param->min_qp); 603fe436fee778fb0470d1d07150a8150eb38232533hding rate_control_param->max_qp = 63; 604fe436fee778fb0470d1d07150a8150eb38232533hding rate_control_param->min_qp = rate_control_param->max_qp; 6054dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 606233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 607233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->min_qp != seq->rc_min_quantizer) { 6084dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "min_qp was changed from %d to %d\n", 609233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer, rate_control_param->min_qp); 610233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer = rate_control_param->min_qp; 6114dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6120cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 613233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->max_qp != seq->rc_max_quantizer) { 614025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max_qp was changed from %d to %d\n", 615233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer, rate_control_param->max_qp); 616233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer = rate_control_param->max_qp; 617025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 618233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 6190cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo // no initial qp for vp8 620233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 621233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->target_percentage != seq->rc_undershoot_pct) { 622025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "rc_undershoot was changed from %d to %d\n", 623233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct, rate_control_param->target_percentage); 624233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct = rate_control_param->target_percentage; 625025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 626025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo 627fe436fee778fb0470d1d07150a8150eb38232533hding if (rate_control_param->bits_per_second / 1000 > 20000) { 628fe436fee778fb0470d1d07150a8150eb38232533hding drv_debug_msg(VIDEO_DEBUG_ERROR, "%d is invalid." 629fe436fee778fb0470d1d07150a8150eb38232533hding "bitrate could not be larger than 20000\n", 630fe436fee778fb0470d1d07150a8150eb38232533hding rate_control_param->bits_per_second / 1000); 631fe436fee778fb0470d1d07150a8150eb38232533hding rate_control_param->bits_per_second = 20000000; 632fe436fee778fb0470d1d07150a8150eb38232533hding } 633fe436fee778fb0470d1d07150a8150eb38232533hding 6340cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 1) { 63594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (rate_control_param->bits_per_second / 1000 != seq->rc_target_bitrate) { 636233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 63794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->rc_target_bitrate, rate_control_param->bits_per_second / 1000); 6380cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_target_bitrate = rate_control_param->bits_per_second / 1000; 63994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[0] = rate_control_param->bits_per_second / 1000; 64094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha 6410cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 6420cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 6430cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id = rate_control_param->rc_flags.bits.temporal_id % 3; 64494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (rate_control_param->bits_per_second / 1000 != seq->ts_target_bitrate[layer_id]) { 645233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 64694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha seq->ts_target_bitrate[layer_id], rate_control_param->bits_per_second / 1000); 6470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_target_bitrate[layer_id] = rate_control_param->bits_per_second / 1000; 6480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 6490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 6500cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6510cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1; 6524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6534dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeMaxFrameSize: 6544dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha max_frame_size_param = (VAEncMiscParameterBufferMaxFrameSize *)pBuffer->data; 6554dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (ctx->max_frame_size == max_frame_size_param->max_frame_size) 6564dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6570cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6586e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max frame size changed from %d to %d\n", 6594dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size, max_frame_size_param->max_frame_size); 6604dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size = max_frame_size_param->max_frame_size ; 6614dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 1 ; 6624dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6634dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeAIR: 6644dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param = (VAEncMiscParameterAIR *)pBuffer->data; 6654dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (air_param->air_num_mbs > 65535 || 6664dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_threshold > 65535) { 66794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 66894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha break; 6694dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6700cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6714dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_GENERAL, "air slice size changed to num_air_mbs %d " 6724dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "air_threshold %d, air_auto %d\n", 6734dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_num_mbs, air_param->air_threshold, 6744dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_auto); 675233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->cyclic_intra_refresh = air_param->air_threshold; 6764dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 677025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeHRD: 6780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo hrd_param = (VAEncMiscParameterHRD *)pBuffer->data; 6790cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_sz = hrd_param->buffer_size; 6800cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_initial_sz = hrd_param->initial_buffer_fullness; 6810cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_optimal_sz = hrd_param->optimal_buffer_fullness; 6820cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1; 6830cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 684025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeQualityLevel: 6850cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 6860cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha default: 6884dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_UNKNOWN; 6894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha DEBUG_FAILURE; 6904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6920cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6934dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha free(obj_buffer->buffer_data); 6944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->buffer_data = NULL; 6950cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 6974dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 698ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_RenderPicture( 699ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 700ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p *buffers, 701ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_buffers) 702ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 703ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 704ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 705ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 706ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 707ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id; 708ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 709ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7100cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo for (i = 0; i < num_buffers; i++) { 711ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 712ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer = buffers[i]; 713ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_buffer->type) { 714ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncSequenceParameterBufferType: 7151e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = vsp_vp8_process_seqence_param(driver_data, ctx, obj_buffer); 716ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 717ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncPictureParameterBufferType: 718ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo surface_id = obj_context->current_render_surface_id; 71994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vaStatus = vsp_vp8_process_picture_param(driver_data, ctx, obj_buffer, surface_id); 720ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 7214dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterBufferType: 7224dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = vsp_vp8_process_misc_param(ctx, obj_buffer); 7234dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 724ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 725ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_SUCCESS;//VA_STATUS_ERROR_UNKNOWN; 726ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 727ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 7280cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 729ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus != VA_STATUS_SUCCESS) { 730ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 731ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 732ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 733ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 734ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 735ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 736ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 737ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_BeginPicture( 738ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 739ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 740ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int ret; 741ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 742ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 743ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf; 744ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 745ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Initialise the command buffer */ 746ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ret = vsp_context_get_next_cmdbuf(ctx->obj_context); 747ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ret) { 748ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "get next cmdbuf fail\n"); 74994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha vaStatus = VA_STATUS_ERROR_UNKNOWN; 75094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha return vaStatus; 75194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 752ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 753ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf = obj_context->vsp_cmdbuf; 754ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7550cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->obj_context->frame_count == 0) { /* first picture */ 7568672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, ctx->context_buf, Vss_Sys_STATE_BUF_COMMAND, 757ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 0, VSP_VP8ENC_STATE_SIZE); 758ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 759ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 760ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* map param mem */ 761ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_map(&cmdbuf->param_mem, &cmdbuf->param_mem_p); 762ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus) { 763ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 764ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 765ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 766ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = cmdbuf->param_mem_p; 767ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->seq_param_p = cmdbuf->param_mem_p + ctx->seq_param_offset; 76820b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = cmdbuf->param_mem_p + ctx->ref_param_offset; 7694dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->vp8_seq_cmd_send = 0; 7704dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 0; 7710cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 772ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 773ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 774ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 775daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruostatic inline void dump_vssporcPicture(struct VssProcPictureVP8 * frame) 776daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo{ 77794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "surface_id 0x%08x\n", frame->surface_id); 77894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "irq %d\n", frame->irq); 77994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "base 0x%08x\n", frame->base); 78094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "base_uv 0x%08x\n", frame->base_uv); 78194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "height %d\n", frame->height); 78294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "width %d\n", frame->width); 78394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "stride %d\n", frame->stride); 78494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "format %d\n", frame->format); 785daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo} 786daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 787daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruostatic void vsp_vp8_dump_commands(vsp_cmdbuf_p cmdbuf) 788daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo{ 789daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int i, cmd_idx; 790daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int cmdbuffer_size = (unsigned char *)cmdbuf->cmd_idx - cmdbuf->cmd_start; /* In bytes */ 791daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int cmd_number = cmdbuffer_size / sizeof(struct vss_command_t); 792daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct vss_command_t *cmd = (struct vss_command_t *)cmdbuf->cmd_start; 793daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = 79494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encPictureParameterBuffer *)cmdbuf->pic_param_p; 795daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 79694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 797daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 798daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (cmd_idx = 0; cmd_idx < cmd_number; cmd_idx++) { 799daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "\n============command start============\ncontext %d\ntype%d\n", 80094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha cmd[cmd_idx].context, cmd[cmd_idx].type); 80194e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (cmd[cmd_idx].type == VssVp8encEncodeFrameCommand) { 80294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "input frame\n"); 80394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha dump_vssporcPicture(&pic->input_frame); 804daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 80594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "recon frame\n"); 80694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha dump_vssporcPicture(&pic->recon_frame); 807daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 808daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "version %d\n", pic->version); 809daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "pic_flags 0x%08x\n", pic->pic_flags); 810daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "prev_frame_dropped %d\n", pic->prev_frame_dropped); 811daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "cpuused %d\n", pic->cpuused); 812daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "sharpness %d\n", pic->sharpness); 813daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "num_token_partitions %d\n", pic->num_token_partitions); 814daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "encoded_frame_size %d\n", pic->encoded_frame_size); 815daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "encoded_frame_base 0x%08x\n", pic->encoded_frame_base); 816daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 817daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 818daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (cmd[cmd_idx].type == VssVp8encSetSequenceParametersCommand) { 819daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_width %d\n", seq->frame_width); 820daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_height %d\n", seq->frame_height); 821daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_rate %d\n", seq->frame_rate); 822daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "error_resilient %d\n", seq->error_resilient); 823daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "num_token_partitions %d\n", seq->num_token_partitions); 824daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_mode %d\n", seq->kf_mode); 825daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_min_dist %d\n", seq->kf_min_dist); 826daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_max_dist %d\n", seq->kf_max_dist); 827daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_target_bitrate %d\n", seq->rc_target_bitrate); 828daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_min_quantizer %d\n", seq->rc_min_quantizer); 829daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_max_quantizer %d\n", seq->rc_max_quantizer); 830daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_undershoot_pct %d\n", seq->rc_undershoot_pct); 831daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_overshoot_pct %d\n", seq->rc_overshoot_pct); 832daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_end_usage %d\n", seq->rc_end_usage); 833daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_sz %d\n", seq->rc_buf_sz); 834daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_initial_sz %d\n", seq->rc_buf_initial_sz); 835daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_optimal_sz %d\n", seq->rc_buf_optimal_sz); 836daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "max_intra_rate %d\n", seq->max_intra_rate); 837daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "cyclic_intra_refresh %d\n", seq->cyclic_intra_refresh); 838daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "concatenate_partitions %d\n", seq->concatenate_partitions); 839daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "recon_buffer_mode %d\n", seq->recon_buffer_mode); 840daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_number_layers %d\n", seq->ts_number_layers); 841daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 842daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < 3; i++) 843daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_target_bitrate[%d] %d\n", i, seq->ts_target_bitrate[i]); 844daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 845daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < 3; i++) 846daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_rate_decimator[%d] %d\n", i, seq->ts_rate_decimator[i]); 84794e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_periodicity %d\n", seq->ts_periodicity); 848daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 84994e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha for (i = 0; i < seq->ts_periodicity; i++) 85094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_layer_id[%d] %d\n", i, seq->ts_layer_id[i]); 851daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 85294e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha for (i = 0; i < 4; i++) { 85394e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha drv_debug_msg(VIDEO_ENCODE_DEBUG, "ref_frame_buffer %d\n", i); 85494e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha dump_vssporcPicture(&seq->ref_frame_buffers[i]); 85594e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 85694e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 857daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 858daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "============command end============\n"); 859daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 860daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo} 861daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 862daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 863ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_EndPicture( 864ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 865ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 866ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 867ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 868ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = obj_context->vsp_cmdbuf; 869ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 87094e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha if (ctx->re_send_seq_params) { 8714dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_vp8_process_dynamic_seqence_param(ctx); 8724dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 8734dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 874daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ctx->obj_context->frame_count=%d\n", ctx->obj_context->frame_count + 1); 875daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vsp_vp8_dump_commands(cmdbuf); 876daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 877ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (cmdbuf->param_mem_p != NULL) { 878ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_unmap(&cmdbuf->param_mem); 879ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_p = NULL; 880ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = NULL; 881ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->end_param_p = NULL; 882ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pipeline_param_p = NULL; 883ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->denoise_param_p = NULL; 884ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->enhancer_param_p = NULL; 885ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->sharpen_param_p = NULL; 886ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->frc_param_p = NULL; 88720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = NULL; 88894e440a7f8f0938610d62f01fa49f9d7c4e3feeczhangzha } 889ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 8908f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo if (vsp_context_flush_cmdbuf(ctx->obj_context)) { 891daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "psb_VP8: flush deblock cmdbuf error\n"); 8926e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 8938f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo } 894ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 895ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 896ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 897ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 898ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostruct format_vtable_s vsp_VP8_vtable = { 899ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoqueryConfigAttributes: 900ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_QueryConfigAttributes, 901ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruovalidateConfig: 902ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_ValidateConfig, 903ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruocreateContext: 904ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_CreateContext, 905ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruodestroyContext: 906ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext, 907ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruobeginPicture: 908ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_BeginPicture, 909ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruorenderPicture: 910ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_RenderPicture, 911ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoendPicture: 912ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_EndPicture 913ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo}; 914