mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
ext/libvisual/visual.c: Libvisual plugin was not passing audio data to libvisual 0.4.0 correctly. Fixes #357800
Original commit message from CVS: Patch by: Jonathan Matthew <jonathan@kaolin.wh9.net> * ext/libvisual/visual.c: (gst_visual_clear_actors), (gst_visual_chain), (gst_visual_change_state): Libvisual plugin was not passing audio data to libvisual 0.4.0 correctly. Fixes #357800
This commit is contained in:
parent
fa970dfd46
commit
fbdc3406fa
2 changed files with 89 additions and 12 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2006-09-27 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
|
Patch by: Jonathan Matthew <jonathan@kaolin.wh9.net>
|
||||||
|
|
||||||
|
* ext/libvisual/visual.c: (gst_visual_clear_actors),
|
||||||
|
(gst_visual_chain), (gst_visual_change_state):
|
||||||
|
Libvisual plugin was not passing audio data to libvisual 0.4.0
|
||||||
|
correctly. Fixes #357800
|
||||||
|
|
||||||
2006-09-27 Tim-Philipp Müller <tim at centricular dot net>
|
2006-09-27 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* tests/check/pipelines/simple-launch-lines.c: (run_pipeline):
|
* tests/check/pipelines/simple-launch-lines.c: (run_pipeline):
|
||||||
|
|
|
@ -51,7 +51,7 @@ struct _GstVisual
|
||||||
GstSegment segment;
|
GstSegment segment;
|
||||||
|
|
||||||
/* libvisual stuff */
|
/* libvisual stuff */
|
||||||
VisAudio audio;
|
VisAudio *audio;
|
||||||
VisVideo *video;
|
VisVideo *video;
|
||||||
VisActor *actor;
|
VisActor *actor;
|
||||||
|
|
||||||
|
@ -109,8 +109,13 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
"width = (int) 16, "
|
"width = (int) 16, "
|
||||||
"depth = (int) 16, "
|
"depth = (int) 16, "
|
||||||
"endianness = (int) BYTE_ORDER, "
|
"endianness = (int) BYTE_ORDER, "
|
||||||
"signed = (boolean) TRUE, "
|
"signed = (boolean) TRUE, " "channels = (int) { 1, 2 }, "
|
||||||
"channels = (int) { 1, 2 }, " "rate = (int) [ 1000, MAX ]")
|
#if defined(VISUAL_API_VERSION) && VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
|
||||||
|
"rate = (int) { 8000, 11250, 22500, 32000, 44100, 48000, 96000 }"
|
||||||
|
#else
|
||||||
|
"rate = (int) [ 1000, MAX ]"
|
||||||
|
#endif
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -228,6 +233,10 @@ gst_visual_clear_actors (GstVisual * visual)
|
||||||
visual_object_unref (VISUAL_OBJECT (visual->video));
|
visual_object_unref (VISUAL_OBJECT (visual->video));
|
||||||
visual->video = NULL;
|
visual->video = NULL;
|
||||||
}
|
}
|
||||||
|
if (visual->audio) {
|
||||||
|
visual_object_unref (VISUAL_OBJECT (visual->audio));
|
||||||
|
visual->audio = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -611,17 +620,78 @@ gst_visual_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
data =
|
data =
|
||||||
(const guint16 *) gst_adapter_peek (visual->adapter, 512 * visual->bps);
|
(const guint16 *) gst_adapter_peek (visual->adapter, 512 * visual->bps);
|
||||||
|
|
||||||
|
#if defined(VISUAL_API_VERSION) && VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
|
||||||
|
{
|
||||||
|
VisBuffer *lbuf, *rbuf;
|
||||||
|
guint16 ldata[512], rdata[512];
|
||||||
|
VisAudioSampleRateType rate;
|
||||||
|
|
||||||
|
lbuf = visual_buffer_new_with_buffer (ldata, sizeof (ldata), NULL);
|
||||||
|
rbuf = visual_buffer_new_with_buffer (rdata, sizeof (rdata), NULL);
|
||||||
|
|
||||||
|
if (visual->channels == 2) {
|
||||||
|
for (i = 0; i < 512; i++) {
|
||||||
|
ldata[i] = *data++;
|
||||||
|
rdata[i] = *data++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < 512; i++) {
|
||||||
|
ldata[i] = *data;
|
||||||
|
rdata[i] = *data++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (visual->rate) {
|
||||||
|
case 8000:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_8000;
|
||||||
|
break;
|
||||||
|
case 11250:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_11250;
|
||||||
|
break;
|
||||||
|
case 22500:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_22500;
|
||||||
|
break;
|
||||||
|
case 32000:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_32000;
|
||||||
|
break;
|
||||||
|
case 44100:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_44100;
|
||||||
|
break;
|
||||||
|
case 48000:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_48000;
|
||||||
|
break;
|
||||||
|
case 96000:
|
||||||
|
rate = VISUAL_AUDIO_SAMPLE_RATE_96000;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
visual_audio_samplepool_input_channel (visual->audio->samplepool,
|
||||||
|
lbuf,
|
||||||
|
rate, VISUAL_AUDIO_SAMPLE_FORMAT_S16, VISUAL_AUDIO_CHANNEL_LEFT);
|
||||||
|
visual_audio_samplepool_input_channel (visual->audio->samplepool,
|
||||||
|
rbuf,
|
||||||
|
rate, VISUAL_AUDIO_SAMPLE_FORMAT_S16, VISUAL_AUDIO_CHANNEL_RIGHT);
|
||||||
|
|
||||||
|
visual_object_unref (VISUAL_OBJECT (lbuf));
|
||||||
|
visual_object_unref (VISUAL_OBJECT (rbuf));
|
||||||
|
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (visual->channels == 2) {
|
if (visual->channels == 2) {
|
||||||
for (i = 0; i < 512; i++) {
|
for (i = 0; i < 512; i++) {
|
||||||
visual->audio.plugpcm[0][i] = *data++;
|
visual->audio->plugpcm[0][i] = *data++;
|
||||||
visual->audio.plugpcm[1][i] = *data++;
|
visual->audio->plugpcm[1][i] = *data++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 512; i++) {
|
for (i = 0; i < 512; i++) {
|
||||||
visual->audio.plugpcm[0][i] = *data;
|
visual->audio->plugpcm[0][i] = *data;
|
||||||
visual->audio.plugpcm[1][i] = *data++;
|
visual->audio->plugpcm[1][i] = *data++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* alloc a buffer if we don't have one yet, this happens
|
/* alloc a buffer if we don't have one yet, this happens
|
||||||
* when we pushed a buffer in this while loop before */
|
* when we pushed a buffer in this while loop before */
|
||||||
|
@ -632,8 +702,8 @@ gst_visual_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
visual_video_set_buffer (visual->video, GST_BUFFER_DATA (outbuf));
|
visual_video_set_buffer (visual->video, GST_BUFFER_DATA (outbuf));
|
||||||
visual_audio_analyze (&visual->audio);
|
visual_audio_analyze (visual->audio);
|
||||||
visual_actor_run (visual->actor, &visual->audio);
|
visual_actor_run (visual->actor, visual->audio);
|
||||||
visual_video_set_buffer (visual->video, NULL);
|
visual_video_set_buffer (visual->video, NULL);
|
||||||
GST_DEBUG_OBJECT (visual, "rendered one frame");
|
GST_DEBUG_OBJECT (visual, "rendered one frame");
|
||||||
|
|
||||||
|
@ -682,9 +752,7 @@ gst_visual_change_state (GstElement * element, GstStateChange transition)
|
||||||
visual_actor_new (GST_VISUAL_GET_CLASS (visual)->plugin->info->
|
visual_actor_new (GST_VISUAL_GET_CLASS (visual)->plugin->info->
|
||||||
plugname);
|
plugname);
|
||||||
visual->video = visual_video_new ();
|
visual->video = visual_video_new ();
|
||||||
#if defined(VISUAL_API_VERSION) && VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
|
visual->audio = visual_audio_new ();
|
||||||
visual_audio_init (&visual->audio);
|
|
||||||
#endif
|
|
||||||
/* can't have a play without actors */
|
/* can't have a play without actors */
|
||||||
if (!visual->actor || !visual->video)
|
if (!visual->actor || !visual->video)
|
||||||
goto no_actors;
|
goto no_actors;
|
||||||
|
|
Loading…
Reference in a new issue