MIPI RAW10 RAW12 RAW14格式解析

看了一些关于mipi格式的文章,不是图示错误,就是废话太多,不然就是代码辣眼睛。

raw14用7*8个byte表示4*14格式的像素

raw12用3*8个byte表示2*12格式的像素

raw10用5*8个byte表示4*10格式的像素

解析代码如下:

//raw14 b1,b2,b3,b4,b5,b6,b7分别为连续读出的七个uint8类型的数据,p1,p2,p3,p4为四个像素点的像素值,那么
    for(int i=0;i<file_len;i+=7){
        unsigned char* b = buffer + i;
        unsigned char b1 = b[0];
        unsigned char b2 = b[1];
        unsigned char b3 = b[2];
        unsigned char b4 = b[3];
        unsigned char b5 = b[4];
        unsigned char b6 = b[5];
        unsigned char b7 = b[6];

        unsigned short p1 = (b1 << 6) | (b5 & 0x3f);
        unsigned short p2 = (b2 << 6) | (((b5 >> 6) & 0x3) << 4) | (b6 & 0xf);
        unsigned short p3 = (b3 << 6) | (((b6 >> 4) & 0xf) << 2) | (b7 & 0x3);
        unsigned short p4 = (b4 << 6) | ((b7 >> 2) & 0x3f);
        
        fwrite(&p1, 2, 1, fp2);
        fwrite(&p2, 2, 1, fp2);
        fwrite(&p3, 2, 1, fp2);
        fwrite(&p4, 2, 1, fp2);
    }

//raw12 b1,b2,b3分别为连续读出的三个uint8类型的数据,p1,p2为两个个像素点的像素值,那么
    for(int i=0;i<file_len;i+=3){
        unsigned char* b = buffer + i;
        unsigned char b1 = b[0];
        unsigned char b2 = b[1];
        unsigned char b3 = b[2];
        unsigned short p1 = (b1 << 4) | ((b3     ) & 0xf);
        unsigned short p2 = (b2 << 4) | ((b3 >> 4) & 0xf);
        //printf("%d,%d,%d,%d\n", p1, p2, p3, p4);
        fwrite(&p1, 2, 1, fp2);
        fwrite(&p2, 2, 1, fp2);
    }

 //raw10 b1,b2,b3,b4,b5分别为连续读出的五个uint8类型的数据,p1,p2,p3,p4为四个像素点的像素值,那么
    for (int i=0;i<file_len;i+=5){
            unsigned char*b = buffer + i;
            unsigned char b1 = b[0];
            unsigned char b2 = b[1];
            unsigned char b3 = b[2];
            unsigned char b4 = b[3];
            unsigned char b5 = b[4];
            unsigned short p1 = (b1 << 2) | ((b5) & 0x3);
            unsigned short p2 = (b2 << 2) | ((b5 >> 2) & 0x3);
            unsigned short p3 = (b3 << 2) | ((b5 >> 4) & 0x3);
            unsigned short p4 = (b4 << 2) | ((b5 >> 6) & 0x3);
            //printf("%d,%d,%d,%d\n", p1, p2, p3, p4);
            fwrite(&p1, 2, 1, fp2);
            fwrite(&p2, 2, 1, fp2);
            fwrite(&p3, 2, 1, fp2);
            fwrite(&p4, 2, 1, fp2);
        }

  

 

posted @ 2025-01-21 11:18  长尾景虎  阅读(1447)  评论(0)    收藏  举报