blob: e98337764565235a03f8877a92a7b9e7d7954644 [file] [log] [blame]
/*
* drivers/amlogic/media/frame_provider/decoder/utils/frame_check.h
*
* Copyright (C) 2016 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef __FRAME_CHECK_H__
#define __FRAME_CHECK_H__
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/amlogic/media/vfm/vframe.h>
#include <linux/kfifo.h>
#define FRAME_CHECK
#define AUX_DATA_CRC
#define YUV_MAX_DUMP_NUM 60
#define SIZE_CRC 64
#define SIZE_CHECK_Q 128
#define USER_CMP_POOL_MAX_SIZE (SIZE_CHECK_Q)
struct pic_dump_t{
struct file *yuv_fp;
loff_t yuv_pos;
unsigned int start;
unsigned int num;
unsigned int end;
unsigned int dump_cnt;
unsigned int buf_size;
char *buf_addr;
};
struct pic_check_t{
struct file *check_fp;
loff_t check_pos;
struct file *compare_fp;
loff_t compare_pos;
unsigned int cmp_crc_cnt;
void *fbc_planes[4];
void *check_addr;
DECLARE_KFIFO(new_chk_q, char *, SIZE_CHECK_Q);
DECLARE_KFIFO(wr_chk_q, char *, SIZE_CHECK_Q);
};
struct aux_data_check_t{
struct file *check_fp;
loff_t check_pos;
struct file *compare_fp;
loff_t compare_pos;
unsigned int cmp_crc_cnt;
void *check_addr;
DECLARE_KFIFO(new_chk_q, char *, SIZE_CHECK_Q);
DECLARE_KFIFO(wr_chk_q, char *, SIZE_CHECK_Q);
};
struct pic_check_mgr_t{
int id;
int enable;
unsigned int frame_cnt;
/* pic info */
unsigned int canvas_w;
unsigned int canvas_h;
unsigned int size_y; //real size
unsigned int size_uv;
unsigned int size_pic;
unsigned int last_size_pic;
void *y_vaddr;
void *uv_vaddr;
ulong y_phyaddr;
ulong uv_phyaddr;
int err_crc_block;
int file_cnt;
atomic_t work_inited;
struct work_struct frame_check_work;
struct pic_check_t pic_check;
struct pic_dump_t pic_dump;
struct usr_crc_info_t *cmp_pool;
int usr_cmp_num;
int usr_cmp_result;
/* for mjpeg u different addr with v */
bool mjpeg_flag;
void *extra_v_vaddr;
ulong extra_v_phyaddr;
int yuvsum;
u32 width;
u32 height;
};
struct aux_data_check_mgr_t{
int id;
int enable;
unsigned int frame_cnt;
/* pic info */
int aux_size;
char *aux_addr;
int file_cnt;
atomic_t work_inited;
struct work_struct aux_data_check_work;
struct aux_data_check_t aux_data_check;
};
int dump_yuv_trig(struct pic_check_mgr_t *mgr,
int id, int start, int num);
int decoder_do_frame_check(struct vdec_s *vdec, struct vframe_s *vf);
int decoder_do_aux_data_check(struct vdec_s *vdec, char *aux_buffer, int size);
int frame_check_init(struct pic_check_mgr_t *mgr, int id);
void frame_check_exit(struct pic_check_mgr_t *mgr);
ssize_t frame_check_show(struct class *class,
struct class_attribute *attr, char *buf);
ssize_t frame_check_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size);
ssize_t dump_yuv_show(struct class *class,
struct class_attribute *attr, char *buf);
ssize_t dump_yuv_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size);
void vdec_frame_check_exit(struct vdec_s *vdec);
int vdec_frame_check_init(struct vdec_s *vdec);
void vdec_aux_data_check_exit(struct vdec_s *vdec);
int vdec_aux_data_check_init(struct vdec_s *vdec);
#endif /* __FRAME_CHECK_H__ */