libx264 does not yet support the features that create the difference
between baseline and constrained baseline profile. Hence it currently
supports both though it can only technically encode constrained
baseline.
mad expects extra bytes at the end of a buffer (see discussion in
http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html),
and since we inject these without the base class' knowledge, we
need to hide the bodies better.
This fixes an assert at EOS when decoding an mp3 manually without
an intervening mpegaudioparse.
If http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html is
to be believed, the last buffer must be followed by a number of 0 bytes
in order for the last frame to be decoded (at least in some cases).
Doing so seems to work here, fixing a missing 1152 samples when using
mp3parse before mad (not using mp3parse would yield the correct amount
of samples, if there's extra non-MP3 data after (eg, tag data)).
and use fixed caps on the srcpad. To correctly support
upstream renegotiation a52dec would need to check if the
caps of the downstream allocated buffer are the requested
caps or if the size is different.
Fixes bug #665989.
This time using the base class. Still something
wrong with the parsing though, when there's no
parser or demuxer upstream (which of course
shouldn't happen in a normal playback scenario).
Taken from commit 6e7e3657396454fe95fbd89170281865d4d1cec3
of Mark's baseaudio branch.
Would probably be too risky to drop this into 0.10 given
all the things mad is doing.
The mad mp3 decoder element shouldn't parse tags at all really, but we
have so far kept this code around for backwards-compatibility reasons
for people building manual pipelines for some reason. However, as it
turns out that code has never actually worked in 0.10 in practice,
since it only gets executed if mad_frame_decode() returns LOSTSYNC,
which doesn't actually seem to happen any more though because of the
preceding mad_header_decode(), which will discover and report the
sync loss if it runs into a tag and make mad_frame_decode() try to
resync right away.
Discovered this while trying to make it use gst_tag_list_from_id3v2_tag().
Parsing can return with an 'invalid' state, but this is not
actually fatal. For one, the mpeg2dec command line tool that
comes with the libmpeg2 library blithely ignores this condition
and merrily goes on. So we do this same, logging the error,
and going on with parsing. This makes something work that did
not use to work, and brings happiness to the world.
https://bugzilla.gnome.org/show_bug.cgi?id=429476
Read the stream-format from "stream-format" and not from profile, also rename
the "bytestream" variable to "stream_format" so it's easier to understand.
Makes x264 select its stream-format based on what's available
on caps, the user selected option will be chosen as a fallback
when both options are available.
https://bugzilla.gnome.org/show_bug.cgi?id=644233
Although the element accepts subme values > 6, the annotation which is
visible through gst-inspect (for example) erroneously indicates 6 as the
maximum. Fix this by indicating 10 (which is the x264 max) as the maximum.
https://bugzilla.gnome.org/show_bug.cgi?id=653473
ID3 tags are usually handled by id3demux, and should be handled
by id3demux. Tag handling in mad based on libid3tag is very basic
and mostly unnecessary really, so just build this plugin without
ID3 tag support if libid3tag is not available.
The element downstream of mp3enc might only accept certain sample rates or channels,
make sure we relay any restrictions that do exist to upstream when it does a
get_caps() on the sink pad. That way upstream elements like audioresample or
audioconvert can pick a sample rate / channel configuration that will be accepted,
instead of just negotiating to the highest, which might then be rejected.
https://bugzilla.gnome.org/show_bug.cgi?id=641151
When variable framerate is disabled in libx264 (which occurs when using
the zerolatency tuning), libx264 ignores timestamps but still uses the
timebase leading to messed up rate control with our nanosecond timebase.
We work around this issue by setting the timebase to the reciprocal of
the framerate and we validate that the framerate is suitable.
This has been fixed upstream in libx264 but there are non-fixed versions
in the wild so this workaround is still needed.
Fixes bug #632861
Position queries are badly handled for DVDs (probably due to the division in
chapters): the time returned was the time since the start of chapter.
Now ask upstream for position queries, fall back to the old code if upstream
cannot answer the query.
In X264_BUILD >= 78, b-pyramid became a non-boolean so passing a boolean
argument to the option string value causes an error. For < 78 we pass the
boolean value, for >= 78 we use the x264_b_pyramid_names[] array which will
result in passing 'none' for false and 'strict' for true. Other modes can be
set through the option-string property for now.
https://bugzilla.gnome.org/show_bug.cgi?id=626577
x264_encoder_encode() should be called with a NULL picture until at least
x264_encoder_delayed_frames() returns 0. This fixes what appeared to be a
regression in make check due to the recent change in defaults which enabled
b-frames and b-pyramid, both of which I believe increase the number of delayed
frames when encoding.
Use of a rate control method (pass, bitrate, quantizer, etc properties), a
preset and possibly a profile and/or tuning are now the recommended way to
configure x264 through x264enc.
If a preset/tuning are specified then these will define the default values and
the property defaults will be ignored. After this the option-string property is
applied, followed by the user-set properties, fast first pass restrictions and
finally the profile restrictions.
Addresses part of bug #607798
- Make defaults append the appropriate default value to a string. This is
needed to differentiate between something user-set and the actual prop
default.
- Add an internal option string to which _set_property () cases append for the
majority of properties.
- Use gst_x264_enc_parse_options () to clean up application of settings. This
will make order of application with respect to the presets and tunings quite
simple.
Addresses part of bug #607798
Uses new x264 API to apply reduced complexity values to the parameters to
increase encoding speed in the first pass of a multi-pass encode. This does
not impact on final quality.
Addresses part of bug #607798
In X264_BUILD >= 86 there is a new API for applying restrictions to an H.264
Profile. This makes it easier to achieve Baseline Profile for example.
Addresses part of bug #607798
If it is enabled, then it will be main profile instead of baseline.
This ensures maximum compatibility of the output stream until the
encoder configuration interface gets an overhaul with explicit
output profile selection.
Fixes#619776.
Fix off-by-one bug when constructing the avcC header chunk: we
wrote wrong profile info into the header. The first byte in the
SPS NAL we get from x264 is the nal type, not the profile_idc.
Also add some debug logging.
Fixes#610089.
lame's 'lgv' variable is only initialized when the caps
is negotiated, whenever a seek happens before that, it would
attempt to call a function on an empty pointer, causing the crash.
Fixes#603515
liba52 in a52dec-0.7.4 does not have any MMX, MMXEXT or 3DNOW based
IMDCT transform acceleration. It does however have a software based
acceleration using the djbfft library (D.J. Bernstein's library for
fourier transforms - Extremely fast library for floating-point
convolution). So allow liba52 to use it through the MM_ACCEL_DJBFFT
flag.
The liba52 copy in MPlayer sources does have SSE, 3dnowext, 3dnow
and AltiVec implementations, but those are checked for first, and
djbfft is chosen only if none of those is available - good in the
case of some distributions including a port of the MPlayer changes
in their system a52dec library.
The down and upmix code in liba52 doesn't seem to be disturbed by
this additional MM_ACCEL flag and will still use MMX, SSE or 3DNOW
versions if passed from oil_cpu_get_flags (SSE currently is not).
Fixes bug #592787.
Remove dvdnav plugin, it has no future. resindvd is the plugin to
use for dvd playback. Note that dvdnav was never really enabled
in -ugly, you had to edit configure.ac to get it built.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
(gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
Use hyphen in property name, perform safety buffer size check
prior to mem access, and some more parentheses in macro.
Original commit message from CVS:
* ext/apexsink/Makefile.am:
Link against -lgcrpyto for RSA_new and RSA_free.
* ext/faac/gstfaac.c:
* ext/x264/gstx264enc.c:
Fix compiler warnings.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
Construct source caps in more conventional (and correct) manner.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_reset),
(gst_x264_enc_chain), (gst_x264_enc_encode_frame):
* ext/x264/gstx264enc.h:
Do not deal with duplicated input (timestamps). If needed,
a generic element can do so.
Do not manipulate input timestamps on the way out,
since that shifts the timeline and A/V sync.
Original commit message from CVS:
* docs/plugins/gst-plugins-bad-plugins.args:
Integrate new properties into documentation.
* ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
(gst_x264_enc_init), (gst_x264_enc_init_encoder),
(gst_x264_enc_set_property), (gst_x264_enc_get_property):
Fix up API prior to eventual plugin move.
API: GstX264Enc:pass (provides more options, and changed to enum)
Original commit message from CVS:
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
* ext/x264/gstx264enc.c:
* tests/check/Makefile.am:
* tests/check/elements/x264enc.c: (setup_x264enc),
(cleanup_x264enc), (GST_START_TEST), (x264enc_suite), (main):
Add documentation and unit test for x264enc.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_init),
(gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
Allocate some buffers in more adaptive and economical fashion.
Original commit message from CVS:
* configure.ac:
Check for sufficiently up-to-date x264 API.
* ext/x264/gstx264enc.c: (gst_x264_enc_pass_get_type),
(gst_x264_enc_base_init), (gst_x264_enc_class_init),
(gst_x264_enc_init), (gst_x264_enc_init_encoder),
(gst_x264_enc_set_property), (gst_x264_enc_get_property):
* ext/x264/gstx264enc.h:
Expose some more parameters of the x264 encoder as properties.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_log_callback),
(gst_x264_enc_finalize), (gst_x264_enc_header_buf),
(gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
(gst_x264_enc_flush_frames):
Coding style and layout; re-order some functions in more
typical and natural flow.
Original commit message from CVS:
* ext/x264/Makefile.am:
* ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
(gst_x264_enc_sink_set_caps), (gst_x264_enc_base_init),
(gst_x264_enc_class_init), (gst_x264_enc_log_callback),
(gst_x264_enc_init), (gst_x264_enc_init_encoder),
(gst_x264_enc_finalize), (gst_x264_enc_chain),
(gst_x264_enc_encode_frame), (plugin_init):
* ext/x264/gstx264enc.h:
Use video format library and GST_WRITE_*_BE macros where applicable.
Use finalize in stead of dispose.
Set up debug category and log callback.
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
(gst_x264_enc_sink_event), (gst_x264_enc_chain),
(gst_x264_enc_encode_frame):
Try harder not to crash when we get an EOS event but haven't set
up the encoder yet (as may happen when upstream errors out with
not-negotiated, for example). Also, always push the EOS event
downstream.
Original commit message from CVS:
* ext/x264/gstx264enc.c (gst_x264_enc_init_encoder):
This needs a version check.
* gst/bayer/Makefile.am:
Fix the build.
Perform some cleanups based on the dtsdec code such as using the boilerplate
macro and static pad template functions.
Add some documentation. Don't register a change in flags until we synch on
another frame successfully.
The repeat first field flag was introduced in 0.5.0 so conditionally disable its
detection and just assume no rff is used. This fixes the compilation.
Fixes#582375
lame_set_VBR_quality(), which takes a floating point value for the
quality, has been added only in v3.98. Use lame_set_VBR_q(), which
takes quality as an integer, for older LAME versions.
Fixes#581341.
Original commit message from CVS:
* ext/resindvd/plugin.c: (plugin_init):
* ext/resindvd/resindvdsrc.c:
* ext/twolame/gsttwolame.c: (plugin_init):
* gst/aiffparse/aiffparse.c: (plugin_init):
Enable/fix up translations for these plugins.
* po/LINGUAS:
Add 'ca' to LINGUAS.
* po/POTFILES.in:
* po/POTFILES.skip:
Add more files for translation and more files which tools
should skip.
Original commit message from CVS:
* ext/twolame/gsttwolame.c: (gst_two_lame_sink_setcaps),
(gst_two_lame_chain):
* ext/twolame/gsttwolame.h:
Allow raw float samples as input for encoding.
Original commit message from CVS:
* ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
Last change introduced a regression that made mpeg2dec handle
some 4:2:2 videos as 4:4:4. Fixes bug #562086.
Original commit message from CVS:
Patch by: Simon Holm Thøgersen <odie at cs dot aau dot dk>
* ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec
>= 0.5.0. Fixes bug #562065.
Original commit message from CVS:
* ext/sidplay/Makefile.am:
Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could
contain CFLAGS that do not exist for C++, like -Wvla or
-Wdeclaration-after-statement. Fixes bug #561161.
Original commit message from CVS:
* ext/amrnb/amrnbdec.c: (gst_amrnb_variant_get_type),
(gst_amrnbdec_class_init), (gst_amrnbdec_set_property),
(gst_amrnbdec_get_property), (gst_amrnbdec_chain):
* ext/amrnb/amrnbdec.h:
Add a property to select the amr variant. Fixes#424070.
Original commit message from CVS:
Patch by: Robin Stocker <robin at nibor dot org>
* ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
(handle_sequence), (gst_mpeg2dec_setcaps):
* ext/mpeg2dec/gstmpeg2dec.h:
Prefer the container's PAR over the stream's PAR if it's
given in the srcpad caps. Fixes bug #556184.
Original commit message from CVS:
* ext/mad/gstmad.c: (gst_mad_src_event), (gst_mad_chain),
(gst_mad_change_state):
* ext/mad/gstmad.h:
track discont on incomming buffers and set discont on outgoing
buffers.
Pass unknown events upstreams instead of dropping them.
Original commit message from CVS:
* ext/a52dec/gsta52dec.c:
* ext/a52dec/gsta52dec.h:
Fix channel re-negotiation on a change of the incoming stream.
Patch By: Thijs Vermeir <thijsvermeir@gmail.com>
Fixes: #551660
Original commit message from CVS:
* ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain),
(gst_amrnbenc_state_change):
* ext/amrnb/amrnbenc.h:
Pass the discont flag from the input buffer on to the output buffer in
the AMR encoder.
Original commit message from CVS:
Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
(gst_amrnbparse_chain), (gst_amrnbparse_loop),
(gst_amrnbparse_state_change):
* ext/amrnb/amrnbparse.h:
Fix the duration query. Fixes#536226.
Also set caps on the pads and buffers more correctly.
Original commit message from CVS:
* ext/a52dec/gsta52dec.c:
Set up a default time segment for output when receiving
an incoming byte segment (as for raw AC3 files).
Fixes: #548194
Original commit message from CVS:
Patch by: Frederic Crozat <fcrozat@mandriva.org>
* ext/dvdread/dvdreadsrc.c: (plugin_init):
* ext/lame/gstlame.c: (plugin_init):
* gst/asfdemux/gstasf.c: (plugin_init):
Make sure gettext returns translations in UTF-8 encoding rather
than in the current locale encoding (#546822).
Original commit message from CVS:
* ext/lame/gstlame.c: (gst_lame_class_init),
(gst_lame_get_default_settings):
Use the default for the strict-iso property too.
Allow a bitrate setting of 0, which lets lame choose the default value
and which makes it possible to set the compression-ratio property.
Original commit message from CVS:
* ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
(gst_lame_chain), (gst_lame_get_default_settings), (plugin_init):
* ext/lame/gstlame.h:
Get the defaults settings of LAME in the plugin initialization
function and return FALSE here if something goes wrong. This removes
the hacky failing instance init function.
Use LAMEs default value for all settings instead of overwriting some
of them. Overwriting some of them gives unexpected results if one only
sets a preset. Fixes bug #498004.
Original commit message from CVS:
* ext/lame/gstlame.c: (gst_lame_init):
Use LAME's default for the min/max/mean VBR bitrate. Setting our own
defaults will restrict the bitrate when using the presets in a bad way.
Fixes bug #498004.
Original commit message from CVS:
* ext/lame/gstlame.c: (gst_lame_sink_setcaps):
* gst/mpegaudioparse/gstmpegaudioparse.c:
(mp3_type_frame_length_from_header), (mp3_caps_create),
(gst_mp3parse_chain):
Put the MPEG audio version into the caps as "mpegaudioversion".
This is different from "mpegversion".
Original commit message from CVS:
* ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
(gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
* ext/lame/gstlame.h:
Fix build with lame >= 3.97. The padding type and cwlimit settings
are deprecated now and the function declarations are hidden in the
headers so deprecate the GObject properties for them and remove them
in 0.11. Fixes bug #544039.
Original commit message from CVS:
* ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
Don't allow width/height outside the spec (i.e. smaller than 16
and higher than 4096). Such files are corrupted ones and setting
caps that are not a subset of the template caps confuses playbin.
Fixes bug #542646.
Original commit message from CVS:
* ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
(gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event):
Allow and implement non-flushing and/or segment seek
(mainly in TIME and chapter format).
* gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
(gst_dvd_demux_get_subpicture_stream),
(gst_dvd_demux_synchronise_pads),
(gst_dvd_demux_sync_stream_to_time):
* gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event),
(gst_mpeg_demux_send_subbuffer),
(gst_mpeg_demux_sync_stream_to_time),
(gst_mpeg_streams_reset_cur_ts):
* gst/mpegstream/gstmpegdemux.h:
* gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
(gst_mpeg_parse_pad_added), (gst_mpeg_parse_handle_src_query):
Delegate a query to upstream if it can't be handled.
Make segment stop aware.
Fix (subtitle) stream synchronization.
Add some debug statements.
Original commit message from CVS:
* docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
* docs/plugins/gst-plugins-ugly-plugins-sections.txt:
* ext/a52dec/gsta52dec.c:
* ext/amrnb/amrnbdec.c:
* ext/amrnb/amrnbenc.c:
* ext/amrnb/amrnbparse.c:
* ext/lame/gstlame.c:
* ext/mad/gstmad.c:
* ext/sidplay/gstsiddec.cc:
* gst/asfdemux/gstrtspwms.c:
* gst/mpegaudioparse/gstxingmux.c:
* gst/realmedia/rademux.c:
* gst/realmedia/rdtmanager.c:
* gst/realmedia/rtspreal.c:
* gst/synaesthesia/gstsynaesthesia.c:
Add missing elements to docs. Restore alphabetical order in section
file. Document mad (it was included in docs already).
Fix doc-markup: use convinience syntax for examples
(produces valid docbook), add several refsec2 when we have several
titles. Fix some types.
Original commit message from CVS:
* ext/lame/gstlame.c:
* ext/sidplay/gstsiddec.cc:
* gst/mpegaudioparse/gstxingmux.c:
Do not use short_description in section docs for elements. We extract
them from element details and there will be warnings if they differ.
Original commit message from CVS:
Patch by: Benjamin Kampmann <benjamin at fluendo dot com>
* ext/cdio/gstcdio.c: (gst_cdio_get_cdtext),
(gst_cdio_add_cdtext_album_tags):
* ext/cdio/gstcdio.h:
* ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
Also extract album title and album genre from CD-TEXT if
available (#537021).
Original commit message from CVS:
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
* docs/plugins/gst-plugins-ugly-plugins-sections.txt:
* docs/plugins/gst-plugins-ugly-plugins.args:
* docs/plugins/gst-plugins-ugly-plugins.hierarchy:
* docs/plugins/gst-plugins-ugly-plugins.interfaces:
* docs/plugins/inspect/plugin-a52dec.xml:
* docs/plugins/inspect/plugin-amrnb.xml:
* docs/plugins/inspect/plugin-asf.xml:
* docs/plugins/inspect/plugin-dvdlpcmdec.xml:
* docs/plugins/inspect/plugin-dvdread.xml:
* docs/plugins/inspect/plugin-dvdsub.xml:
* docs/plugins/inspect/plugin-iec958.xml:
* docs/plugins/inspect/plugin-lame.xml:
* docs/plugins/inspect/plugin-mad.xml:
* docs/plugins/inspect/plugin-mpeg2dec.xml:
* docs/plugins/inspect/plugin-mpegaudioparse.xml:
* docs/plugins/inspect/plugin-mpegstream.xml:
* docs/plugins/inspect/plugin-realmedia.xml:
* docs/plugins/inspect/plugin-siddec.xml:
* docs/plugins/inspect/plugin-synaesthesia.xml:
* ext/a52dec/gsta52dec.c:
Random doc of the day. Also print human readable format of newsegment
in log message if we complain about it.
Original commit message from CVS:
* ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_push),
(gst_a52dec_sink_event), (gst_a52dec_handle_frame),
(gst_a52dec_chain), (gst_a52dec_change_state):
* ext/a52dec/gsta52dec.h:
Mark discont on outgoing buffers after receiving a DISCONT buffer or
when we have a decoding error.
We don't need to clear the cache when we receive a NEWSEGMENT event.
Clear buffer cache in DISCONT.
Add beginnings of GstSegment handling.
Original commit message from CVS:
* ext/sidplay/gstsiddec.cc:
Cast NULL sentinels to void * as NULL is defined as an integer
constant in most environments when using C++ and it's size might
be different from a pointer. Fixes#529488.
Original commit message from CVS:
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_loop):
We should also stop the streaming task when we get a NOT_LINKED
flow return, which is not covered by FLOW_IS_FATAL.