[vlc-commits] vout: DrawTriangle: refactor
Francois Cartegnie
git at videolan.org
Mon Nov 27 15:38:23 CET 2017
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Nov 27 13:59:12 2017 +0100| [e6762ac5e67ccf18a63786001a5b3a848ff2b8aa] | committer: Francois Cartegnie
vout: DrawTriangle: refactor
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e6762ac5e67ccf18a63786001a5b3a848ff2b8aa
---
src/video_output/video_widgets.c | 46 +++++++++++-----------------------------
1 file changed, 12 insertions(+), 34 deletions(-)
diff --git a/src/video_output/video_widgets.c b/src/video_output/video_widgets.c
index c143d7ec6e..3c31e0d898 100644
--- a/src/video_output/video_widgets.c
+++ b/src/video_output/video_widgets.c
@@ -79,43 +79,21 @@ static void DrawTriangle(subpicture_region_t *r, int fill, uint8_t color,
uint8_t *p = r->p_picture->p->p_pixels;
int pitch = r->p_picture->p->i_pitch;
const int mid = y1 + (y2 - y1) / 2;
+ const bool b_swap = (x1 > x2);
- /* TODO factorize it */
- if (x2 >= x1) {
+ for (int y = y1; y <= mid; y++) {
+ const int h = y - y1;
if (fill == STYLE_FILLED) {
- for (int y = y1; y <= mid; y++) {
- int h = y - y1;
- for (int x = x1; x <= x1 + h && x <= x2; x++) {
- p[x + pitch * y ] = color;
- p[x + pitch * (y2 - h)] = color;
- }
- }
+ const int w = b_swap ? __MAX(x1 - h, x2) : __MIN(x1 + h, x2);
+ DrawRect(r, STYLE_FILLED, color,
+ (b_swap) ? w : x1, y, (b_swap) ? x1 : w, y);
+ DrawRect(r, STYLE_FILLED, color,
+ (b_swap) ? w : x1, y2 - h, (b_swap) ? x1 : w, y2 - h);
} else {
- for (int y = y1; y <= mid; y++) {
- int h = y - y1;
- p[x1 + pitch * y ] = color;
- p[x1 + h + pitch * y ] = color;
- p[x1 + pitch * (y2 - h)] = color;
- p[x1 + h + pitch * (y2 - h)] = color;
- }
- }
- } else {
- if( fill == STYLE_FILLED) {
- for (int y = y1; y <= mid; y++) {
- int h = y - y1;
- for (int x = x1; x >= x1 - h && x >= x2; x--) {
- p[x + pitch * y ] = color;
- p[x + pitch * (y2 - h)] = color;
- }
- }
- } else {
- for (int y = y1; y <= mid; y++) {
- int h = y - y1;
- p[ x1 + pitch * y ] = color;
- p[ x1 - h + pitch * y ] = color;
- p[ x1 + pitch * (y2 - h)] = color;
- p[ x1 - h + pitch * (y2 - h)] = color;
- }
+ p[x1 + pitch * y ] = color;
+ p[x1 + (b_swap ? -h : h) + pitch * y ] = color;
+ p[x1 + pitch * (y2 - h)] = color;
+ p[x1 + (b_swap ? -h : h) + pitch * (y2 - h)] = color;
}
}
}
More information about the vlc-commits
mailing list