/* qcifextr.c extract certain frames from a QCIF sequence author: Leiming Qian */ #define ROW 144 #define COL 176 #include #include #include int main(int argc, char* argv[]) { FILE *qcif_file_ptr; /* qcif input file pointer */ FILE *out_file_ptr; /* Y, U, V file pointers */ int start_n, stop_n; /* start and stop frame index */ struct stat file_status; /* file status */ char *frame_buffer; /* extracted qcif frame sequences */ long buffer_size; /* parsing the command line */ if (argc!=5) { fprintf(stderr, "Usage: qcifextr qcif_file start_# stop_# out_file\n"); exit(1); } else { /* open input qcif file */ if (!(qcif_file_ptr=fopen(argv[1], "rb"))) { fprintf(stderr, "Can't open input qcif file!\n"); exit(1); } /* read start and stop frame index, check validity */ if ( (start_n=atoi(argv[2]))<0 || (stop_n=atoi(argv[3]))<0 ) { fprintf(stderr, "Invalid start and stop frame indexes!\n"); exit(1); } if (start_n>stop_n) { fprintf(stderr, "Start frame behind stop frame!\n"); exit(1); } /* read in qcif file size, see if enough frames exist */ if (stat(argv[1], &file_status)) { fprintf(stderr, "Error occured in determining file size!\n"); exit(2); } else { if ((buffer_size=file_status.st_size/ROW/COL/1.5)