[vlc-commits] Converted subpicture widget/epg to YUVP.
Laurent Aimar
git at videolan.org
Wed Jun 1 21:19:22 CEST 2011
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Wed Jun 1 20:46:42 2011 +0200| [063357c9b3f999a8fa03cdccf50fe0b0136a823a] | committer: Laurent Aimar
Converted subpicture widget/epg to YUVP.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=063357c9b3f999a8fa03cdccf50fe0b0136a823a
---
src/video_output/video_epg.c | 31 ++++++++++---------
src/video_output/video_widgets.c | 61 ++++++++++++++++++++------------------
2 files changed, 48 insertions(+), 44 deletions(-)
diff --git a/src/video_output/video_epg.c b/src/video_output/video_epg.c
index 996a074..d49ab46 100644
--- a/src/video_output/video_epg.c
+++ b/src/video_output/video_epg.c
@@ -41,17 +41,26 @@ static subpicture_region_t * vout_OSDEpgSlider(int x, int y,
int width, int height,
float ratio)
{
- video_format_t fmt;
- subpicture_region_t *region;
-
/* Create a new subpicture region */
- video_format_Init(&fmt, VLC_CODEC_YUVA);
+ video_palette_t palette = {
+ .i_entries = 4,
+ .palette = {
+ [0] = { 0xff, 0x80, 0x80, 0x00 },
+ [1] = { 0x00, 0x80, 0x80, 0x00 },
+ [2] = { 0xff, 0x80, 0x80, 0xff },
+ [3] = { 0x00, 0x80, 0x80, 0xff },
+ },
+ };
+
+ video_format_t fmt;
+ video_format_Init(&fmt, VLC_CODEC_YUVP);
fmt.i_width = fmt.i_visible_width = width;
fmt.i_height = fmt.i_visible_height = height;
fmt.i_sar_num = 1;
fmt.i_sar_den = 1;
+ fmt.p_palette = &palette;
- region = subpicture_region_New(&fmt);
+ subpicture_region_t *region = subpicture_region_New(&fmt);
if (!region)
return NULL;
@@ -65,24 +74,16 @@ static subpicture_region_t * vout_OSDEpgSlider(int x, int y,
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
- #define WRITE_COMP(plane, value) \
- picture->p[plane].p_pixels[picture->p[plane].i_pitch * j + i] = value
-
- /* Draw the slider. */
+ /* Slider border. */
bool is_outline = j == 0 || j == height - 1 ||
i == 0 || i == width - 1;
- WRITE_COMP(0, is_outline ? 0x00 : 0xff);
- WRITE_COMP(1, 0x80);
- WRITE_COMP(2, 0x80);
-
/* We can see the video through the part of the slider
which corresponds to the leaving time. */
bool is_border = j < 3 || j > height - 4 ||
i < 3 || i > width - 4 ||
i < filled_part_width;
- WRITE_COMP(3, is_border ? 0xff : 0x00);
- #undef WRITE_COMP
+ picture->p->p_pixels[picture->p->i_pitch * j + i] = 2 * is_border + is_outline;
}
}
diff --git a/src/video_output/video_widgets.c b/src/video_output/video_widgets.c
index 081cc68..f4287f3 100644
--- a/src/video_output/video_widgets.c
+++ b/src/video_output/video_widgets.c
@@ -46,22 +46,22 @@
static void DrawRect(subpicture_region_t *r, int fill,
int x1, int y1, int x2, int y2)
{
- uint8_t *a = r->p_picture->A_PIXELS;
- int pitch = r->p_picture->A_PITCH;
+ uint8_t *p = r->p_picture->p->p_pixels;
+ int pitch = r->p_picture->p->i_pitch;
if (fill == STYLE_FILLED) {
for (int y = y1; y <= y2; y++) {
for (int x = x1; x <= x2; x++)
- a[x + pitch * y] = 0xff;
+ p[x + pitch * y] = 1;
}
} else {
for (int y = y1; y <= y2; y++) {
- a[x1 + pitch * y] = 0xff;
- a[x2 + pitch * y] = 0xff;
+ p[x1 + pitch * y] = 1;
+ p[x2 + pitch * y] = 1;
}
for (int x = x1; x <= x2; x++) {
- a[x + pitch * y1] = 0xff;
- a[x + pitch * y2] = 0xff;
+ p[x + pitch * y1] = 1;
+ p[x + pitch * y2] = 1;
}
}
}
@@ -73,8 +73,8 @@ static void DrawRect(subpicture_region_t *r, int fill,
static void DrawTriangle(subpicture_region_t *r, int fill,
int x1, int y1, int x2, int y2)
{
- uint8_t *a = r->p_picture->A_PIXELS;
- int pitch = r->p_picture->A_PITCH;
+ uint8_t *p = r->p_picture->p->p_pixels;
+ int pitch = r->p_picture->p->i_pitch;
const int mid = y1 + (y2 - y1) / 2;
/* TODO factorize it */
@@ -83,17 +83,17 @@ static void DrawTriangle(subpicture_region_t *r, int fill,
for (int y = y1; y <= mid; y++) {
int h = y - y1;
for (int x = x1; x <= x1 + h && x <= x2; x++) {
- a[x + pitch * y ] = 0xff;
- a[x + pitch * (y2 - h)] = 0xff;
+ p[x + pitch * y ] = 1;
+ p[x + pitch * (y2 - h)] = 1;
}
}
} else {
for (int y = y1; y <= mid; y++) {
int h = y - y1;
- a[x1 + pitch * y ] = 0xff;
- a[x1 + h + pitch * y ] = 0xff;
- a[x1 + pitch * (y2 - h)] = 0xff;
- a[x1 + h + pitch * (y2 - h)] = 0xff;
+ p[x1 + pitch * y ] = 1;
+ p[x1 + h + pitch * y ] = 1;
+ p[x1 + pitch * (y2 - h)] = 1;
+ p[x1 + h + pitch * (y2 - h)] = 1;
}
}
} else {
@@ -101,17 +101,17 @@ static void DrawTriangle(subpicture_region_t *r, int fill,
for (int y = y1; y <= mid; y++) {
int h = y - y1;
for (int x = x1; x >= x1 - h && x >= x2; x--) {
- a[x + pitch * y ] = 0xff;
- a[x + pitch * (y2 - h)] = 0xff;
+ p[x + pitch * y ] = 1;
+ p[x + pitch * (y2 - h)] = 1;
}
}
} else {
for (int y = y1; y <= mid; y++) {
int h = y - y1;
- a[ x1 + pitch * y ] = 0xff;
- a[ x1 - h + pitch * y ] = 0xff;
- a[ x1 + pitch * (y2 - h)] = 0xff;
- a[ x1 - h + pitch * (y2 - h)] = 0xff;
+ p[ x1 + pitch * y ] = 1;
+ p[ x1 - h + pitch * y ] = 1;
+ p[ x1 + pitch * (y2 - h)] = 1;
+ p[ x1 - h + pitch * (y2 - h)] = 1;
}
}
}
@@ -122,28 +122,31 @@ static void DrawTriangle(subpicture_region_t *r, int fill,
*/
static subpicture_region_t *OSDRegion(int x, int y, int width, int height)
{
+ video_palette_t palette = {
+ .i_entries = 2,
+ .palette = {
+ [0] = { 0xff, 0x80, 0x80, 0x00 },
+ [1] = { 0xff, 0x80, 0x80, 0xff },
+ },
+ };
+
video_format_t fmt;
- video_format_Init(&fmt, VLC_CODEC_YUVA);
+ video_format_Init(&fmt, VLC_CODEC_YUVP);
fmt.i_width =
fmt.i_visible_width = width;
fmt.i_height =
fmt.i_visible_height = height;
fmt.i_sar_num = 1;
fmt.i_sar_den = 1;
+ fmt.p_palette = &palette;
subpicture_region_t *r = subpicture_region_New(&fmt);
if (!r)
return NULL;
r->i_x = x;
r->i_y = y;
+ memset(r->p_picture->p->p_pixels, 0, r->p_picture->p->i_pitch * height);
- for (int i = 0; i < r->p_picture->i_planes; i++) {
- plane_t *p = &r->p_picture->p[i];
- int colors[PICTURE_PLANE_MAX] = {
- 0xff, 0x80, 0x80, 0x00
- };
- memset(p->p_pixels, colors[i], p->i_pitch * height);
- }
return r;
}
More information about the vlc-commits
mailing list