switch_image_t *bgimg;
switch_image_t *bgimg_scaled;
switch_image_t *last_img;
+ switch_image_t *imgfg;
+ switch_image_t *imgbg;
void *data;
switch_size_t datalen;
switch_file_handle_t vfh;
{
switch_img_free(&context->bgimg);
switch_img_free(&context->bgimg_scaled);
+ switch_img_free(&context->imgbg);
+ switch_img_free(&context->imgfg);
if (switch_test_flag(&context->vfh, SWITCH_FILE_OPEN)) {
switch_core_file_close(&context->vfh);
memset(&context->vfh, 0, sizeof(context->vfh));
}
}
- if (n > 3 && argv[i]) {
+
+
+ while (n > 3 && argv[i]) {
+ if (!strncasecmp(argv[i], "fg:", 3)) {
+ switch_img_free(&context->imgfg);
+ context->imgfg = switch_img_read_png(argv[i]+3, SWITCH_IMG_FMT_ARGB);
+ }
+
+ if (!strncasecmp(argv[i], "bg:", 3)) {
+ switch_img_free(&context->imgbg);
+ context->imgbg = switch_img_read_png(argv[i]+3, SWITCH_IMG_FMT_ARGB);
+ }
+
if (!strcasecmp(argv[i], "patch")) {
*function = "patch:video";
*flags = SMBF_VIDEO_PATCH;
}
+
+ i++;
}
- i++;
+
switch_mutex_unlock(context->command_mutex);
switch_img_fill(frame->img, 0, 0, img->d_w, img->d_h, &context->bgcolor);
}
+
+ if (context->imgbg) {
+ int x = 0, y = 0;
+
+ if (context->imgbg->d_w != frame->img->d_w && context->imgbg->d_h != frame->img->d_h) {
+ switch_img_fit(&context->imgbg, frame->img->d_w, frame->img->d_h, SWITCH_FIT_SIZE);
+ }
+ switch_img_find_position(POS_CENTER_BOT, frame->img->d_w, frame->img->d_h, context->imgbg->d_w, context->imgbg->d_h, &x, &y);
+ switch_img_patch(frame->img, context->imgbg, x, y);
+ }
+
switch_img_patch(frame->img, img, 0, 0);
+
+ if (context->imgfg) {
+ int x = 0, y = 0;
+
+ if (context->imgfg->d_w != frame->img->d_w && context->imgfg->d_h != frame->img->d_h) {
+ switch_img_fit(&context->imgfg, frame->img->d_w, frame->img->d_h, SWITCH_FIT_SIZE);
+ }
+ switch_img_find_position(POS_CENTER_BOT, frame->img->d_w, frame->img->d_h, context->imgfg->d_w, context->imgfg->d_h, &x, &y);
+ switch_img_patch(frame->img, context->imgfg, x, y);
+ }
+
switch_img_free(&img);
switch_mutex_unlock(context->command_mutex);