mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Release Version 0.3.5.
This commit is contained in:
parent
b1ce88923e
commit
87f7aa63cc
@ -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
81
video.c
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user