int visual_video_allocate_buffer (VisVideo *video) { visual_return_val_if_fail (video != NULL, -VISUAL_ERROR_VIDEO_NULL); visual_return_val_if_fail (video->buffer != NULL, -VISUAL_ERROR_VIDEO_BUFFER_NULL); if (visual_video_get_pixels (video) != NULL) { if (visual_buffer_get_allocated (video->buffer)) { visual_video_free_buffer (video); } else { visual_log (VISUAL_LOG_ERROR, _("Trying to allocate an screen buffer on " "a VisVideo structure which points to an external screen buffer")); return -VISUAL_ERROR_VIDEO_HAS_PIXELS; } } if (visual_video_get_size (video) == 0) { visual_buffer_set_data (video->buffer, NULL); return VISUAL_OK; } visual_buffer_set_destroyer (video->buffer, visual_buffer_destroyer_free); visual_buffer_set_size (video->buffer, visual_video_get_size (video)); visual_buffer_allocate_data (video->buffer); video->pixel_rows = visual_mem_new0 (void *, video->height); precompute_row_table (video); return VISUAL_OK; }
static void act_bumpscope_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { BumpscopePrivate *priv = visual_plugin_get_private (plugin); priv->video = video; visual_audio_get_sample_mixed_simple (audio, priv->pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); __bumpscope_render_pcm (priv, visual_buffer_get_data (priv->pcmbuf)); visual_mem_copy (visual_video_get_pixels (video), priv->rgb_buf2, visual_video_get_size (video)); priv->colorupdate++; /* Let's not overload the color selector */ if (priv->colorupdate > 1) priv->colorupdate = 0; if (priv->colorchanged == TRUE && priv->colorupdate == 0) { /* I couldn't hold myself */ visual_param_set_value_color ( visual_param_list_get ( visual_plugin_get_params (plugin), "color"), &priv->color); } }
static void flash_24 (FlashPrivate *priv, float rate, VisVideo *dest, VisVideo *src1, VisVideo *src2) { uint8_t *scrbuf; uint8_t *destbuf = visual_video_get_pixels (dest); int size; int i; if (rate < 0.5) { scrbuf = visual_video_get_pixels (src1); size = visual_video_get_size (src1); } else { scrbuf = visual_video_get_pixels (src2); size = visual_video_get_size (src2); } for (i = 0; i < size; i++) destbuf[i] = priv->replacetable[scrbuf[i]]; }
const VisPluginInfo *get_plugin_info (void) { static VisMorphPlugin morph = { .apply = lv_morph_alpha_apply, .vidoptions.depth = VISUAL_VIDEO_DEPTH_8BIT | VISUAL_VIDEO_DEPTH_16BIT | VISUAL_VIDEO_DEPTH_24BIT | VISUAL_VIDEO_DEPTH_32BIT }; static VisPluginInfo info = { .type = VISUAL_PLUGIN_TYPE_MORPH, .plugname = "alphablend", .name = "alphablend morph", .author = "Dennis Smit <*****@*****.**>", .version = "0.1", .about = N_("An alphablend morph plugin"), .help = N_("This morph plugin morphs between two video sources using the alphablend method"), .license = VISUAL_PLUGIN_LICENSE_LGPL, .init = lv_morph_alpha_init, .cleanup = lv_morph_alpha_cleanup, .plugin = &morph }; return &info; } static int lv_morph_alpha_init (VisPluginData *plugin) { #if ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); #endif return TRUE; } static void lv_morph_alpha_cleanup (VisPluginData *plugin) { /* nothing to do */ } static void lv_morph_alpha_apply (VisPluginData *plugin, float progress, VisAudio *audio, VisVideo *dest, VisVideo *src1, VisVideo *src2) { alpha_blend_buffer (visual_video_get_pixels (dest), visual_video_get_pixels (src1), visual_video_get_pixels (src2), visual_video_get_size (dest), visual_video_get_depth (dest), progress); }
int visual_bin_switch_actor (VisBin *bin, VisActor *actor) { VisVideo *privvid; visual_log_return_val_if_fail (bin != NULL, -1); visual_log_return_val_if_fail (actor != NULL, -1); /* Set the new actor */ bin->actmorph = actor; visual_log (VISUAL_LOG_DEBUG, "entering..."); /* Free the private video */ if (bin->privvid != NULL) { visual_object_unref (VISUAL_OBJECT (bin->privvid)); bin->privvid = NULL; } visual_log (VISUAL_LOG_INFO, _("depth of the main actor: %d"), bin->actor->video->depth); /* Starting the morph, but first check if we don't have anything todo with openGL */ if (bin->morphstyle == VISUAL_SWITCH_STYLE_MORPH && bin->actor->video->depth != VISUAL_VIDEO_DEPTH_GL && bin->actmorph->video->depth != VISUAL_VIDEO_DEPTH_GL && bin->depthfromGL != TRUE) { if (bin->morph != NULL && bin->morph->plugin != NULL) { visual_morph_set_rate (bin->morph, 0); visual_morph_set_video (bin->morph, bin->actvideo); if (bin->morphautomatic == TRUE) visual_morph_set_mode (bin->morph, bin->morphmode); else visual_morph_set_mode (bin->morph, VISUAL_MORPH_MODE_SET); visual_morph_set_time (bin->morph, &bin->morphtime); visual_morph_set_steps (bin->morph, bin->morphsteps); } bin->morphrate = 0; bin->morphstepsdone = 0; visual_log (VISUAL_LOG_DEBUG, "phase 1"); /* Allocate a private video for the main actor, so the morph * can draw to the framebuffer */ privvid = visual_video_new (); visual_log (VISUAL_LOG_DEBUG, "actvideo->depth %d actmorph->video->depth %d", bin->actvideo->depth, bin->actmorph->video->depth); visual_log (VISUAL_LOG_DEBUG, "phase 2"); visual_video_clone (privvid, bin->actvideo); visual_log (VISUAL_LOG_DEBUG, "phase 3 pitch privvid %d actvideo %d", privvid->pitch, bin->actvideo->pitch); visual_video_allocate_buffer (privvid); visual_log (VISUAL_LOG_DEBUG, "phase 4"); /* Initial privvid initialize */ visual_log (VISUAL_LOG_DEBUG, "actmorph->video->depth %d %p", bin->actmorph->video->depth, visual_video_get_pixels (bin->actvideo)); if (visual_video_get_pixels (bin->actvideo) != NULL && visual_video_get_pixels (privvid) != NULL) visual_mem_copy (visual_video_get_pixels (privvid), visual_video_get_pixels (bin->actvideo), visual_video_get_size (privvid)); else if (visual_video_get_pixels (privvid) != NULL) visual_mem_set (visual_video_get_pixels (privvid), 0, visual_video_get_size (privvid)); visual_actor_set_video (bin->actor, privvid); bin->privvid = privvid; } else { visual_log (VISUAL_LOG_DEBUG, "Pointer actvideo->pixels %p", visual_video_get_pixels (bin->actvideo)); if (bin->actor->video->depth != VISUAL_VIDEO_DEPTH_GL && visual_video_get_pixels (bin->actvideo) != NULL) { visual_mem_set (visual_video_get_pixels (bin->actvideo), 0, visual_video_get_size (bin->actvideo)); } } visual_log (VISUAL_LOG_DEBUG, "Leaving, actor->video->depth: %d actmorph->video->depth: %d", bin->actor->video->depth, bin->actmorph->video->depth); bin->morphing = TRUE; return 0; }
static void flash_8 (FlashPrivate *priv, float rate, VisVideo *dest, VisVideo *src1, VisVideo *src2) { if (rate < 0.5) visual_mem_copy (visual_video_get_pixels (dest), visual_video_get_pixels (src1), visual_video_get_size (src1)); else visual_mem_copy (visual_video_get_pixels (dest), visual_video_get_pixels (src2), visual_video_get_size (src2)); }