Release Version 0.3.5.

This commit is contained in:
Johns 2012-01-19 16:01:05 +01:00
parent b1ce88923e
commit 87f7aa63cc
2 changed files with 67 additions and 17 deletions

View File

@ -1,6 +1,7 @@
User johns User johns
Date: Date: Thu Jan 19 15:58:40 CET 2012
Release Version 0.3.5
OSD improvements: OSD improvements:
Use OSD size equal to video window. Use OSD size equal to video window.
Update only dirty area(s) of OSD. Update only dirty area(s) of OSD.

81
video.c
View File

@ -831,7 +831,7 @@ typedef struct _video_auto_crop_ctx_
/// ///
/// Detect black line Y. /// Detect black line Y.
/// ///
/// @param data Y plane data /// @param data Y plane pixel data
/// @param length number of pixel to check /// @param length number of pixel to check
/// @param stride offset of pixels /// @param stride offset of pixels
/// ///
@ -845,22 +845,22 @@ static int AutoCropIsBlackLineY(const uint8_t * data, int length, int stride)
const uint64_t *p; const uint64_t *p;
#ifdef DEBUG #ifdef DEBUG
if ((size_t) data & 0x7 || length & 0x7 || stride & 0x7) { if ((size_t) data & 0x7 || stride & 0x7) {
abort(); abort();
} }
#endif #endif
p = (const uint64_t *)data; p = (const uint64_t *)data;
n = length / 8; // FIXME: can remove n n = length; // FIXME: can remove n
o = stride / 8; o = stride / 8;
r = 0; r = 0UL;
while (--n >= 0) { while (--n >= 0) {
r |= *p; r |= *p;
p += o; p += o;
} }
// below YBLACK(0x20) is black // below YBLACK(0x20) is black
return r & (~(YBLACK - 1) * M64); return !(r & ~((YBLACK - 1) * M64));
} }
/// ///
@ -871,21 +871,24 @@ static void AutoCropDetect(int width, int height, void *data[3],
{ {
const void *data_y; const void *data_y;
unsigned length_y; unsigned length_y;
int x;
//int x; int y;
//int y;
int x1; int x1;
int x2; int x2;
int y1; int y1;
int y2; int y2;
int logo_skip;
// //
// ignore top+bottom 4 lines and left+right 8 pixels // ignore top+bottom 4 lines and left+right 8 pixels
// //
x1 = 0; #define SKIP_X 8
y1 = 0; #define SKIP_Y 4
x2 = width; x1 = width - 1;
y2 = height; x2 = 0;
y1 = height - 1;
y2 = 0;
logo_skip = SKIP_X;
data_y = data[0]; data_y = data[0];
length_y = pitches[0]; length_y = pitches[0];
@ -893,18 +896,61 @@ static void AutoCropDetect(int width, int height, void *data[3],
// //
// search top // search top
// //
for (y = SKIP_Y; y < y1; ++y) {
if (!AutoCropIsBlackLineY(data_y + logo_skip + y * length_y,
(length_y - 2 * logo_skip) / 8, 8)) {
if (y == SKIP_Y) {
y = 0;
}
y1 = y;
break;
}
}
// //
// search bottom // search bottom
// //
for (y = height - SKIP_Y - 1; y > y2; --y) {
if (!AutoCropIsBlackLineY(data_y + logo_skip + y * length_y,
(length_y - 2 * logo_skip) / 8, 8)) {
if (y == height - SKIP_Y - 1) {
y = height - 1;
}
y2 = y;
break;
}
}
// //
// search left // search left
// //
for (x = SKIP_X; x < x1; x += 8) {
if (!AutoCropIsBlackLineY(data_y + x + SKIP_Y * length_y,
height - 2 * SKIP_Y, length_y)) {
if (x == SKIP_X) {
x = 0;
}
x1 = x;
break;
}
}
// //
// search right // search right
// //
for (x = width - SKIP_X - 8; x > x2; x -= 8) {
if (!AutoCropIsBlackLineY(data_y + x + SKIP_Y * length_y,
height - 2 * SKIP_Y * 8, length_y)) {
if (x == width - SKIP_X - 8) {
x = width - 1;
}
x2 = x;
break;
}
}
if (y1 > SKIP_Y || x1 > SKIP_X) {
Debug(3, "video/autocrop: top=%d bottom=%d left=%d right=%d\n", y1, y2,
x1, x2);
}
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -5398,7 +5444,7 @@ static void VdpauMixOsd(void)
blend_state.blend_equation_alpha = blend_state.blend_equation_alpha =
VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD; VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD;
// FIXME: use dirty area // use dirty area
if (OsdDirtyWidth && OsdDirtyHeight) { if (OsdDirtyWidth && OsdDirtyHeight) {
source_rect.x0 = OsdDirtyX; source_rect.x0 = OsdDirtyX;
source_rect.y0 = OsdDirtyY; source_rect.y0 = OsdDirtyY;
@ -5449,7 +5495,10 @@ static void VdpauMixOsd(void)
#endif #endif
//end = GetMsTicks(); //end = GetMsTicks();
//Debug(3, "video:/vdpau: osd render %d ms\n", end - start); /*
Debug(4, "video:/vdpau: osd render %d %d ms\n", VdpauOsdSurfaceIndex,
end - start);
*/
VdpauOsdSurfaceIndex = !VdpauOsdSurfaceIndex; VdpauOsdSurfaceIndex = !VdpauOsdSurfaceIndex;
} }