vsp_vp8.c revision 8672be7b10df4af6bd6e0902f6588ab4f7599176
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) 47ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define VSP_VP8ENC_STATE_SIZE (48*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 559ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo#define VP8_ENC_CBR 1 569ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo#define VP8_ENC_CBR_HRD 0 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 66ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define FUNCTION_NAME \ 67ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo printf("ENTER %s.\n",__FUNCTION__); 68ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 69ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define EXIT_FUNCTION_NAME \ 70ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo printf("EXIT %s.\n",__FUNCTION__); 71ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 72ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 73ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_DestroyContext(object_context_p obj_context); 74ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 75ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp__VP8_check_legal_picture(object_context_p obj_context, object_config_p obj_config); 76ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 77ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_QueryConfigAttributes( 78ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAProfile profile, 79ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEntrypoint entrypoint, 80ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAConfigAttrib *attrib_list, 81ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_attribs) 82ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 839ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo int i; 849ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s\n", __FUNCTION__); 859ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 869ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo for (i = 0; i < num_attribs; i++) { 879ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo switch (attrib_list[i].type) { 889ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribRTFormat: 899ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 909ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribRateControl: 919ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 929ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncAutoReference: 939ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo attrib_list[i].value = 1; 949ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 959ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncMaxRefFrames: 969ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo attrib_list[i].value = 4; 979ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 989ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 999ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo default: 1009ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; 1019ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 1029ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 1039ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 104ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 105ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 106ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_ValidateConfig( 107ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 108ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 109ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 1109ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s\n", __FUNCTION__); 1119ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 112ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Check all attributes */ 113ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 114ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_config->attrib_list[i].type) { 115ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAConfigAttribRTFormat: 116ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Ignore */ 117ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 1189ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribRateControl: 1199ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 1209ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncAutoReference: 1219ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 1229ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo case VAConfigAttribEncMaxRefFrames: 1239ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 124ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 125ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 126ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; 127ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 128ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 129ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 130ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 131ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 132ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 133ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_CreateContext( 134ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 135ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_config_p obj_config) 136ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 137ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 1389ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo /* currently vp8 will use vpp's context since they will use the same cmdbuf */ 139ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx; 140ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 141ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 142ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx = (context_VPP_p) calloc(1, sizeof(struct context_VPP_s)); 143ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx) { 144ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 145ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 146ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 147ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 148ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 1499ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo for (i = 0; i < obj_config->attrib_count; i++) { 1509ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo if (obj_config->attrib_list[i].type == VAConfigAttribRateControl) { 1519ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo ctx->rc_mode = obj_config->attrib_list[i].value; 1529ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo break; 1539ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 1549ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo } 155ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 156ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set size */ 157ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz = 0; 158ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encPictureParameterBuffer)); 159ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->pic_param_sz; 160ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_sz = ALIGN_TO_128(sizeof(struct VssVp8encSequenceParameterBuffer)); 161ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->param_sz += ctx->seq_param_sz; 162ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 163ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* set offset */ 164ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset = 0; 165ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_offset = ctx->pic_param_sz; 166ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 167ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = (psb_buffer_p) calloc(1, sizeof(struct psb_buffer_s)); 168ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (NULL == ctx->context_buf) { 169ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; 170ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 171ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 172ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 173ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 174ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_create(obj_context->driver_data, VSP_VP8ENC_STATE_SIZE, psb_bt_vpu_only, ctx->context_buf); 175ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 176ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (VA_STATUS_SUCCESS != vaStatus) { 177ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo goto out; 178ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 179ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 180ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = (void*) ctx; 181ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->obj_context = obj_context; 1829ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo 183ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 184ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 185ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruoout: 186ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext(obj_context); 187ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 188ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx) 189ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx); 190ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 191ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 192ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 193ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 194ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic void vsp_VP8_DestroyContext( 195ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 196ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 197ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 198ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 199ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->context_buf) { 200ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_destroy(ctx->context_buf); 201ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->context_buf); 202ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->context_buf = NULL; 203ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 204ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 205ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->filters) { 206ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(ctx->filters); 207ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->num_filters = 0; 208ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 209ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 210ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo free(obj_context->format_data); 211ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo obj_context->format_data = NULL; 212ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 213ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 214ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_seqence_param( 215ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 216ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer) 217ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 218ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 219ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 220ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 221ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 222de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo int ref_frame_width, ref_frame_height; 223ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 224ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncSequenceParameterBufferVP8 *va_seq = 225ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (VAEncSequenceParameterBufferVP8 *) obj_buffer->buffer_data; 226ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 227ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 228ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 229ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->frame_width = va_seq->frame_width; 230ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->frame_height = va_seq->frame_height; 231ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 232ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /*cmd structures initializations*/ 233ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_width = va_seq->frame_width; 234ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_height = va_seq->frame_height; 2359ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_target_bitrate = va_seq->bits_per_second / 1000; 236ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->max_intra_rate = 0; 2379ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_undershoot_pct = va_seq->rc_undershoot; 2389ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_overshoot_pct = va_seq->rc_overshoot; 239ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* FIXME: API doc says max 5000, but for current default test vector we still use 6000 */ 2409ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_buf_sz = va_seq->hrd_buf_size; 2419ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_buf_initial_sz = va_seq->hrd_buf_initial_fullness; 2429ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_buf_optimal_sz = va_seq->hrd_buf_optimal_fullness; 2439ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_min_quantizer = va_seq->min_qp; 2449ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_max_quantizer = va_seq->max_qp; 2459ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_max_dist = va_seq->kf_max_dist; 2469ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_min_dist = va_seq->kf_min_dist; 247ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->frame_rate = va_seq->frame_rate; 2489ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->error_resilient = va_seq->error_resilient; 249ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->num_token_partitions = 2; // (log2: 2^2 = 4) 2509ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->rc_end_usage = (ctx->rc_mode == VA_RC_CBR) ? VP8_ENC_CBR_HRD : VP8_ENC_CBR; /* CBR */ 2519ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo seq->kf_mode = va_seq->kf_auto; /* AUTO */ 252ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->cyclic_intra_refresh = 0; 253ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 254ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->concatenate_partitions = 1; //Make 0 not to concatenate partitions 255ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 256de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo ref_frame_width = (ctx->frame_width + 2 * 32 + 63) & (~63); 257de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo ref_frame_height = (ctx->frame_height + 2 * 32 + 63) & (~63); 258de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 259ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < 4; i++) 260ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 261ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo seq->ref_frame_buffers[i].surface_id = va_seq->reference_frames[i];// not used now. 262de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo seq->ref_frame_buffers[i].width = ref_frame_width; 263de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo seq->ref_frame_buffers[i].height = ref_frame_height; 264ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 265ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 266ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < 4; i++) { 267ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p ref_surf = SURFACE(va_seq->reference_frames[i]); 2680b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if (!ref_surf) 2690b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun return VA_STATUS_ERROR_UNKNOWN; 2700b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 271ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(seq->ref_frame_buffers[i].base), 272ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_offset, 273ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo &(ref_surf->psb_surface->buf), 274ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, seq); 275ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 276ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 2778672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, &cmdbuf->param_mem, 278ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VssVp8encSetSequenceParametersCommand, 279ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->seq_param_offset, 280ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo sizeof(struct VssVp8encSequenceParameterBuffer)); 281ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 282ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 283ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 284ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 285ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 286ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 287ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_vp8_process_picture_param( 288ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data, 289ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo context_VPP_p ctx, 290ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer, 291ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id) 292ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 293ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 294ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 295ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = ctx->obj_context->vsp_cmdbuf; 296ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 297de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo VAEncSequenceParameterBufferVP8 *va_seq = 298de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo (VAEncSequenceParameterBufferVP8 *) obj_buffer->buffer_data; 299ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAEncPictureParameterBufferVP8 *va_pic = 300ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (VAProcPipelineParameterBuffer *) obj_buffer->buffer_data; 301ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encPictureParameterBuffer *pic = cmdbuf->pic_param_p; 302ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo struct VssVp8encSequenceParameterBuffer *seq = 303ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (struct VssVp8encSequenceParameterBuffer *)cmdbuf->seq_param_p; 304ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VACodedBufferSegment *p = &obj_buffer->codedbuf_mapinfo[0]; 305de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo int ref_frame_width, ref_frame_height; 306de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 307de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo ref_frame_width = (ctx->frame_width + 2 * 32 + 63) & (~63); 308de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo ref_frame_height = (ctx->frame_height + 2 * 32 + 63) & (~63); 309ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 310ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //map parameters 311ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p pObj = BUFFER(va_pic->coded_buf); //tobe modified 3120b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if (!pObj) 3130b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun return VA_STATUS_ERROR_UNKNOWN; 3140b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 315ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p src_surface = SURFACE(surface_id); 316ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 317ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.surface_id = surface_id; 318ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.irq = 1; 319ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.height = ctx->frame_height; 320ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.width = ctx->frame_width; 321591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* NOTE: In VIED API doc, stride must be the nearest integer multiple of 32 */ 322591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo /* use vaCreateSurfaceWithAttribute with VAExternalMemoryNULL to create surface*/ 323591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo //pic->input_frame.stride = (ctx->frame_width + 31) & (~31); 324591565b9a60b10365dd813a19c9d4b8ba44c970bSun, Mingruo pic->input_frame.stride = ctx->obj_context->current_render_target->psb_surface->stride; 325ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->input_frame.format = 0; /* TODO: Specify NV12 = 0 */ 326ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 327de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.surface_id = va_seq->reference_frames[0]; 328de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.irq = 0; 329de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.width = ref_frame_width; 330de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo pic->recon_frame.height = ref_frame_height; 331de74d37a8fb1eef75af159f486a52b419f9d3a00Sun, Mingruo 332ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->version = 0; 333ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->pic_flags = (1<< 2) | /* corresponds to VP8_EFLAG_NO_REF_GF */ 334ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 3) | /* corresponds to VP8_EFLAG_NO_REF_ARF */ 335ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo (1<< 12); /* corresponds to ~VP8_EFLAG_NO_UPD_ENTROPY */ 336ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->prev_frame_dropped = 0; /* Not yet used */ 337ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->cpuused = 5; 338ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->sharpness = 0; 339ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->num_token_partitions = 2; /* 2^2 = 4 partitions */ 340ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->encoded_frame_size = ((sizeof(struct VssVp8encEncodedFrame) + 2*1024*1024 - 1) + 31) & (~31); //pObj->size; 341ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo pic->encoded_frame_base = pObj->buffer_data ;//tobe modified 342ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 343ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 344ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->encoded_frame_base), 345ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset, pObj->psb_buffer, 346ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 347ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 348ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 349ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 350ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_surface_p cur_surf = SURFACE(surface_id); 3510b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun if(!cur_surf) 3520b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun return VA_STATUS_ERROR_UNKNOWN; 3530b79338c7b34af6f2baade29264bcf27cab80e83Wang Kun 354ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_reloc_pic_param(&(pic->input_frame.base), 355ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ctx->pic_param_offset, &(cur_surf->psb_surface->buf), 356ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_loc, pic); 357ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 358ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 359ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //vsp_cmdbuf_insert_command(cmdbuf, &cmdbuf->param_mem, 360ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo // VssVp8encEncodeFrameCommand, 361ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo // ctx->pic_param_offset, 362ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo // sizeof(VssVp8encPictureParameterBuffer)); 363ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo //vsp_cmdbuf_fence_pic_param(cmdbuf, wsbmKBufHandle(wsbmKBuf(cmdbuf->param_mem.drm_buf))); 364ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 3658672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo do { *cmdbuf->cmd_idx++ = 1;\ 366ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo *cmdbuf->cmd_idx++ = VssVp8encEncodeFrameCommand;\ 367ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VSP_RELOC_CMDBUF(cmdbuf->cmd_idx++, ctx->pic_param_offset, &cmdbuf->param_mem);\ 368ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo *cmdbuf->cmd_idx++ = sizeof(struct VssVp8encPictureParameterBuffer);\ 369ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo *cmdbuf->cmd_idx++ = 0; *cmdbuf->cmd_idx++ = 0;\ 370ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf(pObj->psb_buffer->drm_buf)) ; \ 371ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo *cmdbuf->cmd_idx++ = wsbmKBufHandle(wsbmKBuf((&cmdbuf->param_mem)->drm_buf)); } while(0); 372ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 373ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 374ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 375ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 376ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_RenderPicture( 377ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context, 378ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p *buffers, 379ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int num_buffers) 380ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 381ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 382ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int i; 383ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 384ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 385ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VASurfaceID surface_id; 386ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 387ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 388ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo for (i = 0; i < num_buffers; i++) 389ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 390ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 391ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_buffer_p obj_buffer = buffers[i]; 392ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo switch (obj_buffer->type) { 393ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncSequenceParameterBufferType: 394ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = vsp_vp8_process_seqence_param(ctx, obj_buffer); 395ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 396ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo case VAEncPictureParameterBufferType: 397ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo surface_id = obj_context->current_render_surface_id; 398ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = vsp_vp8_process_picture_param(driver_data,ctx, obj_buffer,surface_id); 399ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 400ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo default: 401ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_SUCCESS;//VA_STATUS_ERROR_UNKNOWN; 402ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo DEBUG_FAILURE; 403ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 404ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus != VA_STATUS_SUCCESS) { 405ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo break; 406ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 407ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 408ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 409ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 410ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 411ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 412ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_BeginPicture( 413ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 414ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 415ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo int ret; 416ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo VAStatus vaStatus = VA_STATUS_SUCCESS; 417ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 418ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf; 419ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 420ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* Initialise the command buffer */ 421ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo ret = vsp_context_get_next_cmdbuf(ctx->obj_context); 422ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ret) { 423ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "get next cmdbuf fail\n"); 424ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = VA_STATUS_ERROR_UNKNOWN; 425ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 426ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 427ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 428ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf = obj_context->vsp_cmdbuf; 429ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 430ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (ctx->obj_context->frame_count == 0) /* first picture */ 431ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo { 4328672be7b10df4af6bd6e0902f6588ab4f7599176Sun, Mingruo vsp_cmdbuf_insert_command(cmdbuf, CONTEXT_VP8_ID, ctx->context_buf, Vss_Sys_STATE_BUF_COMMAND, 433ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 0, VSP_VP8ENC_STATE_SIZE); 434ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 435ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 436ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo /* map param mem */ 437ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vaStatus = psb_buffer_map(&cmdbuf->param_mem, &cmdbuf->param_mem_p); 438ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vaStatus) { 439ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return vaStatus; 440ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 441ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 442ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = cmdbuf->param_mem_p; 443ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->seq_param_p = cmdbuf->param_mem_p + ctx->seq_param_offset; 444ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 445ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 446ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 447ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 448ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostatic VAStatus vsp_VP8_EndPicture( 449ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo object_context_p obj_context) 450ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo{ 451ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo INIT_CONTEXT_VPP; 452ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_driver_data_p driver_data = obj_context->driver_data; 453ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_cmdbuf_p cmdbuf = obj_context->vsp_cmdbuf; 454ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 455ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (cmdbuf->param_mem_p != NULL) { 456ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo psb_buffer_unmap(&cmdbuf->param_mem); 457ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->param_mem_p = NULL; 458ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pic_param_p = NULL; 459ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->end_param_p = NULL; 460ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->pipeline_param_p = NULL; 461ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->denoise_param_p = NULL; 462ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->enhancer_param_p = NULL; 463ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->sharpen_param_p = NULL; 464ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo cmdbuf->frc_param_p = NULL; 465ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo } 466ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 4679ab46f9986463a0a5e6ba912fffb71be24d119d9Sun, Mingruo// ctx->obj_context->frame_count++; 468ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 469ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo if (vsp_context_flush_cmdbuf(ctx->obj_context)) 470ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo drv_debug_msg(VIDEO_DEBUG_GENERAL, "psb_VPP: flush deblock cmdbuf error\n"); 471ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 472ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo return VA_STATUS_SUCCESS; 473ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo} 474ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 475ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruostruct format_vtable_s vsp_VP8_vtable = { 476ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoqueryConfigAttributes: 477ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_QueryConfigAttributes, 478ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruovalidateConfig: 479ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_ValidateConfig, 480ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruocreateContext: 481ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_CreateContext, 482ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruodestroyContext: 483ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_DestroyContext, 484ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruobeginPicture: 485ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_BeginPicture, 486ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruorenderPicture: 487ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_RenderPicture, 488ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, MingruoendPicture: 489ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo vsp_VP8_EndPicture 490ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo}; 491ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo 492