Пример #1
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;
}
Пример #2
0
// FIXME: This function is entirely broken from the looks of it.
int visual_audio_get_sample_mixed_all (VisAudio *audio, VisBuffer *buffer, int divide)
{
	VisListEntry *le = NULL;
	VisAudioSamplePool *samplepool;
	VisAudioSamplePoolChannel *channel;
	VisBuffer temp;
	int first = TRUE;

	visual_return_val_if_fail (audio != NULL, -VISUAL_ERROR_AUDIO_NULL);
	visual_return_val_if_fail (buffer != NULL, -VISUAL_ERROR_AUDIO_SAMPLEPOOL_NULL);

	visual_buffer_init_allocate (&temp, visual_buffer_get_size (buffer), visual_buffer_destroyer_free);

	samplepool = visual_audio_samplepool_new (); // this function's broken. This line was added to get rid of a compile warning. Not sure what samplepool's supposed to be, because it appears the below code expects an already existing VisAudioSamplePool. Dunno.

	while ((channel = visual_list_next (samplepool->channels, &le)) != NULL) {
		if (visual_audio_get_sample (audio, &temp, channel->channelid) == VISUAL_OK) {
			if (first == TRUE) {
				visual_audio_sample_buffer_mix (buffer, &temp, FALSE, 1.0);

				first = FALSE;
			} else {
				visual_audio_sample_buffer_mix (buffer, &temp, divide, 1.0);
			}
		}
	}

	visual_object_unref (VISUAL_OBJECT (&temp));

	return VISUAL_OK;
}
Пример #3
0
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;
}
Пример #4
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;
}
Пример #5
0
int visual_audio_get_sample_mixed (VisAudio *audio, VisBuffer *buffer, int divide, int channels, ...)
{
	VisBuffer temp;
	char **chanids;
	double *chanmuls;
	va_list ap;
	int i;
	int first = TRUE;

	visual_return_val_if_fail (audio != NULL, -VISUAL_ERROR_AUDIO_NULL);
	visual_return_val_if_fail (buffer != NULL, -VISUAL_ERROR_BUFFER_NULL);

	visual_buffer_init_allocate (&temp, visual_buffer_get_size (buffer), visual_buffer_destroyer_free);

	chanids = visual_mem_malloc (channels * sizeof (char *));
	chanmuls = visual_mem_malloc (channels * sizeof (double));

	va_start (ap, channels);

	/* Retrieving mixing data from valist */
	for (i = 0; i < channels; i++)
		chanids[i] = va_arg (ap, char *);

	for (i = 0; i < channels; i++)
		chanmuls[i] = va_arg (ap, double);

	visual_buffer_fill (buffer, 0);

	/* The mixing loop */
	for (i = 0; i < channels; i++) {
		if (visual_audio_get_sample (audio, &temp, chanids[i]) == VISUAL_OK) {
			if (first == TRUE) {
				visual_audio_sample_buffer_mix (buffer, &temp, FALSE, chanmuls[i]);

				first = FALSE;
			} else {
				visual_audio_sample_buffer_mix (buffer, &temp, divide, chanmuls[i]);
			}
		}
	}

	va_end (ap);

	visual_object_unref (VISUAL_OBJECT (&temp));

	visual_mem_free (chanids);
	visual_mem_free (chanmuls);

	return VISUAL_OK;
}
Пример #6
0
int visual_audio_get_spectrum (VisAudio *audio, VisBuffer *buffer, int samplelen, const char *channelid, int normalised)
{
	VisBuffer sample;

	visual_return_val_if_fail (audio != NULL, -VISUAL_ERROR_AUDIO_NULL);
	visual_return_val_if_fail (buffer != NULL, -VISUAL_ERROR_BUFFER_NULL);
	visual_return_val_if_fail (channelid != NULL, -VISUAL_ERROR_BUFFER_NULL);

	visual_buffer_init_allocate (&sample, samplelen, visual_buffer_destroyer_free);

	if (visual_audio_get_sample (audio, &sample, channelid) == VISUAL_OK)
		visual_audio_get_spectrum_for_sample (buffer, &sample, normalised);
	else
		visual_buffer_fill (buffer, 0);

	visual_object_unref (VISUAL_OBJECT (&sample));

	return VISUAL_OK;
}
Пример #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;
}