Я пытаюсь записать память, которую я получаю из примера 4-го примера видеороликов. Однако он не работает. При попытке доступа к указателю я получаю ошибку сегментации. Надеюсь, это не глупая ошибка, потому что я потратил пару дней на это. Вот код: (Он не отформатирован, потому что было слишком много конфликтов с html.) Мой компьютер использует ветвь исполнения mmap
. Он вызывает ошибки в writeFile()
: mRGB = mScreen-> pixels [pixel];Видео 4 Linux 2 чтение MMAP-адрес
Я использую 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;
Я также добавил строку в основной (...) примерно на линии 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);
}
Откуда у вас был указатель размером 2 символа ??? Попробуйте 'malloc (sizeof (char *))'. И вы никогда не освобождаете эту память. –
@PaulOgilvie, что указатель явно никогда не используется, так что это утечка памяти, но это, вероятно, также отлаживает материал, на котором находится плакат. –
Пиксельная петля не должна идти в 10, а в буферах [i] .length'. Я не могу найти определение «Экран». Убедитесь, что он определен как 'struct' с одним членом,' pixels', который является массивом 'unsigned char'. –