problem with appsink buffer in gstreamer 1.0
Wim Taymans
wim.taymans at gmail.com
Thu Aug 29 00:45:39 PDT 2013
On 08/29/2013 08:25 AM, jyoti kulkarni wrote:
> Hello All,
>
> My pipeline is:
>
> gst-launch-1.0 -v appsrc ! qtdemux name=d d.audio_0 ! queue !
> avdec_aac ! appsink d.video_0 ! queue ! avdec_h264 ! appsink
>
> and when ever i get a new decoded audio/video buffer i put that in
> appsink. Then i use that same buffer to file write.
>
> I do it in following way:
>
> For Audio: (here data.audio_sink is nothing but appsink)
>
> g_object_set (data.audio_sink, "emit-signals", TRUE, NULL);
> g_signal_connect (data.audio_sink, "new-sample", G_CALLBACK
> (new_audio_buffer), &data);
>
> static void new_audio_buffer (GstElement *sink,CustomData *data) {
> GstBuffer *buffer;
> GstMapInfo map;
> GstSample *sample;
> //gsize size;
>
> g_signal_emit_by_name (data->audio_sink, "pull-sample", &sample,NULL);
> if (sample) {
>
> buffer = gst_sample_get_buffer (sample);
>
> gst_buffer_map (buffer, &map, GST_MAP_READ);
>
> g_print("\n here size=%d\n",map.size);
>
> fwrite(map.data,1,map.size,data->audio_file);
>
> gst_buffer_unmap (buffer,&map);
> gst_sample_unref(sample);
>
> }
>
> }
>
> AND similar kind of code for video appsink.
>
> But the problem is only single buffer data is written to the file
> there after gstreamer returns with a "General Stream Error"
>
>
> The same application worked with gstreamer-0.10, where i used
> new_buffer signal instead of new_sample and corresponding code for
> user defined function was:
>
> g_object_set (data.audio_sink, "emit-signals", TRUE, NULL);
> g_signal_connect (data.audio_sink, "new-buffer", G_CALLBACK
> (new_audio_buffer), &data);
>
> static void new_audio_buffer (GstElement *sink, CustomData *data) {
You callback is wrong, it should return a GstFlowReturn, see
gst-inspect-1.0 appsink for the
signature of the callback.
Wim
> GstBuffer *buffer;
>
> g_signal_emit_by_name (sink, "pull-buffer", &buffer);
> if (buffer) {
>
> gint size=GST_BUFFER_SIZE(buffer);
> g_print("\nsize=%d \n",size);
>
> fwrite(GST_BUFFER_DATA(buffer), 1,
> GST_BUFFER_SIZE(buffer),data->audio_file);
>
> gst_buffer_unref (buffer);
> }
> }
>
> Here all the buffers data written successfully to the file until the
> source file reaches end of file.
>
> Please help with above concern.
>
> Thanks & Regards
> Jyoti
>
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
More information about the gstreamer-devel
mailing list