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;
}
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;
}
Exemple #3
0
static unsigned char *get_pcm_data(VisAudio *audio)
{
    VisBuffer buf;
    float pcmbuf[MAXSIZE];
    static unsigned char retbuf[MAXSIZE];
    static int first_call = TRUE;
    static int then = 0;
    int now = _gettime(0);
    int i;

    /* Cache results every 25ms apart, skipping first call */
    if(first_call == FALSE && now - then > 25) {
        then = now;
        return retbuf;
    }

    first_call = FALSE;

    visual_buffer_set_data_pair(&buf, pcmbuf, MAXSIZE);

    visual_audio_get_sample_mixed(audio, &buf, TRUE, 2,
        VISUAL_AUDIO_CHANNEL_LEFT,
        VISUAL_AUDIO_CHANNEL_RIGHT,
        1.0,
        1.0);
    
    for(i = MAXSIZE; i; i--)
    {
        retbuf[i-1] = pcmbuf[i-1] * UCHAR_MAX;
    }
    
    return retbuf;
}
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;
}
/* This is where the real rendering happens! This function is what we call, many times
 * a second to get our graphical frames. */
extern "C" int lv_projectm_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio)
{
	ProjectmPrivate *priv = (ProjectmPrivate*)visual_object_get_private (VISUAL_OBJECT (plugin));
	VisBuffer pcmb;
	float pcm[2][512];
	int i;

	if (video->parent != NULL) lv_projectm_dimension (plugin, video->parent, video->parent->width, video->parent->height);
	  else lv_projectm_dimension (plugin, video, video->width, video->height);

	visual_buffer_set_data_pair (&pcmb, pcm[0], sizeof (pcm[0]));
	visual_audio_get_sample (audio, &pcmb, (char*)VISUAL_AUDIO_CHANNEL_LEFT);

	visual_buffer_set_data_pair (&pcmb, pcm[1], sizeof (pcm[1]));
	visual_audio_get_sample (audio, &pcmb, (char*)VISUAL_AUDIO_CHANNEL_RIGHT);

	priv->PM->pcm()->addPCMfloat(*pcm,512);

	priv->PM->renderFrame();

	return 0;
}
Exemple #6
0
int visual_video_free_buffer (VisVideo *video)
{
	visual_return_val_if_fail (video != NULL, -VISUAL_ERROR_VIDEO_NULL);
	visual_return_val_if_fail (visual_video_get_pixels (video) != NULL, -VISUAL_ERROR_VIDEO_PIXELS_NULL);

	if (video->pixel_rows != NULL)
		visual_mem_free (video->pixel_rows);

	if (visual_buffer_get_allocated (video->buffer)) {

		visual_buffer_destroy_content (video->buffer);

	} else {
		return -VISUAL_ERROR_VIDEO_NO_ALLOCATED;
	}

	video->pixel_rows = NULL;
	visual_buffer_set_data_pair (video->buffer, NULL, 0);

	return VISUAL_OK;
}
Exemple #7
0
int lvavs_pipeline_run (LVAVSPipeline *pipeline, VisVideo *video, VisAudio *audio)
{
    int i;
    VisBuffer pcmbuf1;
    VisBuffer pcmbuf2;
    VisBuffer spmbuf1;
    VisBuffer spmbuf2;
    VisBuffer tmp;

    int size = BEAT_MAX_SIZE/2;

    float data[2][2][size];

    visual_buffer_init_allocate(&tmp, sizeof(float) * size, visual_buffer_destroyer_free);

    /* Left audio */
    visual_buffer_set_data_pair(&pcmbuf1, data[0][0], sizeof(float) * size);

    if(visual_audio_get_sample(audio, &tmp, VISUAL_AUDIO_CHANNEL_LEFT) == VISUAL_OK)

        visual_audio_sample_buffer_mix(&pcmbuf1, &tmp, TRUE, 1.0);

    visual_buffer_set_data_pair(&spmbuf1, &data[1][0], sizeof(float) * size);

    visual_audio_get_spectrum_for_sample (&spmbuf1, &tmp, TRUE);

    /* Right audio */
    visual_buffer_set_data_pair(&pcmbuf2, data[0][1], sizeof(float) * size);

    if(visual_audio_get_sample(audio, &tmp, VISUAL_AUDIO_CHANNEL_LEFT) == VISUAL_OK)

        visual_audio_sample_buffer_mix(&pcmbuf2, &tmp, TRUE, 1.0);

    visual_buffer_set_data_pair(&spmbuf2, data[1][1], sizeof(float) * size);

    visual_audio_get_spectrum_for_sample(&spmbuf2, &tmp, TRUE);

    visual_object_unref(VISUAL_OBJECT(&tmp));

#ifdef _OPENMP
#pragma omp parallel for private(i)
#endif

    for(i = size - 1; i >= 0; i--) {
    pipeline->audiodata[0][0][i] = (data[0][0][i] + 1) / 2;
    pipeline->audiodata[1][0][i] = (data[1][0][i] + 1) / 2;
    pipeline->audiodata[0][1][i] = (data[0][1][i] + 1) / 2;
    pipeline->audiodata[1][1][i] = (data[1][1][i] + 1) / 2;
    }

    float beatdata[BEAT_MAX_SIZE];
    unsigned char visdata[BEAT_MAX_SIZE];

    memcpy(beatdata, data[1][0], size * sizeof(float));
    memcpy(beatdata + size, data[1][1], size * sizeof(float));

#ifdef _OPENMP
#pragma omp parallel for private(i)
#endif

    for(i = BEAT_MAX_SIZE - 1; i >= 0; i--) {
        visdata[i] = (beatdata[i] + 1) / 2.0 * UCHAR_MAX;
    }

    pipeline->isBeat = visual_audio_is_beat_with_data(audio, VISUAL_BEAT_ALGORITHM_PEAK, visdata, BEAT_MAX_SIZE);

    pipeline_container_run (LVAVS_PIPELINE_CONTAINER (pipeline->container), video, audio);

    return VISUAL_OK;
}
static int lv_flower_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio)
{
	FlowerPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin));
	VisBuffer *pcmbuf;
	VisBuffer *freqbuf;
	float pcm[512];
	float freqnorm[256];
	float temp_bars[NOTCH_BANDS];
	float f;
	int b;
	int i;

	pcmbuf = visual_buffer_new ();
	freqbuf = visual_buffer_new ();

	visual_buffer_set_data_pair (pcmbuf, pcm, sizeof (pcm));
	visual_buffer_set_data_pair (freqbuf, freqnorm, sizeof (freqnorm));

	visual_audio_get_sample_mixed_simple (audio, pcmbuf, 2,
			VISUAL_AUDIO_CHANNEL_LEFT,
			VISUAL_AUDIO_CHANNEL_RIGHT);

	visual_audio_get_spectrum_for_sample (freqbuf, pcmbuf, TRUE);

	/* Activate the effect change timer */
	if (!visual_timer_is_active (priv->t))
		visual_timer_start (priv->t);

	/* At 15 secs, do with new settings, reset timer */
	if (visual_timer_is_past2 (priv->t, 15, 0)) {
		priv->flower.tension_new = (-visual_random_context_float (priv->rcxt)) * 12.0;
		priv->flower.continuity_new = (visual_random_context_float (priv->rcxt) - 0.5) * 32.0;

		visual_timer_start (priv->t);
	}

	/* Activate global timer */
	if (!visual_timer_is_active (priv->flower.timer))
		visual_timer_start (priv->flower.timer);

	for (b=0; b<priv->nof_bands; b++)
		temp_bars[b]=0.0;

	for (i=0; i<256; i++) {
		for (b=0; b<priv->nof_bands; b++) {
			f=process_notch (priv->notch[b], freqnorm[i] * 15);
			if (fabs(f)>temp_bars[b])
				temp_bars[b]=fabs(f);
		}
	}


	/* Not part of the if !!! */
	{
#define HEIGHT 1.0
#define D 0.45
#define TAU 0.25
#define DIF 5.0
		float lk=2.0;
		float l0=2.0;

		float scale = HEIGHT / ( log((1 - D) / D) * 2 );
		float x00 = D*D*1.0/(2 * D - 1);
		float y00 = -log(-x00) * scale;
		float y;
		int i;
		for (i=0; i<priv->nof_bands; i++) {
			y=temp_bars[i * 8];
			y=y*(i*lk+l0);

			y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */

			y = ( (DIF-2.0)*y +
					(i==0  ? 0 : temp_bars[i - 1]) +
					(i==31 ? 0 : temp_bars[i + 1])) / DIF;

			y=((1.0-TAU)*priv->flower.audio_bars[i]+TAU*y) * 1.00;
			priv->flower.audio_bars[i]=y;
		}
	}


	priv->flower.roty += (priv->flower.audio_bars[15]) * 0.6;
	priv->flower.rotx += (priv->flower.audio_bars[1]) * 0.7;
	priv->flower.posz = +1;

	render_flower_effect (&priv->flower);

	visual_buffer_free (pcmbuf);
	visual_buffer_free (freqbuf);

	return 0;
}