+#ifdef BEST_AUTOCROP
+static bool NonBlackLine(uint8_t *p_in, int i_line, int i_pitch,
+ int i_visible_pitch, int i_lines,
+ int i_lumThreshold, int i_skipCountPercent,
+ int i_nonBlackPixel, int i_chroma)
+{
+ const int i_col = i_line * i_pitch / i_lines;
+ int i_index, i_count = 0;
+ int i_skipCount = 0;
+
+ switch(i_chroma)
+ {
+ // planar YUV
+ case VLC_FOURCC('I','4','4','4'):
+ case VLC_FOURCC('I','4','2','2'):
+ case VLC_FOURCC('I','4','2','0'):
+ case VLC_FOURCC('Y','V','1','2'):
+ case VLC_FOURCC('I','Y','U','V'):
+ case VLC_FOURCC('I','4','1','1'):
+ case VLC_FOURCC('I','4','1','0'):
+ case VLC_FOURCC('Y','V','U','9'):
+ case VLC_FOURCC('Y','U','V','A'):
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = i_col/2 + i_skipCount/2;
+ i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2;
+ i_index++)
+ {
+ i_count += (p_in[i_index] > i_lumThreshold);
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ // packed RGB
+ case VLC_FOURCC('R','G','B','2'): // packed by 1
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = i_col/2 + i_skipCount/2;
+ i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2;
+ i_index++)
+ {
+ i_count += (p_in[i_index] > i_lumThreshold);
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ case VLC_FOURCC('R','V','1','5'): // packed by 2
+ case VLC_FOURCC('R','V','1','6'): // packed by 2
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = i_col/2 + i_skipCount/2 -
+ (i_col/2 + i_skipCount/2) % 2;
+ i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2;
+ i_index+=2)
+ {
+ i_count += (p_in[i_index] > i_lumThreshold) &&
+ (p_in[i_index + 1] > i_lumThreshold);
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ case VLC_FOURCC('R','V','2','4'): // packed by 3
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = i_col/2 + i_skipCount/2 - (i_col/2 + i_skipCount/2) % 3; i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2; i_index+=3)
+ {
+ i_count += (p_in[i_index] > i_lumThreshold) &&
+ (p_in[i_index + 1] > i_lumThreshold) &&
+ (p_in[i_index + 2] > i_lumThreshold);
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ case VLC_FOURCC('R','V','3','2'): // packed by 4
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = i_col/2 + i_skipCount/2 - (i_col/2 + i_skipCount/2) % 4; i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2; i_index+=4)
+ {
+ i_count += (uint32_t)(*(p_in + i_index)) > (uint32_t)i_lumThreshold;
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ // packed YUV
+ case VLC_FOURCC('Y','U','Y','2'): // packed by 2
+ case VLC_FOURCC('Y','U','N','V'): // packed by 2
+ case VLC_FOURCC('U','Y','V','Y'): // packed by 2
+ case VLC_FOURCC('U','Y','N','V'): // packed by 2
+ case VLC_FOURCC('Y','4','2','2'): // packed by 2
+ i_skipCount = (i_pitch * i_skipCountPercent) / 100;
+ for (i_index = (i_col/2 + i_skipCount/2) -
+ (i_col/2 + i_skipCount/2) % 2;
+ i_index <= i_visible_pitch/2 + i_col/2 - i_skipCount/2;
+ i_index+=2)
+ {
+ i_count += (p_in[i_index] > i_lumThreshold);
+ if (i_count > i_nonBlackPixel) break;
+ }
+ break;
+ default :
+ break;
+ }
+ return (i_count > i_nonBlackPixel);
+}
+#endif
+