Manouchehri / smi2021

smi2021 v4l2 kernel driver
25 stars 13 forks source link

Too many broken frames on the 4 channel device #24

Open mateakos1 opened 8 years ago

mateakos1 commented 8 years ago

I have the 4 channel device with SAA7113H chip. I'm using my Nokia N900 as signal source, so good quality signal is generated and I get many broken frames. Tried to debug it, I have even rewritten the parse_video function, but can't solve the problem. I've added some code, to search for TRC and print statistics in about every half second (after every 16384 TRC) It prints the TRC value, and the length of the data block from that TRC value to the next TRC. It also prints a line, if any data length changes. See the results, and add any suggestions:

[23742.502984] smi2021 1-1:1.0: Skip broken frame: 230 line, but need 288 in current 576 height
[23742.503014] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1100
[23742.504070] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1868
[23742.504088] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23742.504099] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=922
[23742.504111] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1044
[23742.504128] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23742.506782] smi2021 1-1:1.0: Skip broken frame: 56 line, but need 288 in current 576 height
[23742.509116] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1444
[23742.616716] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23742.616724] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23742.616727] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23742.616729] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23742.616731] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23742.616733] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23742.616735] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23742.616737] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23742.616739] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23742.758197] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=2548
[23742.758248] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1524
[23742.758259] smi2021 1-1:1.0: Skip broken frame: 2 line, but need 288 in current 576 height
[23742.758270] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1444
[23742.758276] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=254
[23742.758291] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1020
[23742.758318] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1444
[23742.769353] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23743.027281] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1100
[23743.027308] smi2021 1-1:1.0: Skip broken frame: 286 line, but need 288 in current 576 height
[23743.027352] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=1096
[23743.027368] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23743.028358] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=3700
[23743.028370] smi2021 1-1:1.0: Skip broken frame: 2 line, but need 288 in current 576 height
[23743.028379] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=608
[23743.028396] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=1444
[23743.049643] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23743.141093] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23743.141103] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23743.141106] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23743.141109] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23743.141111] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23743.141114] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23743.141116] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23743.141119] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23743.141121] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23743.666505] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23743.666516] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23743.666522] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23743.666528] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23743.666533] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23743.666538] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23743.666542] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23743.666547] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23743.666552] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23744.190845] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23744.190853] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23744.190856] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23744.190859] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23744.190862] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23744.190864] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23744.190867] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23744.190870] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23744.190872] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23744.298466] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1100
[23744.298487] smi2021 1-1:1.0: Skip broken frame: 129 line, but need 288 in current 576 height
[23744.298519] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1100
[23744.298531] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1440
[23744.299598] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23744.299610] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1328
[23744.299620] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1042
[23744.299631] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23744.299637] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=670
[23744.299649] smi2021 1-1:1.0: New different length for TRC=0x80 LEN=1444
[23744.308517] smi2021 1-1:1.0: Skip broken frame: 155 line, but need 288 in current 576 height
[23744.310915] smi2021 1-1:1.0: New different length for TRC=0xC0 LEN=1444
[23744.508775] smi2021 1-1:1.0: New different length for TRC=0xA0 LEN=1100
[23744.509843] smi2021 1-1:1.0: New different length for TRC=0xA0 LEN=1444
[23744.509863] smi2021 1-1:1.0: New different length for TRC=0xA0 LEN=1524
[23744.509894] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=380
[23744.509905] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=1028
[23744.509922] smi2021 1-1:1.0: New different length for TRC=0xE0 LEN=1444
[23744.529849] smi2021 1-1:1.0: New different length for TRC=0xA0 LEN=1444
[23744.715209] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23744.715219] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23744.715222] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23744.715225] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23744.715228] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23744.715231] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23744.715234] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23744.715237] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23744.715239] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23745.240603] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23745.240613] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23745.240618] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23745.240621] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23745.240624] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23745.240626] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23745.240629] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23745.240632] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23745.240635] smi2021 1-1:1.0: TRC=0xC0 LEN=1444
[23745.764967] smi2021 1-1:1.0: TRC STATS (ntrcs=8)
[23745.764976] smi2021 1-1:1.0: TRC=0x80 LEN=1444
[23745.764980] smi2021 1-1:1.0: TRC=0x90 LEN=4
[23745.764983] smi2021 1-1:1.0: TRC=0xB0 LEN=4
[23745.764985] smi2021 1-1:1.0: TRC=0xA0 LEN=1444
[23745.764988] smi2021 1-1:1.0: TRC=0xF0 LEN=4
[23745.764990] smi2021 1-1:1.0: TRC=0xE0 LEN=1444
[23745.764993] smi2021 1-1:1.0: TRC=0xD0 LEN=4
[23745.764995] smi2021 1-1:1.0: TRC=0xC0 LEN=1444

The statistics code is like this:

for (i=0;i<size;i++) {
        len++;
        pattern=(pattern<<8)|p[i];
        if ((pattern&0xffffff00)==0xff000000) {
            u8 trc;
            trc = pattern&0xf0;
            if (lens[previndex]!=len) {
                dev_info(smi2021->dev,"New different length for TRC=0x%02X LEN=%d",(int)trcs[previndex],len);
            }
            lens[previndex] = len;
            len = 0;
            for (j=0;j<ntrcs;j++)
                if (trcs[j]==trc)
                    break;
            if (j==ntrcs) {
                /*not found*/
                if (ntrcs<16) {
                    /*create new entry*/
                    ntrcs++;
                    trcs[j]=trc;
                    lens[j]=0;
                    previndex=j;
                }
            } else {
                /*found*/
                previndex=j;
            }
            lines++;
            if ((lines&0x3fff)==0) {
                /*print stats*/
                dev_info(smi2021->dev,"TRC STATS (ntrcs=%d)",ntrcs);
                for (j=0;j<ntrcs;j++) {
                    dev_info(smi2021->dev,"TRC=0x%02X LEN=%d",(int)trcs[j],lens[j]);
                }
            }
        }
    }

If you add the number of lines in two consecutive broken frames, most of the times, the sum is around the required number of lines.