vsp_vp8.c revision daf2d4ff530a3c8ad9f789d5cceeccaf63825965
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; 940cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo unsigned int 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) { 1150cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRTFormat: 1160cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 1170cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo case VAConfigAttribRateControl: 1180cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo attrib_list[i].value = VA_RC_CBR | 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: 1270cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo attrib_list[i].value = 3; 1280cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 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; 1820cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vp8_seq->rc_end_usage = VP8_ENC_CBR_HRD; 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; 192768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo vp8_seq->ts_rate_decimator[0] = 1; 193768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo vp8_seq->ts_periodicity = 1; 194768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo vp8_seq->ts_target_bitrate[0] = 2000; 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) { 219233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ctx->vp8_seq_param.rc_end_usage = 220233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha obj_config->attrib_list[i].value == VA_RC_VBR ? 221233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VP8_ENC_CBR: 222233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VP8_ENC_CBR_HRD; 2230cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 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; 297233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha int ref_frame_width, ref_frame_height,ref_chroma_height, ref_size; 298ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 299ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncSequenceParameterBufferVP8 *va_seq = 300ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (VAEncSequenceParameterBufferVP8 *) obj_buffer->buffer_data; 3010cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = &ctx->vp8_seq_param; 302233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha struct VssVp8encSequenceParameterBuffer *seq_to_firmware = 303ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (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 / 312233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha (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; 318768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo seq->ts_target_bitrate[0] = seq->rc_target_bitrate; 319ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 3200cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 2) { 3210cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[0] = 0; 3220cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[1] = 1; 3230cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_periodicity = 2; 3240cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else if (ctx->temporal_layer_number == 3) { 3250cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[0] = 0; 3260cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[1] = 2; 3270cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[2] = 1; 3280cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_layer_id[3] = 2; 3290cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_periodicity = 4; 3300cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 3310cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 332233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (seq->frame_width + 2 * 32 + 63) & (~63); 333233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (seq->frame_height + 2 * 32 + 63) & (~63); 334233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_chroma_height = (ref_frame_height / 2 + 63) & (~63); 335233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_size = ref_frame_width * (ref_frame_height + ref_chroma_height); 336de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 33720b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo for (i = 0; i < 4; i++) { 3381e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].surface_id = va_seq->reference_frames[i]; 3391e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].width = ref_frame_width; 3401e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo seq->ref_frame_buffers[i].height = ref_frame_height; 34120b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo } 34220b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo 343ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < 4; i++) { 3441e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo object_surface_p ref_surf = SURFACE(va_seq->reference_frames[i]); 3450cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (!ref_surf) 3460cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 3470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 3480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ref_surf->is_ref_surface = 2; 3490b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 3501e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (ref_surf->psb_surface->size < ref_size) { 3511e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo /* re-alloc buffer */ 3521e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ref_surf->psb_surface->size = ref_size; 3531e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo psb_buffer_destroy(&ref_surf->psb_surface->buf); 3541e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = psb_buffer_create(driver_data, ref_surf->psb_surface->size, psb_bt_surface, &ref_surf->psb_surface->buf); 3551e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) 3561e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo return VA_STATUS_ERROR_ALLOCATION_FAILED; 3571e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo } 3581e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 3590cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(seq->ref_frame_buffers[i].base), 3600cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 0, 3610cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo &(ref_surf->psb_surface->buf), 3620cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo cmdbuf->param_mem_loc, seq); 363ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 364ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 365233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *seq_to_firmware = *seq; 3661e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 3671e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 3681e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo VssVp8encSetSequenceParametersCommand, 3691e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->seq_param_offset, 3701e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo sizeof(struct VssVp8encSequenceParameterBuffer)); 3711e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo ctx->vp8_seq_cmd_send = 1; 372ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 373ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 374ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 375ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 3764dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_dynamic_seqence_param( 3774dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha context_VPP_p ctx) 3784dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 3794dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3804dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 3814dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 3824dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha int ref_frame_width, ref_frame_height; 3834dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3844dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha struct VssVp8encSequenceParameterBuffer *seq = 3854dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 3864dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha *seq = ctx->vp8_seq_param ; 388233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha //todo: fix it for multi temporal layers 3890cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->max_intra_rate = 100 * ctx->max_frame_size / 3900cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo (seq->rc_target_bitrate * 1000 / seq->frame_rate); 3914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3920cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (!ctx->vp8_seq_cmd_send) { 3930cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 3944dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VssVp8encSetSequenceParametersCommand, 3954dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->seq_param_offset, 3964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha sizeof(struct VssVp8encSequenceParameterBuffer)); 3970cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 3984dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 3994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 4004dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 401ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 402ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 403ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_picture_param( 404ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data, 405ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 406ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer, 407ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id) 408ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 409ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 410ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 411ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 412ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 413ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncPictureParameterBufferVP8 *va_pic = 414daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo (VAEncPictureParameterBufferVP8 *) obj_buffer->buffer_data; 415daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = 416daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo (struct VssVp8encPictureParameterBuffer *)cmdbuf->pic_param_p; 417ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 418ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 419ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VACodedBufferSegment *p = &obj_buffer->codedbuf_mapinfo[0]; 420de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo int ref_frame_width, ref_frame_height; 421de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 422233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_width = (ctx->vp8_seq_param.frame_width + 2 * 32 + 63) & (~63); 423233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha ref_frame_height = (ctx->vp8_seq_param.frame_height + 2 * 32 + 63) & (~63); 424ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 425ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //map parameters 426ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p pObj = BUFFER(va_pic->coded_buf); //tobe modified 4270b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if (!pObj) 428233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha return VA_STATUS_ERROR_UNKNOWN; 4290b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 430ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p src_surface = SURFACE(surface_id); 431ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 432ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.surface_id = surface_id; 433ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.irq = 1; 434233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.height = ctx->vp8_seq_param.frame_height; 435233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.width = ctx->vp8_seq_param.frame_width; 436591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* NOTE: In VIED API doc, stride must be the nearest integer multiple of 32 */ 437591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* use vaCreateSurfaceWithAttribute with VAExternalMemoryNULL to create surface*/ 438591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo //pic->input_frame.stride = (ctx->frame_width + 31) & (~31); 439591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo pic->input_frame.stride = ctx->obj_context->current_render_target->psb_surface->stride; 440ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.format = 0; /* TODO: Specify NV12 = 0 */ 441ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 442de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.irq = 0; 443de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.width = ref_frame_width; 444de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.height = ref_frame_height; 445de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 446ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->version = 0; 4474dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#if 0 448ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->pic_flags = (1<< 2) | /* corresponds to VP8_EFLAG_NO_REF_GF */ 449ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 3) | /* corresponds to VP8_EFLAG_NO_REF_ARF */ 450ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 12); /* corresponds to ~VP8_EFLAG_NO_UPD_ENTROPY */ 4514dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#else 4524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vp8_fw_pic_flags flags; 4534dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.value =0; 4544dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 455025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.force_kf = va_pic->ref_flags.bits.force_kf; 456025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_last = va_pic->ref_flags.bits.no_ref_last; 457025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_gf = va_pic->ref_flags.bits.no_ref_gf; 458025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo flags.bits.no_ref_arf = va_pic->ref_flags.bits.no_ref_arf; 4594dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.upd_last = va_pic->pic_flags.bits.refresh_last; 46019fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo flags.bits.upd_gf = va_pic->pic_flags.bits.copy_buffer_to_golden; 46119fc7221d7f03f50d8508136ed306c6fb905f03cSun, Mingruo flags.bits.upd_arf = va_pic->pic_flags.bits.copy_buffer_to_alternate; 4624dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_last = !va_pic->pic_flags.bits.refresh_last; 4634dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_gf = !va_pic->pic_flags.bits.refresh_golden_frame; 4644dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha flags.bits.no_upd_arf = !va_pic->pic_flags.bits.refresh_alternate_frame; 4650cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.upd_entropy = va_pic->pic_flags.bits.refresh_entropy_probs; 4660cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number > 1) 4670cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.upd_entropy = 0; 4680cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 4690cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 2) { 4700cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* 4710cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * layer 0: frame #0,#2,#4... 4720cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * layer 1: frame #1,#3,#5... 4730cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * 4740cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #1 refers frame #0 4750cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #2 refers frame #0 4760cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #3 refers frame #2 4770cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #4 refers frame #2 4780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * ........ 4790cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo */ 4800cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->obj_context->frame_count % 2 == 0) { 4810cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* layer 0: base layer */ 4820cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 0; 4830cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 1; 4840cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_arf = 1; 4850cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 4860cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_last = 0; 4870cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.upd_last = 1; 4880cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 4890cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* layer 1 */ 4900cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.force_kf = 0; 4910cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 0; 4920cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 1; 4930cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_arf = 1; 4940cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 4950cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_last = 1; 4960cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 4970cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 4980cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo else if (ctx->temporal_layer_number >= 3) { 4990cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* 5000cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * layer 0: frame #0,#4,#8... 5010cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * layer 1: frame #2,#6,#10.... 5020cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * layer 2: frame #1,#3,#5,#7,#9,#11... 5030cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * 5040cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #1 refers frame #0 5050cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #2 refers frame #0 5060cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #3 refers frame #2 5070cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * frame #4 refers frame #0 5080cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo * ........ 5090cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo */ 5100cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->obj_context->frame_count % 4 == 0) { 5110cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* layer 0: base layer */ 5120cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 0; 5130cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 1; 5140cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_arf = 1; 5150cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5160cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.upd_last = 1; 5170cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_last = 0; 5180cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else if (ctx->obj_context->frame_count % 4 == 2) { 5190cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* layer 1: update golden ref frame */ 5200cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.force_kf = 0; 5210cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 0; 5220cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 1; 5230cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_arf = 1; 5240cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5250cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_last = 1; 5260cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_gf = 0; 5270cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.upd_gf = 3; 5280cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 5290cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo /* layer 2 */ 5300cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.force_kf = 0; 5310cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->obj_context->frame_count % 4 == 1) { 5320cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 0; 5330cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 0; 5340cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 5350cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_last = 1; 5360cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_gf = 0; 5370cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 5380cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_ref_arf = 1; 5390cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5400cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_last = 1; 5410cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo flags.bits.no_upd_gf = 1; 5420cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 5430cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 5444dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 5450cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo pic->pic_flags = flags.value; 5464dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha#endif 5470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 548ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->prev_frame_dropped = 0; /* Not yet used */ 549ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->cpuused = 5; 5504dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->sharpness = va_pic->sharpness_level; 5514dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->num_token_partitions = va_pic->pic_flags.bits.num_token_partitions; /* 2^2 = 4 partitions */ 5524dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pic->encoded_frame_size = pObj->size & ~31; 553daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo pic->encoded_frame_base = (uint32_t)pObj->buffer_data; 554ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 555ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 556ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->encoded_frame_base), 557ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset, pObj->psb_buffer, 558ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 559ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 560ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 561ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 562ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p cur_surf = SURFACE(surface_id); 5630cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if(!cur_surf) 5640cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 5650b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 566ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base), 5671e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo 0, &(cur_surf->psb_surface->buf), 568ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 5691e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base_uv), 570233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha pic->input_frame.stride * ctx->obj_context->current_render_target->height, 5710cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo &(cur_surf->psb_surface->buf), 5720cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo cmdbuf->param_mem_loc, pic); 573ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 574ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 575233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = CONTEXT_VP8_ID; 576233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = VssVp8encEncodeFrameCommand; 577233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha VSP_RELOC_CMDBUF(cmdbuf->cmd_idx++, ctx->pic_param_offset, &cmdbuf->param_mem); 578233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = sizeof(struct VssVp8encPictureParameterBuffer); 579233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = 0; *cmdbuf->cmd_idx++ = 0; 580233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf(pObj->psb_buffer->drm_buf)) ; 581233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf((&cmdbuf->param_mem)->drm_buf)); 582ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 583ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 584ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 585ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 5864dadd5529a552fd10d5f270b8423bee758c42fc5zhangzhastatic VAStatus vsp_vp8_process_misc_param(context_VPP_p ctx, object_buffer_p obj_buffer) 5874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha{ 5884dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBuffer *pBuffer; 5894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterAIR *air_param; 5904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterBufferMaxFrameSize *max_frame_size_param; 5914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterFrameRate *frame_rate_param; 5924dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAEncMiscParameterRateControl *rate_control_param; 593025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo VAEncMiscParameterHRD *hrd_param; 59416752f679f82f92454ac160f0457be83e0fa4b77zhangzha VAEncMiscParameterTemporalLayerStructure* tslayer_param; 5950cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = &ctx->vp8_seq_param; 5964dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha VAStatus vaStatus = VA_STATUS_SUCCESS; 597daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo uint32_t layer_id, i; 5980cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 5994dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ASSERT(obj_buffer->type == VAEncMiscParameterBufferType); 6004dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha pBuffer = (VAEncMiscParameterBuffer *) obj_buffer->buffer_data; 6014dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->size = 0; 6020cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6034dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha switch (pBuffer->type) { 60416752f679f82f92454ac160f0457be83e0fa4b77zhangzha case VAEncMiscParameterTypeTemporalLayerStructure: 60516752f679f82f92454ac160f0457be83e0fa4b77zhangzha tslayer_param = (VAEncMiscParameterTemporalLayerStructure *)pBuffer->data; 60616752f679f82f92454ac160f0457be83e0fa4b77zhangzha //verify parameter 607daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (tslayer_param->number_of_layers < 2 && tslayer_param->number_of_layers > 3) { 608daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "Temporal Layer Number should be 2 or 3\n"); 609daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 61016752f679f82f92454ac160f0457be83e0fa4b77zhangzha break; 61116752f679f82f92454ac160f0457be83e0fa4b77zhangzha } 61216752f679f82f92454ac160f0457be83e0fa4b77zhangzha 613daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (tslayer_param->periodicity > 32 || tslayer_param->periodicity < 1) { 614daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "ts_periodicity shoulde be 1 - 32\n"); 615daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 616daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo break; 61716752f679f82f92454ac160f0457be83e0fa4b77zhangzha } 61816752f679f82f92454ac160f0457be83e0fa4b77zhangzha 619daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < tslayer_param->periodicity; i++) { 62016752f679f82f92454ac160f0457be83e0fa4b77zhangzha layer_id = tslayer_param->layer_id[i]; 621daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (layer_id > (tslayer_param->number_of_layers - 1)) { 622daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "layer_id shoulde be 0 - %d\n", 623daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo tslayer_param->number_of_layers - 1); 624daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 625daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo break; 62616752f679f82f92454ac160f0457be83e0fa4b77zhangzha } 62716752f679f82f92454ac160f0457be83e0fa4b77zhangzha } 62816752f679f82f92454ac160f0457be83e0fa4b77zhangzha 62916752f679f82f92454ac160f0457be83e0fa4b77zhangzha if (vaStatus == VA_STATUS_ERROR_INVALID_PARAMETER ) 630daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo break; 63116752f679f82f92454ac160f0457be83e0fa4b77zhangzha 63216752f679f82f92454ac160f0457be83e0fa4b77zhangzha seq->ts_number_layers = tslayer_param->number_of_layers; 63316752f679f82f92454ac160f0457be83e0fa4b77zhangzha ctx->temporal_layer_number = tslayer_param->number_of_layers; 63416752f679f82f92454ac160f0457be83e0fa4b77zhangzha seq->ts_periodicity = tslayer_param->periodicity; 635daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 636daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < seq->ts_periodicity; i++) 637daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo seq->ts_layer_id[i] = tslayer_param->layer_id[i]; 638daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 639daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo ctx->re_send_seq_params = 1; 64016752f679f82f92454ac160f0457be83e0fa4b77zhangzha break; 6414dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeFrameRate: 6424dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha frame_rate_param = (VAEncMiscParameterFrameRate *)pBuffer->data; 6434dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (frame_rate_param->framerate < 1 || frame_rate_param->framerate > 65535) { 6444dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 6454dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6464dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 6480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 1) { 6490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (seq->frame_rate != frame_rate_param->framerate) { 6500cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate changed from %d to %d\n", 6510cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->frame_rate, 6520cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo frame_rate_param->framerate); 653daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo seq->frame_rate = frame_rate_param->framerate; 654daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo ctx->re_send_seq_params = 1; 655daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 6560cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 6570cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id = frame_rate_param->framerate_flags.bits.temporal_id % 3; 6580cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->frame_rate[layer_id] != frame_rate_param->framerate) { 6590cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "frame rate of layer %d will be changed from %d to %d\n", 6600cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id, ctx->frame_rate[layer_id], frame_rate_param->framerate); 6610cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->frame_rate[layer_id] = frame_rate_param->framerate; 662daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (layer_id == ctx->temporal_layer_number - 1) { //top layer 663daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo seq->frame_rate = ctx->frame_rate[layer_id]; 664daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 665daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 6660cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_rate_decimator[layer_id] = 667233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->frame_rate / ctx->frame_rate[layer_id]; 6680cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1 ; 6690cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 670233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha } 6714dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6724dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeRateControl: 6734dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param = (VAEncMiscParameterRateControl *)pBuffer->data; 6744dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (rate_control_param->initial_qp > 63 || 6754dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param->min_qp > 63) { 6764dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "Initial_qp(%d) and min_qpinitial_qp(%d) " 6774dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "are invalid.\nQP shouldn't be larger than 63 for VP8\n", 6784dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha rate_control_param->initial_qp, rate_control_param->min_qp); 6794dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 6804dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 6814dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 682233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 683233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->min_qp != seq->rc_min_quantizer) { 6844dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "min_qp was changed from %d to %d\n", 685233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer, rate_control_param->min_qp); 686233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_min_quantizer = rate_control_param->min_qp; 6874dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 6880cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 689233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->max_qp != seq->rc_max_quantizer) { 690025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max_qp was changed from %d to %d\n", 691233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer, rate_control_param->max_qp); 692233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_max_quantizer = rate_control_param->max_qp; 693025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 694233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 6950cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo // no initial qp for vp8 696233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha 697233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha if (rate_control_param->target_percentage != seq->rc_undershoot_pct) { 698025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "rc_undershoot was changed from %d to %d\n", 699233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct, rate_control_param->target_percentage); 700233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_undershoot_pct = rate_control_param->target_percentage; 701025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo } 702025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo 7030cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->temporal_layer_number == 1) { 7040cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if(rate_control_param->bits_per_second / 1000 != seq->rc_target_bitrate) { 705233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 706233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->rc_target_bitrate, rate_control_param->bits_per_second/1000); 7070cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_target_bitrate = rate_control_param->bits_per_second / 1000; 708768afffeffa1b5e3e51534d26a6472e7e8d257bdSun, Mingruo seq->ts_target_bitrate[0] = rate_control_param->bits_per_second / 1000; 7090cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 7100cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } else { 7110cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo layer_id = rate_control_param->rc_flags.bits.temporal_id % 3; 7120cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if(rate_control_param->bits_per_second / 1000 != seq->ts_target_bitrate[layer_id]) { 713233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha drv_debug_msg(VIDEO_DEBUG_ERROR, "bitrate was changed from %dkbps to %dkbps\n", 714233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->ts_target_bitrate[layer_id], rate_control_param->bits_per_second/1000); 7150cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->ts_target_bitrate[layer_id] = rate_control_param->bits_per_second / 1000; 7160cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 7170cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo } 7180cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7190cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1; 7204dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 7214dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeMaxFrameSize: 7224dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha max_frame_size_param = (VAEncMiscParameterBufferMaxFrameSize *)pBuffer->data; 7234dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (ctx->max_frame_size == max_frame_size_param->max_frame_size) 7244dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 7250cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7266e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "max frame size changed from %d to %d\n", 7274dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size, max_frame_size_param->max_frame_size); 7284dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->max_frame_size = max_frame_size_param->max_frame_size ; 7294dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 1 ; 7304dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 7314dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterTypeAIR: 7324dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param = (VAEncMiscParameterAIR *)pBuffer->data; 7334dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha if (air_param->air_num_mbs > 65535 || 7344dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_threshold > 65535) { 7350cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; 7360cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 7374dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 7380cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7394dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha drv_debug_msg(VIDEO_DEBUG_GENERAL, "air slice size changed to num_air_mbs %d " 7404dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha "air_threshold %d, air_auto %d\n", 7414dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_num_mbs, air_param->air_threshold, 7424dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha air_param->air_auto); 743233384d7e88c1295775705f074fbe3fd2e57ff35zhangzha seq->cyclic_intra_refresh = air_param->air_threshold; 7444dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 745025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeHRD: 7460cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo hrd_param = (VAEncMiscParameterHRD *)pBuffer->data; 7470cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_sz = hrd_param->buffer_size; 7480cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_initial_sz = hrd_param->initial_buffer_fullness; 7490cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo seq->rc_buf_optimal_sz = hrd_param->optimal_buffer_fullness; 7500cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo ctx->re_send_seq_params = 1; 7510cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 752025f7c7e9643d6bffae04ee17b0e7cc29103bf8dSun, Mingruo case VAEncMiscParameterTypeQualityLevel: 7530cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo break; 7540cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7554dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha default: 7564dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = VA_STATUS_ERROR_UNKNOWN; 7574dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha DEBUG_FAILURE; 7584dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 7594dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 7600cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7614dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha free(obj_buffer->buffer_data); 7624dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha obj_buffer->buffer_data = NULL; 7630cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 7644dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha return vaStatus; 7654dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha} 766ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_RenderPicture( 767ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 768ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p *buffers, 769ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_buffers) 770ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 771ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 772ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 773ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 774ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 775ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id; 776ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 777ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 7780cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo for (i = 0; i < num_buffers; i++) { 779ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 780ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer = buffers[i]; 781ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_buffer->type) { 782ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncSequenceParameterBufferType: 7831e6056363fa9a36f2014e9d0eb62f0bc4c7811d4Sun, Mingruo vaStatus = vsp_vp8_process_seqence_param(driver_data, ctx, obj_buffer); 784ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 785ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncPictureParameterBufferType: 786ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo surface_id = obj_context->current_render_surface_id; 787ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = vsp_vp8_process_picture_param(driver_data,ctx, obj_buffer,surface_id); 788ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 7894dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha case VAEncMiscParameterBufferType: 7904dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vaStatus = vsp_vp8_process_misc_param(ctx, obj_buffer); 7914dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha break; 792ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 793ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_SUCCESS;//VA_STATUS_ERROR_UNKNOWN; 794ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 795ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 7960cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 797ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus != VA_STATUS_SUCCESS) { 798ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 799ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 800ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 801ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 802ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 803ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 804ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 805ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_BeginPicture( 806ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 807ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 808ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int ret; 809ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 810ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 811ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf; 812ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 813ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Initialise the command buffer */ 814ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ret = vsp_context_get_next_cmdbuf(ctx->obj_context); 815ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ret) { 816ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "get next cmdbuf fail\n"); 817ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_UNKNOWN; 818ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 819ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 820ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 821ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf = obj_context->vsp_cmdbuf; 822ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 8230cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if (ctx->obj_context->frame_count == 0) { /* first picture */ 8248672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, ctx->context_buf, Vss_Sys_STATE_BUF_COMMAND, 825ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 0, VSP_VP8ENC_STATE_SIZE); 826ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 827ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 828ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* map param mem */ 829ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_map(&cmdbuf->param_mem, &cmdbuf->param_mem_p); 830ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus) { 831ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 832ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 833ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 834ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = cmdbuf->param_mem_p; 835ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->seq_param_p = cmdbuf->param_mem_p + ctx->seq_param_offset; 83620b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = cmdbuf->param_mem_p + ctx->ref_param_offset; 8374dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->vp8_seq_cmd_send = 0; 8384dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha ctx->re_send_seq_params = 0; 8390cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo 840ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 841ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 842ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 843daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruostatic inline void dump_vssporcPicture(struct VssProcPictureVP8 * frame) 844daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo{ 845daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "surface_id 0x%08x\n", frame->surface_id); 846daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "irq %d\n", frame->irq); 847daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "base 0x%08x\n", frame->base); 848daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "base_uv 0x%08x\n", frame->base_uv); 849daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "height %d\n", frame->height); 850daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "width %d\n", frame->width); 851daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "stride %d\n", frame->stride); 852daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_ERROR, "format %d\n", frame->format); 853daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo} 854daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 855daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruostatic void vsp_vp8_dump_commands(vsp_cmdbuf_p cmdbuf) 856daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo{ 857daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int i, cmd_idx; 858daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int cmdbuffer_size = (unsigned char *)cmdbuf->cmd_idx - cmdbuf->cmd_start; /* In bytes */ 859daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo unsigned int cmd_number = cmdbuffer_size / sizeof(struct vss_command_t); 860daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct vss_command_t *cmd = (struct vss_command_t *)cmdbuf->cmd_start; 861daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = 862daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo (struct VssVp8encPictureParameterBuffer *)cmdbuf->pic_param_p; 863daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 864daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 865daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 866daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (cmd_idx = 0; cmd_idx < cmd_number; cmd_idx++) { 867daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "\n============command start============\ncontext %d\ntype%d\n", 868daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo cmd[cmd_idx].context, cmd[cmd_idx].type); 869daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (cmd[cmd_idx].type == VssVp8encEncodeFrameCommand) { 870daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "input frame\n"); 871daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo dump_vssporcPicture(&pic->input_frame); 872daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 873daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "recon frame\n"); 874daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo dump_vssporcPicture(&pic->recon_frame); 875daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 876daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "version %d\n", pic->version); 877daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "pic_flags 0x%08x\n", pic->pic_flags); 878daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "prev_frame_dropped %d\n", pic->prev_frame_dropped); 879daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "cpuused %d\n", pic->cpuused); 880daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "sharpness %d\n", pic->sharpness); 881daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "num_token_partitions %d\n", pic->num_token_partitions); 882daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "encoded_frame_size %d\n", pic->encoded_frame_size); 883daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "encoded_frame_base 0x%08x\n", pic->encoded_frame_base); 884daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 885daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 886daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo if (cmd[cmd_idx].type == VssVp8encSetSequenceParametersCommand) { 887daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_width %d\n", seq->frame_width); 888daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_height %d\n", seq->frame_height); 889daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "frame_rate %d\n", seq->frame_rate); 890daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "error_resilient %d\n", seq->error_resilient); 891daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "num_token_partitions %d\n", seq->num_token_partitions); 892daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_mode %d\n", seq->kf_mode); 893daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_min_dist %d\n", seq->kf_min_dist); 894daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "kf_max_dist %d\n", seq->kf_max_dist); 895daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_target_bitrate %d\n", seq->rc_target_bitrate); 896daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_min_quantizer %d\n", seq->rc_min_quantizer); 897daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_max_quantizer %d\n", seq->rc_max_quantizer); 898daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_undershoot_pct %d\n", seq->rc_undershoot_pct); 899daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_overshoot_pct %d\n", seq->rc_overshoot_pct); 900daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_end_usage %d\n", seq->rc_end_usage); 901daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_sz %d\n", seq->rc_buf_sz); 902daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_initial_sz %d\n", seq->rc_buf_initial_sz); 903daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "rc_buf_optimal_sz %d\n", seq->rc_buf_optimal_sz); 904daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "max_intra_rate %d\n", seq->max_intra_rate); 905daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "cyclic_intra_refresh %d\n", seq->cyclic_intra_refresh); 906daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "concatenate_partitions %d\n", seq->concatenate_partitions); 907daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "recon_buffer_mode %d\n", seq->recon_buffer_mode); 908daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_number_layers %d\n", seq->ts_number_layers); 909daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 910daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < 3; i++) 911daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_target_bitrate[%d] %d\n", i, seq->ts_target_bitrate[i]); 912daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 913daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < 3; i++) 914daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_rate_decimator[%d] %d\n", i, seq->ts_rate_decimator[i]); 915daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_periodicity %d\n", seq->ts_periodicity); 916daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 917daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < seq->ts_periodicity; i++) 918daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ts_layer_id[%d] %d\n", i, seq->ts_layer_id[i]); 919daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 920daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo for (i = 0; i < 4; i++) { 921daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ref_frame_buffer %d\n", i); 922daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo dump_vssporcPicture(&seq->ref_frame_buffers[i]); 923daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 924daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 925daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 926daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "============command end============\n"); 927daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo } 928daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo} 929daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 930daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 931ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_EndPicture( 932ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 933ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 934ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 935ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 936ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = obj_context->vsp_cmdbuf; 937ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 9380cb595fd6d4185c319a05ef6ba67c46349db10d9Sun, Mingruo if(ctx->re_send_seq_params) { 9394dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha vsp_vp8_process_dynamic_seqence_param(ctx); 9404dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha } 9414dadd5529a552fd10d5f270b8423bee758c42fc5zhangzha 942daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_ENCODE_DEBUG, "ctx->obj_context->frame_count=%d\n", ctx->obj_context->frame_count + 1); 943daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo vsp_vp8_dump_commands(cmdbuf); 944daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo 945ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (cmdbuf->param_mem_p != NULL) { 946ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_unmap(&cmdbuf->param_mem); 947ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_p = NULL; 948ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = NULL; 949ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->end_param_p = NULL; 950ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pipeline_param_p = NULL; 951ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->denoise_param_p = NULL; 952ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->enhancer_param_p = NULL; 953ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->sharpen_param_p = NULL; 954ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->frc_param_p = NULL; 95520b931cf997abb618b4e74770cf71378e14494f4Sun, Mingruo cmdbuf->ref_param_p = NULL; 956ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 957ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 9588f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo if (vsp_context_flush_cmdbuf(ctx->obj_context)) { 959daf2d4ff530a3c8ad9f789d5cceeccaf63825965Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "psb_VP8: flush deblock cmdbuf error\n"); 9606e762d8b43b8a9cf3b7111877d9dc9579a9170afSun, Mingruo return VA_STATUS_ERROR_UNKNOWN; 9618f868258b5396c3d39dd33f2d05a829ff855aa0dSun, Mingruo } 962ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 963ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 964ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 965ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 966ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostruct format_vtable_s vsp_VP8_vtable = { 967ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoqueryConfigAttributes: 968ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_QueryConfigAttributes, 969ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruovalidateConfig: 970ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_ValidateConfig, 971ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruocreateContext: 972ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_CreateContext, 973ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruodestroyContext: 974ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext, 975ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruobeginPicture: 976ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_BeginPicture, 977ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruorenderPicture: 978ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_RenderPicture, 979ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoendPicture: 980ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_EndPicture 981ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo}; 982ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 983