mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
tvin: vdin: vdin add afbce write back to memory interface [1/1]
PD#SWPL-3200 Problem: vdin add afbce need more debug method. Solution: vdin add read_pic_afbce debug interface Verify: TL1 X301 Change-Id: I45a741ba20409dc25b41ce316b0df0dce9d2dc28 Signed-off-by: Xuhua Zhang <xuhua.zhang@amlogic.com>
This commit is contained in:
@@ -1097,6 +1097,93 @@ static void vdin_dump_histgram(struct vdin_dev_s *devp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*type: 1:nv21 2:yuv422 3:yuv444*/
|
||||||
|
static void vdin_write_afbce_mem(struct vdin_dev_s *devp, char *type)
|
||||||
|
{
|
||||||
|
char *md_path_head = "/storage/B8F7-DBD0/afbce/a0_1header.bin";
|
||||||
|
char *md_path_body = "/storage/B8F7-DBD0/afbce/a0_1body.bin";
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int size = 0;
|
||||||
|
long val;
|
||||||
|
struct file *filp = NULL;
|
||||||
|
loff_t pos = 0;
|
||||||
|
mm_segment_t old_fs;
|
||||||
|
void *head_dts = NULL;
|
||||||
|
void *body_dts = NULL;
|
||||||
|
|
||||||
|
if (kstrtol(type, 10, &val) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!devp->curr_wr_vfe) {
|
||||||
|
devp->curr_wr_vfe = provider_vf_get(devp->vfp);
|
||||||
|
if (!devp->curr_wr_vfe) {
|
||||||
|
pr_info("no buffer to write.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i = devp->curr_wr_vfe->af_num;
|
||||||
|
devp->curr_wr_vfe->vf.type = VIDTYPE_VIU_SINGLE_PLANE |
|
||||||
|
VIDTYPE_VIU_FIELD | VIDTYPE_COMPRESS | VIDTYPE_SCATTER;
|
||||||
|
switch (val) {
|
||||||
|
case 1:
|
||||||
|
devp->curr_wr_vfe->vf.type |= VIDTYPE_VIU_NV21;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
devp->curr_wr_vfe->vf.type |= VIDTYPE_VIU_422;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
devp->curr_wr_vfe->vf.type |= VIDTYPE_VIU_444;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
devp->curr_wr_vfe->vf.type |= VIDTYPE_VIU_422;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
devp->curr_wr_vfe->vf.compHeadAddr = devp->afbce_info->fm_head_paddr[i];
|
||||||
|
devp->curr_wr_vfe->vf.compBodyAddr = devp->afbce_info->fm_body_paddr[i];
|
||||||
|
|
||||||
|
head_dts = codec_mm_phys_to_virt(devp->afbce_info->fm_head_paddr[i]);
|
||||||
|
body_dts = codec_mm_phys_to_virt(devp->afbce_info->fm_body_paddr[i]);
|
||||||
|
|
||||||
|
old_fs = get_fs();
|
||||||
|
set_fs(KERNEL_DS);
|
||||||
|
pr_info("head bin file path = %s\n", md_path_head);
|
||||||
|
filp = filp_open(md_path_head, O_RDONLY, 0);
|
||||||
|
if (IS_ERR(filp)) {
|
||||||
|
pr_info("read %s error.\n", md_path_head);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = vfs_read(filp, head_dts,
|
||||||
|
devp->afbce_info->frame_head_size, &pos);
|
||||||
|
|
||||||
|
vfs_fsync(filp, 0);
|
||||||
|
filp_close(filp, NULL);
|
||||||
|
set_fs(old_fs);
|
||||||
|
|
||||||
|
pos = 0;
|
||||||
|
old_fs = get_fs();
|
||||||
|
set_fs(KERNEL_DS);
|
||||||
|
pr_info("body bin file path = %s\n", md_path_body);
|
||||||
|
filp = filp_open(md_path_body, O_RDONLY, 0);
|
||||||
|
if (IS_ERR(filp)) {
|
||||||
|
pr_info("read %s error.\n", md_path_body);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = vfs_read(filp, body_dts,
|
||||||
|
devp->afbce_info->frame_body_size, &pos);
|
||||||
|
|
||||||
|
vfs_fsync(filp, 0);
|
||||||
|
filp_close(filp, NULL);
|
||||||
|
set_fs(old_fs);
|
||||||
|
|
||||||
|
provider_vf_put(devp->curr_wr_vfe, devp->vfp);
|
||||||
|
devp->curr_wr_vfe = NULL;
|
||||||
|
vf_notify_receiver(devp->name, VFRAME_EVENT_PROVIDER_VFRAME_READY,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
static void vdin_write_mem(
|
static void vdin_write_mem(
|
||||||
struct vdin_dev_s *devp, char *type,
|
struct vdin_dev_s *devp, char *type,
|
||||||
char *path, char *md_path)
|
char *path, char *md_path)
|
||||||
@@ -1699,6 +1786,11 @@ start_chk:
|
|||||||
#endif
|
#endif
|
||||||
} else if (!strcmp(parm[0], "force_recycle")) {
|
} else if (!strcmp(parm[0], "force_recycle")) {
|
||||||
devp->flags |= VDIN_FLAG_FORCE_RECYCLE;
|
devp->flags |= VDIN_FLAG_FORCE_RECYCLE;
|
||||||
|
} else if (!strcmp(parm[0], "read_pic_afbce")) {
|
||||||
|
if (parm[1])
|
||||||
|
vdin_write_afbce_mem(devp, parm[1]);
|
||||||
|
else
|
||||||
|
pr_err("miss parameters.\n");
|
||||||
} else if (!strcmp(parm[0], "read_pic")) {
|
} else if (!strcmp(parm[0], "read_pic")) {
|
||||||
if (parm[1] && parm[2])
|
if (parm[1] && parm[2])
|
||||||
vdin_write_mem(devp, parm[1], parm[2], parm[3]);
|
vdin_write_mem(devp, parm[1], parm[2], parm[3]);
|
||||||
|
|||||||
Reference in New Issue
Block a user