[gst-embedded] Playback of raw audio on N900: Internal data flow error

Thomas Jarosch tomj at simonv.com
Fri Dec 17 00:32:19 PST 2010


Hi Tim,

On Friday, 17. December 2010 00:51:55 Tim-Philipp Müller wrote:
> On Fri, 2010-12-17 at 00:10 +0100, Thomas Jarosch wrote:
> > I tried all kind of ways to push the raw audio via an "appsrc" to
> > "playbin2". The result is always an "Internal data flow" error.
> 
> What's the debug message detail on that? (not-negotiated?)

Thanks for your reply.

I tried to enable debug output via the environment variable and it didn't 
work. So I suspected it's not enabled during compile time on the N900. I'll 
retry with the "--gst-debug-level" command line switch.

> > Please see the attached code and the function call log.
> > The magic happens in pcm_play_dma_init(), found_source() and
> > feed_data().
> > 
> > Any idea what could be wrong? The timestamps on the GstBuffer?
> 
> That depends on the exact error, but if it's not-negotiated it's likely
> got something to do with caps.

Ok. One more silly question about the caps. For audio channels,
there's a property called "width" and "depth". Here's an example
gst-inspect output of a alsasink:

      audio/x-raw-int
             endianness: { 1234, 4321 }
                 signed: { true, false }
                  width: 32
                  depth: 24
                   rate: [ 1, 2147483647 ]
               channels: [ 1, 2147483647 ]

Does it mean it supports 24-bit samples
stored as a 32bit integers?

> > Can I push arbitrary data size into the appsrc or must it be
> > in sample size chunks?
> 
> That depends on what you're pushing into appsrc. If it's raw PCM audio,
> it should be in chunks of bytes_per_sample * channels.

This might be the issue, I just push anything I get from rockbox in there.
I hoped the gstreamer framework would handle the reassembling for me.

> > The code is quite hacky at the moment as I want to get
> > it up and running and then beautify it. Sorry:)
> 
>   audio_caps = gst_caps_new_simple("audio/x-raw-int",
>       "width", G_TYPE_INT, (gint)16,
>       "depth", G_TYPE_INT, (gint)16,
>       "channels" ,G_TYPE_INT, (gint)2,
>  -->  "signed",G_TYPE_INT,1, <--
>       "rate", G_TYPE_INT, 44100,
>       "endianness", G_TYPE_INT, (gint)1234,
>       NULL);
> 
> The signed field should be of G_TYPE_BOOLEAN.

Thanks! The error must have happened when I added/tweaked
various settings to find the source of the error.

Cheers,
Thomas




More information about the Gstreamer-embedded mailing list