+ vlc_mutex_unlock( &p_vout->p_sys->lock );
+}
+
+#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_CODEC_I444:
+ case VLC_CODEC_I422:
+ case VLC_CODEC_I420:
+ case VLC_CODEC_YV12:
+ case VLC_CODEC_I411:
+ case VLC_CODEC_I410:
+ case VLC_CODEC_YUVA:
+ 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_CODEC_RGB8: // 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_CODEC_RGB15: // packed by 2
+ case VLC_CODEC_RGB16: // 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_CODEC_RGB24: // 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_CODEC_RGB32: // 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_CODEC_YUYV: // packed by 2
+ case VLC_CODEC_UYVY: // 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;