Следующий код отлично работает для создания 8-битных файлов YUV.Я хочу обновить его, чтобы иметь возможность создавать 10-битные файлы YUV.Но функция char не позволяет целым числам больше 255.
Я пытался изменить его на short или int, но я получаю несовместимые ошибки типа указателя.Я часами изучал альтернативные подходы, но не смог понять, как настроить этот код.Любая помощь приветствуется.
/*
MPEG 2 decoder bitstream xfer
*/
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int main(int argc, char **argv)
{
FILE *fpout;
unsigned int i, j;
unsigned char y, cb, cr, temp;
if (argc != 5) {
fprintf(stderr, "usage: pat<outfile> <Y> <Cb> <Cr>\n");
exit(-1);
}
/*--- open binary file (for parsing) ---*/
fpout = fopen(argv[1], "wb");
if (fpout == 0) {
fprintf(stderr, "Cannot open output file <%s>\n", argv[1]);
exit(-1);
}
for(j = 0; j < 360; j++) {
for(i = 0; i < 960; i++) {
y = 16;
cr = 128;
cb = 128;
fwrite(&cb, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
fwrite(&cr, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
}
}
for(j = 0; j < 360; j++) {
for(i = 0; i < 960; i++) {
if(i < 320 || i > 639) {
y = 16;
cr = 128;
cb = 128;
fwrite(&cb, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
fwrite(&cr, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
}
else {
temp = atoi(argv[2]);
y = temp;
temp = atoi(argv[3]);
cb = temp;
temp = atoi(argv[4]);
cr = temp;
fwrite(&cb, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
fwrite(&cr, 1, 1, fpout);
fwrite(&y, 1, 1, fpout);
}
}
}
fclose(fpout);
return 0;