Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad),
(gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream):
* gst/playback/gstplaybin.c: (setup_sinks):
Implement muting/unmuting of streams, mute streams that are not
used.
Original commit message from CVS:
* gst/playback/gstdecodebin.c: (gst_decode_bin_init),
(find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
(no_more_pads), (close_link), (type_found):
* gst/playback/gstplaybasebin.c: (new_decoded_pad):
* gst/playback/gstplaybin.c: (gen_video_element):
Do not signal the no_more_pads after the first pad when
we are plugging a non dynamic element with multiple
output pads (like swfdec, dvdec, ...).
Original commit message from CVS:
* gst/playback/gstdecodebin.c: (gst_decode_bin_init),
(find_compatibles), (close_pad_link), (try_to_link_1),
(no_more_pads), (close_link), (type_found):
* gst/playback/gstplaybasebin.c: (new_decoded_pad):
* gst/playback/gstplaybin.c: (gen_video_element),
(gen_audio_element):
Set state on newly added element to READY so that negotiation
can happen ASAP.
Addes some more debug info.
Do not try to plug pads with multiple caps structures or ANY
because it is too dangerous since we do not do dynamic
replugging.
Original commit message from CVS:
* ext/flac/gstflacdec.c: (gst_flacdec_src_query):
Only return true if we actually filled something in. Prevents
player applications from showing a random length for flac files.
* gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
(gst_riff_read_use_event), (gst_riff_read_handle_event),
(gst_riff_read_seek), (gst_riff_read_skip), (gst_riff_read_strh),
(gst_riff_read_strf_vids_with_data),
(gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_iavs):
OK, ok, so I implemented event handling. Apparently it's normal
that we receive random events at random points without asking
for it.
* gst/avi/gstavidemux.c: (gst_avi_demux_reset),
(gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
(gst_avi_demux_handle_src_event), (gst_avi_demux_stream_index),
(gst_avi_demux_sync), (gst_avi_demux_stream_scan),
(gst_avi_demux_massage_index), (gst_avi_demux_stream_header),
(gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry),
(gst_avi_demux_stream_data), (gst_avi_demux_loop):
* gst/avi/gstavidemux.h:
Implement non-lineair chunk handling and subchunk processing.
The first solves playback of AVI files where the audio and video
data of individual buffers that we read are not synchronized.
This should not happen according to the wonderful AVI specs, but
of course it does happen in reality. It is also a prerequisite for
the second. Subchunk processing allows us to cut chunks in small
pieces and process each of these pieces separately. This is
required because I've seen several AVI files with incredibly large
audio chunks, even some files with only one audio chunk for the
whole file. This allows for proper playback including seeking.
This patch is supposed to fix all AVI A/V sync issues.
* gst/flx/gstflxdec.c: (gst_flxdec_class_init),
(flx_decode_chunks), (flx_decode_color), (gst_flxdec_loop):
Work.
* gst/modplug/gstmodplug.cc:
Proper return value setting for the query() function.
* gst/playback/gstplaybasebin.c: (setup_source):
Being in non-playing state (after, e.g., EOS) is not necessarily
a bad thing. Allow for that. This fixes playback of short files.
They don't actually playback fully now, because the clock already
runs. This means that small files (<500kB) with a small length
(<2sec) will still not or barely play. Other files, such as mod
or flx, will work correctly, however.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (new_decoded_pad):
Only signal the no_more_pads signal when we have
added the stream to our list.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (remove_prerolls),
(new_decoded_pad):
* gst/playback/gstplaybasebin.h:
* gst/playback/gstplaybin.c: (setup_sinks):
Don't try to preroll or decode more than one audio/video
track.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
Throw error if we failed to find a suitable output. This should
throw an error if we successfully set up a pipeline (e.g. because
we recognized a media file) but found no decodable streams in it
(e.g. because it contains only media stream types for which we
have no decoders, or because it's not a media type).
Original commit message from CVS:
* gst/asfdemux/gstasfdemux.c: (_read_var_length), (_read_guid),
(gst_asf_demux_process_segment), (gst_asf_demux_handle_data),
(gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event):
Prevent infinite loops. More correct error reporting.
* gst/auparse/gstauparse.c: (gst_auparse_chain):
Error out if negotiation fails.
* gst/playback/gstplaybasebin.c: (setup_source),
(gst_play_base_bin_change_state), (gst_play_base_bin_error),
(gst_play_base_bin_found_tag):
Error/tag forwarding. Pre-roll fixes for source errors on state
changes (e.g. "file does not exist") to prevent hangs.
Original commit message from CVS:
* ext/mad/gstmad.c: (gst_mad_check_caps_reset),
(gst_mad_change_state):
Allow for mp3 rate/channels changes. However, only very
conservatively. Reason that we *have* to enable this is smiply
because the mad find_sync() function is not good enough, it will
regularly sync on random data as valid frames and therefore make
us provide random caps as *final* caps of the stream. The best fix
I could think of is to simply require several of the same stream
changes in a row before we change caps.
The actual testcase that works now is #
* ext/ogg/Makefile.am:
* ext/ogg/gstogg.c: (plugin_init):
* ext/ogg/gstogmparse.c:
OGM support (video only for now; I need an audio sample file).
* gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
(gst_asf_demux_process_stream), (gst_asf_demux_video_caps),
(gst_asf_demux_add_video_stream):
WMV extradata.
* gst/playback/gstplaybasebin.c: (unknown_type):
Don't error out on single unknown-types after all. It's wrong.
If we found type of video and audio but not of a subtitle stream,
it will still error out (which is unwanted). Will find a better fix
later on.
* gst/typefind/gsttypefindfunctions.c: (ogmvideo_type_find),
(ogmaudio_type_find), (plugin_init):
OGM support.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (state_change), (setup_source),
(gst_play_base_bin_change_state):
Handle the case where we failed to setup a clear pipeline. This
will throw an error (or EOS, another nice case) and if you don't
catch that, the app will wait for the signal forever (and thus
hang).
Original commit message from CVS:
* ext/gnomevfs/gstgnomevfssink.c:
(gst_gnomevfssink_uri_get_protocols):
* ext/gnomevfs/gstgnomevfssrc.c:
(gst_gnomevfssrc_uri_get_protocols):
* ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
* ext/gnomevfs/gstgnomevfsuri.h:
Use _uri_new() instead of _open(), so it doesn't take as long and
Christophe's computer won't hang.
* gst/playback/gstplaybasebin.c: (unknown_type):
Throw error on unknown media type, so apps actually display it.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (queue_overrun), (no_more_pads),
(setup_source), (gst_play_base_bin_set_property),
(gst_play_base_bin_add_element):
* gst/playback/gstplaybin.c: (gst_play_bin_send_event):
Some more work on making sure seeking pauses the pipeline and
that changing the uri actually does something.
Original commit message from CVS:
* gst/playback/gstplaybasebin.c:
(gst_play_base_bin_dispose), (gst_play_base_bin_set_property):
Handle double disposals, and proper change of URIs.