Обновите мой код, чтобы принимать аргументы больше чем 255 символов в Си - PullRequest
0 голосов
/ 20 февраля 2019

Следующий код отлично работает для создания 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;
...