13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright 2015 Rockchip Electronics Co. LTD
33d0407baSopenharmony_ci *
43d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
53d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
63d0407baSopenharmony_ci * You may obtain a copy of the License at
73d0407baSopenharmony_ci *
83d0407baSopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
93d0407baSopenharmony_ci *
103d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
113d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
123d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d0407baSopenharmony_ci * See the License for the specific language governing permissions and
143d0407baSopenharmony_ci * limitations under the License.
153d0407baSopenharmony_ci */
163d0407baSopenharmony_ci
173d0407baSopenharmony_ci#ifndef __UTILS_H__
183d0407baSopenharmony_ci#define __UTILS_H__
193d0407baSopenharmony_ci
203d0407baSopenharmony_ci#include <stdio.h>
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci#include "mpp_debug.h"
233d0407baSopenharmony_ci#include "mpp_frame.h"
243d0407baSopenharmony_ci
253d0407baSopenharmony_citypedef struct OptionInfo_t {
263d0407baSopenharmony_ci    const char*     name;
273d0407baSopenharmony_ci    const char*     argname;
283d0407baSopenharmony_ci    const char*     help;
293d0407baSopenharmony_ci} OptionInfo;
303d0407baSopenharmony_ci
313d0407baSopenharmony_citypedef struct data_crc_t {
323d0407baSopenharmony_ci    RK_U32          len;
333d0407baSopenharmony_ci    RK_U32          sum_cnt;
343d0407baSopenharmony_ci    RK_ULONG        *sum;
353d0407baSopenharmony_ci    RK_U32          vor; // value of the xor
363d0407baSopenharmony_ci} DataCrc;
373d0407baSopenharmony_ci
383d0407baSopenharmony_citypedef struct frame_crc_t {
393d0407baSopenharmony_ci    DataCrc         luma;
403d0407baSopenharmony_ci    DataCrc         chroma;
413d0407baSopenharmony_ci} FrmCrc;
423d0407baSopenharmony_ci
433d0407baSopenharmony_ci#define show_options(opt) \
443d0407baSopenharmony_ci    do { \
453d0407baSopenharmony_ci        _show_options(sizeof(opt)/sizeof(OptionInfo), opt); \
463d0407baSopenharmony_ci    } while (0)
473d0407baSopenharmony_ci
483d0407baSopenharmony_ci#define mpp_log_q(quiet, fmt, ...) \
493d0407baSopenharmony_ci    do { \
503d0407baSopenharmony_ci        if (!quiet) mpp_log(fmt, ## __VA_ARGS__); \
513d0407baSopenharmony_ci    } while (0)
523d0407baSopenharmony_ci
533d0407baSopenharmony_ci#ifdef __cplusplus
543d0407baSopenharmony_ciextern "C" {
553d0407baSopenharmony_ci#endif
563d0407baSopenharmony_ci
573d0407baSopenharmony_civoid _show_options(int count, OptionInfo *options);
583d0407baSopenharmony_civoid dump_mpp_frame_to_file(MppFrame frame, FILE *fp);
593d0407baSopenharmony_ci
603d0407baSopenharmony_civoid calc_data_crc(RK_U8 *dat, RK_U32 len, DataCrc *crc);
613d0407baSopenharmony_civoid write_data_crc(FILE *fp, DataCrc *crc);
623d0407baSopenharmony_civoid read_data_crc(FILE *fp, DataCrc *crc);
633d0407baSopenharmony_ci
643d0407baSopenharmony_civoid calc_frm_crc(MppFrame frame, FrmCrc *crc);
653d0407baSopenharmony_civoid write_frm_crc(FILE *fp, FrmCrc *crc);
663d0407baSopenharmony_civoid read_frm_crc(FILE *fp, FrmCrc *crc);
673d0407baSopenharmony_ci
683d0407baSopenharmony_ciMPP_RET read_image(RK_U8 *buf, FILE *fp, RK_U32 width, RK_U32 height,
693d0407baSopenharmony_ci                   RK_U32 hor_stride, RK_U32 ver_stride,
703d0407baSopenharmony_ci                   MppFrameFormat fmt);
713d0407baSopenharmony_ciMPP_RET fill_image(RK_U8 *buf, RK_U32 width, RK_U32 height,
723d0407baSopenharmony_ci                   RK_U32 hor_stride, RK_U32 ver_stride, MppFrameFormat fmt,
733d0407baSopenharmony_ci                   RK_U32 frame_count);
743d0407baSopenharmony_ci
753d0407baSopenharmony_citypedef struct OpsLine_t {
763d0407baSopenharmony_ci    RK_U32      index;
773d0407baSopenharmony_ci    char        cmd[8];
783d0407baSopenharmony_ci    RK_U64      value1;
793d0407baSopenharmony_ci    RK_U64      value2;
803d0407baSopenharmony_ci} OpsLine;
813d0407baSopenharmony_ci
823d0407baSopenharmony_ciRK_S32 parse_config_line(const char *str, OpsLine *info);
833d0407baSopenharmony_ci
843d0407baSopenharmony_ciMPP_RET name_to_frame_format(const char *name, MppFrameFormat *fmt);
853d0407baSopenharmony_ciMPP_RET name_to_coding_type(const char *name, MppCodingType *coding);
863d0407baSopenharmony_ci
873d0407baSopenharmony_citypedef void* FpsCalc;
883d0407baSopenharmony_citypedef void (*FpsCalcCb)(RK_S64 total_time, RK_S64 total_count, RK_S64 last_time, RK_S64 last_count);
893d0407baSopenharmony_ci
903d0407baSopenharmony_ciMPP_RET fps_calc_init(FpsCalc *ctx);
913d0407baSopenharmony_ciMPP_RET fps_calc_deinit(FpsCalc ctx);
923d0407baSopenharmony_ciMPP_RET fps_calc_set_cb(FpsCalc ctx, FpsCalcCb cb);
933d0407baSopenharmony_ciMPP_RET fps_calc_inc(FpsCalc ctx);
943d0407baSopenharmony_ci
953d0407baSopenharmony_ci#ifdef __cplusplus
963d0407baSopenharmony_ci}
973d0407baSopenharmony_ci#endif
983d0407baSopenharmony_ci
993d0407baSopenharmony_ci#endif /*__UTILS_H__*/
100