[gst-devel] Losing prerolled buffers

Iain * iaingnome at gmail.com
Mon May 22 15:49:02 CEST 2006


Hi, 2 questions for everyone :)

Firstly with my custom sink[1] (derived from GstBaseSink) I get the
following warning.

Message: Internal data flow problem.
Debug: gstbasesink.c(1878): gst_base_sink_chain_unlocked ():
/marlinloadpipeline0/load-sink-0:
Received buffer without a new-segment. Assuming timestamps start from 0.

what element should be responsible for creating/sending the
new-segment? The element the sink is linked to (my
channel-splitter[2]) is just passing any events it receives onwards.

	if (GST_IS_EVENT (buffer)) {
		for (p = splitter->srcpads; p; p = p->next) {
			gst_pad_event_default (GST_PAD (p->data),
					       GST_EVENT (buffer));
		}
		g_object_unref (splitter);
		return GST_FLOW_OK;
	}

Secondly:
With my pipeline[3] I seem to be losing the first buffers between the
splitter and the sink, but only sometimes. Sometimes all the buffers
make it across, sometimes none. Usually some of them do get across.
This is the output from a test-program[4]

This is a succesful run where all the buffers get across:
------------------
splitter total - 576 (0)
Message: Internal data flow problem.
Debug: gstbasesink.c(1878): gst_base_sink_chain_unlocked ():
/marlinloadpipeline0/load-sink-0:
Received buffer without a new-segment. Assuming timestamps start from 0.
sink total - 576 (0)
splitter total - 1152 (36000000)
sink total - 1152 (36000000)
splitter total - 1728 (72000000)
sink total - 1728 (72000000)

[snip]

splitter total - 287424 (17928000000)
sink total - 287424 (17928000000)
splitter total - 288000 (17964000000)
sink total - 288000 (17964000000)
---------------
As you see, that error at the start is there.

The first number is the number of total number of frames, in the
splitter case it is just before the gst_pad_push call, in the sink
case it is at the start of the render function. The second number is
the buffer timestamp. In this case the timestamps match up, one buffer
in the splitter gets pushed to the sink.

When it goes wrong however:
----------
splitter total - 576 (0)
splitter total - 1152 (36000000)
splitter total - 1728 (72000000)
splitter total - 2304 (108000000)

[snip]

splitter total - 21888 (1332000000) [**]
splitter total - 22464 (1368000000)
Message: Internal data flow problem.
Debug: gstbasesink.c(1878): gst_base_sink_chain_unlocked ():
/marlinloadpipeline0/load-sink-0:
Received buffer without a new-segment. Assuming timestamps start from 0.
sink total - 576 (1368000000)
splitter total - 23040 (1404000000)
sink total - 1152 (1404000000)

[snip]

splitter total - 287424 (17928000000)
sink total - 265536 (17928000000)
splitter total - 288000 (17964000000)
sink total - 266112 (17964000000) [***]
------------------------

The splitter gets a load of buffers that never seem to make it to the
sink. If you add the 21888 from the line [**] to 266112 [***] you get
the magic 288000

Where are these buffers going?
Is the second problem related to the first?
http://www.openedhand.com/~iain/missing-buffers-log.bz2 is a gst-debug
log from when it fails. (511KB)

Thanks for any pointers anyone can give, sorry it was long :)
iain

[1]MarlinChannelSink -
http://cvs.gnome.org/viewcvs/marlin/marlin/marlin-channel-sink.c?rev=1.5&view=markup
[2]MarlinChannelSplitter -
http://cvs.gnome.org/viewcvs/marlin/marlin/marlin-channel-splitter.c?rev=1.5&view=markup
[3] MarlinLoadPipeline -
http://cvs.gnome.org/viewcvs/marlin/marlin/marlin-load-pipeline.c?rev=1.35&view=markup




More information about the gstreamer-devel mailing list