按照 论坛unturned3 大佬给的包 去做 提示
CAM_V2P_IOCTL: Inappropriate ioctl for device
我使用的也是DVP 的 OV5640
我是不是没装什么库
大佬代码 cam.c这段
// dirty hack to get physical address of buffers
// see github repo README for details
perror_ret(ioctl(fd, CAM_V2P_IOCTL, &addr), "CAM_V2P_IOCTL");
出现了这个东西
CAM_V2P_IOCTL: Inappropriate ioctl for device
大佬说的要获取物理地址 这个无法操作啊
有人遇到过吗 是少了什么么
copy_video.sh fswebcam.sh h264enc_demo kern_update.sh
# ./h264enc_demo 640 480 30 300
Info: DLOG_LEVEL changed to 1
debug : ionAlloc <__GetIonMemOpsS:985>:*** get __GetIonMemOpsS ***
debug : ionAlloc <ion_alloc_open:134>:begin ion_alloc_open
debug : cedarc <VeSetSpeed:1559>: *** set ve freq to 360 Mhz ***
debug : cedarc <VeInitialize:1198>: ve init ok
debug : ionAlloc <ion_alloc_open:175>:** phy offset = 40000000
debug : cedarc <VeRelease:1253>: ve release ok
debug : cedarc <LogVersionInfo:40>:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cedar Codec <<<<<<<<<<<<<<<<<<<<<<<<<<<<
tag : createBranch_customize_sylix
branch: CedarC-v1.1.9
commit: 4a182bd42c931bea2f77b0ff9a531d233df8541e
date : Thu May 25 15:34:03 2017 +0800
author: jenkins8080
patch :
----------------------------------------------------------------------
debug : cedarc <VeSetSpeed:1559>: *** set ve freq to 360 Mhz ***
debug : cedarc <VeInitialize:1198>: ve init ok
debug : ionAlloc <__GetIonMemOpsS:985>:*** get __GetIonMemOpsS ***
debug : ionAlloc <ion_alloc_open:134>:begin ion_alloc_open
debug : cedarc <VideoEncInit:195>: (f:VideoEncInit, l:195)
debug : cedarc <VideoEncInit:210>: (f:VideoEncInit, l:210)
debug : cedarc <BitStreamCreate:102>: BitStreamCreate OK
Info: h264 encoder init OK
Debug: 2 media entities detected
CAMEAR_IC: name sun6i-csi: subdev entity id = -1
CAMEAR_IC: name ov5640 1-003c: subdev entity id = -1
Debug: ov5640 1-003c: subdev entity id = 5
Debug: ov5640 1-003c: subdev pad = 0
Info: ov5640 1-003c: subdev format set to: 640x480, media bus format code = 0x20 06
Info: ov5640 1-003c: frame rate: requested for 30; image sensor accepted 30
CAM_V2P_IOCTL: Inappropriate ioctl for device
Error: cam_init() failed
debug : cedarc <VeRelease:1253>: ve release ok
离线
找物理地址映射直接查/proc/self/pagemap
或者先写个特征值在物理地址空间里逐页找都行
离线
你用我配套的buildroot了吗?我那里头有相关的内核补丁,没用补丁的话估计会导致 CAM_V2P_IOCTL: Inappropriate ioctl for device
离线
离线
万幸 前几天抱着姐姐睡觉 在梦里成功编码了 回来后按照梦里的指示 修改了 sun6i_video.c 成功实现了编码
可能我是5.2.y 配置文件无法完全适配 最后掉坑里了 只能复制粘贴地改
虽然成功了 但出现个新问题 OV5640 1920 1080 15帧 编码是看得到画面的
但当我
# ./f264 1920 1080 30 60
Info: captured 60 frames in 2.01s; FPS = 29.8
debug : cedarc <VeRelease:1253>: ve release ok
30帧 是带有绿色的花屏画面
按照你的代码 里的提示 也是无法解决这个问题
// This ALIGN_16B thing is wrong?
// At 1920x1080, this will screw up the data alignment and create a green band in video
if(width==1920)
{
buffers[l].addrVirC = buffers[l].start + ALIGN_16B(g_width) * ALIGN_16B(g_height);
}else
{
buffers[l].addrVirC = buffers[l].start + g_width * g_height;
}
int addr = buf.m.offset;
// dirty hack to get physical address of buffers
// see github repo README for details
perror_ret(ioctl(fd, CAM_V2P_IOCTL, &addr), "CAM_V2P_IOCTL");
buffers[l].addrPhyY = (void *) addr;
if(width==1920)
{
buffers[l].addrPhyC = (void *) ( addr + ALIGN_16B(g_width) * ALIGN_16B(g_height) );
}else
{
buffers[l].addrPhyC = (void *) (addr + g_width * g_height);
}
Info: captured 60 frames in 23.73s; FPS = 2.5
debug : cedarc <VeRelease:1253>: ve release ok
效果如图
这是编码后的视频截图
设置15帧的时候是:
图像下方好像有点问题 虽然不是很清晰
我想知道 为什么30帧的时候 画成绿色 15帧就有一点正常 是不是 PCLK速度不够?
离线
今天尝试 大佬的 配置文件 1080P 能达到30帧了 但出现很严重的横纹 不知道这是什么产生的
离线