static int lv_morph_flash_apply (VisPluginData *plugin, float rate, VisAudio *audio, VisVideo *dest, VisVideo *src1, VisVideo *src2) { FlashPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); switch (dest->depth) { case VISUAL_VIDEO_DEPTH_8BIT: flash_8 (priv, rate, dest, src1, src2); break; case VISUAL_VIDEO_DEPTH_16BIT: break; case VISUAL_VIDEO_DEPTH_24BIT: replacetable_generate_24 (priv, rate); flash_24 (priv, rate, dest, src1, src2); break; case VISUAL_VIDEO_DEPTH_32BIT: replacetable_generate_24 (priv, rate); flash_24 (priv, rate, dest, src1, src2); break; default: break; } return 0; }
static int lv_nebulus_cleanup (VisPluginData *plugin) { NebulusPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_return_val_if_fail (plugin != NULL, -1); if (!face_first) glDeleteLists(facedl, 1); if (!tentacles_first) glDeleteLists(cubedl, 1); if (!child_first) glDeleteLists(childdl, 1); delete_gl_texture(knotbg); delete_gl_texture(tunnel); delete_gl_texture(tentacle); delete_gl_texture(twist); delete_gl_texture(twistbg); delete_gl_texture(texchild); delete_gl_texture(childbg); delete_gl_texture(energy); visual_object_unref (VISUAL_OBJECT (&child_image)); visual_object_unref (VISUAL_OBJECT (&energy_image)); visual_object_unref (VISUAL_OBJECT (&tentacle_image)); visual_object_unref (VISUAL_OBJECT (&tunnel_image)); visual_object_unref (VISUAL_OBJECT (&twist_image)); visual_object_unref (VISUAL_OBJECT (&background_image)); visual_buffer_free (priv->pcmbuf); visual_mem_free (priv); return 0; }
VISUAL_C_LINKAGE int lv_gforce_events (VisPluginData *plugin, VisEventQueue *events) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); VisEvent ev; while (visual_event_queue_poll (events, &ev)) { switch (ev.type) { case VISUAL_EVENT_RESIZE: lv_gforce_resize (plugin, ev.event.resize.width, ev.event.resize.height); break; case VISUAL_EVENT_MOUSEMOTION: break; case VISUAL_EVENT_MOUSEBUTTONDOWN: case VISUAL_EVENT_MOUSEBUTTONUP: break; case VISUAL_EVENT_KEYDOWN: priv->gGF->HandleKey (ev.event.keyboard.keysym.sym); break; default: break; } } return 0; }
static int act_infinite_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { VisBuffer *buffer; InfinitePrivate *priv; visual_return_val_if_fail (plugin != NULL, -1); visual_return_val_if_fail (video != NULL, -1); visual_return_val_if_fail (audio != NULL, -1); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); buffer = visual_buffer_new (); visual_buffer_set_data_pair (buffer, priv->pcm_data[0], sizeof (float) * 512); visual_audio_get_sample (audio, buffer, VISUAL_AUDIO_CHANNEL_LEFT); visual_buffer_set_data_pair (buffer, priv->pcm_data[1], sizeof (float) * 512); visual_audio_get_sample (audio, buffer, VISUAL_AUDIO_CHANNEL_LEFT); _inf_renderer (priv); _inf_display (priv, (uint8_t *) visual_video_get_pixels (video), video->pitch); visual_buffer_free (buffer); return 0; }
static int inp_debug_upload (VisPluginData *plugin, VisAudio *audio) { /* FIXME: Wave is incrementally calculated and will very gradually increase/decrease in frequency due to error accumulation */ DebugPriv *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); int16_t data[OUTPUT_SAMPLES]; int i; for(i = 0; i < VISUAL_TABLESIZE(data); i++) { data[i] = (int16_t) (65535/2 * priv->ampltitude * sin (priv->angle)); priv->angle += priv->angle_step; if (priv->angle >= 2 * VISUAL_MATH_PI) { priv->angle -= 2 * VISUAL_MATH_PI; } } VisBuffer *buffer = visual_buffer_new_wrap_data (data, VISUAL_TABLESIZE (data)); visual_audio_samplepool_input (audio->samplepool, buffer, VISUAL_AUDIO_SAMPLE_RATE_44100, VISUAL_AUDIO_SAMPLE_FORMAT_S16, VISUAL_AUDIO_SAMPLE_CHANNEL_STEREO); visual_buffer_free (buffer); return 0; }
VISUAL_C_LINKAGE int lv_gforce_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); VisBuffer pcmbuf; VisBuffer freqbuf; int i; long time; float gSoundBuf[SND_BUF_SIZE]; float gFFTBuf[FFT_BUF_SIZE]; visual_buffer_set_data_pair (&pcmbuf, gSoundBuf, sizeof (gSoundBuf)); visual_audio_get_sample_mixed_simple (audio, &pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); visual_buffer_set_data_pair (&freqbuf, gFFTBuf, sizeof (gFFTBuf)); visual_audio_get_spectrum_for_sample_multiplied (&freqbuf, &pcmbuf, TRUE, 3.0); // Increase volume for (i = 0; i < SND_BUF_SIZE; i++) gSoundBuf[i] *= 32768; // Set the video buffer priv->gGF->SetOutVideoBuffer ((unsigned char *) visual_video_get_pixels (video)); time = EgOSUtils::CurTimeMS (); priv->gGF->RecordSample (time, gSoundBuf, .000043, NUMSAMPLES, gFFTBuf, 1, FFT_BUF_SIZE); return 0; }
static int act_gstreamer_cleanup (VisPluginData *plugin) { GstreamerPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_mem_free (priv); return 0; }
static int lv_goom_resize (VisPluginData *plugin, int width, int height) { GoomPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); goom_set_resolution (priv->goominfo, width, height); return 0; }
extern "C" int lv_projectm_cleanup (VisPluginData *plugin) { ProjectmPrivate *priv = (ProjectmPrivate*)visual_object_get_private (VISUAL_OBJECT (plugin)); /* Cleanup, and thus also free our private */ visual_mem_free (priv->PM); visual_mem_free (priv); return 0; }
static VisPalette *act_infinite_palette (VisPluginData *plugin) { InfinitePrivate *priv; visual_return_val_if_fail (plugin != NULL, NULL); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); return priv->pal; }
static int lv_morph_flash_cleanup (VisPluginData *plugin) { FlashPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_palette_free (priv->whitepal); visual_mem_free (priv); return 0; }
static int lv_flower_cleanup (VisPluginData *plugin) { FlowerPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_timer_free (priv->flower.timer); visual_timer_free (priv->t); visual_mem_free (priv); return 0; }
extern "C" int lv_projectm_dimension (VisPluginData *plugin, VisVideo *video, int width, int height) { ProjectmPrivate *priv = (ProjectmPrivate*)visual_object_get_private (VISUAL_OBJECT (plugin)); visual_video_set_dimension (video, width, height); priv->PM->projectM_resetGL( width, height ); return 0; }
static int act_infinite_resize (VisPluginData *plugin, int width, int height) { InfinitePrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); priv->plugwidth = width; priv->plugheight = height; _inf_close_renderer (priv); _inf_init_renderer (priv); return 0; }
VISUAL_C_LINKAGE int lv_gforce_resize (VisPluginData *plugin, int width, int height) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); Rect r; SetRect (&r, 0, 0, width, height); priv->gGF->SetWinPort (0, &r); return 0; }
static int act_jakdaw_resize (VisPluginData *plugin, int width, int height) { JakdawPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); priv->xres = width; priv->yres = height; _jakdaw_feedback_reset (priv, width, height); return 0; }
/** * Notifies all the callbacks for the given VisParamEntry parameter. * * @param param Pointer to the VisParamEntry of which all the change notification * callbacks need to be called. * * @return VISUAL_OK on succes, -VISUAL_ERROR_PARAM_NULL on failure. */ int visual_param_entry_notify_callbacks (VisParamEntry *param) { VisListEntry *le = NULL; VisParamEntryCallback *pcall; visual_log_return_val_if_fail (param != NULL, -VISUAL_ERROR_PARAM_NULL); while ((pcall = visual_list_next (¶m->callbacks, &le)) != NULL) pcall->callback (param, visual_object_get_private (VISUAL_OBJECT (pcall))); return VISUAL_OK; }
static int lv_nebulus_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { NebulusPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_return_val_if_fail (plugin != NULL, -1); visual_return_val_if_fail (video != NULL, -1); visual_return_val_if_fail (audio != NULL, -1); nebulus_sound (priv, audio); nebulus_draw (priv, video); return 0; }
static int act_jakdaw_cleanup (VisPluginData *plugin) { JakdawPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); _jakdaw_feedback_close (priv); visual_object_unref (VISUAL_OBJECT (priv->pcmbuf)); visual_object_unref (VISUAL_OBJECT (priv->freqbuf)); visual_mem_free (priv); return 0; }
int inp_alsa_upload (VisPluginData *plugin, VisAudio *audio) { int16_t data[PCM_BUF_SIZE]; alsaPrivate *priv = NULL; int rcnt; visual_return_val_if_fail(audio != NULL, -1); visual_return_val_if_fail(plugin != NULL, -1); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_return_val_if_fail(priv != NULL, -1); #if 0 { /* DEBUG STUFF, REMOVE IN RELEASE FIXME FIXME XXX TODO WHATEVER */ VisBuffer buffer; visual_buffer_init (&buffer, data, 512, NULL); for (i = 0; i < 16; i++) { visual_audio_samplepool_input (audio->samplepool, &buffer, VISUAL_AUDIO_SAMPLE_RATE_44100, VISUAL_AUDIO_SAMPLE_FORMAT_S16, VISUAL_AUDIO_SAMPLE_CHANNEL_STEREO); } return 0; } #endif do { rcnt = snd_pcm_readi(priv->chandle, data, PCM_BUF_SIZE / 2); if (rcnt > 0) { VisBuffer buffer; visual_buffer_init (&buffer, data, rcnt, NULL); visual_audio_samplepool_input (audio->samplepool, &buffer, VISUAL_AUDIO_SAMPLE_RATE_44100, VISUAL_AUDIO_SAMPLE_FORMAT_S16, VISUAL_AUDIO_SAMPLE_CHANNEL_STEREO); } if (rcnt < 0) { if (rcnt == -EPIPE) { visual_log(VISUAL_LOG_WARNING, _("ALSA: Buffer Overrun")); if (snd_pcm_prepare(priv->chandle) < 0) { visual_log(VISUAL_LOG_ERROR, _("Failed to prepare interface")); return(-1); } } } } while (rcnt > 0); return 0; }
static int lv_goom_cleanup (VisPluginData *plugin) { GoomPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); if (priv->goominfo != NULL) goom_close (priv->goominfo); visual_buffer_free (priv->pcmbuf1); visual_buffer_free (priv->pcmbuf2); visual_mem_free (priv); return 0; }
static int act_jakdaw_events (VisPluginData *plugin, VisEventQueue *events) { JakdawPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); VisEvent ev; VisParamEntry *param; while (visual_event_queue_poll (events, &ev)) { switch (ev.type) { case VISUAL_EVENT_RESIZE: act_jakdaw_resize (plugin, ev.event.resize.width, ev.event.resize.height); break; case VISUAL_EVENT_PARAM: param = ev.event.param.param; visual_log (VISUAL_LOG_DEBUG, "Param changed: %s", param->name); if (visual_param_entry_is (param, "zoom mode")) { visual_log (VISUAL_LOG_DEBUG, "New value for the zoom mode param: %d", param->numeric.integer); priv->zoom_mode = visual_param_entry_get_integer (param); _jakdaw_feedback_reset (priv, priv->xres, priv->yres); } else if (visual_param_entry_is (param, "plotter trigger")) { visual_log (VISUAL_LOG_DEBUG, "New value for the plotter trigger param: %d", param->numeric.integer); priv->plotter_colortype = visual_param_entry_get_integer (param); } else if (visual_param_entry_is (param, "plotter type")) { visual_log (VISUAL_LOG_DEBUG, "New value for the plotter type param: %d", param->numeric.integer); priv->plotter_scopetype = visual_param_entry_get_integer (param); _jakdaw_feedback_reset (priv, priv->xres, priv->yres); } break; default: /* to avoid warnings */ break; } } return 0; }
static int lv_morph_flash_palette (VisPluginData *plugin, float rate, VisAudio *audio, VisPalette *pal, VisVideo *src1, VisVideo *src2) { FlashPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); if (src1->pal == NULL || src2->pal == NULL) return 0; if (rate < 0.5) visual_palette_blend (pal, src1->pal, priv->whitepal, rate * 2); else visual_palette_blend (pal, priv->whitepal, src2->pal, (rate - 0.5) * 2); return 0; }
int act_infinite_cleanup (VisPluginData *plugin) { InfinitePrivate *priv; visual_return_val_if_fail (plugin != NULL, -1); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); _inf_close_renderer (priv); visual_palette_free (priv->pal); visual_mem_free (priv); return 0; }
VISUAL_C_LINKAGE int lv_gforce_cleanup (VisPluginData *plugin) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); if (priv->gGF) delete priv->gGF; EgOSUtils::Shutdown (); delete priv->pal; delete priv; return 0; }
/** * upload data to libvisual * * @param plugin plugin that should upload data. * @param where to upload data. * * @return 0 on success. */ static int inp_mplayer_upload( VisPluginData *plugin, VisAudio *audio ) { mplayer_priv_t *priv = NULL; visual_return_val_if_fail( audio != NULL, -1 ); visual_return_val_if_fail( plugin != NULL, -1 ); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_return_val_if_fail( priv != NULL, -1 ); visual_return_val_if_fail( priv->mmap_area != NULL, -1 ); visual_mem_copy( audio->plugpcm, ((uint8_t *)priv->mmap_area) + sizeof( mplayer_data_t ), 2048 ); return 0; }
/** * cleanup plugin (release resources) * * @param plugin plugin to be cleaned up. * * @return 0 on success. */ static int inp_mplayer_cleanup( VisPluginData *plugin ) { int unclean = 0; mplayer_priv_t *priv = NULL; visual_return_val_if_fail( plugin != NULL, -1 ); priv = visual_object_get_private (VISUAL_OBJECT (plugin)); visual_return_val_if_fail( priv != NULL, -1 ); if ( priv->loaded == 1 ) { void *mmap_area = (void*)priv->mmap_area; int mmap_count = priv->mmap_area->bs + sizeof( mplayer_data_t ); if ( priv->fd > 0 ) { if ( close( priv->fd ) != 0 ) { visual_log( VISUAL_LOG_CRITICAL, _("Could not close file descriptor %d: %s"), priv->fd, strerror( errno ) ); unclean |= 1; } priv->fd = -1; } else { visual_log( VISUAL_LOG_CRITICAL, _("Wrong file descriptor %d"), priv->fd ); unclean |= 2; } if ( munmap( mmap_area, mmap_count ) != 0 ) { visual_log( VISUAL_LOG_CRITICAL, _("Could not munmap() area %p+%d. %s"), mmap_area, mmap_count, strerror( errno ) ); unclean |= 4; } } visual_mem_free( priv->sharedfile ); visual_mem_free( priv ); return - unclean; }
static int act_gstreamer_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { GstreamerPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); static int playing = 0; if (playing == 0) { char pipe[1024]; gst_init (NULL, NULL); /* snprintf(pipe, 1024, "filesrc location=%s ! decodebin ! ffmpegcolorspace ! " "videoscale ! video/x-raw-rgb,bpp=32,depth=32,width=%d,height=%d," "red_mask=0xff000000,green_mask=0x00ff0000,blue_mask=0x0000ff00 !" "fakesink name=sink sync=true", "test.mpg", video->width, video->height); */ snprintf(pipe, 1024, "filesrc location=%s ! decodebin ! ffmpegcolorspace ! " "video/x-raw-rgb,bpp=24,depth=24 ! " "fakesink name=sink signal-handoffs=true", "test.mpg"); GError *err = NULL; priv->pipe = GST_PIPELINE_CAST(gst_parse_launch (pipe, &err)); if (err) { visual_log (VISUAL_LOG_ERROR, "Failed to create pipeline", err->message); return; } gst_element_set_state (GST_ELEMENT (priv->pipe), GST_STATE_PLAYING); g_signal_connect (gst_bin_get_by_name_recurse_up (GST_BIN (priv->pipe), "sink"), "handoff", G_CALLBACK (have_data), video); playing = 1; } // g_signal_handlers_disconnect_by_func (gst_bin_get_by_name_recurse_up (GST_BIN (priv->pipe), "sink"), // G_CALLBACK (have_data), priv->old_video); gst_bin_iterate (GST_BIN (priv->pipe)); priv->old_video = video; return 0; }
VISUAL_C_LINKAGE VisPalette *lv_gforce_palette (VisPluginData *plugin) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); PixPalEntry *GFpal; int i; GFpal = priv->gGF->GetPalette (); for (i = 0; i < 256; i++) { priv->pal->colors[i].r = GFpal[i].red; priv->pal->colors[i].g = GFpal[i].green; priv->pal->colors[i].b = GFpal[i].blue; } return priv->pal; }
static int lv_goom_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { GoomPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); VisSongInfo *songinfo; short pcmdata[2][512]; float fpcmdata[2][512]; uint32_t *buf; uint8_t *vidbuf = visual_video_get_pixels (video); int showinfo = TRUE; int i; visual_buffer_set_data_pair (priv->pcmbuf1, fpcmdata[0], sizeof (float) * 512); visual_audio_get_sample (audio, priv->pcmbuf1, VISUAL_AUDIO_CHANNEL_LEFT); visual_buffer_set_data_pair (priv->pcmbuf2, fpcmdata[1], sizeof (float) * 512); visual_audio_get_sample (audio, priv->pcmbuf2, VISUAL_AUDIO_CHANNEL_RIGHT); for (i = 0; i < 512; i++) { pcmdata[0][i] = fpcmdata[0][i] * 32767; pcmdata[1][i] = fpcmdata[1][i] * 32767; } /* Retrieve the songinfo */ songinfo = VISUAL_ACTOR_PLUGIN (visual_plugin_get_specific (plugin))->songinfo; /* FIXME goom should support setting a pointer, so we don't need that final visual_mem_copy */ if (songinfo != NULL && visual_songinfo_get_age (songinfo) <= 1 && showinfo == TRUE) { VisSongInfoType songinfo_type = visual_songinfo_get_type (songinfo); if (songinfo_type == VISUAL_SONGINFO_TYPE_SIMPLE) buf = goom_update (priv->goominfo, pcmdata, 0, 0, visual_songinfo_get_simple_name (songinfo), NULL); else if (songinfo_type == VISUAL_SONGINFO_TYPE_ADVANCED) buf = goom_update (priv->goominfo, pcmdata, 0, 0, visual_songinfo_get_song (songinfo), NULL); else buf = goom_update (priv->goominfo, pcmdata, 0, 0, NULL, NULL); } else buf = goom_update (priv->goominfo, pcmdata, 0, 0, NULL, NULL); visual_mem_copy_pitch (vidbuf, buf, video->pitch, video->width * video->bpp, video->width * video->bpp, video->height); return 0; }