di626000216 2013-08-14 03:13 采纳率: 0%
浏览 1115

ARM 上进行视屏截屏是死机

在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~
struct fb_fix_screeninfo finfo;
struct fb_var_screeninfo vinfo;
uchar *frameBuffer = NULL;
long int screensize = 0;

(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)
qint32 fd = open("/dev/graphics/fb1", O_RDONLY);
if (fd < 0) {
    fd = open("/dev/fb", O_RDONLY);
    if (fd < 0) {
        return false;
    }
}

if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {
    return false;
}

if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {
    return false;
}

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
int curViewOffset = vinfo.yoffset/480;

frameBuffer = (uchar *) mmap(0, /* start */
                         screensize, /* bytes */
                         PROT_READ, /* prot */
                         MAP_SHARED, /* flags */
                         fd, /* fd */
                         screensize * curViewOffset /* offset */);

if (MAP_FAILED == frameBuffer) {
    return false;
}

只要对frameBuffer进行读取就死机!
  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-12 13:28
    关注

    这个问题可能是由于在读取视频缓冲设备时产生了竞争条件。在播放视频时,缓冲设备可能会不断地被修改,而在读取时又需要进行内存映射。这可能会导致在读取时访问非法内存或其他问题,从而导致死机。


    可以试试在播放视频的同时设置一个标志位,在读取时先判断是否正在播放视频,如果正在播放就放弃读取。如果仍然无法解决问题,可能需要在代码中进行更详细的调试,了解具体的错误原因。

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建