#include #include // scan values, swap, and write each as 1 or 2 bytes along with bit map #define SetBit(A,k) ( A[(k/32)] |= (1 << (k%32)) ) #define ClearBit(A,k) ( A[(k/32)] &= ~(1 << (k%32)) ) #define DoByteSwap(x) ByteSwap((unsigned char *) &x, sizeof(x)) void ByteSwap(unsigned char * b, int n){ register int i = 0; register int j = n-1; unsigned char temp; while (i= 0 ; c--){ d = n >> c; if (d & 1) *(pointer+count) = 1 + '0'; else *(pointer+count) = 0 + '0'; count++; } *(pointer+count) = '\0'; return pointer; } int main(){ printf("reading Y,U,V data\n"); char * file1 = "yuv_data/V.dat"; char * file2 = "yuv_data_shifted/V2.dat"; char * file3 = "yuv_data_shifted/V2_map.dat"; unsigned short val, bsval; unsigned char cval; int *map; int i, nvals = 1920*1080; FILE *fp, *fp2, *fp3; map = (int*)malloc(nvals/(4*8)*sizeof(int)); // bit array printf("swapping bytes in %s\n", file1); fp = fopen(file1,"r"); fp2 = fopen(file2,"w"); fp3 = fopen(file3,"w"); for(i=0; i> (0)) & 0xff; //printf("after val[%d] = %d (%s) and cval = %d\n", i, bsval, decimal_to_binary(bsval), cval); if(val > 255){ SetBit(map,i); fwrite(&bsval, sizeof(bsval), 1, fp2); } else { cval = val; fwrite(&cval, sizeof(cval), 1, fp2); } } fwrite(map,sizeof(int),nvals/32,fp3); fclose(fp); fclose(fp2); fclose(fp3); return 0; }