mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-11-03 09:40:50 +08:00
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@1191 6e48237b-75ef-9749-8fc9-41990f28c85a
1520 lines
59 KiB
C
1520 lines
59 KiB
C
/*
|
|
* Copyright 2015 Rockchip Electronics Co. LTD
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#define MODULE_TAG "h264e_hal_test"
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
|
|
#ifdef RKPLATFORM
|
|
#include <sys/time.h>
|
|
#endif
|
|
|
|
#include "mpp_log.h"
|
|
#include "mpp_mem.h"
|
|
#include "mpp_time.h"
|
|
#include "mpp_common.h"
|
|
#include "mpp_frame.h"
|
|
|
|
#include "hal_h264e_api.h"
|
|
#include "hal_h264e.h"
|
|
#include "hal_h264e_vpu.h"
|
|
#include "hal_h264e_rkv.h"
|
|
|
|
|
|
static HalDeviceId test_device_id = HAL_RKVENC;
|
|
|
|
#define MAX_FRAME_LUMA_SIZE (4096*2304)
|
|
#define MAX_FRAME_TOTAL_SIZE (MAX_FRAME_LUMA_SIZE*3/2)
|
|
#define GET_U32(val) ((RK_U32)(*((RK_U32 *)&(val))))
|
|
//#define GET_U32(val) ((RK_U32)(val))
|
|
|
|
#define H264E_HAL_FSCAN(fp, fmt, dst) \
|
|
do { \
|
|
fscanf(fp, fmt, &data); \
|
|
dst = data; \
|
|
fgets(temp, 512, fp); \
|
|
}while(0)
|
|
|
|
//golden data from on2 project
|
|
FILE *fp_golden_syntax_in = NULL;
|
|
FILE *fp_mpp_syntax_in = NULL;
|
|
FILE *fp_mpp_reg_in = NULL;
|
|
FILE *fp_mpp_reg_out = NULL;
|
|
FILE *fp_h264e_yuv_in = NULL;
|
|
FILE *fp_mpp_strm_out = NULL;
|
|
FILE *fp_mpp_feedback = NULL;
|
|
FILE *fp_mpp_yuv_in = NULL;
|
|
FILE *fp_mpp_wr2hw_reg_in = NULL;
|
|
|
|
RK_U32 g_frame_cnt = 0;
|
|
RK_U32 g_frame_read_cnt = 0;
|
|
#ifdef H264E_DUMP_DATA_TO_FILE
|
|
extern void hal_h264e_vpu_dump_mpp_strm_out(h264e_hal_context *ctx, MppBuffer hw_buf);
|
|
#endif
|
|
extern void hal_h264e_rkv_dump_mpp_strm_out(h264e_hal_context *ctx, MppBuffer *hw_buf);
|
|
typedef struct h264e_hal_test_cfg_t {
|
|
RK_U32 hw_mode;
|
|
char input_syntax_file_path[256];
|
|
char input_yuv_file_path[256];
|
|
} h264e_hal_test_cfg;
|
|
|
|
static RK_U32 h264e_rkv_revert_csp(h264e_hal_csp_info csp_info)
|
|
{
|
|
h264e_hal_rkv_csp fmt = (h264e_hal_rkv_csp)csp_info.fmt;
|
|
RK_U32 cswap = csp_info.cswap;
|
|
RK_U32 aswap = csp_info.aswap;
|
|
MppFrameFormat dst_fmt;
|
|
|
|
switch(fmt) {
|
|
case H264E_RKV_CSP_YUV420P: {
|
|
dst_fmt = MPP_FMT_YUV420P;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_YUV420SP: {
|
|
dst_fmt = cswap? MPP_FMT_YUV420SP_VU : MPP_FMT_YUV420SP;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_YUV422P: {
|
|
dst_fmt = MPP_FMT_YUV422P;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_YUV422SP: {
|
|
dst_fmt = cswap? MPP_FMT_YUV422SP_VU : MPP_FMT_YUV422SP;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_YUYV422: {
|
|
dst_fmt = MPP_FMT_YUV422_YUYV;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_UYVY422: {
|
|
dst_fmt = MPP_FMT_YUV422_UYVY;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_BGR565: {
|
|
dst_fmt = cswap? MPP_FMT_RGB565 : MPP_FMT_BGR565;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_BGR888: {
|
|
dst_fmt = cswap? MPP_FMT_RGB888 : MPP_FMT_BGR888;
|
|
break;
|
|
}
|
|
case H264E_RKV_CSP_BGRA8888: {
|
|
if(aswap)
|
|
dst_fmt = cswap? MPP_FMT_ABGR8888 : MPP_FMT_ARGB8888;
|
|
else
|
|
dst_fmt = MPP_FMT_BUTT;
|
|
|
|
break;
|
|
}
|
|
default: {
|
|
h264e_hal_log_err("invalid csp_info.fmt %d, csp_info.cswap %d, csp_info.aswap %d",
|
|
csp_info.fmt, csp_info.cswap, csp_info.aswap);
|
|
dst_fmt = MPP_FMT_BUTT;
|
|
}
|
|
}
|
|
|
|
if(dst_fmt == MPP_FMT_BUTT) {
|
|
h264e_hal_log_err("revert_csp error, src_fmt %d, dst_fmt %d", fmt, dst_fmt);
|
|
}
|
|
|
|
return (RK_U32)dst_fmt;
|
|
}
|
|
|
|
static RK_U32 h264e_vpu_revert_csp(RK_U32 csp)
|
|
{
|
|
h264e_hal_vpu_csp fmt = (h264e_hal_vpu_csp)csp;
|
|
MppFrameFormat dst_fmt;
|
|
|
|
switch(fmt) {
|
|
case H264E_VPU_CSP_YUV420P: {
|
|
dst_fmt = MPP_FMT_YUV420P;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_YUV420SP: {
|
|
dst_fmt = MPP_FMT_YUV420SP;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_YUYV422: {
|
|
dst_fmt = MPP_FMT_YUV422_YUYV;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_UYVY422: {
|
|
dst_fmt = MPP_FMT_YUV422_UYVY;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_RGB565: {
|
|
dst_fmt = MPP_FMT_RGB565;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_BGR565: {
|
|
dst_fmt = MPP_FMT_BGR565;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_RGB555: {
|
|
dst_fmt = MPP_FMT_RGB555;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_BGR555: {
|
|
dst_fmt = MPP_FMT_BGR555;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_RGB444: {
|
|
dst_fmt = MPP_FMT_RGB444;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_BGR444: {
|
|
dst_fmt = MPP_FMT_BGR444;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_RGB888: {
|
|
dst_fmt = MPP_FMT_RGB888;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_BGR888: {
|
|
dst_fmt = MPP_FMT_BGR888;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_RGB101010: {
|
|
dst_fmt = MPP_FMT_RGB101010;
|
|
break;
|
|
}
|
|
case H264E_VPU_CSP_BGR101010: {
|
|
dst_fmt = MPP_FMT_BGR101010;
|
|
break;
|
|
}
|
|
default: {
|
|
h264e_hal_log_err("invalid csp %d", csp);
|
|
dst_fmt = MPP_FMT_BUTT;
|
|
}
|
|
}
|
|
|
|
return (RK_U32)dst_fmt;
|
|
}
|
|
|
|
|
|
static MPP_RET h264e_rkv_test_open_files(h264e_hal_test_cfg test_cfg)
|
|
{
|
|
char base_path[512];
|
|
char full_path[512];
|
|
strcpy(base_path, "/sdcard/h264e_data/");
|
|
|
|
sprintf(full_path, "%s", test_cfg.input_yuv_file_path);
|
|
fp_h264e_yuv_in = fopen(full_path, "rb");
|
|
if (!fp_h264e_yuv_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
|
|
sprintf(full_path, "%s", test_cfg.input_syntax_file_path);
|
|
fp_golden_syntax_in = fopen(full_path, "rb");
|
|
if (!fp_golden_syntax_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
|
|
#if 0
|
|
sprintf(full_path, "%s%s", base_path, "mpp_yuv_in.yuv");
|
|
fp_mpp_yuv_in = fopen(full_path, "wb");
|
|
if (!fp_mpp_yuv_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
#endif
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
|
|
static MPP_RET h264e_vpu_test_open_files(h264e_hal_test_cfg test_cfg)
|
|
{
|
|
char base_path[512];
|
|
char full_path[512];
|
|
strcpy(base_path, "/sdcard/h264e_data/");
|
|
|
|
sprintf(full_path, "%s", test_cfg.input_yuv_file_path);
|
|
fp_h264e_yuv_in = fopen(full_path, "rb");
|
|
if (!fp_h264e_yuv_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
|
|
sprintf(full_path, "%s", test_cfg.input_syntax_file_path);
|
|
fp_golden_syntax_in = fopen(full_path, "rb");
|
|
if (!fp_golden_syntax_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
|
|
sprintf(full_path, "%s%s", base_path, "mpp_yuv_in.yuv");
|
|
fp_mpp_yuv_in = fopen(full_path, "wb");
|
|
if (!fp_mpp_yuv_in) {
|
|
mpp_err("%s open error", full_path);
|
|
return MPP_ERR_OPEN_FILE;
|
|
}
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
|
|
|
|
static MPP_RET h264e_test_close_files()
|
|
{
|
|
if (fp_h264e_yuv_in) {
|
|
fclose(fp_h264e_yuv_in);
|
|
fp_h264e_yuv_in = NULL;
|
|
}
|
|
|
|
if (fp_golden_syntax_in) {
|
|
fclose(fp_golden_syntax_in);
|
|
fp_golden_syntax_in = NULL;
|
|
}
|
|
|
|
if (fp_mpp_syntax_in) {
|
|
fclose(fp_mpp_syntax_in);
|
|
fp_mpp_syntax_in = NULL;
|
|
}
|
|
|
|
|
|
if (fp_mpp_yuv_in) {
|
|
fclose(fp_mpp_yuv_in);
|
|
fp_mpp_yuv_in = NULL;
|
|
}
|
|
|
|
if (fp_mpp_reg_in) {
|
|
fclose(fp_mpp_reg_in);
|
|
fp_mpp_reg_in = NULL;
|
|
}
|
|
|
|
if (fp_mpp_reg_out) {
|
|
fclose(fp_mpp_reg_out);
|
|
fp_mpp_reg_out = NULL;
|
|
}
|
|
|
|
if (fp_mpp_strm_out) {
|
|
fclose(fp_mpp_strm_out);
|
|
fp_mpp_strm_out = NULL;
|
|
}
|
|
|
|
if (fp_mpp_feedback) {
|
|
fclose(fp_mpp_feedback);
|
|
fp_mpp_feedback = NULL;
|
|
}
|
|
|
|
if (fp_mpp_wr2hw_reg_in) {
|
|
fclose(fp_mpp_wr2hw_reg_in);
|
|
fp_mpp_wr2hw_reg_in = NULL;
|
|
}
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
static MPP_RET get_rkv_h264e_yuv_in_frame(h264e_syntax *syn, MppBuffer *hw_buf)
|
|
{
|
|
RK_U32 read_ret = 0;
|
|
RK_U32 frame_luma_size = syn->pic_luma_width * syn->pic_luma_height;
|
|
RK_U32 frame_size = frame_luma_size * 3 / 2;
|
|
RK_U8 *hw_buf_ptr = (RK_U8 *)mpp_buffer_get_ptr(hw_buf[g_frame_read_cnt % RKV_H264E_LINKTABLE_FRAME_NUM]);;
|
|
mpp_assert(fp_h264e_yuv_in);
|
|
|
|
read_ret = fread(hw_buf_ptr, 1, frame_size, fp_h264e_yuv_in);
|
|
if (read_ret == 0) {
|
|
mpp_log("yuv file end, nothing is read in %d frame", g_frame_read_cnt);
|
|
return MPP_EOS_STREAM_REACHED;
|
|
} else if (read_ret != frame_size) {
|
|
mpp_err("read yuv frame %d error, needed:%d, actual:%d", g_frame_read_cnt, frame_size, read_ret);
|
|
return MPP_NOK;
|
|
} else {
|
|
mpp_log("read frame %d size %d successfully", g_frame_read_cnt, read_ret);
|
|
}
|
|
|
|
if (fp_mpp_yuv_in) {
|
|
fwrite(hw_buf_ptr, 1, frame_size, fp_mpp_yuv_in);
|
|
}
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
static MPP_RET get_h264e_yuv_in_one_frame(RK_U8 *sw_buf, h264e_syntax *syn, MppBuffer *hw_buf)
|
|
{
|
|
RK_U32 read_ret = 0;
|
|
RK_U32 frame_luma_size = syn->pic_luma_width * syn->pic_luma_height;
|
|
RK_U32 frame_size = frame_luma_size * 3 / 2;
|
|
mpp_assert(fp_h264e_yuv_in);
|
|
|
|
//TODO: remove sw_buf, read & write fd ptr directly
|
|
read_ret = fread(sw_buf, 1, frame_size, fp_h264e_yuv_in);
|
|
if (read_ret == 0) {
|
|
mpp_log("yuv file end, nothing is read in frame %d", g_frame_cnt);
|
|
return MPP_EOS_STREAM_REACHED;
|
|
} else if (read_ret != frame_size) {
|
|
mpp_err("read yuv one frame error, needed:%d, actual:%d", frame_size, read_ret);
|
|
return MPP_NOK;
|
|
} else {
|
|
mpp_log("read frame %d size %d successfully", g_frame_cnt, frame_size);
|
|
}
|
|
|
|
|
|
mpp_buffer_write(hw_buf[0], 0, sw_buf, frame_luma_size);
|
|
mpp_buffer_write(hw_buf[1], 0, sw_buf + frame_luma_size, frame_luma_size / 4);
|
|
mpp_buffer_write(hw_buf[2], 0, sw_buf + frame_luma_size * 5 / 4, frame_luma_size / 4);
|
|
|
|
if (fp_mpp_yuv_in) {
|
|
memcpy(sw_buf, mpp_buffer_get_ptr(hw_buf[0]), frame_luma_size);
|
|
fwrite(sw_buf, 1, frame_luma_size, fp_mpp_yuv_in);
|
|
memcpy(sw_buf, mpp_buffer_get_ptr(hw_buf[1]), frame_luma_size / 4);
|
|
fwrite(sw_buf, 1, frame_luma_size / 4, fp_mpp_yuv_in);
|
|
memcpy(sw_buf, mpp_buffer_get_ptr(hw_buf[2]), frame_luma_size / 4);
|
|
fwrite(sw_buf, 1, frame_luma_size / 4, fp_mpp_yuv_in);
|
|
}
|
|
return MPP_OK;
|
|
}
|
|
|
|
static MPP_RET get_vpu_syntax_in(h264e_syntax *syn, MppBuffer *hw_in_buf, MppBuffer hw_output_strm_buf)
|
|
{
|
|
RK_S32 k = 0;
|
|
mpp_assert(fp_golden_syntax_in);
|
|
memset(syn, 0, sizeof(h264e_syntax));
|
|
|
|
if (hw_in_buf[0])
|
|
syn->input_luma_addr = mpp_buffer_get_fd(hw_in_buf[0]);
|
|
if (hw_in_buf[1])
|
|
syn->input_cb_addr = mpp_buffer_get_fd(hw_in_buf[1]);
|
|
if (hw_in_buf[2])
|
|
syn->input_cr_addr = mpp_buffer_get_fd(hw_in_buf[2]);
|
|
|
|
if (hw_output_strm_buf)
|
|
syn->output_strm_addr = mpp_buffer_get_fd(hw_output_strm_buf);
|
|
|
|
if (fp_golden_syntax_in) {
|
|
char temp[512] = {0};
|
|
RK_S32 data = 0;
|
|
if (!fgets(temp, 512, fp_golden_syntax_in))
|
|
return MPP_EOS_STREAM_REACHED;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->frame_coding_type = data;
|
|
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->pic_init_qp = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->slice_alpha_offset = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->slice_beta_offset = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->chroma_qp_index_offset = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->filter_disable = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->idr_pic_id = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->pps_id = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->frame_num = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->slice_size_mb_rows = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->h264_inter4x4_disabled = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->enable_cabac = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->transform8x8_mode = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->cabac_init_idc = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->qp = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->mad_qp_delta = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->mad_threshold = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->qp_min = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->qp_max = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->cp_distance_mbs = data;
|
|
|
|
for (k = 0; k < 10; k++) {
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->cp_target[k] = data;
|
|
}
|
|
|
|
for (k = 0; k < 7; k++) {
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->target_error[k] = data;
|
|
}
|
|
for (k = 0; k < 7; k++) {
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->delta_qp[k] = data;
|
|
}
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->output_strm_limit_size = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->pic_luma_width = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->pic_luma_height = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->input_image_format = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_coeff_a = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_coeff_b = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_coeff_c = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_coeff_e = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_coeff_f = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_r_mask_msb = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_g_mask_msb = data;
|
|
|
|
fscanf(fp_golden_syntax_in, "%d", &data);
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
syn->color_conversion_b_mask_msb = data;
|
|
|
|
fgets(temp, 512, fp_golden_syntax_in);
|
|
|
|
|
|
/* adjust */
|
|
syn->input_image_format = h264e_vpu_revert_csp(syn->input_image_format);
|
|
}
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
#if 0
|
|
static void dump_rkv_mpp_dbg_info(h264e_hal_rkv_dbg_info *info, h264e_syntax *syn)
|
|
{
|
|
if (fp_mpp_syntax_in) {
|
|
RK_S32 k = 0;
|
|
FILE *fp = fp_mpp_syntax_in;
|
|
fprintf(fp, "#FRAME %d\n", g_frame_read_cnt);
|
|
|
|
fprintf(fp, "%-16d %s\n", syn->pic_luma_width, "pic_luma_width");
|
|
fprintf(fp, "%-16d %s\n", syn->pic_luma_height, "pic_luma_height");
|
|
fprintf(fp, "%-16d %s\n", syn->level_idc, "level_idc");
|
|
fprintf(fp, "%-16d %s\n", syn->profile_idc, "profile_idc");
|
|
fprintf(fp, "%-16d %s\n", syn->frame_coding_type, "frame_coding_type");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg02.lkt_num, "swreg02.lkt_num");
|
|
fprintf(fp, "%-16d %s\n", info->swreg02.rkvenc_cmd, "swreg02.rkvenc_cmd");
|
|
fprintf(fp, "%-16d %s\n", info->swreg02.enc_cke, "swreg02.enc_cke");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg04.lkt_addr, "swreg04.lkt_addr");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.ofe_fnsh, "swreg05.ofe_fnsh");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.lkt_fnsh, "swreg05.lkt_fnsh");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.clr_fnsh, "swreg05.clr_fnsh");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.ose_fnsh, "swreg05.ose_fnsh");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.bs_ovflr, "swreg05.bs_ovflr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.brsp_ful, "swreg05.brsp_ful");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.brsp_err, "swreg05.brsp_err");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.rrsp_err, "swreg05.rrsp_err");
|
|
fprintf(fp, "%-16d %s\n", info->swreg05.tmt_err, "swreg05.tmt_err");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.roi_enc, "swreg10.roi_enc");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.cur_frm_ref, "swreg10.cur_frm_ref");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.mei_stor, "swreg10.mei_stor");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.bs_scp, "swreg10.bs_scp");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.pic_qp, "swreg10.pic_qp");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.slice_int, "swreg10.slice_int");
|
|
fprintf(fp, "%-16d %s\n", info->swreg10.node_int, "swreg10.node_int");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg11.ppln_enc_lmt, "swreg11.ppln_enc_lmt");
|
|
fprintf(fp, "%-16d %s\n", info->swreg11.rfp_load_thrd, "swreg11.rfp_load_thrd");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg12.src_bus_edin, "swreg12.src_bus_edin");
|
|
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg13.axi_brsp_cke, "swreg13.axi_brsp_cke");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg14.src_aswap, "swreg14.src_aswap");
|
|
fprintf(fp, "%-16d %s\n", info->swreg14.src_cswap, "swreg14.src_cswap");
|
|
fprintf(fp, "%-16d %s\n", info->swreg14.src_cfmt, "swreg14.src_cfmt");
|
|
fprintf(fp, "%-16d %s\n", info->swreg14.src_clip_dis, "swreg14.src_clip_dis");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg15.wght_b2y, "swreg15.wght_b2y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg15.wght_g2y, "swreg15.wght_g2y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg15.wght_r2y, "swreg15.wght_r2y");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg16.wght_b2u, "swreg16.wght_b2u");
|
|
fprintf(fp, "%-16d %s\n", info->swreg16.wght_g2u, "swreg16.wght_g2u");
|
|
fprintf(fp, "%-16d %s\n", info->swreg16.wght_r2u, "swreg16.wght_r2u");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg17.wght_b2v, "swreg17.wght_b2v");
|
|
fprintf(fp, "%-16d %s\n", info->swreg17.wght_g2v, "swreg17.wght_g2v");
|
|
fprintf(fp, "%-16d %s\n", info->swreg17.wght_r2v, "swreg17.wght_r2v");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg18.ofst_rgb2v, "swreg18.ofst_rgb2v");
|
|
fprintf(fp, "%-16d %s\n", info->swreg18.ofst_rgb2u, "swreg18.ofst_rgb2u");
|
|
fprintf(fp, "%-16d %s\n", info->swreg18.ofst_rgb2y, "swreg18.ofst_rgb2y");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_tfltr, "swreg19.src_tfltr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_tfltr_we, "swreg19.src_tfltr_we");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_tfltr_bw, "swreg19.src_tfltr_bw");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_sfltr, "swreg19.src_sfltr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_mfltr_thrd, "swreg19.src_mfltr_thrd");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_mfltr_y, "swreg19.src_mfltr_y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_mfltr_c, "swreg19.src_mfltr_c");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_bfltr_strg, "swreg19.src_bfltr_strg");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_bfltr, "swreg19.src_bfltr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_mbflt_odr, "swreg19.src_mbflt_odr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_matf_y, "swreg19.src_matf_y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_matf_c, "swreg19.src_matf_c");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_shp_y, "swreg19.src_shp_y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_shp_c, "swreg19.src_shp_c");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_shp_div, "swreg19.src_shp_div");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_shp_thld, "swreg19.src_shp_thld");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_mirr, "swreg19.src_mirr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_rot, "swreg19.src_rot");
|
|
fprintf(fp, "%-16d %s\n", info->swreg19.src_matf_itsy, "swreg19.src_matf_itsy");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg20.tfltr_thld_y, "swreg20.tfltr_thld_y");
|
|
fprintf(fp, "%-16d %s\n", info->swreg20.tfltr_thld_c, "swreg20.tfltr_thld_c");
|
|
|
|
for (k = 0; k < 5; k++)
|
|
fprintf(fp, "%-16d swreg21_scr_stbl[%d]\n", info->swreg21_scr_stbl[k], k);
|
|
|
|
for (k = 0; k < 40; k++)
|
|
fprintf(fp, "%-16d swreg22_h3d_tbl[%d]\n", info->swreg22_h3d_tbl[k], k);
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg23.src_ystrid, "swreg23.src_ystrid");
|
|
fprintf(fp, "%-16d %s\n", info->swreg23.src_cstrid, "swreg23.src_cstrid");
|
|
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.adr_srcy, "addr_cfg.adr_srcy");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.adr_srcu, "addr_cfg.adr_srcu");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.adr_srcv, "addr_cfg.adr_srcv");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.ctuc_addr, "addr_cfg.ctuc_addr");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.rfpw_addr, "addr_cfg.rfpw_addr");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.rfpr_addr, "addr_cfg.rfpr_addr");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.dspw_addr, "addr_cfg.dspw_addr");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.dspr_addr, "addr_cfg.dspr_addr");
|
|
fprintf(fp, "%#-16x %s\n", info->addr_cfg.bsbw_addr, "addr_cfg.bsbw_addr");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_cut, "swreg41.sli_cut");
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_cut_mode, "swreg41.sli_cut_mode");
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_cut_bmod, "swreg41.sli_cut_bmod");
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_max_num, "swreg41.sli_max_num");
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_out_mode, "swreg41.sli_out_mode");
|
|
fprintf(fp, "%-16d %s\n", info->swreg41.sli_cut_cnum, "swreg41.sli_cut_cnum");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg42.sli_cut_byte, "swreg42.sli_cut_byte");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg43.cime_srch_h, "swreg43.cime_srch_h");
|
|
fprintf(fp, "%-16d %s\n", info->swreg43.cime_srch_v, "swreg43.cime_srch_v");
|
|
fprintf(fp, "%-16d %s\n", info->swreg43.rime_srch_h, "swreg43.rime_srch_h");
|
|
fprintf(fp, "%-16d %s\n", info->swreg43.rime_srch_v, "swreg43.rime_srch_v");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg44.pmv_mdst_h, "swreg44.pmv_mdst_h");
|
|
fprintf(fp, "%-16d %s\n", info->swreg44.pmv_mdst_v, "swreg44.pmv_mdst_v");
|
|
fprintf(fp, "%-16d %s\n", info->swreg44.mv_limit, "swreg44.mv_limit");
|
|
fprintf(fp, "%-16d %s\n", info->swreg44.mv_num, "swreg44.mv_num");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg45.cach_l1_dtmr, "swreg45.cach_l1_dtmr");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg46.rc_en, "swreg46.rc_en");
|
|
fprintf(fp, "%-16d %s\n", info->swreg46.rc_mode, "swreg46.rc_mode");
|
|
fprintf(fp, "%-16d %s\n", info->swreg46.aqmode_en, "swreg46.aqmode_en");
|
|
fprintf(fp, "%-16d %s\n", info->swreg46.aq_strg, "swreg46.aq_strg");
|
|
fprintf(fp, "%-16d %s\n", info->swreg46.rc_ctu_num, "swreg46.rc_ctu_num");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg47.bits_error0, "swreg47.bits_error0");
|
|
fprintf(fp, "%-16d %s\n", info->swreg47.bits_error1, "swreg47.bits_error1");
|
|
fprintf(fp, "%-16d %s\n", info->swreg48.bits_error2, "swreg48.bits_error2");
|
|
fprintf(fp, "%-16d %s\n", info->swreg48.bits_error3, "swreg48.bits_error3");
|
|
fprintf(fp, "%-16d %s\n", info->swreg49.bits_error4, "swreg49.bits_error4");
|
|
fprintf(fp, "%-16d %s\n", info->swreg49.bits_error5, "swreg49.bits_error5");
|
|
fprintf(fp, "%-16d %s\n", info->swreg50.bits_error6, "swreg50.bits_error6");
|
|
fprintf(fp, "%-16d %s\n", info->swreg50.bits_error7, "swreg50.bits_error7");
|
|
fprintf(fp, "%-16d %s\n", info->swreg51.bits_error8, "swreg51.bits_error8");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest0, "swreg52.qp_adjuest0");
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest1, "swreg52.qp_adjuest1");
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest2, "swreg52.qp_adjuest2");
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest3, "swreg52.qp_adjuest3");
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest4, "swreg52.qp_adjuest4");
|
|
fprintf(fp, "%-16d %s\n", info->swreg52.qp_adjuest5, "swreg52.qp_adjuest5");
|
|
fprintf(fp, "%-16d %s\n", info->swreg53.qp_adjuest6, "swreg53.qp_adjuest6");
|
|
fprintf(fp, "%-16d %s\n", info->swreg53.qp_adjuest7, "swreg53.qp_adjuest7");
|
|
fprintf(fp, "%-16d %s\n", info->swreg53.qp_adjuest8, "swreg53.qp_adjuest8");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_qp_mod, "swreg54.rc_qp_mod");
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_fact0, "swreg54.rc_fact0");
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_fact1, "swreg54.rc_fact1");
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_qp_range, "swreg54.rc_qp_range");
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_max_qp, "swreg54.rc_max_qp");
|
|
fprintf(fp, "%-16d %s\n", info->swreg54.rc_min_qp, "swreg54.rc_min_qp");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg55.ctu_ebits, "swreg55.ctu_ebits");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg56.arb_sel, "swreg56.arb_sel");
|
|
fprintf(fp, "%-16d %s\n", info->swreg56.rdo_mark, "swreg56.rdo_mark");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg57.nal_ref_idc, "swreg57.nal_ref_idc");
|
|
fprintf(fp, "%-16d %s\n", info->swreg57.nal_unit_type, "swreg57.nal_unit_type");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg58.max_fnum, "swreg58.max_fnum");
|
|
fprintf(fp, "%-16d %s\n", info->swreg58.drct_8x8, "swreg58.drct_8x8");
|
|
fprintf(fp, "%-16d %s\n", info->swreg58.mpoc_lm4, "swreg58.mpoc_lm4");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.etpy_mode, "swreg59.etpy_mode");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.trns_8x8, "swreg59.trns_8x8");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.csip_flg, "swreg59.csip_flg");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.num_ref0_idx, "swreg59.num_ref0_idx");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.num_ref1_idx, "swreg59.num_ref1_idx");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.pic_init_qp, "swreg59.pic_init_qp");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.cb_ofst, "swreg59.cb_ofst");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.cr_ofst, "swreg59.cr_ofst");
|
|
fprintf(fp, "%-16d %s\n", info->swreg59.dbf_cp_flg, "swreg59.dbf_cp_flg");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg60.sli_type, "swreg60.sli_type");
|
|
fprintf(fp, "%-16d %s\n", info->swreg60.pps_id, "swreg60.pps_id");
|
|
fprintf(fp, "%-16d %s\n", info->swreg60.num_ref_ovrd, "swreg60.num_ref_ovrd");
|
|
fprintf(fp, "%-16d %s\n", info->swreg60.cbc_init_idc, "swreg60.cbc_init_idc");
|
|
fprintf(fp, "%-16d %s\n", info->swreg60.frm_num, "swreg60.frm_num");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg61.idr_pid, "swreg61.idr_pid");
|
|
fprintf(fp, "%-16d %s\n", info->swreg61.poc_lsb, "swreg61.poc_lsb");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.rodr_pic_idx, "swreg62.rodr_pic_idx");
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.ref_list0_rodr, "swreg62.ref_list0_rodr");
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.sli_beta_ofst, "swreg62.sli_beta_ofst");
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.sli_alph_ofst, "swreg62.sli_alph_ofst");
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.dis_dblk_idc, "swreg62.dis_dblk_idc");
|
|
fprintf(fp, "%-16d %s\n", info->swreg62.rodr_pic_num, "swreg62.rodr_pic_num");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg63.ltrf_flg, "swreg63.ltrf_flg");
|
|
fprintf(fp, "%-16d %s\n", info->swreg63.arpm_flg, "swreg63.arpm_flg");
|
|
fprintf(fp, "%-16d %s\n", info->swreg63.mmco4_pre, "swreg63.mmco4_pre");
|
|
fprintf(fp, "%-16d %s\n", info->swreg63.mmco_0, "swreg63.mmco_0");
|
|
fprintf(fp, "%-16d %s\n", info->swreg63.dopn_m1_0, "swreg63.dopn_m1_0");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg64.mmco_1, "swreg64.mmco_1");
|
|
fprintf(fp, "%-16d %s\n", info->swreg64.dopn_m1_1, "swreg64.dopn_m1_1");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg65.osd_en, "swreg65.osd_en");
|
|
fprintf(fp, "%-16d %s\n", info->swreg65.osd_inv, "swreg65.osd_inv");
|
|
fprintf(fp, "%-16d %s\n", info->swreg65.osd_plt_type, "swreg65.osd_plt_type");
|
|
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r0, "swreg66.osd_inv_r0");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r1, "swreg66.osd_inv_r1");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r2, "swreg66.osd_inv_r2");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r3, "swreg66.osd_inv_r3");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r4, "swreg66.osd_inv_r4");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r5, "swreg66.osd_inv_r5");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r6, "swreg66.osd_inv_r6");
|
|
fprintf(fp, "%-16d %s\n", info->swreg66.osd_inv_r7, "swreg66.osd_inv_r7");
|
|
|
|
for (k = 0; k < 8; k++) {
|
|
fprintf(fp, "%-16d swreg67_osd_pos[%d].lt_pos_x\n", info->swreg67_osd_pos[k].lt_pos_x, k);
|
|
fprintf(fp, "%-16d swreg67_osd_pos[%d].lt_pos_y\n", info->swreg67_osd_pos[k].lt_pos_y, k);
|
|
fprintf(fp, "%-16d swreg67_osd_pos[%d].rd_pos_x\n", info->swreg67_osd_pos[k].rd_pos_x, k);
|
|
fprintf(fp, "%-16d swreg67_osd_pos[%d].rd_pos_y\n", info->swreg67_osd_pos[k].rd_pos_y, k);
|
|
}
|
|
for (k = 0; k < 8; k++)
|
|
fprintf(fp, "%-16d swreg68_indx_addr_i[%d]\n", info->swreg68_indx_addr_i[k], k);
|
|
|
|
for (k = 0; k < 256; k++)
|
|
fprintf(fp, "%#-16x swreg73_osd_indx_tab_i[%d]\n", info->swreg73_osd_indx_tab_i[k], k);
|
|
|
|
fprintf(fp, "%#-16x %s\n", info->swreg77.bsbw_addr, "swreg77.bsbw_addr");
|
|
|
|
fprintf(fp, "\n");
|
|
fflush(fp);
|
|
} else {
|
|
mpp_log("try to dump data to mpp_syntax_in.txt, but file is not opened");
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
#if 0
|
|
static MPP_RET get_rkv_dbg_info(h264e_hal_rkv_dbg_info *info, h264e_syntax *syn,
|
|
MppBuffer *hw_in_buf, MppBuffer *hw_output_strm_buf)
|
|
|
|
{
|
|
RK_S32 k = 0;
|
|
RK_U32 buf_idx = g_frame_read_cnt % RKV_H264E_LINKTABLE_FRAME_NUM;
|
|
h264e_hal_debug_enter();
|
|
mpp_assert(fp_golden_syntax_in);
|
|
memset(syn, 0, sizeof(h264e_syntax));
|
|
memset(info, 0, sizeof(h264e_hal_rkv_dbg_info));
|
|
|
|
if (hw_in_buf[buf_idx]) {
|
|
syn->input_luma_addr = mpp_buffer_get_fd(hw_in_buf[buf_idx]);
|
|
syn->input_cb_addr = syn->input_luma_addr; //NOTE: transfer offset in extra_info
|
|
syn->input_cr_addr = syn->input_luma_addr;
|
|
}
|
|
if (hw_output_strm_buf[buf_idx])
|
|
syn->output_strm_addr = mpp_buffer_get_fd(hw_output_strm_buf[buf_idx]);
|
|
|
|
|
|
if (fp_golden_syntax_in) {
|
|
FILE *fp = fp_golden_syntax_in;
|
|
char temp[512] = {0};
|
|
RK_S32 data = 0;
|
|
|
|
if (!fgets(temp, 512, fp))
|
|
return MPP_EOS_STREAM_REACHED;
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_luma_width);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_luma_height);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->level_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->profile_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->frame_coding_type);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg02.lkt_num);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg02.rkvenc_cmd);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg02.enc_cke);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg04.lkt_addr);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.ofe_fnsh);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.lkt_fnsh);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.clr_fnsh);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.ose_fnsh);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.bs_ovflr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.brsp_ful);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.brsp_err);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.rrsp_err);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg05.tmt_err);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.roi_enc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.cur_frm_ref);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.mei_stor);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.bs_scp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.pic_qp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.slice_int);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg10.node_int);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg11.ppln_enc_lmt);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg11.rfp_load_thrd);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg12.src_bus_edin);
|
|
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg13.axi_brsp_cke);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg14.src_aswap);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg14.src_cswap);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg14.src_cfmt);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg14.src_clip_dis);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg15.wght_b2y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg15.wght_g2y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg15.wght_r2y);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg16.wght_b2u);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg16.wght_g2u);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg16.wght_r2u);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg17.wght_b2v);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg17.wght_g2v);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg17.wght_r2v);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg18.ofst_rgb2v);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg18.ofst_rgb2u);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg18.ofst_rgb2y);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_tfltr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_tfltr_we);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_tfltr_bw);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_sfltr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_mfltr_thrd);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_mfltr_y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_mfltr_c);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_bfltr_strg);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_bfltr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_mbflt_odr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_matf_y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_matf_c);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_shp_y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_shp_c);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_shp_div);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_shp_thld);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_mirr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_rot);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg19.src_matf_itsy);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg20.tfltr_thld_y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg20.tfltr_thld_c);
|
|
|
|
for (k = 0; k < 5; k++)
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg21_scr_stbl[k]);
|
|
|
|
for (k = 0; k < 40; k++)
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg22_h3d_tbl[k]);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg23.src_ystrid);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg23.src_cstrid);
|
|
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.adr_srcy);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.adr_srcu);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.adr_srcv);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.ctuc_addr);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.rfpw_addr);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.rfpr_addr);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.dspw_addr);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.dspr_addr);
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->addr_cfg.bsbw_addr);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_cut);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_cut_mode);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_cut_bmod);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_max_num);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_out_mode);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg41.sli_cut_cnum);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg42.sli_cut_byte);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg43.cime_srch_h);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg43.cime_srch_v);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg43.rime_srch_h);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg43.rime_srch_v);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg44.pmv_mdst_h);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg44.pmv_mdst_v);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg44.mv_limit);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg44.mv_num);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg45.cach_l1_dtmr);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg46.rc_en);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg46.rc_mode);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg46.aqmode_en);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg46.aq_strg);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg46.rc_ctu_num);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg47.bits_error0);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg47.bits_error1);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg48.bits_error2);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg48.bits_error3);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg49.bits_error4);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg49.bits_error5);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg50.bits_error6);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg50.bits_error7);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg51.bits_error8);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest0);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest1);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest2);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest3);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest4);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg52.qp_adjuest5);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg53.qp_adjuest6);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg53.qp_adjuest7);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg53.qp_adjuest8);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_qp_mod);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_fact0);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_fact1);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_qp_range);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_max_qp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg54.rc_min_qp);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg55.ctu_ebits);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg56.arb_sel);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg56.rdo_mark);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg57.nal_ref_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg57.nal_unit_type);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg58.max_fnum);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg58.drct_8x8);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg58.mpoc_lm4);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.etpy_mode);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.trns_8x8);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.csip_flg);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.num_ref0_idx);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.num_ref1_idx);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.pic_init_qp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.cb_ofst);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.cr_ofst);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg59.dbf_cp_flg);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg60.sli_type);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg60.pps_id);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg60.num_ref_ovrd);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg60.cbc_init_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg60.frm_num);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg61.idr_pid);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg61.poc_lsb);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.rodr_pic_idx);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.ref_list0_rodr);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.sli_beta_ofst);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.sli_alph_ofst);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.dis_dblk_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg62.rodr_pic_num);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg63.ltrf_flg);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg63.arpm_flg);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg63.mmco4_pre);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg63.mmco_0);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg63.dopn_m1_0);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg64.mmco_1);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg64.dopn_m1_1);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg65.osd_en);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg65.osd_inv);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg65.osd_plt_type);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r0);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r1);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r2);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r3);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r4);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r5);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r6);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg66.osd_inv_r7);
|
|
|
|
for (k = 0; k < 8; k++) {
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg67_osd_pos[k].lt_pos_x);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg67_osd_pos[k].lt_pos_y);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg67_osd_pos[k].rd_pos_x);
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg67_osd_pos[k].rd_pos_y);
|
|
}
|
|
for (k = 0; k < 8; k++)
|
|
H264E_HAL_FSCAN(fp, "%d\n", info->swreg68_indx_addr_i[k]);
|
|
|
|
for (k = 0; k < 256; k++)
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->swreg73_osd_indx_tab_i[k]);
|
|
|
|
H264E_HAL_FSCAN(fp, "%x\n", info->swreg77.bsbw_addr);
|
|
|
|
H264E_HAL_FSCAN(fp, "%x\n", syn->keyframe_max_interval);
|
|
|
|
fgets(temp, 512, fp);
|
|
|
|
//set values actually used
|
|
syn->slice_type = info->swreg60.sli_type;
|
|
syn->pps_id = info->swreg60.pps_id;
|
|
syn->cabac_init_idc = info->swreg60.cbc_init_idc;
|
|
syn->pic_order_cnt_lsb = info->swreg61.poc_lsb;
|
|
syn->idr_pic_id = info->swreg61.idr_pid;
|
|
syn->pic_init_qp = info->swreg59.pic_init_qp;
|
|
syn->qp = info->swreg10.pic_qp;
|
|
syn->frame_num = info->swreg60.frm_num;
|
|
syn->input_image_format = info->swreg14.src_cfmt;
|
|
syn->transform8x8_mode = info->swreg59.trns_8x8;
|
|
}
|
|
|
|
h264e_hal_debug_leave();
|
|
return MPP_OK;
|
|
}
|
|
#endif
|
|
|
|
|
|
static MPP_RET get_rkv_syntax_in( h264e_syntax *syn, MppBuffer *hw_in_buf, MppBuffer *hw_output_strm_buf)
|
|
|
|
{
|
|
//RK_S32 k = 0;
|
|
RK_U32 buf_idx = g_frame_read_cnt % RKV_H264E_LINKTABLE_FRAME_NUM;
|
|
h264e_hal_debug_enter();
|
|
mpp_assert(fp_golden_syntax_in);
|
|
memset(syn, 0, sizeof(h264e_syntax));
|
|
|
|
if (hw_in_buf[buf_idx]) {
|
|
syn->input_luma_addr = mpp_buffer_get_fd(hw_in_buf[buf_idx]);
|
|
syn->input_cb_addr = syn->input_luma_addr; //NOTE: transfer offset in extra_info
|
|
syn->input_cr_addr = syn->input_luma_addr;
|
|
}
|
|
if (hw_output_strm_buf[buf_idx])
|
|
syn->output_strm_addr = mpp_buffer_get_fd(hw_output_strm_buf[buf_idx]);
|
|
syn->output_strm_limit_size = 1024 * 1024 * 2;
|
|
|
|
if (fp_golden_syntax_in) {
|
|
FILE *fp = fp_golden_syntax_in;
|
|
char temp[512] = {0};
|
|
RK_S32 data = 0;
|
|
h264e_hal_csp_info csp_info;
|
|
|
|
if (!fgets(temp, 512, fp))
|
|
return MPP_EOS_STREAM_REACHED;
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_luma_width);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_luma_height);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->level_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->profile_idc);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->frame_coding_type);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->qp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->input_image_format);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->enable_cabac);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_init_qp);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->chroma_qp_index_offset);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->second_chroma_qp_index_offset);
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->slice_type);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pps_id);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->frame_num);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->cabac_init_idc);
|
|
|
|
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->idr_pic_id);
|
|
H264E_HAL_FSCAN(fp, "%d\n", syn->pic_order_cnt_lsb);
|
|
|
|
H264E_HAL_FSCAN(fp, "%x\n", syn->keyframe_max_interval);
|
|
|
|
fgets(temp, 512, fp);
|
|
|
|
/* adjust */
|
|
csp_info.fmt = syn->input_image_format;
|
|
csp_info.cswap = 0; //TODO:
|
|
csp_info.aswap = 0; //TODO:
|
|
syn->input_image_format = h264e_rkv_revert_csp(csp_info);
|
|
} else {
|
|
mpp_err("rkv_syntax_in.txt doesn't exits");
|
|
}
|
|
|
|
h264e_hal_debug_leave();
|
|
return MPP_OK;
|
|
}
|
|
|
|
static MPP_RET h264e_hal_test_parse_options(int arg_num, char **arg_str, h264e_hal_test_cfg *cfg)
|
|
{
|
|
RK_S32 k = 0;
|
|
memset(cfg, 0, sizeof(h264e_hal_test_cfg));
|
|
|
|
for (k = 1; k < arg_num; k++) {
|
|
if (!strcmp("-hw", arg_str[k])) {
|
|
cfg->hw_mode = atoi(arg_str[k + 1]);
|
|
k++;
|
|
}
|
|
if (!strcmp("-yuv", arg_str[k])) {
|
|
strcpy(cfg->input_yuv_file_path, arg_str[k + 1]);
|
|
k++;
|
|
}
|
|
if (!strcmp("-syn", arg_str[k])) {
|
|
strcpy(cfg->input_syntax_file_path, arg_str[k + 1]);
|
|
k++;
|
|
}
|
|
}
|
|
|
|
|
|
if (!cfg->input_yuv_file_path) {
|
|
mpp_log("test param parse error: input_yuv_file_path is NULL");
|
|
return MPP_NOK;
|
|
}
|
|
|
|
if (!cfg->input_syntax_file_path) {
|
|
mpp_log("test param parse error: input_syntax_file_path is NULL");
|
|
return MPP_NOK;
|
|
}
|
|
|
|
if (cfg->hw_mode == 0)
|
|
test_device_id = HAL_RKVENC;
|
|
else if (cfg->hw_mode == 1)
|
|
test_device_id = HAL_VEPU;
|
|
else {
|
|
mpp_log("test param parse error: hw_mode is %d", cfg->hw_mode);
|
|
return MPP_NOK;
|
|
}
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
static void h264e_hal_test_init(h264e_hal_context *ctx, HalTaskInfo *task_info, h264e_syntax *syn)
|
|
{
|
|
memset(ctx, 0, sizeof(h264e_hal_context));
|
|
memset(task_info, 0, sizeof(HalTaskInfo));
|
|
task_info->enc.syntax.data = (void *)syn;
|
|
|
|
}
|
|
|
|
static void h264e_hal_test_deinit(h264e_hal_context *ctx, HalTaskInfo *task_info)
|
|
{
|
|
(void)ctx;
|
|
(void)task_info;
|
|
}
|
|
|
|
MPP_RET h264_hal_test_call_back(void *control, void *feedback)
|
|
{
|
|
(void)control;
|
|
h264e_feedback *fb = (h264e_feedback *)feedback;
|
|
(void)fb;
|
|
|
|
mpp_log("h264_hal_test_call_back, enter");
|
|
mpp_log("h264_hal_test_call_back, leave");
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
static void h264e_hal_set_extra_info_cfg(h264e_control_extra_info_cfg *info, h264e_syntax *syn)
|
|
{
|
|
info->chroma_qp_index_offset = syn->chroma_qp_index_offset;
|
|
info->enable_cabac = syn->enable_cabac;
|
|
info->pic_init_qp = syn->pic_init_qp;
|
|
info->pic_luma_height = syn->pic_luma_height;
|
|
info->pic_luma_width = syn->pic_luma_width;
|
|
info->transform8x8_mode = syn->transform8x8_mode;
|
|
|
|
info->input_image_format = syn->input_image_format;
|
|
info->profile_idc = syn->profile_idc;
|
|
info->level_idc = syn->level_idc;
|
|
info->keyframe_max_interval = syn->keyframe_max_interval;
|
|
info->second_chroma_qp_index_offset = syn->second_chroma_qp_index_offset;
|
|
info->pps_id = syn->pps_id;
|
|
}
|
|
|
|
MPP_RET h264e_hal_vpu_test()
|
|
{
|
|
RK_S32 k = 0;
|
|
MPP_RET ret = MPP_OK;
|
|
h264e_hal_context ctx;
|
|
MppHalCfg hal_cfg;
|
|
HalTaskInfo task_info;
|
|
h264e_syntax syntax_data;
|
|
h264e_control_extra_info_cfg extra_info_cfg;
|
|
MppPacket extra_info_pkt;
|
|
RK_U8 extra_info_buf[H264E_MAX_PACKETED_PARAM_SIZE] = {0};
|
|
MppBufferGroup hw_input_buf_grp = NULL;
|
|
MppBufferGroup hw_output_buf_grp = NULL;
|
|
MppBuffer hw_input_buf[3] = {NULL}; //Y, U, V
|
|
MppBuffer hw_output_strm_buf = NULL;
|
|
RK_U32 frame_luma_stride = 0;
|
|
RK_S64 t0;
|
|
|
|
RK_U8 *input_sw_buf = mpp_malloc(RK_U8, MAX_FRAME_TOTAL_SIZE);
|
|
|
|
mpp_packet_init(&extra_info_pkt, (void *)extra_info_buf, H264E_MAX_PACKETED_PARAM_SIZE);
|
|
|
|
get_vpu_syntax_in(&syntax_data, hw_input_buf, hw_output_strm_buf);
|
|
fseek(fp_golden_syntax_in, 0L, SEEK_SET);
|
|
|
|
frame_luma_stride = ((syntax_data.pic_luma_width + 15) & (~15)) * ((syntax_data.pic_luma_height + 15) & (~15));
|
|
|
|
h264e_hal_test_init(&ctx, &task_info, &syntax_data);
|
|
|
|
if (MPP_OK != mpp_buffer_group_get_internal(&hw_input_buf_grp, MPP_BUFFER_TYPE_ION)) {
|
|
mpp_err("hw_input_buf_grp get failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
if (MPP_OK != mpp_buffer_group_get_internal(&hw_output_buf_grp, MPP_BUFFER_TYPE_ION)) {
|
|
mpp_err("hw_output_buf_grp get failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
|
|
mpp_buffer_get(hw_input_buf_grp, &hw_input_buf[0], frame_luma_stride);
|
|
mpp_buffer_get(hw_input_buf_grp, &hw_input_buf[1], frame_luma_stride / 4); // TODO: according to yuv format
|
|
mpp_buffer_get(hw_input_buf_grp, &hw_input_buf[2], frame_luma_stride / 4);
|
|
mpp_buffer_get(hw_output_buf_grp, &hw_output_strm_buf, 1024 * 1024 * 2);
|
|
|
|
hal_cfg.hal_int_cb.callBack = h264_hal_test_call_back;
|
|
hal_cfg.hal_int_cb.opaque = NULL; //control context
|
|
hal_cfg.device_id = test_device_id;
|
|
hal_h264e_init(&ctx, &hal_cfg);
|
|
|
|
|
|
h264e_hal_set_extra_info_cfg(&extra_info_cfg, &syntax_data);
|
|
hal_h264e_vpu_control(&ctx, MPP_ENC_SET_EXTRA_INFO, &extra_info_cfg);
|
|
hal_h264e_vpu_control(&ctx, MPP_ENC_GET_EXTRA_INFO, &extra_info_pkt);
|
|
|
|
|
|
do {
|
|
/* get golden input */
|
|
if (MPP_EOS_STREAM_REACHED == get_vpu_syntax_in(&syntax_data, hw_input_buf, hw_output_strm_buf)) {
|
|
mpp_log("syntax input file end, total %d frames are encoded, test is ended", g_frame_cnt);
|
|
break;
|
|
}
|
|
|
|
ret = get_h264e_yuv_in_one_frame(input_sw_buf, &syntax_data, hw_input_buf);
|
|
|
|
if (ret == MPP_EOS_STREAM_REACHED) {
|
|
mpp_log("yuv file end, total %d frames are encoded, test is ended", g_frame_cnt);
|
|
break;
|
|
} else if (ret == MPP_NOK) {
|
|
mpp_err("read yuv file failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
|
|
|
|
/* generate registers */
|
|
hal_h264e_gen_regs(&ctx, &task_info);
|
|
|
|
|
|
/* run hardware */
|
|
t0 = mpp_time();
|
|
mpp_log("hal_h264e_start time : %lld ", (RK_S64)(t0 / 1000));
|
|
|
|
hal_h264e_start(&ctx, &task_info);
|
|
hal_h264e_wait(&ctx, &task_info);
|
|
|
|
#ifdef H264E_DUMP_DATA_TO_FILE
|
|
hal_h264e_vpu_dump_mpp_strm_out(&ctx, hw_output_strm_buf);
|
|
#endif
|
|
|
|
g_frame_cnt ++;
|
|
} while (1);
|
|
|
|
|
|
__test_end:
|
|
hal_h264e_deinit(&ctx);
|
|
h264e_hal_test_deinit(&ctx, &task_info);
|
|
|
|
mpp_packet_deinit(&extra_info_pkt);
|
|
//free sw buf
|
|
if (input_sw_buf) {
|
|
mpp_free(input_sw_buf);
|
|
input_sw_buf = NULL;
|
|
}
|
|
|
|
//free hw buf
|
|
for (k = 0; k < 3; k++) {
|
|
if (hw_input_buf[k])
|
|
mpp_buffer_put(hw_input_buf[k]);
|
|
}
|
|
if (hw_output_strm_buf)
|
|
mpp_buffer_put(hw_output_strm_buf);
|
|
|
|
if (hw_input_buf_grp)
|
|
mpp_buffer_group_put(hw_input_buf_grp);
|
|
if (hw_output_buf_grp)
|
|
mpp_buffer_group_put(hw_output_buf_grp);
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
|
|
MPP_RET h264e_hal_rkv_test()
|
|
{
|
|
RK_S32 k = 0;
|
|
MPP_RET ret = MPP_OK;
|
|
h264e_hal_context ctx;
|
|
MppHalCfg hal_cfg;
|
|
HalTaskInfo task_info;
|
|
h264e_control_extra_info_cfg extra_info_cfg;
|
|
MppPacket extra_info_pkt;
|
|
RK_U8 extra_info_buf[H264E_MAX_PACKETED_PARAM_SIZE] = {0};
|
|
//h264e_hal_rkv_dbg_info dbg_info;
|
|
h264e_syntax syntax_data[RKV_H264E_LINKTABLE_FRAME_NUM];
|
|
MppBufferGroup hw_input_buf_grp = NULL;
|
|
MppBufferGroup hw_output_buf_grp = NULL;
|
|
MppBuffer hw_input_buf_mul[RKV_H264E_LINKTABLE_FRAME_NUM] = {NULL};
|
|
MppBuffer hw_output_strm_buf_mul[RKV_H264E_LINKTABLE_FRAME_NUM] = {NULL};
|
|
RK_U32 frame_luma_stride = 0;
|
|
RK_S64 t0;
|
|
|
|
mpp_packet_init(&extra_info_pkt, (void *)extra_info_buf, H264E_MAX_PACKETED_PARAM_SIZE);
|
|
|
|
|
|
get_rkv_syntax_in(&syntax_data[0], hw_input_buf_mul, hw_output_strm_buf_mul);
|
|
fseek(fp_golden_syntax_in, 0L, SEEK_SET);
|
|
|
|
|
|
frame_luma_stride = ((syntax_data[0].pic_luma_width + 15) & (~15)) * ((syntax_data[0].pic_luma_height + 15) & (~15));
|
|
|
|
h264e_hal_test_init(&ctx, &task_info, syntax_data);
|
|
|
|
|
|
if (MPP_OK != mpp_buffer_group_get_internal(&hw_input_buf_grp, MPP_BUFFER_TYPE_ION)) {
|
|
mpp_err("hw_input_buf_grp get failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
if (MPP_OK != mpp_buffer_group_get_internal(&hw_output_buf_grp, MPP_BUFFER_TYPE_ION)) {
|
|
mpp_err("hw_output_buf_grp get failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
|
|
for (k = 0; k < RKV_H264E_LINKTABLE_FRAME_NUM; k++)
|
|
mpp_buffer_get(hw_input_buf_grp, &hw_input_buf_mul[k], frame_luma_stride * 3 / 2);
|
|
|
|
for (k = 0; k < RKV_H264E_LINKTABLE_FRAME_NUM; k++)
|
|
mpp_buffer_get(hw_output_buf_grp, &hw_output_strm_buf_mul[k], 1024 * 1024 * 2);
|
|
|
|
|
|
hal_cfg.hal_int_cb.callBack = h264_hal_test_call_back;
|
|
hal_cfg.hal_int_cb.opaque = NULL; //control context
|
|
hal_cfg.device_id = test_device_id;
|
|
hal_h264e_init(&ctx, &hal_cfg);
|
|
|
|
h264e_hal_set_extra_info_cfg(&extra_info_cfg, &syntax_data[0]); //TODO: use dbg info for input instead
|
|
hal_h264e_rkv_control(&ctx, MPP_ENC_SET_EXTRA_INFO, &extra_info_cfg);
|
|
hal_h264e_rkv_control(&ctx, MPP_ENC_GET_EXTRA_INFO, &extra_info_pkt);
|
|
|
|
do {
|
|
/* get golden input */
|
|
if (g_frame_read_cnt <= g_frame_cnt) {
|
|
h264e_syntax *syn = NULL;
|
|
RK_S32 frame_num = RKV_H264E_ENC_MODE == 1 ? 1 : RKV_H264E_LINKTABLE_FRAME_NUM;
|
|
mpp_log("read %d frames input", frame_num);
|
|
for (k = 0; k < frame_num; k++, g_frame_read_cnt++) {
|
|
syn = &syntax_data[g_frame_read_cnt % RKV_H264E_LINKTABLE_FRAME_NUM];
|
|
if (MPP_EOS_STREAM_REACHED == get_rkv_syntax_in(syn, hw_input_buf_mul, hw_output_strm_buf_mul)) {
|
|
mpp_log("syntax input file end, total %d frames are encoded, test is ended", g_frame_cnt);
|
|
goto __test_end;
|
|
}
|
|
ret = get_rkv_h264e_yuv_in_frame(syn, hw_input_buf_mul);
|
|
if (ret == MPP_EOS_STREAM_REACHED) {
|
|
mpp_log("yuv file end, total %d frames are encoded, test is ended", g_frame_cnt);
|
|
break;
|
|
} else if (ret == MPP_NOK) {
|
|
mpp_err("read yuv file failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
}
|
|
}
|
|
|
|
task_info.enc.syntax.data = (void *)&syntax_data[g_frame_cnt % RKV_H264E_LINKTABLE_FRAME_NUM];
|
|
|
|
/* generate registers */
|
|
hal_h264e_gen_regs(&ctx, &task_info);
|
|
|
|
|
|
/* run hardware */
|
|
t0 = mpp_time();
|
|
mpp_log("hal_h264e_start time : %lld ", (RK_S64)(t0 / 1000));
|
|
|
|
hal_h264e_start(&ctx, &task_info);
|
|
hal_h264e_wait(&ctx, &task_info);
|
|
|
|
g_frame_cnt ++;
|
|
|
|
if (g_frame_cnt == g_frame_read_cnt)
|
|
hal_h264e_rkv_dump_mpp_strm_out(&ctx, hw_output_strm_buf_mul);
|
|
} while (1);
|
|
|
|
|
|
__test_end:
|
|
mpp_packet_deinit(&extra_info_pkt);
|
|
|
|
hal_h264e_deinit(&ctx);
|
|
h264e_hal_test_deinit(&ctx, &task_info);
|
|
|
|
//free hw buf
|
|
for (k = 0; k < RKV_H264E_LINKTABLE_FRAME_NUM; k++) {
|
|
if (hw_input_buf_mul[k])
|
|
mpp_buffer_put(hw_input_buf_mul[k]);
|
|
if (hw_output_strm_buf_mul[k])
|
|
mpp_buffer_put(hw_output_strm_buf_mul[k]);
|
|
}
|
|
|
|
if (hw_input_buf_grp)
|
|
mpp_buffer_group_put(hw_input_buf_grp);
|
|
if (hw_output_buf_grp)
|
|
mpp_buffer_group_put(hw_output_buf_grp);
|
|
|
|
return MPP_OK;
|
|
}
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
h264e_hal_test_cfg test_cfg;
|
|
|
|
mpp_log("******* h264e hal test start *******");
|
|
|
|
if (MPP_OK != h264e_hal_test_parse_options(argc, argv, &test_cfg)) {
|
|
mpp_err("parse opitons failed, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
|
|
if (test_device_id == HAL_VEPU) {
|
|
if (MPP_OK != h264e_vpu_test_open_files(test_cfg)) {
|
|
mpp_err("open files error, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
mpp_log("choose h264e_hal_vpu_test");
|
|
h264e_hal_vpu_test();
|
|
} else {
|
|
if (MPP_OK != h264e_rkv_test_open_files(test_cfg)) {
|
|
mpp_err("open files error, test is ended early");
|
|
goto __test_end;
|
|
}
|
|
mpp_log("choose h264e_hal_rkv_test");
|
|
h264e_hal_rkv_test();
|
|
}
|
|
|
|
__test_end:
|
|
|
|
h264e_test_close_files();
|
|
|
|
mpp_log("******* h264e hal test end *******");
|
|
return 0;
|
|
}
|