gpt4 book ai didi

c - 视频4 Linux 2读取MMAP地址

转载 作者:行者123 更新时间:2023-11-30 17:14:56 27 4
gpt4 key购买 nike

我正在尝试写出从 video 4 linux 2 示例程序中获得的内存。但是,它不起作用。我在尝试访问指针时遇到段错误。我希望这不是一个愚蠢的错误,因为我已经花了几天的时间了。代码如下:(没有格式化,因为与html冲突太多。)我的计算机正在使用 mmap 执行分支。它在 writeFile() 的这一行出现了错误:mRGB = mScreen->像素[像素];

我正在使用此处找到的 v4l2 示例代码 http://linuxtv.org/downloads/v4l-dvb-apis/capture-example.html

以下是我所做的更改:

在第 497 行我改变了

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB332;
fmt.fmt.pix.field = V4L2_FIELD_NONE;

我还在 main(...) 的第 704 行附近添加了一行。

close_device();
writeFile();
fprintf(stderr, "\n");

并且我插入了下面指定的 writeFile() 方法:

typedef struct Screen {
unsigned char pixels[640*480];
} Screen;


static void writeFile() {
const int dimx = 640, dimy = 480;
int mNumPixels = dimx * dimy;

Screen *mScreen;

int i, pixel;
FILE *file = fopen("output","w");
if (file == NULL) return;
/* shift the bits around */
(void)fprintf(file, "P6\n%d %d\n255\n", dimx, dimy);

for (i = 1; i < n_buffers; i++) {
mScreen = buffers[i].start;
printf("\npointer to mScreen is: %p\n", mScreen);

for (pixel = 0; pixel < 640*480; pixel++) {
static unsigned char color[3];
unsigned char mRGB = 0;
printf("%d:%x\n", pixel, mRGB);
fflush(stdout);
mRGB = mScreen->pixels[pixel];
color[0] = (mRGB & 0xE0) >> 5;
color[1] = (mRGB & 0x1D) >> 2;
color[2] = mRGB & 0x03;

fwrite(color, sizeof(unsigned char)*3, 1, file);
}
}
fclose(file);
}

最佳答案

示例代码的uninit_device()修改了可用内存,使得指针不再可用。 writeFile() 方法必须在此方法/函数之前调用。

关于c - 视频4 Linux 2读取MMAP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30142512/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com