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