Make out args to gst_video_event_parse_{downstream|upstream}_force_key_unit
optional, update libgstvideo.def and fix docs a bit.
API: gst_video_event_new_upstream_force_key_unit
API: gst_video_event_new_downstream_force_key_unit
API: gst_video_event_is_force_key_unit
API: gst_video_event_parse_upstream_force_key_unit
API: gst_video_event_parse_downstream_force_key_unit
https://bugzilla.gnome.org/show_bug.cgi?id=607742
Originally decodebin couldn't deal with that in 0.10, but now simply
setting the caps when we know them should be enough. Pad activation
mode switching might need some more testing/tweaking with the new
arrangement.
gst_basertppayload -> gst_base_rtp_payload
Add pts/dts support in the depayloader
Remove old timestamp code
Add a default getcaps function so subclasses can chain up to it instead of
relying on the return value of the getcaps function.
Now we can configure how much time to wait before deciding that a
discont has happened.
Also, adds getter and setter to allow derived implementations to set
this value upon construction.
Suggestions and several improvements by Havard Graff.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
A common problem for audio-playback is that the timestamps might not
be completely linear. This is specially common when doing streaming over
a network, where you can have jittery and/or bursty packettransmission,
which again will often be reflected on the buffertimestamps.
Now, the current implementation have a threshold that says how far the
buffertimestamp is allowed o drift from the ideal aligned time in the
ringbuffer. This was an instant reaction, and ment that if one buffer
arrived with a timestamp that would breach the drift-tolerance, a resync
would take place, and the result would be an audible gap for the
listener.
The annoying thing would be that in the case of a "timestamp-outlier",
you would first resync one way, say +100ms, and then, if the next
timestamp was "back on track", you would end up resyncing the other way
(-100ms) So in fact, when you had only one buffer with slightly off
timestamping, you would end up with *two* audible gaps. This is the
problem this patch addresses.
The way to "fix" this problem with the previous implementation, would
have been to increase the "drift-tolerance" to a value that was greater
than the largest timestamp-outlier one would normally expect. The big
problem with this approach, however, is that it will allow normal
operations with a huge offset timestamp vs running-time, which is
detrimental to lip-sync. If the drift-tolerance is set to 200ms, it
basically means that lip-sync can easily end up being off by that much.
This patch will basically start a timer when the first breach of
drift-tolerance is detected. If any following timestamp for the next n
nanoseconds gets "back on track" within the threshold, it has basically
eliminated the effect of an outlier, and the timer is stopped. If,
however, all timestamps within this time-limit are breaching the
threshold, we are probably facing a more permanent offset in the
timestamps, and a resync is allowed to happen.
So basically this patch offers something as rare as both higher
accuracy, it terms of allowing smaller drift-tolerances, as well as much
smoother, less glitchy playback!
Commit message and improvments by Havard Graff.
Fixes bug #640859.
Otherwise we'll just error out when the first buffer gets pushed.
This is a porting artefact, in 0.10 the infos were allocated on the
heap, now we're doing everything with stack-allocated structs.
Not sure how this one got pulled into a merge. In 0.10, it was moved away to
gst-template a long time ago. gstaudiofilterexample.c got generated from
gstaudiofiltertemplate.c.
The array we're writing to is limited to 64 ... but the amount of
input positions might be lower than 64. Therefore use MIN and not
MAX to know how many values to read from the array.
Add a method to configure the output caps. Subclasses can't use
gst_pad_set_caps() anymore because then we won't see the caps.
Unbreak the padtemplate registration, the GTypeClass that is configured in the
object during _init is not the right one, we need to use the klass passed as the
argument to the init function..
This reverts commit 11e375486e.
GST_BOILERPLATE() can't define an abstract type and
G_DEFINE_ABSTRACT_TYPE() does not pass the class struct to
the instance_init function and there's no way to get the
class struct of the current type in instance_init().
There's no code whatsoever that uses these macros. If anyone
ever feels the need to resurrect them, we should add them to
gstutils.h in core or libgstaudio or so.
The /*< ... >*/ style is only used for public|protected|private,
signal comments use /* signals */. This prevents the some code
parsers/binding generators to be confused by the comment.
Merge in doc updates for audio enums from 0.10, and get rid
of the #if #else in the enum list, since that confuses gtk-doc.
Conflicts:
gst-libs/gst/audio/audio.c
gst-libs/gst/audio/audio.h
Remove the _ in front of the endianness prefix.
Remove the _3 postfix for the 24 bits formats.
Add a _32 postfix after the formats that occupy extra space beyond their
natural size.
The result is that the GST_AUDIO_NE() macro can simply append the endianness
after all formats and that we only specify a different sample width when it is
different from the natural size of the sample. This makes things more consistent
and follows the pulseaudio conventions instead of the alsa ones.
Leaving the GST_USE_UNSTABLE_API guards in until some of the
ported decoders have been updated and it's clear that I didn't
mess up anywhere porting things to the new audio API.
Adds little beyond baseaudiocodec (seeking, bit of query), and what it adds
is mainly out-of-scope (e.g. decoder seeking, should be done by upstream
demuxer/parser) and/or based on non-prime example (mad).
Moved most of the code to GstBaseAudioCodec, GstBaseAudioDecode is
now really small, maybe we do not really need it (or its encoder
counterpart). Added more API for subclasses and documentation.
Otherwise, discoverer will generated an "inner" codec
where there can be a tranformation (eg, kate -> DVD SPU,
and various ->text/x-pango-markup).
https://bugzilla.gnome.org/show_bug.cgi?id=639055
Without the perfect timestamp machinery, the RTP timestamp can be
computed directly from the running time of a buffer, but the perfect
timestamp patch broke that assumption. This patch restores it by
having the first perfect timestamp be the running time of that buffer
and counting from there.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=654434
Rename @view_id to @id.
Add an id to the video metadata. Add a method to get the metadata from a buffer
with the given id.
Make a method to map a frame with a certain id. This only maps the frame with
the given id on the video metadata. The generic frame id can be used when a
buffer carries multiple video frames such as in multiview mode but maybe also
when dealing with interlaced video that stores the fields in separate buffers.
Make enums for the chroma siting for easier use in the videoinfo.
Make enums for the color range, color matrix, transfer function and the
color primaries. Add these values to the video info structure in a Colorimetry
structure. These values define the exact colors and are needed to perform
correct colorspace conversion. Use a couple of predefined colorimetry specs
because in practice only a few combinations are in use.
Add view_id to the video frames to identify the view this frame represents in
multiview video.
Remove old gst_video_parse_caps_framerate, use the videoinfo for this.
Port elements to new colorimetry info.
Remove deprecated colorspace property from videotestsrc.
Rework the audio caps similar to the video caps. Remove
width/depth/endianness/signed fields and replace with a simple string
format and media type audio/x-raw.
Create a GstAudioInfo and some helper methods to parse caps.
Remove duplicate code from the ringbuffer and replace with audio info.
Use AudioInfo in the base audio filter class.
Port elements to new API.
Unlike linux, OSX wakes up select with POLLOUT (instead of POLLERR) when
connect() is done async and the connection is refused. Therefore always check
for the socket error state using getsockopt (..., SO_ERROR, ...) after a
connection attempt.
In ID3 v2.3 compressed frames will have a 4-byte data length indicator
after the frame header to indicate the size of the decompressed data.
This integer is unlikely to be a sync-safe integer for v2.3 tags,
only in v2.4 it's sync-safe.
Reversing the unsynchronisation seems to work slightly differently
for ID3 v2.3 tags and v2.4 tags: v2.3 tags don't have syncsafe frame
sizes in the frame header, so the unsynchronisation is applied to
the whole frame data including all the frame headers. v2.4 frames
have sync-safe sizes, however, so the unsynchronisation only needs
to be applied to the actual frame data, and it seems that's what's
being done as well. So we need to undo the unsynchronisation on a
per-frame basis for v2.4 tags for things to work properly.
Fixes extraction of coverart/images from APIC frames in ID3 v2.4
tags (#588148).
Add unit test for this as well.
We didn't handle unsynchronization at all up to now, which might have
caused frames to not be extracted - esp. frames after an APIC picture
frame. Fixes#577468.
Original commit message from CVS:
* ext/flac/gstflacdec.c: (gst_flac_extract_picture_buffer):
* gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
Use new utility functions in libgsttag to process coverart (#512333).
Original commit message from CVS:
* ext/flac/gstflacdec.c: (gst_flac_extract_picture_buffer):
* gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
Generate the image-type values correctly. Leave them out of the caps
when outputting a "preview image" tag, since it only makes sense
to have one of those - the type is irrelevant.
* sys/sunaudio/gstsunaudiomixerctrl.c:
(gst_sunaudiomixer_ctrl_open):
If we can, mark the mixer multiple open when we use it, in case
(for some reason) the process wants to open it again elsewhere.
Original commit message from CVS:
Based on patch by: Tommi Myöhänen <ext-tommi.myohanen nokia com>
* gst-libs/gst/tag/id3v2frames.c: (parse_comment_frame):
Make sure the ISO 639-X language code in ID3v2 COMM frames
is actually valid UTF-8 (or rather: ASCII), so we don't end
up with non-UTF8 strings in tags if there's garbage in the
language field. Also make sure the language code is always
lower case. Fixes: #508291.
Original commit message from CVS:
* tag: id3v2: (parse_url_link_frame):
Parse WOAF frames and put the result into GST_TAG_CONTACT,
which is where it would end up if the same information was
put in a vorbis comment (don't think it's worth adding a
new URI tag for this). Fixes#488112.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c:
* gst-libs/gst/tag/id3v2.h:
* gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
We don't want the same string multiple times in a tag list for the
same tag ever, for any tag, not just for GST_TAG_GENRE, so make sure
this doesn't happen and remove special-case code for GST_TAG_GENRE.
Original commit message from CVS:
Based on patch by: Jason Kivlighn <jkivlighn gmail com>
* gst-libs/gst/tag/id3v2frames.c:
Extract license/copyright URIs from ID3v2 WCOP frames
(Fixes#447000).
* tests/check/elements/id3demux.c:
* tests/files/Makefile.am:
* tests/files/id3-447000-wcop.tag:
Add simple unit test.
Original commit message from CVS:
* gst-libs/gst/tag/gstid3demux.c:
* gst-libs/gst/tag/gstid3demux.h:
* gst-libs/gst/tag/id3v2.c:
* gst-libs/gst/tag/id3v2.h:
* gst-libs/gst/tag/id3v2frames.c:
Port ID3 tag demuxer over to the new GstTagDemux in -base
(now would be a good time to test re-importing your music
collection).
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
Fix parsing of ID3 v2.2.0 PIC frames. Only in version >= 2.3.0 is
the image format a variable-length NUL-terminated string; in
versions before that the image format is a fixed-length string of
3 characters (see #348644 for a sample tag).
Also make supplied mime type lower-case and fix up 'jpg' to 'jpeg'.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
* gst-libs/gst/tag/id3v2.h:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(parse_obsolete_tdat_frame):
Do not convert obsolete TDA/TDAT frames to TDRC frames, otherwise
the four-digit number will be interpreted as a year, whereas it is
month and day in DDMM format. Instead, parse TDAT frames and fix up
the date in the GST_TAG_DATE tag later if we also extracted a year.
Fixes#407349.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
Make sure that g_free always gets called on the same pointer that was
returned by g_malloc. Fixes#376594.
Do not leak memory if decompressed size is wrong.
Remove unneeded check of return value of g_malloc.
Patch by: René Stadler <mail@renestadler.de>
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
We require a -base more recent than 0.10.9, so it's safe to use
GST_TYPE_TAG_IMAGE_TYPE unconditionally now.
* ext/dv/gstdvdec.c: (gst_dvdec_sink_event):
* ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_sink_event):
Use _newsegment_full() now that we depend on a recent enough core.
* gst/wavparse/gstwavparse.c:
Remove cruft that we don't need any longer now that we depend on
a recent enough -base.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_text_identification_frame),
(parse_insert_string_field):
If strings in text fields are marked ISO8859-1, but contain
valid UTF-8 already, then handle them as UTF-8 and ignore
the encoding. (#351794)
Original commit message from CVS:
* configure.ac:
Require CVS of GStreamer core and -base (for
GST_TAG_EXTENDED_COMMENT and gst_tag_parse_extended_comment()).
* ext/taglib/gstid3v2mux.cc:
Write extended comment tags properly (#348762).
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(parse_comment_frame):
Extract COMM frames into extended comments, which makes it
easier to properly retain the description bit of the tag
and maintain this information when re-tagging (#348762).
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c:
(id3demux_add_id3v2_frame_blob_to_taglist):
Extract frames for ID3v2 versions prior to ID3v2.3.0 properly as
well, and add the version to the blob's buffer caps, since that
information will be needed for deserialisation later on (#348644).
Original commit message from CVS:
* gst-libs/gst/tag/gstid3demux.c: (plugin_init):
* gst-libs/gst/tag/id3v2.c:
(id3demux_add_id3v2_frame_blob_to_taglist):
* gst-libs/gst/tag/id3v2.h:
On second thought, it might be wiser and more efficient
not to do tag registration from a streaming thread.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c:
(id3demux_add_id3v2_frame_blob_to_taglist),
(id3demux_id3v2_frames_to_tag_list):
Put ID3v2 frames we can't parse as binary blobs into private
tags, so that they are not lost when retagging, at least once
id3v2mux has been taught to re-inject those frames again.
See bug #334375.
Original commit message from CVS:
* gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
(gst_avi_demux_process_next_entry):
Fix some leaks.
* gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
Don't use \n in debug lines.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
Set image type from APIC frame as "image-type" field
of GST_TAG_IMAGE buffer caps (#344605).
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(scan_encoded_string), (parse_picture_frame):
Extract images from ID3v2 tags (APIC frames). Fixes#339704.
* configure.ac:
Require core >= 0.10.8 (for GST_TAG_IMAGE and
GST_TAG_PPEVIEW_IMAGE used in the patch above).
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
A track/volume number or count of 0 does not make sense,
just ignore it along with negative numbers (a tag might
only contain a track count without a track number).
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
Don't output any tag when we encounter a negative track number - the
tag type is uint, so we end up outputting huge positive numbers
instead. (Fixes: #342029)
Original commit message from CVS:
* gst/autodetect/gstautoaudiosink.c:
(gst_auto_audio_sink_find_best):
* gst/autodetect/gstautovideosink.c:
(gst_auto_video_sink_find_best):
Make the name of the child element be based on the name of the
parent, so that debug output is more useful.
* gst-libs/gst/tag/id3v2frames.c: (find_utf16_bom),
(parse_insert_string_field), (parse_split_strings):
Rework string parsing to always walk over BOM markers in UTF16
strings, using the endianness indicated by the innermost one,
then trying the opposite endianness if that fails to convert
to valid UTF-8. Fixes#341774
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_insert_string_field):
Some more debug info. No need to check whether the string
returned by g_convert() is really UTF-8 - either it is or
we get NULL returned.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3v2_genre_fields_to_taglist):
Fix parsing of numeric genre strings some more, by ensuring that
we only try and parse strings that a) Start with '(' and b) Consist
only of digits.
Also, when finding an escaping '((' sequence, bust it back to '(' by
swallowing the first parenthesis
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (has_utf16_bom),
(parse_split_strings):
Recognise and skip any byte order marker (BOM) in
UTF-16 strings.
Original commit message from CVS:
* ext\jpeg\smokecodec.c:
use of GST_DEBUG instead of DEBUG(a...) for WIN32
* ext\speex\gstspeexenc.c: (gst_speexenc_set_header_on_caps):
move first instruction after all variables declarations
* gst\alpha\gstalpha.c:
* gst\effectv\gstshagadelic.c:
* gst\smpte\paint.c:
* gst\videofilter\gstvideobalance.c:
define M_PI if it's not defined (it's not defined on WIN32)
* gst\cutter\gstcutter.c: (gst_cutter_chain):
* gst\id3demux\id3v2frames.c: (parse_relative_volume_adjustment_two):
* gst\level\gstlevel.c: (gst_level_set_property), (gst_level_transform_ip):
* gst\matroska\matroska-demux.c: (gst_matroska_demux_parse_info),
(gst_matroska_demux_video_caps):
* gst\matroska\matroska-mux.c: (gst_matroska_mux_start), (gst_matroska_mux_finish):
* gst\wavparse\gstwavparse.c: (gst_wavparse_stream_data):
use gst_guint64_to_gdouble for conversions
* gst\goom\filters.c: (setPixelRGB_):
fix a debug which was using undefined variable
* gst\level\gstlevel.c: (gst_level_set_caps), (gst_level_transform_ip):
* gst\matroska\ebml-read.c: (gst_ebml_read_sint):
replace LL suffix with L suffix (LL isn't supported by MSVC6.0)
* win32/vs6:
add vs6 projects files for most of plugins-good
Original commit message from CVS:
* gst/apetag/gsttagdemux.c: (gst_tag_demux_chain):
* gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_chain):
Don't attempt typefinding on too-short buffers that have been
completely trimmed away.
* gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
Improve the debug output
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c:
(parse_relative_volume_adjustment_two):
We only care about gain and peak data for the master volume.
Original commit message from CVS:
* configure.ac:
Bump -base requirement to 0.10.5 for gst_tag_from_id3_user_tag(),
used by id3demux.
* gst-libs/gst/tag/gstid3demux.c: (plugin_init):
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(parse_user_text_identification_frame),
(parse_unique_file_identifier):
Add support for UFID and TXXX frames and extract musicbrainz tags.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
* gst-libs/gst/tag/id3v2frames.c: (id3v2_genre_fields_to_taglist):
Handle 0 data size in otherwise valid frames.
Handle numeric strings in 2.4.0 even when not in parentheses
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
ID3 2.3.0 used synch-safe integers for the tag size, but not for the
frame size. (Fixes#331368)
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_insert_string_field),
(parse_split_strings):
Add more validation to ensure that a char encoding conversion
produced a valid UTF-8 string.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(parse_split_strings):
Adjust for data length indicators when parsing (Fixes#329810)
Fix stupid bug parsing UTF-8 tag text.
Output tag strings with multiple fields as multiple tags, so the
app gets all the data.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (parse_text_identification_frame),
(id3v2_tag_to_taglist), (id3v2_genre_string_to_taglist),
(id3v2_genre_fields_to_taglist):
Never output a tag with a null contents string.
Original commit message from CVS:
* gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_chain),
(gst_id3demux_read_id3v1), (gst_id3demux_sink_activate),
(gst_id3demux_send_tag_event):
* gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v1_tag):
Someone should kick my butt. Remove ID3v1 tags from the end of the
file.
Improve error messages. Send the TAG message as soon as we complete
typefinding, instead of waiting until we send the first buffer.
Downstream tag event is still sent before the first buffer.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
Never trust ANY information encoded in a media file, especially
when it's giving you sizes. (Fixes#328452)
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
Remove errant break statement, and fix compilation with
older GCC.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
* gst-libs/gst/tag/id3v2.h:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
(parse_comment_frame), (parse_text_identification_frame),
(id3v2_tag_to_taglist), (id3v2_are_digits),
(id3v2_genre_string_to_taglist), (id3v2_genre_fields_to_taglist),
(parse_split_strings), (free_tag_strings):
Rewrite parsing of text tags to handle multiple NULL terminated
strings. Parse numeric genre strings and ID3v2 type
"(3)(6)Alternative" style genre strings.
Parse dates that are only YYYY or YYYY-mm format.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
Fix compilation of id3demux when zlib is not present.
(Fixes#326602; patch by: Sergey Scobich)
Original commit message from CVS:
* gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_add_srcpad):
Add gst_element_no_more_pads() for proper decodebin behaviour.
* gst-libs/gst/tag/id3v2frames.c: (parse_comment_frame),
(parse_text_identification_frame), (parse_split_strings):
Failure to decode some tags is not a GST_ERROR() but a
GST_WARNING()
When iterating over a chunk of text, check that we haven't gone too
far.
Original commit message from CVS:
* gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
If a broken tag has 0 bytes payload, at least still skip
the 10 byte header
No point building these by default. Also, these generated files
should go into the srcdir, not the builddir in this case, since
they're version controlled.
Add (uninstalled) tool to create licenses-table.dat from liblicense's
RDF files. It's not very pretty and makes loats of assumptions about
the input, but should work. If things change, we can fix it then.
https://bugzilla.gnome.org/show_bug.cgi?id=646868
What GStreamer calls encoder ("encoder used to encode this stream") is
stored in the vendor string in Vorbis/Theora/Kate and possibly others.
The Vorbis comment packet used in those streams uses ENCODER as the name
of the encoding program, which GStreamer calls application-name.
https://bugzilla.gnome.org/show_bug.cgi?id=656034
Original commit message from CVS:
2007-11-20 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/tag/gsttagmux.c: (gst_tag_lib_mux_render_tag),
(gst_tag_lib_mux_adjust_event_offsets):
* gst/qtdemux/qtdemux.c: (qtdemux_parse_theora_extension):
* sys/osxaudio/Makefile.am:
* sys/osxvideo/cocoawindow.h:
* sys/osxvideo/cocoawindow.m: Fix build on Mac OS X 10.5
Original commit message from CVS:
* ext/taglib/gstapev2mux.cc:
* ext/taglib/gstapev2mux.h:
* gst-libs/gst/tag/gsttagmux.c:
* tests/check/elements/apev2mux.c:
Update my mail address.
correctly (#339918). Also, don't leak taglist in case...
Original commit message from CVS:
Patch by: James "Doc" Livingston <doclivingston gmail com>
* gst-libs/gst/tag/gsttagmux.c: (gst_tag_lib_mux_render_tag):
Merge event tags and tag setter tags correctly (#339918). Also,
don't leak taglist in case of an error.
(extremely unlikely) case of an error.
Original commit message from CVS:
* ext/taglib/gsttaglib.cc:
Post an error message on the bus in the (extremely unlikely)
case of an error.
subclass.
Original commit message from CVS:
* ext/taglib/Makefile.am:
* ext/taglib/gstid3v2mux.cc:
* ext/taglib/gstid3v2mux.h:
* ext/taglib/gsttaglib.cc:
* ext/taglib/gsttaglib.h:
Split the actual ID3v2 tag rendering code into
its own subclass.
to cache the first newsegment event, because we ...
Original commit message from CVS:
* ext/taglib/gsttaglib.cc:
* ext/taglib/gsttaglib.h:
Fix newsegment event handling a bit. We need to
cache the first newsegment event, because we can't
adjust offsets yet when we get it, as we don't
know the size of the tag yet for sure at that point.
Also do some minor cleaning up here and there and add
some debug statements.
sink pad; our source pad should have application/x-i...
Original commit message from CVS:
* ext/taglib/gsttaglib.cc:
We do not want to proxy the caps on the sink pad; our
source pad should have application/x-id3 caps; also,
don't use already-freed strings in debug messages;
finally, adjust buffer offsets on buffers sent out.
being); match registered plugin name to the filename ...
Original commit message from CVS:
* ext/taglib/gsttaglib.cc:
Add gtk-doc blurb (unused for the time being); match registered
plugin name to the filename of the plugin (taglibmux => taglib)
Original commit message from CVS:
* ext/taglib/Makefile.am:
* ext/taglib/gsttaglib.cc:
* ext/taglib/gsttaglib.h:
Add support for writing MusicBrainz IDs.
Original commit message from CVS:
2006-03-11 Christophe Fergeau <teuf@gnome.org>
Patch by: Alex Lancaster
* ext/taglib/gsttaglib.cc: fix writing of TPOS tags (album number),
and add support for TCOP (copyright)
... which allows adding additional packets and may be needed to counteract
the shrink that implicitly occurred during a map/unmap cycle when adding
a previous packet.
Make a new GstVideoFormatinfo structure that contains the specific information
related to a format such as the number of planes, components, subsampling,
pixel stride etc. The result is that we are now able to introduce the concept of
components again in the API.
Use tables to specify the formats and its properties.
Use macros to get information about the video format description.
Move code to set strides, offsets and size into one function.
Remove methods that are not handled with the structures.
Add methods to retrieve pointers and strides to the components in the video.
Remove the GstVideoPlane structure and move the fields directly into the
GstVideoInfo structure. This makes things a little easier to read and also makes
it more likely that we can pass the stride array to external libraries.
Update docs.
Add method to get number of components.
Implement method to calculate defaults from format and dimensions.
Improve caps parsing.
Implement GstVideoInfo to caps conversion.
Add GstVideoFlags similar to the flags on the metadata. The idea is to replace
the metadata flags with the GstVideoFlags.
Move VideoPlane to video.h, it contains the information for a plane.
Add GstVideoInfo structure that holds the current configuration of a video
format.
Add methods to parse caps into GstVideoInfo.
Use the caps event instead of the setcaps function to configure caps.
Use a default event handler for the base rtp payloader instead of the awkward
way of handling the return value.
Mark functions that have no effect besides their return value and
only inspect their input arguments with G_GNUC_CONST. (We just
ignore the g_return_val_if_fail() guards for this)
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.
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
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
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
Exif uses tags like image-vertical-ppi or image-horizontal-ppi which are
registered in gst_tag_register_musicbrainz_tags(), but neither GstExifReader
nor GstExifWriter register them.
https://bugzilla.gnome.org/show_bug.cgi?id=648459
libgstfft doesn't actually use any symbols from libgstreamer, so when
compiling with -Wl,--as-needed it won't even link to it, which can
cause failures with older versions of g-i that ignore the --pkg
arguments.
Should fix PPA build failure on Ubuntu Maverick
Remove the android/ top dir
Fixe the Makefile.am to be androgenized
To build gstreamer for android we are now using androgenizer which generates the
needed Android.mk files.
Androgenizer can be found here:
http://git.collabora.co.uk/?p=user/derek/androgenizer.git
1) We need to lock and get a strong ref to the parent, if still there.
2) If it has gone away, we need to handle that gracefully.
This is necessary in order to safely modify a running pipeline. Has been
observed when a streaming thread is doing a buffer_alloc() while an
application thread sends an event on a pad further downstream, and from
within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
while the streaming thread has its buffer_alloc() in progress.
A race was observed between query() and setcaps() where the latter would
change the ringbuffer spec while the former was performing operations
based this data.
Observed a case where the src went to null-state during the query,
hence the spec pointer was no longer valid, and
gst_util_unit64_scale_int crashed (assertion `denom > 0´failed)
Add locking to make sure the ringbuffer can't disappear.
Given a large enough drift-tolerance, one could end up in a situation
where one would keep aligning the written buffers behind the current
read-segment position. The result for the reader would be complete
silence, possible preceded by very choppy audio.
By checking the available headroom, one can determine if there is
room to do alignment, or if one should resort to a resync instead to get
the pointers back on track.
Also refactor the alignment-logic out of the render function for cleaner
code.
This is the official, standardized way of embedding pictures
inside vorbiscomments now. Parsing code taken from flacparse
and slightly changed.
Fixes bug #635669.
Commit ba2e500bd9 ensured to provide
a running clock when EOS had finished rendering. However,
other measures are needed (and were in place before) to ensure a
running clock when EOS still needs rendering (i.e. waiting).
So, specifically, re-introduce eos_rendering removed in aforementioned commit,
this time as a public variable so subclasses can be aware of the situation.
Fixes (part of) #645961.
API: GstBaseAudioSink:eos_rendering
The GstTagXmpWriter interface is to be implemented on elements that
provide xmp serialization. It allows users to select which
xmp schemas should be used on serialization.
API: GstTagXmpWriter
https://bugzilla.gnome.org/show_bug.cgi?id=645167
This fixes a regression that an assertion would happen if
gst_video_get_component_offset would be called with width or
height as 0.
Calling it with 0 is fine if the format isn't yuv and this
was already being used in some other places of video.c
Fixes introspection failures caused by type assertions/warnings.
Since we now moved from _get_type() functions to external GType
variables in a couple of places, we actually have to call gst_init()
to make sure these are set when we use GST_TYPE_FOO.
Subtitle streams being parse can cause the pipeline to wait indefinitely
to PREROLL. This makes subtitle streams got to PAUSED even if no data is
available. This should not be a cause for concern as we don't expect to
get much data for subtitle streams other than language tags from the
container.
https://bugzilla.gnome.org/show_bug.cgi?id=632291
Maps to GST_BUFFER_FLAG_MEDIA4. The purpose is to explicitly indicate
whether a telecined buffer is progressive or not without having to make
assumptions based on previous buffers.
This makes sure we maintain a ref on the discoverer object while the
async timeout callback is alive to prevent a potential crash if the
object is freed while the callback is pending.
https://bugzilla.gnome.org/show_bug.cgi?id=641706
We want to make sure the discoverer object passed to the various
callbacks doesn't become invalid if a callback is pending and the object
is free'd in the mean time.
https://bugzilla.gnome.org/show_bug.cgi?id=641706
Otherwise, having 2 tagdemux in a row followed by an element operating in
pull mode will make the second tagdemux implictly eat the first tagdemux'
tag event(s).
Fixes (part of) #641047.
... as that is the specification and fixes compilation on Cygwin:
gstxmptaag.c: In function 'read_one_tag':
gstxmptag.c:1015: error: array subscript has type 'char'
Variable was being written to and could cause crashes
if multiple elements were parsing xmp at the same time.
Moving it to local scope solves the problem.
This makes sure we do not touch the stream taglist once the pipeline has
been prerolled. Adding of stream tags happens in the pad event probe
which runs in a different thread from discoverer stream processing, so
modifying the tag list while discoverer might be processing it can
sometimes cause a crash.
https://bugzilla.gnome.org/show_bug.cgi?id=639778
This avoids a race where the timeout callback is scheduled to run but we
get sufficient information to finish discovery before actually getting
around to executing the callback. See the documentation of
g_source_is_destroyed() for more details.
https://bugzilla.gnome.org/show_bug.cgi?id=639730
This ensures that everything is properly cleaned up before the
GstDiscoverer object is freed. Specifically, it makes sure that we've
removed the async timeout callback before freeing the object to avoid a
potential crash later on.
https://bugzilla.gnome.org/show_bug.cgi?id=639755
Use LC_MESSAGES rather than LC_ALL. Save/load description as untranslated string
when using an English language locale. Strip locale information to the language,
so we don't save keys like description[fr_FR.UTF-8]=...
https://bugzilla.gnome.org/show_bug.cgi?id=638860
Makes things work again properly in uninstalled setups (and
presumably in installed setups where GStreamer is installed
into a non-standard prefix). Requires fixes from core git.
https://bugzilla.gnome.org/show_bug.cgi?id=639039
Need to pass libgstreamer-0.10 explicitly to linker, since we're
calling gst_init(), which in turn is needed because the encoding
target get_type() function calls gst_value_register().
https://bugzilla.gnome.org/show_bug.cgi?id=639039
Make sure to use the PKG_CONFIG_PATH set at configure time instead of
just relying on an env-var set one. This makes sure both g-ir-compiler
and g-ir-scanner use the same PKG_CONFIG_PATH for determining include
paths etc.
Observed a case where the sink went to null-state during the query,
hence the ringbuffer-pointer was NULL, causing a crash.
Moving the ringbuffer-check code until after the query, and hold the
lock during the check and while using the spec-values. It should not matter
to the query wether the ringbuffer is present or not, and it actually
gets a time bit more time to get the ringbuffer set up in this case!
Fixes#635231
When we have an invalid running-time (because we clipped, for example) use the
RTP base time for timestamping instead of generating wrong RTP timestamps.
with i686-apple-darwin10-gcc-4.2.1:
encoding-profile.h:134: warning: type qualifiers ignored on function return type
encoding-profile.c:240: warning: type qualifiers ignored on function return type
gstencodebin.c: In function 'next_unused_stream_profile':
gstencodebin.c:454: warning: format '%d' expects type 'int', but argument 8 has type 'GType'
gstencodebin.c:464: warning: format '%d' expects type 'int', but argument 8 has type 'GType'
gst_discoverer_discover_uri() expects the caller to unref the returned
GstDiscovererInfo object. The corresponding gtk-doc annotation was not
updated to reflect this.
We want to send the keealive message a little earlier than the timeout value
specifies. Scale this based on the value of the timeout instead of just assuming
5 seconds.
Because we should act before the rtsp server does a timeout, we
reduce the timeout-time with 5 seconds, this should be safe to always
keep te rtsp connection alive.
https://bugzilla.gnome.org/show_bug.cgi?id=633455
Use GstDiscoverer{Audio,Video}Info in getters like
gst_discoverer_{audio,video}_info_get_*(). This avoids the casts in the macros,
help language bindings and is more correct.
Force regeneration of marshal.[ch] files after prefix changes in
Makefile.am, to avoid build errors for those of us who don't
habitually make clean first.
Adds a tag to inform what mode was used by a camera to calculate
the picture capturing exposure
Also adds mapping to exif and tests
API: GST_TAG_CAPTURING_METERING_MODE
https://bugzilla.gnome.org/show_bug.cgi?id=631773
Adds new tag for tagging sharpness processing used
when capturing an image. Also maps it in the exif
tags.
Tests included.
API: GST_TAG_CAPTURING_SHARPNESS
https://bugzilla.gnome.org/show_bug.cgi?id=631773
There's no reason to make the marshaller public API. Don't install
pbutils-marshal.h header file and use prefix that makes sure the
symbol doesn't get exported.
So run-time bindings can introspect the names correctly (we abuse this
field as description field only in elements, not for public API
(where the description belongs into the gtk-doc chunk).
https://bugzilla.gnome.org/show_bug.cgi?id=629746
Add a new function called gst_rtp_buffer_list_from_buffer() that takes
a GstBuffer containing a RTP packets and spits out a GstBufferList
containing two buffers, one with the header and the other with the payload.
RFC 5285 describes a generic method to add multiple header extensions to RTP packets.
These functions parse these headers and return them, both for the one-byte header and the
two bytes headers.
This adds code to translate the profile_and_level indication from the
MPEG-4 video (ISO/IEC 14496-2) headers to a string profile/level. The
mappings are taken from the spec and Wireshark's code, and might need to
be expanded on.
https://bugzilla.gnome.org/show_bug.cgi?id=617314
API: gst_codec_utils_mpeg4video_get_profile()
API: gst_codec_utils_mpeg4video_get_level()
API: gst_codec_utils_mpeg4video_caps_set_level_and_profile()
This adds code to parse the first few bytes of H.264 sequence parameter
set in order to extract the profile and level as const strings. This
code was originally in both qtdemux and matroskademux.
https://bugzilla.gnome.org/show_bug.cgi?id=617314
API: gst_codec_utils_h264_get_level()
API: gst_codec_utils_h264_get_profile()
API: gst_codec_utils_h264_caps_set_level_and_profile()
This moves AAC profile detection to pbutils, and uses this in
typefindfunctions. This will also be used in qtdemux.
https://bugzilla.gnome.org/show_bug.cgi?id=617314
API: gst_codec_utils_aac_get_profile()
API: codec_utils_aac_caps_set_level_and_profile()
This allows us to add generic codec-specific functionality, like
extracting profile/level data from headers, without having to duplicate
code across demuxers and typefindfunctions.
As a starting point, this moves over AAC level extraction code from
typefindfunctions, so it can be reused in qtdemux, etc.
https://bugzilla.gnome.org/show_bug.cgi?id=617314
API: gst_codec_utils_aac_get_sample_rate_from_index()
API: gst_codec_utils_aac_get_level()
From gstinfo.h:
/* do not use this function, use the GST_DEBUG_CATEGORY_INIT macro */
GstDebugCategory *_gst_debug_category_new (const gchar * name,
And more importantly:
#pragma GCC poison _gst_debug_category_new
So this commit fixes --disable-gst-debug builds.
Make appsrc not set caps on buffers when its own caps is NULL.
This avoids calling make_metadata_writable on all buffers and
prevents losing buffer caps in case we are not replacing it
with something meaningful.
https://bugzilla.gnome.org/show_bug.cgi?id=630353
While the doc parser allows for certain variation, it is a good idea to not
use random characters here and there, but try to stick to the little markup
syntax there is.
Binding generators apparently need this as they can't really know
that the callback is guaranteed to be called exactly once and that
the user_data can be freed at the end of it.
And deprecate the gulong versions. This is to support platforms
where sizeof(unsigned long) < sizeof(void *). Fixes#627565.
API: Add gst_x_overlay_set_window_handle()
API: Deprecate: gst_x_overlay_set_xwindow_id()
API: Add gst_x_overlay_got_window_handle()
API: Deprecate: gst_x_overlay_got_xwindow_id()
API: Add GstXOverlay::set_window_handle()
API: Deprecate: GstXOverlay::set_xwindow_id()
There will always be only a single output buffer and if the
target caps have a different framerate than the input there
will be a negotiation error during conversion.
Add methods to convert between uri and sdpmessages, loosly based on
http://tools.ietf.org/html/draft-fujikawa-sdp-url-01
API: GstSDPMessage::gst_sdp_message_parse_uri
API: GstSDPMessage::gst_sdp_message_as_uri
Don't take an extra ref on the sink and source because that creates a reference
cycle. Instead, use the invalidate method of the clock when the sink and source
are freed. This way, we don't call into the time function anymore after the
objects are disposed.
This is pretty much an FAQ, so try to make the error message a bit
more helpful. Also, don't tell people to file a bug in bugzilla
about this (which is what happens if the default error message for
CORE_NEGOTIATION is used).
Adds mappings from:
GST_TAG_CAPTURING_EXPOSURE_PROGRAM -> ExposureProgram
GST_TAG_CAPTURING_EXPOSURE_MODE -> ExposureMode
GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE -> SceneCaptureType
GST_TAG_CAPTURING_GAIN_ADJUSTMENT -> GainControl
GST_TAG_CAPTURING_WHITE_BALANCE -> WhiteBalance
GST_TAG_CAPTURING_CONTRAST -> Constrast
GST_TAG_CAPTURING_SATURATION -> Saturation
Also renames gst_tag_image_orientation_from_exif_value and
gst_tag_image_orientation_to_exif_value to remove the 'gst'
prefix and not including in the win32 defs.
Tests included.
Adds a new tag for informing if flash was used while
capturing an image and the flash mode selected by the
user during this capture
API: GST_TAG_CAPTURING_FLASH_FIRED
API: GST_TAG_CAPTURING_FLASH_MODE
https://bugzilla.gnome.org/show_bug.cgi?id=626651
When calling gobject-introspection scanner, make sure our own
freshly-built libs within the source tree (well, build dir) come
first in the PKG_CONFIG_PATH. May or may not help to make sure
that it doesn't pick up older external plugins-base libs (or
.gir files) from outside the source tree / build directory as
dependencies of the introspected lib instead of using the
stuff we just built in a sibling directory.
https://bugzilla.gnome.org/show_bug.cgi?id=623698
Change "Src" into "Source" (we use that elsewhere). I did not keept "Src" as it
is quite unlikely that someone plugs appsrc by searching the registry by classification.
Do not use the result of inner ifd's parsing to increment
the current tag index. The reasons are:
1) The function returns a boolean.
2) The inner ifd's tags are in a separate table, so they shouldn't
interfere with its parent ifd table parsing.
Makes the xmp helper lib aware that the tags can be simple,
sequences or bags (there is still struct and alt, but those
aren't handled yet). Adding this info makes serialization
and deserialization more consistent.
If we find a bag of tags of type string in the xmp packet, we
should concat them, this is not the ideal approach, but at
least works for now as we don't know what type of tag it
is (simple, structure, seq, alt or bag)
Everything in the xmp helper lib is initiallized once and on a thread
safe way, and after that there are only reads going on, no more
writing. Based on that, drop the locking.
So people can check what version of the gst-plugins-base libs they're
building against or linked against.
API: GST_PLUGINS_BASE_VERSION_MAJOR
API: GST_PLUGINS_BASE_VERSION_MINOR
API: GST_PLUGINS_BASE_VERSION_MICRO
API: GST_PLUGINS_BASE_VERSION_NANO
API: GST_CHECK_PLUGINS_BASE_VERSION
API: gst_plugins_base_version()
API: gst_plugins_base_version_string()
Elements usually use their own instance as instance data but the
clock can have a longer lifetime than their elements and the clock
doesn't own a reference of the element.
Fixes bug #623807.
Check for the state of the ringbuffer before doing the checks of the other
buffer properties, when we're not started, we don't care about those values.
Adds mappings for:
GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION
GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION
GST_TAG_GEO_LOCATION_MOVEMENT_SPEED
GST_TAG_GEO_LOCATION_ELEVATION
Does some refactoring in the code to reduce number of parameters
passed to functions
Tests included.
Adds exif helper lib functions to parse exif buffers from/to
taglists. Exif is tipically used in jpeg images, but it can
also be embedded into TIFF, AVI and WAV formats.
Adds a couple function to handle exif in tiff header structures, that is how
exif is embedded in jpeg and (obviously) in tiff.
API: gst_tag_list_to_exif_buffer
API: gst_tag_list_to_exif_buffer_with_tiff_header
API: gst_tag_list_from_exif_buffer
API: gst_tag_list_from_exif_buffer_with_tiff_header
Fixes#614872
This reverts commit cea2644ed8.
Many audio sink assume that they can create a clock in
the instance init function and it will be there forever
and not be cleared by the state change functions.
Adds GST_TAG_GEO_LOCATION_MOVEMENT_SPEED,
GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION and
GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION to xmp
mappings.
Tests included.
Catch more socket errors.
Rework how sockets are managed in the GSource, wake up the maincontext instead
of adding/removing the sockets from the source.
Add callback for when the tunnel connection is lost. Some clients (Quicktime
Player) close the POST connection in tunneled mode and reopen the socket when
needed.
See #612915
Point g-ir-scanner to the .la file of our library, which hopefully
makes it find the right dependencies in all cases (ie. our locally
built libgstreamer and not the system-installed one). This is also
how it's done in Gtk+ and how it's documented in the wiki, see
http://live.gnome.org/GObjectIntrospection/AutotoolsIntegrationFixes#603710.
Use new girdir and typlibdir from core .pc files, so we can figure
out the right includes to pass to the gobject-introspection tools,
whether core is installed in the same prefix as gobject-introspection
or in a different prefix or uninstalled. This also keeps us from adding
bogus paths to the includes that only work if core is uninstalled.
Also add some missing includes/pkgs where needed.
Don't make libgstinterfaces (and thus libgstaudio etc.) indirectly depend
on libgstvideo by using the GstVideoRectangle helper structure in the API,
which causes undesirable dependencies, esp. with the gobject-introspection
(people will point and laugh at us if they find out that libgstaudio
depends on libgstvideo). Instead, pass the x, y, width and height parameters
directly to the function.
Re-fixes #610249.
Adds a mapping to the _ELEVATION tag, this is a different
mapping as it has to be mapped into exif:GPSAltitude and
exif:GPSAltitudeRef at the same time. So we needed to refactor
a little more to be able to deserialize it properly.
Now, when parsing a xmp buffer into a taglist all tags are
added to a list before being parsed so that when one of the
altitude tags are found the deserialization function can search
for its complementary tag to do the correct parsing
Fixes#613690
When parsing the xmp buffer into the gst taglist store the
found tags into a list to be parsed only after finding all
tags on the buffer. This allows the parser function to search
this list for complimentary tags that should be parsed together
Fixes#613690
This commit is only refactoring, no fetaures added.
Do not store tags in flexible arrays as it doesn't allow us
to use nested flexible arrays. This is going to be needed in the
following commits to map gst tags that are stored into
2 separate tags in xmp (Not that they are alternatives, but
they are complementary).
For example, GST_TAG_ELEVATION is represented in the exif
schema with 2 fields: the absolute altitude and an integer
to indicate if it is above or below sea level.
The previous mappings storage wouldn't allow us to
express it.
Also store a serialization and a deserialization function
for each xmp tag as some of them require some non-trivial
convertion to its string form.
Fixes#613690
Since we no longer use an array of error messages, there is no reason
to clamp the error code, which allows us to simplify the code some more
and also to actually report the correct error code for unknown errors.
2 goals in the refactoring:
- Put the error messages closer to their enum values, so that it's easy
to see which error belongs to which value.
- Make gcc not complain with -Wformat-nonliteral
I initially looked here because I wanted compiles to not fail with
-Wformat-nonliteral but ended up refactoring the code to make it look
nicer.
As I lack a large collection of XMP tagged files, I only did rough
testing of the code. The testsuite passes though.
XMP metadata can be embedded in many media container formats. Implement own
parser and formatter that can be used to convert between an xpacket and a
GstTagList. Add unit tests.
Add set_render_rectangle() vmethod to the interface to better support windowless
toolkits (e.g. qt graphicsview or video on canvas in general). Right now we
always fill the widget to 100%. With the patch we can use a rectangular target
region. Fixes#610249.
API: GstXOverlay::set_render_rectangle()
Add simple videotestsrc ! xvimagesink examples using gtk and qt. This patch also
adds all boilerplate to configure for using c++. The qt based examples are
optional like their gtk counterparts.
Be careful when allocating the amount of bytes specified in the Content-Length
because it can be an insanely huge value. Try to allocate the memory but fail
gracefully with a nice error when the allocation failed.
Explain why the whole bus sync handler mess is needed. Add section about
how to use GstXOverlay in connection with Gtk+ and mention the Gtk+ API
break issue and how to work around it (see #601809).
lang-tables.c is included by lang.c and not really a proper source
file that should be compiled into its own object, so rename it to
lang-tables.dat and put it into EXTRA_DIST instead to ensure it
gets disted.
Increase default drift tolerance to 40ms to avoid glitches with decoders
or formats where there's a lot of timestamp jitter for some reason or
another (in this case: asf/wma), at least until we implement timestamp
smoothing.
g_mapped_file_unref() was introduced in GLib 2.22, but we depend
only on GLib 2.18, so use g_mapped_file_free() when compiling
against older GLib versions until we bump the GLib dependency.
Add some utility functions for language tags and ISO-639
codes. These are useful for both GUIs and elements. The
iso-codes package is used for language name translations
if available.
API: gst_tag_get_language_codes()
API: gst_tag_get_language_name()
API: gst_tag_get_language_code()
API: gst_tag_get_language_code_iso_639_1()
API: gst_tag_get_language_code_iso_639_2B()
API: gst_tag_get_language_code_iso_639_2T()
Our calibration against the pipeline clock is done with the adjusted
ringbuffer time, so take the adjustement into account. Fixes some audio dropouts
when reusing audio sinks after switching clocks and slaving methods in a
pipeline.
When we are calibrating the internal clock against the external clock take into
account the time offset applied to our internal clock because we will subtract
that in the render_function again.
Add a new video event to mark the start or end of a still-frame
sequence, and a parser function to identify and extract info from
such events.
API: gst_video_event_new_still_frame()
API: gst_video_event_parse_still_frame()
Fixes: #601942
Use send() instead of write() so that we can pass the MSG_NOSIGNAL flags to
avoid crashing with SIGPIPE when the remote end is not listening to us anymore.
Fixes#601772
When we start and we need to produce the first sample, go to the next sample
that will be written into the ringbuffer instead of trying to go to sample 0.
We relied on rather small ringbuffer sizes to correctly go to the current
sample, which breaks whith large buffers.
Fixes#600945
Add drift-tolerance property (defaulting to 20ms) to handle resync after clock
drift or timestamp drift instead of relying on the latency-time value for clock
drift and 500ms for timestamp drift.
Remove warning about discont timestamp and simply resync. The warning is in some
cases not correct and is triggered more frequently now that we lower the
tolerance value.
There's not much point in using GST_DEBUG_FUNCPTR with GObject
virtual functions such as get_property, set_propery, finalize and
dispose, since they'll never be used by anyone anyway. Saves a
few bytes and possibly a sixteenth of a polar bear.
I also renamed glib_enum_prefix to glib_gen_prefix as we also use that for the
marshallers. Also rename the rtsp-marshal.list to work with the unified prefix.
gstrtspconnection.c:gst_rtsp_connection_receive() can hang when an error occured
on a socekt. Fix this problem by checking for error on 'other' socket after poll
return.
Fixes#596159
Rhythmbox uses cdda:// URIs of the form cdda://track#device, which
worked before the fix for bug #321532.
Also adds a check for negative track numbers and some unit tests for URI
parsing.
Fixes bug #595454.
Should really have been READABLE and WRITABLE, but those are hard to
add whilst maintaining backwards compatibility. See #343615.
API: GST_MIXER_TRACK_READONLY
API: GST_MIXER_TRACK_WRITEONLY
Check for pulsesink < 0.10.17 because it includes code that is now included in
baseaudiosink. Disable that code in baseaudiosink to be compatible with the
older version.
Take the time of the clock so that the last_time field is set. This is important
for sinks that restart their internal ringbuffer after a caps change and need to
know the last know position.
When going to NULL, we reset the ringbuffer so that it starts beck from 0. We
also make sure that the clock is updated with the elapsed time so that it
alsways increments even when the ringbuffer goes back to 0. When this happened
we need to adjust the sample position for the reset ringbuffer.
Fixes#594136
Add a property to disable rendering of video frames during preroll. This
will only work for videosinks that use the new ::show_frame() vfunc instead
of overriding basesink's preroll and render vfuncs directly.
API: GstVideoSink:show-preroll-frame
The old one did the mistake of not actually advancing the ringbuffer, it just
adjusted the segbase, introducing the whole lenght of the ringbuffer as an
extra delay in the pipeline.
Also make sure that the resync can never go back in time, producing the same
timestamps that has already been produced, as this can cause severe problems
for sinks and other synching mechanisms.
Fixes#594256
Add various conversion functions between time<->bytes<->rtptime that will be
used later on.
Refactor the min/max packet length code so that it can be used for both
sample/frame based payloaders. Cache the returned values.
code cleanups.
When we discover a DISCONT buffer, make the outgoing RTP timestamps have the
same gap as the GStreamer timestamps gap.
Have a custom sample/frame function to generate an offset that the base class
will use for generating RTP timestamps. This results in perfect RTP timestamps
on the output buffers.
Refactor setting metadata on output buffers.
Add some more functionality to _flush().
Handle DISCONT on the input buffers and set the marker bit and DISCONT flag on
the next outgoing buffer.
Flush the pending data on EOS.
Always use the adapter when we need to fragment the incomming buffer. Use more
modern adapter functions to avoid malloc and memcpy. The overall result is that
the code looks cleaner while it should be equally fast and in some case avoid a
memcpy and malloc.
Use the adapter timestamping functions for more precise timestamps in case of
weird disconts.
Cache some values instead of recalculating them.
Add gst_base_rtp_audio_payload_flush() to flush a certain amount of bytes from
the internal adapter.
API: GstBaseRTPAudioPayload::gst_base_rtp_audio_payload_flush()
Allow subclasses to use the OFFSET field on RTP buffers to influence the way in
which RTP timestamps are generated. Usually timestamps are created from the
GStreamer timestamps on the buffer, which could result in imperfect RTP
timestamps.
... which is the default seed when creating a new GRand. Because
GLib in older versions used buffered IO this would take a lot of time.
Instead use the global GRand for getting random numbers and keep the
three instance GRand for backward compatibility with a simple seed.
Fixes bug #593284.
The new API to send messages using GstRTSPWatch will first try to send the
message immediately. Then, if that failed (or the message was not sent
fully), it will queue the remaining message for later delivery. This avoids
unnecessary context switches, and makes it possible to keep track of
whether the connection is blocked (the unblocking of the connection is
indicated by the reception of the message_sent signal).
This also deprecates the old API (gst_rtsp_watch_queue_data() and
gst_rtsp_watch_queue_message().)
API: gst_rtsp_watch_write_data()
API: gst_rtsp_watch_send_message()
With gst_rtsp_connection_set_http_mode() it is possible to tell the
connection whether to allow HTTP messages to be supported. By enabling HTTP
support the automatic HTTP tunnel support will also be disabled.
API: gst_rtsp_connection_set_http_mode()
The error_full callback is similar to the error callback, but allows for
better error handling. For read errors a partial message is provided to
help an RTSP server generate a more correct error response, and for write
errors the write queue id of the failed message is returned.
Rewrote read_line() to support LWS (Line White Space), the method used by
RTSP (and HTTP) to break long lines. Also added support for \r and \n as
line endings (in addition to the official \r\n).
From RFC 2068 section 4.2: "Multiple message-header fields with the same
field-name may be present in a message if and only if the entire
field-value for that header field is defined as a comma-separated list
[i.e., #(values)]." This means that we should not split other headers which
may contain a comma, e.g., Range and Date.
Due to the odd syntax for WWW-Authenticate (and Proxy-Authenticate) which
allows commas both to separate between multiple challenges, and within the
challenges themself, we need to take some extra care to split these headers
correctly.
Do not abort message parsing as soon as there is an error. Instead parse
as much as possible to allow a server to return as meaningful an error as
possible.
Remove any existing Session and Date headers before adding new ones
when sending a request. This may happen if the user of this code reuses
a request (rtspsrc does this when resending after authorization fails).
Do not use sizeof() on an array passed as an argument to a function and
expect to get anything but the size of a pointer. As a result only the
first 4 (or 8) bytes of the response buffer were initialized to 0 in
auth_digest_compute_response() which caused it to return a string which
was not NUL-terminated...
The allowed URI scheme is now:
cdda://(device#)?track
Also allow every combination of uppercase and lowercase
characters for the protocol part.
Fixes bug #321532.
Differentiate subtitle streams and lyrics/cracktastic/complex streams via
the category string in the headers. This seems like a useful distinction
to make, and also seems more future-proof. See #525743.
Add section docs for multichannel, so that it has a short desc in the toc too.
Move the section docs in adio up, so that the follow the copyright like
elsewhere.
This fixed playback of Dirac files with schrodec when upstream wants
a different width/height, basevideocodec accepts this and then
pushes buffers with new caps but content of the old caps.
In the best case this will just result in wrong unit size and a
failure in basestransform elements.
gst_rtsp_watch_queue_data() is similar to gst_rtsp_watch_queue_message()
but allows for queuing any data block for writing (much like
gst_rtsp_connection_write() vs. gst_rtsp_connection_send().)
API: gst_rtsp_watch_queue_data()
The base64 decoding in fill_bytes() expected the size of the read data to
be evenly divisible by four (which is true for the base64 encoded data
itself). This did not, however, take whitespace (especially line breaks)
into account and would fail the decoding if any whitespace was present.
Unparent and free the ringbuffer when going to NULL, like we do with the
audiosrc element. We can do this now because we correctly manage the time
jumping back to 0.
This returns the correct values for all formats that are handled by
GstVideoFormat and makes all the custom get_unit_size functions in
many elements unnecessary.
Hack around thread-safety issues in GObject and our racy _get_type()
functions (we could easily fix the _get_type() functions, but we still
need to hack around the GObject class races until we require a newer
GLib version, I think).
Previously the messages_sent() callback was only called for messages
which had a CSeq, which excluded all data messages. Instead of using the
CSeq as ID, use a simple index counter.
If we don't have any other info, don't try to interpret the
genre field. In particular we don't want to interpret a genre
of 0 as 'Blues' if no other fields are set and the entire tag
is just empty.
In ID3v1, a track number is present only if byte 125 is null AND
byte 126 is non-null. If the track number is not present, don't add
a track number tag with value 0.
Don't use REPLACE_ALL merge mode when that's not really what we want,
as now that REPLACE_ALL actually does what it's supposed to do in
core, we drop tags we wanted to keep, such as the various disc id
tags. Add unit test for this as well. Fixes#579463.
Use the unadjusted internal clock times to calculate the internal/external
offset when calibrating the clock.
When going to NULL, unparent and free the ringbuffer, like we do in the source
element.
See #578506
Add two methods for getting the unadjusted time of the clock and one for
adjusting an internal time. We will need these methods for correctly handling
the time after a gst_audio_clock_reset().
Add a debug category and some debug lines to the audio clock.
API: gst_audio_clock_get_time()
API: gst_audio_clock_adjust()
API: GST_AUDIO_CLOCK_CAST()
After we pause the stream and interrupt the writeout to the ringbuffer, also adjust
the amount of output samples we consumed. We can't do this reliably with the
current API when we are doing trick modes but we can do the right thing for
normal playback.
Add support for a set of standard commands that can be queried and executed to
support applications like DVD. Add query construction and parsing functions.
Add new messages that can be sent on the bus to provide notifications related
to commands, multiangle changes, and button highlight activity.
Add some helper functions to parse the existing GstNavigation events that
elements might receive.
Document it all and add unit tests.
People might queue messages from a thread other than the thread in which
the main context which this watch is attached is iterated from, so use
a GAsyncQueue instead of a GList, so g_list_append() doesn't trample
over list nodes just freed in the other thread. This just fixes issues
I've had with gst-rtsp-server. We might need more locking in various
places here.
We were returning a pointer to a stack variable with the resolved hostname,
which doesn't work.
return a copy of the resolved ip address instead.
Fixes#575256.
Free the key value before we remove the header item from the array. The item we
retrieved from the array is only valid until we remove it from the array.
Save the tunnelid in the connection. Add a method to retrieve the tunnelid so
that a server can store and match the id against other tunnel requests.
Fix the URI in the tunnel requests so that they contain the absolute uri and the
query string if any instead of just the hostname.
Transparently base64 decode the input stream when tunneling.
Add method to set the connection ip address so that it can be included in the
tunnel response.
Add method to connect the two tunnel requests.
Add two callbacks for the async mode to notify a tunnel start and tunnel
complete event.
Add method to reset the watch after the connection has been tunneled.
Various little refactoring to make more stuff reusable.
API: RTSP::gst_rtsp_connection_set_ip()
API: RTSP::gst_rtsp_connection_get_tunnelid()
API: RTSP::gst_rtsp_connection_do_tunnel()
API: RTSP::gst_rtsp_watch_reset()
Add support for tunneling RTSP over HTTP.
Fix documentation some more.
See also #573173.
API: RTSP:gst_rtsp_connection_is_tunneled()
API: RTSP:gst_rtsp_connection_set_tunneled()
Add transport define for RTSP tunneled over HTTP.
Parse rtsph:// uris as tunneled HTTP over TCP.
API: GstRTSPLowerTrans::GST_RTSP_LOWER_TRANS_HTTP
See also #573173.
Add gst_rtsp_connection_get_url() method.
Reserve space for 2 sockets, one for reading and one for writing. Use socket
pointers to select the read and write sockets. This should allow us to implement
tunneling over HTTP soon.
API: RTSP::gst_rtsp_connection_get_url()
The previous change to appsrc/appsink requires people to 'make clean'
to get the marshallers rebuilt (causing a build failure otherwise).
Change some lines in the .list file around to force a rebuild of
these files automatically.
Add a uri handler to appsink.
don't emit signals when we have installed callbacks on appsink.
Add callbacks to appsrc to replace the signals.
Add property to disable callbacks in appsrc, default to TRUE for backwards
compatibility but disable when callbacks are installed.
API: GstAppSrc::emit-signals
API: GstAppSrc::gst_app_src_set_emit_signals()
API: GstAppSrc::gst_app_src_get_emit_signals()
API: GstAppSrc::gst_app_src_set_callbacks()
Add some padding to the callbacks structure just to be safe.
Remove the now invisible marshaller methods from the docs.
Fix a comment in the unit test.
Add a .def file for win32 builds (and make check-exports).
Fix LDFLAGS in Makefile.am, so the usual export regexps are used (fixes#573165).
Make sure private marshaller functions aren't exported by prefixing them with __gst;
also rename gst_app_marshal_OBJECT__VOID to _BUFFER__VOID, make it static and add
a comment why we're not using glib-genmarshal for this one.
This patch adds a few flags to the mixer and mixerctrl interface to
better support OSSv4 (and potentially other backends).
Patch By: Garret D'Amore <garrett.damore@sun.com>
Signed-Off-By: Jan Schmidt <jan.schmidt@sun.com>
API: GST_MIXER_FLAG_HAS_WHITELIST, GST_MIXER_FLAG_GROUPING,
API: GST_MIXER_TRACK_NO_RECORD, GST_MIXER_TRACK_NO_MUTE,
API: GST_MIXER_TRACK_WHITELIST
Don't randomly call WSAStartup and WSACleanup but instead call the startup when
we create a connection and cleanup when we free it again. Because the internal
datastructure is refcounted, this should not cause any refcounting leaks when
the connection is managed correctly.
Fixes#562794.
These three flags allow all know combinations of interlaced formats. They should
only be used when the caps contain 'interlaced=True'.
Fixes#163577 (yes, it's a 4 year old bug).
Make the RTSPConnection object opaque so that we can extend it in the future.
Rename GstRTSPChannel to GstRTSPWatch to avoid confusing with the RTSP channels.
Based on pacth by Martin Samuelsson <martin dot samuelsson at axis dot com>
Fixes#571299.
Add gst_app_sink_set_callbacks() to install a set of callbacks. This is a more
performant alternative to connecting to the signals.
Add a unit test for appsink.
Clean up some of the appsink docs.
API: GstAppSink::gst_app_sink_set_callbacks()
Add a GstRTSPChannel object that wraps a GSource around the RTSP connection so
that the connection can be monitored from a maincontext. This allows us to
operate in ASYNC mode, which is handy when building a server.
Rework the old code to use the async code under the hood.
API: gst_rtsp_channel_new()
API: gst_rtsp_channel_unref()
API: gst_rtsp_channel_attach()
API: gst_rtsp_channel_queue_message()