Use breaks for case branches instead of return 0. We don't expect these to
happen anyway. Thus have a warning before the final return to make it easier to
see when things go out of sync.
make_lossless_changes() returns the same structure that we're passing (probably
to enable chaining). Instead of reusing s and making it point to s2 as well,
keep using s2. Drop the assignment which in the 2nd case is a dead one anyway.
Autoplug formatters for streams if a formatter with secondary or
higher rank is found. Formatters are autoplugged when there is no
muxer or when the muxer doesn't implement the tagsetter interface.
Currently only the first formatter found is plugged, this might
help in lots of cases, but it doesn't solve the
'lamemp3 ! xingmux ! id3mux'
case.
https://bugzilla.gnome.org/show_bug.cgi?id=649841
When closing rtspsrc the state change blocks until the polling in the
connection timeouts. This is because the second time we loop to read a
full message controllable is set to FALSE in the poll group, even though no
message is half read.
This can be avoided by not setting controllable to FALSE the poll group
unless we had begin to read a message.
Fixes#610916
On OSX the cdparanoia headers include IOKit framework headers (in particular
SCSICmds_INQUIRY_Definitions.h) which define a structure that has a member
named VERSION, so we must #undef VERSION before including those for things
to compile on OSX.
Fixes#609918.
In particular, in audio only cases whose (estimated) metadata provides bitrate
information, the buffer-size based on such bitrate (and buffer-duration)
will be much more reasonable than queue2 default buffer-size.
Instead of writing only the xmp tag for the first found entry
that matches the gstreamer tag, look for all mappings to write
the tag to different schemas.
The rationale here is that some reader application might only
be interested on a particular schema tags, so we should try
to write as many tags for all schemas.
This can be used by sinks to take compressed formats, correctly payload
these in IEC 61937 frames and feed these to sinks that support
passthrough output over IEC 60958 (S/PDIF) or, in the case of MP3, over
Bluetooth.
Initial implementation includes AC3, E-AC3, MPEG-1, MPEG-2 (non-AAC),
and DTS (type-I/II/II) payloading. More formats can be added as needed.
API: gst_audio_iec61937_frame_size()
API: gst_audio_iec61937_payload()
https://bugzilla.gnome.org/show_bug.cgi?id=642730
This allows subclasses to provide a "payload" function to prepare
buffers for consumption. The immediate use for this is for sinks that
can handle compressed formats - parsers are directly connected to the
sink, and for formats such as AC3, DTS, and MPEG, IEC 61937 patyloading
might be used.
API: GstBaseAudioSinkClass:payload()
https://bugzilla.gnome.org/show_bug.cgi?id=642730
Adds support for pushing E-AC3 buffers and doing bytes-to-ms conversion
correctly. The assumption (as with other formats) is that something like
IEC 61937 payloading will be used. Correspondingly the ringbuffer spec
is populated so that the data rate is 4x normal AC3.
https://bugzilla.gnome.org/show_bug.cgi?id=642730
These are meant to be used for buffers containing AAC data. Nothing uses
this yet, but for now it serves to distinguish from GST_BUFTYPE_MPEG
which represents non-AAC MPEG audio.
API: GST_BUFTYPE_MPEG2_AAC
API: GST_BUFTYPE_MPEG4_AAC
For streams at low bitrates we need to set a limit in time because the limit
in bytes might not reached too late, sometimes more than 30 seconds.
This limit can only be set if upstream is seekable (see #584104)
Closes#647769
These reconfigure based on the caps and plugin in converters if
necessary. This also makes switching between compressed and raw
streams work flawlessly without loosing the states of any element
somewhere or having running time problems.