]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7500 FS-7513: add and use switch_img_fill
authorSeven Du <dujinfang@gmail.com>
Wed, 11 Feb 2015 06:57:02 +0000 (14:57 +0800)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:46:59 +0000 (12:46 -0500)
src/include/switch_core_video.h
src/mod/applications/mod_conference/mod_conference.c
src/switch_core_video.c

index 6e6de2aecd7a9a6b4dfeb12f117f9432200af79e..92440a1e7b32b9bf379b515ea7bf5287c634cc87 100644 (file)
@@ -189,7 +189,9 @@ SWITCH_DECLARE(void) switch_img_add_text(void *buffer, int w, int x, int y, char
 
 SWITCH_DECLARE(switch_image_t *) switch_img_copy_rect(switch_image_t *img, int x, int y, int w, int h);
 
-SWITCH_DECLARE(void) switch_image_draw_pixel(switch_image_t *img, int x, int y, switch_yuv_color_t color);
+SWITCH_DECLARE(void) switch_img_fill(switch_image_t *img, int x, int y, int w, int h, switch_yuv_color_t color);
+
+SWITCH_DECLARE(void) switch_img_draw_pixel(switch_image_t *img, int x, int y, switch_yuv_color_t color);
 
 SWITCH_DECLARE(void) switch_color_set(switch_yuv_color_t *color, char *color_str);
 
index 297cabbe8ae9ae6a33a0fab0f9c7e186b98e78e8..44d8f97d74a3e25fbe4098b7fbcf567388e9269f 100644 (file)
@@ -754,7 +754,7 @@ static void draw_bitmap(switch_image_t *img, FT_Bitmap* bitmap, FT_Int x, FT_Int
                        if ( i < 0 || j < 0 || i >= img->d_w || j >= img->d_h) continue;
 
                        if (bitmap->buffer[q * bitmap->width + p] > 128) {
-                               switch_image_draw_pixel(img, i, j, color);
+                               switch_img_draw_pixel(img, i, j, color);
                        }
                }
        }
@@ -1013,16 +1013,7 @@ static int mcu_canvas_wake(mcu_canvas_t *mcu_canvas)
 
 static void reset_image(switch_image_t *img, switch_yuv_color_t *color)
 {
-       int i;
-
-       for (i = 0; i < img->h; i++) {
-               memset(img->planes[SWITCH_PLANE_Y] + img->stride[SWITCH_PLANE_Y] * i, color->y, img->d_w);
-       }
-
-       for (i = 0; i < img->h / 2; i++) {
-               memset(img->planes[SWITCH_PLANE_U] + img->stride[SWITCH_PLANE_U] * i, color->u, img->d_w / 2);
-               memset(img->planes[SWITCH_PLANE_V] + img->stride[SWITCH_PLANE_V] * i, color->v, img->d_w / 2);
-       }
+       switch_img_fill(img, 0, 0, img->w, img->h, *color);
 }
 
 #define SCALE_FACTOR 360.0f
@@ -1126,6 +1117,10 @@ static void scale_and_patch(conference_obj_t *conference, mcu_layer_t *layer)
                if (ret != 0) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Scaling Error: ret: %d\n", ret);
                } else {
+                       if (layer->img->d_h > 20) {
+                               // reserv the bottom room for text, e.g. caller id
+                               // switch_img_set_rect(layer->img, 0, 0, layer->img->d_w, layer->img->d_h - 20);
+                       }
                        switch_img_patch(IMG, layer->img, x, y);
                }
        } else {
@@ -1583,6 +1578,10 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread
                        switch_img_draw_text(conference->canvas->img, 10, 80, color, 24, "AVA 123 你好 FreeSWITCH\nFreeSWITCH Rocks!");
                        switch_img_draw_text(conference->canvas->img, 10, 160, color, 36, "AVA 123 你好 FreeSWITCH\nFreeSWITCH Rocks!");
                        switch_img_draw_text(conference->canvas->img, 10, 300, color, 72, "AVA 123 你好 FreeSWITCH\nFreeSWITCH Rocks!");
+
+                       switch_img_fill(conference->canvas->img, 300, 10, 400, 40, color);
+                       switch_color_set(&color, "#FF0000");
+                       switch_img_draw_text(conference->canvas->img, 300, 10, color, 32, "FreeSWITCH");
                }
 
                if (used) {
index 9e0eadbf219af63e6e8feb522e20aa94ee679af9..8a1396ccac0be159187ceb0558a54abce9046c45 100644 (file)
@@ -161,7 +161,7 @@ SWITCH_DECLARE(switch_image_t *) switch_img_copy_rect(switch_image_t *img, int x
        return new_img;
 }
 
-SWITCH_DECLARE(void) switch_image_draw_pixel(switch_image_t *img, int x, int y, switch_yuv_color_t color)
+SWITCH_DECLARE(void) switch_img_draw_pixel(switch_image_t *img, int x, int y, switch_yuv_color_t color)
 {
        if (x < 0 || y < 0 || x >= img->d_w || y >= img->d_h) return;
 
@@ -173,6 +173,27 @@ SWITCH_DECLARE(void) switch_image_draw_pixel(switch_image_t *img, int x, int y,
        }
 }
 
+SWITCH_DECLARE(void) switch_img_fill(switch_image_t *img, int x, int y, int w, int h, switch_yuv_color_t color)
+{
+       int len, i;
+
+       if (x < 0 || y < 0 || x >= img->d_w || y >= img->d_h) return;
+
+       len = MIN(w, img->d_w - x);
+       if (len <= 0) return;
+
+       for (i = y; i < (y + h) && i < img->d_h; i++) {
+               memset(img->planes[SWITCH_PLANE_Y] + img->stride[SWITCH_PLANE_Y] * i + x, color.y, len);
+       }
+
+       len /= 2;
+
+       for (i = y; i < (y + h) && i < img->d_h; i += 2) {
+               memset(img->planes[SWITCH_PLANE_U] + img->stride[SWITCH_PLANE_U] * i / 2 + x / 2, color.u, len);
+               memset(img->planes[SWITCH_PLANE_V] + img->stride[SWITCH_PLANE_V] * i / 2 + x / 2, color.v, len);
+       }
+}
+
 static uint8_t scv_art[14][16] = {
        {0x00, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x00},
        {0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00},