+++ /dev/null
-*~
-*.bak
-
-Build
-*.user
-*.suo
-*.ipch
-*.sdf
-*.opensdf
-*.DS_Store
-
-# Meson
-/build
-/_build
-/subprojects
+++ /dev/null
-include: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/master/gitlab/ci_template.yml"
+++ /dev/null
-Erik Walthinsen <omega@temple-baptist.com>
-Matt Howell <mhowell@users.sourceforge.net>
-Brent Bradburn <bbradburn@users.sourceforge.net>
-Wim Taymans <wim.taymans@chello.be>
-Richard Boulton <richard@tartarus.org>
-Zaheer Abbas Merali <zaheerabbas at merali dot org>
-David I. Lehn <dlehn@users.sourceforge.net>
-Chris Emerson <chris@tartarus.org>
-Jens Thiele <karme@unforgettable.com>
-Thomas Nyberg <thomas@codefactory.se>
-Bastien Nocera <hadess@hadess.net>
-Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org>
-Thomas Vander Stichele <thomas@apestaart.org>
-Andy Wingo <wingo@pobox.com>
-Cameron Hutchison <camh@xdna.net>
-David Schleef <ds@schleef.org>
-Benjamin Otte <in7y118@public.uni-hamburg.de>
-Ronald Bultje <rbultje@ronald.bitfreak.net>
-Julien MOUTTE <julien@moutte.net>
-Jan Schmidt <thaytan@mad.scientist.com>
-Arwed v. Merkatz <v.merkatz@gmx.net>
+++ /dev/null
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-\f
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+++ /dev/null
-=== release 1.19.2 ===
-
-2021-09-23 01:34:00 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.19.2
-
-2021-09-21 15:05:58 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Strip trailing whitespace from x264's log messages
- x264 has linebreaks at the end of its log messages that we should
- ignore.
- Add G_GNUC_PRINTF to the callback to make sure GCC lets us forward the
- format string to another function marked as printf (g_strdup_vprintf)
- without triggering -Wformat-nonliteral.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-09-21 14:57:29 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add the func/line info to the log callback
- It looks awkward when it's missing. At least point us at the callback
- function.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-09-21 14:56:23 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Reduce log spam about bit depth support
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-07-28 11:49:16 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: drop B-frame on open gop
- Enhance open gop detection to drop B-frame which are invalid
- before the first reference frame.
- In stream such
- gst-integration-testsuites/medias/defaults/mxf/op2b-mpeg2-wave_hd.mxf,
- the two first frames must be dropped as we detect an open GOP situation
- but in another media, such as http://col.la/1920X1080IXDCAMEX5MIN, the
- first frames should not be dropped as we are in a closed GOP situation.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/84>
-
-2021-05-22 01:53:43 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstencoderbitrateprofilemanager.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rtspreal.c:
- * meson.build:
- Use g_memdup2() where available and add fallback for older GLib versions
- - x264 encoder bitrate profile manager: alloc size is based
- on existing allocation
- - asfdemux: change length var to 64-bit and check for G_MAXUINT
- - realmedia: opaque_data_len is read from 32 bits and then
- only subtracted upon.
- g_memdup() is deprecated since GLib 2.68 and we want to avoid
- deprecation warnings with recent versions of GLib.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/83>
-
-2021-06-01 15:28:40 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- Back to development
-
-=== release 1.19.1 ===
-
-2021-06-01 00:12:09 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * README:
- * RELEASE:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.19.1
-
-2018-02-26 17:28:25 +0100 David Fernandez <d.fernandezlop@gmail.com>
-
- * docs/gst_plugins_cache.json:
- * ext/x264/gstx264enc.c:
- x264enc: Change accepted caps width and height from [16, MAX] to [1, MAX]
- There are cases where the video size might be less than 16x16.
- This change allows the x264 encoder to accept this cases.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/44>
-
-2021-04-20 18:48:38 -0400 Doug Nazar <nazard@nazar.ca>
-
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- realmedia: Drop duplicate seek events.
- Also use seek seqnum for flush & segment events/messages.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
-
-2021-04-20 18:47:31 -0400 Doug Nazar <nazard@nazar.ca>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Drop duplicate seek events.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
-
-2021-03-29 13:41:07 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * gst/xingmux/gstxingmux.c:
- * gst/xingmux/gstxingmux.h:
- * gst/xingmux/plugin.c:
- xingmux: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:39:20 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/pnmsrc.h:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rademux.h:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtdepay.h:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rdtmanager.h:
- * gst/realmedia/realmedia.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- * gst/realmedia/rtspreal.c:
- * gst/realmedia/rtspreal.h:
- realmedia: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:23:51 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/dvdsub/gstdvdsubparse.h:
- dvdsub: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:15:32 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:11:23 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * gst/asfdemux/gstasf.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/gstasfelement.c:
- * gst/asfdemux/gstasfelements.h:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtspwms.c:
- * gst/asfdemux/meson.build:
- asfdemux: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:39:36 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:33:00 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- sidplay: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:31:26 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:28:28 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/dvdread/dvdreadsrc.c:
- * ext/dvdread/dvdreadsrc.h:
- dvdread: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:28:04 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/cdio/gstcdiocddasrc.h:
- cdio: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:39:46 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/amrwbdec/amrwb.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/amrwbdec/amrwbdec.h:
- amrwbdec: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:38:07 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/amrnb/amrnb.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbenc.h:
- amrnb: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:37:26 +0200 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- a52dec: allow per feature registration
- Split plugin into features including
- dynamic types which can be indiviually
- registered during a static build.
- More details here:
- https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
- https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-19 15:16:06 +1100 Matthew Waters <matthew@centricular.com>
-
- * ext/x264/gstencoderbitrateprofilemanager.c:
- gst: don't use volatile to mean atomic
- volatile is not sufficient to provide atomic guarantees and real atomics
- should be used instead. GCC 11 has started warning about using volatile
- with atomic operations.
- https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
- Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/78>
-
-2021-03-03 11:05:14 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Make sure we have enough data available when parsing audio/video packets
- Otherwise there will be out-of-bounds reads and potential crashes.
- Thanks to Natalie Silvanovich for reporting.
- Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/74>
-
-2020-11-04 18:44:07 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * meson.build:
- meson: Enable some MSVC warnings for parity with GCC/Clang
- This makes it easier to do development with MSVC by making it warn
- on common issues that GCC/Clang error out for in our CI configuration.
- Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/71>
-
-2020-10-31 04:52:14 +0900 Seungha Yang <seungha@centricular.com>
-
- * tests/check/elements/mpeg2dec.c:
- tests: mpeg2dec: Don't expect BT601 color space
- If it's required, mpeg2dec should set it explicitly.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/70>
-
-2020-09-08 17:30:39 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitlab-ci.yml:
- ci: include template from gst-ci master branch again
-
-2020-09-08 16:58:40 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- Back to development
-
-=== release 1.18.0 ===
-
-2020-09-08 00:05:39 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitlab-ci.yml:
- * ChangeLog:
- * NEWS:
- * README:
- * RELEASE:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.18.0
-
-2020-09-07 22:40:46 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * scripts/dist-translations.py:
- * scripts/meson.build:
- meson: dist pot file in tarball
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/69>
-
-2020-09-07 12:14:13 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264: Update for gst_video_transfer_function_*() function renaming
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/68>
-
-2020-08-21 10:35:11 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * docs/gst_plugins_cache.json:
- * ext/x264/gstx264enc.c:
- x264enc: Allow maximum quantizer value of 63 instead of 51
- QP_MAX_SPEC in x264 is set to 63 nowadays and in theory it allows even
- up to 81 (QP_MAX) but that seems to be outside the spec.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/67>
-
-=== release 1.17.90 ===
-
-2020-08-20 16:12:23 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.17.90
-
-2020-07-15 10:49:03 +0300 Jordan Petridis <jordan@centricular.com>
-
- * tests/check/elements/amrnbenc.c:
- amrnbenc: remove global variables
- gstcheck is declaring its own buffers glist which ends up
- overwritten, loks like the code meant to use that already
- gcc 10 is also complaining about this, but only on static
- builds for some reason
- ```
- FAILED: subprojects/gst-plugins-ugly/tests/check/elements_amrnbenc
- /usr/bin/ld: subprojects/gstreamer/libs/gst/check/libgstcheck-1.0.a(gstcheck.c.o):(.bss+0x38): multiple definition of `buffers'; subprojects/gst-plugins-ugly/tests/check/708af1f@@elements_amrnbenc@exe/elements_amrnbenc.c.o:(.bss+0x18): first defined here
- collect2: error: ld returned 1 exit status
- ```
- also remove unused var `current_buf`
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/62>
-
-2020-04-02 03:27:26 +1100 Jan Schmidt <jan@centricular.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Don't ignore the return value of gst_segment_do_seek()
- If gst_segment_do_seek() fails, fail the seek.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
-
-2020-04-01 19:34:30 +1100 Jan Schmidt <jan@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't ignore the return result of gst_segment_do_seek()
- gst_segment_do_seek() can fail, and our seek should fail
- accordingly.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
-
-2020-04-17 11:34:16 -0500 Derek Lesho <dlesho@codeweavers.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Only forward SEEK event when in push mode.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/48>
-
-2020-07-25 21:19:20 +0100 Stéphane Cerveau <scerveau@collabora.com>
-
- * meson.build:
- meson: add a plugin summary
- This summary displays a list of plugins which
- have been enabled.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/65>
-
-2018-10-03 13:32:11 +0200 Thibault Saunier <tsaunier@igalia.com>
-
- * ext/x264/GstX264Enc.prs:
- x264enc: Add a 'Zero Latency' profile
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/42>
-
-2020-07-22 17:31:37 +0200 Mathieu Duponchelle <mathieu@centricular.com>
-
- * tests/check/elements/x264enc.c:
- tests/x264enc: Don't declare variables inside the for loop header
- This is a C99 feature
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/64>
-
-2020-07-21 15:40:26 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * tests/check/elements/x264enc.c:
- tests: x264enc: Test formats are compatible with profile
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-01 16:11:09 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Separate high-10 video formats from 8-bit formats
- If downstream is constrained to an 8-bit profile, caps queries would
- still allow I420_10LE as input. If upstream actually sends such a caps
- event, downstream would fail to accept the high-10 profile.
- The following pipeline now fails earlier, during the negotiation phase
- instead of the stream start:
- gst-launch-1.0 videotestsrc ! video/x-raw,format=I420_10LE \
- ! x264enc ! video/x-h264,profile=constrained-baseline \
- ! fakesink
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-21 15:39:31 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * tests/check/elements/x264enc.c:
- tests: x264enc: Test 10-bit formats
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-21 15:33:57 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
- * tests/check/elements/x264enc.c:
- tests: x264enc: Test all (8-bit) video formats
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-06 22:13:55 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Forward downstream colorimetry and chroma-site upstream
- So that the value can be used by upstream converters when necessary.
- This whole logic has been copied from `__gst_video_element_proxy_caps`
- but those 2 fields were missing.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/60>
-
-2020-07-08 17:07:35 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * scripts/extract-release-date-from-doap-file.py:
- meson: set release date from .doap file for releases
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/61>
-
-2020-07-03 02:03:37 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- Back to development
-
-=== release 1.17.2 ===
-
-2020-07-03 00:29:25 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.17.2
-
-2020-06-23 00:03:04 +0200 Mathieu Duponchelle <mathieu@centricular.com>
-
- * docs/meson.build:
- meson: mark plugins cache target as always stale
-
-2020-06-19 22:55:28 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/gst_plugins_cache.json:
- doc: Stop documenting properties from parents
-
-2020-06-20 00:28:13 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- Back to development
-
-=== release 1.17.1 ===
-
-2020-06-19 19:20:41 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * docs/gst_plugins_cache.json:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.17.1
-
-2020-06-09 15:13:47 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/gst_plugins_cache.json:
- docs: Update plugins cache
-
-2020-06-08 09:37:10 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/gst_plugins_cache.json:
- docs: Update plugins cache
-
-2020-06-06 10:15:25 +0100 Philippe Normand <philn@igalia.com>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: update gst_type_mark_as_plugin_api() calls
- This was left behind in commit bc1ab5e8e00a7ed6ac5e192af9310bd2146e446a.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/55>
-
-2020-06-06 00:41:38 +0200 Mathieu Duponchelle <mathieu@centricular.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/x264/gstx264enc.c:
- plugins: uddate gst_type_mark_as_plugin_api() calls
-
-2020-06-03 18:38:28 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/meson.build:
- doc: Require hotdoc >= 0.11.0
-
-2020-05-27 16:02:02 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * docs/gst_plugins_cache.json:
- docs: Update gst_plugins_cache.json
-
-2020-05-30 23:16:50 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types
-
-2020-06-02 00:41:23 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: extract WM/PartOfSet disc number and count metadata
- Fixes #30
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
-
-2020-06-02 00:40:48 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: sprinkle some INDENT-OFF
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
-
-2020-05-27 14:42:20 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/check/meson.build:
- tests: fix meson test env setup to make sure we use the right gst-plugin-scanner
- If core is built as a subproject (e.g. as in gst-build), make sure to use
- the gst-plugin-scanner from the built subproject. Without this, gstreamer
- might accidentally use the gst-plugin-scanner from the install prefix if
- that exists, which in turn might drag in gst library versions we didn't
- mean to drag in. Those gst library versions might then be older than
- what our current build needs, and might cause our newly-built plugins
- to get blacklisted in the test registry because they rely on a symbol
- that the wrongly-pulled in gst lib doesn't have.
- This should fix running of unit tests in gst-build when invoking
- meson test or ninja test from outside the devenv for the case where
- there is an older or different-version gst-plugin-scanner installed
- in the install prefix.
- In case no gst-plugin-scanner is installed in the install prefix, this
- will fix "GStreamer-WARNING: External plugin loader failed. This most
- likely means that the plugin loader helper binary was not found or
- could not be run. You might need to set the GST_PLUGIN_SCANNER
- environment variable if your setup is unusual." warnings when running
- the unit tests.
- In the case where we find GStreamer core via pkg-config we use
- a newly-added pkg-config var "pluginscannerdir" to get the right
- directory. This has the benefit of working transparently for both
- installed and uninstalled pkg-config files/setups.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/53>
-
-2020-05-27 09:13:17 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: fix uninitialized warning
- Variable is always set in actual code paths but let's keep gcc happy.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/51>
-
-2020-05-12 05:07:47 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/sidplay/meson.build:
- * meson.build:
- meson: Pass native: false to add_languages()
- This is needed for cross-compiling without a build machine compiler
- available. The option was added in 0.54, but we only need this in
- Cerbero and it doesn't affect older versions so it should be ok.
- Will just cause a spurious warning.
- Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/50>
-
-2020-04-03 14:24:46 -0500 Derek Lesho <dlesho@codeweavers.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Always re-initialize metadata and global_metadata
- When transitioning from the PAUSED state, to the READY state, and back,
- metadata and global_metadata are left uninitialized, unlike when the
- demxuer transitions from NULL to READY, then to PAUSED. I have found
- this to cause a segmentation fault when fields in these structures are
- set.
-
-2020-04-02 16:18:00 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix 'ref' property range and default
- The --ref option indicate the size of the DPB, hence should be in the range of
- 0 to 16. This patch also fix the default to match x264enc default 3. This
- change isn't a behaviour change since we don't enforce the reported default.
-
-2020-03-19 18:05:43 -0300 Thibault Saunier <tsaunier@igalia.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Mark as converter
- It is able to do channel downminxing, so technically it is also a
- converter
- This is also important so validate knows about that when doing its
- checks
-
-2019-10-17 14:55:51 +0200 Thibault Saunier <tsaunier@igalia.com>
-
- * ext/x264/gstencoderbitrateprofilemanager.c:
- * ext/x264/gstencoderbitrateprofilemanager.h:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- * ext/x264/meson.build:
- x264enc: Respect Youtube bitrate recommandation
- Properly follow google recommendations[0] concerning bitrate when the
- user wants to use the youtube profile.
- [0]: https://support.google.com/youtube/answer/1722171?hl=en
-
-2019-12-18 16:09:42 +0100 Stéphane Cerveau <scerveau@collabora.com>
-
- * ext/dvdread/dvdreadsrc.c:
- ugly: use of g_value_dup_string
- Use helper method to get string from GValue.
-
-2019-12-14 18:49:54 +0700 Dmitry Shusharin <pmdvsh@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fixed codestyle
-
-2019-12-14 17:15:21 +0700 Dmitry Shusharin <pmdvsh@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: corrected em_data value in CEA-708 CC SEI message (fixes #28)
- Section 4.4 of CEA-708-D specification (table 2) requires all bits to be
- set inside em_data field. h264parse element (and possible third-party
- decoders such as libav) also follows this requirement.
- https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/28
-
-2019-06-09 00:30:53 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitignore:
- * .gitmodules:
- * Makefile.am:
- * README:
- * autogen.sh:
- * common:
- * configure.ac:
- * docs/.gitignore:
- * docs/version.entities.in:
- * ext/Makefile.am:
- * ext/a52dec/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/mpeg2dec/.gitignore:
- * ext/mpeg2dec/Makefile.am:
- * ext/sidplay/Makefile.am:
- * ext/x264/Makefile.am:
- * gst-libs/Makefile.am:
- * gst-libs/gst/Makefile.am:
- * gst/Makefile.am:
- * gst/asfdemux/.gitignore:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/realmedia/.gitignore:
- * gst/realmedia/Makefile.am:
- * gst/xingmux/Makefile.am:
- * m4/.gitignore:
- * m4/Makefile.am:
- * m4/README:
- * m4/a52.m4:
- * m4/aalib.m4:
- * m4/as-ffmpeg.m4:
- * m4/as-slurp-ffmpeg.m4:
- * m4/check-libheader.m4:
- * m4/freetype2.m4:
- * m4/gconf-2.m4:
- * m4/glib.m4:
- * m4/gst-fionread.m4:
- * m4/gst-ivorbis.m4:
- * m4/gst-sdl.m4:
- * m4/gst-shout2.m4:
- * m4/gst-sid.m4:
- * m4/gtk.m4:
- * m4/libfame.m4:
- * m4/libmikmod.m4:
- * m4/lrint.m4:
- * m4/lrintf.m4:
- * pkgconfig/.gitignore:
- * pkgconfig/Makefile.am:
- * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
- * po/.gitignore:
- * po/Makevars:
- * po/POTFILES:
- * tests/Makefile.am:
- * tests/check/.gitignore:
- * tests/check/Makefile.am:
- * tests/check/elements/.gitignore:
- * tests/check/generic/.gitignore:
- * tests/files/Makefile.am:
- Remove autotools build system
-
-2019-09-02 09:33:15 -0400 Aaron Boxer <aaron.boxer@collabora.com>
-
- * NEWS:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/realmedia/rdtjitterbuffer.c:
- * gst/realmedia/rtspreal.c:
- * hooks/pre-commit.hook:
- documentation: fix some typos
-
-2019-08-23 19:06:59 +0200 Mathieu Duponchelle <mathieu@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- docstrings: port ulinks to markdown links
-
-2019-08-23 16:25:25 +1000 Matthew Waters <matthew@centricular.com>
-
- * docs/meson.build:
- meson: Don't generate doc cache when no plugins are enabled
- Fixes gst-build with -Dauto-features=disabled -Dugly=enabled
-
-2019-07-15 21:56:57 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Port to color_{primaries,transfer,matrix}_to_iso
- ... with more color value mapping
-
-2019-07-15 22:38:35 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * tests/check/elements/x264enc.c:
- * tests/check/meson.build:
- tests: x264enc: Enable test on Windows
- ... with removal of pointless unistd.h dependency.
- Note that full dependency listing is required to run unit test
- executable binary on Windows uninstalled environment.
-
-2019-05-31 23:07:58 +0200 Niels De Graef <niels.degraef@barco.com>
-
- * configure.ac:
- * meson.build:
- meson: Bump minimal GLib version to 2.44
- This means we can use some newer features and get rid of some
- boilerplate code using the G_DECLARE_* macros.
- As discussed on IRC, 2.44 is old enough by now to start depending on it.
-
-2019-05-29 23:00:48 +0200 Mathieu Duponchelle <mathieu@centricular.com>
-
- * ext/sidplay/gstsiddec.cc:
- doc: remove xml from comments
-
-2019-05-25 14:19:54 +0200 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/asfheaders.h:
- asfdemux: remove some unused cruft in internal headers
-
-2019-05-16 09:15:52 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/gst_plugins_cache.json:
- * docs/meson.build:
- docs: Stop building the doc cache by default
- And update the cache
- Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/issues/36
-
-2019-05-13 22:54:16 -0400 Thibault Saunier <tsaunier@igalia.com>
-
- * docs/gst_plugins_cache.json:
- docs: Update plugins documentation cache
-
-2018-10-22 11:47:37 +0200 Thibault Saunier <tsaunier@igalia.com>
-
- * Makefile.am:
- * configure.ac:
- * docs/Makefile.am:
- * docs/all_index.md:
- * docs/gst_api_version.in:
- * docs/gst_plugins_cache.json:
- * docs/index.md:
- * docs/meson.build:
- * docs/plugins/.gitignore:
- * 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/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/gst-plugins-ugly-plugins.types:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * docs/sitemap.txt:
- * ext/a52dec/meson.build:
- * ext/amrnb/meson.build:
- * ext/amrwbdec/meson.build:
- * ext/cdio/meson.build:
- * ext/dvdread/meson.build:
- * ext/mpeg2dec/meson.build:
- * ext/sidplay/meson.build:
- * ext/x264/meson.build:
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/meson.build:
- * gst/dvdlpcmdec/meson.build:
- * gst/dvdsub/meson.build:
- * gst/realmedia/meson.build:
- * gst/xingmux/meson.build:
- * meson.build:
- * meson_options.txt:
- docs: Port documentation to hotdoc
-
-2018-10-22 11:47:32 +0200 Thibault Saunier <tsaunier@igalia.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/gstrtspwms.c:
- * gst/realmedia/gstrdtbuffer.h:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rtspreal.c:
- * gst/xingmux/gstxingmux.c:
- docs: Port all docstring to gtk-doc markdown
-
-2019-04-26 18:28:04 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/meson.build:
- meson: sidplay: use library() instead of shared_module()
- Like we do for other plugins, and also install a .pc file
- if we build the plugin statically.
-
-2019-04-22 12:51:33 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/dvdread/meson.build:
- * meson.build:
- meson: Always require the gmodule dependency
- It's needed by the dvdread plugin but also by the x264 plugin in certain
- circumstances. As it's part of GLib and always available, simply move it
- as a hard dependency to the top-level meson.build.
-
-2019-04-19 10:28:17 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * README:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * meson.build:
- Back to development
-
-=== release 1.16.0 ===
-
-2019-04-19 00:24:40 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * README:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.16.0
-
-2019-04-19 00:24:40 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2019-04-19 00:24:38 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- Update translations
-
-=== release 1.15.90 ===
-
-2019-04-11 00:28:18 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.15.90
-
-2019-04-11 00:28:18 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2019-03-27 21:59:45 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/x264/meson.build:
- meson: Add a subproject fallback for x264
-
-2019-03-10 19:33:31 +0000 Piotr Drąg <piotrdrag@gmail.com>
-
- * po/LINGUAS:
- Update LINGUAS
-
-2019-03-21 11:23:07 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: add -Wno-unused also to C++ args when gst debug system is disabled
-
-2019-03-04 09:08:07 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * meson.build:
- Back to development
-
-2019-02-28 11:03:31 +0100 Mathieu Duponchelle <mathieu@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: inject CEA708 closed captions
-
-=== release 1.15.2 ===
-
-2019-02-26 11:48:50 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.15.2
-
-2019-02-26 11:48:50 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2019-02-26 11:48:47 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/fur.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/ta.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update translations
-
-2019-02-22 23:54:30 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/gstsiddec.cc:
- sidplay: fix indentation
-
-2019-02-12 17:58:19 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: Work around GCC9 compiler warning
- It's technically true but not for this specific type.
- dvdreadsrc.c:394:65: error: taking address of packed member of ‘struct <anonymous>’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
- 394 | gst_dvd_read_src_make_clut_change_event (src, src->cur_pgc->palette);
- | ~~~~~~~~~~~~^~~~~~~~~
-
-2019-01-30 19:50:30 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * meson.build:
- meson: Add support orc fallback
- Allow fallback to orc subproject if any.
-
-2019-01-25 14:38:05 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264: Only enable dynamic loading code for x264 < 253
- Otherwise we get some compiler warnings:
- ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:200:1: warning: ‘unload_x264’ defined but not used [-Wunused-function]
- unload_x264 (GstX264EncVTable * vtable)
- ^~~~~~~~~~~
- ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:154:1: warning: ‘load_x264’ defined but not used [-Wunused-function]
- load_x264 (const gchar * filename)
- ^~~~~~~~~
-
-2019-01-25 14:36:55 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/meson.build:
- x264: Link to gmodule in the meson build if extra x264 libraries are provided
- We would dynamically load additional x264 libraries then.
-
-2019-01-17 17:29:38 +0200 Helmut Grohne <helmut@subdivi.de>
-
- * m4/gst-sid.m4:
- sid: Fix cross-compilation by using AC_TRY_LINK instead of AC_TRY_RUN
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917899
-
-=== release 1.15.1 ===
-
-2019-01-17 02:02:30 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.15.1
-
-2019-01-17 02:02:30 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2019-01-17 02:02:22 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * po/af.po:
- * po/ast.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/fur.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update translations
-
-2018-12-30 22:48:42 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * tests/check/generic/states.c:
- * tests/check/meson.build:
- tests: Enable test generic_states on Windows
- ... and drop needless unistd.h dependency
-
-2018-12-18 22:48:42 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * meson.build:
- * tests/check/meson.build:
- meson: Use join_paths() instead '/'
-
-2018-12-07 23:39:01 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * meson.build:
- * tests/check/meson.build:
- * tests/meson.build:
- tests: Enable unit test on Windows
- Remove hard-coded ':' whitelist separator since it varies with OS
-
-2018-12-05 17:24:25 -0300 Thibault Saunier <tsaunier@igalia.com>
-
- * common:
- Automatic update of common submodule
- From ed78bee to 59cb678
-
-2018-11-24 19:28:19 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * meson.build:
- meson: Specify encoding to UTF-8 when building with MSVC
- Use build arguments consistent with core and -base. This can also
- remove noisy "C4819" warning of non-us locale MSVC.
-
-2018-11-12 13:30:59 +0200 Jordan Petridis <jordan@centricular.com>
-
- * .gitlab-ci.yml:
- Add Gitlab CI configuration
- This commit adds a .gitlab-ci.yml file, which uses a feature
- to fetch the config from a centralized repository. The intent is
- to have all the gstreamer modules use the same configuration.
- The configuration is currently hosted at the gst-ci repository
- under the gitlab/ci_template.yml path.
- Part of https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/29
-
-2018-11-05 05:38:33 +0000 Matthew Waters <matthew@centricular.com>
-
- * .gitmodules:
- Update common submodule location
- Remove the git directory
-
-2018-11-05 12:52:46 +0800 Haihao Xiang <haihao.xiang@intel.com>
-
- * .gitmodules:
- * gst-plugins-ugly.doap:
- Clone the code from gitlab
- This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/22
-
-2018-10-08 20:45:52 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: use new 'python' module instead of deprecated
- https://github.com/mesonbuild/meson/pull/4169
-
-2018-09-22 17:33:35 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/check/elements/x264enc.c:
- tests: x264enc: fix leak in unit test
- The static pad templates weren't static so their
- contents were leaked. valgrind was not happy.
- Also rename confusing define.
-
-2018-09-18 21:43:14 +0900 Seungha Yang <seungha.yang@navercorp.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Avoid format decision per frame
- Avoid switch/case per frame for format decision and detect the format
- only if where it could be changed. Note that, whenever encoder->input_state
- is changed, gst_x264_enc_init_encoder() is called.
- https://bugzilla.gnome.org/show_bug.cgi?id=797164
-
-2018-09-19 12:00:32 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: add glib-checks option to disable API guards and such
- We want this enabled by default, also in releases, but people
- may want to disable this for performance-critical workloads or
- on embedded devices.
-
-2018-09-19 11:58:54 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson_options.txt:
- meson: fix missing closing bracket in option descriptions
-
-2018-08-18 21:22:42 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- * tests/meson.build:
- meson: add option to disable tests
-
-2018-08-18 21:20:20 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: clean up some cruft
-
-2018-08-18 21:15:23 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: add options to disable gobject cast checks and glib asserts
- ... and define G_DISABLE_DEPRECATED for development versions,
- like we do in autotools.
-
-2018-08-16 13:17:58 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Set bit depth for x264 ≥ 153
- https://bugzilla.gnome.org/show_bug.cgi?id=796975
-
-2018-08-16 14:55:04 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Remove superfluous x264_param_default
- https://bugzilla.gnome.org/show_bug.cgi?id=796973
-
-2018-07-27 19:29:01 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/a52dec/meson.build:
- * ext/amrnb/meson.build:
- * ext/amrwbdec/meson.build:
- * ext/cdio/meson.build:
- * ext/dvdread/meson.build:
- * ext/mpeg2dec/meson.build:
- * ext/sidplay/meson.build:
- * ext/x264/meson.build:
- * gst/meson.build:
- * meson.build:
- * meson_options.txt:
- Add feature options for all plugins
- The only automagic dependency left is C++ availability detection.
- https://bugzilla.gnome.org/show_bug.cgi?id=795107
-
-2018-07-25 17:17:21 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: Convert common options to feature options
- The rest will be converted later, these are necessary for gst-build to
- set options correctly.
- https://bugzilla.gnome.org/show_bug.cgi?id=795107
-
-2018-06-11 14:43:20 +0200 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Remove 0.10 code
- This was used to "close" a segment. It's no longer needed anymore
- in 1.x (it was essentially sending the same thing again)
-
-2018-05-11 09:21:09 +0200 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Only send flush event on seeking flushes
- And not on all the time
-
-2018-05-21 11:54:50 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: add 'nls' option to disable translations
- And enable by default. Was implicitly disabled because
- ENABLE_NLS was not defined. Also use .set_quoted().
-
-2018-05-05 19:32:00 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: Update option names to omit disable_ and with- prefixes
- Also yield common options to the outer project (gst-build in our case)
- so that they don't have to be set manually.
-
-2018-05-04 22:54:01 +1000 Jan Schmidt <jan@centricular.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Take the highlight event from the structure.
- Don't use GST_EVENT_TIMESTAMP to transfer any PTS
- associated with a highlight event, instead store
- it in the event structure directly, as
- GstEvent::timestamp will disappear in GStreamer 2.0
- https://bugzilla.gnome.org/show_bug.cgi?id=761477
-
-2018-04-24 14:06:20 -0400 Xavier Claessens <xavier.claessens@collabora.com>
-
- * ext/a52dec/meson.build:
- * ext/amrnb/meson.build:
- * ext/amrwbdec/meson.build:
- * ext/cdio/meson.build:
- * ext/dvdread/meson.build:
- * ext/mpeg2dec/meson.build:
- * ext/x264/meson.build:
- * gst/asfdemux/meson.build:
- * gst/dvdlpcmdec/meson.build:
- * gst/dvdsub/meson.build:
- * gst/realmedia/meson.build:
- * gst/xingmux/meson.build:
- * meson.build:
- Meson: Generate pc file for all plugins in ugly
- https://bugzilla.gnome.org/show_bug.cgi?id=794568
-
-2018-04-25 10:59:11 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: use -Wl,-Bsymbolic-functions where supported
- Just like the autotools build.
-
-2018-04-16 20:13:05 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Set the stream-format field of H264 streams
- If we have codec_data it will be AVC, otherwise assume byte-stream.
-
-2018-04-16 10:53:12 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * README:
- * common:
- Automatic update of common submodule
- From 3fa2c9e to ed78bee
-
-2018-03-20 09:26:15 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * meson.build:
- Back to development
-
-=== release 1.14.0 ===
-
-2018-03-19 20:19:43 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.14.0
-
-2018-03-19 20:19:43 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-=== release 1.13.91 ===
-
-2018-03-13 19:17:58 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.13.91
-
-2018-03-13 19:17:58 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2018-03-12 20:19:19 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- docs: plugins: minor addition to plugins list
-
-2018-03-08 10:12:16 +0100 Michael Tretter <m.tretter@pengutronix.de>
-
- * configure.ac:
- configure.ac: enable largefile support if possible
- https://bugzilla.gnome.org/show_bug.cgi?id=793103
-
-=== release 1.13.90 ===
-
-2018-03-03 22:24:28 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.13.90
-
-2018-03-03 22:24:28 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- Update docs
-
-2018-03-01 19:07:42 +0100 Mathieu Duponchelle <mathieu@centricular.com>
-
- * meson.build:
- * tests/check/meson.build:
- meson: enable more warnings
-
-2018-02-28 10:07:13 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix build with newer x264 with support for multiple bit depths
- libx264 used to be built for one specific bit depth, and if we
- wanted to support multiple bit depths we would have to dynamically
- load the right .so from different paths. That has changed now, and
- libx264 can include support for multiple depths in the same lib,
- so we don't need to do the dlopen() dance any more. We'll keep
- the vtable stuff around until we can drop support for older x264.
- gstx264enc.c:2927:36: error: ‘x264_bit_depth’ undeclared
- https://bugzilla.gnome.org/show_bug.cgi?id=792111
-
-2018-02-27 15:42:32 +0100 Alicia Boya García <aboya@igalia.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add format example for option-string
- https://bugzilla.gnome.org/show_bug.cgi?id=793879
-
-2018-02-21 19:47:36 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*
- add_global_arguments() can't be used in subprojects. It's
- entirely possible that -ugly is a subproject but gstreamer
- is picked up from an installed location, so we should
- really use add_project_arguments() in both cases.
-
-2018-02-15 19:44:21 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * meson.build:
- Back to development
-
-=== release 1.13.1 ===
-
-2018-02-15 17:10:13 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * NEWS:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.13.1
-
-2018-02-15 17:07:42 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-sid.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- docs: update plugin docs
-
-2018-02-15 14:52:29 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * po/id.po:
- * po/it.po:
- * po/nl.po:
- * po/sv.po:
- po: update translations
-
-2018-02-08 19:09:45 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: make version numbers ints and fix int/string comparison
- WARNING: Trying to compare values of different types (str, int).
- The result of this is undefined and will become a hard error
- in a future Meson release.
-
-2018-02-04 12:03:36 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- autotools: use -fno-strict-aliasing where supported
- https://bugzilla.gnome.org/show_bug.cgi?id=769183
-
-2018-01-30 20:34:52 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/meson.build:
- * meson.build:
- meson: use -fno-strict-aliasing where supported
- https://bugzilla.gnome.org/show_bug.cgi?id=769183
-
-2018-01-03 16:02:08 +0100 Edward Hervey <edward@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- amrnbdec: Don't use g_return_*_if_fail() on data parsing
- Those functions can be disabled. Instead just use the (existing)
- function.
- CID #1427121
-
-2018-01-03 16:02:08 +0100 Edward Hervey <edward@centricular.com>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: Don't use g_return_*_if_fail() on data parsing
- Those functions can be disabled. Instead just use the (existing)
- function.
- CID #1427093
-
-2017-12-26 13:51:37 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: skip translations if gettext is not available
-
-2017-12-14 14:49:17 +1100 Matthew Waters <matthew@centricular.com>
-
- * common:
- Automatic update of common submodule
- From e8c7a71 to 3fa2c9e
-
-2017-12-07 15:52:58 +0900 Justin Kim <justin.kim@collabora.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: add 'insert-vui' property for users to choose
- VUI(Video Usability Information) parameters should be set
- according to the specification. However, some of the existing
- hardware decoders refuse to decode in certain combinations of
- the resolution and VUI parameters. To support the legacy
- decoders, this patch provides 'insert-vui' to skip the settings.
- https://bugzilla.gnome.org/show_bug.cgi?id=791331
-
-2017-12-06 13:01:39 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c:
- cdio: Fix build with cdio >= 1.0
- LIBCDIO_VERSION_NUM was defined as e.g. 94 for 0.94 but is now defined
- as 1 for 1.0. We had various checks for < 83, which of course succeeded
- now although we are >= 0.83.
- Fix this by checking for < 76 (0.76) too, as that is the minimum version
- we currently support and everything < 76 is going to be >= 1.0.
- https://bugzilla.gnome.org/show_bug.cgi?id=791301
-
-2017-11-27 20:11:56 +1100 Matthew Waters <matthew@centricular.com>
-
- * common:
- Automatic update of common submodule
- From 3f4aa96 to e8c7a71
-
-2017-11-26 15:05:14 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- configure: actually use -fvisibility if supported
- Fix up for previous commit.
-
-2017-11-26 14:49:21 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- autotools: stop controlling symbol visibility with -export-symbols-regex
- Instead, use -fvisibility=hidden and explicit exports via GST_EXPORT.
- This should result in consistent behaviour for the autotools and
- Meson builds.
-
-2017-11-13 11:13:30 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix prerolling files with "empty" streams
- This is a regression that was introduced by
- commit 1803b3c18530cb0100d140c2b8e49a8dfe41f941
- " asfdemux: Add support for dvr-ms"
- The problem is that some files/streams might contain stream definition
- but there is no actual packets for those streams.
- This was used to "define" streams with different bitrates for example.
- The first_ts calculation resulted in never ever finding a valid first_ts
- since some streams were empty, and therefore never "activating" itself.
- Instead of that we first check if we are prerolled. And if we are we
- unconditionally get the "first_ts"
- The preroll check has been adapted to check whether streams of
- each defined type (i.e. audio/video/sub) has been prerolled. This solves
- the problem of having different streams of a particular type where only
- one stream actually has data.
-
-2017-11-13 11:09:31 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Store the stream type in streams
- The field was present but never set :)
-
-2017-09-26 10:11:24 +0530 Ponnam Srinivas <p.srinivas@samsung.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Fix out buffer memory leak in error code path
- https://bugzilla.gnome.org/show_bug.cgi?id=788119
-
-2017-09-15 17:06:58 +0530 Deepak Srivastava <srivastava.d@samsung.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix buffer memory leak in error code path
- https://bugzilla.gnome.org/show_bug.cgi?id=787817
-
-2017-09-07 13:27:26 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Unmap output video frame if copying to it fails
- https://bugzilla.gnome.org/show_bug.cgi?id=787398
-
-2017-08-31 11:33:14 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
-
- * gst/realmedia/asmrules.c:
- realmedia: fix leak in asmrules error code path
- https://bugzilla.gnome.org/show_bug.cgi?id=787056
-
-2017-08-30 18:41:28 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
-
- * gst/realmedia/rtspreal.c:
- realmedia: Fix Memory leak in error case
- https://bugzilla.gnome.org/show_bug.cgi?id=787014
-
-2017-08-26 13:02:26 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/files/Makefile.am:
- * tests/files/cbr_stream.mp3:
- * tests/files/stream.mp2:
- * tests/files/vbr_stream.mp3:
- tests: remove files that were used by the mpg123 unit test
-
-2017-08-26 09:35:20 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- * REQUIREMENTS:
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-twolame.xml:
- * ext/Makefile.am:
- * ext/meson.build:
- * ext/twolame/Makefile.am:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/twolame/gsttwolamemp2enc.h:
- * ext/twolame/meson.build:
- * po/POTFILES.in:
- Remove twolame plugin, moved to -good
- https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-26 08:51:01 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- * REQUIREMENTS:
- * configure.ac:
- * 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-lame.xml:
- * ext/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- * ext/lame/meson.build:
- * ext/lame/plugin.c:
- * ext/meson.build:
- * m4/Makefile.am:
- * m4/as-liblame.m4:
- * po/POTFILES.in:
- * tests/check/Makefile.am:
- * tests/check/gst-plugins-ugly.supp:
- * tests/check/meson.build:
- * tests/check/pipelines/.gitignore:
- * tests/check/pipelines/lame.c:
- Remove lame plugin, moved to -good
- https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-20 14:31:02 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- * REQUIREMENTS:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * ext/Makefile.am:
- * ext/meson.build:
- * ext/mpg123/Makefile.am:
- * ext/mpg123/gstmpg123audiodec.c:
- * ext/mpg123/gstmpg123audiodec.h:
- * ext/mpg123/meson.build:
- * tests/check/Makefile.am:
- * tests/check/elements/.gitignore:
- * tests/check/elements/mpg123audiodec.c:
- * tests/check/meson.build:
- Remove mpg123 plugin, moved to -good
- https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-17 12:23:43 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * README:
- * common:
- Automatic update of common submodule
- From 48a5d85 to 3f4aa96
-
-2017-08-10 15:48:27 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/meson.build:
- sidplay: hide symbols in meson for this c++ plugin too
- Keep things local, as this is the only c++ plugin
- in ugly currently.
-
-2017-08-10 11:55:58 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: don't export symbols by default
- Only plugin entry points should be exported.
- Currently plugins might export more symbols with
- the meson build, as we don't have the exports
- regexp there that we pass to libtool.
-
-2017-08-09 19:31:56 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: add FIXME note for future configuration cleanup
-
-2017-07-25 13:36:17 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: Fix string memory leak
- https://bugzilla.gnome.org/show_bug.cgi?id=785388
-
-2017-07-15 15:01:09 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix indentation
-
-2017-07-15 14:59:42 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix caps leak
- Move creation of supported sink pads into class_init function
- which is also the only place where they're used. Unref the
- caps when no longer needed, the pad template will take its
- own ref.
- https://bugzilla.gnome.org/show_bug.cgi?id=784982
-
-2017-07-15 14:57:49 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123audiodec: fix caps leak
- The pad template takes its own ref, so we should unref the caps.
- https://bugzilla.gnome.org/show_bug.cgi?id=784982
-
-2017-07-15 12:49:19 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * po/meson.build:
- meson: po: use glib preset and read language list from LINGUAS
- Supported since meson 0.37, so we can use it now.
-
-2017-07-11 14:21:41 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpmdec: Fix overrun from coverity
- CID #1414801
-
-2017-07-07 11:58:36 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: find python3 via python3 module
- https://bugzilla.gnome.org/show_bug.cgi?id=783198
-
-2017-07-05 18:58:35 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: Added support for Blu-Ray audio
- https://bugzilla.gnome.org/show_bug.cgi?id=784552
-
-2017-06-27 11:48:08 +0200 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: More index handling
- In the same vein as the previous commit, the end of the file might have been
- cut and therefore contains bogus data.
- If the object is too short, consider it as garbage and return a non-fatal
- flow.
- Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
-
-2017-06-27 10:25:42 +0200 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux; Don't assume index is present at end of file
- Some files have garbage at the end of the file, don't error out if we don't
- find the index there.
- Reverts back to previous behaviour (where corrupted/missing indexex were
- not a fatal error).
- Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
-
-2017-06-26 09:49:22 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: fix with-package-name option
- https://bugzilla.gnome.org/show_bug.cgi?id=784082
-
-2017-06-14 21:08:31 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: adjust segment start to a keyframe ts only for a KEYUNIT seek
- ... which is how it has always been until changed coincidentally in commit
- 9ee60482b265481d0e3b397044f560eb736e5429 which then prompted commit
- dba14178ce6115b406ef86e356b1201463af5e2a to consider ACCURATE as well
- to compensate for that in a lateral way
-
-2017-06-14 20:56:16 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: relax bframes upper limit count to maximum encoder supported
-
-2017-06-23 23:44:18 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/meson.build:
- meson: don't error out if sidplay library is not found
-
-2017-06-23 18:33:24 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/meson.build:
- * ext/sidplay/meson.build:
- meson: build sid plugin
- https://bugzilla.gnome.org/show_bug.cgi?id=784135
-
-2017-06-21 21:23:29 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
-
- * ext/x264/gstx264enc.c:
- x264: fix memory leak
- When the allowed caps are the same of template caps the allowed
- caps are not unrefed, leaking memory.
- https://bugzilla.gnome.org/show_bug.cgi?id=784060
-
-2017-06-07 12:08:43 -0400 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * tests/check/meson.build:
- meson: Do not use path separator in test names
- Avoiding warnings like:
- WARNING: Target "elements/audioamplify" has a path separator in its name.
-
-2017-06-06 21:48:19 -0700 Thiago Santos <thiagossantos@gmail.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix checking for header objects
- The if 'and' condition was mixed up with the last parameter of the
- function and would lead to wrong results
-
-2017-05-21 17:49:59 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- * config.h.meson:
- * meson.build:
- meson: don't need config.h.meson any longer
-
-2017-05-20 14:58:37 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * meson_options.txt:
- meson: add options to set package name and origin
- https://bugzilla.gnome.org/show_bug.cgi?id=782172
-
-2017-05-19 20:05:02 +0200 Jan Schmidt <jan@centricular.com>
-
- * tests/check/meson.build:
- Add gstvideo_dep for meson mpeg2dec test build
-
-2017-05-19 18:59:17 +0200 Jan Schmidt <jan@centricular.com>
-
- * tests/check/Makefile.am:
- * tests/check/elements/mpeg2dec.c:
- mpeg2dec test: Fix expected output caps
- In the absence of explicit info, video decoders
- now output mono multiview caps by default, so make
- the expected caps match that
-
-2017-05-16 14:07:56 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * config.h.meson:
- * configure.ac:
- * ext/a52dec/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * ext/mpg123/Makefile.am:
- * ext/sidplay/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/x264/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/realmedia/Makefile.am:
- * gst/xingmux/Makefile.am:
- Remove plugin specific static build option
- Static and dynamic plugins now have the same interface. The standard
- --enable-static/--enable-shared toggle are sufficient.
-
-2017-05-09 09:45:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/sidplay/gstsiddec.cc:
- sid: Make plugin name match plugin file name
-
-2017-05-04 18:59:14 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- * meson.build:
- Back to development
-
-=== release 1.12.0 ===
-
-2017-05-04 15:39:25 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.12.0
-
-2017-05-04 15:12:50 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/fur.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2017-05-04 13:47:56 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-=== release 1.11.91 ===
-
-2017-04-27 17:33:23 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.11.91
-
-2017-04-27 16:08:13 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/fur.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2017-04-27 15:29:48 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/LINGUAS:
- * po/fur.po:
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2017-04-27 12:42:34 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/x264/gstx264enc.h:
- x264: Use __declspec(dllimport) with MinGW too
- x264.h says this isn't needed with MinGW, but it looks like it is.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=779249
-
-2017-04-24 20:28:15 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * common:
- Automatic update of common submodule
- From 60aeef6 to 48a5d85
-
-2017-04-10 23:49:25 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From 39ac2f5 to 60aeef6
-
-=== release 1.11.90 ===
-
-2017-04-07 16:34:22 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * meson.build:
- Release 1.11.90
-
-2017-04-07 15:33:31 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2017-04-07 15:07:50 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2017-03-28 14:18:38 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * tests/check/meson.build:
- meson: test: Fix environment object usage
- And use get_pkgconfig_variable instead of calling pkg-config ourself
-
-2017-03-20 17:06:16 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * REQUIREMENTS:
- REQUIREMENTS: update for mad mp3 decoder removal
- https://bugzilla.gnome.org/show_bug.cgi?id=776140
-
-2017-03-12 11:57:23 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * Makefile.am:
- Add libgstrmdemux.so to cruft list
- This was renamed to libgstrealmedia.so, this fixes helps fixing
- uninstalled setup.
- https://bugzilla.gnome.org/show_bug.cgi?id=779344
-
-2017-03-04 11:09:33 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * docs/plugins/inspect/plugin-realmedia.xml:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/meson.build:
- Rename plugin filenames to match plugin names
- libgstrmdemux.so becomes libgstrealmedia.so
- https://bugzilla.gnome.org/show_bug.cgi?id=779344
-
-2017-03-01 23:00:55 +1100 Jan Schmidt <jan@centricular.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix latency calculation
- The latency calculation was missing a scaling by GST_SECOND,
- so it would always report a tiny latency. Fix that.
- Spotted by Guillaume Desmottes.
-
-2017-02-27 20:55:34 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix compilation with gcc 7
- gstasfdemux.c: In function 'gst_asf_demux_parse_stream_object':
- gstasfdemux.c:3001:39: error: '<<' in boolean context, did you mean '<' ? [-Werror=int-in-bool-context]
- is_encrypted = ! !((flags & 0x8000) << 15);
- ~~~~~~~~~~~~~~~~~~^~~~~~
- https://bugzilla.gnome.org/show_bug.cgi?id=779329
-
-2017-02-25 21:48:46 -0300 Edgard Lima <edgard.lima@gmail.com>
-
- * ext/amrwbdec/amrwb.c:
- * ext/amrwbdec/amrwbdec.h:
- Update Edgard Lima's email
- https://bugzilla.gnome.org/show_bug.cgi?id=779230
-
-2017-02-24 15:59:47 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * meson.build:
- meson: Update version
-
-2017-02-24 15:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.11.2 ===
-
-2017-02-24 15:07:54 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- Release 1.11.2
-
-2017-02-24 12:57:00 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2017-02-24 12:45:43 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2017-02-14 19:56:13 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- meson: dist meson build files
- Ship meson build files in tarballs, so people who use tarballs
- in their builds can start playing with meson already.
-
-2017-02-01 03:08:10 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264: Initialize function vtable in plugin_init()
- These values are defined in the x264.h header and are not const on
- Windows due to the way DLLs work. See:
- https://msdn.microsoft.com/en-us/library/619w14ds.aspx
- https://msdn.microsoft.com/en-us/library/zw3za17w.aspx
- https://bugzilla.gnome.org/show_bug.cgi?id=777903
-
-2017-01-31 13:50:21 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Check that we have enough data available before parsing bool/uint extended content descriptors
- https://bugzilla.gnome.org/show_bug.cgi?id=777955
-
-2017-01-30 15:39:59 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Reset number of languages to 0 when freeing the array because of errors
- Otherwise we will happily index into the array at NULL if the requested
- index is smaller than the number of languages that were previously
- allocated.
- https://bugzilla.gnome.org/show_bug.cgi?id=777937
-
-2017-01-24 19:24:10 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * tests/check/meson.build:
- meson: Properly use ':' for defining keywords
-
-2017-01-13 12:39:09 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: bump version
-
-2017-01-12 16:32:52 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.11.1 ===
-
-2017-01-12 16:10:25 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- Release 1.11.1
-
-2017-01-12 14:45:56 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2017-01-12 14:37:02 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/hr.po:
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2016-12-16 16:52:00 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * ext/amrnb/meson.build:
- * ext/x264/meson.build:
- * meson.build:
- meson: Install presets files
-
-2015-06-26 20:22:47 +0200 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
-
- * ext/x264/GstX264Enc.prs:
- x264enc: Add a youtube preset.
- Based on https://support.google.com/youtube/answer/1722171
- https://bugzilla.gnome.org/show_bug.cgi?id=751560
-
-2016-12-28 10:42:15 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * config.h.meson:
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-mad.xml:
- * ext/Makefile.am:
- * ext/mad/Makefile.am:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- * ext/mad/meson.build:
- * ext/meson.build:
- mad: remove plugin
- We have better replacements such as the mpg123 plugin.
- The main reason to keep around mad was for 'freeform'
- mp3 support, but mpg123 can handle those too nowadays.
- Also, mad is GPL and has been unmaintained for years.
- https://bugzilla.gnome.org/show_bug.cgi?id=776140
-
-2016-12-16 19:07:51 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- * configure.ac:
- * win32/MANIFEST:
- * win32/common/.gitignore:
- * win32/common/config.h:
- win32: remove platform-specific copies of generated headers
- Unused and no longer needed.
-
-2016-12-14 10:24:26 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitignore:
- * Makefile.am:
- * configure.ac:
- * gst-plugins-ugly.spec.in:
- Remove generated .spec file
- Likely extremely bitrotten, and we should not ship this anyway.
-
-2016-12-09 17:45:34 -0300 Thibault Saunier <tsaunier@gnome.org>
-
- * meson.build:
- meson: Support building without Gst debug
-
-2016-12-03 08:19:44 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * README:
- * common:
- Automatic update of common submodule
- From f980fd9 to 39ac2f5
-
-2016-12-02 14:06:21 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix memory leak of payload extensions for unusable/unsupported streams
- https://bugzilla.gnome.org/show_bug.cgi?id=775515
-
-2016-11-30 18:11:30 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add information for mixed mode
- https://bugzilla.gnome.org/show_bug.cgi?id=775411
-
-2016-11-30 17:30:33 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
-
- * ext/x264/gstx264enc.c:
- x264enc: Correctly pass interlacing/TFF information
- Give the interlacing information correctly to the encoder. Also parse
- TFF/BFF information from the caps and pass it too.
- https://bugzilla.gnome.org/show_bug.cgi?id=775411
-
-2016-11-28 15:14:18 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
-
- * ext/x264/gstx264enc.c:
- x264enc: Auto-detect interlace mode from caps
- If the caps are interlaced, interlacing is always enabled on the
- encoder. If the interlace-mode field is missing or if it's progressive,
- the encoder uses the "interlaced" property.
- https://bugzilla.gnome.org/show_bug.cgi?id=775228
-
-2016-11-26 11:20:51 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitmodules:
- common: use https protocol for common submodule
- https://bugzilla.gnome.org/show_bug.cgi?id=775110
-
-2016-11-25 23:51:00 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/realmedia/realhash.c:
- real: Fix compiler warnings with latest clang
- realhash.c:295:11: error: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Werror,-Wconstant-conversion]
- *buf1 = 128;
- ~ ^~~
- https://bugzilla.gnome.org/show_bug.cgi?id=775112
-
-2016-11-25 12:41:03 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Allow 64bit sizes for DATA object
- we *can* have files greater than 4GB, any other object should be
- smaller than that
-
-2016-11-25 10:07:35 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Add sanity check for asf_stream_audio
- We should have enough bytes for the specified codec_data
- https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-25 09:45:04 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Add sanity checks when reading asf_stream_video_format
- It should report a size of at least 40 bytes
- Also check for the size of the remaining data (i.e. codec_data)
- https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-25 09:44:05 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Add check for invalid/corrupt asf object
- An asf object can't realistically be bigger than 2**32 bytes.
- If it reports a size bigger than that, consider it corrupt and properly
- propagate the error back.
- https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-22 17:14:44 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Handle EOS in push-mode on corrupted files
- It is possible no streams were activated when receiving EOS, if so
- handled it as if we hadn't seen the header
- https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:56:04 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: FILE headers are mandatory in the header
- As per the specification, also avoids ending up trying to play a
- file with plenty of un-initialized values.
- https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:54:26 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Handle incomplete header in pull mode
- pulling headers is meant to complete as a whole. If we don't have
- enough data, it's an error.
- Avoids pipeline hangs on corrupted files
- https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:22:49 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Handle issues with "empty" files
- In some corrupted files, we could end up with no actual streams
- being exposed.
- In those cases, make sure we properly propagate the failure all
- the way to the loop function. This avoids ending up in cases where
- we are neither EOS'd nor ERROR'd out from a pipeline point of view.
- https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-20 20:54:25 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: dvd-spu-clut-change is a sticky custom event
-
-2016-11-17 17:20:03 -0800 Scott D Phillips <scott.d.phillips@intel.com>
-
- * meson.build:
- meson: Add ignored warnings for MSVC
- https://bugzilla.gnome.org/show_bug.cgi?id=774656
-
-2016-11-11 14:15:17 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- * ext/x264/Makefile.am:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- * ext/x264/meson.build:
- * meson_options.txt:
- x264enc: Add configure parameter to specify additional x264 libraries with e.g. different depth configuration
- x264 has to be compiled specifically for a target bit depth.
- Distributions currently ship various libraries in their packages, with
- different bit depths.
- This change now allows to provide them all at configure time and have
- the x264enc element dynamically switch between them based on the bit
- depth of the input format.
- https://bugzilla.gnome.org/show_bug.cgi?id=763297
-
-2016-11-01 18:09:25 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: update version
-
-=== release 1.11.0 ===
-
-2016-11-01 18:53:15 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.10.0 ===
-
-2016-11-01 18:05:31 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.10.0
-
-2016-11-01 17:54:16 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-11-01 17:43:01 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2016-10-25 08:54:52 -0700 Scott D Phillips <scott.d.phillips@intel.com>
-
- * meson.build:
- * tests/meson.build:
- meson: Don't depend on gstreamer-check-1.0 on windows
- https://bugzilla.gnome.org/show_bug.cgi?id=773114
-
-2016-10-25 10:51:08 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * meson.build:
- * tests/check/meson.build:
- * tests/meson.build:
- Revert "meson: move gstreamer-check-1.0 dependency to tests/check"
- This reverts commit 0555c09607e548b6c45d029ab31dbb3042195ae3.
- Does not actually work. See:
- https://bugzilla.gnome.org/show_bug.cgi?id=773114#c31
-
-2016-10-24 00:35:23 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/check/meson.build:
- meson: fix build outside of gst-all
-
-2016-10-21 00:47:14 -0700 Scott D Phillips <scott.d.phillips@intel.com>
-
- * meson.build:
- * tests/check/meson.build:
- * tests/meson.build:
- meson: move gstreamer-check-1.0 dependency to tests/check
- https://bugzilla.gnome.org/show_bug.cgi?id=773114
-
-2016-10-15 22:20:05 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * meson.build:
- meson: Don't set c_std to gnu99
- Use the default for each compiler on every platform instead. This
- improves our compatibility with compilers that don't have gnu99 as
- a c_std.
-
-2016-10-04 18:06:09 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * meson.build:
- * tests/check/getpluginsdir:
- * tests/check/meson.build:
- meson: Make use of new environment object and set plugin path to builddir
- Workaround source_root being the root directory of all projects
- in the subproject case and remove now unneeded getpluginsdir
- Bump meson requirement to 0.35
-
-2016-09-30 11:35:40 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * hooks/pre-commit.hook:
- * meson.build:
- * tests/check/getpluginsdir:
- meson: Setup pre commit hook and fix getpluginsdir for standalone case
-
-2016-09-30 11:41:28 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- meson: update version
-
-=== release 1.9.90 ===
-
-2016-09-30 13:03:26 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.9.90
-
-2016-09-30 12:23:17 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-09-30 11:44:22 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2016-09-29 12:39:34 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Set colorimetry and chroma-site information
- https://bugzilla.gnome.org/show_bug.cgi?id=772159
-
-2016-09-24 09:08:00 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * po/meson.build:
- meson: hook up translations
-
-2016-09-24 08:59:55 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * meson.build:
- * tests/check/getpluginsdir:
- * tests/check/meson.build:
- * tests/meson.build:
- meson: hook up unit tests
-
-2016-09-14 11:30:58 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- configure: Depend on gstreamer 1.9.2.1
-
-2016-09-10 20:51:36 +1000 Jan Schmidt <jan@centricular.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From b18d820 to f980fd9
-
-2016-09-10 09:54:15 +1000 Jan Schmidt <jan@centricular.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From f49c55e to b18d820
-
-2016-09-05 12:22:56 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * meson.build:
- meson: Bump version to 1.9.2
-
-2016-09-01 12:28:57 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.9.2 ===
-
-2016-09-01 12:28:45 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.9.2
-
-2016-09-01 11:24:13 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- po: Update translations
-
-2016-09-01 10:57:46 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: Fix compilation with debugging disabled
- gstsiddec.o
- gstsiddec.cc: In function ‘void play_loop(GstPad*)’:
- gstsiddec.cc:446:18: error: unused variable ‘reason’ [-Werror=unused-variable]
- const gchar *reason = gst_flow_get_name (ret);
- ^
-
-2016-08-19 11:11:14 -0700 Thibault Saunier <thibault.saunier@osg.samsung.com>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rmdemux.c:
- Use the new API to post flow ERROR messages on the bus
- https://bugzilla.gnome.org/show_bug.cgi?id=770158
-
-2016-08-24 09:45:05 -0300 Thibault Saunier <tsaunier@gnome.org>
-
- * gst/asfdemux/meson.build:
- meson: Link asfdemux against the gstsdp library
-
-2016-08-23 15:29:10 -0300 Thibault Saunier <tsaunier@gnome.org>
-
- * meson.build:
- meson: Add support for fallback subprojects
-
-2016-08-12 21:25:34 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * .gitignore:
- * config.h.meson:
- * ext/a52dec/meson.build:
- * ext/amrnb/meson.build:
- * ext/amrwbdec/meson.build:
- * ext/cdio/meson.build:
- * ext/dvdread/meson.build:
- * ext/lame/meson.build:
- * ext/mad/meson.build:
- * ext/meson.build:
- * ext/mpeg2dec/meson.build:
- * ext/mpg123/meson.build:
- * ext/twolame/meson.build:
- * ext/x264/meson.build:
- * gst/asfdemux/meson.build:
- * gst/dvdlpcmdec/meson.build:
- * gst/dvdsub/meson.build:
- * gst/meson.build:
- * gst/realmedia/meson.build:
- * gst/xingmux/meson.build:
- * meson.build:
- Add support for Meson as alternative/parallel build system
- https://github.com/mesonbuild/meson
- With contributions from:
- Tim-Philipp Müller <tim@centricular.com>
- Jussi Pakkanen <jpakkane@gmail.com> (original port)
- Highlights of the features provided are:
- * Faster builds on Linux (~40-50% faster)
- * The ability to build with MSVC on Windows
- * Generate Visual Studio project files
- * Generate XCode project files
- * Much faster builds on Windows (on-par with Linux)
- * Seriously fast configure and building on embedded
- ... and many more. For more details see:
- http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
- http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
- Building with Meson should work on both Linux and Windows, but may
- need a few more tweaks on other operating systems.
-
-2016-08-12 21:41:39 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/x264/gstx264enc.h:
- * gst/realmedia/realhash.c:
- * gst/realmedia/rtspreal.c:
- plugins: Use <stdint.h> instead of _stdint.h
- _stdint.h is generated by Autotools and we don't really need it. All
- supported platforms now ship with stdint.h. The only stickler was MSVC,
- and since Visual Studio 2015 it also ships stdint.h now.
-
-2016-08-19 13:01:39 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpeg2dec/perftest.c:
- mpeg2dec: remove file no longer used or needed
-
-2016-08-08 09:58:20 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/dvdlpcmdec/Makefile.am:
- dvdlpcmdec: add libgstbase CFLAGS as well
- For consistency.
- https://bugzilla.gnome.org/show_bug.cgi?id=769610
-
-2016-08-07 00:10:24 +0000 xlazom00 <xlazom00@gmail.com>
-
- * gst/dvdlpcmdec/Makefile.am:
- dvdlpcmdec: link libgstbase-1.0
- https://bugzilla.gnome.org/show_bug.cgi?id=769610
-
-2016-08-02 13:38:25 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Add byte rate based bitrate tag in case there are no audio props
- https://bugzilla.gnome.org/show_bug.cgi?id=769418
-
-2016-04-28 16:42:43 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: add support for another format
- The format specification can be found here:
- http://www.dvdforum.org/images/Guideline1394V10R0_20020911.pdf
- Note: This format is also used for Wifi-Display.
- https://bugzilla.gnome.org/show_bug.cgi?id=765807
-
-2016-04-28 16:32:53 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: rewrite to use GstAudioDecoder
- https://bugzilla.gnome.org/show_bug.cgi?id=765807
-
-2016-07-24 10:00:48 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * ext/sidplay/gstsiddec.cc:
- sidplay: fix compiler warnings when building with -O3
- Avoid compiler warnings "‘foo’ may be used uninitialized in this
- function" when building with -O3 by checking the return bool value
- of format conversion function.
- https://bugzilla.gnome.org/show_bug.cgi?id=769116
-
-2016-07-11 21:14:06 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From f363b32 to f49c55e
-
-2016-07-06 13:51:09 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.9.1 ===
-
-2016-07-06 13:15:28 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.9.1
-
-2016-07-06 11:54:01 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-07-06 10:19:44 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/hr.po:
- po: Update translations
-
-2016-06-21 11:46:53 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * common:
- Automatic update of common submodule
- From ac2f647 to f363b32
-
-2015-05-12 11:08:55 +0300 Vootele Vesterblom <vov@bang-olufsen.dk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix seeking back after EOS has been reached in push mode
- Fix seeking when demuxer is in INDEX state. This happens when we
- reached the end of the stream. It should still be possible to do
- a flushing seek and seek back to any other position though. Instead
- the demuxer would just go straight to EOS again instead of going
- back to processing packets again from the new position.
- https://bugzilla.gnome.org/show_bug.cgi?id=749066
-
-2016-05-17 16:00:29 +0300 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- rdtmanager: fix clock leak
- The clock returned by gst_system_clock_obtain() was never unreffed.
- https://bugzilla.gnome.org/show_bug.cgi?id=766565
-
-2016-05-15 13:33:30 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- docs: Update for git master
-
-2016-04-16 09:15:43 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- * ext/mad/gstmad.c:
- amrnbec, mad: fix two more parse function declarations
-
-2016-04-15 20:46:37 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrwbdec/amrwbdec.c:
- a52dec, amrwbec: fix parse function declaration mismatch
- Fixes MSVC compiler warning:
- amrwbdec.c(99): warning C4133: '=': incompatible types
- - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
- 'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
- gsta52dec.c(156): warning C4133: '=': incompatible types
- - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
- 'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
-
-2016-04-15 19:55:03 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.h:
- mpg123: fix build with msvc
- Fix syntax errors when compiling against cerbero-provided libmpg123
- headers. We do the same as the libmpg123 internal visual studio
- build here.
- mpg123.h(1378): error C2143: syntax error: missing ')' before '('
- mpg123.h(1378): error C2081: 'ssize_t': name in formal parameter list illegal
- mpg123.h(1378): error C2143: syntax error: missing ')' before '*'
- mpg123.h(1378): error C2091: function returns function
- mpg123.h(1378): error C2143: syntax error: missing '{' before '*'
- mpg123.h(1378): error C2059: syntax error: ')'
- mpg123.h(1379): error C2143: syntax error: missing ')' before '*'
- mpg123.h(1379): error C2365: 'off_t': redefinition; previous definition was 'typedef'
- ...
-
-2016-04-15 18:37:42 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: bump libmpeg2 requirement to 0.5.1 and fix msvc build
- libmpeg2 0.5.1 was released in mid-2008, let's bump the requirement
- and get rid of version-dependent code paths. There's still
- avdec_mpeg2video for those who are stuck on ancient distros which
- we don't target any more.
- Also fixes build with MSVC, which doesn't like #if #else #endif
- inside macro arguments (like the GST_DEBUG_OBJECT in line 941).
-
-2016-04-14 10:02:50 +0100 Julien Isorce <j.isorce@samsung.com>
-
- * README:
- * common:
- Automatic update of common submodule
- From 6f2d209 to ac2f647
-
-2016-03-04 16:14:44 +0900 Vineeth TM <vineeth.tm@samsung.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- * gst/xingmux/gstxingmux.c:
- ugly: use new gst_element_class_add_static_pad_template()
- https://bugzilla.gnome.org/show_bug.cgi?id=763082
-
-2016-03-24 13:33:22 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.8.0 ===
-
-2016-03-24 12:43:04 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.8.0
-
-2016-03-24 12:18:09 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-=== release 1.7.91 ===
-
-2016-03-15 12:21:07 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.7.91
-
-2016-03-15 12:03:34 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-03-08 12:26:01 +0100 Edward Hervey <edward@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Don't modify segment values on accurate seeks
- When dealing with accurate seeks, we want to return exactly the segment
- that was requested by the seek event, and not adjust the values.
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-=== release 1.7.90 ===
-
-2016-03-01 18:42:01 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.7.90
-
-2016-03-01 17:18:01 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-03-01 16:54:07 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/bg.po:
- po: Update translations
-
-2016-02-27 20:17:31 +0100 Jens Georg <mail@jensge.org>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdread: Fix seek starting at 0 for title != 1
- Otherwise the playback would start at title 0
- https://bugzilla.gnome.org/show_bug.cgi?id=762787
-
-2016-02-26 12:41:18 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From b64f03f to 6f2d209
-
-2016-02-22 22:08:12 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix adding bitrate to stream tags
- https://bugzilla.gnome.org/show_bug.cgi?id=699586
-
-2016-02-21 10:11:12 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/asf.vcproj:
- * gst/realmedia/rmdemux.vcproj:
- * win32/MANIFEST:
- * win32/gst.sln:
- * win32/vs6/gst_plugins_ugly.dsw:
- * win32/vs6/libgstasfdemux.dsp:
- * win32/vs6/libgstdvdlpcmdec.dsp:
- * win32/vs6/libgstdvdsub.dsp:
- * win32/vs6/libgstlame.dsp:
- * win32/vs6/libgstmad.dsp:
- * win32/vs6/libgstrealmedia.dsp:
- * win32/vs6/libgstsynaesthesia.dsp:
- win32: remove outdated build cruft
- This hasn't been touched for generations, doesn't work,
- and is just causing confusion. We also don't want to
- maintain these files manually.
-
-2016-02-20 11:55:37 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: don't use exported but undeclared core debug category symbols
- It's not right and won't work on Windows with MSVC.
-
-2016-02-19 12:38:34 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.7.2 ===
-
-2016-02-19 11:58:13 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.7.2
-
-2016-02-19 11:21:03 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2016-02-19 10:32:06 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/fr.po:
- * po/pt_BR.po:
- po: Update translations
-
-2016-02-18 00:25:56 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/sidplay/gstsiddec.cc:
- sidplay: Fix compiler warning about C++11 compatibility
- gstsiddec.cc:78:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
- #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
- ^
- gstsiddec.cc:78:38: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
- #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
- ^
-
-2016-02-16 14:46:11 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-mpg123.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- docs: update inspection to git and fix mpg123 inspect location
-
-2016-02-16 12:23:33 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/files/Makefile.am:
- * tests/files/stream.mp2:
- tests: fix distcheck
-
-2016-02-16 10:38:18 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/xml/plugin-mpg123.xml:
- * ext/Makefile.am:
- * gst-plugins-ugly.spec.in:
- * tests/check/Makefile.am:
- mpg123: move from -bad to -ugly
- Hook up to build system, add to docs
-
-2016-02-16 10:55:01 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- * tests/Makefile.am:
- * tests/check/Makefile.am:
- * tests/check/elements/.gitignore:
- * tests/files/Makefile.am:
- * tests/files/cbr_stream.mp3:
- * tests/files/vbr_stream.mp3:
- tests: add test data for mpg123 plugin
-
-2016-02-16 10:41:07 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- Merge branch 'plugin-move-mpg123'
- Move mpg123 plugin from -bad to -ugly.
- https://bugzilla.gnome.org/show_bug.cgi?id=719849
-
-2015-12-14 11:09:46 +0900 Vineeth TM <vineeth.tm@samsung.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- plugins-bad: Fix example pipelines
- rename gst-launch --> gst-launch-1.0
- replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
- fix caps in examples
- https://bugzilla.gnome.org/show_bug.cgi?id=759432
-
-2015-08-17 11:50:28 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: still reset pending audio info on hard flush
- Follow-up to previous commit.
- https://bugzilla.gnome.org/show_bug.cgi?id=752431
-
-2015-07-15 10:44:02 -0600 Jason Litzinger <jlitzinger@control4.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: fix handling of sample rate change during playback
- If the sample rate of the media changes, the resulting flush will
- clear the has_next_audioinfo flag, and the caps won't be sent
- downstream.
- https://bugzilla.gnome.org/show_bug.cgi?id=752431
-
-2015-08-15 12:58:40 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- audiodecoders: use default pad accept-caps handling
- Avoids useless check of downstream caps when handling an
- accept-caps query
- Elements: dtsdec, faad, gsmdec, mpg123audiodec, opusdec,
- sbcdec, adpcmdec, sirendec
-
-2015-04-26 18:04:16 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/Makefile.am:
- Remove obsolete Android build cruft
- This is not needed any longer.
-
-2015-01-11 01:08:08 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: fix compiler warning and simplify checks in set_caps
- https://bugzilla.gnome.org/show_bug.cgi?id=740195
-
-2015-01-03 13:06:45 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: rework set_format code so mpg123audiodec works with decodebin/playbin
- The old code was using gst_caps_normalize() and was generally overly
- complex. Simplify by picking sample rate and number of channels from
- upstream and the sample format from the allowed caps. If the format caps
- is a list of strins, just pick the first one. And if the srcpad isn't
- linked yet, use the default format (S16).
- https://bugzilla.gnome.org/show_bug.cgi?id=740195
-
-2014-09-10 17:24:39 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- Fix up one-element lists in template caps
-
-2014-03-05 00:51:04 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/check/elements/mpg123audiodec.c:
- tests: fix mpg123audiodec test for big-endian architectures
-
-2014-02-04 17:22:27 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: improved error report and checks
- Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
-
-2013-12-05 12:04:39 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123audiodec: Require caps to be set before any data processing
-
-2013-07-26 17:25:42 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: Remove dead assignment
- harder ? :)
-
-2013-05-15 11:25:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * tests/check/elements/mpg123audiodec.c:
- mpg123audiodec: Fix event handling in unit test
-
-2012-10-24 12:16:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpg123/Makefile.am:
- gst: Add better support for static plugins
-
-2013-04-15 00:22:39 -0700 David Schleef <ds@schleef.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: Add conditional on API version for new enum
-
-2016-02-05 19:11:38 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * tests/check/Makefile.am:
- tests: extend the AM_TESTS_ENVIRONMENT from check.mak
- To get the CK_DEFAULT_TIMEOUT defined for all tests
- https://bugzilla.gnome.org/show_bug.cgi?id=761472
-
-2016-02-05 18:07:02 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From 86e4663 to b64f03f
-
-2016-01-25 20:00:26 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.h:
- * ext/amrwbdec/amrwbdec.h:
- amrnb, amrwb: unconditionally depend on opencore-amr*b >= 0.1.3
- We don't really need to cater for older versions any more.
-
-2016-01-21 17:34:38 +0100 Edward Hervey <edward@centricular.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Demote rank to SECONDARY
- https://bugzilla.gnome.org/show_bug.cgi?id=574461
-
-2016-01-08 21:40:53 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: use query caps instead of accept-caps
- accept-caps does only a shallow check and a full downstream
- caps query is needed to check if ARGB is possible
-
-2015-10-30 11:06:11 +0530 Ravi Kiran K N <ravi.kiran@samsung.com>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Support reverse playback
- Support reverse playback for ASF format.
- Parse packets and queue the payloads, then push
- the payload buffer to decoder in reverse order.
- Video buffers are pushed from KeyFrame to next
- Keyframe.
- https://bugzilla.gnome.org/show_bug.cgi?id=757341
-
-2015-12-24 15:28:46 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-2015-12-24 14:48:50 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * tests/check/elements/amrnbenc.c:
- amrnbenc: Fix various compiler warnings in the test
-
-2015-12-24 14:48:38 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * tests/check/elements/x264enc.c:
- x264enc: Fix various compiler warnings in the test
-
-=== release 1.7.1 ===
-
-2015-12-24 14:41:21 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.7.1
-
-2015-12-24 14:10:29 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2015-12-24 12:23:27 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2015-12-21 12:32:32 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- configure: Use -Bsymbolic-functions if available
- While this is more useful for libraries, some of our plugins with multiple
- files and some internal API can also benefit from this.
-
-2015-12-16 09:36:08 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- docs: update to git
-
-2015-12-07 09:08:18 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From b319909 to 86e4663
-
-2015-11-26 15:49:47 +0000 Arjen Veenhuizen <arjen.veenhuizen@tno.nl>
-
- * ext/x264/gstx264enc.c:
- x264enc: increase bitrate limit from 100Mbps to 2Gbps
- Don't artificially limit the bitrate, x264enc allows much
- higher bitrates, and for intra-only 4k AVC they are needed.
- x264 clips to 2Gbps internally, so use that as limit for now.
- https://bugzilla.gnome.org/show_bug.cgi?id=758620
-
-2015-11-18 23:20:59 -0800 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: drop unnecessary NULL check before g_free
-
-2015-10-21 14:35:17 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * common:
- Automatic update of common submodule
- From b99800a to b319909
-
-2015-10-20 17:29:42 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Use new GST_ENABLE_EXTRA_CHECKS #define
- https://bugzilla.gnome.org/show_bug.cgi?id=756870
-
-2015-10-21 14:26:07 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * README:
- * common:
- Automatic update of common submodule
- From 9aed1d7 to b99800a
-
-2015-10-02 22:24:46 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Update GLib dependency to 2.40.0
-
-2015-09-29 14:16:07 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
-
- * ext/dvdread/README:
- dvdread: remove broken link
- Removing instead of updating as previously pointed-to page
- (now http://dvd.sourceforge.net/dvdinfo/) is already linked
- from dvd.sourceforge.net's homepage as: "Collection of
- information on file formats/data structures relating to DVD
- navigation/SPUs."
-
-2015-09-26 09:23:05 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: fix invalid read beyond channel position array
- We would always copy sizeof(sorted_position) bytes, which is
- for 8 channels, but if we have less than 8 channels the
- position array we copy from will only have allocated space
- for channel channels, so we would read beyond the input
- array in some cases.
-
-2015-08-25 10:08:46 +0900 HoonHee Lee <hoonhee.lee@lge.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: factor out common code to set output format into new function
- When caps event is recieved and header is changed, reordering channel
- and setting the default output format for audio are processed. These 2 of
- code are same. Thus, It is better to make a new function for these common
- code in terms of removing duplicated code, maintenance and expansion.
- https://bugzilla.gnome.org/show_bug.cgi?id=753920
-
-2015-09-23 20:45:34 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't push any data on pads after the segment.stop
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 20:30:21 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Only change segment start to a keyframe for KEYUNIT seeks
- Not for accurate seeks, which should accurately start at the requested
- position.
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 20:23:40 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Update segment.position when pushing buffers
- Without this, non-flushing seeks are not going to work well.
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 19:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Only push EOS event if we're not doing a segment seek
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 16:31:28 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: If pushing buffers returned EOS, go into the EOS and not failure code path
- We don't want to unconditionally send an EOS event downstream, but might want
- to send a SEGMENT_DONE message/event instead if a segment seek was done
- before.
- https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-25 23:51:12 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.6.0 ===
-
-2015-09-25 23:32:02 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.6.0
-
-2015-09-25 23:04:56 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-=== release 1.5.91 ===
-
-2015-09-18 20:01:17 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.5.91
-
-2015-09-18 19:34:50 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2015-09-18 11:53:57 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/zh_CN.po:
- po: Update translations
-
-2015-09-05 23:34:45 +1000 Jan Schmidt <jan@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264: Add bitrate info to the tags output.
- Makes it possible for muxers to know the target bitrate as soon
- as encoding starts, which flvmux now uses.
-
-2015-08-28 19:18:32 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: fix file mode of some source files
-
-=== release 1.5.90 ===
-
-2015-08-19 14:05:27 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.5.90
-
-2015-08-19 12:55:35 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2015-08-19 11:33:01 +0300 Sebastian Dröge <sebastian@centricular.com>
-
- * po/id.po:
- * po/sv.po:
- po: Update translations
-
-2015-08-18 02:23:55 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: actually return TRUE from accept-caps handler
- The query was handled
-
-2015-08-16 14:27:44 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: implement accept-caps handling
- Implement accept-caps handling without doing caps queries downstream
-
-2015-08-15 22:15:26 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/amrnb/amrnbenc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/twolame/gsttwolamemp2enc.c:
- audioencoders: use template subset check for accept-caps
- It is faster than doing a query that propagates downstream and
- should be enough
- Elements: amrnbenc, lamemp3enc, twolamemp2enc
-
-2015-08-15 11:46:59 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: use default pad accept-caps handling
- Avoids useless check of downstream caps when handling an
- accept-caps query
-
-2015-08-15 11:46:13 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/mad/gstmad.c:
- audiodecoders: use default pad accept-caps handling
- Avoids useless check of downstream caps when handling an
- accept-caps query
- Elements: a52dec, amrnbdec, amrwbdec, mad
-
-2015-08-14 11:14:31 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * tests/check/generic/states.c:
- check: Rename states unit test
- Makes it easier to differentiate from other modules states unit test
-
-2015-08-06 10:05:53 +0900 Vineeth TM <vineeth.tm@samsung.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix assertion error when freeing old tags.
- Check if old_tags is present before calling gst_tag_list_unref
- https://bugzilla.gnome.org/show_bug.cgi?id=753301
-
-2015-07-24 10:08:34 +0900 Vineeth TM <vineeth.tm@samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix assertion error when codec_data is not present in structure
- When discovering a particular asf file, caps structure doesn't have
- codec_data, and this was not being checked before using the same,
- resulting in assertion error
- https://bugzilla.gnome.org/show_bug.cgi?id=752803
-
-2015-07-29 15:55:14 +0100 Luis de Bethencourt <luis@debethencourt.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: remove unread value
- Init value of idx2 is never used. First usage sets it to idx + 1. Removing
- initial value.
-
-2015-07-25 04:55:15 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't post error on flushing while reading headers
-
-2015-07-21 11:13:27 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: mark tag list as global scope
-
-2015-07-21 11:10:04 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix taglist leak
- merge doesn't take ownership, so must unref the
- old tags if we do merge.
-
-2015-07-21 12:44:55 +0900 Vineeth TM <vineeth.tm@samsung.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix wrong unref when there are no tags
- Tags should be appended to pending tags and unref'ed only if tags
- are present. Else there is no need to append.
- https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-16 18:11:37 +0900 Vineeth T M <vineeth.tm@samsung.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix memory leaks during error cases
- while adding stream, during error cases, only stream is
- being freed. Adapter, pad, tags, subpackets, index are not being
- freed resulting in memory leaks
- https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-16 17:23:15 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * gst-plugins-ugly.doap:
- Update mailing list in doap file as well
-
-2015-07-16 17:19:37 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- Update mailing list address from sourceforge to freedesktop
-
-2015-07-16 09:49:17 +0900 Vineeth T M <vineeth.tm@samsung.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix tag memory leak
- tags is not being freed after being merged to the
- pending_tags.
- https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-03 21:58:33 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From f74b2df to 9aed1d7
-
-2015-06-25 00:04:19 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.5.2 ===
-
-2015-06-24 23:39:37 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.5.2
-
-2015-06-24 23:14:52 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2015-06-24 11:15:22 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/nl.po:
- po: Update translations
-
-2015-06-15 16:33:26 +1000 Jan Schmidt <jan@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Use gst_video_multiview_guess_half_aspect() function
- Use gst_video_multiview_guess_half_aspect() to guess if frame-packed
- stereoscopic video is full-frame per view or not.
-
-2015-06-16 17:49:05 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 6015d26 to f74b2df
-
-2014-11-26 22:15:43 +0100 Matej Knopp <matej.knopp@gmail.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Use gst_video_encoder_set_min_pts
- This method replace the manual adjustment of PTS and DTS to avoid
- negative DTS issues. Using this method will also update the segment so
- we don't loos sync.
- https://bugzilla.gnome.org/show_bug.cgi?id=740575
-
-2015-06-10 14:28:05 +1000 Jan Schmidt <jan@centricular.com>
-
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Add support for stereoscopic video metadata.
- Add parsing of stereoscopic metadata, and place into the caps to
- the decoder.
- Fix parsing of Advanced Mutual Exclustion objects.
- https://bugzilla.gnome.org/show_bug.cgi?id=711190
- Based on a patch by HyeJin Choi <meeshel78@hotmail.com>
-
-2014-10-05 00:54:59 +1000 Jan Schmidt <jan@centricular.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Add support for stereoscopic video
- Provide new frame-packing property to directly set
- x264enc frame packing, or pass through upstream settings
- The explicit layout from the frame-packing property is
- preferred over any info from the caps.
-
-2015-06-10 15:32:44 +0100 Chris Clayton <chris2553@googlemail.com>
-
- * gst/xingmux/gstxingmux.c:
- xingmux: fix compiler warnings
- https://bugzilla.gnome.org/show_bug.cgi?id=750596
-
-2015-06-09 15:28:46 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * Makefile.am:
- cruft: add the obsolete tmpl dir to cruft-dirs
-
-2015-06-09 11:30:34 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From d9a3353 to 6015d26
-
-2015-06-08 23:08:11 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From d37af32 to d9a3353
-
-2015-06-07 23:06:47 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 21ba2e5 to d37af32
-
-2015-06-07 17:32:12 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From c408583 to 21ba2e5
-
-2015-06-07 17:02:31 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * docs/plugins/Makefile.am:
- docs: remove variables that we define in the snippet from common
- This is syncing our Makefile.am with upstream gtkdoc.
-
-2015-06-07 17:16:30 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From d676993 to c408583
-
-2015-06-07 16:44:43 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.5.1 ===
-
-2015-06-07 11:05:29 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.5.1
-
-2015-06-07 11:05:22 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2015-06-07 09:36:00 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/eo.po:
- * po/fr.po:
- po: Update translations
-
-2015-06-02 16:31:10 +0200 Edward Hervey <edward@centricular.com>
-
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/mpeg2dec.c:
- * tests/check/elements/x264enc.c:
- * tests/check/elements/xingmux.c:
- * tests/check/pipelines/lame.c:
- check: Use GST_CHECK_MAIN () macro everywhere
- Makes source code smaller, and ensures we go through common initialization
- path (like the one that sets up XML unit test output ...)
-
-2015-05-26 17:58:18 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: don't artificially limit max allowed value of "threads" property
- In auto mode it will happily chose much higher values anyway,
- and a limit of 4 seems a bit low these days.
-
-2015-05-12 22:05:02 +1000 Jan Schmidt <jan@centricular.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdread: Also reset the first_seek var in start()
- Make the initial chapter seek work across reuse.
- https://bugzilla.gnome.org/show_bug.cgi?id=453322
-
-2015-05-12 21:52:24 +1000 Jan Schmidt <jan@centricular.com>
-
- * ext/dvdread/dvdreadsrc.c:
- * ext/dvdread/dvdreadsrc.h:
- dvdread: Work around basesrc initial seek
- Ignore the initial seek basesrc sends, as it
- breaks starting from another chapter by
- immediately seeking back to the start of the title
-
-2015-05-10 11:34:33 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/x264/gstx264enc.c:
- * gst/realmedia/rademux.c:
- * gst/xingmux/gstxingmux.c:
- docs: update example pipelines in element docs
- Mostly gst-launch -> gst-launch-1.0, but also
- use autoaudiosink/autovideosink in more places
- and update pipelines a little or flesh out
- descriptions.
-
-2015-04-27 10:57:12 +0100 Luis de Bethencourt <luis.bg@samsung.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/realmedia/rdtdepay.c:
- Rename property enums from ARG_ to PROP_
- Property enum items should be nameed PROP_ for consistency and readability.
-
-2015-04-26 17:56:22 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Android.mk:
- * ext/mad/Makefile.am:
- * ext/x264/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/realmedia/Makefile.am:
- * gst/xingmux/Makefile.am:
- Remove obsolete Android build cruft
- This is not needed any longer.
-
-2015-04-24 17:05:20 +0100 Luis de Bethencourt <luis.bg@samsung.com>
-
- * gst/realmedia/pnmsrc.c:
- realmedia: remove unused enum item PROP_LAST
-
-2015-04-23 16:23:01 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * tests/check/Makefile.am:
- tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON
- Make sure the test environment is set up.
- https://bugzilla.gnome.org//show_bug.cgi?id=747624
-
-2015-04-23 16:22:39 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- configure: bump automake requirement to 1.14 and autoconf to 2.69
- This is only required for builds from git, people can still
- build tarballs if they only have older autotools.
- https://bugzilla.gnome.org//show_bug.cgi?id=747624
-
-2015-04-23 16:22:30 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitignore:
- Update .gitignore
-
-2015-04-22 10:37:54 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * LICENSE_readme:
- Remove LICENSE_readme
- It's completely outdated and just confusing, better if people are
- forced to look at the actual code in question than trusting this file.
-
-2015-04-22 10:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * INSTALL:
- Remove INSTALL file
- autotools automatically generate this, and when using different versions
- for autogen.sh there will always be changes to a file tracked by git.
-
-2015-04-20 14:35:30 +0900 Cliff Han <cliff.han@lge.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix a seek failure due to out-of-range in push mode
- A seek in push mode failed for big offsets which are beyond
- the range of guint32.
- https://bugzilla.gnome.org/show_bug.cgi?id=748162
-
-2015-04-08 16:52:06 +0200 Edward Hervey <edward@centricular.com>
-
- * common:
- * tests/check/Makefile.am:
- tests: Use AM_TESTS_ENVIRONMENT
- Needed by the new automake test runner
-
-2015-04-03 18:58:03 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From bc76a8b to c8fb372
-
-2015-04-02 17:24:05 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: fix race in liba52dec lookup table initialization
- a52_init initializes the IMDCT global state as well as creating
- a new state. When two A52 decoders are created (eg, when two AC3
- tracks are contained in a video), calls to a52_init may happen
- at the same time, and the IMDCT initialization is not reentrant.
- https://bugzilla.gnome.org/show_bug.cgi?id=746781
-
-2015-03-27 14:41:51 +0100 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix buffer leak in crop_buffer()
- gst_buffer_pool_acquire_buffer() gives us a new owned buffer while
- gst_buffer_replace() reffed it as well so we were one reference extra.
- https://bugzilla.gnome.org/show_bug.cgi?id=746887
-
-2015-03-28 16:58:26 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: resurrect some flow return handling
- https://bugzilla.gnome.org/show_bug.cgi?id=744572
-
-2015-03-28 16:57:06 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: resurrect some flow return handling
- https://bugzilla.gnome.org/show_bug.cgi?id=744572
-
-2015-03-24 12:50:43 +0000 Luis de Bethencourt <luis.bg@samsung.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix memory leak
- CID #1291630
-
-2015-03-24 10:29:48 +0000 Luis de Bethencourt <luis.bg@samsung.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: initialize buffer
- Buffer needs to be null before passing it to gst_buffer_pool_acquire_buffer()
- CID #1291634
-
-2015-03-13 17:00:03 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Add stride support
- This allow using external pools that have different strides from the
- default. These strides need to respect certain rules, which we check
- and if these are not met, we fallback to generic pool.
- https://bugzilla.gnome.org/show_bug.cgi?id=735379
-
-2015-03-10 16:45:01 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Re-implement pool handling
- This is a rewrite of the pool negotiation and configuration. Direct
- to output decoding is now achieved by configuring the pool using
- video-alignment. This removes copies when dealing with any elements that
- supports VideoAlignment, and enable usage of generic video buffer pool,
- XVImagePool and GLPool. It drops the crop meta implementation for now.
- https://bugzilla.gnome.org/show_bug.cgi?id=735379
-
-2015-03-10 09:33:15 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvbsub: fix indentation
-
-2015-03-10 09:32:51 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/dvdread/dvdreadsrc.c:
- * gst/dvdsub/gstdvdsubdec.c:
- Fix double semicolons
-
-2015-03-09 19:11:51 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Revert "mpeg2dec: Fix handling of stride"
- This reverts commit f3e8dcb9de4d546e7d80ccc1754ed13dd4e7ac81.
-
-2015-03-09 19:11:44 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Revert "mpeg2dec: Use propose unref method for buffer"
- This reverts commit 63b43d3bee832aec353d02575da543f3c73f6893.
-
-2015-03-09 18:43:43 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Use propose unref method for buffer
-
-2015-01-21 18:29:22 +0000 Simon Farnsworth <simon.farnsworth@onelan.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix handling of stride
- A pipeline like:
- gst-launch-1.0 filesrc location=file.ts ! tsdemux ! mpegvideoparse ! mpeg2dec ! vaapisink
- would look bad when file.ts contains 704x576 video, because vaapisink would
- give you buffers of stride 768, but libmpeg2 was not told about this and
- used a stride of 704.
- Tell libmpeg2 about the stride from downstream; in the process, teach it to
- reject buffer pools that don't meet libmpeg2's chroma stride requirements
- Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
-
-2015-02-11 13:56:48 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- Improve and fix LATENCY query handling
- This now follows the design docs everywhere, especially the maximum latency
- handling.
- https://bugzilla.gnome.org/show_bug.cgi?id=744106
-
-2015-02-06 19:04:32 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Don't set max latency to the same value as the encoder latency
- The meaning of the max latency is *not* the maximum latency this element will
- introduce. It is the maximum latency this element can endure without
- overflowing any buffers, which is infinite for x264enc.
- Fixes latency configuration in zero latency mode, where max latency was
- becoming 0... which usually won't work well if something else introduces
- latency as then max < min in the end, and latency configuration just fails.
-
-2015-02-02 14:13:10 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: set annexb=1 in byte stream mode when downstream has ANY caps
- This matches what is done when downstream caps are not ANY, and fixes
- prerolling in byte stream mode when typefind is downstream.
-
-2015-01-21 09:56:41 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/lame/gstlamemp3enc.c:
- * ext/twolame/gsttwolamemp2enc.c:
- Constify some static arrays everywhere
-
-2015-01-18 16:53:41 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * configure.ac:
- configure: remove non-ported plugins stuff
- It's not needed any longer, all plugins in -ugly
- have been ported.
-
-2015-01-18 11:07:43 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Don't set an allocation maximum
- There is no reason x264enc should enforce a maximum allocation size.
- The maximum is normally set by buffer pool which cannot grow, but we
- don't offer a buffer pool. This would lead to stall when used with
- element that don't implement allocation query.
- Related to: https://bugzilla.gnome.org/show_bug.cgi?id=738302
-
-2015-01-12 16:10:45 +0100 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From f2c6b95 to bc76a8b
-
-2014-12-22 11:46:27 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * MAINTAINERS:
- MAINTAINERS: Update my mail address
-
-2014-12-18 10:54:30 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From ef1ffdc to f2c6b95
-
-2014-11-27 17:11:30 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From 7bb2bce to ef1ffdc
-
-2014-06-06 13:59:57 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: set channel positions using the appropriate API
- https://bugzilla.gnome.org/show_bug.cgi?id=731038
-
-2014-11-05 23:34:56 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix comment
-
-2014-11-05 13:45:29 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Send duration query upstream first
- An upstream element (like mms or some dlna source) might be able to
- answer the query. Try that first, else fallback to standard logic
-
-2014-11-02 17:31:05 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/asfpacket.c:
- asf: fix up file mode
-
-2014-10-27 17:58:14 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From 84d06cd to 7bb2bce
-
-2014-10-21 19:46:03 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * Makefile.am:
- tests: parallelise 'make check-valgrind'
-
-2014-10-21 13:02:03 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * common:
- Automatic update of common submodule
- From a8c8939 to 84d06cd
-
-2014-10-21 12:58:58 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * README:
- * common:
- Automatic update of common submodule
- From 36388a1 to a8c8939
-
-2014-08-22 10:46:35 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: first try to delegate TIME seek events upstream
- We should give a chance to upstream to handle TIME seek events before trying
- to handle it in asfdemux.
- Fix a bug where fast backward seeks where discarded right away because they
- were not supported by asfdemux.
- https://bugzilla.gnome.org/show_bug.cgi?id=734471
-
-2014-09-04 16:57:02 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: add ASF_OBJ_METADATA_LIBRARY_OBJECT
- We can safely ignore those but best to claim to understand this object type so
- we don't raise a warning.
- https://bugzilla.gnome.org/show_bug.cgi?id=736060
-
-2014-08-21 12:09:23 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: if video is h264, check the codec_data for bytestream data
- For bytestream we don't want to expose it as codec_data but rather as
- streamheader as it is not out-of-band data but data that should be
- prepended to the beginning of the stream before the other buffers.
- https://bugzilla.gnome.org/show_bug.cgi?id=735070
-
-2014-08-10 19:13:10 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- docs: update for git master
-
-2014-08-06 12:07:09 -0300 Thiago Santos <thiagoss@osg.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: simplify log statement
- Use the GST_PTR_FORMAT to print the buffer
-
-2014-08-05 19:47:26 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264: fix colour inversion with YV12 format
- It's the same as I420 but with the U/V planes swapped.
-
-2014-08-01 10:37:44 +0200 Edward Hervey <edward@collabora.com>
-
- * Makefile.am:
- * common:
- Makefile: Add usage of build-checks step
- Allows building checks without running them
-
-2014-07-08 16:45:45 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Request buffers in allocation query
- https://bugzilla.gnome.org/show_bug.cgi?id=732288
-
-2014-06-06 20:23:15 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Shift both PTS and DTS to ensure positive timestamp
- Currently we only shift DTS to compensate that we don't support negative
- timestamp. This cause a problem that PTS is no longer >= DTS and may
- make muxers live much harder. Instead, shift both PTS/DTS forward. Also
- remove all the hack to handle this which seems the result of thinking libx264
- is bugged.
- https://bugzilla.gnome.org/show_bug.cgi?id=731351
-
-2014-07-19 18:04:46 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.4.0 ===
-
-2014-07-19 17:44:06 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.4.0
-
-2014-07-19 16:50:04 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-07-19 12:48:11 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/sv.po:
- po: Update translations
-
-=== release 1.3.91 ===
-
-2014-07-11 11:44:28 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.3.91
-
-2014-07-11 11:13:39 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-07-11 08:53:12 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/vi.po:
- po: Update translations
-
-2014-07-04 03:22:00 +0200 Sebastian Rasmussen <sebras@hotmail.com>
-
- * gst/realmedia/rademux.c:
- rademux: Print invalid fourcc in error message in hex
- Previously this was printed as characters which caused later processing
- of the error message to sometimes warn about non-UTF-8 characters.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732716
-
-=== release 1.3.90 ===
-
-2014-06-28 11:39:14 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.3.90
-
-2014-06-28 11:39:01 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-06-22 21:48:28 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * .gitignore:
- Ignore autotools test-driver temp files from 'make check'
-
-2014-06-22 19:36:14 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.3.3 ===
-
-2014-06-22 18:13:53 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.3.3
-
-2014-06-22 17:40:40 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-06-22 14:25:18 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/de.po:
- * po/nl.po:
- po: Update translations
-
-2014-05-26 17:55:43 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
-
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- rmdemux: use GstFlowCombiner
- Removes flow return combination code to use the newly added GstFlowCombiner
- https://bugzilla.gnome.org/show_bug.cgi?id=709224
-
-2014-05-23 18:17:11 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: use GstFlowCombiner
- Removes flow return combination code to use the newly added GstFlowCombiner
- https://bugzilla.gnome.org/show_bug.cgi?id=709224
-
-2014-05-28 09:49:59 +0200 Aurélien Zanelli <aurelien.zanelli@parrot.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix caps leak in set_format()
- https://bugzilla.gnome.org/show_bug.cgi?id=730865
-
-2013-12-01 20:53:03 +0100 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Handle initial 0 timestamp that should have been -1
- https://bugzilla.gnome.org/show_bug.cgi?id=719660
-
-2014-05-21 13:23:33 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.3.2 ===
-
-2014-05-21 13:06:35 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * docs/plugins/inspect-build.stamp:
- * docs/plugins/inspect.stamp:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.3.2
-
-2014-05-21 12:53:52 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-05-21 10:51:38 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From 211fa5f to 1f5d3c3
-
-2014-05-16 16:24:46 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: remove unused struct members
-
-2014-05-16 12:21:06 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: Fix some memory leaks in an error path
- CID 1212165.
-
-2014-05-09 14:54:54 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Release codec state on negotiation failures
- Else it leaks
- CID #1212169
-
-2014-05-03 20:48:37 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * configure.ac:
- Back to development
-
-=== release 1.3.1 ===
-
-2014-05-03 18:29:23 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.3.1
-
-2014-05-03 18:21:01 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2014-05-03 17:23:39 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * po/de.po:
- * po/id.po:
- * po/lv.po:
- * po/sk.po:
- * po/sr.po:
- po: Update translations
-
-2014-05-03 10:15:28 +0200 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From bcb1518 to 211fa5f
-
-2014-04-27 00:29:16 +0100 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstrtspwms.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rtspreal.c:
- docs: remove outdated and pointless 'Last reviewed' lines from docs
- They are very confusing for people, and more often than not
- also just not very accurate. Seeing 'last reviewed: 2005' in
- your docs is not very confidence-inspiring. Let's just remove
- those comments.
-
-2014-04-10 17:29:30 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: fix spurious rejection of 0 time offset commands
- Coverity 206168
-
-2014-04-10 16:53:25 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdread: avoid intermediate promotion to signed
- We should not reach the dangerous range here, though.
- Coverity 206491, 206492, 1139856
-
-2014-01-17 10:46:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: do not reset the whole video info when setting size
- New changes to gstvideo will reset all the video info state
- when calling _set_format, overwriting what was previously set
- in the preceding code.
- The comment says the following code is meant to preserve the
- pre-crop size, so let's just keep the size and related data
- as this does not seem to break anything else (this is what
- the _set_format call would have set before the change that
- reset all data, except the colorimetry).
-
-2014-04-03 15:06:22 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix payloads check
- Don't iterate stream->payloads if ... it doesn't exist
- CID #1139846
-
-2014-03-02 05:11:10 +0100 Sebastian Rasmussen <sebras@hotmail.com>
-
- * .gitignore:
- .gitignore: Ignore gcov intermediate files
- https://bugzilla.gnome.org/show_bug.cgi?id=725483
-
-2014-02-28 09:35:10 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * common:
- Automatic update of common submodule
- From fe1672e to bcb1518
-
-2014-02-26 22:12:50 +0100 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 1a07da9 to fe1672e
-
-2014-02-26 11:31:03 +0100 Stefan Sauer <ensonic@users.sf.net>
-
- * docs/Makefile.am:
- docs: install prebuilt plugin docs if gtk-doc is disabled
- Sync to the Makefile.am from gst-plugin-base where it is done right.
- Fixes #725034
-
-2014-02-13 09:39:04 +0100 Stefan Sauer <ensonic@users.sf.net>
-
- * gst/xingmux/gstxingmux.c:
- * gst/xingmux/plugin.c:
- xingmux: add muxer category and make element plugable
- This is required to make encodebin consider the element. Yet it is not enough to
- have it plugged it has a lower priority than most mp3encoders and no different
- caps.
-
-2014-02-24 11:42:00 +0100 Dirk Van Haerenborgh <vhdirk@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: allow lossless compression (qp=0)
- https://bugzilla.gnome.org/show_bug.cgi?id=725051
-
-2014-02-20 21:08:08 +0100 Edward Hervey <edward@collabora.com>
-
- * m4/a52.m4:
- m4: Remove extra check for 11+ year old a52 release
- You deserve a build failure if you still have that version
- If someone wants to completely remove this m4 to replace it with the
- generic AS_GST_CHECK_LIBHEADER() it would be appreciated.
-
-2014-02-19 21:11:55 +0100 Rico Tzschichholz <ricotz@ubuntu.com>
-
- * m4/a52.m4:
- m4: Fix multiple tests in AC_CHECK_A52DEC
-
-2014-02-09 23:41:36 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Remove unused function
-
-2014-02-06 19:22:47 +0100 Edward Hervey <edward@collabora.com>
-
- * tests/check/Makefile.am:
- check: Fix test location
-
-2014-02-03 02:06:11 +0100 Sebastian Rasmussen <sebras@hotmail.com>
-
- * tests/check/Makefile.am:
- tests: Don't build disabled plugins' check tests
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723505
-
-2014-01-30 10:44:29 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From d48bed3 to 1a07da9
-
-2014-01-03 16:20:11 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: only add "format" field with fourcc to WMV caps
- Doesn't make sense for e.g. H264 or MJPEG.
-
-2013-12-22 22:34:03 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From dbedaa0 to d48bed3
-
-2013-12-22 21:56:03 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * po/Makevars:
- po: set gettext domain in Makevars so we don't have to patch the generated Makefile.in.in
- https://bugzilla.gnome.org/show_bug.cgi?id=705455
-
-2013-12-05 12:16:45 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: Remove some dead code
-
-2013-12-05 12:16:38 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- amrnbdec: Remove some dead code
-
-2013-12-05 12:09:04 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/amrnb/amrnbdec.c:
- amrnbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
-
-2013-12-05 12:08:46 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
-
-2013-12-05 11:44:10 +0100 Sebastian Dröge <sebastian@centricular.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Use new gst_video_decoder_set_needs_format() API
-
-2013-11-29 15:51:49 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix compiler warning
- Compiler warns rightly about possibly uninitialized variable.
-
-2013-11-29 15:49:29 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix crash on NULL caps when negotiation happens without a downstream peer
- gst-launch-1.0 videotestsrc ! x264enc
-
-2013-11-11 13:15:54 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: graceful degradation for badly parsed input
-
-2013-11-05 11:20:20 +0000 Tim-Philipp Müller <tim@centricular.com>
-
- * common:
- Automatic update of common submodule
- From 865aa20 to dbedaa0
-
-2013-10-22 16:02:04 +0900 HyeJin Choi <meeshel@meeshel78@hotmail.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: mo_size check bug fix. mo_size is not mandatory field.
- So, don't need to check previous payload's mo_size and current
- payload's mo_size when merging it.
- https://bugzilla.gnome.org/show_bug.cgi?id=710609
-
-2013-10-22 15:03:15 -0300 Thiago Santos <ts.santos@partner.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Keep audio error checking fields only for audio
- Video shouldn't need to be descrambled, this can cause frames data
- to be corrupted
- https://bugzilla.gnome.org/show_bug.cgi?id=684942
-
-2013-10-22 00:56:29 -0300 Thiago Santos <ts.santos@partner.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: really copy the buffer data
- Pass the copy-memory flag to copy the memory for the output buffer,
- otherwise we end with 0-sized buffers
- https://bugzilla.gnome.org/show_bug.cgi?id=684942
-
-2013-09-27 08:05:25 -0700 Michael Esemplare <michael.esemplare@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: If FPS is available, set VFR to false
- https://bugzilla.gnome.org/show_bug.cgi?id=708940
-
-2013-09-24 10:08:10 -0700 Thiago Santos <ts.santos@partner.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Only use segment.start as seek_time if it is relative
- Relying on the gst_segment_do_seek results for getting the
- seeking time should not be used if seek type is SET because the
- do_seek function makes the 'cur` position of the seek normalized
- on the segment range. This means that seeking beyond the end of the
- file might not result in instant EOS as it will end up seeking to
- the final ts of the file.
- In asf seeking to the final timestamp can lead to seeking to the last
- keyframe, meaning a few seconds of video will still be played, which should
- not be the desired behavior when seeking beyong file limits.
-
-2013-09-24 10:07:25 -0700 Thiago Santos <ts.santos@partner.samsung.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Parse last simple index entry
- The entry size is fixed at 6, fix typo to finish parsing the index
- correctly until the last sample
-
-2013-09-24 18:32:31 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * README:
- * common:
- Automatic update of common submodule
- From 6b03ba7 to 865aa20
-
-2013-09-24 15:05:36 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- configure: Actually use 1.3.0.1 as version to make configure happy
-
-2013-09-24 15:00:30 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- Back to development
-
-=== release 1.2.0 ===
-
-2013-09-24 14:27:45 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.2.0
-
-2013-09-24 14:27:39 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-09-18 11:34:56 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Update the documentation to match the default profile used
- https://bugzilla.gnome.org/show_bug.cgi?id=708036
-
-2013-09-20 16:17:31 +0200 Edward Hervey <edward@collabora.com>
-
- * common:
- Automatic update of common submodule
- From b613661 to 6b03ba7
-
-2013-09-19 18:43:43 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From 74a6857 to b613661
-
-2013-09-19 17:36:25 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From 098c0d7 to 74a6857
-
-2013-09-19 11:35:04 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- Back to development
-
-=== release 1.1.90 ===
-
-2013-09-19 10:50:32 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.1.90
-
-2013-09-19 10:30:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-09-19 09:45:55 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/cs.po:
- po: Update translations
-
-2013-09-18 19:13:45 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * ext/x264/gstx264enc.c:
- * tests/check/elements/x264enc.c:
- x264enc: Implement getcaps that restricts the input format depending on the output profile
- Also add some x264enc profile tests
- https://bugzilla.gnome.org/show_bug.cgi?id=708326
-
-2013-09-16 19:38:36 +0200 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix playback regression in push mode
-
-2013-09-10 19:33:33 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
-
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: remove unused variable
-
-2013-09-05 22:56:48 +0200 Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
-
- * ext/x264/gstx264enc.c:
- x264enc: Don't unref future state but the old one
- Being silly will lead us nowhere.
-
-2013-09-04 16:32:43 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/x264/gstx264enc.c:
- x264enc: Check if we have an input state before using it
- Flushing might happen before caps were set on the encoder,
- which would lead to crashes here.
- Thanks to Matej Knopp for analyzing this.
- https://bugzilla.gnome.org/show_bug.cgi?id=707414
-
-2013-09-03 20:28:35 +0200 Matej Knopp <matej.knopp@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix unsigned comparison warning
-
-2013-08-28 13:27:05 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- Back to development
-
-=== release 1.1.4 ===
-
-2013-08-28 12:58:43 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.1.4
-
-2013-08-28 12:58:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-08-28 12:32:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/pt_BR.po:
- po: update translations
-
-2013-08-27 14:13:06 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: log when we output a lower profile than requested
-
-2013-08-21 18:32:17 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/x264/gstx264enc.c:
- x264enc: Consider subset relations of profiles when setting srcpad caps
- constrained-baseline is a subset of baseline, is a subset of main,
- is a subset of high profile.
- https://bugzilla.gnome.org/show_bug.cgi?id=705425
-
-2013-08-21 12:31:23 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: propagate flow return back to base class and upstream
- https://bugzilla.gnome.org/show_bug.cgi?id=705425
-
-2013-08-17 23:13:17 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- configure: fix x264 version checking
- x264 releases carry pkg-config versions such as 0.120.x
- (literallly with an 'x'). Checking for x264 >= 0.120.0 will
- then fail, so we need to either check for > 0.119.0 or
- for >= 0.120 to make this work right.
-
-2013-08-17 23:09:15 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: minor clean-up
- We requires x264 build >= 120 now.
-
-2013-08-15 15:30:31 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix mpeg2_reset() calls
-
-2013-08-15 15:27:48 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/x264/gstx264enc.c:
- ext: Use new flush vfunc of video codec base classes and remove reset implementations
-
-2013-08-01 01:34:05 +0200 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix build on C89 compilers
-
-2013-07-30 17:28:17 +0200 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix seeking in push mode
-
-2013-08-02 14:14:48 +0200 Lubosz Sarnecki <lubosz@gmail.com>
-
- * configure.ac:
- build: add subdir-objects to AM_INIT_AUTOMAKE
- Fixes warnings in automake 1.14
- https://bugzilla.gnome.org/show_bug.cgi?id=705350
-
-2013-08-02 08:25:49 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Do a hard reset of flush_stop
- Which is notified by hard == 0 with latest refactoring.
-
-2013-07-29 21:09:37 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * po/LINGUAS:
- * po/da.po:
- * po/de.po:
- * po/gl.po:
- * po/hr.po:
- * po/hu.po:
- * po/ja.po:
- * po/nb.po:
- * po/nl.po:
- * po/pl.po:
- * po/ru.po:
- * po/sl.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- po: update translations
-
-2013-07-29 14:48:21 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- Back to development
-
-=== release 1.1.3 ===
-
-2013-07-29 13:46:08 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.1.3
-
-2013-07-29 13:46:05 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-07-29 12:13:17 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- gst: Don't swap start/stop for negative rates in the SEGMENT query
-
-2013-07-29 10:57:38 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- real: Implement SEGMENT query
-
-2013-07-29 10:56:06 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Implement SEGMENT query
-
-2013-07-28 16:43:28 +0200 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Add support for dvr-ms
- https://bugzilla.gnome.org/show_bug.cgi?id=705026
-
-2013-07-26 16:47:48 +0200 Edward Hervey <edward@collabora.com>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: Ensure output value has an assigned value
- In the case where this macro was used, that dest was != NULL but that
- the strncmp failed, we would end up with dest_len being undefined.
-
-2013-07-26 16:39:12 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264: Fix dts comparision
- We were assigning to a guint64 value (frame->dts) the sum of a unsigned
- and signed value... resulting it the result never being < 0.
- Instead just check if it is smaller before assigning to frame->dts.
-
-2013-07-25 11:28:54 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: fix seqnum handling for seeks
- Use the same seqnum as the seek for flushes/segments that are
- caused by the seek. Also do the same for segment events
- Fixes #676242
-
-2013-07-25 13:35:44 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Clean up reset/start/stop handling
-
-2013-07-25 11:01:20 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/x264/gstx264enc.c:
- x264enc: React properly to flushing/resetting the encoder
- https://bugzilla.gnome.org/show_bug.cgi?id=656007
-
-2013-07-22 16:01:13 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * gst/realmedia/rademux.c:
- * gst/realmedia/rademux.h:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- realmedia: Add support for group-id in the stream-start event
-
-2013-07-22 15:45:57 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Add support for group-id in the stream-start event
-
-2013-07-22 15:43:18 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- siddec: Add support for group-id in the stream-start event
-
-2013-07-18 17:14:29 +0200 Edward Hervey <edward@collabora.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Mark demuxer as "running" in push-mode
- Allows queries (and other code) to be answered when working in push-mode.
- Running would only be set to TRUE accordingly when working in pull-mode
- once it had read header/index.
- Fixes #680185
-
-2013-07-17 16:17:54 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Properly reset on sequence changes
- Otherwise we end up using stray data/buffers.
- Fixes #690701
-
-2013-07-11 16:57:24 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * configure.ac:
- Back to development
-
-=== release 1.1.2 ===
-
-2013-07-11 16:12:25 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.1.2
-
-2013-07-11 16:12:21 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-06-18 20:06:24 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: correctly determine last chapter's duration
- This (mostly) reverts 683f5eeae7b830e4e4b790f3817ff6b8ce517b1c.
- It worked just fine before ...
-
-2013-06-25 14:20:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- rdt: forward sticky events
-
-2013-06-05 18:36:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- Back to development
-
-=== release 1.1.1 ===
-
-2013-06-05 17:58:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.1.1
-
-2013-06-05 16:42:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2013-06-05 15:15:16 +0200 Sebastian Dröge <slomo@circular-chaos.org>
-
- * common:
- Automatic update of common submodule
- From 098c0d7 to 01a7a46
-
-2013-06-04 16:12:27 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: make the aspect ratio calculation more accurate.
- Utilize the libmpeg2 api: mpeg2_guess_aspect() to guess the
- aspect-ratio if we don't have a valid upstream PAR.
- https://bugzilla.gnome.org/show_bug.cgi?id=685103
-
-2013-05-15 10:52:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 5edcd85 to 098c0d7
-
-2013-05-13 13:19:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/mpeg2dec.c:
- * tests/check/elements/x264enc.c:
- * tests/check/elements/xingmux.c:
- tests: Fix event handling
-
-2013-05-09 19:40:49 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Tell GstAudioEncoder about the number of incoming samples
- lame does internal resampling, but the base class only cares about
- the number of raw samples, so tell finish frames about that, not
- the number of samples in the outgoing frame.:
-
-2013-04-30 10:01:29 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: output byte-stream if downstream has ANY caps
- It's what people expect when they pipe the output to
- filesink or into a tcp connection or pipe.
-
-2013-04-22 23:52:48 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * MAINTAINERS:
- * README:
- * README.static-linking:
- * common:
- Automatic update of common submodule
- From 3cb3d3c to 5edcd85
-
-2012-10-24 12:15:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * ext/a52dec/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mad/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * ext/sidplay/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/x264/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/realmedia/Makefile.am:
- * gst/xingmux/Makefile.am:
- gst: Add better support for static plugins
-
-2013-04-14 17:55:44 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * autogen.sh:
- * common:
- Automatic update of common submodule
- From aed87ae to 3cb3d3c
-
-2013-04-09 21:00:43 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 04c7a1e to aed87ae
-
-2013-03-25 18:05:14 -0700 David Schleef <ds@schleef.org>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rmdemux.c:
- Use %03u instead of %u in gst_pad_create_stream_id_printf()
-
-2013-03-06 13:28:37 +0000 Tom Greenwood <tgreenwood@Toms-MacBook-Pro.local>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix for 0/1 framerate - now uses VFR in this case
- Previously did a division by zero.
- https://bugzilla.gnome.org/show_bug.cgi?id=695728
-
-2013-03-07 00:02:00 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From 2de221c to 04c7a1e
-
-2013-02-08 00:15:01 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: simplify template caps
- No need to make an array for one single element.
-
-2013-02-08 00:11:03 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: put all theoretically possible formats in template caps
- and decide at runtime which subset of these (8-bit or 10-bit video
- formats) is supported. libx264 will be compiled for one of these
- two options, and it is possible to switch by pointing the dynamic
- linker to a different libx264 build at runtime. If we want our
- template caps to be correct, they should contain all then, with
- the actually supported ones determined at runtime.
- https://bugzilla.gnome.org/show_bug.cgi?id=691935
-
-2013-01-23 10:16:51 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: detect supported bit depth and pixel formats at runtime
- http://bugs.debian.org/667573
- https://bugzilla.gnome.org/show_bug.cgi?id=691935
-
-2013-01-30 09:15:18 +0100 Benjamin Gaignard <benjamin.gaignard@st.com>
-
- * autogen.sh:
- autogen.sh: allow calling from out-of-tree
- Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
- https://bugzilla.gnome.org/show_bug.cgi?id=692857
-
-2013-01-28 20:43:08 +0100 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From a942293 to 2de221c
-
-2013-01-15 15:18:04 +0100 Martin Pitt <martinpitt@gnome.org>
-
- * tests/check/Makefile.am:
- tests: use _1_0 variants for the various registry variables
- These override the variants without version suffix. Makes 'make check' work
- properly in environments that set the suffixed variant for 1.0, such as
- jhbuild.
-
-2013-01-15 15:06:41 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From a72faea to a942293
-
-2012-12-30 23:56:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- configure: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
- AM_CONFIG_HEADER has been removed in the just-released automake 1.13:
- https://lists.gnu.org/archive/html/automake/2012-12/msg00038.html
- https://bugzilla.gnome.org/show_bug.cgi?id=690881
-
-2012-12-19 17:16:53 +0100 Thijs Vermeir <thijsvermeir@gmail.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: use appropriate printf format for gsize
-
-2012-12-19 17:15:03 +0100 Thijs Vermeir <thijsvermeir@gmail.com>
-
- * ext/cdio/gstcdio.h:
- cdio: Fix redundant redeclaration of 'cdio_version_string'
- cdio/version.h is already included by cdio/cdio.h
-
-2012-12-01 13:26:26 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: init debug category
-
-2012-11-30 20:09:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/dvdread/Makefile.am:
- dvdread: link to libgmodule-2.0 since the g_module_* API is used
- And the gmodule lib has been moved into the Requires.private
- section of the pkg-config file in core.
-
-2012-11-27 17:07:31 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/cdio/gstcdiocddasrc.c:
- * ext/cdio/gstcdiocddasrc.h:
- cdiocddasrc: detect whether drive produces samples in non-host endianness
- If drive produces samples in other endianness than the host,
- we need to byte swap them before pushing them out, or we
- produce nothing but noise. cdparanoia detects this automatically,
- but libcdio does not, so we have to do it ourselves.
- This is needed on e.g. the PowerBook G4 with Matshita UJ-816 drive.
- https://bugzilla.gnome.org/show_bug.cgi?id=377280
-
-2012-11-19 11:27:21 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From b497c4f to a72faea
-
-2012-11-16 13:32:00 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * tests/check/elements/xingmux_testdata.h:
- xingmux: Fix unit test after change to correctly calculate number of frames
-
-2012-11-15 16:42:09 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add support for 10-bit color formats
- Requires x264 to be built with 10-bit support, which disables
- 9-bit support. Also only advertise the color formats that were
- compiled into x264.
-
-2012-11-15 16:21:49 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add support for Y444, Y42B and NV12
-
-2012-11-11 20:42:42 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/cdio/Makefile.am:
- * ext/cdio/gstcdio.c:
- cdio: use gst_tag_freeform_string_to_utf8() for CD-TEXT strings
- They're probably not going to be UTF-8, but ISO-8859-1 or somesuch
- if they're not plain ASCII.
-
-2012-11-09 11:33:40 +0100 Gautier Portet <kassoulet@gmail.com>
-
- * gst/xingmux/gstxingmux.c:
- xingmux: Properly calculate the number of frames
- First, the xing header frame is never added to the count,
- we have to increment the count.
- Secondly, there is a rounding error when calculating the
- frame duration, as spf*GST_SECOND/rate is not an integer
- (26122448.9) an it must be 26122449.
-
-2012-11-07 20:45:38 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- configure.ac: update courtesy of autoupdate
-
-2012-11-07 20:39:56 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- * configure.ac:
- configure: let AG_GST_PLUGIN_DOCS check for python
- And update common for move from AS_PATH_PYTHON to AM_PATH_PYTHON,
- which as a side-effect should pick up newer python versions as
- well.
- https://bugzilla.gnome.org/show_bug.cgi?id=563903
-
-2012-11-05 13:16:52 -0800 Michael Smith <msmith@rdio.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: Fix parsing of headers to set correct width to allow decode.
-
-2012-11-03 20:38:00 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * tests/check/elements/mpg123audiodec.c:
- Fix FSF address
- https://bugzilla.gnome.org/show_bug.cgi?id=687520
-
-2012-11-03 20:40:37 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * docs/random/LICENSE:
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- * ext/amrnb/amrnb.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbenc.h:
- * ext/amrwbdec/amrwb.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/amrwbdec/amrwbdec.h:
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/cdio/gstcdiocddasrc.h:
- * ext/dvdread/dvdreadsrc.c:
- * ext/dvdread/dvdreadsrc.h:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- * ext/lame/plugin.c:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/twolame/gsttwolamemp2enc.h:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- * gst-libs/gst/gettext.h:
- * gst-libs/gst/glib-compat-private.h:
- * gst-libs/gst/gst-i18n-plugin.h:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- * gst/asfdemux/gstasf.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtpasfdepay.h:
- * gst/asfdemux/gstrtspwms.c:
- * gst/asfdemux/gstrtspwms.h:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/dvdsub/gstdvdsubparse.h:
- * gst/realmedia/asmrules.c:
- * gst/realmedia/asmrules.h:
- * gst/realmedia/gstrdtbuffer.c:
- * gst/realmedia/gstrdtbuffer.h:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/pnmsrc.h:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rademux.h:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtdepay.h:
- * gst/realmedia/rdtjitterbuffer.c:
- * gst/realmedia/rdtjitterbuffer.h:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rdtmanager.h:
- * gst/realmedia/realhash.c:
- * gst/realmedia/realhash.h:
- * gst/realmedia/realmedia.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- * gst/realmedia/rmutils.c:
- * gst/realmedia/rmutils.h:
- * gst/realmedia/rtspreal.c:
- * gst/realmedia/rtspreal.h:
- * gst/xingmux/gstxingmux.c:
- * gst/xingmux/gstxingmux.h:
- * gst/xingmux/plugin.c:
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/mpeg2dec.c:
- * tests/check/elements/x264enc.c:
- * tests/check/generic/index.c:
- * tests/check/generic/states.c:
- * tests/check/pipelines/lame.c:
- Fix FSF address
- https://bugzilla.gnome.org/show_bug.cgi?id=687520
-
-2012-10-30 13:39:52 +0100 Andreas Frisch <fraxinas@opendreambox.org>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: allocate correct amount of memory for bitmap
- https://bugzilla.gnome.org/show_bug.cgi?id=687192
-
-2012-10-30 09:27:24 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: removed unnecessary finalize function
- https://bugzilla.gnome.org/show_bug.cgi?id=687176
-
-2012-10-30 09:20:04 +0000 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: reset bytes counter
- Reset the total_bytes counter so that we get timestamps correct.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686931
-
-2012-10-30 10:20:09 +1100 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: Fix leaks from not chaining up in the finalize function
-
-2012-10-25 12:38:47 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * win32/common/config.h:
- Back to feature development
-
-=== release 1.0.2 ===
-
-2012-10-25 01:11:10 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.0.2
-
-2012-10-24 13:41:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/mpg123audiodec.c:
- tests: fix up mpg123 test a little
- - dist input files
- - fix sample leak
- - simplify check for elements
- - only run mpg123 test if mpg123 is available and selected
- - fix build in uninstalled setup
- https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 12:30:10 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * tests/check/elements/mpg123audiodec.c:
- tets: add unit test for mpg123audiodec
- https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 00:36:42 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: added gtkdoc section
- https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 00:22:05 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: fixed bug with last frame, disabled internal resampler & chatter
- * The last MP3 frame wasn't being pushed when base class was draining
- * Made sure mpg123 cannot ever use its (crude) internal resampler
- * Disabled mpg123 stderr output
- https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 20:10:03 +0800 Scott Fan <fanchp@neusoft.com>
-
- * gst/asfdemux/Makefile.am:
- * gst/realmedia/Makefile.am:
- Makefile.am: Fix typos for generating the Android.mk files
- Change libgstasfdemux to libgstasf, and change libgstrealmedia to libgstrmdemux.
- The typos led to generate the incorrect Android.mk files for the asfdemux
- and realmedia plugin.
- https://bugzilla.gnome.org/show_bug.cgi?id=686748
-
-2012-10-24 00:21:45 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: cleaned up comments, formatting, and logging lines
- also replaced mpg123decoder->handle != NULL checks with asserts
- https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-18 22:19:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: correctly set next cell when seeking to sector
-
-2012-10-18 22:18:28 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubparse.c:
- dvdsubparse: send src caps when receiving sink caps
-
-2012-10-12 14:49:28 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: update dvd event to enhanced approach
- ... in line with resindvdsrc.
-
-2012-10-07 17:08:37 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * docs/Makefile.am:
- docs: add 'make upload' target for new-release script
-
-2012-10-07 16:58:10 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * win32/common/config.h:
- Back to development (bug fixing)
-
-=== release 1.0.1 ===
-
-2012-10-07 16:13:11 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.0.1
-
-2012-10-06 14:58:34 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From 6c0b52c to 6bb6951
-
-2012-10-01 00:01:09 +1000 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Don't error out when there is no associated buffer
- In 0.10, having mpeg2dec occasionally tell us to output a frame that
- was never decoded was just ignored, so do the same in 1.0
- Fixes: #685107
-
-2012-09-29 12:13:00 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * REQUIREMENTS:
- * gst/dvdsub/gstdvdsubdec.c:
- Purge mention of liboil and update REQUIREMENTS
- https://bugzilla.gnome.org/show_bug.cgi?id=673285
-
-2012-09-26 01:04:32 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/x264/gstx264enc.c:
- x264enc: when setting fallback decoder latency, set valid min_latency
- Min. latency needs to be a valid time, so pass 0 as default
- value in the fallback case where we can't determine any latency,
- and avoid nasty criticals at runtime.
-
-2012-09-24 16:52:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * win32/common/config.h:
- Back to development (bug fixing)
-
-=== release 1.0.0 ===
-
-2012-09-24 14:32:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 1.0.0
-
-2012-09-22 16:08:54 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From 4f962f7 to 6c0b52c
-
-=== release 0.11.99 ===
-
-2012-09-17 17:59:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-xingmux.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.99
-
-2012-09-17 16:57:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update docs
-
-2012-09-17 16:57:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/twolame/Makefile.am:
- * tests/check/Makefile.am:
- Remove -DGST_USE_UNSTABLE_API
-
-2012-09-17 12:22:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- Update docs
-
-2012-09-17 10:53:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/cdio/gstcdio.c:
- cdio: work around cdio headers re-defining VERSION and PACKAGE_VERSION
- Thanks guys. Fixes plugin version in gst-inspect-1.0 and docs
- introspection/updating for this plugin.
-
-2012-09-15 22:23:53 +0200 Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
-
- * gst-plugins-ugly.spec.in:
- Switch to F18 package naming
-
-2012-09-14 16:28:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/dvdread/demo-play:
- * tests/check/elements/mpeg2dec.c:
- rename some caps and elements in examples
-
-2012-09-14 02:58:26 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * configure.ac:
- Back to development
-
-=== release 0.11.94 ===
-
-2012-09-14 02:49:34 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ChangeLog:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.94
-
-2012-09-14 01:48:50 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.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-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update docs
-
-2012-09-13 13:49:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: use DTS and PTS
- Video uses DTS as timestamps. Set the DTS on the buffers and leave the PTS
- undefined to make the decoder do the right thing. We can then remove the code
- that tries to guess the PTS from the DTS.
-
-2012-09-10 22:30:18 -0700 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Hold ref to buffer while mapped
- So that the buffer still exists when we go to unmap it later,
- even if it got pushed in the meantime.
-
-2012-09-11 16:48:51 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * tests/check/elements/x264enc.c:
- x264enc test: x264enc produces constrained-baseline, not the full baseline
-
-2012-09-11 17:37:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- gst: only activate in pull mode if upstream is seekable
-
-2012-09-11 11:28:06 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- rademux: tags can be NULL
-
-2012-09-11 11:13:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: fix email address
-
-2012-09-11 11:12:38 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: init base class method only once
-
-2012-09-11 10:46:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/xingmux/gstxingmux.c:
- xingmux: remove defunct commented code
-
-2012-09-11 10:40:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvbsubdec: handle and send GAP event
- ... in stead of update newsegment event.
-
-2012-09-11 10:34:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvbsubdec: adjust disabled code comment style
-
-2012-09-09 15:48:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: clean up some debug statements
-
-2012-09-07 17:38:18 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: handle possibly negative DTS provided by codec
- ... by arranging for an offset such that DTS == PTS for keyframes,
- which is expected elsewhere to go along with semantics of PTS and DTS.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679443
-
-2012-09-07 13:31:15 +0200 Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
-
- * gst-plugins-ugly.spec.in:
- Fix spec file for ugly
-
-2012-09-06 14:42:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- tests: mpeg2dec: initialize variable
- ... which avoids test segfaulting.
-
-2012-08-30 16:26:00 -0700 Edward Hervey <edward@collabora.com>
-
- * tests/check/elements/mpeg2dec.c:
- check: Feed parsed data to mpeg2dec
- And fix the expected output caps by adding colorimetry field
-
-2012-08-22 13:31:00 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 668acee to 4f962f7
-
-2012-08-22 13:19:01 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * configure.ac:
- configure: bump gtk-doc req to 1.12 (mar-2009)
- This allows us to e.g. unconditionally use gtkdoc-rebase.
-
-2012-08-20 23:32:32 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- video/x-dvd-subpicture -> subpicture/x-dvd
-
-2012-08-09 16:30:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Use new video encoder base class API for handling tags
-
-2012-08-09 11:48:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: Give MARGINAL rank to the mpg123 decoder element
-
-2012-08-08 16:27:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Set alignment at the correct place of GstAllocationParams
-
-2012-08-08 16:26:41 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- Back to development
-
-=== release 0.11.93 ===
-
-2012-08-08 15:23:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.93
-
-2012-08-08 15:23:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/realmedia/rmdemux.c:
- gst: silence some compiler warnings with -DG_DISABLE_ASSERT
-
-2012-08-08 12:58:50 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/mpg123/Makefile.am:
- mpg123: dist header file
-
-2012-08-06 15:31:50 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: avoid some more invalid timestamp arithmetic
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=681291
-
-2012-08-05 18:30:52 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- gst: Add stream-id to stream-start events
-
-2012-07-27 11:35:52 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Don't use NULL values for fbuf
- We need to make a difference between the initial dummy buffers (which
- have a fbuf->id of NULL) and the buffers on which we allocated
- video frames.
-
-2012-08-05 16:40:57 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * common:
- Automatic update of common submodule
- From 94ccf4c to 668acee
-
-2012-08-04 16:13:36 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * ext/a52dec/gsta52dec.c:
- * ext/lame/gstlamemp3enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmutils.c:
- gst_tag_list_free -> gst_tag_list_unref
-
-2012-08-03 13:43:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: map input buffer in READ mode, not WRITE mode
- Makes things actually work.
-
-2012-08-03 11:50:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpg123/gstmpg123audiodec.c:
- mpg123: query supported output formats at run-time
- Fixes stuff. We use a string here since we can't be bothered
- with GValue.
-
-2012-08-03 11:48:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpg123/Makefile.am:
- mpg123: hook up to build system
-
-2012-08-03 11:13:48 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
-
- * ext/mpg123/gstmpg123audiodec.c:
- * ext/mpg123/gstmpg123audiodec.h:
- mpg123: add new libmpg123-based mp3 decoder plugin
- Needs a bit of cleaning up.
- https://bugzilla.gnome.org/show_bug.cgi?id=681003
-
-2012-07-28 00:28:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- tag: Update for taglist/tag event API changes
-
-2012-07-26 18:30:04 +0200 Edward Hervey <edward@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Avoid dropping first GOP
- We use the mpeg2_fbuf_t id field as an integer and not as a pointer, so
- do not check if it is NULL or not.
- And cleanup a bit of debug
-
-2012-07-25 13:05:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rdtmanager.h:
- rdt: add on-npt-stop signal
- rtspsrc will look for it.
-
-2012-07-25 12:48:21 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- rdt: set caps after activating the pad
-
-2012-07-25 12:48:06 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/gstrdtbuffer.c:
- rdt: reset map info
-
-2012-07-25 09:37:08 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: fix padding correction
- Fix padding correction. gst_buffer_copy_into() appends the memory to the already
- existing memory in the target buffer..
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680536
-
-2012-07-23 13:32:26 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: copy buffer flags when cropping
- When we crop a buffer, copy the flags as well.
-
-2012-07-23 11:25:34 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix GstVideoInfo pointer
-
-2012-07-23 11:13:05 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Correctly flag output buffer interlaced state
- If the sequence is not flagged as progressive its buffers are marked
- interlace mode mixed. There is an individual picture flag indicating
- whether picture in the sequence are interlaced or not. This is used
- along with the new GST_VIDEO_BUFFER_FLAG_INTERLACED to correctly and
- completely indicate the buffer's interlaced state.
- Also, TFF and RFF should only be set if the sequence is not progressive.
-
-2012-07-23 10:33:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- ext: Update for video base classes API changes
-
-2012-07-23 08:45:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 98e386f to 94ccf4c
-
-2012-07-20 16:12:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: make sure to avoid arithmetic with _NONE timestamp
-
-2012-07-16 17:36:19 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: convert invalid 0 payload TS into GST_CLOCK_TIME_NONE
- ... so it does not get used as first (valid) payload ts, whereas
- the first real valid payload ts may be considerably larger.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679838
-
-2012-07-20 14:41:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: slightly relax supported seek requirements
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680279
-
-2012-07-19 09:58:50 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Propagate GstFlowReturn where needed
- It was just ignoring the return values...
-
-2012-07-19 09:56:17 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Store temporary buffers out of the way
- When mpeg2dec needs to do cropping (because downstream can't handle it),
- we need temporary buffers to decode to.
- Use the user_data field to store those, and unify the rest of the code
- that needs to touch a buffer (regardless of how/where it was allocated).
- https://bugzilla.gnome.org/show_bug.cgi?id=680194
-
-2012-07-18 18:32:54 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Call gst_video_decoder_negotiate()
-
-2012-07-18 17:21:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: give stream tags a different event name so they don't overwrite global tags
- There can only be one taglist per name for sticky tag events.
- Needs to be fixed more properly, see
- https://bugzilla.gnome.org/show_bug.cgi?id=677619
-
-2012-07-18 16:49:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- rademux: set/send caps on pad after activating it
-
-2012-07-18 16:46:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: set/send caps after activating the source pads
- Makes sure the caps event isn't dropped immediately.
-
-2012-07-17 20:54:45 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: mustn't drop queries like caps query if not started yet
-
-2012-07-15 20:12:46 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: extract WM/Year as GstDateTime instead of GDate
- So we can signal that only the year field is valid.
-
-2012-07-13 15:41:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: don't leak payload if we are not pushing it
-
-2012-07-13 13:59:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- demuxers: Push STREAM_START when needed
-
-2012-07-13 11:36:40 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asf: don't push on inactive streams
-
-2012-07-12 18:05:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: set rank to NONE
- It should never be autoplugged really, for DVD
- playback there's rsndvd (or will be, realsoonnow).
-
-2012-07-09 16:27:25 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- fix for allocator API changes
-
-2012-07-06 11:50:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- update for query api changes
-
-2012-07-06 11:27:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- update for query api changes
-
-2012-07-06 11:03:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- update for allocation query changes
-
-2012-07-05 23:23:33 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * LICENSE_readme:
- LICENSE_readme: fix typo
-
-2012-07-05 22:48:18 +0100 Tim-Philipp Müller <tim@centricular.net>
-
- * LICENSE_readme:
- LICENSE_readme: mention x264
- https://bugzilla.gnome.org/show_bug.cgi?id=679472
-
-2012-07-05 13:12:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- gst: Implement segment-done event
-
-2012-06-27 11:23:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asf: fix x-wmv format in caps
-
-2012-06-27 10:24:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asf: unmap packets
-
-2012-06-21 15:13:57 +0100 Bastien Nocera <hadess@hadess.net>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Ignore parsing errors from broken packets
- We should instead be counting the number of errors and exiting if
- they're too numerous. This makes a number of broken ASF files playable.
- https://bugzilla.gnome.org/show_bug.cgi?id=678543
- Conflicts:
- gst/asfdemux/asfpacket.c
- gst/asfdemux/gstasfdemux.c
-
-2012-06-26 17:15:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- fix interlace-mode
-
-2012-06-25 09:43:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Add comment explaining why we first chain up to the parent class' decide_allocation
-
-2012-06-25 09:34:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Set allocation parameters to guarantee 16-byte aligned output buffers
- Fixes bug #377713.
-
-2012-06-20 13:36:25 -0400 Matej Knopp <matej.knopp@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix unitialized variable and taglist event
-
-2012-06-20 13:23:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix compilation
-
-2012-06-20 10:39:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- update for task api change
-
-2012-06-20 10:39:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/x264/gstx264enc.c:
- fix compilation
-
-2012-06-20 09:06:37 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Port to 0.11 again
-
-2012-06-19 15:19:28 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix compiler warning
-
-2012-05-30 12:50:13 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Report PAR if not present upstream
- And clean up some code
-
-2012-05-04 16:09:57 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: use _scale_ceil to compute frame period
- https://bugzilla.gnome.org/show_bug.cgi?id=675769
-
-2012-05-04 16:08:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: mpeg2dec actually has 3 frame latency
- https://bugzilla.gnome.org/show_bug.cgi?id=675769
-
-2012-05-01 18:49:03 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix large output buffers leak
-
-2012-05-01 18:46:31 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Port to new way of handling frame reference
-
-2012-05-01 16:12:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: don't leak input_state
-
-2012-04-13 19:06:52 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Port to GstVideoDecoder base class
- Conflicts:
- ext/mpeg2dec/gstmpeg2dec.c
- ext/mpeg2dec/gstmpeg2dec.h
- Back to 0.10 state, needs to be ported to 0.11 again.
-
-2012-06-19 09:26:46 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master'
-
-2012-06-19 09:26:02 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Port to 0.11 again
-
-2012-05-07 11:52:40 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Don't set latency while holding object lock
- This reverts commit 30a0b50e9ca0d625e61f994d4f8acd022dcddf38.
- https://bugzilla.gnome.org/show_bug.cgi?id=675762
-
-2012-05-03 18:07:24 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Use video encoder stream lock to avoid deadlock
-
-2012-05-01 18:45:33 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Port to new way of passing frame reference
-
-2012-04-30 19:00:09 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Set default stream-format to avc as it's a better format
-
-2012-04-26 22:27:55 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix setting latency
- Fixes setting latency when framerate is dynamic and round up the latency
- to avoid rounding issues.
-
-2012-04-30 18:59:44 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: gst_video_encoder_get_frame() is now transfer full
-
-2012-04-26 17:31:45 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: don't leak output state
-
-2012-04-18 17:09:12 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Remove x264 backward compatibility support
-
-2012-04-18 16:13:57 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Report latency base on x264 buffer size
-
-2012-04-17 15:44:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
- * configure.ac:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Port to GstVideoEncoder baseclass
- Conflicts:
- configure.ac
- ext/x264/gstx264enc.c
- ext/x264/gstx264enc.h
- Back to 0.10 state, needs to be ported to 0.11 again.
-
-2012-06-16 18:29:54 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Android.mk:
- * LICENSE_readme:
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-synaesthesia.xml:
- * gst/synaesthesia/.gitignore:
- * gst/synaesthesia/Makefile.am:
- * gst/synaesthesia/README:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/synaesthesia/gstsynaesthesia.h:
- * gst/synaesthesia/synaescope.c:
- * gst/synaesthesia/synaescope.h:
- synaesthesia: remove experimental GPL-ed synaesthesia plugin
- It never made it out of experimental, and there's a new
- synaescope element in gst-plugins-bad that's hopefully
- sufficiently similar.
- https://bugzilla.gnome.org/show_bug.cgi?id=356882
-
-2012-06-16 18:13:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegstream/.gitignore:
- mpegstream: remove leftover hidden .gitignore file
-
-2012-06-08 15:55:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/x264enc.c:
- elements: Use gst_pad_set_caps() instead of manual event fiddling
-
-2012-06-08 15:05:22 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 03a0e57 to 98e386f
-
-2012-06-07 16:28:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- Back to development
-
-=== release 0.11.92 ===
-
-2012-06-07 16:28:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.92
-
-2012-06-07 16:28:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2012-06-06 18:19:06 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 1fab359 to 03a0e57
-
-2012-06-06 13:03:04 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- update for tag event change
-
-2012-06-01 10:29:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From f1b5a96 to 1fab359
-
-2012-05-31 13:08:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 92b7266 to f1b5a96
-
-2012-05-30 12:45:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From ec1c4a8 to 92b7266
-
-2012-05-30 11:24:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 3429ba6 to ec1c4a8
-
-2012-05-26 23:41:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rmutils.c:
- realmedia: don't use GstStructure API on tag lists
-
-2012-05-21 14:57:44 +0200 Julien Isorce <julien.isorce@gmail.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: really prefer the original number (and position) of channels
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676495
-
-2012-05-24 12:32:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From dc70203 to 3429ba6
-
-2012-05-17 21:12:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/x264/gstx264enc.c:
- x264: bump x264 requirement to build 106 or later
- Build 106 is from September 2010.
- https://bugzilla.gnome.org/show_bug.cgi?id=676257
-
-2012-04-15 23:39:48 +0400 Руслан Ижбулатов <lrn1986@gmail.com>
-
- * ext/a52dec/gsta52dec.c:
- * m4/a52.m4:
- a52dec: adapt to work also with new liba52
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674091
-
-2012-05-17 12:40:05 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: trigger renegotiation upon changed stream channels
- Fixes #675451
-
-2012-05-16 09:13:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Require core/base 0.11.91
-
-2012-01-13 18:18:33 -0500 Matej Knopp <matej.knopp@gmail.com>
-
- * .gitignore:
- .gitignore: add visual studio IDE files and OS X .DS_Store files
- https://bugzilla.gnome.org/show_bug.cgi?id=667899
-
-2012-05-13 17:00:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- Back to development
-
-=== release 0.11.91 ===
-
-2012-05-13 16:49:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.91
-
-2012-05-13 16:48:57 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2012-05-13 16:45:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
-
-2012-05-13 15:56:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From dc70203 to 3429ba6
-
-2012-04-24 15:27:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Use correct enum type
-
-2012-05-10 10:11:44 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: implement pull mode seek snap flags when an index is present
- Also ensure we get a proper EOS when seeking past the end of the
- file, or (when the snap after flag is set) between the last keyframe
- and the end of the file.
-
-2012-05-03 23:50:30 +0100 Leon Merten Lohse <leon@green-side.de>
-
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c:
- cdio: compensate for libcdio's recent cd-text api changes
- https://bugzilla.gnome.org/show_bug.cgi?id=675112
- Conflicts:
- ext/cdio/gstcdiocddasrc.c
-
-2012-04-30 21:27:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdread: fix build after recent include reshuffling in core
- Need to include gmodule.h ourselves now.
-
-2012-04-19 12:22:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- video: Update for libgstvideo API changes
-
-2012-04-16 09:09:35 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 6db25be to dc70203
-
-2012-04-12 13:56:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- asfdemux: fix performance issue, especially with high-bitrate streams
- Two things were suboptimal from a performance point of view:
- a) consider a large media object such as a video keyframe, which
- may be split up into multiple fragments. We would assemble
- the media object as follows:
- buf = join (join (join (frag1, frag2), frag3), frag4)
- which causes many unnecessary memcpy()s, and malloc/free,
- which could easily add up to a multiple of the actual object
- size. To avoid this, we allocate a buffer of the size needed
- from the start and copy fragments into that directly.
- b) for every fragment to join, we would create a sub-buffer
- before joining it (which would discard the sub-buffer again),
- leading to unnecessary miniobject create/free churn.
- Conflicts:
- gst/asfdemux/asfpacket.c
- gst/asfdemux/asfpacket.h
-
-2012-04-12 14:45:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: avoid unnecessary stream lookup
- We have already retrieved the stream for that stream number and
- made sure it's not NULL, so no need to do it again here; neither
- the number nor the streams changed since the last time.
-
-2012-04-02 19:31:20 +0200 Alban Browaeys <prahal@yahoo.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: fix first_access bigger than 2
- gst_buffer_extract returns the number of bytes extracted, here 2 max.
- Set size to the buffer size as was done in 0.10 to avoid first_access
- error when it bypass 2.
- https://bugzilla.gnome.org/show_bug.cgi?id=673434
-
-2012-04-13 13:43:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * autogen.sh:
- * configure.ac:
- configure: Modernize autotools setup a bit
- Also we now only create tar.bz2 and tar.xz tarballs.
-
-2012-04-13 13:37:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 464fe15 to 6db25be
-
-2012-04-12 11:19:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- Back to development
-
-=== release 0.11.90 ===
-
-2012-04-12 10:40:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.11.90
-
-2012-04-12 10:39:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2012-04-10 00:48:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/gstmad.c.orig:
- mad: remove .c.orig file
-
-2012-04-10 00:47:44 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.c.orig:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtspwms.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rtspreal.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/xingmux/gstxingmux.c:
- Use new gst_element_class_set_static_metadata()
-
-2012-04-05 18:43:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 7fda524 to 464fe15
-
-2012-04-05 17:40:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnb.c:
- * ext/amrwbdec/amrwb.c:
- * ext/cdio/gstcdio.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/plugin.c:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.c.orig:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasf.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/realmedia/realmedia.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/xingmux/plugin.c:
- gst: Update for GST_PLUGIN_DEFINE() API changes
-
-2012-04-05 13:26:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Update version to 0.11.89.1
-
-2012-04-04 14:38:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/version.entities.in:
- * ext/a52dec/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mad/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * ext/sidplay/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/x264/Makefile.am:
- * gst-plugins-ugly.spec.in:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/realmedia/Makefile.am:
- * pkgconfig/Makefile.am:
- * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
- * tests/check/Makefile.am:
- gst: Update versioning
-
-2012-04-02 15:21:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: fix cropping
- fix cropping in mpeg2dec
-
-2012-04-01 20:19:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: add crop metadata when buffer is still writable
-
-2012-03-30 18:13:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- update for buffer api change
-
-2012-03-30 11:52:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/mad/gstmad.c:
- ext: Update for audio decoder API changes
-
-2012-03-29 17:32:08 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/x264enc.c:
- tests: make more valgrind-friendly and plug caps leak
-
-2012-03-28 12:50:09 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdsub/gstdvdsubdec.c:
- update for buffer changes
-
-2012-03-27 14:07:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * tests/check/elements/x264enc.c:
- tests: x264enc: adjust test to removal of deprecated properties
-
-2012-03-26 12:13:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Replace master with 0.11
-
-2012-03-22 15:56:04 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- back to development
-
-=== release 0.11.2 ===
-
-2012-03-22 15:52:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- Release 0.11.2
-
-2012-03-21 13:18:35 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- tests: fix after memory changes
-
-2012-03-21 13:18:11 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: remove deprecated properties
-
-2012-03-20 12:08:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
- So 0.11 folks also get amr include fixes.
- Conflicts:
- ext/a52dec/gsta52dec.c
- ext/mad/gstmad.c
-
-2012-03-18 18:56:16 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- synaesthesia: fixup for bufferpool api changes
- ... as well as some caps ref handling.
-
-2012-03-16 21:48:02 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- don't pass random pointers to pull_range
-
-2012-03-15 22:11:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- update for bufferpool changes
-
-2012-03-15 20:38:50 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- update for allocation query changes
-
-2012-03-15 13:38:16 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/x264/gstx264enc.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- update for memory api changes
-
-2012-03-14 19:52:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- take padding into account
-
-2012-03-13 18:27:51 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: simplify parsing code
- Also fixes #671455 (expected at least).
-
-2012-03-12 16:16:17 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- configure.ac: bump required GLib to 2.31.14
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=671911
-
-2012-03-12 12:23:43 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- fix for caps _normalize changes
-
-2012-03-11 19:07:19 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- fix for caps api changes
-
-2012-03-06 16:08:23 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- a52dec: use base class tag handling helper
- ... so as to ensure these to be handled and sent at proper time.
-
-2012-03-06 14:28:15 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: Use variable type with correct signedness
-
-2011-01-14 18:50:41 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Copy planes in one go when possible
-
-2012-03-03 17:17:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.h:
- * ext/amrwbdec/amrwbdec.h:
- amrnb, amrwbdec: fix build with opencore-amr >= 0.1.3
- In previous versions, the opencore-amr include sub-directory
- would be specified in the include path in the CFLAGS, but this
- is no longer the case in newer versions, so we need to add those
- to our include directives.
- Based on patch by: Christian Morales Vega
- https://bugzilla.gnome.org/show_bug.cgi?id=671123
-
-2012-03-03 16:56:13 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: get rid of non-pkg-config ways to check for opencore-amr
-
-2012-02-29 17:26:42 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- update for metadata API changes
-
-2012-02-27 06:35:01 +0100 Alessandro Decina <alessandro.d@gmail.com>
-
- * ext/amrwbdec/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mad/Makefile.am:
- amrwbdec, lame, mad: link to libgstbase
-
-2012-02-27 06:33:48 +0100 Alessandro Decina <alessandro.d@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix compiler warning
-
-2012-02-27 00:36:46 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
-
-2012-02-27 00:34:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge commit '02f5d72a0519bcbe8f6958fab6dd998fc8ccda6b' into 0.11
- Conflicts:
- ext/mad/gstmad.c
-
-2012-02-23 11:20:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- * 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-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Bump version after release
-
-2012-02-21 18:58:06 -0800 David Schleef <ds@schleef.org>
-
- * autogen.sh:
- autogen.sh: avoid touching .po files during 'make'
- A simple workaround to deal with GNU gettext automake integration
- failing to deal with git. Fixes: #669207
-
-2012-02-22 02:17:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264: convert g_print to LOG
-
-2012-02-22 02:07:49 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- update for new memory api
-
-2012-02-22 02:07:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: handle pts and dts
-
-2012-02-21 18:53:57 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: handle libmad freeform parsing quirk
-
-2012-02-21 18:49:50 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: fixup unhacking last frame coaxing
- ... so as to not only replace the data pointer but also available size.
-
-2012-02-20 14:27:49 +0000 Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
-
- * gst-plugins-ugly.spec.in:
- Add latest plugins
-
-2012-02-18 00:02:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * win32/common/config.h:
- win32: back to development
-
-2012-02-17 17:53:34 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * configure.ac:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/synaesthesia/gstsynaesthesia.h:
- synaesthesia: port to 0.11
-
-2012-02-17 17:53:28 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * configure.ac:
- * gst/xingmux/gstxingmux.c:
- xingmux: port to 0.11
-
-2012-02-17 11:06:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- back to development
-
-=== release 0.11.1 ===
-
-2012-02-17 11:06:27 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * 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-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdread.xml:
- * docs/plugins/inspect/plugin-dvdsub.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/eo.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- RELEASE 0.11.1
-
-2012-02-17 09:16:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/mad/gstmad.c
-
-2012-02-16 14:29:47 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: unhack last frame coaxing
- ... so as to maximally use available base class API and interfere least
- as possible with its internal state.
-
-2012-02-15 13:45:00 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: fix compilation
-
-2012-02-15 13:40:13 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: chain up to default event handler
-
-2012-02-11 05:38:41 -0500 Matej Knopp <matej.knopp@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: unmap video frame after encoding
- Fixes major memory leak.
- https://bugzilla.gnome.org/show_bug.cgi?id=669863
-
-2012-02-10 17:02:38 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix after merge
-
-2012-02-10 17:00:33 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/x264/gstx264enc.c
-
-2012-02-09 18:10:48 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- sidplay: don't use ulong properties
-
-2012-02-09 16:14:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- sidplay: fix negotiation
-
-2012-02-09 11:55:07 +0100 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add baseline profile to caps
- 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.
-
-2012-02-08 16:38:09 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/amrnb/amrnbenc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rdtmanager.c:
- GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING
-
-2012-02-07 18:56:23 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- mpeg2dec: fix test a bit more
- Still broken because cropping is broken in mpeg2dec
-
-2012-02-07 11:06:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/x264enc.c:
- * tests/check/elements/xingmux.c:
- tests: fix some tests
-
-2012-02-01 16:20:46 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/twolame/gsttwolamemp2enc.c:
- twolame: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:20:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lame: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:19:55 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:17:57 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:15:27 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:14:08 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- amrnb: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-01-31 15:52:38 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: ensure we do not confuse the base class with our buffer guard
- 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.
-
-2012-01-30 17:17:31 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- update for HEADER flag
-
-2011-07-20 09:00:58 +0200 Alessandro Decina <alessandro.d@gmail.com>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: implement force-key-unit API
-
-2012-01-25 13:58:48 +0100 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * common:
- Automatic update of common submodule
- From c463bc0 to 7fda524
-
-2012-01-25 13:58:54 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrwbdec/amrwbdec.c:
- amr: port to 0.11 again
-
-2012-01-25 13:03:33 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/a52dec/gsta52dec.c
-
-2012-01-25 07:24:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolamemp2enc.c:
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- * gst/realmedia/gstrdtbuffer.c:
- * gst/realmedia/gstrdtbuffer.h:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmutils.c:
- port to new memory API
-
-2012-01-25 11:38:56 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 2a59016 to c463bc0
-
-2012-01-22 23:56:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst-libs/gst/glib-compat-private.h:
- Remove compatibility versions for deprecated GLib API
-
-2012-01-19 15:26:25 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: fix read buffer overflow upon syncing
- The wrong size was being decremented, leading to a runaway
- read loop.
-
-2012-01-19 15:06:47 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- * configure.ac:
- Add --disable-fatal-warnings configure option
-
-2012-01-19 11:34:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- port to new gthread API
-
-2012-01-18 17:00:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure.ac: Require GLib 2.31.10 for consistency
-
-2012-01-18 16:46:42 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 0807187 to 2a59016
-
-2012-01-17 11:55:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: _parse should not return OK if not enough data yet
-
-2012-01-17 11:55:14 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- amrnbdec: _parse should not return OK if not enough data yet
-
-2012-01-13 15:03:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: fix off by one in cell calculation for the last chapter
-
-2012-01-13 15:56:47 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: set caps on src pad before adding it
-
-2012-01-13 15:56:25 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: perform writable buffer map to copy into it
-
-2012-01-13 15:55:15 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- asfpacket: fix 0.11 ported payload extraction
- ... to cater for not necessarily offset == size - cur_pos,
- as size may have been adjusted due to padding.
- Fixes #667567.
-
-2012-01-13 13:46:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: remove useless and semantically (though not practically) wrong code
- The object will be freed, so it's pointless to set the pointers
- to NULL anyway.
-
-2012-01-13 13:46:28 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: remove leaking "optimization"
-
-2012-01-13 00:05:50 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- GST_TYPE_DATE -> G_TYPE_DATE
-
-2012-01-13 00:01:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
- Conflicts:
- ext/a52dec/gsta52dec.c
-
-2012-01-12 13:25:22 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: plug buffer leak
-
-2012-01-12 13:20:26 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: plug buffer leak
-
-2012-01-11 12:31:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/amrnbenc.c:
- amrnbenc: _map and _unmap the appropriate input and output buffers
-
-2012-01-10 15:25:12 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Fix some merge mistakes
-
-2012-01-10 15:17:11 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/a52dec/gsta52dec.c
- ext/a52dec/gsta52dec.h
- ext/lame/gstlame.c
- ext/lame/gstlame.h
- ext/lame/gstlamemp3enc.c
- ext/mad/gstmad.c
- ext/mad/gstmad.h
- gst/mpegaudioparse/gstmpegaudioparse.c
- gst/mpegstream/gstdvddemux.c
- gst/realmedia/rdtdepay.c
- po/es.po
- po/lv.po
- po/sr.po
-
-2012-01-10 11:41:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/dvdsub/Makefile.am:
- dvdsub: add some CFLAGS and LIBS in Makefile.am
- ... since adapter is still used.
-
-2012-01-09 16:00:18 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Don't use buffer after unreffing
-
-2012-01-09 15:46:10 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Only change writable caps and make sure to set updated caps on the srcpad
-
-2012-01-09 15:24:53 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Correctly unmap the buffer with the original data pointer
-
-2012-01-09 15:15:28 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Make sure to set caps on the srcpad if none are set yet
-
-2012-01-08 14:24:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/Makefile.am:
- mad: fix LIBS order in Makefile.am
-
-2012-01-07 21:04:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/gstmad.h:
- mad: remove left-over id3tag.h include
- We don't use libid3tag any more.
-
-2012-01-05 12:17:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: fix for multichannel
-
-2012-01-04 16:05:59 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- a52dec: Update for the new raw audio caps
-
-2012-01-04 15:49:38 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Update for the new raw audio caps
-
-2012-01-04 15:45:43 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Update for the new raw audio caps
-
-2012-01-04 15:44:37 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/twolame/gsttwolamemp2enc.c:
- twolamemp2enc: Update for the new raw audio caps
-
-2012-01-04 15:43:13 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: Add the new layout field to the raw audio caps
-
-2012-01-04 15:42:29 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- amrnb: Add the new layout field to the raw audio caps
-
-2012-01-04 15:26:56 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: Port to the new raw audio caps
-
-2012-01-04 15:12:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Update for libgstriff API changes
- Still needs to handle audio channel reordering.
-
-2012-01-04 19:53:13 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 50b34ab to 0807187
-
-2012-01-04 17:05:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/lame/Makefile.am:
- lame: fix LIBADD order in Makefile.am
-
-2012-01-04 10:33:27 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- * tests/check/elements/mpeg2dec.c:
- * tests/check/elements/x264enc.c:
- * tests/check/elements/xingmux.c:
- * tests/check/generic/states.c:
- tests: make tests compile
-
-2012-01-03 15:27:42 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/amrwbdec/amrwbdec.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- GST_FLOW_UNEXPECTED -> GST_FLOW_EOS
-
-2011-12-30 18:31:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/Makefile.am:
- tests: disable generic index test
-
-2011-12-30 17:53:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: remove all seeking-related code
- A parser or demuxer upstream should handle this Same for
- queries.
-
-2011-12-30 17:49:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: update for GstIndex removal
-
-2011-12-30 17:46:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/cdio/gstcdiocddasrc.c:
- cdio: update for probe vfunc removal in GstAudioCdSrc
-
-2011-12-27 22:54:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: fix printf format in debug statements
- https://bugzilla.gnome.org/show_bug.cgi?id=666926
-
-2011-12-26 18:24:32 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlame.h:
- lame: ensure parsed output
- ... by doing some basic parsing of encoded lame data.
-
-2011-12-26 16:34:01 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlame.h:
- lame: cleanup unused instance struct fields
-
-2011-12-26 18:23:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/Makefile.am:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- lamemp3enc: ensure parsed output
- ... by doing some basic parsing of encoded lame data.
- Fixes #652150.
-
-2011-12-26 18:15:41 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: do not leak merged tags
-
-2011-12-22 15:23:54 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: helpfully bodge the last buffer to let mad decode the last frame
- 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)).
-
-2009-01-25 22:49:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: map subtitle language tag to stream indicated in PGC data
-
-2009-01-25 22:49:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegstream/gstdvddemux.c:
- dvddemux: tweak subtitle stream setup based on dvd language codes event
- ... to allow for non-continuous subtitle stream numbers.
- The missing stream numbers tend to come up as subtitle streams anyway
- (albeit not with an identified language tag).
-
-2011-12-21 13:56:35 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: minor safety tweak to sector seeking
-
-2011-12-20 11:54:38 +0100 Julien Isorce <julien.isorce@gmail.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: check that a52_init returns a valid a52 state
-
-2011-12-19 18:20:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: update for new interlaced flags
-
-2011-12-14 17:33:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/a52dec/Makefile.am:
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- a52dec: port to audiodecoder
-
-2011-12-12 13:44:12 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/Makefile.am:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: port to audiodecoder
-
-2011-12-13 14:54:18 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Don't claim to support upstream renegotiation
- 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.
-
-2011-12-13 14:52:26 +0100 Julien Isorce <julien.isorce@gmail.com>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Check that the a52_state is correctly initialized
-
-2011-12-12 11:33:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst-libs/gst/Makefile.am:
- * gst-libs/gst/glib-compat-private.h:
- * gst/asfdemux/gstasfdemux.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- Work around deprecated thread API in glib master
- Add private replacements for deprecated functions such as
- g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
- to avoid the deprecation warnings. We can't change most of
- these in 0.10 because they're part of our API and ABI.
- Suppress deprecation warnings in selected files, mostly for
- g_static_rec_mutex_*. StaticRecMutex is part of our API/ABI,
- not much we can do here in 0.10.
-
-2011-12-10 15:19:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/LINGUAS:
- * po/eo.po:
- * po/es.po:
- * po/lv.po:
- * po/sr.po:
- po: update translations
-
-2011-12-09 15:25:21 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rdtdepay.c:
- rdtdepay: make buffer metadata writable before setting caps on it
- Fixes issue when the header buffer is being pushed, which was taken
- from the caps and is therefore not writable.
-
-2011-12-06 14:00:18 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- fix for basesrc changes
-
-2011-12-05 18:43:49 +0100 Edward Hervey <edward@collabora.com>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: Initialize GstRTPBuffer before usage
-
-2011-12-02 02:01:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
- Conflicts:
- ext/dvdread/dvdreadsrc.c
-
-2011-11-29 08:49:23 +0100 Руслан Ижбулатов <lrn1986@gmail.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: Fix format string compiler warning
- Fixes bug #665101.
-
-2011-11-28 21:31:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
-
-2011-11-28 18:26:34 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Update for indexable change
-
-2011-11-28 17:52:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- update for clock provider API change
-
-2011-11-28 13:10:01 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/twolame/gsttwolame.c:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/iec958/ac3iec.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstxingmux.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- various: fix pad template ref leaks
- https://bugzilla.gnome.org/show_bug.cgi?id=662664
-
-2011-11-24 21:41:55 +0100 René Stadler <rene.stadler@collabora.co.uk>
-
- * tests/check/elements/xingmux.c:
- tests: update for gstcheck API change
-
-2011-11-23 23:29:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/amrnb/amrnbenc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/twolame/gsttwolamemp2enc.c:
- ext: fix more printf format warnings in debug messages
-
-2011-11-21 22:02:07 +0100 Matej Knopp <matej.knopp@gmail.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- Fix print format compiler warnings on OS X / 64bit
- https://bugzilla.gnome.org/show_bug.cgi?id=662617
-
-2011-11-21 13:36:10 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- update for activation changes
-
-2011-11-18 18:00:28 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- update for new scheduling query
-
-2011-11-18 13:59:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- add parent to activate functions
-
-2011-11-17 15:25:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- add parent to pad functions
-
-2011-11-16 17:28:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- add parent to query function
-
-2011-11-15 17:55:36 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rademux.c:
- _query_peer_*() -> _peer_query_*()
-
-2011-11-15 17:42:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- _accept_caps() -> _query_accept_caps()
-
-2011-11-15 17:23:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- _peer_get_caps() -> _peer_query_caps()
-
-2011-11-15 16:52:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- update for _get_caps() -> _query_caps()
-
-2011-11-15 16:34:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- change getcaps to query
-
-2011-11-14 00:55:16 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: re-instate accidentally dropped rank
-
-2011-11-13 23:47:46 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- * gst/realmedia/pnmsrc.c:
- Update for GstURIHandler get_protocols() changes
-
-2011-11-13 19:01:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- * ext/dvdread/dvdreadsrc.h:
- * gst/realmedia/pnmsrc.c:
- dvdreadsrc, pnmsrc: update for GstURIHandler changes
-
-2011-11-13 01:33:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: re-port to 0.11
- 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).
-
-2011-11-13 00:29:20 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: update for GstBaseAudioDecoder -> GstAudioDecoder rename
-
-2011-08-16 21:12:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: replace with 0.10 version ported to GstAudioDecoder
- 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.
-
-2011-11-13 00:13:17 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- docs: remove bits for old lame element from sections.txt file
-
-2011-11-13 00:04:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Android.mk:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/inspect/plugin-mpegstream.xml:
- * gst-plugins-ugly.spec.in:
- * gst/mpegstream/Makefile.am:
- * gst/mpegstream/README:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegclock.c:
- * gst/mpegstream/gstmpegclock.h:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegpacketize.c:
- * gst/mpegstream/gstmpegpacketize.h:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstmpegstream.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/mpegstream/gstrfc2250enc.h:
- * gst/mpegstream/mpegstream.vcproj:
- * gst/mpegstream/notes:
- * win32/MANIFEST:
- * win32/vs6/gst_plugins_ugly.dsw:
- * win32/vs6/libgstac3parse.dsp:
- * win32/vs6/libgstmpegaudioparse.dsp:
- * win32/vs6/libgstmpegstream.dsp:
- mpegstream: remove the old mpeg-ps parser and demuxers
- Don't want anyone porting this by accident.
- Superseded by mpegpsdemux in -bad.
-
-2011-11-12 21:06:29 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/cdio/Makefile.am:
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/cdio/gstcdiocddasrc.h:
- cdio: port cdiocddasrc to 0.11
-
-2011-11-12 20:44:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- tests: port mpeg2dec to 0.11
- It compiles, but fails.
-
-2011-11-12 20:33:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/x264enc.c:
- tests: port x264enc unit test to 0.11
- Well, it compiles now at least.
-
-2011-11-11 12:33:51 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.h:
- update for base class rename
-
-2011-11-11 12:25:25 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtpasfdepay.h:
- update for base class rename
-
-2011-11-11 01:30:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- po: update translations
-
-2011-11-11 01:29:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * 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-amrwbdec.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-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpeg2dec.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update docs
-
-2011-11-11 01:27:47 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: cosmetic error message change
- LET'S TRY TO KEEP CAPITALS TO A MINIMUM.
-
-2011-11-11 00:58:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * ext/twolame/Makefile.am:
- * ext/twolame/gsttwolamemp2enc.c:
- * ext/twolame/gsttwolamemp2enc.h:
- * po/POTFILES.in:
- twolame: rename to twolamemp2enc
-
-2011-11-11 00:51:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/twolame/gsttwolame.c:
- twolame: port to 0.11
-
-2011-11-10 23:17:53 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Android.mk:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/inspect/plugin-iec958.xml:
- * gst-plugins-ugly.spec.in:
- * gst/iec958/Makefile.am:
- * gst/iec958/ac3_padder.c:
- * gst/iec958/ac3_padder.h:
- * gst/iec958/ac3iec.c:
- * gst/iec958/ac3iec.h:
- * win32/MANIFEST:
- * win32/vs6/libgstiec958.dsp:
- iec958: remove this plugin
- I think it can just go away. Audio sinks can and should payload
- things themselves using the helper API in libgstaudio. If such
- a plugin still makes sense, it should probably be rewritten
- using the library functions (and be put into -good or so).
-
-2011-11-10 18:25:38 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rtspreal.c:
- update for adapter api change
-
-2011-11-10 11:04:06 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- update for removed fixate function
-
-2011-11-09 11:58:03 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rmdemux.c:
- remove query types
-
-2011-11-04 17:32:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmutils.c:
- realmedia is ported
-
-2011-11-04 16:40:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- more template fixes
-
-2011-11-04 16:32:48 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * po/POTFILES.in:
- po: lame => lamemp3enc
-
-2011-11-04 12:04:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtmanager.c:
- make request pads take %u
-
-2011-11-04 10:45:47 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Add basic cropping support
-
-2011-11-02 12:09:45 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- tags: update for tag API removal
-
-2011-10-31 02:24:30 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- update for meta api change
-
-2011-10-29 09:10:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- structure: fix for api update
-
-2011-10-31 14:34:57 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- Merge remote-tracking branch 'origin/master' into 0.11
-
-2011-10-30 15:05:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- tests: port amrnbenc test to 0.11
-
-2011-10-30 15:04:22 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- amrnb: fix up raw audio caps for 0.11
-
-2011-10-30 15:03:29 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/Makefile.am:
- tests: need to define GST_USE_UNSTABLE_API to avoid warnings
-
-2011-10-30 12:29:14 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/lame/README:
- * ext/lame/gstlame.c:
- * ext/lame/gstlame.h:
- * ext/lame/plugin.c:
- * ext/lame/test-lame.c:
- * gst/xingmux/gstxingmux.c:
- * tests/check/pipelines/lame.c:
- lame: remove lame element, it's been superseded by lamemp3enc
-
-2011-10-30 11:51:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- ext, gst: update for taglist API changes
-
-2011-10-29 11:57:40 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't leak pending payload buffers
- Fixes #662964
-
-2011-10-28 15:21:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/sidplay/gstsiddec.cc
-
-2011-10-27 16:53:44 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: use BOILERPLATE macro and cleanup FIXMEs
-
-2011-10-28 09:18:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: fix compiler warnings after gst_caps_new_simple() change
-
-2011-10-21 12:24:01 +0100 Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
-
- * gst-plugins-ugly.spec.in:
- Update specfile with latest changes
-
-2011-10-11 18:03:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't unmap a buffer that doesn't exist
-
-2011-10-10 12:38:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * ext/dvdread/dvdreadsrc.c:
- dvdread: port to 0.11
-
-2011-10-06 17:24:22 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * gst/dvdsub/Makefile.am:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- * gst/dvdsub/gstdvdsubparse.c:
- dvdsub: port to 0.11
-
-2011-10-05 13:32:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/amrwbdec/Makefile.am
- ext/amrwbdec/amrwbdec.c
-
-2011-10-05 13:18:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/gstrdtbuffer.c:
- * gst/realmedia/gstrdtbuffer.h:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmutils.c:
- * gst/realmedia/rtspreal.c:
- realmedia: port to 0.11
-
-2011-10-05 12:05:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrwbdec/Makefile.am:
- * ext/amrwbdec/amrwbdec.c:
- * ext/amrwbdec/amrwbdec.h:
- amrwbdec: port to audiodecoder
-
-2011-10-04 17:00:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/Makefile.am:
- amrnbdec: fixup build
-
-2011-10-04 17:00:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- amrnbdec: remove leftover extraneous _unref
-
-2011-10-04 17:50:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/amrnb/amrnbdec.c
-
-2011-10-04 17:35:40 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- amrnb: port to 0.11
-
-2011-10-04 17:12:35 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * ext/amrwbdec/Makefile.am:
- * ext/amrwbdec/amrwbdec.c:
- ported amrwbdec to 0.11
-
-2011-10-03 17:19:02 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbdec.h:
- amrnbdec: port to audiodecoder
-
-2011-09-30 17:45:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
-
-2011-09-30 17:38:07 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: minimal port to 0.11
-
-2011-09-05 11:11:52 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: post QoS messages when dropping a frame due to QoS
- https://bugzilla.gnome.org/show_bug.cgi?id=658241
-
-2011-09-28 13:05:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- configure: update ported plugins list
-
-2011-09-28 13:03:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * common:
- update to 0.11 branch
-
-2011-09-27 20:32:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- dvdlpcmdec: port to 0.11
-
-2011-09-27 18:19:50 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: fix raw audio caps too
-
-2011-09-27 18:15:00 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: port to 0.11
-
-2011-09-27 17:54:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
-
-2011-09-27 17:51:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: port to 0.11
-
-2011-09-27 17:01:59 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrnb/Makefile.am:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbenc.h:
- amrnbenc: port to audioencoder
-
-2011-09-26 19:07:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- ext/mad/gstmad.c
-
-2011-09-26 19:03:13 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- port a52dec to 0.11
-
-2011-09-26 16:29:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/twolame/gsttwolame.c:
- twolame: Simple fix for GstAudioEncoder API change
-
-2011-09-26 16:28:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/twolame/gsttwolame.c:
- twolame: Fix variable 'gstelement_class' set but not used compiler warning
-
-2011-09-26 16:08:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: Don't get the parent class again, GST_BOILERPLATE does this already
-
-2011-09-26 16:07:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: Fix variable 'gstelement_class' set but not used compiler warning
-
-2011-09-26 12:07:15 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/twolame/gsttwolame.c:
- twolame: improve output framing and timestamping
- ... which simply comes down to requesting one frame of input data at a time,
- since the encoder nicely turns this into 1 encoded frame.
-
-2011-09-26 11:56:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/twolame/Makefile.am:
- * ext/twolame/gsttwolame.c:
- * ext/twolame/gsttwolame.h:
- twolame: port to audioencoder
-
-2011-09-23 15:32:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- lame: use some more boilerplate
-
-2011-09-23 15:26:48 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlame.h:
- lame: port to audioencoder
-
-2011-09-23 14:33:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: use some more boilerplate
-
-2011-09-26 14:44:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: really report bitrate rather kbitrate
-
-2011-09-26 14:44:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/lame/Makefile.am:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- lamemp3enc: port to audioencoder
-
-2011-09-16 15:35:06 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: take into account first sector of the current title
- This fixes seeking on titles which do not start on a new file.
- https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-09-16 15:03:54 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: fix sector seeking
- It was overly complicated, and did not take into account the offset
- needed for titles which do not start on a new file.
- https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-09-16 13:42:53 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: fix sector search for packed titles
- Some DVD titles are packed in a single set, and we need to use
- the correct table to map times to sectors.
- https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-08-15 16:23:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/mad/Makefile.am:
- * ext/mad/gstmad.c:
- * gst-plugins-ugly.spec.in:
- mad: remove id3tag dependency used by in practice unreachable legacy code
- 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().
-
-2011-09-08 17:01:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfpacket: skip empty payload packets
- ... which also avoids assertion failures and possible segfaults later on
- when possibly trying to join 2 empty buffers.
-
-2011-09-08 14:33:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- rmdemux: delay announcing container tags until we have pads
- Fixes tags when transcoding.
- https://bugzilla.gnome.org/show_bug.cgi?id=658297
-
-2011-09-07 14:36:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * tests/check/elements/amrnbenc.c:
- amrnbenc: Use complete raw audio caps in the test
-
-2011-09-07 14:25:41 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * docs/plugins/Makefile.am:
- docs: cleanup makefiles
- Remove commented out parts that we don't need. Remove "the wingo addition" - no
- so useful after all. Narrow down file-globs for plugin docs.
-
-2011-09-06 21:25:13 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From a39eb83 to 11f0cd5
-
-2011-09-06 15:40:55 +0200 Stefan Sauer <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 605cd9a to a39eb83
-
-2011-08-25 13:04:01 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asf: don't use fourcc
-
-2011-08-25 12:54:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
-
-2011-08-22 17:49:14 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix spurious failure to decode some files
- 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
-
-2011-08-19 18:07:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/sidplay/Makefile.am:
- * ext/sidplay/gstsiddec.cc:
- port to new audio caps
-
-2011-08-03 18:58:09 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- common
- gst/asfdemux/gstrtpasfdepay.c
-
-2011-08-03 09:05:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Add synaesthesia to the list of non-ported plugins
-
-2011-08-03 01:08:43 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-mpegaudioparse.xml:
- * gst-plugins-ugly.spec.in:
- * gst/mpegaudioparse/Makefile.am:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- * gst/mpegaudioparse/mpegaudioparse.vcproj:
- * gst/xingmux/Makefile.am:
- * gst/xingmux/gstxingmux.c:
- * gst/xingmux/gstxingmux.h:
- * gst/xingmux/plugin.c:
- Remove mp3parse plugin/element
- It's been replaced by mpegaudioparse in -good. Don't want anyone
- to spend time porting a deprecated element. Rename plugin to xingmux
- for now until we move that somewhere else.
-
-2011-08-02 12:49:09 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * configure.ac:
- configure.ac: Define list of non-ported plugins
-
-2011-08-02 12:48:52 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Fix for changes in GstQuery API
-
-2011-08-02 12:40:22 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix for changes in GstQuery API
-
-2011-08-02 12:40:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Fix print statement
-
-2011-08-02 12:35:40 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * common:
- Update common submodule
-
-2011-07-30 18:47:44 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Properly set the stream format in setcaps
- Do not forget to set the selected format to the options string
- when getting it from caps
- https://bugzilla.gnome.org/show_bug.cgi?id=655223
-
-2011-07-19 15:06:49 +0200 Stefan Sauer <ensonic@google.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix the build for older x264enc
- b_fake_interlaced was introduced in x264 commit 1b48874d06 = X264_BUILD 96.
-
-2011-07-18 20:41:20 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Read stream-format from the right place
- 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.
-
-2011-06-13 23:24:27 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Select stream-format based on caps
- 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
-
-2011-07-04 18:03:49 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * ext/x264/gstx264enc.c:
- x264: Allow renegotiation but prefer current caps
-
-2011-06-09 20:20:27 -0400 Olivier Crête <olivier.crete@collabora.com>
-
- * tests/check/elements/x264enc.c:
- tests: Test x264enc profiles from the caps
- https://bugzilla.gnome.org/show_bug.cgi?id=644233
-
-2011-03-07 17:58:34 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/Makefile.am:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264: Use profile and level from caps
- Enforces the profile and level from the downstream caps, also
- sets them on the fixated caps
- https://bugzilla.gnome.org/show_bug.cgi?id=644233
-
-2011-07-05 10:14:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- Add -DGST_USE_UNSTABLE_API to the compiler flags to avoid warnings
-
-2011-06-25 06:29:50 +0300 Brian Gitonga Marete <marete@toshnix.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix subme property annotation - subme maximum is 10, not 6.
- 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
-
-2011-06-23 11:28:58 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From 69b981f to 605cd9a
-
-2011-06-19 12:45:00 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstrtspwms.c:
- rtspwms: Porting to 0.11
-
-2011-06-18 20:24:42 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: Port to 0.11
-
-2011-06-15 23:40:02 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Porting to 0.11
-
-2011-06-08 18:18:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: port siddec to 0.11
-
-2011-06-06 12:41:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: fix fragmented packet handling and packet padding
- Also remove a bogus assert.
-
-2011-06-03 11:35:55 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- synaesthesia: fix wrong debug log string (copy'n'paste)
-
-2011-06-02 18:46:11 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- configure.ac
-
-2011-06-02 18:43:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: port to new API
- Port to new segment API.
- Eat Caps events.
- No need to set caps on buffers.
-
-2011-05-20 13:32:31 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: target is unsigned and can't be < 0
-
-2011-05-20 13:31:14 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/mad/gstmad.c:
- mad: use signed when caluculating the delta
- Avoids a <0 check for an unsigned variable.
-
-2011-05-19 23:55:41 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * docs/plugins/Makefile.am:
- docs: remove obsolete commented out part
- We don't have this in the other modules and its not needed.
-
-2011-05-19 23:38:23 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- docs: update plugin introspection data
- Now more files are merged and produced in a canonical fashion, which hopefully
- creates less or no delta in the future.
-
-2011-05-19 22:58:28 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 9e5bbd5 to 69b981f
-
-2011-05-18 14:49:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/Makefile.am:
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Post CODEC and BITRATE tags
- Also filter any CODEC/AUDIO_CODEC tags from incoming
- tag events.
- Fixes bug #391543.
-
-2011-05-18 16:10:55 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From fd35073 to 9e5bbd5
-
-2011-05-18 12:25:01 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 46dfcea to fd35073
-
-2011-04-27 15:20:20 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: simplify and refactor packet parsing
- Specifically, refactor buffer padding and consider marker bit for fragment
- assembling.
-
-2011-04-27 15:14:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: avoid re-sending header
- ... e.g. following a seek, which otherwise confuses downstream demuxer
- expecting only a flow of data packets at this time.
-
-2011-04-27 15:12:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtpasfdepay.h:
- rtpasfdepay: remove unused field
-
-2011-04-29 09:19:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: Post bitrate tag whenever the bitrate changes
- Also send the layer/mode/emphasis/bitrate tags as an event too.
-
-2011-05-14 10:09:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- win32: define GST_PACKAGE_RELEASE_DATETIME in win32 config.h as well
-
-2011-05-14 10:06:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Back to development
-
-=== release 0.10.18 ===
-
-2011-05-10 10:26:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.18
- Highlights:
- - x264enc: allow changing bitrate and quantizers dynamically at runtime
- - x264enc: proxy downstream caps restrictions upstream via get_caps()
- - lamemp3enc: proxy downstream rate/channels restrictions upstream via get_caps()
- - mad: allow build without libid3tag (which isn't really needed anyway)
- - many other fixes and improvements
-
-2011-05-04 12:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Copy the template caps, it's not allowed to increase the refcount of const caps
-
-2011-05-04 12:30:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: do not leak peer pad reference
-
-2011-05-03 15:27:43 +0100 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: No need to copy, reffing is enough
-
-2011-05-03 14:57:16 +0100 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: get_caps function should return a copy of the caps
-
-2011-04-30 20:07:44 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * po/da.po:
- * po/de.po:
- * po/fr.po:
- * po/uk.po:
- * win32/common/config.h:
- 0.10.17.4 pre-release
-
-2011-04-29 15:43:47 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: remove buffer_alloc
-
-2011-04-27 12:48:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * 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-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * po/bg.po:
- * po/ja.po:
- * po/nl.po:
- * po/pl.po:
- * po/ru.po:
- * po/sl.po:
- * po/tr.po:
- 0.10.17.3 pre-release
-
-2011-04-24 14:04:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From c3cafe1 to 46dfcea
-
-2011-04-19 19:24:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: port to 0.11
-
-2011-04-19 19:23:56 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- android/amrnb.mk
- android/amrwbdec.mk
- android/asf.mk
- android/mpegaudioparse.mk
- configure.ac
-
-2011-04-19 17:26:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/gst-plugins-ugly.supp:
- tests: add suppression for lame unit test
-
-2011-04-19 14:41:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/Makefile.am:
- * tests/check/generic/.gitignore:
- * tests/check/generic/index.c:
- tests: add generic index-setting test
-
-2011-04-19 15:24:03 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: don't deadlock when setting an index
-
-2011-04-16 23:26:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * 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-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * po/sl.po:
- * win32/common/config.h:
- 0.10.17.2 pre-release
-
-2011-04-16 23:23:56 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- rademux: fix two 'variable may be used uninitialized' warnings caused by -DG_DISABLE_ASSERT
-
-2011-04-14 15:04:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegstream/gstmpegdemux.c:
- mpegstream: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-14 15:03:56 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- dvdread, sidplay, x264enc: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-14 15:03:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-13 20:31:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Implement getcaps function
- This allows to set width/height/etc restrictions downstream.
-
-2011-04-10 18:24:22 -0400 Thibault Saunier <thibault.saunier@collabora.co.uk>
-
- * Android.mk:
- * ext/mad/Makefile.am:
- * ext/x264/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/iec958/Makefile.am:
- * gst/mpegaudioparse/Makefile.am:
- * gst/mpegstream/Makefile.am:
- * gst/realmedia/Makefile.am:
- * gst/synaesthesia/Makefile.am:
- android: make it ready for androgenizer
- 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
-
-2011-04-10 18:34:11 -0400 Thibault Saunier <thibault.saunier@collabora.co.uk>
-
- * android/NOTICE:
- * android/amrnb.mk:
- * android/amrwbdec.mk:
- * android/asf.mk:
- * android/mpegaudioparse.mk:
- android: remove the android/ folder
-
-2011-04-04 15:57:58 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 1ccbe09 to c3cafe1
-
-2010-09-21 20:14:04 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Allow changing the bitrate and quantitizers dynamically
- https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2010-09-21 19:33:10 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Set max bitrate in quality mode
- https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2010-09-21 19:20:29 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Make it clear that constant quantizer is for debugging only
- https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2011-03-25 22:34:31 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 193b717 to 1ccbe09
-
-2011-03-25 14:57:00 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From b77e2bf to 193b717
-
-2011-03-25 09:33:04 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From d8814b6 to b77e2bf
-
-2011-03-25 09:09:29 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 6aaa286 to d8814b6
-
-2011-03-24 18:50:17 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 6aec6b9 to 6aaa286
-
-2011-03-22 12:59:33 +0100 Luis de Bethencourt <luis@debethencourt.com>
-
- * configure.ac:
- configure.ac: redundant use of AC_MSG_RESULT()
- cleaned the redundant use of AC_MSG_RESULT() in configure.ac
-
-2011-03-18 19:34:57 +0100 Luis de Bethencourt <luis@debethencourt.com>
-
- * autogen.sh:
- autogen: wingo signed comment
-
-2011-03-15 11:02:42 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- dvdsubdec: Rearrange buffer allocation and pushing code a bit
- This makes the code easier to read, doesn't store every buffer
- in the instance until the next buffer is to be drawn and
- fixes an unitialized variable compiler warning.
-
-2011-03-15 10:59:23 +0100 Brendan Le Foll <blefoll@fluendo.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Output only a single buffer per subpicture and set the correct duration
- Fixes bug #619136.
-
-2011-03-14 18:39:35 +0100 Brendan Le Foll <blefoll@fluendo.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Implement clipping if the video size is smaller than the subpicture size
- Fixes bug #644704.
-
-2011-03-11 17:45:37 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: build the mad plugin even if libid3tag is not available
- 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.
-
-2011-03-04 13:48:02 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
-
-2011-03-02 13:12:11 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/mpegstream/gstdvddemux.c:
- dvddemux: small code cleanup
- Don't duplicate the 'if' check. Makes the 2nd condition easier to read also
- and avoid empty 'if' when logging is disabled.
-
-2011-02-28 19:27:21 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * configure.ac:
- configure.ac: export plugin description more platform independent
- Fixes #642504.
-
-2011-02-28 18:33:34 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 1de7f6a to 6aec6b9
-
-2011-02-26 15:02:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
- Conflicts:
- configure.ac
-
-2011-02-21 13:13:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: do not fail fatally when unlinked
- ... as _NOT_LINKED was neither tested as fatal before nor complained about.
-
-2011-02-21 11:05:31 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- index: remove conditional index support
- Index support cannot be disabled since commit
- 4bfb1fe70c6f0d5e29c17a8eeffb02f7fd083f11
- in core, which removed the configure flags to disable index.
-
-2011-02-17 18:06:51 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- formatting: trim trailing whitespace
-
-2011-02-17 18:05:58 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst/mpegstream/gstmpegdemux.c:
- index: use delta frame flags instead of 0 or none
-
-2011-02-14 17:52:09 +0000 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Don't register flags with a value of 0
- Flags with a value of 0 aren't meaningful and will cause
- g_value_transform to go into an endless loop when trying to
- convert the flags to a string
-
-2011-02-14 12:54:10 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From f94d739 to 1de7f6a
-
-2011-02-07 19:58:45 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/amrwbdec/amrwbdec.c:
- amrwbdec: avoid stalling on invalid frame
- Skip 1 byte indicating invalid frame type index rather than stalling
- on it indefinitely until EOS.
- Fixes #639715.
-
-2011-02-03 18:25:00 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/pipelines/lame.c:
- tests: add unit test for lamemp3enc negotiation issue
- https://bugzilla.gnome.org/show_bug.cgi?id=641151
-
-2011-02-03 18:18:35 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: implement sinkpad get_caps() function to proxy rate and channels restrictions from downstream
- 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
-
-2011-01-30 16:17:19 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfpacket: Avoid using broken duration extension
- Quite a few (broken?) files have a packet duration of 1ms, which is
- most definitely wrong for either audio or video packets.
- We therefore avoid using that value and instead use other metrics to
- determine the buffer duration (like using the extended stream properties
- average frame duration if present and valid).
-
-2011-01-27 15:33:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- win32: fix DEFAULT_AUDIOSINK, should be direct*sound*sink
- https://bugzilla.gnome.org/show_bug.cgi?id=640705
-
-2011-01-12 16:48:57 +0800 Yang Xichuan <xichuan.yang@tieto.com>
-
- * gst/mpegaudioparse/gstxingmux.c:
- xingmux: Use FALSE instead of 0 as return value for a function returning gboolean
- Fixes bug #639291.
-
-2011-01-06 18:29:06 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * gst/mpegstream/gstdvddemux.c:
- mpegstream: increase allowable gap between streams
- The new delay is three times as much as the old one, and just happens
- to let me properly decode my "Princess Mononoke" DVD, on which dvdreadsrc
- was chocking before at 5:11.
- While there, merge the constants used in two places into a define.
- https://bugzilla.gnome.org/show_bug.cgi?id=539708
-
-2011-01-22 17:31:40 +0100 Miguel Angel Cabrera Moya <madmac2501@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: make tag event writable before modifying tag list in place
- To modify an event tag is necessary to be sure that x264enc
- has its own copy.
- Also fix indentation.
- https://bugzilla.gnome.org/show_bug.cgi?id=640272
-
-2011-01-24 10:14:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Back to development
-
-=== release 0.10.17 ===
-
-2011-01-21 13:18:51 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.17
-
-2011-01-18 11:11:28 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- 0.10.16.4 pre-release
-
-2011-01-14 17:37:09 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Use the proper component value for height
-
-2011-01-11 20:42:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- 0.10.16.3 pre-release
-
-2011-01-11 17:09:02 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Handle new type of DRM'd asf files.
- These are produced by the new MS PlayReady system.
- https://bugzilla.gnome.org/show_bug.cgi?id=639226
-
-2011-01-11 15:51:14 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From e572c87 to f94d739
-
-2011-01-10 16:37:19 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From ccbaa85 to e572c87
-
-2011-01-10 14:54:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 46445ad to ccbaa85
-
-2011-01-08 00:35:08 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/Makefile.am:
- tests: never disable g_assert() and cast checks for the unit tests
- The unit tests are riddled with g_assert() and friends, make sure we
- don't disable assert and cast checks for the unit tests even if
- this has been specified for the rest of the code base, e.g. via
- --disable-glib-asserts
-
-2011-01-07 14:42:26 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.16.2 pre-release
-
-2011-01-07 14:38:17 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update docs
-
-2011-01-07 14:37:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/bg.po:
- * po/ca.po:
- * po/ru.po:
- po: update translations
-
-2011-01-07 14:33:37 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: use $LIBM instead of hardcoding -lm
-
-2011-01-06 13:15:17 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Initialize return variable.
- In the unlikely event that height is 0 (which is invalid) we would end up
- never setting the flow return.
-
-2011-01-05 16:52:03 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * gst/realmedia/rmutils.c:
- realmedia: Fix unitialized variables on macosx
-
-2011-01-04 10:32:05 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Handle codec/encoder tags
- Make x264enc drop video-codec and codec tags and replace
- encoder/encoder-version with x264 and its build number
- Fixes #621465
-
-2010-12-29 22:17:50 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers
-
-2010-12-29 22:10:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: minor formatting clean-up
-
-2010-12-29 21:42:36 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: refactor cropping code to use libgstvideo functions
- https://bugzilla.gnome.org/show_bug.cgi?id=571146
-
-2010-12-29 20:19:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: use GstVideoFormat instead of custom enum
-
-2010-12-29 20:15:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mpeg2dec/Makefile.am:
- mpeg2dec: fix LIBADD order in Makefile.am
-
-2010-11-19 13:01:35 -0500 Tristan Matthews <tristan@sat.qc.ca>
-
- * ext/x264/gstx264enc.c:
- x264: vbv-buf-capacity should have a minimum of 0
- x264 will clip this value internally, and users should be allowed to
- specify a lower value than 300 ms.
- https://bugzilla.gnome.org/show_bug.cgi?id=635291
-
-2010-12-27 11:38:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: also accept YV12 input
-
-2010-12-01 18:35:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: add a note to the docs about encoder latency and queues
- https://bugzilla.gnome.org/show_bug.cgi?id=636107
-
-2010-12-24 10:12:19 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- realmedia: do not use the pad buffer allocation functions in demuxers
- Doing so can block, see https://bugzilla.gnome.org/show_bug.cgi?id=637822
- https://bugzilla.gnome.org/show_bug.cgi?id=637932
-
-2010-12-20 17:47:41 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 169462a to 46445ad
-
-2010-12-16 10:30:31 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- mad: If gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one
- Fixes bug #635461.
-
-2010-12-15 14:56:36 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 20742ae to 169462a
-
-2010-12-12 11:54:35 -0600 Rob Clark <rob@ti.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly
- Signed-off-by: Rob Clark <rob@ti.com>
-
-2010-12-13 16:24:09 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 011bcc8 to 20742ae
-
-2010-11-14 10:57:21 -0800 Leo Singer <leo.singer@ligo.org>
-
- * configure.ac:
- x264: uses pkg-config to locate libx264
-
-2010-12-07 15:40:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- Merge branch 'master' into 0.11
-
-2010-12-07 15:39:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * tests/check/pipelines/lame.c:
- check: don't use deprecated method
-
-2010-12-06 18:12:51 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * android/amrnb.mk:
- * android/amrwbdec.mk:
- * android/asf.mk:
- * android/mpegaudioparse.mk:
- * configure.ac:
- more 0.10 -> 0,11 changes
-
-2010-12-06 12:29:12 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- configure: open 0.11 branch
-
-2010-12-03 17:43:25 +0100 Benjamin Gaignard <benjamin.gaignard@stericsson.com>
-
- * Android.mk:
- * android/NOTICE:
- * android/amrnb.mk:
- * android/amrwbdec.mk:
- * android/asf.mk:
- * android/mpegaudioparse.mk:
- Add build system for Android
-
-2010-11-25 19:51:50 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/rmutils.c:
- realmedia: Remove dead assignments
-
-2010-11-25 19:51:40 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mad/gstmad.c:
- mad: Remove dead assignments
-
-2010-11-13 12:38:45 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: remove bogus comment
-
-2010-11-13 12:34:37 +0000 Thomas Green <thomasgr33n@gmail.com>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: fix handling of multi-angle streams
- We would output all angles interleaved instead of just
- the selected angle.
- https://bugzilla.gnome.org/show_bug.cgi?id=539254
-
-2010-10-28 17:01:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/Makefile.am:
- realmedia: fix LIBS order in Makefile
-
-2010-10-22 09:17:40 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/gl.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ro.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- po: update for new translatable strings
-
-2010-10-27 13:17:29 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 7bbd708 to 011bcc8
-
-2010-10-20 20:26:45 +0200 Guillaume Emont <gemont@igalia.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: convert the position to stream time before answering to a position query
-
-2010-10-24 14:22:39 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- realmedia: Get codec name from pbutils instead of harcoding them
-
-2010-10-22 11:29:55 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Work around a rate control issue in libx264
- 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
-
-2010-10-19 16:30:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Use gst_pad_peer_query() instead of getting the peer pad manually
-
-2010-10-13 21:38:06 +0200 Guillaume Emont <gemont@igalia.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix position query by trusting upstream
- 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.
-
-2010-10-19 12:20:40 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/lame/gstlame.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/mpegstream/gstmpegparse.c:
- various: canonicalize property names
-
-2010-10-19 10:06:33 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- * ext/x264/gstx264enc.c:
- various (ext): add a missing G_PARAM_STATIC_STRINGS flags
-
-2010-10-19 09:49:47 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/iec958/ac3iec.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rdtmanager.c:
- various (gst): add a missing G_PARAM_STATIC_STRINGS flags
-
-2010-10-14 12:32:16 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From 5a668bf to 7bbd708
-
-2010-10-08 12:44:52 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From c4a8adc to 5a668bf
-
-2010-10-08 12:56:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 5e3c9bf to c4a8adc
-
-2010-09-29 21:24:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad: support reverse playback
-
-2010-09-26 19:24:08 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- dvdreadsrc: improve error messages on read errors
- Provide proper i18n-ed error messages when a read error happens,
- and point out that the error could be happening because the
- DVD is scrambled.
- https://bugzilla.gnome.org/show_bug.cgi?id=613633
-
-2010-09-24 00:03:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: set plugin release datetime
-
-2010-09-21 18:34:31 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From aa0d1d0 to 5e3c9bf
-
-2010-09-15 20:14:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegstream/gstmpegparse.c:
- mpegparse: re-fix flow return handling
- Fix wrong GST_FLOW_IS_SUCCESS substitution in commit e99cb46c:
- - } while (GST_FLOW_IS_SUCCESS (result));
- + } while (result != GST_FLOW_OK);
-
-2010-09-09 22:33:36 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * tests/check/Makefile.am:
- * tests/check/generic/states.c:
- tests: allow running state tests for all elements
- Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check
- to try elements that would normaly be skipped.
-
-2010-09-09 09:53:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Makefile.am:
- New pkgconfig subdirectory needs to be added to SUBDIRS as well so it's entered and disted
-
-2010-09-08 00:09:35 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * pkgconfig/.gitignore:
- * pkgconfig/Makefile.am:
- * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
- Add gstreamer-plugins-ugly-uninstalled-0.10.pc file so other modules can find our plugins
- This .pc file will not be installed, it's only for uninstalled setups,
- same thing as we do for -good. This is so other modules' unit tests can
- find our plugins properly in an uninstalled setup.
-
-2010-09-07 11:42:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From c2e10bf to aa0d1d0
-
-2010-09-06 23:53:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: re-enable use of -DGST_DISABLE_DEPRECATED in git versions
-
-2010-09-06 23:51:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/sidplay/gstsiddec.cc:
- siddec: don't use GST_FLOW_IS_FATAL
- GST_FLOW_IS_FATAL has been deprecated in core git.
-
-2010-09-05 18:58:50 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From d3d9acf to c2e10bf
-
-2010-09-05 12:27:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Require orc >= 0.4.6 for --compat
-
-2010-09-05 12:20:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From ec60217 to d3d9acf
-
-2010-08-27 18:26:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Don't use GST_FLOW_IS_FATAL()
- And don't post error messages if allocating a buffer resulted
- in WRONG_STATE or UNEXPECTED.
-
-2010-08-27 18:25:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/mpegaudioparse/gstxingmux.c:
- xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream
-
-2010-08-27 18:24:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- mpegstream: Don't use GST_FLOW_IS_SUCCESS()
-
-2010-08-27 18:22:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Don't use GST_FLOW_IS_FATAL() and GST_FLOW_IS_SUCCESS()
-
-2010-08-27 18:19:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't use GST_FLOW_IS_FATAL()
- And don't post error messages for UNEXPECTED and post an error
- message if pulling data failed because of NOT_LINKED.
-
-2010-09-04 13:17:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Back to development
- Temporarily disable -DGST_DISABLE_DEPRECATED for git builds until
- the code is updated for the GST_FLOW_IS_* macro deprecations.
-
-=== release 0.10.16 ===
-
-2010-09-02 23:59:20 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.16
-
-2010-09-02 23:58:22 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update docs for release
-
-2010-09-02 23:48:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/LINGUAS:
- * po/gl.po:
- * po/id.po:
- * po/lv.po:
- * po/ro.po:
- * po/sv.po:
- po: update translations
-
-2010-08-30 16:02:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- 0.10.15.6 pre-release
-
-2010-08-27 17:50:59 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't error out on non-critical flow returns
- Only error out when downstream returns:
- * NOT_SUPPORTED
- * ERROR
- * NOT_NEGOTIATED
- * NOT_LINKED
- If we got _UNEXPECTED, we push an EOS downstream (since maybe only one
- of the streams had gone EOS) and then stop the task silently.
- In the case of WRONG_STATE we just need to stop silently
- https://bugzilla.gnome.org/show_bug.cgi?id=600412
-
-2010-08-25 19:02:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- 0.10.15.5 pre-release
-
-2010-08-25 15:39:33 +0200 Alessandro Decina <alessandro.decina@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: propagate flow errors upstream.
- Remove a wrong GST_FLOW_IS_FATAL call. When pushing fails, mp3parse should
- always return the error upstream.
-
-2010-08-21 21:42:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- 0.10.15.4 pre-release
-
-2010-08-13 17:24:41 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 3e8db1d to ec60217
-
-2010-08-11 16:46:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- 0.10.15.3 pre-release
-
-2010-08-11 09:21:43 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue
- 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
-
-2010-08-11 00:02:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- 0.10.15.2 pre-release
-
-2010-08-10 14:37:39 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- synaesthesia: code cleanups.
- Remove unused boilerplate for signals. Use _OBJECT variants of logging macros
- more.
-
-2010-08-10 14:24:01 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- synaesthesia: use GST_BOILERPLATE macros
-
-2010-08-10 10:59:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From bd2054b to 3e8db1d
-
-2010-08-09 00:31:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264: fix printf format warning in debug message
-
-2010-08-07 00:09:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/Makefile.am:
- docs: fix bug passing arguments to gtkdoc-fixref in upload target
- Missing backslash at end of line meant we weren't passing all arguments
- to gtkdoc-fixref and we'd get a shell error when doing 'make upload'.
-
-2010-08-05 13:57:26 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From a519571 to bd2054b
-
-2010-08-04 19:28:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Check if the compiler supports ISO C89 or C99 and which parameters are required
- This first checks what is required for ISO C99 support and sets the relevant
- compiler parameters and if no C99 compiler is found, it checks for a
- C89 compiler. This enables us to check for and use C89/C99 functions
- that gcc hides from us without the correct compiler parameters.
-
-2010-07-29 09:41:49 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix flushing of delayed frames
- 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.
-
-2010-07-21 17:24:33 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Improve x264enc defaults
- - medium x264 speed/quality preset
- - threads defaults to 0 which automatically uses 1.5x number of cpu cores
- Addresses part of bug #607798
-
-2010-07-21 17:22:48 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Fix property description typos
-
-2010-07-22 11:53:04 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add some more debug info
-
-2010-07-21 17:09:20 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Add speed-preset and [psy-]tuning properties
- 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
-
-2010-07-21 16:56:06 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Refactor code in preparation for presets/tunings
- - 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
-
-2010-07-21 16:32:11 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Update available me types
- Use the x264_motion_est_names[] array to populate the enum of ME types. This is
- now self-maintaining.
-
-2010-07-21 15:59:12 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Use new libx264 API to affect fast first pass
- 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
-
-2010-07-21 15:52:28 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Add profile property
- 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
-
-2010-07-21 15:40:27 +0200 Robert Swain <robert.swain@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Add option-string property
- Adds support for an x264 format option-string to specify advanced parameters
- Addresses part of bug #607798
-
-2010-07-22 13:24:37 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/mad/Makefile.am:
- mad: use right automake variable, should be ID3TAG_{LIBS,CFLAGS} not ID3_{LIBS,CFLAGS}
- Spotted by syntr0py.
-
-2010-07-20 19:44:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: only set timebase on versions where it exists
-
-2010-07-20 16:40:22 +0200 David Hoyt <dhoyt@llnl.gov>
-
- * ext/x264/gstx264enc.c:
- x264enc: set appropriate time base
- Fixes #624786.
-
-2010-06-30 18:45:49 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/Makefile.am:
- tests: add plugin loading whitelist to test environment
- Only want to load core/-base/-ugly plugins here.
-
-2010-06-28 16:12:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * autogen.sh:
- * configure.ac:
- Bump automake requirement to 1.10 and autoconf to 2.60
- For maintainability reasons and $(builddir).
- See #622944.
-
-2010-06-28 09:34:30 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix seeking after last commits
- Don't handle wrong-state returns as errors to allow seeking to work
- again.
-
-2010-06-24 19:46:39 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Push all pending data on EOS
- When on push mode and receiving an EOS event, asfdemux
- should push all pending data because we might be dealing
- with a broken file that has a preroll value higher
- than its actual length.
-
-2010-06-24 19:29:17 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix sending eos event for chained asfs
- Properly push EOS event when finishing a chained asf file
- in pull mode
- Fixes #599718
-
-2010-06-24 20:55:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-rmdemux.xml:
- docs: add rmdemux to docs properly
- The plugin has been renamed, remove old introspection file.
-
-2010-06-24 18:04:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-x264.xml:
- docs: update for recent x264enc changes
-
-2010-06-24 18:03:21 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: fix compiler warning when debugging system in core is disabled
-
-2010-06-24 15:09:44 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 73ff93a to a519571
-
-2010-06-23 11:05:11 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Allow at least 500ms of preroll.
- Some files have insanely low preroll values which break the
- all_streams_prerolled() logic.
- Fixes #622407
-
-2010-06-22 11:41:42 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: add new h264 caps attribute alignment
- See #606662.
-
-2010-06-18 14:35:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: conditionally expose enhanced upstream capabilities
- API: GstX264Enc:sliced-threads
- API: GstX264Enc:sync-lookahead
- API: GstX264Enc:intra-refresh
- API: GstX264Enc:mb-tree
- API: GstX264Enc:rc-lookahead
- See #607798.
-
-2010-06-17 16:48:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-iec958.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpegaudioparse.xml:
- * docs/plugins/inspect/plugin-mpegstream.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- docs: update introspected plugin docs for gstdoc-scangobj and other changes
- Update common for latest gstdoc-scangobj and inspect xml files for
- escaping and pad template order changes.
-
-2010-06-15 16:50:21 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From 9339ccc to 35617c2
-
-2010-06-15 16:54:42 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 5adb1ca to 9339ccc
-
-2010-06-15 16:35:49 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 57c89b7 to 5adb1ca
-
-2010-06-15 15:50:09 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From c804988 to 57c89b7
-
-2010-06-14 16:59:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * gst/realmedia/rtspreal.c:
- configure: Update required GLib version to 2.20
-
-2010-06-14 15:33:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Call orc_init() before trying to get target flags
-
-2010-06-14 14:34:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Remove debug printf...
-
-2010-06-14 14:34:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * ext/a52dec/Makefile.am:
- * ext/a52dec/gsta52dec.c:
- a52dec: Use orc for CPU feature detection and don't check for liboil
-
-2010-06-14 13:27:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Use GLIB_EXTRA_CFLAGS
-
-2010-06-14 13:05:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 7a0fdf5 to c804988
-
-2010-06-14 11:35:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 6da3bab to 7a0fdf5
-
-2010-06-12 08:29:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 733fca9 to 6da3bab
-
-2010-06-09 12:40:26 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From fad145b to 733fca9
-
-2010-06-09 12:34:18 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From 47683c1 to fad145b
-
-2010-06-05 14:11:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: pass bitrate on caps
- Set the bitrate on the caps, some decoders like sipro need this to function
- properly.
- Fixes #620007
-
-2010-06-01 23:49:37 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From 17f89e5 to 47683c1
-
-2010-06-01 22:55:22 -0700 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From fd7ca04 to 17f89e5
-
-2010-05-31 16:57:42 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Only set i_weighted_pred on versions where it exists
-
-2010-05-20 11:28:47 -0400 Tristan Matthews <tristan@sat.qc.ca>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: implement latency query
- The encoder's latency is deduced from the framesize. Fixes #618896.
-
-2010-06-01 09:30:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Back to development
-
-=== release 0.10.15 ===
-
-2010-05-30 14:21:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.15
-
-2010-05-30 14:20:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2010-05-30 12:10:29 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: make implicit GLib and liboil requirements explicit
- core/base 0.10.26 require GLib >= 2.18 and liboil >= 0.3.14
-
-2010-05-26 23:16:46 -0400 Olivier Crête <tester@tester.ca>
-
- * ext/x264/gstx264enc.c:
- x264enc: disable I weighted pred
- 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.
-
-2010-05-26 12:16:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.14.3 pre-release
-
-2010-05-26 11:52:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- po: update translations
-
-2010-05-26 11:55:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 357b0db to fd7ca04
-
-2010-05-14 20:06:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.14.2 pre-release
-
-2010-05-14 18:25:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 4d67bd6 to 357b0db
-
-2010-05-14 16:02:47 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmutils.c:
- * gst/realmedia/rmutils.h:
- rmdemux: add better sipr nibble swap routine
-
-2010-05-13 17:57:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: descramble SIPR before pushing out
- Collect and descramble the SIPR packets before pushing.
- Descramble ATRAC audio.
- Fixes #618098
-
-2010-05-13 17:57:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmutils.c:
- * gst/realmedia/rmutils.h:
- rm: add function to descramble sipr
-
-2010-01-08 20:51:56 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Re-send the received upstream event as-is downstream
- https://bugzilla.gnome.org/show_bug.cgi?id=606689
-
-2010-05-07 15:33:28 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/amrnb/amrnb.c:
- amrnbenc: Set rank to GST_RANK_SECONDARY
-
-2010-04-30 19:53:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: use GLib's base64 functions if available
- Since gst_rtsp_base64_decode_ip() just got deprecated in -base git.
-
-2010-04-28 17:10:36 +0400 Руслан Ижбулатов <lrn1986@gmail.com>
-
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.h:
- * ext/amrwbdec/amrwbdec.h:
- amr: Use correct includes (as pkg-config suggests)
- Fixes #617078
-
-2010-04-27 13:15:47 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/ac3parse/.gitignore:
- * gst/ac3parse/Makefile.am:
- * gst/ac3parse/README:
- * gst/ac3parse/ac3parse.vcproj:
- * gst/ac3parse/gstac3parse.c:
- * gst/ac3parse/gstac3parse.h:
- ac3parse: remove unported 0.8 plugin
- New ac3parse lives in gst-plugin-bad. Remove this to avoid confusion.
-
-2010-04-27 12:25:37 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- docs: adding a mp3decoder as well is useful
-
-2010-04-27 11:39:51 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- docs: massage section index
-
-2010-04-27 11:39:11 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/amrwbdec/amrwbdec.c:
- * ext/amrwbdec/amrwbdec.h:
- amrwbdec: move define to source to avoid hiding it from the docs
-
-2010-04-27 11:38:28 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/cdio/gstcdiocddasrc.c:
- docs: remove short_desc, it is taken from element details
-
-2010-04-27 11:37:52 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- docs: fix sections docs for synaesthesia
-
-2010-04-27 11:02:15 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- docs: add docs for mp3parse
-
-2010-04-20 17:23:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst-plugins-ugly.doap:
- doap: update repository info from cvs->git and maintainers
-
-2010-04-23 14:41:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From fc85867 to 4d67bd6
-
-2010-04-13 16:59:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * tests/check/elements/x264enc.c:
- x264enc: adaptive NALU type checking
- In particular, be less picky about SEI NALU order, which makes test more
- robust with respect to changes in libx264.
- See also #615410.
-
-2010-04-16 21:10:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: adaptive x264 header NAL layout handling
- Fixes #615410.
-
-2010-04-15 16:31:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: we require a dynamic payload type
- Add an extra caps property that restricts the depayloader to only accept dynamic
- payload types.
-
-2010-04-15 07:20:20 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * configure.ac:
- configure: Drop -Wcast-align
- Commit message copied from core's commit from Benjamin Otte:
- 246f5dba96a5b50bb74621af67b30942cca72af5
- Apparently gcc warns that GstMiniObject is not castable to
- GstEvent/Message/Buffer due to them containing 64bit variables, even
- though ARM hackers claim that those only need 4byte alignment. And as
- long as gcc behaves that way, this warning is not very useful.
- So we'll remove the warning until this problem is fixed.
- Fixes #615698
-
-2010-04-14 09:27:14 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: copy over all buffer flags when copying buffers.
- Avoids losing the tff/rff video buffer flags
-
-2010-03-14 12:16:21 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Make a table static to avoid having to always allocate it.
-
-2010-04-13 16:31:25 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix up avcC header construction
- Fix off-by-one introduced by commit 35dd89951d8bb1c094da65480e4197efdfb4e93c
- for BUILD_X264 < 76.
- Also fixes #610089.
-
-2010-04-13 13:16:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: parameterize libx264 provided NAL layout in codec-data creation
-
-2010-04-12 12:43:05 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * configure.ac:
- configure: Remove -Wundef flag
- Same fix as for #615161
-
-2010-04-09 11:23:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From fdf023d to fc85867
-
-2010-04-09 09:55:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst-libs/gst/gettext.h:
- i18n: #if ENABLE_NLS -> #ifdef ENABLE_NLS to fix compiler warning
-
-2010-03-30 00:36:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- * ext/Makefile.am:
- * gst/Makefile.am:
- build: build plugins in parallel where possible, if make -jN is used
-
-2010-03-26 17:08:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Makefile.am:
- build: add cruft alert for common/shave*
-
-2010-03-25 19:40:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * win32/MANIFEST:
- Fix make distcheck
- Remove removed file win32/common/config.h.in from MANIFEST.
-
-2010-03-24 19:35:03 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/synaesthesia/synaescope.c:
- * gst/synaesthesia/synaescope.h:
- synaestesia: Fix old-style prototype
-
-2010-03-24 19:07:11 +0300 Руслан Ижбулатов <lrn1986@gmail.com>
-
- * gst/realmedia/rmutils.c:
- Fix pointer type.
- Fixes #613815
-
-2010-03-24 18:55:32 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From 55cd514 to c1d07dd
-
-2010-03-24 11:27:40 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/cdio/gstcdiocddasrc.h:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.h:
- * ext/lame/gstlamemp3enc.h:
- * ext/lame/plugin.c:
- * ext/mad/gstmad.c:
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstxingmux.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/realmedia/asmrules.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/pnmsrc.h:
- * gst/realmedia/rdtdepay.h:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rtspreal.c:
- build: Add all kinds of compiler warning flags and fix the resulting warnings
-
-2010-03-19 00:03:53 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/amrnb/Makefile.am:
- * ext/amrwbdec/Makefile.am:
- * ext/sidplay/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/mpegaudioparse/Makefile.am:
- build: fix up Makefile.am
- Mostly just add $(GST_BASE_CFLAGS) where they're missing and fix
- the order a bit here and there (see docs/random/moving-plugins).
-
-2010-03-19 00:02:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * win32/common/config.h.in:
- win32: remove win32-specific config.h.in copy that's not used any longer
- The win32 config.h is now generated from the top-level config.h.in.
-
-2010-03-18 15:53:14 +0100 Benjamin Otte <otte@redhat.com>
-
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.c:
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst/ac3parse/gstac3parse.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtspwms.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/iec958/ac3iec.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstxingmux.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rtspreal.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- gst_element_class_set_details => gst_element_class_set_details_simple
-
-2010-03-16 15:05:06 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Put pixel-aspect-ratio from input into the src pad caps
- Fixes bug #612995.
-
-2010-03-12 13:59:53 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From e272f71 to 55cd514
-
-2010-03-11 11:21:19 +0100 Benjamin Otte <otte@redhat.com>
-
- * common:
- Automatic update of common submodule
- From df8a7c8 to e272f71
-
-2010-03-10 22:13:45 +0100 Benjamin Otte <otte@redhat.com>
-
- * configure.ac:
- Update CXXFLAGS, too
-
-2010-03-10 21:01:20 +0100 Benjamin Otte <otte@redhat.com>
-
- * configure.ac:
- Update for recent changes to common submodule
- This just replaces every "$ERROR_CFLAGS" usage with a usage of
- "$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
- previously.
- Actually using that separation will happen later.
-
-2010-03-10 21:52:30 +0100 Benjamin Otte <otte@redhat.com>
-
- * common:
- Automatic update of common submodule
- From 9720a7d to df8a7c8
-
-2010-03-10 20:44:18 +0100 Benjamin Otte <otte@redhat.com>
-
- * common:
- Automatic update of common submodule
- From 0b6e072 to 9720a7d
-
-2010-03-10 16:10:17 +0100 Benjamin Otte <otte@redhat.com>
-
- * common:
- Automatic update of common submodule
- From 7cc5eb4 to 0b6e072
-
-2010-03-10 01:10:52 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 7aa65b5 to 7cc5eb4
-
-2010-03-09 21:40:26 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 44ecce7 to 7aa65b5
-
-2010-02-26 15:43:58 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Use automake 1.11 silent rules instead of shave if available
- This makes sure that we use something that is still maintained and
- also brings back libtool 1.5 support.
-
-2010-03-09 17:42:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Back to development
-
-=== release 0.10.14 ===
-
-2010-03-06 01:13:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.14
-
-2010-03-06 01:10:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/el.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sl.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2010-03-03 22:52:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.13.4 pre-release
-
-2010-02-22 19:13:11 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * tests/check/elements/x264enc.c:
- x264enc: Replace 'avc-sample' with 'avc' in caps
- In the element and in its tests
- Fixes #606662
-
-2010-03-01 14:07:20 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't set durations of 0 on outgoing buffers.
- Some (broken) streams don't have the extended stream properties in
- the header, resulting in applying a duration of zero on outgoing
- buffers.
- Fixes #611473
-
-2010-03-01 14:05:58 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Make sure we always set proper payload duration.
- Some (broken) streams will have a delta of 0, resulting in outgoing
- buffers having durations of 0.
- Fixes #611473
-
-2010-02-24 01:40:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.13.3 pre-release
-
-2010-02-19 10:13:34 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Make sure we don't end up with negative timestamps.
- Some files have payload with timestamps smaller than the preroll duration.
- Instead of blindly substracting the preroll value (and ending up with
- insanely high timestamps on the outgoing buffers), we make sure we
- never go below 0.
- Fixes #610432
-
-2010-02-19 01:07:08 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.13.2 pre-release
- Update core/base requirement to 0.10.26, since that's more likely
- to be the actual requirement.
-
-2010-02-19 01:06:44 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/LINGUAS:
- * po/el.po:
- * po/sl.po:
- po: update translations
-
-2010-02-16 14:08:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/x264enc.c:
- x264enc: add caps check to x264enc unit test
- Add some minimal caps checking to x264enc unit test.
- See #610089.
-
-2010-02-16 13:25:11 +0000 Vittorio Palmisano <vpalmisano@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: fix up avcC header construction and playback by flash players
- 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.
-
-2010-02-16 12:59:54 +0100 Robert Swain <robert.swain@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Improve seek behaviour for audio-only with no index
- Instead of seeking to seek_time - 5s in the hope of hitting a keyframe
- for video, we can just seek to seek_time instead.
-
-2010-02-16 00:24:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: fix up GST_CXXFLAGS properly
- We don't want C specific flags in GST_CXXFLAGS, so base it on the
- GST_CFLAGS that only contains the pkg-config CFLAGS but none of
- the GST_OPTION_CFLAGS. Also, we only need the local includes once.
-
-2010-02-11 01:12:43 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * MAINTAINERS:
- Update MAINTAINERS, add myself
-
-2010-02-15 23:16:32 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * configure.ac:
- configure: base GST_CXXFLAGS on --cflags from pkg-config
- pkg-config sets GST_CFLAGS and GST_LIBS. We need to use CFLAGS as a starting
- point for for both C and CXX settings.
-
-2010-02-14 23:18:44 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 96dc793 to 44ecce7
-
-2010-02-01 01:33:22 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * Makefile.am:
- * configure.ac:
- * win32/common/.gitignore:
- * win32/common/config.h:
- win32: change how win32/common/config.h is updated
- Generate win32/common/config.h-new directly from config.h.in,
- using shell variables in configure and some hard-coded information.
- Change top-level makefile so that 'make win32-update' copies the
- generated file to win32/common/config.h, which we keep in source
- control. It's kept in source control so that the git tree is
- buildable from VS.
- This change is similar to the ones applied a while ago to GStreamer
- core, gst-plugins-base and gst-plugins-good and prevents configure
- from changing files in source control. The generated config.h
- should be ok, but needs testing.
-
-2010-01-31 13:03:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: don't construct config header with uninitialised bytes
- Turns out 4 + 4 + 2 + (4 * 2) is actually 18 and not 22. This avoids
- a presumably unintentional padding of uninitialised bytes at the end
- of the CONT tags chunk, which should be harmless but causes warnings
- in valgrind (see #608533 for a test URL).
-
-2010-01-30 19:12:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: add finalize function so we can free streams and rulebook
- Fix memory leak in Real RTSP component (#608533).
-
-2010-01-30 19:10:45 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: fix minor memory leak
- Caps take their own reference when a buffer is added to them, so
- unref buffer after adding it to caps (#608533).
-
-2010-01-30 19:06:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rdtdepay.c:
- rdtdepay: unref input buffer when done
- Fixes memory leak, see #608533.
-
-2010-01-30 15:19:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 15d47a6 to 96dc793
-
-2010-01-29 19:47:03 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: make use of Access Unit delimiters configurable
- API: GstX264Enc:aud
-
-2010-01-22 15:40:28 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Do not subtract padding twice
- Only subtract implicit padding if an explicit one isn't
- provided. Avoids subtracting it twice and causing
- parsing errors.
- Fixes #607698
-
-2010-01-22 16:55:14 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/mpegstream/gstmpegpacketize.c:
- assert: g_assert_not_reached() cannot replace return statement
- Fix build with assert being turned off.
-
-2010-01-20 00:55:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 14cec89 to 15d47a6
-
-2010-01-18 18:01:55 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't forget to update flow variable
- Forgot to update the return value in the loop.
-
-2010-01-18 17:49:06 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Check flow return on every push
- We previously only aggregated flow returns after the while(push) loop,
- which meant that in some cases we would end-up not properly aggregating
- the flow returns.
- This is based on the same flow aggregation algorithm as oggdemux.
-
-2010-01-11 16:14:44 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: Add stream-format to output caps
- Adds stream-format to output caps of x264enc that
- informs if the stream is in bytestream of avc format.
- Fixes #606662
-
-2010-01-11 12:23:35 +0100 Arnaud Patard <apatard@mandriva.com>
-
- * gst/mpegaudioparse/gstxingmux.c:
- xingmux: Fix unaligned memory access
- ARM/SPARC need 32bit alignment but xingmux accesses possibly
- unaligned memory, which leads to SIGBUS.
- Fixes bug #586464.
-
-2010-01-07 14:36:47 -0800 Michael Smith <msmith@songbirdnest.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Use GST_STR_NULL in a couple of places.
- Fixes crashing on some of the log statements on win32.
-
-2010-01-07 16:36:08 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Parse and post bitrate for streams
- Parse the bitrate of the streams and post their tags.
- Fixes #599299
-
-2010-01-07 13:54:21 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Post bitrate tag
- If stream bitrate object is available, post the bitrate
- tags.
- Fixes #599297
-
-2010-01-04 15:19:25 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: minor validation check of (Xing, VBRI) metadata
- ... to detect e.g. a truncated file, rendering some of the metadata invalid.
-
-2010-01-04 14:59:06 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: use proper total_time and total_bytes in various cases
- The correct basis for (Xing, VBRI) seek table calculations is the
- byte size and duration provided by that metadata, rather than some
- other (possibly even estimated) one. This also prevents an infinite
- conversion loop in (unlikely) case where a TOC is provided without
- such corresponding (duration) metdata.
-
-2009-12-08 19:55:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: conserve stop time for non-accurate seek
- Use the same strategy as accurate seeks to store
- pending non-accurate seeks to avoid overwriting non-definite
- stop times. When doing non-accurate seeks our position
- reporting might drift off by some secs and the stream can
- end up before it should.
- Fixes #603695
-
-2009-12-21 19:12:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 47cb23a to 14cec89
-
-2009-12-18 16:04:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/amrwbdec/amrwb.c:
- amrwbdec: give decoder a rank so decodebin/playbin will use it
-
-2009-12-08 19:01:50 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: return false when we can't seek
- When upstream can't seek, we return false as well
-
-2009-12-02 11:21:22 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: Avoid crash when seeking before negotiating
- 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
-
-2009-12-01 15:08:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 87bf428 to 47cb23a
-
-2009-12-01 14:17:50 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From da4c75c to 87bf428
-
-2009-11-27 18:56:13 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From 53a2485 to da4c75c
-
-2009-11-26 15:54:45 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: fix non-flushing seek
- Specifically, in addition to clearing lots of variables/offsets
- when receiving newsegment, also clear leftover data to match.
-
-2009-11-20 21:32:31 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- x264enc: Make upstream GstForceKeyUnit thread-safe
- Also send the GstForceKeyUnit event downstream when an upstream on is received,
- allowing muxers or payloaders to take appropriate actions.
- https://bugzilla.gnome.org/show_bug.cgi?id=602556
-
-2009-11-19 10:31:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From a3e3ce4 to 53a2485
-
-2009-11-18 09:58:39 +0100 Benjamin Gaignard <benjamin@gaignard.net>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Don't call strlen() on NULL pointers
- Fixes bug #602280.
-
-2009-11-09 15:02:05 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Remove old pads when new ones are added
- The old pads were being removed before adding the new ones,
- we should add the new ones first.
- Fixes #599718
-
-2009-11-09 13:30:45 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Handle chained asfs on pull mode
- Adds chained asfs handling to pull mode. It now checks if
- there is a new asf header after the last packet (when it
- is possible to know how many packets are) or it tries
- checking if a processed packet that fails is an header
- object.
- Fixes #599718
-
-2009-11-09 10:24:46 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: properly do chained asfs on push mode
- To properly do chained asfs work with playbin2, we need to
- push eos on the old pads before removing them.
- Fixes #599718
-
-2009-10-27 17:48:03 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: add support for chained asfs (push mode)
- Adds support for detecting and playing chained asfs
- in push mode. asfdemux tries to detect a new asf start
- by identifying the header object guid in a input buffer.
- When it finds it, it resets its state, removing its pads
- and creates new ones for the new file.
-
-2009-11-05 18:33:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix two small leaks
-
-2009-11-05 18:19:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: prefer WM/TrackNumber over WM/Track, it's more reliable
- WM/Track has a 0 base but is often wrongly written as starting from 1,
- so not as reliable as WM/TrackNumber which always starts from 1.
-
-2009-11-05 18:11:55 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: WM/Track starts counting from 0, adjust to start from 1
-
-2009-11-05 18:11:14 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: map WM/TrackNumber to GST_TAG_TRACK_NUMBER as well
- There's both WM/Track and WM/TrackNumber.
-
-2009-11-04 15:52:09 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Fix debug statement: Pass pos variable instead of time() function
-
-2009-11-04 15:50:17 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Fix printf format string warning
-
-2009-11-04 15:46:04 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix bogus variable used uninitialised warnings
-
-2009-11-04 13:55:39 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * po/Makevars:
- po: Don't create backup .po files
- As well as preventing creation of useless backup files, it works
- around a bug in gettext 0.17 on OS/X
-
-2009-10-29 11:39:13 -0700 Michael Smith <msmith@songbirdnest.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: fix c99-style comments.
-
-2009-10-29 10:34:17 -0700 Michael Smith <msmith@songbirdnest.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: accept fragments in a continued packet where the subsequent fragments declare a size of 0. Fixes bug 600037.
-
-2009-10-27 12:33:24 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rmutils.c:
- rmutils: fix byteswapping
- fix the byteswapping code that was wrong because of the side effects of the
- READ/WRITE macros.
- Fixes #599676
-
-2009-10-20 20:00:44 +0100 Robert Swain <robert.swain@gmail.com>
-
- * ext/x264/gstx264enc.c:
- x264enc: Adapt to slightly modified x264 API
- Fixes #599095.
-
-2009-10-26 17:31:19 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: careful to avoid crash on bogus data
- When receiving bogus data, we have to avoid subtracting a value
- larger than 'size' from 'size' variable, resulting in a wrap
- that would make 'size' a really large bogus value.
- Fixes #599333
-
-2009-10-26 00:56:37 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * win32/common/config.h:
- win32: Commit bumped version number
-
-2009-10-17 13:46:13 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: Don't use expensive glib ways to get an enum nick.
- Fixes #598761
- This removes a good 50% of processing time for parsing a buffer.
- We do this by simply... getting the nicks that we already have handy
- instead of going through the expensive glib system.
-
-2009-10-24 20:36:41 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * configure.ac:
- configure.ac: And back to development we go...
-
-=== release 0.10.13 ===
-
-2009-10-21 17:16:00 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * gst-plugins-ugly.doap:
- * win32/common/config.h:
- Release 0.10.13
-
-2009-10-21 17:02:42 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2009-10-16 10:16:55 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From 85d1530 to 0702fe1
-
-2009-10-15 23:56:55 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ChangeLog:
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- 0.10.12.3 pre-release
-
-2009-10-14 10:41:48 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From a3e3ce4 to 85d1530
-
-2009-10-13 13:05:32 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Fix reference leak on all input buffers in 'dvd mode'
- https://bugzilla.gnome.org/show_bug.cgi?id=598272
-
-2009-10-12 13:54:27 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ChangeLog:
- * configure.ac:
- * po/LINGUAS:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/de.po:
- * po/en_GB.po:
- * po/es.po:
- * po/eu.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/lv.po:
- * po/ms.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- 0.10.12.2 pre-release
-
-2009-10-12 11:31:22 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * docs/plugins/gst-plugins-ugly-plugins.args.new:
- * docs/plugins/gst-plugins-ugly-plugins.signals.new:
- docs: Remove files accidentally added
- Remove the gst-plugins-ugly-plugins.args.new and
- gst-plugins-ugly-plugins.signals.new files, that appear
- to have been accidentally added in commit
- f5d046a0b034f9bd7274291f7131ee5db1a30052
-
-2009-09-16 00:00:28 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Add some debugging for new segment events
-
-2009-10-11 16:18:37 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: fix warning in macosx snow leopard
-
-2009-10-11 16:16:09 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/mpegstream/gstmpegparse.c:
- mpegstream: fix warning in macosx snow leopard
-
-2009-10-11 16:14:08 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: fix warning in macosx snow leopard
-
-2009-10-11 16:09:11 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: fix warning on macosx snow leopard
-
-2009-10-11 16:06:25 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix warning in macosx snow leopard
-
-2009-10-08 19:58:25 +0300 René Stadler <rene.stadler@nokia.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: don't fail SEEKING query when upstream query fails for TIME format
-
-2009-10-08 11:01:03 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 19fa4f3 to a3e3ce4
-
-2009-10-07 14:22:09 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/realmedia/rdtmanager.c:
- build: fprintf, sprintf, sscanf need stdio.h
-
-2009-10-02 18:27:11 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/mad/gstmad.c:
- mad: add missing include to fix the build
-
-2009-10-05 12:13:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcm: whitespace fixes
-
-2009-10-04 22:51:41 +0100 Christian F.K. Schaller <christian.schaller@collabora.co.uk>
-
- * gst-plugins-ugly.spec.in:
- update spec file
-
-2009-10-02 15:22:38 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * configure.ac:
- x264enc: adjust configure checking to changed upstream
-
-2009-10-01 18:58:42 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- x264enc: conditionally adjust to new upstream API
- Fixes #596517.
-
-2009-09-24 17:49:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mpegaudioparse: prevent infinite (re)syncing
- Conflicts:
- gst/mpegaudioparse/gstmpegaudioparse.c
-
-2009-09-22 12:13:38 -0700 Michael Smith <msmith@songbirdnest.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: Refactor checking for sync. Make resyncing more reliable.
- Previously, we could get false sync relatively easily - it sometimes happened
- on real files. This cleans the code up a fair bit, and makes it require more
- confirmation that we've found valid sync before continuing.
-
-2009-09-17 16:12:29 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: ensure 2 valid headers in a row when resyncing
-
-2009-09-11 10:05:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegstream/gstdvddemux.c:
- dvddemux: remove bogus ifndef
-
-2009-09-05 10:23:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 94f95e3 to 19fa4f3
-
-2009-09-01 12:22:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Fix GstIndex handling, incl. refcounting and NULL indizes
-
-2009-08-31 13:42:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/dvdsub/gstdvdsubparse.c:
- dvdsubparse: GstAdapter is not a GstObject and should be freed with g_object_unref
-
-2009-08-24 13:59:05 -0700 David Schleef <ds@schleef.org>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- Remove Ronald Bultje from Authors field
- Replaced with "GStreamer maintainers
- <gstreamer-devel@lists.sourceforge.net>" or just removed,
- depending on the number of other authors.
-
-2009-08-24 13:57:14 -0700 David Schleef <ds@schleef.org>
-
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/gstasfmux.c:
- * gst/asfdemux/gstasfmux.h:
- asfdemux: Remove old non-built asfmux code
- Remove so people don't confuse it with the new asfmux code
- in -bad.
-
-2009-08-23 13:35:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Only add the MM_ACCEL_DJBFFT flag if it's defined
- It's not defined for older liba52 versions.
-
-2009-08-23 13:34:32 +0200 Mart Raudsepp <leio@gentoo.org>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Allow liba52 to use djbfft based IMDCT transform
- 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.
-
-2009-08-17 17:31:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- amr: Use opencore-amr pkg-config files if possible
- This makes it possible to build the plugins when the libraries
- are installed at non-standard locations.
- Fixes bug #591348.
-
-2009-08-14 12:07:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: use metadata (xing, vbri) provided bytesize for conversions
- Metadata provided seek tables are consistent with metadata's view of
- total size, which typically matches real size, but need not do so
- (e.g. a truncated file). Fixes seeking and position reporting
- in such truncated files (although duration based on metadata may then
- still be incorrect).
-
-2009-08-10 22:22:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: bump core/base requirements to released versions
- to avoid confusion.
-
-2009-08-04 10:44:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * configure.ac:
- configure: Remove all mentions to the id3tag plugin which was removed
-
-2009-08-01 08:43:21 +0200 Marvin Schmidt <marvin_schmidt@gmx.net>
-
- * configure.ac:
- mad: make check for mad independent of the check for id3tag
- Fixes bug #590432.
-
-2009-07-31 00:25:43 -0300 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: set padding size to the correct value
- asf packets in rtp packets should come with their padding fields
- set to 0 and the depayload must update them to the correct
- value before pushing downstream
-
-2009-07-27 20:12:20 +0200 Iago Toral <itoral@igalia.com>
-
- * configure.ac:
- * 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.prerequisites:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-amrwbdec.xml:
- * ext/Makefile.am:
- * ext/amrnb/GstAmrnbEnc.prs:
- * ext/amrnb/Makefile.am:
- * ext/amrnb/README:
- * ext/amrnb/amrnb.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbenc.h:
- * ext/amrnb/amrnbparse.c:
- * ext/amrnb/amrnbparse.h:
- * ext/amrwbdec/Makefile.am:
- * ext/amrwbdec/README:
- * ext/amrwbdec/amrwb.c:
- * ext/amrwbdec/amrwbdec.c:
- * ext/amrwbdec/amrwbdec.h:
- amr: Add AMR-WB decoder and AMR-NB encoder and decoder
- These are based on the OpenCore codecs.
- Fixes bug #584890.
-
-2009-07-24 00:43:07 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Automatic update of common submodule
- From fedaaee to 94f95e3
-
-2009-07-22 11:10:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * LICENSE_readme:
- * REQUIREMENTS:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins.args.new:
- * docs/plugins/gst-plugins-ugly-plugins.signals.new:
- * docs/plugins/inspect/plugin-dvdnav.xml:
- * ext/Makefile.am:
- * ext/dvdnav/.gitignore:
- * ext/dvdnav/Makefile.am:
- * ext/dvdnav/README:
- * ext/dvdnav/dvdnavsrc.c:
- * ext/dvdnav/dvdnavsrc.h:
- * ext/dvdnav/gst-dvd:
- * ext/dvdread/dvdreadsrc.c:
- * gst-plugins-ugly.spec.in:
- * po/POTFILES.in:
- dvdnav: remove dvdnav plugin
- 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.
-
-2009-06-20 14:31:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- mpeg2dec: Fix unused variables compiler warnings in unit test
-
-2009-06-26 15:21:12 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * autogen.sh:
- autogen.sh: Use printf instead of 'echo -n'. Check for automake-1.1[01]
- Check for more automake command variants. Use printf instead of 'echo -n'
- for portability
-
-2009-07-13 12:24:14 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 5845b63 to fedaaee
-
-2009-02-10 13:25:54 +0000 Tim-Philipp Muller <tpm@mini.centricular.net>
-
- * .gitignore:
- Make git ignore more files
-
-2009-06-29 11:10:42 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Refactor multiple packet pull.
- This also fixes a bug by which the first buffer (in a multi-packet mode)
- passed to asf_demux_parse_packet() would have a GST_BUFFER_SIZE of the
- full incoming buffer and not just of the single asf packet.
- Fixes corrupted frames introduced by latest commit.
-
-2009-06-29 10:58:49 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: use the right accurate field
- Remove accurate variable and its faulty use because the real variable is an
- instance variable.
-
-2009-06-28 17:48:11 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Sprinkle branch prediction macros accross the code
-
-2009-06-28 17:43:12 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Delay newsegment handling until we have a keyframe.
- We now have a chance for packets to be collected before we send out the
- newsegment. If we're not in accurate seeking (keyunit) it will set
- the segment start/time to the keyframe's timestamp.
-
-2009-06-28 17:39:23 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Remove useless check. We already have checked for it above.
-
-2009-06-28 17:31:11 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: No longer queue GOPs now that seeking is fixed.
- We now *always* seek to the keyframe just before our requested position.
- When we encounter the first keyframe and we were not accurate (therefore doing
- keyframe seeking), we update the segment start position to the keyframe timestamp.
-
-2009-06-28 17:42:44 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Store the accurate seeking flag
-
-2009-06-28 17:04:00 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Use the average frame duration for buffers without a duration.
- This will still cause some timestamp jitter, but giving a hint as to the duration
- rather than nothing seems to be a better idea.
- Also, this allows some scenarios (like remuxing with asfmux) to estimate the total
- duration using the accumulated packet duration (which will be correct).
-
-2009-06-28 17:02:17 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Use index entry packet count to optimize seeking.
- The simple index entries also contain the number of packets one needs
- to retrieve at a given position to get a full keyframe. We therefore
- use that information to retrieve all those packets in one buffer when
- working in pull-mode.
-
-2009-06-26 20:52:29 -0300 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Do not try to free const pointer
- In gst_asf_demux_chain_headers, when 'goto wrong_type' was called
- asfdemux tried to free a const pointer that had been cast to a
- normal pointer variable.
-
-2009-06-26 20:44:09 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Use presentation timestamp when searching in the index.
- We need to take the preroll into account... else we end up too early.
-
-2009-06-26 13:43:16 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From f3bb51b to 5845b63
-
-2009-06-26 13:35:38 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Convert index entry from presentation time to timestamps.
- We weren't taking the preroll into account previously, meaning that we
- were always seeking preroll nanoseconds too early... resulting in a lot
- of dropped packets (which are before the start time).
- This brings quit a bit closer to as-fast-as-possible seeking in asf files.
-
-2009-06-26 10:58:56 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Fix byte array metadata handling.
- We basically discard byte array metadata. Should be trivial to adapt
- to storing the pointers if we need it later on.
-
-2009-06-26 10:41:28 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Handle PAR/interlaced information stored in packet payload.
- This is the 'other' way to store non 1/1 PAR in asf streams (by storing it
- in the ASF Packet payload extensions).
-
-2009-06-26 10:40:39 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: Store/Handle global metadata (not specific to one stream).
- This allows us to store (and handle) PAR information which might be stored there.
-
-2009-06-25 18:24:56 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: fix Xing inverse seek table building
-
-2009-06-24 15:15:37 +0100 Jan Schmidt <jan.schmidt@sun.com>
-
- * common:
- Automatic update of common submodule
- From f3bb51b to f810030
-
-2009-06-23 16:45:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: don't try to free a NULL taglist
-
-2009-06-23 02:14:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: post tags only after we've created our source pads
- Post global tags only after we've added our source pads, so that
- tag events get sent downstream in addition to tag messages posted
- on the bus. This makes sure tags can be picked up automatically
- when transcoding, but also by tagreadbin/playbin2. Fixes #519721.
- While we're at it, also add a container-format tag.
-
-2009-06-23 01:37:01 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: use new bytereader functions for image tag parsing
-
-2009-06-22 18:53:56 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: remove some more unused variables
-
-2009-06-19 17:25:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: plug buffer leaking
-
-2009-06-22 17:36:21 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: guard against dropped buffers
- If a buffer was dropped, we might request data from the adapter that is not
- there and then we get a NULL buffer.
-
-2009-06-22 17:16:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: set DISCONT on streams
- When we receive a DISCONT as input, don't clear our complete state but simply
- mark a discont that will be put on the next buffer. The code will be able to
- handle and throw away incomplete data.
- Add some more debug info.
- Remove an unused variable.
-
-2009-06-22 17:15:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: set DELTA_UNIT flag correctly
- Only set the DELTA_UNIT flag when we are not dealing with a keyframe.
- Add some more debug info.
-
-2009-06-22 13:37:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix latency calculations
- We need to check for -1 as an invalid timestamp, not 1.
-
-2009-06-16 09:45:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: don't put every single frame into the index
- Let's not put every single mp3 frame in our index, a few frames per
- second should be more than enough. For now use an index interval
- of 100ms-500ms depending on the upstream size, to keep the index at
- a reasonable size. Factor out the code that adds the index entry
- into a separate function for better code readability.
-
-2009-06-16 01:40:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: assume seekability only if we know the upstream size
- While technically upstream may be seekable even if it doesn't know
- the exact size, I can't think of a use case where this distincation
- is relevant in practice, so for now just assume we're not seekable
- if upstream doesn't provide us with a size. Makes sure we don't
- build a seek index when streaming internet radio with sources that
- pretend to be seekable until you try to actually seek.
-
-2009-06-19 17:46:12 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * gst-plugins-ugly.spec.in:
- Fix x264 requirement in SPEC file
-
-2009-06-19 15:01:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * gst/realmedia/rdtmanager.c:
- x264enc, rdtmanager: fix compilation with debugging disabled
-
-2009-06-11 13:48:22 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- * docs/plugins/Makefile.am:
- docs: Bump common. Fix comment in the docs Makefile.am
-
-2009-06-18 20:26:04 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * win32/common/config.h:
- Back to development -> 0.10.12.1
-
-2009-06-18 08:54:17 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * gst-plugins-ugly.doap:
- Add 0.10.12 release to the doap file
-
-=== release 0.10.12 ===
-
-2009-06-18 08:34:54 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- * docs/plugins/inspect/plugin-x264.xml:
- * win32/common/config.h:
- Release 0.10.12
-
-2009-06-18 08:34:46 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * po/bg.po:
- * po/id.po:
- * po/it.po:
- * po/nl.po:
- * po/zh_CN.po:
- Update .po files
-
-2009-06-18 08:04:40 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2009-06-05 22:10:02 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- 0.10.11.2 pre-release
-
-2009-06-05 22:07:31 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * win32/common/config.h.in:
- win32: Remove #undef inline from the win32 config.h
-
-2009-06-05 20:53:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-mad.xml:
- * ext/mad/Makefile.am:
- * ext/mad/gstid3tag.c:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- mad, id3mux: (re)move broken, unmaintained and unloved id3mux element
- It will be reborn with a shiny new code base under its hood in -bad.
- See #581756 and #565764.
-
-2009-06-05 19:48:28 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * tests/check/pipelines/.gitignore:
- gitignore: Ignore some built files in the test area
-
-2009-06-05 19:46:17 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- docs: Update plugin inspect files
-
-2009-06-05 19:25:54 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
- * docs/plugins/inspect/plugin-x264.xml:
- * ext/Makefile.am:
- * gst-plugins-ugly.spec.in:
- * tests/check/Makefile.am:
- * tests/check/elements/.gitignore:
- Moved 'x264enc' from -bad to -ugly
-
-2009-05-25 11:18:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- [MOVED FROM BAD 28/28] x264enc: add multipass-cache-file property
- Fixes #583627
-
-2009-05-09 23:47:39 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * ext/x264/GstX264Enc.prs:
- [MOVED FROM BAD 27/28] Remove wrong stuff from preset file
-
-2009-05-09 12:42:25 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * ext/x264/GstX264Enc.prs:
- [MOVED FROM BAD 26/28] Add a more representative example preset file for x264
-
-2009-05-07 17:53:42 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- [MOVED FROM BAD 25/28] Add ranks to various muxers and encoders in -bad
-
-2009-04-30 00:06:36 +0300 Stefan Kost <ensonic@users.sf.net>
-
- * ext/x264/GstX264Enc.prs:
- * ext/x264/Makefile.am:
- * ext/x264/gstx264enc.c:
- [MOVED FROM BAD 24/28] x264enc: add preset support
- Add preset iface and a (dummy) preset file as a starting point.
-
-2009-04-29 16:57:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * ext/x264/gstx264enc.c:
- [MOVED FROM BAD 23/28] x264enc: add some documentation on profile
-
-2009-04-09 23:53:39 +0200 Janin Kolenc <janin.kolenc at marand.si>
-
- * ext/x264/gstx264enc.c:
- * ext/x264/gstx264enc.h:
- [MOVED FROM BAD 22/28] x264enc: add force keyframe event handling
- Use the GstForceKeyUnit event to force a keyframe.
- Fixes #578112.
-
-2009-01-05 10:28:58 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 21/28] ext/x264/gstx264enc.c: Use hyphen in property name, perform safety buffer size check prior to mem access, and some mo...
- 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.
-
-2009-01-02 01:44:11 +0000 Alessandro Decina <alessandro.d@gmail.com>
-
- [MOVED FROM BAD 20/28] ext/apexsink/Makefile.am: Link against -lgcrpyto for RSA_new and RSA_free.
- 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.
-
-2008-11-14 19:52:24 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 19/28] ext/x264/gstx264enc.c: Construct source caps in more conventional (and correct) manner.
- Original commit message from CVS:
- * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
- Construct source caps in more conventional (and correct) manner.
-
-2008-11-04 12:42:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- [MOVED FROM BAD 18/28] Don't install static libs for plugins. Fixes #550851 for -bad.
- Original commit message from CVS:
- * ext/alsaspdif/Makefile.am:
- * ext/amrwb/Makefile.am:
- * ext/apexsink/Makefile.am:
- * ext/arts/Makefile.am:
- * ext/artsd/Makefile.am:
- * ext/audiofile/Makefile.am:
- * ext/audioresample/Makefile.am:
- * ext/bz2/Makefile.am:
- * ext/cdaudio/Makefile.am:
- * ext/celt/Makefile.am:
- * ext/dc1394/Makefile.am:
- * ext/dirac/Makefile.am:
- * ext/directfb/Makefile.am:
- * ext/divx/Makefile.am:
- * ext/dts/Makefile.am:
- * ext/faac/Makefile.am:
- * ext/faad/Makefile.am:
- * ext/gsm/Makefile.am:
- * ext/hermes/Makefile.am:
- * ext/ivorbis/Makefile.am:
- * ext/jack/Makefile.am:
- * ext/jp2k/Makefile.am:
- * ext/ladspa/Makefile.am:
- * ext/lcs/Makefile.am:
- * ext/libfame/Makefile.am:
- * ext/libmms/Makefile.am:
- * ext/metadata/Makefile.am:
- * ext/mpeg2enc/Makefile.am:
- * ext/mplex/Makefile.am:
- * ext/musepack/Makefile.am:
- * ext/musicbrainz/Makefile.am:
- * ext/mythtv/Makefile.am:
- * ext/nas/Makefile.am:
- * ext/neon/Makefile.am:
- * ext/ofa/Makefile.am:
- * ext/polyp/Makefile.am:
- * ext/resindvd/Makefile.am:
- * ext/sdl/Makefile.am:
- * ext/shout/Makefile.am:
- * ext/snapshot/Makefile.am:
- * ext/sndfile/Makefile.am:
- * ext/soundtouch/Makefile.am:
- * ext/spc/Makefile.am:
- * ext/swfdec/Makefile.am:
- * ext/tarkin/Makefile.am:
- * ext/theora/Makefile.am:
- * ext/timidity/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/x264/Makefile.am:
- * ext/xine/Makefile.am:
- * ext/xvid/Makefile.am:
- * gst-libs/gst/app/Makefile.am:
- * gst-libs/gst/dshow/Makefile.am:
- * gst/aiffparse/Makefile.am:
- * gst/app/Makefile.am:
- * gst/audiobuffer/Makefile.am:
- * gst/bayer/Makefile.am:
- * gst/cdxaparse/Makefile.am:
- * gst/chart/Makefile.am:
- * gst/colorspace/Makefile.am:
- * gst/dccp/Makefile.am:
- * gst/deinterlace/Makefile.am:
- * gst/deinterlace2/Makefile.am:
- * gst/dvdspu/Makefile.am:
- * gst/festival/Makefile.am:
- * gst/filter/Makefile.am:
- * gst/flacparse/Makefile.am:
- * gst/flv/Makefile.am:
- * gst/games/Makefile.am:
- * gst/h264parse/Makefile.am:
- * gst/librfb/Makefile.am:
- * gst/mixmatrix/Makefile.am:
- * gst/modplug/Makefile.am:
- * gst/mpeg1sys/Makefile.am:
- * gst/mpeg4videoparse/Makefile.am:
- * gst/mpegdemux/Makefile.am:
- * gst/mpegtsmux/Makefile.am:
- * gst/mpegvideoparse/Makefile.am:
- * gst/mve/Makefile.am:
- * gst/nsf/Makefile.am:
- * gst/nuvdemux/Makefile.am:
- * gst/overlay/Makefile.am:
- * gst/passthrough/Makefile.am:
- * gst/pcapparse/Makefile.am:
- * gst/playondemand/Makefile.am:
- * gst/rawparse/Makefile.am:
- * gst/real/Makefile.am:
- * gst/rtjpeg/Makefile.am:
- * gst/rtpmanager/Makefile.am:
- * gst/scaletempo/Makefile.am:
- * gst/sdp/Makefile.am:
- * gst/selector/Makefile.am:
- * gst/smooth/Makefile.am:
- * gst/smoothwave/Makefile.am:
- * gst/speed/Makefile.am:
- * gst/speexresample/Makefile.am:
- * gst/stereo/Makefile.am:
- * gst/subenc/Makefile.am:
- * gst/tta/Makefile.am:
- * gst/vbidec/Makefile.am:
- * gst/videodrop/Makefile.am:
- * gst/videosignal/Makefile.am:
- * gst/virtualdub/Makefile.am:
- * gst/vmnc/Makefile.am:
- * gst/y4m/Makefile.am:
- * sys/acmenc/Makefile.am:
- * sys/cdrom/Makefile.am:
- * sys/dshowdecwrapper/Makefile.am:
- * sys/dshowsrcwrapper/Makefile.am:
- * sys/dvb/Makefile.am:
- * sys/dxr3/Makefile.am:
- * sys/fbdev/Makefile.am:
- * sys/oss4/Makefile.am:
- * sys/qcam/Makefile.am:
- * sys/qtwrapper/Makefile.am:
- * sys/vcd/Makefile.am:
- * sys/wininet/Makefile.am:
- * win32/common/config.h:
- Don't install static libs for plugins. Fixes #550851 for -bad.
-
-2008-10-27 17:01:22 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 17/28] ext/x264/gstx264enc.c: Adapt to slightly modified x264 API. Fixes #555238.
- Original commit message from CVS:
- * ext/x264/gstx264enc.c: (gst_x264_enc_init_encoder):
- Adapt to slightly modified x264 API. Fixes #555238.
-
-2008-08-12 16:13:15 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 16/28] ext/x264/gstx264enc.*: Do not deal with duplicated input (timestamps). If needed, a generic element can do so.
- 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.
-
-2008-08-12 15:41:48 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 15/28] docs/plugins/gst-plugins-bad-plugins.args: Integrate new properties into documentation.
- 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)
-
-2008-08-12 13:08:39 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 14/28] Add documentation and unit test for x264enc.
- 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.
-
-2008-08-11 17:24:58 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 13/28] ext/x264/gstx264enc.c: Allocate some buffers in more adaptive and economical fashion.
- 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.
-
-2008-08-11 15:16:14 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 12/28] configure.ac: Check for sufficiently up-to-date x264 API.
- 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.
-
-2008-08-08 15:07:12 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 11/28] ext/x264/gstx264enc.c: Coding style and layout; re-order some functions in more typical and natural flow.
- 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.
-
-2008-08-08 14:19:16 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 10/28] ext/x264/: Use GQueue in stead of custom queue code.
- Original commit message from CVS:
- * ext/x264/Makefile.am:
- * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps),
- (gst_x264_enc_sink_set_caps), (gst_x264_enc_init),
- (gst_x264_enc_reset), (gst_x264_enc_finalize),
- (gst_x264_enc_flush_frames), (gst_x264_enc_sink_event),
- (gst_x264_enc_chain), (gst_x264_enc_encode_frame),
- (gst_x264_enc_change_state), (gst_x264_enc_set_property):
- * ext/x264/gstx264enc.h:
- Use GQueue in stead of custom queue code.
- Factorize flushing out encoder delayed frames.
- Factorize initialization and state change reset.
-
-2008-08-08 10:56:02 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 09/28] Use configure-generated _stdint.h.
- Original commit message from CVS:
- * ext/x264/gstx264enc.h:
- * sys/fbdev/gstfbdevsink.c:
- Use configure-generated _stdint.h.
-
-2008-08-08 10:13:36 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- [MOVED FROM BAD 08/28] ext/x264/: Use video format library and GST_WRITE_*_BE macros where applicable.
- 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.
-
-2008-06-04 11:33:21 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- [MOVED FROM BAD 07/28] ext/x264/gstx264enc.c: Try harder not to crash when we get an EOS event but haven't set up the encoder yet (as may ha...
- 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.
-
-2007-12-11 16:26:07 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- [MOVED FROM BAD 06/28] ext/x264/gstx264enc.c: Fix caps memleak.
- Original commit message from CVS:
- * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
- Fix caps memleak.
-
-2007-10-26 17:18:41 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- [MOVED FROM BAD 05/28] ext/x264/gstx264enc.c: Fix build against the libx264 version that ships with debian stable.
- Original commit message from CVS:
- * ext/x264/gstx264enc.c:
- Fix build against the libx264 version that ships with debian stable.
-
-2007-09-24 10:53:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- [MOVED FROM BAD 04/28] Massive leak fixing, plus code cleanups.
- Original commit message from CVS:
- * ext/audioresample/gstaudioresample.c:
- * ext/x264/gstx264enc.c:
- * gst/dvdspu/gstdvdspu.c:
- * gst/dvdspu/gstdvdspu.h:
- * gst/festival/gstfestival.c:
- * gst/h264parse/gsth264parse.c:
- * gst/mpegtsparse/mpegtspacketizer.c:
- * gst/mpegtsparse/mpegtsparse.c:
- * gst/multifile/gstmultifilesink.c:
- * gst/multifile/gstmultifilesrc.c:
- * gst/nuvdemux/gstnuvdemux.c:
- * sys/dshowsrcwrapper/gstdshowaudiosrc.c:
- * sys/dshowsrcwrapper/gstdshowvideosrc.c:
- * sys/vcd/vcdsrc.c:
- Massive leak fixing, plus code cleanups.
-
-2007-07-18 07:35:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- [MOVED FROM BAD 03/28] Add stdlib include (free, atoi, exit).
- Original commit message from CVS:
- * examples/app/appsrc_ex.c:
- * examples/switch/switcher.c:
- * ext/neon/gstneonhttpsrc.c:
- * ext/timidity/gstwildmidi.c:
- * ext/x264/gstx264enc.c:
- * gst/mve/mveaudioenc.c: (mve_compress_audio):
- * gst/rtpmanager/gstrtpclient.c:
- * gst/rtpmanager/gstrtpjitterbuffer.c:
- * gst/spectrum/demo-audiotest.c:
- * gst/spectrum/demo-osssrc.c:
- * sys/dvb/gstdvbsrc.c:
- Add stdlib include (free, atoi, exit).
-
-2007-05-15 21:23:53 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- [MOVED FROM BAD 02/28] ext/x264/gstx264enc.c (gst_x264_enc_init_encoder): This needs a version check.
- 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.
-
-2007-03-25 13:06:26 +0000 Michal Benes <michal.benes@itonis.tv>
-
- [MOVED FROM BAD 01/28] Add libx264-based h264 encoder plugin (#421110). Probably doesn't handle 'odd' widths and heights correctly yet.
- Original commit message from CVS:
- Patch by: Michal Benes <michal.benes at itonis tv>
- Patch by: Josef Zlomek <josef.zlomek at itonis tv>
- * configure.ac:
- * ext/Makefile.am:
- * ext/x264/Makefile.am:
- * ext/x264/gstx264enc.c: (gst_x264_enc_me_get_type),
- (gst_x264_enc_analyse_get_type),
- (gst_x264_enc_timestamp_queue_init),
- (gst_x264_enc_timestamp_queue_free),
- (gst_x264_enc_timestamp_queue_put),
- (gst_x264_enc_timestamp_queue_get), (gst_x264_enc_header_buf),
- (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
- (gst_x264_enc_base_init), (gst_x264_enc_class_init),
- (gst_x264_enc_init), (gst_x264_enc_init_encoder),
- (gst_x264_enc_close_encoder), (gst_x264_enc_dispose),
- (gst_x264_enc_sink_event), (gst_x264_enc_chain),
- (gst_x264_enc_encode_frame), (gst_x264_enc_change_state),
- (gst_x264_enc_set_property), (gst_x264_enc_get_property),
- (plugin_init):
- * ext/x264/gstx264enc.h:
- Add libx264-based h264 encoder plugin (#421110). Probably doesn't
- handle 'odd' widths and heights correctly yet.
-
-2009-06-05 01:51:20 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: nicer metadata extraction of genre tags in some cases
- Handle pseudo-strings like "(5)" and map them to the ID3v1 genre
- that they presumably stand for.
-
-2009-06-05 01:32:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: parse WM/Picture tags to extract cover art
- Fixes #583112.
-
-2009-05-31 20:20:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * REQUIREMENTS:
- docs: fix http links for amr libs in REQUIREMENTS
-
-2009-05-29 20:07:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fix bogus flow return handling in eos handler
- Don't overwrite the origin flow return by whatever flow we get
- when trying to push the remaining internally queued payloads.
- We want to do our eos logic, ie. send an EOS event or segment-done
- message in any case. Makes things EOS properly when an EOS event
- is forced upon the pipeline so that the source returns
- FLOW_UNEXPECTED to a pulling asfdemux. Should fix #582056.
-
-2009-05-29 19:52:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * win32/common/config.h:
- win32: update config.h
-
-2009-05-22 19:27:35 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- configure: bump core/base requirements to released versions
-
-2009-05-22 19:26:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * autogen.sh:
- * configure.ac:
- autogen: move the -Wno-portability for automake into configure.ac
-
-2009-05-27 00:16:30 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: Add multichannel channel maps, and send some tags
- Add a multichannel map to the output caps, and send at least a CODEC and
- BITRATE tag. I'm not too sure about the 5.1 and 7.1 channel maps. I have
- no samples and can't find info about the channel ordering, but this is
- better than nothing.
-
-2009-05-26 17:19:54 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 888e0a2 to c572721
-
-2009-05-22 10:20:46 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 6ab11d1 to 888e0a2
-
-2009-05-21 15:18:06 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/dvdsub/gstdvdsubdec.c:
- dvdsubdec: Remove some dead code
- Remove some redundant memset - gobject memory is already initalised to 0.
- Remove a commented out line leftover from the previous commit
-
-2009-05-21 14:20:22 +0100 Kapil Agrawal <kapil@mediamagictechnologies.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubdec.h:
- dvdsubdec: Support ARGB output
- Negotiate to and render into ARGB buffers directly if the peer supports it.
- Fixes: #580869
-
-2009-05-19 00:51:49 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * ext/a52dec/gsta52dec.c:
- a52dec: Reconcile code with dtsdec
- 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.
-
-2009-05-14 12:32:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Improve debugging a bit
-
-2009-05-13 19:32:16 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Revert ranking switch with ffdec_mpeg2video. Fixes #574461
-
-2009-05-13 01:55:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * po/Makevars:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- po: avoid conflicts of local *.po files with files in git
- Make it so that filenames and line numbers are only stored in the *.pot file
- (which is not in git), but not in the individual *.po files. This information
- is hardly useful for translators in our case, and it should avoid the constant
- conflicts of local *.po files with the ones in git which are caused by the
- source files changing and the line numbers being updated. This commit might
- cause one last merge conflict for you, which you can work around with
- "git checkout po/*.po" before merging or pulling. After that there should
- (hopefully) not be any more local modifications of these files (unless
- someone committed additions or changes to translated strings and the
- *.po files haven't been updated yet, that is).
-
-2009-05-12 19:22:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: add Since tag to gtk-doc chunk
-
-2009-05-13 01:46:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * tests/check/elements/mpeg2dec.c:
- checks: fix mpeg2dec unit test again after interlace addition to caps
-
-2009-05-12 20:34:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: work around old mpeg2dec versions
- 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
-
-2009-05-12 20:24:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mpeg2dec/Makefile.am:
- mpeg2dec: link to gstvideo
- Fix compilation by adding the right include directories and linking to the video
- library.
-
-2009-05-12 11:57:04 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfdemux: Downgrade simple statements from WARNING to DEBUG
-
-2009-05-11 12:37:46 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/asfpacket.h:
- asf: Detect more payload extensions.
- These should help fix interlaced/PAR issues with more files.
-
-2009-05-12 11:44:13 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- mpeg2dec: Implement interlaced support.
- Expand the debugging statements to show more picture information.
-
-2009-05-12 11:19:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Lower rank to MARGINAL to make ffdec_mpeg2video the default
- ffdec_mpeg2video is much faster, fixes bug #574461.
-
-2009-05-10 16:53:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Don't write a Xing header
-
-2009-05-10 11:17:25 +0200 Marc-Andre Lureau <marcandre.lureau@gmail.com>
-
- * autogen.sh:
- Run libtoolize before aclocal
- This unbreaks the build in some cases. Fixes bug #582021
-
-2009-05-09 15:28:18 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: use 64bit safe scaling functions.
- Got this to fail when seeking in a 14GB file (the value in bytes is
- bigger than 2**32).
-
-2009-05-09 10:57:34 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: remove some pointless g_return_if_fail()s
-
-2009-05-08 14:24:47 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * ext/twolame/gsttwolame.c:
- Switch twolame to primary rank
-
-2009-05-07 17:59:52 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/twolame/gsttwolame.c:
- Add ranks to mp3 encoders
-
-2009-05-07 17:57:17 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
-
- * gst-plugins-ugly.spec.in:
- Add twolame plugin to spec file
-
-2009-05-02 18:11:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: use upstream segment and timestamps for some interpolation
- This should particularly help in case of upstream live src, e.g. rtspsrc,
- and especially so if it has to perform fallback to TCP.
-
-2009-05-07 11:09:59 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: Add support for fragmented packet (L == 0).
- This happens with rtp-over-udp.
-
-2009-05-07 10:10:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Fixup the bitrate only for CBR
- Additionally clarify some property descriptions.
-
-2009-05-06 21:47:17 +0200 Alessandro Decina <alessandro.d@gmail.com>
-
- * ext/lame/gstlamemp3enc.c:
- lame: fix format string in debug statement
-
-2009-05-06 15:37:44 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: Don't reject valid Xing tables of contents
- Some Xing headers apparently start the TOC at byte 1 instead of 0. Don't
- reject them because of it, just subtract the initial offset when reading
- the table.
-
-2009-05-06 15:27:01 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: Allow more bits to change in headers during resynch
- Be more lenient about what we accept as changing bits in a header - basically,
- only require that the mp3 sync marker is present, for the mpeg version,
- layer and samplerate.
- Fixes: #581464
-
-2009-05-06 13:17:35 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mad/gstmad.c:
- mad: Add duration of incoming/outgoing buffers in debug statements
-
-2009-05-06 13:15:30 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: Remove useless checks for valid buffer duration.
- The buffer duration is set to a valid value at the very top of
- emit_frame(), we therefore don't need to check it later on.
-
-2009-05-06 13:13:35 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: Fix stop condition for outputting buffers.
- Some mp3 streams have an offset in timestamps, requiring us to push the
- frame *AFTER* segment.stop in order for the decoder to be able to push
- all data up to the segment.stop position.
-
-2009-05-02 16:51:11 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: 0-base timestamps consistently (whether or not streaming)
- This also makes timestamps (more) consistent before and after a possible
- seek, and moreover makes for reasonable position reporting in live stream
- (whose payload timestamps should not be taken for granted).
-
-2009-05-02 13:45:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: report initial latency due to internal preroll queue
-
-2009-05-02 13:44:48 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: enhance debug statement and refactor some initialization
-
-2009-05-02 13:44:11 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: handle FIXME; activate pads after internal preroll also when streaming
-
-2009-05-02 11:12:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: handle FIXME; normalize preroll
-
-2009-05-02 16:08:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- asfdemux: fixes for streaming mode
- * Improve newsegment handling, e.g. upstream might live in TIME.
- * Only send newsegment if we have needed info.
- * Avoid reading past end of data section.
-
-2009-05-01 18:08:15 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: fixes/enhancements for streaming mode
- * Do not rock the boat by reacting to FLUSH_START.
- * Try to handle TIME seeking by seeking upstream in BYTES.
- * Handle SEEKING query.
-
-2009-05-05 16:38:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * configure.ac:
- * ext/lame/gstlamemp3enc.c:
- lame: fix compilation with LAME versions < 3.98
- 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.
-
-2009-05-04 20:39:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * win32/common/config.h:
- win32: update config.h to git
- Until someone ports the new win32 config.h logic from the
- other modules to -ugly.
-
-2009-05-04 12:53:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- Update docs
-
-2009-05-04 12:51:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lamemp3enc: Add a note to the encoding-engine-quality property
- that says, that this does not affect the bitrate at all.
-
-2009-05-04 12:48:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame: Implement preset interface
-
-2009-05-04 12:47:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/twolame/gsttwolame.c:
- twolame: Implement preset interface
-
-2009-04-30 10:21:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- lamemp3enc: Remove fast-vbr property and rename vbr-quality to quality
-
-2009-04-30 10:16:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- lame/lamemp3enc: Fix memory leak on FLUSH_STOP
-
-2009-04-30 10:14:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlame.c:
- lame: Deprecate the lame element
-
-2009-04-30 10:13:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * 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-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- Update docs
-
-2009-04-30 10:10:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/gstlamemp3enc.c:
- lame: Update example pipelines with the new properties
-
-2009-04-29 19:01:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * ext/lame/Makefile.am:
- * ext/lame/gstlame.c:
- * ext/lame/gstlamemp3enc.c:
- * ext/lame/gstlamemp3enc.h:
- * ext/lame/plugin.c:
- lame: Add lamemp3enc element with much simplified interface
- This deprecates the lame element and fixes bug #494528.
-
-2009-04-23 09:04:41 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/asfpacket.c:
- asfpacket: Fix pull-mode timestamping handling.
- The problem that happens is the following:
- * A packet with multiple payloads comes in
- * Those payloads get handled one by one
- * The first payload contains the first audio payload with timestamp A
- * The second payload contains the first video (key)frame with timestamp V (where V < A)
- With the previous code, the following would happen:
- * the first payload gets processed, then passed to queue_for_stream
- * queue_for_stream detects it's the first valid timestamp received and stores
- first_ts = A
- * the second payload gets processed, then pass to queue_for_stream
- * queue_for_stream detects the timestamp is lower than first_ts... and
- discards it... resulting in losing the first keyframe of the video stream
- We've been having this issue for *ages*... it's just that nobody noticed it
- that much with playbin. But with playbin2's aggresive multiqueue handling, this
- will result in multiqueue not being able to preroll (because the video decoder will
- be dropping a ton of buffers before (maybe) receiving the next keyframe).
- Tested with over 200 asf files, and they all play the first frame correctly now,
- even the most braindead ones.
-
-2009-04-21 14:12:06 -0700 Michael Smith <msmith@songbirdnest.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: don't build seek table if we can't seek.
- Fixes #573720 - unbounded memory usage increase when listening to mp3
- stream for a long time.
-
-2009-04-21 22:13:32 +0100 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From b3941ea to 6ab11d1
-
-2009-04-21 20:17:57 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstxingmux.c:
- mpegaudioparse: Remove dead assignment and duplicate code
-
-2009-04-21 20:21:11 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Actually return the return value for the seek handling.
-
-2009-04-21 20:20:02 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- mpegstream: Remove dead assignments.
- The duplicate assignment of update_time was weird... but it seems normal
- that it's indeed the second statement which is the valid one.
-
-2009-04-21 20:17:19 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/amrnb/amrnbparse.c:
- armnb: Remove unused variable, adapt debug message accordingly.
-
-2009-04-21 20:15:56 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegclock.c:
- dvdsub/mpegstream: _class_init: Remove unused class variables
-
-2009-04-19 14:03:58 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: Initialize flow for a corner case.
- This might be caused by entering the if() line 1214 and then not having
- any activated_streams.. resulting in reaching line 1267 without having
- any valid flow value.
-
-2009-04-19 14:03:38 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/twolame/gsttwolame.c:
- twolame: Remove unneeded variable, value assigned was never read.
-
-2009-04-19 14:03:19 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- mpeg2dec: Remove dead assignment. Value overwritten later on.
-
-2009-04-19 14:02:44 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mad/gstmad.c:
- mad: Remove dead assignment and variables given values which are never read.
-
-2009-04-19 14:02:03 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/lame/gstlame.c:
- lame: Remove unneeded variable, it's assigned a value never read.
-
-2009-04-19 13:59:24 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Remove dead assignment, value is being overwritten before being read.
-
-2009-04-19 13:58:31 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/rmdemux.c:
- rmdemux: Remove unused accurate flag.
- I couldn't see any reason why this was there in the first place.
-
-2009-04-19 13:57:59 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/asmrules.c:
- * gst/realmedia/rdtdepay.c:
- realmedia: Remove dead assignments. The results are never read.
-
-2009-04-19 13:57:10 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/gstrdtbuffer.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtmanager.c:
- * gst/realmedia/rmdemux.c:
- realmedia: Remove useless variables, only being used once (or not).
-
-2009-04-19 13:55:24 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst/asfdemux/gstrtspwms.c:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/rdtdepay.c:
- * gst/realmedia/rtspreal.c:
- remove empty method implementations.
-
-2009-04-18 08:12:08 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/asfdemux/gstrtspwms.c:
- rtspwms: fix condition to detect extension commands for WMS
- Reply with OK to the extension commands for WMS.
-
-2009-04-15 11:09:56 +0200 Josep Torra <n770galaxy@gmail.com>
-
- * gst/realmedia/rtspreal.c:
- realmedia: add special Real header to DESCRIBE message only for Real servers
- Add headers that are specific to real only if a real server had been
- detected by the OPTIONS message.
-
-2009-04-14 19:16:46 +0200 David Hoyt <dhoyt at llnl.gov>
-
- * gst/synaesthesia/synaescope.c:
- synaesthesia: fix compilation on windows
- Fix compilation under MSVC due to references to headers
- that are not available with the MS SDKs.
- Fixes #578524
-
-2009-04-14 10:54:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtspwms.c:
- rtspwms: reply to extension commands
- Reply with OK to the extension commands for WMS.
-
-2009-04-14 10:53:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- asfdepay: fix a comment
-
-2009-04-14 10:53:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/gstasfdemux.c:
- asfdemux: add some more debugging
-
-2009-04-14 10:51:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * configure.ac:
- configure.ac: require git -base
- We require 0.10.22.1 of -base for the new Match-If and ETag headers in RTSP.
-
-2009-04-09 20:21:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- realmedia: add special Real header to SETUP message only for Real servers
- Fixes playback of Windows Media RTSP streams and other non-Real RTSP
- streams where the server errors out because it can't handle the
- Real-specific 'Required: com.real.retain-entity-for-setup' header
- we've been adding unconditionally in the recent past.
- For reference:
- rtsp://66.111.34.191:601/broadcast/alnour.rm
- rtsp://195.134.224.231/snowboard_100.wmv
-
-2009-04-08 11:44:53 -0700 Michael Smith <msmith@songbirdnest.com>
-
- * configure.ac:
- * gst/asfdemux/Makefile.am:
- asfdemux: link to all required libraries including indirectly used ones.
- On win32, we're required to link to all the libraries used - including
- ones only indirectly used by other libs. So, add gstaudio, gsttag, and
- (for windows only) winsock.
-
-2009-04-04 21:19:23 +0300 Felipe Contreras <felipe.contreras@gmail.com>
-
- * common:
- Automatic update of common submodule
- From d0ea89e to b3941ea
-
-2009-04-04 14:54:41 +0200 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Automatic update of common submodule
- From f8b3d91 to d0ea89e
-
-2009-03-26 20:23:14 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- dvdlpcmdec: Fix factory klass, It's a 'Decoder', not a 'Demuxer'.
-
-2009-03-25 16:39:06 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- * gst/realmedia/rtspreal.h:
- realrtsp: add more headers
- Parse the ETag from the describe method and pass the sessionid as the value for
- the If-Match header is subsequent setup calls.
- Fixes support for more RealMedia RTSP streams.
-
-2009-03-22 13:08:48 -0700 David Schleef <ds@schleef.org>
-
- * configure.ac:
- twolame: bump requirement to 0.3.10
- 0.3.10 is the first version with the float32 encoder functions.
- Fixes #576305.
-
-2009-03-22 20:15:24 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- back to development -> 0.10.11.1
-
-=== release 0.10.11 ===
-
-2009-03-21 01:05:22 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
- * gst-plugins-ugly.doap:
- * po/cs.po:
- * win32/common/config.h:
- Release 0.10.11
-
-2009-03-21 00:28:29 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/ja.po:
- * po/lt.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/tr.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
-
-2009-03-13 16:45:08 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * win32/common/config.h:
- 0.10.10.3 pre-release
-
-2009-03-13 16:40:38 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * po/fi.po:
- * po/id.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/sv.po:
- po: Update translations from upstream
-
-2009-03-13 16:38:08 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * po/LINGUAS:
- * po/tr.po:
- po: Add Turkish translation
-
-2009-03-13 19:23:12 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- mp3parse: Fix glitches in the output when playing (for e.g.) AVI
- Don't introduce glitches in the output by a) relaxing the threshold for
- taking upstream timestamps in preference to our calculated timestamps and
- b) only set the discont flag on outgoing buffers in response to an incoming
- discont buffer.
- Fixes: #575046
-
-2009-03-12 15:57:31 +0100 Alessandro Decina <alessandro.decina@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: fix deadlock with accurate seeks.
- Release pending_accurate_seeks_lock before forwarding the seek event upstream.
- Fixes #575068.
-
-2009-03-10 00:22:35 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/ca.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/lt.po:
- * po/mt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- * win32/common/config.h:
- 0.10.10.2 pre-release
- Bump version number, update translations and win32 config.h
-
-2009-03-10 00:19:01 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * po/LINGUAS:
- * po/ja.po:
- po: Add Japanese translation
-
-2009-03-10 00:10:20 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * 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-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * docs/plugins/inspect/plugin-twolame.xml:
- * ext/Makefile.am:
- * po/POTFILES.in:
- Moved twolame from Bad to Ugly
-
-2008-11-04 12:42:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- [MOVED FROM BAD] Don't install static libs for plugins. Fixes #550851 for -bad.
- Original commit message from CVS:
- * ext/alsaspdif/Makefile.am:
- * ext/amrwb/Makefile.am:
- * ext/apexsink/Makefile.am:
- * ext/arts/Makefile.am:
- * ext/artsd/Makefile.am:
- * ext/audiofile/Makefile.am:
- * ext/audioresample/Makefile.am:
- * ext/bz2/Makefile.am:
- * ext/cdaudio/Makefile.am:
- * ext/celt/Makefile.am:
- * ext/dc1394/Makefile.am:
- * ext/dirac/Makefile.am:
- * ext/directfb/Makefile.am:
- * ext/divx/Makefile.am:
- * ext/dts/Makefile.am:
- * ext/faac/Makefile.am:
- * ext/faad/Makefile.am:
- * ext/gsm/Makefile.am:
- * ext/hermes/Makefile.am:
- * ext/ivorbis/Makefile.am:
- * ext/jack/Makefile.am:
- * ext/jp2k/Makefile.am:
- * ext/ladspa/Makefile.am:
- * ext/lcs/Makefile.am:
- * ext/libfame/Makefile.am:
- * ext/libmms/Makefile.am:
- * ext/metadata/Makefile.am:
- * ext/mpeg2enc/Makefile.am:
- * ext/mplex/Makefile.am:
- * ext/musepack/Makefile.am:
- * ext/musicbrainz/Makefile.am:
- * ext/mythtv/Makefile.am:
- * ext/nas/Makefile.am:
- * ext/neon/Makefile.am:
- * ext/ofa/Makefile.am:
- * ext/polyp/Makefile.am:
- * ext/resindvd/Makefile.am:
- * ext/sdl/Makefile.am:
- * ext/shout/Makefile.am:
- * ext/snapshot/Makefile.am:
- * ext/sndfile/Makefile.am:
- * ext/soundtouch/Makefile.am:
- * ext/spc/Makefile.am:
- * ext/swfdec/Makefile.am:
- * ext/tarkin/Makefile.am:
- * ext/theora/Makefile.am:
- * ext/timidity/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/x264/Makefile.am:
- * ext/xine/Makefile.am:
- * ext/xvid/Makefile.am:
- * gst-libs/gst/app/Makefile.am:
- * gst-libs/gst/dshow/Makefile.am:
- * gst/aiffparse/Makefile.am:
- * gst/app/Makefile.am:
- * gst/audiobuffer/Makefile.am:
- * gst/bayer/Makefile.am:
- * gst/cdxaparse/Makefile.am:
- * gst/chart/Makefile.am:
- * gst/colorspace/Makefile.am:
- * gst/dccp/Makefile.am:
- * gst/deinterlace/Makefile.am:
- * gst/deinterlace2/Makefile.am:
- * gst/dvdspu/Makefile.am:
- * gst/festival/Makefile.am:
- * gst/filter/Makefile.am:
- * gst/flacparse/Makefile.am:
- * gst/flv/Makefile.am:
- * gst/games/Makefile.am:
- * gst/h264parse/Makefile.am:
- * gst/librfb/Makefile.am:
- * gst/mixmatrix/Makefile.am:
- * gst/modplug/Makefile.am:
- * gst/mpeg1sys/Makefile.am:
- * gst/mpeg4videoparse/Makefile.am:
- * gst/mpegdemux/Makefile.am:
- * gst/mpegtsmux/Makefile.am:
- * gst/mpegvideoparse/Makefile.am:
- * gst/mve/Makefile.am:
- * gst/nsf/Makefile.am:
- * gst/nuvdemux/Makefile.am:
- * gst/overlay/Makefile.am:
- * gst/passthrough/Makefile.am:
- * gst/pcapparse/Makefile.am:
- * gst/playondemand/Makefile.am:
- * gst/rawparse/Makefile.am:
- * gst/real/Makefile.am:
- * gst/rtjpeg/Makefile.am:
- * gst/rtpmanager/Makefile.am:
- * gst/scaletempo/Makefile.am:
- * gst/sdp/Makefile.am:
- * gst/selector/Makefile.am:
- * gst/smooth/Makefile.am:
- * gst/smoothwave/Makefile.am:
- * gst/speed/Makefile.am:
- * gst/speexresample/Makefile.am:
- * gst/stereo/Makefile.am:
- * gst/subenc/Makefile.am:
- * gst/tta/Makefile.am:
- * gst/vbidec/Makefile.am:
- * gst/videodrop/Makefile.am:
- * gst/videosignal/Makefile.am:
- * gst/virtualdub/Makefile.am:
- * gst/vmnc/Makefile.am:
- * gst/y4m/Makefile.am:
- * sys/acmenc/Makefile.am:
- * sys/cdrom/Makefile.am:
- * sys/dshowdecwrapper/Makefile.am:
- * sys/dshowsrcwrapper/Makefile.am:
- * sys/dvb/Makefile.am:
- * sys/dxr3/Makefile.am:
- * sys/fbdev/Makefile.am:
- * sys/oss4/Makefile.am:
- * sys/qcam/Makefile.am:
- * sys/qtwrapper/Makefile.am:
- * sys/vcd/Makefile.am:
- * sys/wininet/Makefile.am:
- * win32/common/config.h:
- Don't install static libs for plugins. Fixes #550851 for -bad.
-
-2008-09-02 09:56:44 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- [MOVED FROM BAD] Enable/fix up translations for these plugins.
- 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.
-
-2008-08-07 14:34:03 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- [MOVED FROM BAD] ext/twolame/gsttwolame.*: Allow raw float samples as input for encoding.
- 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.
-
-2008-08-02 17:39:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- [MOVED FROM BAD] Add TwoLAME MP2 encoding element, based on the LAME element.
- Original commit message from CVS:
- * configure.ac:
- * ext/Makefile.am:
- * ext/twolame/Makefile.am:
- * ext/twolame/gsttwolame.c: (gst_two_lame_mode_get_type),
- (gst_two_lame_padding_get_type), (gst_two_lame_emphasis_get_type),
- (gst_two_lame_release_memory), (gst_two_lame_finalize),
- (gst_two_lame_base_init), (gst_two_lame_class_init),
- (gst_two_lame_src_setcaps), (gst_two_lame_sink_setcaps),
- (gst_two_lame_init), (gst_two_lame_set_property),
- (gst_two_lame_get_property), (gst_two_lame_sink_event),
- (gst_two_lame_chain), (gst_two_lame_setup),
- (gst_two_lame_change_state), (gst_two_lame_get_default_settings),
- (plugin_init):
- * ext/twolame/gsttwolame.h:
- Add TwoLAME MP2 encoding element, based on the LAME element.
-
-2009-03-09 23:13:20 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 7032163 to f8b3d91
-
-2009-03-08 12:05:57 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From ffa738d to 7032163
-
-2009-03-08 11:21:32 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 3f13e4e to ffa738d
-
-2009-03-07 11:47:06 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 3c7456b to 3f13e4e
-
-2009-03-07 10:47:13 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * common:
- Automatic update of common submodule
- From 57c83f2 to 3c7456b
-
-2009-03-06 12:30:36 -0800 Michael Smith <msmith@songbirdnest.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: be more conservative when changing layer/rate/etc.
- Don't allow a change in sample rate/channels/layer/version unless we can
- see another frame at the correct offset. Prevents accidently flipping
- due to simple single-bit corruption.
-
-2009-03-04 16:52:59 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * gst/realmedia/realhash.c:
- rmdemux: Fix strict-aliasing warnings.
- Use existing GST_READ_UINT32 and GST_WRITE_UINT32 macros instead of
- hand-rolled ones.
-
-2009-03-04 16:15:00 +0200 René Stadler <mail@renestadler.de>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: Remove empty lines added by buggy indent.
-
-2009-02-27 13:41:58 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mpegaudioparse: Provide SEEKING query handling.
- Since SEEK event handling might perform some conversion
- from TIME to BYTES, do not let upstream fool application
- into (TIME) seeking not being possible.
-
-2009-02-25 13:34:05 -0800 Michael Smith <msmith@songbirdnest.com>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- mp3parse: fix accurate seeks to near 0
- Integer underflow made accurate seeks to near zero fail and seek to
- completely the wrong place. Fix by clamping to zero, since we can't seek
- to negative times anyway.
-
-2009-02-25 20:52:08 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- * configure.ac:
- build: Update shave init statement for changes in common. Bump common.
-
-2009-02-25 18:19:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rtspreal.c:
- rtspreal: ignore data streams. Fixes #527112
- Ignore data streams when parsing the SDP as they don't contain anything we need
- to put in the realmedia header.
-
-2009-02-25 11:32:37 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 9cf8c9b to a6ce5c6
-
-2009-02-24 15:25:16 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * ext/mad/gstid3tag.c:
- Forward unknown events
- Forward unknown events upstream instead of dropping them. Also return the result
- of the seek event instead of a fixed value.
-
-2009-02-23 10:50:50 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/asfdemux/gstrtpasfdepay.c:
- rtpasfdepay: Fix the build by adding the needed include for atoi.
-
-2009-02-22 19:19:12 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * configure.ac:
- * docs/plugins/Makefile.am:
- Use shave for the build output
-
-2009-02-22 16:00:02 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Automatic update of common submodule
- From 5d7c9cc to 9cf8c9b
-
-2009-02-22 14:22:30 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/asfdemux/gstasf.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rdtdepay.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/synaesthesia/synaescope.c:
- Fix indentation.
-
-2009-02-22 14:21:22 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * gst/realmedia/pnmsrc.c:
- pnmsrc: Error out gracefully if location is NULL. Run gst-indent
-
-2009-02-21 11:13:55 -0800 David Schleef <ds@schleef.org>
-
- * common:
- Automatic update of common submodule
- From 80c627d to 5d7c9cc
-
-2009-02-20 15:53:34 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/Makefile.am:
- * gst/realmedia/pnmsrc.c:
- * gst/realmedia/pnmsrc.h:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rademux.h:
- * gst/realmedia/realmedia.c:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- Add pnm:// uri source
- Add a new utri handler for pnm:// that for now just redirects to the same uri
- with the rtsp:// protocol, which usually works nowadays.
- Separate the registration of the various plugins into a separate source file.
-
-2009-02-20 13:48:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/gstasf.c:
- * gst/asfdemux/gstrtpasfdepay.c:
- * gst/asfdemux/gstrtpasfdepay.h:
- Add ASF depayloader
- Add ASF depayloader based on latest public MicroSoft docs (MS-RTSP).
- Fixes #335067.
-
-2009-02-19 19:10:53 +0000 Zaheer Merali <zaheerabbas@merali.org>
-
- * ext/mad/gstmad.c:
- mad: remove log line added in error
-
-2009-02-19 19:08:10 +0000 Zaheer Merali <zaheerabbas@merali.org>
-
- * ext/mad/gstmad.c:
- mad: just flush data when seeing BADDATAPTR instead of going into error state
-
-2009-02-18 12:55:16 +0100 Roland Moser <rmoser@gmx.at>
-
- * gst/realmedia/rmdemux.c:
- Fix parsing of the flags in rmdemux
- Fix parsing of the flags in version 1 realmedia streams.
- Fixes #571358.
-
-2009-02-09 12:03:15 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * common:
- Bump revision to use for common submodule.
-
-2009-01-30 22:27:05 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- Add releaseinfo with online url.
-
-2009-01-30 17:34:27 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * common:
- Bump common
-
-2009-01-30 14:35:40 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- Remove redundant push_mode struct member
-
-2009-01-30 09:04:46 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * autogen.sh:
- Fix previous commit, wasn't actually setting up a symbolic link
-
-2009-01-30 08:56:33 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * autogen.sh:
- * common:
- Use a symbolic link for the pre-commit client-side hook
-
-2009-01-30 08:56:24 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * .gitignore:
- Ignore some more files
-
-2009-01-26 22:40:10 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/synaescope.c:
- * gst/synaesthesia/synaescope.h:
- Precalculate some size dependent variables. Demystify the height scaling a bit.
- Adds more comments to the code about the height scaling. RIght now only certain heights are screen filling.
-
-2009-01-26 21:26:46 +0200 Stefan Kost <ensonic@users.sf.net>
-
- Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
-
-2009-01-26 20:12:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/rdtdepay.c:
- Set flags on the realmedia chunks
- Set the keyframe flags from the RDT packet to the realmedia chunk so that the
- descrambler can be reset on keyframes. Fixes #556714.
-
-2009-01-26 20:10:36 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
-
- * gst/realmedia/gstrdtbuffer.c:
- * gst/realmedia/gstrdtbuffer.h:
- Add method to get RDT flags
- Add a method to get the RDT flags. We need these flags to mark keyframes to
- reset the descrambing queue. See #556714.
-
-2009-01-26 10:00:57 +0100 Hans de Goede <jwrdegoede@fedoraproject.org>
-
- * gst/asfdemux/asfpacket.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- Add seeking support to asfdemux in push mode
- Fixes bug #568836.
-
-2009-01-26 09:57:26 +0100 Hans de Goede <jwrdegoede@fedoraproject.org>
-
- * gst/asfdemux/asfpacket.c:
- Drop packets with an invalid replicated data length
- Drop packets with an invalid replicated data length
- instead of continuing with an invalid timestamp
- and uninitialized payload metadata.
- All other code assumes that the timestamps are valid.
-
-2009-01-25 22:31:52 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/synaescope.h:
- Change comment to refer to right variable.
-
-2009-01-24 23:27:08 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/synaesthesia/gstsynaesthesia.h:
- * gst/synaesthesia/synaescope.c:
- * gst/synaesthesia/synaescope.h:
- Bring synaesthesia to next century.
- Do proper size negotiation. Change engine API to allow resizes. Small cleanups elsewhere.
-
-2009-01-23 17:51:00 -0800 David Schleef <ds@schleef.org>
-
- * gst/asfdemux/gstasfdemux.c:
- Fix leak of converted string
-
-2009-01-23 23:44:01 +0000 Jan Schmidt <thaytan@noraisin.net>
-
- * .gitignore:
- * po/.gitignore:
- Add more to the gitignores
-
-2009-01-23 23:59:38 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * gst/synaesthesia/gstsynaesthesia.c:
- Make synaesthesia build again.
- _init() has no params.
-
-2009-01-22 18:15:36 +0200 Stefan Kost <ensonic@users.sf.net>
-
- * common:
- Update common snapshot.
-
-2009-01-22 13:50:09 +0100 Sebastian Dröge <slomo@circular-chaos.org>
-
- * common:
- Fix pre-commit hook
-
-2009-01-22 06:14:31 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * autogen.sh:
- * common:
- Install and use pre-commit indentation hook from common
-
-2009-01-21 04:32:33 +0100 Edward Hervey <bilboed@bilboed.com>
-
- * autogen.sh:
- autogen.sh : Use git submodule
-
-2009-01-08 08:19:25 +0000 Yves Lefebvre <ivanohe@abacom.com>
-
- gst/mpegstream/: Fix some caps leaks. Fixes bug #564885.
- Original commit message from CVS:
- Patch by: Yves Lefebvre <ivanohe at abacom dot com>
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream),
- (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream),
- (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
- Fix some caps leaks. Fixes bug #564885.
-
-2009-01-02 00:43:53 +0000 Alessandro Decina <alessandro.d@gmail.com>
-
- ext/cdio/gstcdio.c: Remove unused format argument.
- Original commit message from CVS:
- * ext/cdio/gstcdio.c:
- Remove unused format argument.
-
-2008-12-13 20:41:40 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- win32/common/: Hardcode cpu for win32 build, just like we do in the other modules, to remove VCS conflicts and incons...
- Original commit message from CVS:
- * win32/common/.cvsignore:
- * win32/common/config.h:
- * win32/common/config.h.in:
- Hardcode cpu for win32 build, just like we do in the other modules,
- to remove VCS conflicts and inconsistent defines between modules,
- and update version defines to CVS.
-
-2008-12-13 16:29:38 +0000 Edward Hervey <bilboed@bilboed.com>
-
- m4/Makefile.am: Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
- Original commit message from CVS:
- * m4/Makefile.am:
- Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
-
-2008-12-13 13:01:49 +0000 Edward Hervey <bilboed@bilboed.com>
-
- m4/Makefile.am: inttypes.m4 hasn't been available since gettext-0.15, and since we now require gettext >= 0.17 ... we...
- Original commit message from CVS:
- * m4/Makefile.am:
- inttypes.m4 hasn't been available since gettext-0.15, and since we now
- require gettext >= 0.17 ... we can remove it from the list of files to
- dist.
-
-2008-12-10 15:42:21 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Do an initial class_ref on an internal enum type from within the class_init f...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (channel_mode_class),
- (GST_TYPE_MP3_CHANNEL_MODE), (mp3_type_frame_length_from_header),
- (gst_mp3parse_emit_frame), (mp3parse_get_query_types):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Do an initial class_ref on an internal enum type from within the
- class_init function so that there aren't any issues when multiple
- mp3parse elements are started in separate threads at the same
- time. (Why we use an enum type here if the tag is registered as
- a string type, I don't know). Also remove custom UNUSED macro
- and use GLib's instead.
-
-2008-12-04 20:11:33 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change.
- Original commit message from CVS:
- * configure.ac:
- Apparently AC_CONFIG_MACRO_DIR breaks when using more
- than one macro directory, reverting last change.
-
-2008-12-04 19:48:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros.
- Original commit message from CVS:
- * configure.ac:
- Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to
- our M4 macros.
-
-2008-12-01 14:39:34 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mpeg2dec/gstmpeg2dec.c: Last change introduced a regression that made mpeg2dec handle some 4:2:2 videos as 4:4:4....
- 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.
-
-2008-11-29 13:33:37 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Require gettext 0.17 because older versions don't mix with libtool 2.2. At build time an older gettext version will s...
- Original commit message from CVS:
- Patch by: Cygwin Ports maintainer
- <yselkowitz at users dot sourceforge dot net>
- * autogen.sh:
- * configure.ac:
- Require gettext 0.17 because older versions don't mix with libtool
- 2.2. At build time an older gettext version will still work.
- Fixes bug #556091.
-
-2008-11-25 03:44:06 +0000 David Schleef <ds@schleef.org>
-
- ext/mpeg2dec/gstmpeg2dec.*: Add support for 4:4:4 video. Fixes #562086
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- Add support for 4:4:4 video. Fixes #562086
-
-2008-11-24 09:51:39 +0000 Simon Holm Thøgersen <odie@cs.aau.dk>
-
- ext/mpeg2dec/gstmpeg2dec.c: Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec >= 0.5.0. Fixes bug #562065.
- 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.
-
-2008-11-20 21:31:19 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Remove duplicate and broken code for the streaming case and simply reuse the much better ...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_chain):
- Remove duplicate and broken code for the streaming case and simply reuse
- the much better working pull based code. Fixes #560348.
-
-2008-11-20 20:42:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Back to development -> 0.10.10.1
- Original commit message from CVS:
- * configure.ac:
- Back to development -> 0.10.10.1
-
-=== release 0.10.10 ===
-
-2008-11-19 14:30:44 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * gst-plugins-ugly.doap:
- * po/LINGUAS:
- Release 0.10.10 - "Under the House"
- Original commit message from CVS:
- Release 0.10.10 - "Under the House"
-
-2008-11-19 13:59:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * po/bg.po:
- * po/ca.po:
- * po/da.po:
- * po/id.po:
- * po/it.po:
- * po/mt.po:
- * po/vi.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2008-11-17 09:53:39 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/sidplay/Makefile.am: Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could contain CFLAGS that do...
- 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.
-
-2008-11-12 23:19:55 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: 0.10.9.3 pre-release
- Original commit message from CVS:
- * configure.ac:
- 0.10.9.3 pre-release
-
-2008-11-11 17:14:46 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Only copy sane aspect ratio values on the caps. Fixes #559682.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
- Only copy sane aspect ratio values on the caps. Fixes #559682.
-
-2008-11-06 13:29:37 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- * ChangeLog:
- Add bug number to the mp3parse mpeg 2.5 fix
- Original commit message from CVS:
- Add bug number to the mp3parse mpeg 2.5 fix
-
-2008-11-05 11:03:07 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/amrnbdec.*: Add a property to select the amr variant. Fixes #424070.
- 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.
-
-2008-11-03 11:31:49 +0000 Tal Shalif <tshalif@nargila.org>
-
- gst/mpegstream/: Fix memmory corruption due to not storing the new updated pointer after a g_renew(). Fixes #558896.
- Original commit message from CVS:
- Patch by: Tal Shalif <tshalif at nargila dot org>
- * gst/mpegstream/gstdvddemux.c:
- (gst_dvd_demux_get_subpicture_stream):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream):
- Fix memmory corruption due to not storing the new updated pointer
- after a g_renew(). Fixes #558896.
-
-2008-10-30 14:50:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- tests/check/Makefile.am: Blacklist cdiocddasrc from state-change tests. Fixes #558277.
- Original commit message from CVS:
- * tests/check/Makefile.am:
- Blacklist cdiocddasrc from state-change tests. Fixes #558277.
-
-2008-10-24 20:44:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: oops, forgot to bump the version back to devel after the last release 0.10.9.1
- Original commit message from CVS:
- * configure.ac:
- oops, forgot to bump the version back to devel
- after the last release 0.10.9.1
-
-2008-10-24 12:47:05 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Add suport for mpeg4 and aac audio. See #556714.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_descramble_mp4a_audio),
- (gst_rmdemux_handle_scrambled_packet):
- Add suport for mpeg4 and aac audio. See #556714.
-
-2008-10-14 19:28:05 +0000 Michael Smith <msmith@xiph.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Calculate samples per frame correctly for "MPEG 2.5" layer 3.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- Calculate samples per frame correctly for "MPEG 2.5" layer 3.
- Fixes skipping on these files.
-
-2008-10-14 12:51:41 +0000 Robin Stocker <robin@nibor.org>
-
- ext/mpeg2dec/gstmpeg2dec.*: Prefer the container's PAR over the stream's PAR if it's given in the srcpad caps. Fixes ...
- 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.
-
-2008-10-13 18:10:25 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Don't install static libs for plugins. Fixes #550851 for ugly.
- Original commit message from CVS:
- * ext/a52dec/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/dvdnav/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mad/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * ext/sidplay/Makefile.am:
- * gst/ac3parse/Makefile.am:
- * gst/asfdemux/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/iec958/Makefile.am:
- * gst/mpegaudioparse/Makefile.am:
- * gst/mpegstream/Makefile.am:
- * gst/realmedia/Makefile.am:
- * gst/synaesthesia/Makefile.am:
- Don't install static libs for plugins. Fixes #550851 for ugly.
-
-2008-10-13 09:04:15 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid frames. Partia...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event):
- Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid
- frames. Partially fixes bug #552237.
-
-2008-10-09 09:23:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/amrnb/amrnbparse.c: use #defines for HEADER. Unref the object in _sink_activate_pull().
- Original commit message from CVS:
- * ext/amrnb/amrnbparse.c:
- use #defines for HEADER. Unref the object in _sink_activate_pull().
-
-2008-10-08 13:59:57 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mad/gstmad.*: track discont on incomming buffers and set discont on outgoing buffers.
- 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.
-
-2008-09-28 17:33:43 +0000 Sameer Naik <sameer.subscriptions@damagehead.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Fix compilation with --disable-index. Fixes bug #554150.
- Original commit message from CVS:
- Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init),
- (handle_slice), (gst_mpeg2dec_sink_event),
- (gst_mpeg2dec_src_event):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Fix compilation with --disable-index. Fixes bug #554150.
-
-2008-09-28 17:31:37 +0000 Sameer Naik <sameer.subscriptions@damagehead.com>
-
- ext/mad/gstmad.*: Fix compilation with --disable-index. Fixes bug #554142.
- Original commit message from CVS:
- Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
- * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_dispose),
- (gst_mad_src_event), (gst_mad_chain):
- * ext/mad/gstmad.h:
- Fix compilation with --disable-index. Fixes bug #554142.
-
-2008-09-27 00:20:48 +0000 Thijs Vermeir <thijsvermeir@gmail.com>
-
- ext/a52dec/gsta52dec.*: Fix channel re-negotiation on a change of the incoming stream.
- 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
-
-2008-09-26 14:39:42 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/amrnbenc.*: Pass the discont flag from the input buffer on to the output buffer in the AMR encoder.
- 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.
-
-2008-09-26 10:04:35 +0000 Benoit Fouet <benoit.fouet@purplelabs.com>
-
- ext/amrnb/amrnbparse.*: Add flush seek handler. Fixes #536274.
- Original commit message from CVS:
- Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_handle_pull_seek),
- (gst_amrnbparse_handle_push_seek), (gst_amrnbparse_src_event),
- (gst_amrnbparse_sink_activate_push),
- (gst_amrnbparse_sink_activate_pull):
- * ext/amrnb/amrnbparse.h:
- Add flush seek handler. Fixes #536274.
-
-2008-09-26 09:57:02 +0000 Benoit Fouet <benoit.fouet@purplelabs.com>
-
- ext/amrnb/amrnbparse.*: Fix the duration query. Fixes #536226.
- 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.
-
-2008-09-02 09:43:10 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- po/LINGUAS: Add 'ca' to LINGUAS.
- Original commit message from CVS:
- * po/LINGUAS:
- Add 'ca' to LINGUAS.
-
-2008-08-28 09:57:30 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/gstasfdemux.c: Fix aggregated GST_FLOW_RETURN check for when to send an error message on the bus.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
- Fix aggregated GST_FLOW_RETURN check for when to send an error message
- on the bus.
- Re-fixes #546859
-
-2008-08-27 15:55:05 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtdepay.*: Parse other values from the incomming caps.
- Original commit message from CVS:
- * gst/realmedia/rdtdepay.c: (gst_rdt_depay_init),
- (gst_rdt_depay_setcaps), (gst_rdt_depay_sink_event),
- (create_segment_event), (gst_rdt_depay_push),
- (gst_rdt_depay_handle_data), (gst_rdt_depay_change_state):
- * gst/realmedia/rdtdepay.h:
- Parse other values from the incomming caps.
- Add event handler to handle flushing and segments.
- Create segment events.
- * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_insert):
- Do skew correction based on RDT timestamps.
- * gst/realmedia/rdtmanager.c: (activate_session),
- (gst_rdt_manager_parse_caps), (gst_rdt_manager_setcaps),
- (create_recv_rtp):
- Parse caps to get the clockrate needed for the jitterbuffer.
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
- Apply timestamp fixup after correcting for initial timestamp and
- internal base timestamp corrections.
-
-2008-08-27 11:28:50 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtdepay.*: Check seqnum gaps and drop duplicate packets or mark outgoing buffers with a DISCONT flag w...
- Original commit message from CVS:
- * gst/realmedia/rdtdepay.c: (gst_rdt_depay_handle_data),
- (gst_rdt_depay_change_state):
- * gst/realmedia/rdtdepay.h:
- Check seqnum gaps and drop duplicate packets or mark outgoing buffers
- with a DISCONT flag when needed.
- * gst/realmedia/rdtmanager.c: (gst_rdt_manager_query_src):
- Report the configure latency instead of a hardcoded value.
-
-2008-08-27 10:02:06 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtmanager.c: Include the new rdt jitterbuffer in the session manager.
- Original commit message from CVS:
- * gst/realmedia/rdtmanager.c: (create_session), (activate_session),
- (free_session), (gst_rdt_manager_query_src),
- (gst_rdt_manager_src_activate_push),
- (gst_rdt_manager_handle_data_packet), (gst_rdt_manager_chain_rdt),
- (gst_rdt_manager_loop), (create_recv_rtp):
- Include the new rdt jitterbuffer in the session manager.
-
-2008-08-27 09:58:00 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtdepay.*: Use new RDT parsing helper functions.
- Original commit message from CVS:
- * gst/realmedia/rdtdepay.c: (gst_rdt_depay_class_init),
- (gst_rdt_depay_finalize), (gst_rdt_depay_setcaps),
- (gst_rdt_depay_push), (gst_rdt_depay_handle_data),
- (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
- * gst/realmedia/rdtdepay.h:
- Use new RDT parsing helper functions.
- Copy discont flags correctly.
- Push the header from the chain function instead of the setcaps function.
- Copy incomming timestamp to the output buffers instead of doing magic
- with the RDT timestamps.
-
-2008-08-27 09:52:49 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Add first support for parsing RDT messages.
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/gstrdtbuffer.c: (gst_rdt_buffer_validate_data),
- (gst_rdt_buffer_validate), (gst_rdt_buffer_get_packet_count),
- (read_packet_header), (gst_rdt_buffer_get_first_packet),
- (gst_rdt_packet_move_to_next), (gst_rdt_packet_get_type),
- (gst_rdt_packet_get_length), (gst_rdt_packet_to_buffer),
- (gst_rdt_buffer_compare_seqnum), (gst_rdt_packet_data_get_seq),
- (gst_rdt_packet_data_peek_data),
- (gst_rdt_packet_data_get_stream_id),
- (gst_rdt_packet_data_get_timestamp):
- * gst/realmedia/gstrdtbuffer.h:
- Add first support for parsing RDT messages.
- * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_class_init),
- (rdt_jitter_buffer_init), (rdt_jitter_buffer_finalize),
- (rdt_jitter_buffer_new), (rdt_jitter_buffer_reset_skew),
- (calculate_skew), (rdt_jitter_buffer_insert),
- (rdt_jitter_buffer_pop), (rdt_jitter_buffer_peek),
- (rdt_jitter_buffer_flush), (rdt_jitter_buffer_num_packets),
- (rdt_jitter_buffer_get_ts_diff):
- * gst/realmedia/rdtjitterbuffer.h:
- Add first version of an RDT jitterbuffer.
-
-2008-08-27 09:47:17 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.*: Keep track of the first timestamp of the stream and add this to the outgoing buffer timestam...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
- (find_seek_offset_time), (gst_rmdemux_reset), (gst_rmdemux_chain),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_descramble_cook_audio),
- (gst_rmdemux_descramble_dnet_audio),
- (gst_rmdemux_parse_video_packet), (gst_rmdemux_parse_audio_packet):
- * gst/realmedia/rmdemux.h:
- Keep track of the first timestamp of the stream and add this to the
- outgoing buffer timestamps so that we can handle live streams.
- Set discont flag on the first buffers and after a seek.
-
-=== release 0.10.9 ===
-
-2008-08-26 23:06:04 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * gst-plugins-ugly.doap:
- Release 0.10.9
- Original commit message from CVS:
- Release 0.10.9
-
-2008-08-26 22:56:30 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/id.po:
- * po/it.po:
- * po/lt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2008-08-26 15:35:43 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/a52dec/gsta52dec.c: Set up a default time segment for output when receiving an incoming byte segment (as for raw ...
- 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
-
-2008-08-12 09:16:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- 0.10.8.2 pre-release.
- Original commit message from CVS:
- * configure.ac:
- * 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-asf.xml:
- * docs/plugins/inspect/plugin-cdio.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:
- * ext/Makefile.am:
- 0.10.8.2 pre-release.
- * po/LINGUAS:
- * po/POTFILES.in:
- * po/id.po:
- Add new translation.
-
-2008-08-11 18:44:35 +0000 Michael Smith <msmith@xiph.org>
-
- gst/asfdemux/gstasfdemux.c: Properly aggregate flow returns for both push and pull mode, so we shut down if all pads ...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- Properly aggregate flow returns for both push and pull mode, so we shut
- down if all pads are unlinked.
- Fixes #546859.
-
-2008-08-07 16:14:42 +0000 Frederic Crozat <fcrozat@mandriva.org>
-
- Make sure gettext returns translations in UTF-8 encoding rather than in the current locale encoding (#546822).
- 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).
-
-2008-07-31 14:35:40 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time() if we'...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame),
- (mp3parse_total_time), (mp3parse_bytepos_to_time):
- Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time()
- if we're called from there already. Otherwise we end up in a endless
- recursion and crash with a stack overflow.
- This can happen when a Xing or VBRI header with TOC exists but it
- doesn't contain the total time. Fixes bug #545370.
-
-2008-07-31 14:24:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.c: Use the default for the strict-iso property too.
- 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.
-
-2008-07-29 16:57:16 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.*: Get the defaults settings of LAME in the plugin initialization function and return FALSE here if ...
- 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.
-
-2008-07-27 15:56:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.c: Use LAME's default for the min/max/mean VBR bitrate. Setting our own defaults will restrict the b...
- 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.
-
-2008-07-27 11:01:12 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Put the MPEG audio version into the caps as "mpegaudioversion".
- 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".
-
-2008-07-22 18:25:08 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.*: Fix build with lame >= 3.97. The padding type and cwlimit settings are deprecated now and the fun...
- 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.
-
-2008-07-13 10:13:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mpeg2dec/gstmpeg2dec.c: Don't allow width/height outside the spec (i.e. smaller than 16 and higher than 4096). Su...
- 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.
-
-2008-07-11 12:30:22 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/sidplay/Makefile.am: Fix the build.
- Original commit message from CVS:
- * ext/sidplay/Makefile.am:
- Fix the build.
-
-2008-07-08 14:01:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include flags that are invalid for C++.
- Original commit message from CVS:
- * configure.ac:
- Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include
- flags that are invalid for C++.
-
-2008-07-05 18:57:30 +0000 Tal Shalif <tshalif@nargila.org>
-
- ext/dvdnav/dvdnavsrc.c: Prevent double free. Fixes bug #541697.
- Original commit message from CVS:
- Patch by: Tal Shalif <tshalif at nargila dot org>
- * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_stop):
- Prevent double free. Fixes bug #541697.
-
-2008-07-05 15:56:56 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- gst/mpegstream/: Resend tags event after a FLUSH (seek) to support prerolling a partial pipeline.
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
- (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_get_subpicture_stream),
- (gst_dvd_demux_parse_packhead), (gst_dvd_demux_reset):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
- (gst_mpeg_demux_process_event), (gst_mpeg_demux_init_stream),
- (gst_mpeg_demux_parse_packhead), (gst_mpeg_demux_reset):
- * gst/mpegstream/gstmpegdemux.h:
- Resend tags event after a FLUSH (seek) to support prerolling
- a partial pipeline.
-
-2008-07-03 13:12:26 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Use correct error code for encrypted streams.
- Original commit message from CVS:
- * configure.ac:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
- Use correct error code for encrypted streams.
-
-2008-07-02 07:49:19 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- gst/mpegstream/gstmpegdemux.c: Bridge gaps in stream by NEWSEGMENT sending. Fixes #540194.
- Original commit message from CVS:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
- (gst_mpeg_demux_sync_stream_to_time):
- Bridge gaps in stream by NEWSEGMENT sending. Fixes #540194.
-
-2008-06-27 12:58:35 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
- ext/dvdread/dvdreadsrc.c: Allow and implement non-flushing and/or segment seek (mainly in TIME and chapter format).
- 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.
-
-2008-06-26 10:40:03 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Fix build on macosx.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
- Fix build on macosx.
-
-2008-06-13 06:57:21 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Add missing elements to docs. Restore alphabetical order in section file. Document mad (it was included in docs alrea...
- 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.
-
-2008-06-13 05:52:17 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Do not use short_description in section docs for elements. We extract them from element details and there will be war...
- 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.
-
-2008-06-09 20:02:05 +0000 Benjamin Kampmann <benjamin@fluendo.com>
-
- ext/cdio/: Also extract album title and album genre from CD-TEXT if available (#537021).
- 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).
-
-2008-06-09 07:51:00 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Don't mark MPEG headers with emphasis == 0x2 as invalid. This emphasis value ...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
- Don't mark MPEG headers with emphasis == 0x2 as invalid. This
- emphasis value is reserved but unfortunately files with that
- value exist and the information is not important for the decoder
- anyway. Fixes bug #537235.
-
-2008-06-07 18:48:54 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Require libcdio >= 0.76.
- Original commit message from CVS:
- * configure.ac:
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
- Require libcdio >= 0.76.
-
-2008-06-02 15:44:57 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/a52dec/gsta52dec.c: Drain queued buffers before forwarding the segment event.
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
- Drain queued buffers before forwarding the segment event.
-
-2008-06-02 11:59:07 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/a52dec/gsta52dec.*: Add segment handling, buffer clipping and basic reverse playback.
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (clear_queued), (flush_queued),
- (gst_a52dec_drain), (gst_a52dec_push), (gst_a52dec_sink_event),
- (gst_a52dec_chain), (gst_a52dec_change_state):
- * ext/a52dec/gsta52dec.h:
- Add segment handling, buffer clipping and basic reverse playback.
-
-2008-05-28 11:43:01 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- 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:
- * 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.
-
-2008-05-26 09:06:54 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/a52dec/gsta52dec.*: Mark discont on outgoing buffers after receiving a DISCONT buffer or when we have a decoding ...
- 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.
-
-2008-05-26 07:41:24 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstxingmux.c: Fix alignment issues that caused SIGBUS on some architectures.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
- Fix alignment issues that caused SIGBUS on some architectures.
-
-2008-05-25 21:30:40 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/ac3parse/gstac3parse.c: Fix alignment issue which isn't really an issue at all because the plugin hasn't been por...
- Original commit message from CVS:
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
- Fix alignment issue which isn't really an issue at all because
- the plugin hasn't been ported to 0.10 yet.
-
-2008-05-25 21:03:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Back to devel -> 0.10.8.1
- Original commit message from CVS:
- * configure.ac:
- Back to devel -> 0.10.8.1
-
-=== release 0.10.8 ===
-
-2008-05-21 23:03:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/inspect/plugin-a52dec.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:
- * gst-plugins-ugly.doap:
- * po/LINGUAS:
- Release 0.10.8
- Original commit message from CVS:
- Release 0.10.8
-
-2008-05-21 22:43:42 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * common:
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/fr.po:
- * po/hu.po:
- * po/it.po:
- * po/lt.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/ru.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2008-05-19 21:38:16 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: 0.10.7.4 pre-release
- Original commit message from CVS:
- * configure.ac:
- 0.10.7.4 pre-release
-
-2008-05-19 15:07:07 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/mad/gstmad.c: Fix inconsistent use of rate and channels.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_convert_src), (gst_mad_chain):
- Fix inconsistent use of rate and channels.
- Fixes #533581
-
-2008-05-19 10:23:46 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Flush timestamp correction variables on a flush. Fixes #533832.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_send_event):
- Flush timestamp correction variables on a flush. Fixes #533832.
-
-2008-05-19 10:02:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * common:
- * configure.ac:
- Commit 0.10.7.3 pre-rel marker
- Original commit message from CVS:
- Commit 0.10.7.3 pre-rel marker
-
-2008-05-13 09:33:09 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/realmedia/rmdemux.c: Properly aggregate GstFlowReturn from downstream in order to properly stop, and doing that a...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
- Properly aggregate GstFlowReturn from downstream in order to properly
- stop, and doing that as early as possible.
- Fixes #532807
-
-2008-05-10 15:32:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: 0.10.7.2 pre-release
- Original commit message from CVS:
- * configure.ac:
- 0.10.7.2 pre-release
-
-2008-05-10 00:44:00 +0000 Edward Hervey <bilboed@bilboed.com>
-
- Always let FLUSH_START events flow downstream.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_sink_event):
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event):
- Always let FLUSH_START events flow downstream.
-
-2008-05-07 08:00:24 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Error out if we don't have the required core/base versions.
- Original commit message from CVS:
- * configure.ac:
- Error out if we don't have the required core/base versions.
-
-2008-05-06 17:53:26 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Fix video timestamps by adjusting it with the first timestamp found.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
- (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
- Fix video timestamps by adjusting it with the first timestamp found.
- Don't assume we have a complete fragment when flushing the adapter,
- packets might have been lost or the stream might just be broken.
-
-2008-05-06 10:30:18 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtmanager.c: Set Rank to NONE so that we don't accidentally try to autoplug the rdtmanager.
- Original commit message from CVS:
- * gst/realmedia/rdtmanager.c: (gst_rdt_manager_plugin_init):
- Set Rank to NONE so that we don't accidentally try to autoplug the
- rdtmanager.
-
-2008-05-05 08:43:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Send a new duration message if the average bitrate changed and we don't know ...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- Send a new duration message if the average bitrate changed and
- we don't know the duration from the Xing or VBRI header.
- Fixes bug #321857.
-
-2008-04-30 17:16:47 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rtspreal.*: Move assembly rule parsing to the place where we parse the SDP as it's also there that we c...
- Original commit message from CVS:
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_before_send),
- (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
- * gst/realmedia/rtspreal.h:
- Move assembly rule parsing to the place where we parse the SDP as it's
- also there that we create the MDPR and we need the currently selected
- asmrule in order to select the right MTLI.
- Fixes #529359.
-
-2008-04-29 17:34:19 +0000 Michael Smith <msmith@xiph.org>
-
- gst/realmedia/: Include generated "_stdint.h" instead of <stdint.h> which might not exist on some systems.
- Original commit message from CVS:
- * gst/realmedia/realhash.c:
- * gst/realmedia/rtspreal.c:
- Include generated "_stdint.h" instead of <stdint.h> which might not
- exist on some systems.
-
-2008-04-25 23:10:54 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/sidplay/gstsiddec.cc: Cast NULL sentinels to void * as NULL is defined as an integer constant in most environment...
- 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.
-
-2008-04-22 12:11:30 +0000 Edgard Lima <edgard.lima@indt.org.br>
-
- * ChangeLog:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstrtspwms.c:
- Fix "unused var" compiler error when --disable-gst-debug is used.
- Original commit message from CVS:
- Fix "unused var" compiler error when --disable-gst-debug is used.
-
-2008-04-17 20:58:00 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/amrnb/amrnbparse.c: We should also stop the streaming task when we get a NOT_LINKED flow return, which is not cov...
- 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.
-
-2008-04-17 10:24:32 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/: gst_atomic_int_set ==> g_atomic_int_set
- Original commit message from CVS:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dv/gstdvdemux.c:
- gst_atomic_int_set ==> g_atomic_int_set
-
-2008-04-11 08:09:55 +0000 Julien Moutte <julien@moutte.net>
-
- gst/mpegaudioparse/gstxingmux.c: Fix argument formats.
- Original commit message from CVS:
- 2008-04-11 Julien Moutte <julien@fluendo.com>
- * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header): Fix
- argument formats.
-
-2008-04-06 08:57:33 +0000 Damien Lespiau <damien.lespiau@gmail.com>
-
- configure.ac: Actually build dlls when cross-compiling with mingw32.
- Original commit message from CVS:
- Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
- * configure.ac:
- Actually build dlls when cross-compiling with mingw32.
- Fixes bug #526247.
-
-2008-04-04 19:04:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Depend on GLib 2.12 and use it unconditionally as we do in other modules too already.
- Original commit message from CVS:
- * configure.ac:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mpeg_audio_seek_entry_free):
- * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_free):
- Depend on GLib 2.12 and use it unconditionally as we do in other
- modules too already.
-
-2008-04-03 15:21:50 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/: Use GSlice for allocating the seek table entries if we compile with
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mpeg_audio_seek_entry_new), (mpeg_audio_seek_entry_free),
- (gst_mp3parse_reset), (gst_mp3parse_emit_frame):
- * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_new),
- (gst_xing_seek_entry_free), (gst_xing_mux_finalize), (xing_reset),
- (gst_xing_mux_chain):
- Use GSlice for allocating the seek table entries if we compile with
- GLib 2.10 or newer.
-
-2008-04-01 14:39:24 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Remove some debug code.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_stream_props):
- Remove some debug code.
-
-2008-04-01 14:29:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Guard against division by 0 and fall back to 25/1 framerate.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_stream_props):
- Guard against division by 0 and fall back to 25/1 framerate.
-
-2008-04-01 14:00:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duratio...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_ext_stream_props):
- Instead of adding a fixes 25/1 framerate to the video caps, use the
- average frame duration in the extended properties of the video stream as
- the framerate. Fixes #524346.
-
-2008-03-21 14:15:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Check if the compiler supports do { } while (0) macros. This fixes a warning when compiling with g++ 4....
- Original commit message from CVS:
- * configure.ac:
- Check if the compiler supports do { } while (0) macros. This fixes
- a warning when compiling with g++ 4.3, resulting in a build failure
- because of -Werror.
-
-2008-03-19 11:01:25 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/asmrules.c: make ) also a delimiter for rules.
- Original commit message from CVS:
- * gst/realmedia/asmrules.c: (gst_asm_scan_string), (main):
- make ) also a delimiter for rules.
- Skip \\ when scanning strings.
- Add new testcase for these problems.
-
-2008-03-12 16:09:48 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Don't take the stream lock when caching events. This is not necessary and res...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event):
- Don't take the stream lock when caching events. This is not necessary
- and results in a deadlock when seeking with rhythmbox (but not with
- totem or banshee for some reason).
-
-2008-03-10 15:17:24 +0000 Pizpot Gargravarr <pgargravarr@siriuscybernetics.org>
-
- gst/realmedia/rtspreal.c: Add the version field when creating the CONT chunk resulting in the Author, Comment and Cop...
- Original commit message from CVS:
- Patch by: Pizpot Gargravarr <pgargravarr at siriuscybernetics dot org>
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp):
- Add the version field when creating the CONT chunk resulting in
- the Author, Comment and Copyright tags not being parsed correctly.
- Fixes #521459.
-
-2008-03-10 15:13:10 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Remove trailing newlines from debug statements.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (gst_mp3parse_chain):
- Remove trailing newlines from debug statements.
-
-2008-03-04 22:54:21 +0000 Simone Gotti <simone.gotti@email.it>
-
- ext/dvdnav/dvdnavsrc.*: Apply patch that adds some seeking support to dvdnav, and fixes it in various other ways. Thi...
- Original commit message from CVS:
- * ext/dvdnav/dvdnavsrc.c:
- * ext/dvdnav/dvdnavsrc.h:
- Apply patch that adds some seeking support to dvdnav, and fixes it
- in various other ways. This doesn't make dvdnavsrc fully functional,
- but moves it forward.
- Fixes: #476149
- Patch By: Simone Gotti <simone.gotti@email.it>
- * ext/dvdnav/gst-dvd:
- Update the simple dvdnavsrc gst-launch example to work for 0.10
-
-2008-03-03 12:50:56 +0000 Peter Kjellerstedt <pkj@axis.com>
-
- configure.ac: Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which plug-ins are included/excluded. (#4...
- Original commit message from CVS:
- * configure.ac:
- Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which
- plug-ins are included/excluded. (#498222)
-
-2008-02-27 15:23:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead of dropping and leaking them.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_sink_event):
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event):
- Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead
- of dropping and leaking them.
-
-2008-02-27 13:18:57 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Cache all events except EOS if we still have to send a NEWSEGMENT event. This will let TAG events be forwarded until ...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_dispose), (gst_mad_sink_event),
- (gst_mad_chain):
- * ext/mad/gstmad.h:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose),
- (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Cache all events except EOS if we still have to send a NEWSEGMENT
- event. This will let TAG events be forwarded until after decodebin
- to an encoder for example as decodebin only links the pads
- after NEWSEGMENT. Fixes bug #518933.
-
-2008-02-27 12:48:41 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstxingmux.c: Write Xing header at the correct position in the MP3 frame for stereo files. Fixes b...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstxingmux.c: (get_xing_offset):
- Write Xing header at the correct position in the MP3 frame for
- stereo files. Fixes bug #518676.
-
-2008-02-23 12:35:53 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them when building C++ code (#516509).
- Original commit message from CVS:
- * configure.ac:
- * ext/sidplay/Makefile.am:
- Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them
- when building C++ code (#516509).
-
-2008-02-22 14:55:57 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
- Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
- Workshop 12 compiler, but probably also crashes (#517985).
-
-2008-02-22 07:11:17 +0000 Thiago Sousa Santos <thiagoss@lcc.ufcg.edu.br>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Post channel mode and CRC as tags. Fixes bug #504493.
- Original commit message from CVS:
- Patch by: Thiago Sousa Santos <thiagoss at lcc dot ufcg dot edu dot br>
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3_channel_mode_get_type),
- (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
- (gst_mp3parse_reset), (gst_mp3parse_emit_frame),
- (gst_mp3parse_chain):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Post channel mode and CRC as tags. Fixes bug #504493.
-
-2008-02-22 06:27:11 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/dvdnav/dvdnavsrc.c: Correctly chain up to the parent's finalize function.
- Original commit message from CVS:
- * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_finalize):
- Correctly chain up to the parent's finalize function.
-
-2008-02-22 06:25:28 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Try a bit harder to get valid timestamps, especially if upstream gives us one...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame), (gst_mp3parse_chain):
- Try a bit harder to get valid timestamps, especially if upstream
- gives us one and we are at the first frame or resyncing.
- Return UNEXPECTED if we get a valid timestamp that is outside of
- our configured segment. After all changes done so far this doesn't
- seem to cause any regression, please test.
-
-2008-02-22 06:19:41 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/asfdemux/gstasfdemux.c: If we don't have the position to seek to in our index first try to convert from TIME to B...
- Original commit message from CVS:
- Patch by:
- Hans de Goede <j dot w dot r dot degoede at hhs dot nl>
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event):
- If we don't have the position to seek to in our index first try
- to convert from TIME to BYTES upstream and only if that fails
- too use the old hack to simply seek to an earlier position
- and let the sink drop everything before segment start.
- Partially fixes bug #469930.
-
-2008-02-21 23:54:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Back to development...
- Original commit message from CVS:
- * configure.ac:
- Back to development...
-
-=== release 0.10.7 ===
-
-2008-02-21 00:15:22 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-a52dec.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:
- * gst-plugins-ugly.doap:
- * po/LINGUAS:
- Release 0.10.7 - I Cheated Time
- Original commit message from CVS:
- Release 0.10.7 - I Cheated Time
-
-2008-02-20 23:51:56 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * po/af.po:
- * po/az.po:
- * po/bg.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/es.po:
- * po/fi.po:
- * po/hu.po:
- * po/it.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/pl.po:
- * po/pt_BR.po:
- * po/sk.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- * po/zh_CN.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2008-02-18 20:40:29 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- tests/check/Makefile.am: Exclude dvdreadsrc from the states test too.
- Original commit message from CVS:
- * tests/check/Makefile.am:
- Exclude dvdreadsrc from the states test too.
-
-2008-02-18 10:25:16 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Handler buffers without valid timestamp more correctly: Don't drop them and d...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- Handler buffers without valid timestamp more correctly: Don't drop
- them and don't use the invalid timestamp to calculate the next
- timestamp. Fixes bug #516811.
-
-2008-02-18 05:16:44 +0000 Tal Shalif <tshalif@nargila.org>
-
- ext/dvdread/dvdreadsrc.c: Add some gint64 casts to prevent 32 bit integer overflows.
- Original commit message from CVS:
- Patch by: Tal Shalif <tshalif at nargila dot org>
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_create),
- (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_position_query):
- Add some gint64 casts to prevent 32 bit integer overflows.
- Fixes bug #516989.
-
-2008-02-17 18:49:30 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Revert previous commit to mp3parse, as it breaks playback of AVI files.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- Revert previous commit to mp3parse, as it breaks playback
- of AVI files.
-
-2008-02-14 13:58:42 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Return GST_FLOW_UNEXPECTED if we get data that is after our configured segmen...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- Return GST_FLOW_UNEXPECTED if we get data that is after our
- configured segment. This makes upstream go EOS immediately instead
- of sending us the complete stream. Also improve debugging a bit.
-
-2008-02-13 22:57:54 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/dvdread/dvdreadsrc.c: Fix regression in DVD seeking - when a pack we expect to be a NAV block turns out not to be...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c:
- Fix regression in DVD seeking - when a pack we
- expect to be a NAV block turns out not to be, scan forwards
- for up to 2MB (at most ~1sec) until we find one.
- Fixes: #516278
-
-2008-02-12 21:42:19 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- win32/vs6/libgstmpegaudioparse.dsp: Add xing files to VS project file.
- Original commit message from CVS:
- * win32/vs6/libgstmpegaudioparse.dsp:
- Add xing files to VS project file.
-
-2008-02-11 13:31:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/dvdsub/gstdvdsubparse.c: Stop leaking src pad templates. Fixes bug #515708.
- Original commit message from CVS:
- * gst/dvdsub/gstdvdsubparse.c: (gst_dvd_sub_parse_init):
- Stop leaking src pad templates. Fixes bug #515708.
-
-2008-02-11 13:29:07 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstxingmux.c: Correctly write the size in bytes on big endian systems.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
- Correctly write the size in bytes on big endian systems.
- Fixes bug #515725.
-
-2008-02-11 09:13:33 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.c: Don't leak the allowed caps.
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_setup):
- Don't leak the allowed caps.
- * tests/check/pipelines/lame.c: (GST_START_TEST):
- Stop leaking all buffers. Fixes bug #515575.
-
-2008-02-08 10:17:11 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/plugin.c: Commit new file I forgot to add.
- Original commit message from CVS:
- * gst/mpegaudioparse/plugin.c:
- Commit new file I forgot to add.
-
-2008-02-08 01:09:53 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Make DISABLE_DEPRECATED defined *only* during CVS, not during pre-releases or releases.
- Original commit message from CVS:
- * configure.ac:
- Make DISABLE_DEPRECATED defined *only* during CVS, not during
- pre-releases or releases.
-
-2008-02-08 00:44:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- Mention bug 511497 fixed in previous commit
- Original commit message from CVS:
- Mention bug 511497 fixed in previous commit
-
-2008-02-08 00:36:51 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- Move xingmux from -bad.
- 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/inspect/plugin-mpegaudioparse.xml:
- * gst/mpegaudioparse/Makefile.am:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstxingmux.c:
- * tests/check/Makefile.am:
- * tests/check/elements/.cvsignore:
- Move xingmux from -bad.
-
-2008-02-07 19:25:08 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_guint64_to_gdouble for conversion
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:(mp3parse_time_to_bytepos):
- Use gst_guint64_to_gdouble for conversion
- * win32/vs6/libgstasfdemux.dsp:
- * win32/vs6/libgstdvdsub.dsp:
- * win32/vs6/libgstrealmedia.dsp:
- Update project dependencies and add new source files
-
-2008-02-04 14:27:32 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
-
- ext/mpeg2dec/gstmpeg2dec.c: Reset decoder when handling sequence where libmpeg2 has set frame period to 0, probably d...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c:
- Reset decoder when handling sequence where libmpeg2 has set
- frame period to 0, probably due to a corrupt packet.
- Fixes bug #514297
-
-2008-01-29 19:10:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Don't set new caps on the srcpad everytime the bitrate or MPEG version change...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create),
- (gst_mp3parse_chain):
- Don't set new caps on the srcpad everytime the bitrate or MPEG
- version changes but calculate new spf value when the MPEG version
- changes.
-
-2008-01-23 10:34:40 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Add documentation for the xingheader plugin.
- 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:
- * gst/xingheader/gstxingmux.c:
- * gst/xingheader/gstxingmux.h:
- Add documentation for the xingheader plugin.
- * tests/check/elements/xingmux.c: (GST_START_TEST):
- Set element state to PLAYING before doing something else.
-
-2008-01-23 10:11:44 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- tests/check/: Add simple unit test for the xingmux element.
- Original commit message from CVS:
- * tests/check/Makefile.am:
- * tests/check/elements/.cvsignore:
- * tests/check/elements/xingmux.c: (setup_xingmux),
- (cleanup_xingmux), (GST_START_TEST), (xingmux_suite), (main):
- * tests/check/elements/xingmux_testdata.h:
- Add simple unit test for the xingmux element.
- * gst/xingheader/gstxingmux.c: (generate_xing_header),
- (gst_xing_mux_finalize), (xing_reset):
- Fix a memleak and invalid seek tables with less than 100 MP3 frames.
-
-2008-01-21 13:35:02 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- docs/plugins/: Add the real and rtsp elements and update the lists.
- 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:
- Add the real and rtsp elements and update the lists.
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-dvdsub.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:
- Regenerate docs.
- * gst/iec958/ac3_padder.c:
- * gst/iec958/ac3_padder.h:
- Do not use gtk-doc style comments for non gtk-doc comments. Note -
- there are functions defined using extern in the .c file - does that
- make sense?
-
-2008-01-21 12:43:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/mad/gstmad.c: Chain up at the end of the function.
- Original commit message from CVS:
- * ext/mad/gstmad.c:
- Chain up at the end of the function.
-
-2008-01-19 16:04:14 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mad/gstid3tag.c: Don't add pad templates for the base class but only in the subclasses.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_id3_tag_class_init):
- Don't add pad templates for the base class but only in the
- subclasses.
-
-2008-01-17 17:26:48 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
-
- ext/lame/gstlame.*: Fix the case where you initially have stereo input, and so lame's mode is not set to mono, and th...
- Original commit message from CVS:
- * ext/lame/gstlame.c:
- * ext/lame/gstlame.h:
- Fix the case where you initially have stereo input, and so lame's
- mode is not set to mono, and then you get input with mono audio and
- soon after you get stereo input again. What happened before this
- commit is that it would keep the encoding mode as mono. It should
- change it back to the one requested by the app (or the default one)
- if not requested.
-
-2008-01-15 17:18:31 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Interpolate the VBRI seek table entries to get better results, support 3 byte...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
- (mp3parse_bytepos_to_time):
- Interpolate the VBRI seek table entries to get better results,
- support 3 byte seek table entries and prevent overflows in the
- seek table by adding the relative offsets when using the seek
- table in a large enough data type.
-
-2008-01-14 15:02:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Add support for seeking based on the VBRI seek table. Might make sense to use...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
- (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
- (mp3parse_bytepos_to_time):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Add support for seeking based on the VBRI seek table. Might make
- sense to use interpolation in the table later to get hopefully a
- bit more accurate values.
-
-2008-01-14 11:41:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Fix compilation error. Fixes #509313.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
- (handle_picture), (handle_slice):
- Fix compilation error. Fixes #509313.
-
-2008-01-14 11:24:57 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/lame/gstlame.c: Use gst_util_uint64_scale instead of gst_util_uint64_scale_int as 8 * GST_SECOND is too large for...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_event):
- Use gst_util_uint64_scale instead of gst_util_uint64_scale_int
- as 8 * GST_SECOND is too large for int.
-
-2008-01-14 10:52:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/xingheader/gstxingmux.c: Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead of 0xfe.
- Original commit message from CVS:
- * gst/xingheader/gstxingmux.c: (generate_xing_header):
- Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead
- of 0xfe.
-
-2008-01-14 10:42:48 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Add initial support for reading VBRI headers as found in VBR files created by...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
- (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
- (mp3parse_total_bytes), (mp3parse_total_time):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Add initial support for reading VBRI headers as found in VBR files
- created by some Fraunhofer encoders. Currently we only read the
- number of frames and bytes (and calculate duration, etc from this)
- but there is also a seek table that we currently don't use.
-
-2008-01-14 09:17:47 +0000 Mark Nauwelaerts <manauw@syknet.be>
-
- ext/lame/gstlame.c: Correctly set number of channels when using mono-encoding mode and fix the duration calculation o...
- Original commit message from CVS:
- Patch by: Mark Nauwelaerts <manauw at syknet dot be>
- * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
- (gst_lame_sink_event):
- Correctly set number of channels when using mono-encoding mode
- and fix the duration calculation of the EOS buffer.
-
-2008-01-14 09:13:29 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Guard against 0 values in the Xing header as frame count and byte count and c...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_handle_first_frame):
- Guard against 0 values in the Xing header as frame count and
- byte count and calculate the bitrate when we have all values
- we need and not before.
-
-2008-01-14 09:09:49 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/xingheader/gstxingmux.c: Remove accidentially leftover debug printf.
- Original commit message from CVS:
- * gst/xingheader/gstxingmux.c: (generate_xing_header):
- Remove accidentially leftover debug printf.
-
-2008-01-14 08:56:31 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/xingheader/gstxingmux.c: Choose smallest possible frame size for the Xing header, properly set the timestamp, dur...
- Original commit message from CVS:
- * gst/xingheader/gstxingmux.c: (has_xing_header),
- (generate_xing_header), (gst_xing_mux_chain),
- (gst_xing_mux_sink_event):
- Choose smallest possible frame size for the Xing header, properly
- set the timestamp, duration and offset on the outgoing buffers,
- only send NEWSEGMENT events in BYTE format downstream and also
- drop VBRI headers if already existing.
-
-2008-01-12 09:22:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/xingheader/: Major cleanup and rewrite of xingmux with less bugs and new features:
- Original commit message from CVS:
- * gst/xingheader/Makefile.am:
- * gst/xingheader/gstxingmux.c: (parse_header), (get_xing_offset),
- (has_xing_header), (generate_xing_header),
- (gst_xing_mux_base_init), (gst_xing_mux_finalize), (xing_reset),
- (gst_xing_mux_init), (gst_xing_mux_chain),
- (gst_xing_mux_sink_event), (gst_xing_mux_change_state):
- * gst/xingheader/gstxingmux.h:
- Major cleanup and rewrite of xingmux with less bugs and new features:
- - Handles other layers as 3
- - Write TOC
-
-2008-01-10 17:24:09 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Call g_type_class_ref() from a thread-safe context and not from the streaming thread to avoid GLib ...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (GST_TYPE_MAD_MODE),
- (GST_TYPE_MAD_EMPHASIS), (GST_TAG_EMPHASIS), (CHECK_HEADER):
- Call g_type_class_ref() from a thread-safe context and not
- from the streaming thread to avoid GLib screwing up (see
- bug #349410 and #493432). Comment out unused code.
-
-2008-01-10 15:24:08 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Add buffer clipping.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
- (handle_picture), (clip_buffer), (handle_slice),
- (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
- (gst_mpeg2dec_change_state):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Add buffer clipping.
- Add basic reverse playback support. Not complete yet when dealing with
- non-closed GOPs.
-
-2008-01-10 12:28:19 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We...
- Original commit message from CVS:
- * autogen.sh:
- Add -Wno-portability to the automake parameters to stop warnings
- about GNU make extensions being used. We require GNU make in almost
- every Makefile anyway.
- * configure.ac:
- Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o
- at the same time is required for per target flags.
-
-2008-01-09 13:51:38 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Makefile.am: Include lcov.mak to allow building coverage reports.
- Original commit message from CVS:
- * Makefile.am:
- Include lcov.mak to allow building coverage reports.
-
-2008-01-08 19:42:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Make sure that the Xing TOC starts with 0 and the entries are increasing over time. Otherwise it's broken and should ...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (mpg123_parse_xing_header):
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_handle_first_frame):
- Make sure that the Xing TOC starts with 0 and the entries
- are increasing over time. Otherwise it's broken and should
- be skipped. Fixes bug #507821.
-
-2008-01-08 16:31:29 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.*: Parse metadata object and extract pixel aspect ratio. Fixes #507844.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (asfdemux_dbg), (gst_asf_demux_reset),
- (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_get_metadata_for_stream),
- (gst_asf_demux_process_metadata), (gst_asf_demux_process_object),
- (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Parse metadata object and extract pixel aspect ratio. Fixes #507844.
-
-2007-12-31 21:41:52 +0000 David Schleef <ds@schleef.org>
-
- docs/plugins/.cvsignore: Add *-undeclared.txt
- Original commit message from CVS:
- * docs/plugins/.cvsignore:
- Add *-undeclared.txt
-
-2007-12-21 14:01:06 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtmanager.*: Implement some more signals that rtspsrc connects to.
- Original commit message from CVS:
- * gst/realmedia/rdtmanager.c:
- (gst_rdt_manager_marshal_VOID__UINT_UINT),
- (gst_rdt_manager_class_init):
- * gst/realmedia/rdtmanager.h:
- Implement some more signals that rtspsrc connects to.
- Fixes #504671.
-
-2007-12-18 09:07:53 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626).
- Original commit message from CVS:
- * Makefile.am:
- Include common/win32.mak for CRLF check of win32 project
- files (see #393626).
-
-2007-12-13 11:20:11 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Don't post SEGMENT_START messages on the bus, only the element driving the pi...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (mp3parse_handle_seek):
- Don't post SEGMENT_START messages on the bus, only the element
- driving the pipeline should do that.
-
-2007-12-09 04:29:35 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
- Original commit message from CVS:
- * configure.ac:
- Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
-
-2007-12-03 19:05:20 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.h: Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.h:
- Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
- Fixes #500808.
-
-2007-11-20 12:15:51 +0000 Julien Moutte <julien@moutte.net>
-
- gst/realmedia/rtspreal.c: Fix build on Mac OS X.
- Original commit message from CVS:
- 2007-11-20 Julien MOUTTE <julien@moutte.net>
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp): Fix build
- on Mac OS X.
-
-2007-11-19 11:38:49 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Restore the segment handling logic.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- Restore the segment handling logic.
- Please don't do behavioural changes under the heading of 'leak fixes'
- or 'whitespace changes', people.
-
-2007-11-19 09:50:58 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Plug some leaks.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- Plug some leaks.
-
-2007-11-13 06:57:57 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfdemux.c: Sync _activate_pull() a little more with other demuxers.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- Sync _activate_pull() a little more with other demuxers.
-
-2007-11-11 20:41:32 +0000 Thijs Vermeir <thijsvermeir@gmail.com>
-
- gst/mpegstream/gstmpegdemux.c: recognize the padding stream
- Original commit message from CVS:
- * gst/mpegstream/gstmpegdemux.c:
- recognize the padding stream
-
-2007-10-31 14:33:03 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Convert tags that come as string into the type required by
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_ext_content_desc):
- Convert tags that come as string into the type required by
- GstTagList.
-
-2007-10-30 12:27:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Remove some more broken code, it seems to clip even when it should not.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- Remove some more broken code, it seems to clip even when it should not.
- See #491305.
-
-2007-10-30 11:13:49 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: When the element is not driving the streaming thread it is not supposed to em...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- When the element is not driving the streaming thread it is not supposed
- to emit EOS or post SEGMENT done. It is allowed to return UNEXPECTED
- upstream when it detects EOS. See #491305.
-
-2007-10-13 15:13:34 +0000 Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
- gst/dvdsub/: Add dvd subtitle parser, which just packetizes the input stream. This is needed to mux dvd subtitles int...
- Original commit message from CVS:
- Patch by: Mark Nauwelaerts <mnauw at users.sourceforge.net>
- * gst/dvdsub/Makefile.am:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/dvdsub/gstdvdsubparse.c:
- * gst/dvdsub/gstdvdsubparse.h:
- Add dvd subtitle parser, which just packetizes the input
- stream. This is needed to mux dvd subtitles into matroska
- files, since the muxer expects unfragmented and properly
- timestamped input (#415754).
-
-2007-10-10 12:02:30 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Update requirements from past CVS versions to released versions (0.10.14 in this case).
- Original commit message from CVS:
- * configure.ac:
- Update requirements from past CVS versions to released
- versions (0.10.14 in this case).
- * ext/sidplay/gstsiddec.cc:
- Fix compilation with g++-4.2.
-
-2007-10-08 17:51:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/realmedia/: Fix some compiler warnings shown on Forte.
- Original commit message from CVS:
- * gst/realmedia/asmrules.c: (gst_asm_scan_parse_expression),
- (gst_asm_scan_parse_condition):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
- Fix some compiler warnings shown on Forte.
-
-2007-10-05 08:51:44 +0000 Gautier Portet <kassoulet@gmail.com>
-
- gst/xingheader/gstxingmux.c: The size of the Xing header is actually 417 as it's rounded to the next smaller integer....
- Original commit message from CVS:
- Patch by: Gautier Portet <kassoulet at gmail dot com>
- * gst/xingheader/gstxingmux.c:
- The size of the Xing header is actually 417 as it's rounded to the
- next smaller integer. Fixes #397759.
- * gst/xingheader/gstxingmux.c: (xing_generate_header),
- (xing_push_header):
- Some random cleanup, add FIXMEs and TODOs and check if the newsegment
- event to the beginning was successful before pushing the header again.
-
-2007-09-29 17:11:16 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_util_guint64_to_gdouble for conversions.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_time_to_bytepos),
- (mp3parse_bytepos_to_time):
- Use gst_util_guint64_to_gdouble for conversions.
- * win32/vs6/libgstmad.dsp:
- Add a link to libgstaudio.
-
-2007-09-26 13:40:35 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: Fix up case where there is no peer, in which case _get_allowed_caps() will return NULL.
- Original commit message from CVS:
- * ext/lame/gstlame.c:
- Fix up case where there is no peer, in which case
- _get_allowed_caps() will return NULL.
-
-2007-09-25 13:20:27 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: Use GST_PTR_FORMAT to print caps in debug statement.
- Original commit message from CVS:
- * ext/lame/gstlame.c:
- Use GST_PTR_FORMAT to print caps in debug statement.
-
-2007-09-25 09:16:05 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- configure.ac: Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
- Original commit message from CVS:
- * configure.ac:
- Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
- AG_GST_ARG_ENABLE_EXPERIMENTAL instead of duplicating those macros
- in configure.ac.
-
-2007-09-24 10:26:21 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- ext/lame/gstlame.c: Allow fixing the sample rate lame converts to by negotiating fixed sample rate on the src pad caps.
- Original commit message from CVS:
- * ext/lame/gstlame.c:
- Allow fixing the sample rate lame converts to by negotiating fixed
- sample rate on the src pad caps.
- Add docs for it.
- * tests/check/Makefile.am:
- * tests/check/pipelines/lame.c:
- Add a check for it.
-
-2007-09-22 18:22:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Updated translations.
- Original commit message from CVS:
- * po/LINGUAS:
- * po/da.po:
- Updated translations.
-
-2007-09-22 18:20:50 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/pl.po: Added Polish translation.
- Original commit message from CVS:
- translated by: Jakub Bogusz <qboosh@pld-linux.org>
- * po/pl.po:
- Added Polish translation.
-
-2007-09-22 18:19:08 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/fi.po: Added Finnish translation.
- Original commit message from CVS:
- translated by: Ilkka Tuohela <hile@iki.fi>
- * po/fi.po:
- Added Finnish translation.
-
-2007-09-22 18:17:52 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/es.po: Added Spanish translation.
- Original commit message from CVS:
- translated by: Jorge González González <aloriel@gmail.com>
- * po/es.po:
- Added Spanish translation.
-
-2007-09-22 18:17:08 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/bg.po: Added Bulgarian translation.
- Original commit message from CVS:
- translated by: Alexander Shopov <ash@contact.bg>
- * po/bg.po:
- Added Bulgarian translation.
-
-2007-09-20 11:47:52 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/iec958/ac3iec.c: Chainup in finalize.
- Original commit message from CVS:
- * gst/iec958/ac3iec.c:
- Chainup in finalize.
- * tests/check/Makefile.am:
- * tests/check/generic/states.c:
- Improved state change unit test.
-
-2007-09-19 18:20:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Ignore registries in any format.
- Original commit message from CVS:
- * docs/plugins/.cvsignore:
- * tests/check/.cvsignore:
- Ignore registries in any format.
-
-2007-09-08 20:54:54 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a define in the lame headers. This has the advan...
- Original commit message from CVS:
- * configure.ac:
- Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a
- define in the lame headers. This has the advantage that
- it should still work when we're cross-compiling (#452025).
-
-2007-08-24 15:55:03 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.c: Add other allowed rates to the pad templates.
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- Add other allowed rates to the pad templates.
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose):
- Reset the parser to release memory in dispose.
-
-2007-08-17 06:56:53 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/: Fix more leaks.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbparse.c:
- * ext/sidplay/gstsiddec.cc:
- Fix more leaks.
-
-2007-08-16 14:49:11 +0000 Daniel Charles <dcharles@ti.com>
-
- ext/amrnb/amrnbenc.*: Add property to select the BandMode of the AMR encoder.
- Original commit message from CVS:
- Patch by: Daniel Charles <dcharles at ti dot com>
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_bandmode_get_type),
- (gst_amrnbenc_set_property), (gst_amrnbenc_get_property),
- (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
- (gst_amrnbenc_chain), (gst_amrnbenc_state_change):
- * ext/amrnb/amrnbenc.h:
- Add property to select the BandMode of the AMR encoder.
- See #466442.
-
-2007-08-16 12:15:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/realmedia/asmrules.c: Make ro memory to share.
- Original commit message from CVS:
- * gst/realmedia/asmrules.c:
- Make ro memory to share.
-
-2007-08-16 11:52:57 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Queue segment event and push it after we know the caps on the pad or else an ...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Queue segment event and push it after we know the caps on the pad or
- else an autoplugger might not have plugged the element yet and the
- segment is lost.
-
-2007-08-16 07:17:13 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/iec958/ac3iec.c: Fix tests.
- Original commit message from CVS:
- * gst/iec958/ac3iec.c:
- Fix tests.
-
-2007-08-16 06:48:13 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- tests/check/: Add generic state-change test suite to help to fi leaks.
- Original commit message from CVS:
- * tests/check/Makefile.am:
- * tests/check/generic/.cvsignore:
- * tests/check/generic/states.c:
- Add generic state-change test suite to help to fi leaks.
-
-2007-08-09 10:57:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Added Portuguese (Brazilian) translation.
- Original commit message from CVS:
- translated by: Raphael Higino <phhigino@gmail.com>
- * po/LINGUAS:
- * po/pt_BR.po:
- Added Portuguese (Brazilian) translation.
-
-2007-08-09 10:55:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Updated translations.
- Original commit message from CVS:
- * po/hu.po:
- * po/nl.po:
- * po/sv.po:
- * po/uk.po:
- Updated translations.
-
-2007-08-07 11:50:44 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Activate timestamp fixing code.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_fix_timestamp),
- (gst_rmdemux_parse_video_packet):
- Activate timestamp fixing code.
-
-2007-08-07 10:57:09 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Do fragment collection in the demuxer so that we can now work with both ffmpeg and realvideo...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
- (gst_rmdemux_chain), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
- (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
- Do fragment collection in the demuxer so that we can now work with
- both ffmpeg and realvideodec to decoder real video content.
-
-2007-08-04 12:59:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/realmedia/asmrules.c: Include stdlib.h.
- Original commit message from CVS:
- * gst/realmedia/asmrules.c:
- Include stdlib.h.
-
-2007-08-03 16:21:19 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtmanager.c: Fix caps.
- Original commit message from CVS:
- * gst/realmedia/rdtmanager.c:
- Fix caps.
-
-2007-08-03 16:11:09 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rtspreal.c: Disable UDP transport for now.
- Original commit message from CVS:
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
- (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
- Disable UDP transport for now.
-
-2007-08-03 16:09:01 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Add simple rdt manager.
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rdtmanager.c: (find_session_by_id),
- (create_session), (free_session), (gst_rdt_manager_base_init),
- (gst_rdt_manager_marshal_BOXED__UINT_UINT),
- (gst_rdt_manager_class_init), (gst_rdt_manager_init),
- (gst_rdt_manager_finalize), (gst_rdt_manager_query_src),
- (gst_rdt_manager_chain_rtp), (gst_rdt_manager_chain_rtcp),
- (gst_rdt_manager_set_property), (gst_rdt_manager_get_property),
- (gst_rdt_manager_provide_clock), (gst_rdt_manager_change_state),
- (create_recv_rtp), (create_recv_rtcp), (create_rtcp),
- (gst_rdt_manager_request_new_pad), (gst_rdt_manager_release_pad),
- (gst_rdt_manager_plugin_init):
- * gst/realmedia/rdtmanager.h:
- * gst/realmedia/rmdemux.c: (plugin_init):
- Add simple rdt manager.
-
-2007-08-03 14:19:50 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtdepay.c: Fix the encoding-name so that it matches what the rtsp extension sets.
- Original commit message from CVS:
- * gst/realmedia/rdtdepay.c:
- Fix the encoding-name so that it matches what the rtsp extension sets.
-
-2007-08-02 19:37:41 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Use g_hash_table_destroy instead of _unref which is too new.
- Original commit message from CVS:
- * gst/realmedia/asmrules.c: (gst_asm_node_free),
- (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
- (gst_asm_scan_string), (gst_asm_scan_number),
- (gst_asm_scan_identifier), (gst_asm_scan_print_token),
- (gst_asm_scan_next_token), (gst_asm_rule_free),
- (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
- (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
- (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
- (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
- (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
- (gst_asm_rule_book_match), (main):
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
- (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
- Use g_hash_table_destroy instead of _unref which is too new.
-
-2007-08-02 19:30:05 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/.cvsignore: Add test to ignore.
- Original commit message from CVS:
- * gst/realmedia/.cvsignore:
- Add test to ignore.
- * gst/realmedia/Makefile.am:
- * gst/realmedia/asmrules.c: (gst_asm_node_new),
- (gst_asm_node_free), (gst_asm_operator_eval),
- (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
- (gst_asm_scan_string), (gst_asm_scan_number),
- (gst_asm_scan_identifier), (gst_asm_scan_print_token),
- (gst_asm_scan_next_token), (gst_asm_rule_new), (gst_asm_rule_free),
- (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
- (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
- (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
- (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
- (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
- (gst_asm_rule_book_match), (main):
- * gst/realmedia/asmrules.h:
- Added asembler rule book parser and evaluator.
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
- (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
- * gst/realmedia/rtspreal.h:
- Keep per stream config info.
- Parse and evaluate asm rule books for stream selection.
-
-2007-07-31 19:16:44 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/realmedia/rtspreal.c: Include stdlib.
- Original commit message from CVS:
- * gst/realmedia/rtspreal.c:
- Include stdlib.
-
-2007-07-27 16:39:45 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Split out hash code in separate file.
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/realhash.c: (hash), (call_hash),
- (gst_rtsp_ext_real_calc_response_and_checksum):
- * gst/realmedia/realhash.h:
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
- (rtsp_ext_real_after_send), (rtsp_ext_real_stream_select):
- Split out hash code in separate file.
-
-2007-07-27 10:12:55 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/: Fix include paths and link dependecies for rtsp extension.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_parse_sdp), (_do_init),
- (gst_rtsp_wms_class_init):
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
- (rtsp_ext_real_before_send), (rtsp_ext_real_after_send),
- (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
- (_do_init), (gst_rtsp_real_class_init):
- Fix include paths and link dependecies for rtsp extension.
-
-2007-07-26 15:52:43 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Add RealMedia RTSP extension module. It has rank NONE until it is fully functional.
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rmdemux.c: (plugin_init):
- * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
- (rtsp_ext_real_before_send), (rtsp_ext_real_after_send), (hash),
- (call_hash), (rtsp_ext_real_calc_response_and_checksum),
- (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
- (_do_init), (gst_rtsp_real_base_init), (gst_rtsp_real_class_init),
- (gst_rtsp_real_init), (gst_rtsp_real_finalize),
- (gst_rtsp_real_change_state), (gst_rtsp_real_extension_init),
- (gst_rtsp_real_plugin_init):
- * gst/realmedia/rtspreal.h:
- Add RealMedia RTSP extension module. It has rank NONE until it is fully
- functional.
-
-2007-07-25 18:38:42 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/: Move WMS RTSP extension from -good to here.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_before_send),
- (gst_rtsp_wms_after_send), (gst_rtsp_wms_parse_sdp),
- (gst_rtsp_wms_configure_stream), (_do_init),
- (gst_rtsp_wms_base_init), (gst_rtsp_wms_class_init),
- (gst_rtsp_wms_init), (gst_rtsp_wms_finalize),
- (gst_rtsp_wms_change_state), (gst_rtsp_wms_extension_init):
- * gst/asfdemux/gstrtspwms.h:
- Move WMS RTSP extension from -good to here.
- Port it to the new pluggable extension interface.
-
-2007-07-24 06:58:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/mad/Makefile.am: Link to audio helper from plugins-base.
- Original commit message from CVS:
- * ext/mad/Makefile.am:
- Link to audio helper from plugins-base.
-
-2007-07-24 05:05:29 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- Use the new buffer clipping function from gstaudio here and require gst-plugins-base CVS.
- Original commit message from CVS:
- * configure.ac:
- * ext/mad/gstmad.c: (gst_mad_chain):
- Use the new buffer clipping function from gstaudio here and
- require gst-plugins-base CVS.
-
-2007-07-23 09:07:19 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: Sync liboil check with plugins-base. Add libm check.
- Original commit message from CVS:
- * configure.ac:
- Sync liboil check with plugins-base. Add libm check.
- * gst/synaesthesia/Makefile.am:
- Link against libm. We're using sqrt here.
-
-2007-07-20 07:58:25 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfdemux.c: Include stdlib.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- Include stdlib.
-
-2007-07-20 07:41:57 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/annodex/Makefile.am: Fix CFLAGS/LIBS.
- Original commit message from CVS:
- * ext/annodex/Makefile.am:
- Fix CFLAGS/LIBS.
- * ext/cdio/gstcdiocddasrc.c:
- * ext/libpng/gstpngdec.c: (gst_pngdec_task):
- Include stdlib
- * ext/cairo/Makefile.am:
- * gst/videofilter/Makefile.am:
- * tests/examples/level/Makefile.am:
- Use $(LIBM) instead of -lm
-
-2007-07-18 17:51:55 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Save some memory for each frame by only saving the start timestamp and start ...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
- (gst_mp3parse_emit_frame), (mp3parse_handle_seek):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Save some memory for each frame by only saving the start timestamp
- and start byte position instead of additionally the stop timestamp
- and stop byte position. This requires us to use a doubly-linked list
- but still saves 8-12 bytes per frame.
-
-2007-07-16 09:14:18 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mad/gstmad.c: Fix buffer clipping to correctly clip to the segment stop.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (clip_outgoing_buffer):
- Fix buffer clipping to correctly clip to the segment stop.
-
-2007-07-15 19:39:46 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Fix a calculation that was causing mp3parse to drop every incoming frame when...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_emit_frame):
- Fix a calculation that was causing mp3parse to drop every incoming
- frame when upstream delivered a segment in TIME format, breaking
- playback of all mpeg system streams.
-
-2007-07-13 16:46:35 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- Remove bogus check for libcheck, since we check for gstreamer-check and it pulls in the required info from and we wer...
- Original commit message from CVS:
- * Makefile.am:
- * configure.ac:
- * tests/Makefile.am:
- Remove bogus check for libcheck, since we check for
- gstreamer-check and it pulls in the required info from
- and we weren't actually _using_ the information for
- libcheck ourselves anyway.
-
-2007-07-13 16:27:56 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Implement accurate seeking in mpegaudioparse. Fixes #308312.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
- (gst_mp3parse_init), (gst_mp3parse_dispose),
- (gst_mp3parse_sink_event), (mp3parse_seek_table_last_entry),
- (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
- (mp3parse_handle_seek), (mp3parse_src_query):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Implement accurate seeking in mpegaudioparse. Fixes #308312.
- Also implement segment seeks.
-
-2007-07-13 15:46:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mad/gstmad.*: Implement buffer clipping and use GST_BOILERPLATE instead of manual
- Original commit message from CVS:
- * ext/mad/gstmad.c: (_do_init), (gst_mad_init), (index_seek),
- (normal_seek), (gst_mad_sink_event), (clip_outgoing_buffer),
- (gst_mad_chain), (gst_mad_change_state):
- * ext/mad/gstmad.h:
- Implement buffer clipping and use GST_BOILERPLATE instead of manual
- GType magic. Part one of bug #308312.
-
-2007-07-12 11:21:23 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: Use pkg-config to locate check.
- Original commit message from CVS:
- * configure.ac:
- Use pkg-config to locate check.
-
-2007-07-11 23:18:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Fix build against core CVS by not using deprecated API. Bump requirements for new API (overdue anyway).
- Original commit message from CVS:
- * configure.ac:
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_buffer):
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
- Fix build against core CVS by not using deprecated API. Bump
- requirements for new API (overdue anyway).
-
-2007-07-09 06:05:48 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- REQUIREMENTS: Also add amr-libs here and update a little.
- Original commit message from CVS:
- * REQUIREMENTS:
- Also add amr-libs here and update a little.
-
-2007-07-06 17:59:29 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- docs/plugins/inspect/: Add inspect file for synaesthesia so the docs can be built even if the plugin isn't built yet....
- Original commit message from CVS:
- * docs/plugins/inspect/plugin-dvdnav.xml:
- * docs/plugins/inspect/plugin-realmedia.xml:
- * docs/plugins/inspect/plugin-synaesthesia.xml:
- Add inspect file for synaesthesia so the docs can be built even if
- the plugin isn't built yet. Fixes #454311. Also add inspect files
- for dvdnavsrc and realmedia.
-
-2007-07-05 08:44:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- docs/plugins/Makefile.am: Simplify --extra-dir as gtkdoc scans recursively.
- Original commit message from CVS:
- * docs/plugins/Makefile.am:
- Simplify --extra-dir as gtkdoc scans recursively.
-
-2007-07-03 13:05:01 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- And yet more docs enabled.
- 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:
- * gst/synaesthesia/Makefile.am:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/synaesthesia/gstsynaesthesia.h:
- And yet more docs enabled.
-
-2007-07-03 11:55:45 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- docs/plugins/: Add new docs. Scan c++ files too.
- 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/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-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:
- Add new docs. Scan c++ files too.
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
- (gst_amrnbdec_event):
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init):
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
- (gst_amrnbparse_loop):
- Add documentation headers.
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- Refactor for docs.
-
-2007-07-01 19:12:32 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Use GST_BOILERPLATE instead of manual GType magic.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_base_init),
- (gst_mp3parse_init):
- Use GST_BOILERPLATE instead of manual GType magic.
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
- (mp3parse_bytepos_to_time):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Implement seeking, byte->time, time->byte conversions with the Xing
- seek table if available. This allows better at least a bit more
- accurate seeks and file position reporting.
-
-2007-06-28 20:33:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Copy the complete Xing seek table in the 100 byte array instead of copying th...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_handle_first_frame):
- Copy the complete Xing seek table in the 100 byte array instead of
- copying the first byte 100 times.
- * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_total_bytes),
- (mp3parse_total_time), (mp3parse_time_to_bytepos):
- Add seeking support based on the Xing header but comment it out for
- now as it seems to yield worse result than the other method.
- Also use gst_pad_query_peer_duration() instead of getting the peer pad
- ourself, creating a new GstQuery, etc.
-
-2007-06-25 12:46:47 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- docs/plugins/: Update docs with caps info.
- Original commit message from CVS:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * 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:
- Update docs with caps info.
-
-2007-06-25 12:25:09 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- po/POTFILES.in: Make sure dvdnav strings get translated too (no reason not to have them in the .po file, even if the ...
- Original commit message from CVS:
- * po/POTFILES.in:
- Make sure dvdnav strings get translated too (no reason not to have
- them in the .po file, even if the plugin is disabled for now).
- Fixes #450879.
-
-2007-06-25 11:46:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/amrnb/: Add newsegment and discont handling. Some code cleanups.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
- (gst_amrnbdec_event), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
- (gst_amrnbparse_loop):
- Add newsegment and discont handling. Some code cleanups.
-
-2007-06-25 07:55:51 +0000 David Schleef <ds@schleef.org>
-
- ext/dvdread/dvdreadsrc.c: check for an error from
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: check for an error from
- DVDReadBlocks() correctly.
-
-2007-06-25 07:22:10 +0000 David Schleef <ds@schleef.org>
-
- ext/dvdread/dvdreadsrc.c: If we can't read a nav packet, or it doesn't look like a nav packet, that's an error. Prev...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c:
- If we can't read a nav packet, or it doesn't look like a nav
- packet, that's an error. Previous behavior was to look at
- the next packet; I can't find any justification for doing that.
- Fixes: #358891.
-
-2007-06-23 22:57:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/it.po: Updated Italian translation.
- Original commit message from CVS:
- * po/it.po:
- Updated Italian translation.
-
-2007-06-23 11:22:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/vi.po: Updated Vietnames translation.
- Original commit message from CVS:
- * po/vi.po:
- Updated Vietnames translation.
-
-2007-06-23 11:21:54 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Added Chinese (simplified) translation.
- Original commit message from CVS:
- contributed by: Wenzheng Hu <db_lobster@163.com>
- * po/LINGUAS:
- * po/zh_CN.po:
- Added Chinese (simplified) translation.
-
-2007-06-22 14:27:18 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- MAINTAINERS: Updating all the maintainers files
- Original commit message from CVS:
- * MAINTAINERS:
- Updating all the maintainers files
-
-2007-06-22 10:57:06 +0000 Edward Hervey <bilboed@bilboed.com>
-
- Fix leaks some more.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init):
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init):
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_init):
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_init):
- * gst/iec958/ac3iec.c: (ac3iec_init):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
- Fix leaks some more.
-
-2007-06-21 14:33:58 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: "She's leaking me", said valgrind.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init):
- "She's leaking me", said valgrind.
-
-2007-06-19 14:40:20 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Fix "pad caps are not a real subset of its template caps" warning.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create):
- Fix "pad caps are not a real subset of its template caps" warning.
-
-2007-06-19 14:15:50 +0000 Laurent Glayal <spglegle@yahoo.fr>
-
- ext/amrnb/amrnbdec.c: Don't leak the adapter, unref it in a new finalize method instead.
- Original commit message from CVS:
- Patch by: Laurent Glayal <spglegle at yahoo dot fr>
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init),
- (gst_amrnbdec_finalize):
- Don't leak the adapter, unref it in a new finalize method instead.
- Fixes #448782.
-
-2007-06-19 10:43:26 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Back to CVS
- Original commit message from CVS:
- * configure.ac:
- Back to CVS
- * gst-plugins-ugly.doap:
- Add 0.10.6 to the list of releases.
-
-=== release 0.10.6 ===
-
-2007-06-19 10:31:04 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.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-siddec.xml:
- Release 0.10.6
- Original commit message from CVS:
- Release 0.10.6
-
-2007-06-19 10:21:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/da.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/it.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2007-06-15 09:31:16 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- win32/vs6/: Convert line endings to CRLF and mark as binary files.
- Original commit message from CVS:
- * win32/vs6/gst_plugins_ugly.dsw:
- * win32/vs6/libgstac3parse.dsp:
- * win32/vs6/libgstasfdemux.dsp:
- * win32/vs6/libgstdvdlpcmdec.dsp:
- * win32/vs6/libgstdvdsub.dsp:
- * win32/vs6/libgstiec958.dsp:
- * win32/vs6/libgstlame.dsp:
- * win32/vs6/libgstmad.dsp:
- * win32/vs6/libgstmpegaudioparse.dsp:
- * win32/vs6/libgstmpegstream.dsp:
- * win32/vs6/libgstrealmedia.dsp:
- * win32/vs6/libgstsynaesthesia.dsp:
- Convert line endings to CRLF and mark as binary files.
-
-2007-06-13 14:29:39 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdnav/dvdnavsrc.c: Don't forget to unlock when setting the device property, or we'll sooner or later deadlock.
- Original commit message from CVS:
- * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_set_property):
- Don't forget to unlock when setting the device property, or
- we'll sooner or later deadlock.
-
-2007-06-12 21:46:10 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- gst/dvdsub/gstdvdsubdec.c: Use gst_util_guint64_to_gdouble for conversion.
- Original commit message from CVS:
- * gst/dvdsub/gstdvdsubdec.c:(gst_dvd_sub_dec_parse_subpic):
- Use gst_util_guint64_to_gdouble for conversion.
- * win32/vs6/libgstasfdemux.dsp:
- Add asfpacket.c to the build.
-
-2007-06-08 08:39:43 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: If the Xing header provides a total time, use it to calculate the correct ave...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
- (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- If the Xing header provides a total time, use it to calculate the
- correct average bitrate immediately, instead of sending updates as
- we parse the stream.
-
-2007-06-05 21:47:29 +0000 by Mark Nauwelaerts <manauw@skynet.be>
-
- gst/dvdsub/gstdvdsubdec.c: Use GstClockTime instead of guint for a time variable to prevent overflows on too large su...
- Original commit message from CVS:
- Patch by by: Mark Nauwelaerts <manauw at skynet dot be>
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
- Use GstClockTime instead of guint for a time variable to prevent
- overflows on too large subtitle durations. Fixes #444514.
-
-2007-05-31 22:33:26 +0000 Mark Nauwelaerts <manauw@skynet.be>
-
- gst/dvdsub/gstdvdsubdec.c: Clear state when handling the serialized FLUSH_STOP event instead of the FLUSH_START event...
- Original commit message from CVS:
- Patch by: Mark Nauwelaerts <manauw at skynet be>
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_sink_event):
- Clear state when handling the serialized FLUSH_STOP event instead of
- the FLUSH_START event, thereby making sure we don't free buffers the
- chain function is still using. Fixes dvdsubdec crashing when flusing
- or seeking (#442706).
-
-2007-05-23 11:16:09 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Initialise variable to make fc4 build bot happy.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- Initialise variable to make fc4 build bot happy.
-
-2007-05-21 15:11:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegdemux.c: Add sanity check so we don't abort for broken or non-MPEG streams, but instead error o...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
- Add sanity check so we don't abort for broken or non-MPEG streams,
- but instead error out. Fixes crashes/aborts for when our typefinder
- wrongly identifies quicktime files as mpeg (which should be fixed in
- -base now too). (#440120).
-
-2007-05-18 09:35:17 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- * ChangeLog:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbparse.c:
- ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT, block_size, _do_init, gst_amrnbdec_base_init, gst_amrnbdec...
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT,
- block_size, _do_init, gst_amrnbdec_base_init,
- gst_amrnbdec_class_init, gst_amrnbdec_init):
- * ext/amrnb/amrnbenc.c (gst_amrnbenc_debug, GST_CAT_DEFAULT, _do_init,
- gst_amrnbenc_base_init, gst_amrnbenc_class_init, gst_amrnbenc_init):
- * ext/amrnb/amrnbparse.c (gst_amrnbparse_debug, GST_CAT_DEFAULT,
- block_size, _do_init, gst_amrnbparse_base_init,
- gst_amrnbparse_class_init, gst_amrnbparse_init):
- First round of cleanups, that use GST_BOILERPLATE, GST_ELEMENT_DETAILS,
- GST_DEBUG_FUNCPTR and add log-category.
-
-2007-05-18 08:42:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Implement parsing of Xing headers from the first frame of the stream, and use...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
- (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
- (gst_mp3parse_chain), (mp3parse_total_bytes),
- (mp3parse_total_time):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Implement parsing of Xing headers from the first frame of the stream,
- and use it to report duration correctly where possible.
-
-2007-05-16 19:15:13 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: After descrambling, push the packets out as individual packets instead of one big descramble...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_cook_audio):
- After descrambling, push the packets out as individual packets
- instead of one big descrambled buffer. Makes cook audio decoding
- work with the 'realaudiodec' decoder from gst-plugins-bad.
-
-2007-05-16 19:07:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.*: Remember first timestamp encountered in stream and re-timestamp stream to start from zero (f...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
- (gst_rmdemux_sink_event), (gst_rmdemux_perform_seek),
- (gst_rmdemux_reset), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_packet):
- * gst/realmedia/rmdemux.h:
- Remember first timestamp encountered in stream and re-timestamp
- stream to start from zero (fixes #397219); only send one newsegment
- event, not two; when seeking, send newsegment events from the
- streaming thread and not from the seeking thread.
-
-2007-05-16 12:48:43 +0000 Mark Nauwelaerts <manauw@skynet.be>
-
- gst/mpegstream/: Reset last_flow values for the various streams after a flushing seek, otherwise we might aggregate w...
- Original commit message from CVS:
- Based on patch by: Mark Nauwelaerts <manauw skynet be>
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
- (gst_mpeg_demux_process_event), (gst_mpeg_streams_reset_last_flow):
- * gst/mpegstream/gstmpegdemux.h:
- Reset last_flow values for the various streams after a flushing
- seek, otherwise we might aggregate wrong flow returns afterwards
- that will make upstream pause silently. This should fix seeking
- in DVDs and also fix the Thoggen cropping dialog (#438610).
-
-2007-05-07 13:51:43 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.*: Activate streams (ie. add the pads to the element) depending on whether we actually get d...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
- (gst_asf_demux_chain_headers),
- (gst_asf_demux_parse_data_object_start), (all_streams_prerolled),
- (gst_asf_demux_have_mutually_exclusive_active_stream),
- (gst_asf_demux_check_activate_streams),
- (gst_asf_demux_find_stream_with_complete_payload),
- (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
- (gst_asf_demux_activate_ext_props_streams),
- (gst_asf_demux_process_object):
- * gst/asfdemux/gstasfdemux.h:
- Activate streams (ie. add the pads to the element) depending on
- whether we actually get data for those streams within the ASF
- preroll value specified. Currently only done in pull-mode though
- (this will fix problems with playbin hanging on mms streams once
- we use this in push-mode as well).
-
-2007-05-04 11:04:16 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Make all timestamps start from zero in pull-mode too; some small clean-ups and FIXMEs here and there.
- Original commit message from CVS:
- * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
- (gst_asf_demux_init), (gst_asf_demux_push_complete_payloads),
- (gst_asf_demux_process_file):
- * gst/asfdemux/gstasfdemux.h:
- Make all timestamps start from zero in pull-mode too; some small
- clean-ups and FIXMEs here and there.
-
-2007-05-01 11:10:31 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/asfpacket.c: If packet size is specified within the packet and smaller than the actual packet size, don'...
- Original commit message from CVS:
- * gst/asfdemux/asfpacket.c: (gst_asf_demux_parse_payload),
- (gst_asf_demux_parse_packet):
- If packet size is specified within the packet and smaller than
- the actual packet size, don't parse beyond the size specified in
- the packet (this makes us parse some cases of packets with single
- compressed payloads cleanly, see e.g stream from #431318). Also
- add a sanity check when parsing compressed single payloads.
-
-2007-05-01 09:19:13 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only send data from the keyframe ri...
- Original commit message from CVS:
- * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_seek_index_lookup),
- (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_push_complete_payloads):
- Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only
- send data from the keyframe right before the new segment start to
- make sure the decoder doesn't have to decode more than absolutely
- necessary.
-
-2007-04-30 15:36:00 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Implement payload extension system/extended replicated data parsing, so we can extract payload duratio...
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/asfpacket.c:
- (asf_payload_parse_replicated_data_extensions),
- (gst_asf_demux_parse_payload):
- * gst/asfdemux/asfpacket.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
- (gst_asf_demux_push_complete_payloads),
- (gst_asf_demux_process_ext_stream_props):
- * gst/asfdemux/gstasfdemux.h:
- Implement payload extension system/extended replicated data parsing,
- so we can extract payload durations if they're specified.
-
-2007-04-30 11:41:22 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Refactor stream parse/activation a bit (stream activation heuristics are still the same though); some ...
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
- (gst_asf_demux_reset), (gst_asf_demux_parse_data_object_start),
- (gst_asf_demux_loop), (gst_asf_demux_setup_pad),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_activate_stream),
- (gst_asf_demux_parse_stream_object),
- (gst_asf_demux_process_ext_stream_props),
- (gst_asf_demux_process_queued_extended_stream_objects),
- (gst_asf_demux_activate_ext_props_streams),
- (gst_asf_demux_process_object):
- * gst/asfdemux/gstasfdemux.h:
- Refactor stream parse/activation a bit (stream activation heuristics
- are still the same though); some more clean-ups.
-
-2007-04-28 12:23:16 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- win32/common/.cvsignore: Ignore generated config.h file to make build bot happy.
- Original commit message from CVS:
- * win32/common/.cvsignore:
- Ignore generated config.h file to make build bot happy.
-
-2007-04-28 10:49:17 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Init debug category before using it.
- Original commit message from CVS:
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init):
- * gst/asfdemux/gstasfdemux.h:
- Init debug category before using it.
-
-2007-04-27 18:39:21 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Fix silly bug when we can't pull as much data as we want; don't forget to announce pendin...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_pull_data),
- (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop):
- Fix silly bug when we can't pull as much data as we want; don't
- forget to announce pending tags in the new packet parsing code.
-
-2007-04-25 17:23:33 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Generate a win32 config.h into win32/common and add to MANIFEST so it gets disted (#393890). Looks like win32/common/...
- Original commit message from CVS:
- * configure.ac:
- * win32/MANIFEST:
- Generate a win32 config.h into win32/common and add to MANIFEST so
- it gets disted (#393890). Looks like win32/common/config.h.in needs
- some work though.
-
-2007-04-22 22:41:20 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/amrnb/amrnbparse.c: Fix pull mode operation some more: send newsegment event before sending data; handle EOS and ...
- Original commit message from CVS:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
- (gst_amrnbparse_class_init), (gst_amrnbparse_init),
- (gst_amrnbparse_pull_header), (gst_amrnbparse_loop):
- Fix pull mode operation some more: send newsegment event before
- sending data; handle EOS and fatal flow returns a bit better; don't
- leak buffers in some cases. Misc. minor cleanups. Fixes #431707.
-
-2007-04-20 20:57:56 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: New packet parsing code: should put halfway decent timestamps on buffers, and might even set the appro...
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/asfpacket.c: (asf_packet_read_varlen_int),
- (asf_packet_create_payload_buffer),
- (asf_payload_find_previous_fragment),
- (gst_asf_payload_queue_for_stream), (gst_asf_demux_parse_payload),
- (gst_asf_demux_parse_packet):
- * gst/asfdemux/asfpacket.h:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_reset_stream_state_after_discont),
- (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
- (gst_asf_demux_setup_pad), (gst_asf_demux_descramble_buffer),
- (gst_asf_demux_process_chunk):
- * gst/asfdemux/gstasfdemux.h:
- New packet parsing code: should put halfway decent timestamps on
- buffers, and might even set the appropriate keyframe/discont buffer
- flags from time to time (and even if it doesn't, I'm at least able
- to debug this code); only used in pull-mode so far. Still needs
- some more work, like payload extensions parsing and proper flow
- aggregation, and stream activation based on preroll. Stay tuned.
-
-2007-04-20 17:32:00 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Some clean-ups and small fixes: rename asf_stream_context structure to
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
- (gst_asf_demux_seek_index_lookup),
- (gst_asf_demux_handle_seek_event), (gst_asf_demux_get_stream),
- (gst_asf_demux_setup_pad), (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_process_file), (gst_asf_demux_descramble_segment),
- (gst_asf_demux_push_buffer), (gst_asf_demux_process_chunk),
- (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
- * gst/asfdemux/gstasfdemux.h:
- Some clean-ups and small fixes: rename asf_stream_context structure to
- AsfStream; inline some three-line utility functions that are only used
- once anyway and get rid of their associated helper structs; make debug
- category global so that it is used by the debug statements in the other
- file as well; simplify gst_asf_demux_get_stream(); fix accidental
- implicit initialisation of stream->last_buffer_timestamp to 0, which
- would lead to missing timestamps on the first buffer; put fourcc format
- into video caps to make certain proprietary wmv decoders happy (for the
- case of WMVA in particular); play_time is offset by preroll as well, so
- fix overreporting of duration for some files.
-
-2007-04-17 10:21:50 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Printf format fixes.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_pull_indices):
- Printf format fixes.
-
-2007-04-16 16:30:50 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegparse.c: Post an error message if EOS wasn't handled by anything downstream.
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
- (gst_mpeg_parse_send_event):
- Post an error message if EOS wasn't handled by anything downstream.
- This should fix playbin freezing/hanging with small VobSub subtitle
- files (background: not-linked flow returns from downstream are
- ignored for a while at the beginning, so if the file is small
- upstream will never get a not-linked flow return even if nothing
- is connected downstream). (#429960).
-
-2007-04-16 15:15:07 +0000 Michael Smith <msmith@xiph.org>
-
- ext/amrnb/amrnbparse.c: Rewrite terminally broken sinkpad activation code. and push mode activation doesn't leave the...
- Original commit message from CVS:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_sink_activate),
- (gst_amrnbparse_sink_activate_pull):
- Rewrite terminally broken sinkpad activation code.
- Now actually supports pull-mode activation (didn't before), and push
- mode activation doesn't leave the sinkpad flushing.
-
-2007-04-12 13:38:03 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Make asfdemux work in pull mode where possible. If there's an index at the end of the file, read it an...
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
- (gst_asf_demux_reset), (gst_asf_demux_init),
- (gst_asf_demux_activate), (gst_asf_demux_activate_push),
- (gst_asf_demux_activate_pull), (gst_asf_demux_sink_event),
- (gst_asf_demux_seek_index_lookup),
- (gst_asf_demux_reset_stream_state_after_discont),
- (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_handle_src_event), (gst_asf_demux_chain_headers),
- (gst_asf_demux_chain), (gst_asf_demux_pull_data),
- (gst_asf_demux_pull_indices),
- (gst_asf_demux_parse_data_object_start),
- (gst_asf_demux_pull_headers), (gst_asf_demux_loop),
- (gst_asf_demux_setup_pad), (gst_asf_demux_process_file),
- (gst_asf_demux_process_simple_index),
- (gst_asf_demux_process_object),
- (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
- (gst_asf_demux_handle_data), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Make asfdemux work in pull mode where possible. If there's an index
- at the end of the file, read it and use it for seeking purposes.
-
-2007-04-12 10:19:18 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/synaesthesia/gstsynaesthesia.c: Some timestamp fixes.
- Original commit message from CVS:
- * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
- (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_setcaps),
- (gst_synaesthesia_chain), (gst_synaesthesia_change_state):
- Some timestamp fixes.
- * gst/synaesthesia/synaescope.c: (synaescope_coreGo):
- Fix for 64-bit machines.
-
-2007-04-12 10:10:22 +0000 René Stadler <mail@renestadler.de>
-
- gst/realmedia/rmdemux.*: Make rmdemux handle any number of logical streams. Fixes #428698.
- Original commit message from CVS:
- Patch by: René Stadler <mail at renestadler dot de>
- * gst/realmedia/rmdemux.c: (find_seek_offset_bytes),
- (find_seek_offset_time), (gst_rmdemux_reset),
- (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
- (gst_rmdemux_add_stream), (gst_rmdemux_combine_flows):
- * gst/realmedia/rmdemux.h:
- Make rmdemux handle any number of logical streams. Fixes #428698.
-
-2007-04-05 13:48:52 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * po/nl.po:
- update dutch
- Original commit message from CVS:
- update dutch
-
-2007-04-05 13:48:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Added Danish translation.
- Original commit message from CVS:
- submitted by: Mogens Jaeger <mogens@jaeger.tf>
- * po/LINGUAS:
- * po/da.po:
- Added Danish translation.
-
-2007-03-28 16:01:06 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
-
- po/.cvsignore: Add pot.
- Original commit message from CVS:
- * po/.cvsignore:
- Add pot.
-
-2007-03-27 12:02:49 +0000 Julien Moutte <julien@moutte.net>
-
- ext/mad/gstmad.c: Generate a perfect stream and try to adapt to incoming timestamps lack of precision up to half a fr...
- Original commit message from CVS:
- 2007-03-27 Julien MOUTTE <julien@moutte.net>
- * ext/mad/gstmad.c: (gst_mad_chain): Generate a perfect
- stream and try to adapt to incoming timestamps lack of
- precision up to half a frame. This allows generating
- a perfect stream even with muxed formats like FLV where
- the timestamps are stored in milliseconds.
-
-2007-03-22 21:44:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Remove unused zlib.h include. Fixes #421594.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c:
- Remove unused zlib.h include. Fixes #421594.
-
-2007-03-21 12:53:57 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/lame/gstlame.c: Disable the bitrate checking when the user has requested
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_setup):
- Disable the bitrate checking when the user has requested
- Free Format mode, as all bitrates less than the maximum
- are valid then.
-
-2007-03-14 15:21:41 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- po/: Update translations.
- Original commit message from CVS:
- * po/hu.po:
- * po/it.po:
- * po/sv.po:
- Update translations.
-
-2007-03-12 17:26:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mad/gstmad.c: When handling seeks, don't convert -1 start or stop values to a bogus byte position - pass them ups...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src):
- When handling seeks, don't convert -1 start or stop values to a bogus
- byte position - pass them upstream as -1.
-
-2007-03-12 10:47:01 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Implement seeking via average bitrate, and position+duration querying in mp3p...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
- (gst_mp3parse_init), (gst_mp3parse_sink_event),
- (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
- (gst_mp3parse_change_state), (mp3parse_time_to_bytepos),
- (mp3parse_bytepos_to_time), (mp3parse_total_bytes),
- (mp3parse_total_time), (mp3parse_handle_seek),
- (mp3parse_src_event), (mp3parse_src_query),
- (mp3parse_get_query_types), (plugin_init):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Implement seeking via average bitrate, and position+duration
- querying in mp3parse. Later, it will support frame-accurate seeking by
- building a seek table as it parses.
- Add 'parsed=false' to the sink pad caps, and 'parsed=true' to the src
- pad caps. Bump the priority to PRIMARY+1 so that it is autoplugged
- before any extant MP3 decoder plugin. This allows us to remove framing
- support from the decoders, if we want, and will provide them with
- accurate seeking automatically once it is finished.
- Fix the handling of MPEG-1 Layer 1 files.
- Partially fix timestamping of packets arriving from a demuxer by
- queueing the incoming timestamp until the next packet starts, rather
- than applying it immediately to the next pushed buffer.
-
-2007-03-10 15:56:26 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Printf format fix.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_header_ext):
- Printf format fix.
-
-2007-03-04 17:13:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/cdio/gstcdiocddasrc.c: Make sure we always destroy our libcdio handle.
- Original commit message from CVS:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open),
- (gst_cdio_cdda_src_finalize):
- Make sure we always destroy our libcdio handle.
-
-2007-03-02 16:08:17 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/cdio/gstcdiocddasrc.c: Small code cleanups.
- Original commit message from CVS:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_probe_devices),
- (gst_cdio_cdda_src_read_sector), (gst_cdio_cdda_src_open),
- (gst_cdio_cdda_src_finalize):
- Small code cleanups.
- Don't use pad_alloc as the base class cannot deal with the error codes.
-
-2007-03-02 13:01:48 +0000 Zaheer Abbas Merali <zaheermerali@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Never post a (fatal) error message on the bus on decoding errors. We should only do this ...
- Original commit message from CVS:
- Patch by: Zaheer Abbas Merali <zaheermerali at gmail com>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
- Never post a (fatal) error message on the bus on decoding errors. We
- should only do this if we can't recover, but mpeg2dec can always
- recover. This is needed for DVB streams, for example, where there
- may be temporary glitches in the stream. Instead of an error
- message, post a warning message on the bus for every N decoding
- errors. Fixes #370020.
-
-2007-02-28 19:30:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- configure.ac: Convert to new AG_GST style.
- Original commit message from CVS:
- * configure.ac:
- Convert to new AG_GST style.
-
-2007-02-28 18:41:38 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/lame/gstlame.c: Display sensible defaults and limits for the vbr-min/max/mean properties. Fix the 'hard-limit' VB...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
- (gst_lame_setup):
- Display sensible defaults and limits for the
- vbr-min/max/mean properties. Fix the 'hard-limit' VBR min
- property - it's supposed to be a boolean 0/1 value.
-
-2007-02-28 16:01:08 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/lame/gstlame.c: Initialise the variables so gcc doesn't complain about possibly uninitialised uses, even though t...
- Original commit message from CVS:
- * ext/lame/gstlame.c:
- Initialise the variables so gcc doesn't complain about possibly
- uninitialised uses, even though they can't actually happen.
-
-2007-02-28 15:52:23 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.*: Implement all sample rates.
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
- (update_timestamps), (parse_header), (gst_dvdlpcmdec_chain_dvd),
- (gst_dvdlpcmdec_chain_raw), (dvdlpcmdec_sink_event):
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- Implement all sample rates.
- Implement sample permutation a little smarter avoiding a memcpy.
- Fix timestamps, use segments, fix seeking.
-
-2007-02-28 15:49:35 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- Document siddec.
- 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/inspect/plugin-siddec.xml:
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- Document siddec.
-
-2007-02-21 16:02:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- ext/lame/gstlame.c: Fix up bitrate checking macro. Make it give us a
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
- (gst_lame_set_property), (gst_lame_setup):
- Fix up bitrate checking macro. Make it give us a
- GST_ELEMENT_WARNING message so the application has a chance of
- reporting this to the user. Move the checking to _setup, so we
- are sure it runs in the READY state, when we hope to have a pipeline
- and a bus that is not flushing.
- This fixes e.g. using 96 kbit/sec as a bitrate.
-
-2007-02-15 19:55:55 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.*: Parse advanced mutual exclusion object and only add pads for 'hidden' streams (those in a...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file),
- (gst_asf_demux_process_advanced_mutual_exclusion),
- (gst_asf_demux_process_queued_extended_stream_objects),
- (gst_asf_demux_process_object), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Parse advanced mutual exclusion object and only add pads for
- 'hidden' streams (those in an extended stream header) that are
- mutually exclusive with an already existing 'main stream' if
- the broadcasting flag is not set. If the broadcasting flag is set,
- assume that data for this stream isn't sent. (This should ideally be
- solved better by making playbin more robust against this and/or by
- making mmssrc send some information downstream about which streams
- will be streamed). Fixes #353116.
-
-2007-02-13 12:00:59 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/synaesthesia/: Move all the mutable engine state into a structure so that multiple element instances can run with...
- Original commit message from CVS:
- * gst/synaesthesia/gstsynaesthesia.c:
- (gst_synaesthesia_class_init), (gst_synaesthesia_init),
- (gst_synaesthesia_finalize), (gst_synaesthesia_chain):
- * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
- (synaescope32), (synaescope_set_data), (synaesthesia_update),
- (synaesthesia_init), (synaesthesia_new), (synaesthesia_close):
- * gst/synaesthesia/synaescope.h:
- Move all the mutable engine state into a structure so that
- multiple element instances can run without interfering.
-
-2007-02-13 09:15:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Add crossreferences to glib/gobject/gstream docs.
- Original commit message from CVS:
- * configure.ac:
- * docs/plugins/Makefile.am:
- Add crossreferences to glib/gobject/gstream docs.
-
-2007-02-12 12:46:20 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/synaesthesia/: More source cleanups and add FIXME comments.
- Original commit message from CVS:
- * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
- (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
- (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
- (plugin_init):
- * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
- (synaescope8):
- More source cleanups and add FIXME comments.
-
-2007-02-11 13:42:45 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- gst/realmedia/rmdemux.c: Use gst_guint64_to_gdouble for conversions.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c:(gst_rmdemux_parse_indx_data):
- Use gst_guint64_to_gdouble for conversions.
- * gst/synaesthesia/synaescope.c:
- Define M_PI and do not include <pthread.h> and
- <sys/time.h> for G_OS_WIN32
- * win32/vs6/libgstrealmedia.dsp:
- * win32/vs6/synaesthesia.dsp:
- Update projects files.
- * win32/common/config.h.in:
- Add config.h.in for autogen of config.h
-
-2007-02-11 10:51:42 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: Add --enable-experimental support. Activate synaesthesia when building with --enable-experimental. Fix ...
- Original commit message from CVS:
- * configure.ac:
- Add --enable-experimental support. Activate synaesthesia when building
- with --enable-experimental. Fix --enable external configure switch
- description.
-
-2007-02-09 16:24:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.*: On receiving EOS, we try to push a last buffer with the remaining samples. Don't do that if we go...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
- (gst_lame_change_state):
- * ext/lame/gstlame.h:
- On receiving EOS, we try to push a last buffer with the remaining
- samples. Don't do that if we got an unclean flow return on the last
- gst_pad_push(), downstream might not handle this very gracefully
- (see #403168).
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- Pass flow returns upstream (helps #403168).
-
-2007-02-09 08:03:09 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/synaesthesia/gstsynaesthesia.c: check result of gst_pad_push() in _chain.
- Original commit message from CVS:
- * gst/synaesthesia/gstsynaesthesia.c:
- (gst_synaesthesia_class_init), (gst_synaesthesia_init),
- (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
- (gst_synaesthesia_chain), (plugin_init):
- check result of gst_pad_push() in _chain.
-
-2007-02-09 07:48:50 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/synaesthesia/: Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not built by default). Fixe...
- Original commit message from CVS:
- * gst/synaesthesia/Makefile.am:
- * gst/synaesthesia/gstsynaesthesia.c:
- (gst_synaesthesia_class_init), (gst_synaesthesia_init),
- (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
- (gst_synaesthesia_chain), (plugin_init):
- * gst/synaesthesia/synaescope.c:
- * gst/synaesthesia/synaescope.h:
- Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not
- built by default). Fixed Makefile.am. Fixed license headers (its GPL as it
- is derived from GPL code). Fixed GST_SYNAESTHESIA_CLASS macro. Added
- GST_DEBUG_FUNCPTR. Reflowed _setcaps. Updated pad setup in _init. Fix
- possible leak in _chain. (#356882)
-
-2007-02-08 21:07:27 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Refactor and clean up header parsing and chain function a bit; get rid of some cruft; make header pars...
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
- (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_identify_guid), (asf_demux_peek_object),
- (gst_asf_demux_chain_headers), (gst_asf_demux_chain),
- (gst_asf_demux_setup_pad), (gst_asf_demux_process_stream),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_get_object_header), (gst_asf_demux_process_header),
- (gst_asf_demux_process_file), (gst_asf_demux_process_comment),
- (gst_asf_demux_process_bitrate_props_object),
- (gst_asf_demux_process_header_ext),
- (gst_asf_demux_process_language_list),
- (gst_asf_demux_process_ext_stream_props),
- (gst_asf_demux_process_queued_extended_stream_objects),
- (gst_asf_demux_process_object), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Refactor and clean up header parsing and chain function a bit; get
- rid of some cruft; make header parsing a tad more robust, fixing
- #403188.
-
-2007-02-01 11:12:25 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Post an error if we receive an EOS event while still waiting for the
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
- Post an error if we receive an EOS event while still waiting for the
- ASF header object to come through.
-
-2007-01-24 17:36:36 +0000 Xavier B <xavierb@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Guard places where we assume that a certain amount of data is available better against le...
- Original commit message from CVS:
- Patch by: Xavier B. <xavierb gmail com>
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_guid),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_process_data),
- (gst_asf_demux_process_language_list),
- (gst_asf_demux_process_ext_stream_props),
- (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
- Guard places where we assume that a certain amount of data is
- available better against less data being available (should fix
- infamous assertion crasher bug #336370). Also fixes a small
- memory leak.
-
-2007-01-11 12:49:23 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/: Add demuxer for RealAudio files (#349779).
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rademux.c:
- * gst/realmedia/rademux.h:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_descramble_dnet_audio), (gst_rmdemux_plugin_init):
- * gst/realmedia/rmutils.c: (gst_rm_utils_descramble_dnet_buffer):
- * gst/realmedia/rmutils.h:
- Add demuxer for RealAudio files (#349779).
-
-2007-01-07 13:37:19 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- Makefile.am: Add win32/MANIFEST to EXTRA_DIST so win32 files will be include in the next release.
- Original commit message from CVS:
- * Makefile.am:
- Add win32/MANIFEST to EXTRA_DIST so win32 files will
- be include in the next release.
- * win32/MANIFEST:
- Remove win32/common/config.h is which is not autogenerated yet.
-
-2006-12-30 20:01:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- ext/lame/gstlame.c: warn when outgoing sample rate is different from incoming
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_setcaps), (gst_lame_chain):
- warn when outgoing sample rate is different from incoming
-
-2006-12-29 14:51:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: All sample-rates < 32khz come from the LSF extensions, which only use 1 granu...
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- All sample-rates < 32khz come from the LSF extensions, which only
- use 1 granule. Fixes parsing of 22.05khz, 24khz and 16khz files.
- Use gst_util_uint64_scale because we can.
-
-2006-12-22 13:06:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- tests/check/elements/amrnbenc.c: and fix compilation of this test
- Original commit message from CVS:
- * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
- (cleanup_amrnbenc):
- and fix compilation of this test
-
-2006-12-22 12:41:52 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- tests/check/elements/: re-apply as it was -bad and not -ugly that is frozen, doh
- Original commit message from CVS:
- * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
- (cleanup_amrnbenc):
- * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
- (cleanup_mpeg2dec):
- re-apply as it was -bad and not -ugly that is frozen, doh
-
-2006-12-21 12:50:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- tests/check/elements/: revert my freeze breakage
- Original commit message from CVS:
- * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
- (cleanup_amrnbenc):
- * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
- (cleanup_mpeg2dec):
- revert my freeze breakage
-
-2006-12-21 08:16:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfdemux.c: add a comment about a future change
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_get_gst_tag_from_tag_name),
- (gst_asf_demux_process_ext_content_desc):
- add a comment about a future change
- * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
- (cleanup_amrnbenc):
- * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
- (cleanup_mpeg2dec):
- consistent pad (de)activation
-
-2006-12-15 18:26:41 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Update query_types function too.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_src_query_types):
- Update query_types function too.
-
-2006-12-15 18:25:17 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Implement SEEKING query, make query function thread-safe.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query),
- (gst_rmdemux_src_query_types):
- Implement SEEKING query, make query function thread-safe.
-
-2006-12-15 17:59:47 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Use alignment-safe macros here too (subbuffers ...); guard against hypothetical memory acces...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
- Use alignment-safe macros here too (subbuffers ...); guard against
- hypothetical memory access beyond our given buffer in the case
- where the buffer size is not a multiple of 2.
-
-2006-12-15 17:54:48 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.*: Don't crash in the seek event handling code when playtime is 0, as may be the case with l...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_process_data), (gst_asf_demux_process_file),
- (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Don't crash in the seek event handling code when playtime is 0,
- as may be the case with live streams (#386218). Implement SEEKING
- query so applications can query seekability without second-guessing
- based on whether we have a duration or not.
-
-2006-12-15 11:12:21 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- add doap file
- Original commit message from CVS:
- * Makefile.am:
- * gst-plugins-ugly.doap:
- * gst-plugins-ugly.spec.in:
- add doap file
-
-2006-12-14 12:05:49 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegparse.c: Use our alignment-safe macros here too, since we can't assume that
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
- Use our alignment-safe macros here too, since we can't assume that
- GST_BUFFER_DATA is aligned (these are subbuffers we're dealing with
- here).
-
-2006-12-14 11:49:39 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Also, don't read the index for a stream a second time when operating in pull-mode and reachi...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_indx_data):
- Also, don't read the index for a stream a second time when
- operating in pull-mode and reaching the end of the file.
-
-2006-12-14 11:25:00 +0000 Roland Kay <roland.kay@ox.compsoc.net>
-
- gst/realmedia/rmdemux.c: Don't leak stream index (#385292).
- Original commit message from CVS:
- Patch by: Roland Kay <roland.kay at ox compsoc net>
- * gst/realmedia/rmdemux.c: (gst_rmdemux_reset):
- Don't leak stream index (#385292).
-
-2006-12-14 10:15:24 +0000 Roland Kay <roland.kay@ox.compsoc.net>
-
- ext/lame/gstlame.*: Fix leak (by calling lame_init_params() before lame_close()); handle
- Original commit message from CVS:
- Based on patch by: Roland Kay <roland.kay at ox compsoc net>
- * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
- (gst_lame_setup):
- * ext/lame/gstlame.h:
- Fix leak (by calling lame_init_params() before lame_close()); handle
- NULL return from lame_init() more gracefully. Fixes #385311.
-
-2006-12-14 09:57:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Back to CVS
- Original commit message from CVS:
- * configure.ac:
- Back to CVS
-
-=== release 0.10.5 ===
-
-2006-12-13 21:04:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-asf.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-siddec.xml:
- Release 0.10.5
- Original commit message from CVS:
- Release 0.10.5
-
-2006-12-12 21:09:16 +0000 David Schleef <ds@schleef.org>
-
- gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant to in the previous checkin. see #385192. You can have...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant
- to in the previous checkin. see #385192. You can have your
- cheese back now.
-
-2006-12-12 20:56:58 +0000 David Schleef <ds@schleef.org>
-
- gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads from the dereferenced integer, not the pointer itself. ...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads
- from the dereferenced integer, not the pointer itself. Fixes
- #385192.
- I'm takin ur cheese!
-
-2006-12-12 10:29:32 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- * ChangeLog:
- ChangeLog surgery: fix bug number
- Original commit message from CVS:
- ChangeLog surgery: fix bug number
-
-2006-12-12 10:24:40 +0000 Roland Kay <roland.kay@ox.compsoc.net>
-
- gst/realmedia/rmdemux.c: For version 4 streams, read the extra codec data size from the header instead of assuming it...
- Original commit message from CVS:
- Based on patch by: Roland Kay <roland.kay at ox compsoc net>
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
- For version 4 streams, read the extra codec data size from the
- header instead of assuming it is always 16 (also read it from the
- right position) (#384989). For version 4 and 5 streams, check that
- the specified extra codec data size doesn't make us read beyond the
- chunk boundary (#384989).
-
-2006-12-10 21:27:03 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/it.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2006-11-21 12:33:25 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Cosmetic changes: fix misleading debug statement, update comment, add cast.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf):
- Cosmetic changes: fix misleading debug statement, update
- comment, add cast.
-
-2006-11-21 12:15:58 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mpeg2dec/gstmpeg2dec.*: Align buffers to a 16 byte boundary so the altivec optimisations don't crash. Fixes #327350.
- Original commit message from CVS:
- Patch by: Sebastian Dröge <slomo@circular-chaos.org>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
- (gst_mpeg2dec_reset), (gst_mpeg2dec_alloc_sized_buf),
- (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Align buffers to a 16 byte boundary so the altivec optimisations
- don't crash. Fixes #327350.
-
-2006-11-20 15:52:42 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: The availability of extra codec data isn't something that warrants debug messages at WARN...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream):
- The availability of extra codec data isn't something that
- warrants debug messages at WARNING level (see #376958).
-
-2006-11-19 13:08:30 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Fix flow value combination; this fixes playbin/totem locking up if a VobSub file is specified as sub...
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
- (gst_dvd_demux_class_init), (gst_dvd_demux_combine_flows),
- (gst_dvd_demux_send_subbuffer):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
- (gst_mpeg_demux_init_stream), (gst_mpeg_demux_parse_packet),
- (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_combine_flows),
- (gst_mpeg_demux_send_subbuffer):
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
- (gst_mpeg_parse_chain):
- Fix flow value combination; this fixes playbin/totem locking up if
- a VobSub file is specified as subtitle file (#334322). Flow value
- combination should only happen once we are fairly sure we've got all
- pads that are available for now. Since there isn't a well-specified
- time when this is the case in MPEG, we'll just assume this is the
- case once there has been a certain number of packets for each
- stream we've found so far.
-
-2006-11-15 13:57:21 +0000 Jan Arne Petersen <jpetersen@jpetersen.org>
-
- ext/mpeg2dec/gstmpeg2dec.c: Simplify the framerate code and support more framerates. Fixes #361584.
- Original commit message from CVS:
- Patch by: Jan Arne Petersen <jpetersen at jpetersen dot org>
- * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence), (handle_slice):
- Simplify the framerate code and support more framerates. Fixes #361584.
-
-2006-11-15 11:41:39 +0000 Sebastian Dröge <slomo@circular-chaos.org>
-
- ext/mpeg2dec/gstmpeg2dec.c: Fix minor memleak when creating pads from static pad templates (#369627).
- Original commit message from CVS:
- Patch by: Sebastian Dröge <slomo@circular-chaos.org>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init):
- Fix minor memleak when creating pads from static pad templates (#369627).
- * tests/check/Makefile.am:
- * tests/check/elements/.cvsignore:
- * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
- (cleanup_mpeg2dec), (GST_START_TEST), (mpeg2dec_suite), (main):
- Add unit tests for mpeg2dec (#369627).
-
-2006-11-14 10:31:11 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- * ChangeLog:
- give credit
- Original commit message from CVS:
- give credit
-
-2006-11-14 10:29:37 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/lame/gstlame.*: Make lame timestamp flushed eos buffer by some additional timestamp accounting. Fixes #374760.
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
- (gst_lame_change_state):
- * ext/lame/gstlame.h:
- Make lame timestamp flushed eos buffer by some additional timestamp
- accounting. Fixes #374760.
-
-2006-11-13 17:01:15 +0000 Michael Smith <msmith@xiph.org>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Make timestamp handling in mp3parse saner; now works for at least simple cases.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
- (gst_mp3parse_init), (gst_mp3parse_dispose),
- (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
- (gst_mp3parse_change_state):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Make timestamp handling in mp3parse saner; now works for at least
- simple cases.
-
-2006-11-13 16:23:22 +0000 Michael Smith <msmith@xiph.org>
-
- gst/mpegaudioparse/: Bring mp3parse into the 21st century.
- Original commit message from CVS:
- * gst/mpegaudioparse/Makefile.am:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
- (gst_mp3parse_reset), (gst_mp3parse_init), (gst_mp3parse_dispose),
- (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
- (gst_mp3parse_change_state), (plugin_init):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Bring mp3parse into the 21st century.
- Use its own debug category, use gstadapter, format nicely to 80
- columns, and fix incorrect handling of 32 kHz and less files.
-
-2006-11-03 09:52:12 +0000 Sebastian Droege <slomo@ubuntu.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: libmpeg2 requires its output buffers to start at a 16byte aligned address or the altivec ...
- Original commit message from CVS:
- Patch by: Sebastian Droege <slomo at ubuntu dot com>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
- (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
- * ext/mpeg2dec/gstmpeg2dec.h:
- libmpeg2 requires its output buffers to start at a 16byte aligned
- address or the altivec optimizations will explode.
-
-2006-11-02 14:43:11 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/cdio/: Move CD-TEXT utility function into common file so it can also be used by a future cdioparanoiasrc.
- Original commit message from CVS:
- * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext):
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
- Move CD-TEXT utility function into common file so it can also be
- used by a future cdioparanoiasrc.
-
-2006-10-19 10:17:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging information (fixes #340433).
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
- Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging
- information (fixes #340433).
-
-2006-10-16 18:07:23 +0000 Josep Torra Valles <josep@fluendo.com>
-
- gst/: Misc. fixes for problems discovered by Forte (different return types in function declaration and definition, po...
- Original commit message from CVS:
- Patch by: Josep Torra Valles <josep at fluendo com>
- * gst/iec958/ac3_padder.c: (ac3p_init):
- * gst/mpegstream/gstmpegparse.c:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse__rmf),
- (gst_rmdemux_parse_prop), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_parse_indx), (gst_rmdemux_parse_indx_data),
- (gst_rmdemux_parse_data), (gst_rmdemux_parse_cont),
- (gst_rmdemux_parse_packet):
- Misc. fixes for problems discovered by Forte (different return types
- in function declaration and definition, pointer arithmetics with
- void pointers). Fixes #362639.
-
-2006-10-13 19:11:26 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Don't announce audio or subtitle streams that aren't really present, it makes dvddemux crea...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
- Don't announce audio or subtitle streams that aren't really present,
- it makes dvddemux create pads that will never carry any data, which
- is not good.
-
-2006-10-13 14:45:11 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: Round up not allowed bitrates to the next higher allowed one (Closes: #361140).
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_set_property):
- Round up not allowed bitrates to the next higher allowed one
- (Closes: #361140).
-
-2006-10-13 14:19:24 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Add docs for lame and lame to docs. Specify allowed bitrates in the properties description (#361140). Canonicalise ob...
- 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:
- * ext/lame/gstlame.c: (gst_lame_class_init):
- * ext/lame/gstlame.h:
- Add docs for lame and lame to docs. Specify allowed bitrates
- in the properties description (#361140). Canonicalise object
- property names (ie. use hyphen instead of underscore).
- * 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-siddec.xml:
- Update version to CVS.
-
-2006-10-13 10:00:27 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Add i18n magic to lame plugin. Throw decent error message when we fail to setup the encoder (#361140, 361151); misc. ...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
- (gst_lame_set_property), (gst_lame_get_property), (gst_lame_chain),
- (plugin_init):
- * po/POTFILES.in:
- Add i18n magic to lame plugin. Throw decent error message when we
- fail to setup the encoder (#361140, 361151); misc. minor clean-ups.
-
-2006-10-10 17:02:05 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rdtdepay.c: Change caps to x-rdt, because it's not x-rtp.
- Original commit message from CVS:
- * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
- (gst_rdt_depay_init), (gst_rdt_depay_setcaps),
- (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
- Change caps to x-rdt, because it's not x-rtp.
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet),
- (gst_rmdemux_plugin_init):
- Activate pad before adding to the element.
- Return the combined stream return values after pad_alloc.
-
-2006-10-10 16:58:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Add some debugging to timestamp handling.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Add some debugging to timestamp handling.
- Make sure we don't convert invalid timestamps.
-
-2006-10-09 12:09:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/: Active pads before adding them to the running element. Don't assert on non-BYTE format newsegment events in asf...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
- (gst_asf_demux_setup_pad), (gst_asf_demux_process_segment):
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_get_subpicture_stream):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream),
- (gst_mpeg_demux_get_private_stream):
- Active pads before adding them to the running element. Don't assert
- on non-BYTE format newsegment events in asfdemux.
-
-2006-10-05 17:07:52 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Printf format fixes.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title),
- (gst_dvd_read_src_handle_seek_event):
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_parse_data):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_loop),
- (gst_rmdemux_parse_packet):
- Printf format fixes.
-
-2006-10-03 10:55:42 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/: Added RDT depayloader.
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
- (gst_rdt_depay_class_init), (gst_rdt_depay_init),
- (gst_rdt_depay_setcaps), (gst_rdt_depay_chain),
- (gst_rdt_depay_set_property), (gst_rdt_depay_get_property),
- (gst_rdt_depay_change_state), (gst_rdt_depay_plugin_init):
- * gst/realmedia/rdtdepay.h:
- Added RDT depayloader.
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_plugin_init), (plugin_init):
- Remove unused function.
- Added some more mime-types.
-
-2006-09-28 21:44:49 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.c: If an incoming timestamp is within one sample of our current timestamp, then keep it....
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (update_timestamps):
- If an incoming timestamp is within one sample of our current
- timestamp, then keep it. This prevents imprecision in the
- PTS (which only has 90khz granularity) from affecting our stream.
-
-2006-09-28 09:16:38 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegparse.c: Reflow code so that compiler doesn't complain about possible use of uninitialised vari...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
- Reflow code so that compiler doesn't complain about possible use
- of uninitialised variable any longer; but just in case, initialise
- it anyway; also take object ref in query function and do peer pad
- stuff in a more thread-safe way.
-
-2006-09-27 09:54:01 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/dvdread/dvdreadsrc.c: Init a variable to make compilers happy.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
- Init a variable to make compilers happy.
-
-2006-09-21 13:34:59 +0000 Martin Zlomek <martin.zlomek@itonis.tv>
-
- gst/mpegstream/: Send newsegment updates for sparse streams (#350778).
- Original commit message from CVS:
- Patch by: Martin Zlomek <martin dot zlomek at itonis dot tv>
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_reset),
- (gst_dvd_demux_sync_stream_to_time):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
- (gst_mpeg_demux_synchronise_pads),
- (gst_mpeg_demux_sync_stream_to_time):
- Send newsegment updates for sparse streams (#350778).
-
-2006-09-20 16:18:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- ext/dvdread/dvdreadsrc.c: fix compile warning
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
- fix compile warning
-
-2006-09-20 16:16:18 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- bump the nano bitches
- Original commit message from CVS:
- bump the nano bitches
-
-2006-09-20 11:55:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: As another attempt, synaesthesia can be enabled by passing
- Original commit message from CVS:
- * configure.ac:
- As another attempt, synaesthesia can be enabled by passing
- --with-plugins="synaesthesia" to configure
-
-2006-09-20 11:12:22 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
- Original commit message from CVS:
- * configure.ac:
- Don't build synaesthesia by default, until someone confirms that it
- is okay (filed as #356882)
-
-2006-09-20 11:11:26 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
- Original commit message from CVS:
- * configure.ac:
- Don't build synaesthesia by default, until someone confirms that it
- is okay (filed as #356882)
-
-2006-09-18 12:29:09 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Port synaesthesia.
- Original commit message from CVS:
- * configure.ac:
- * gst/synaesthesia/Makefile.am:
- * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
- (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
- (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
- (gst_synaesthesia_change_state), (plugin_init):
- Port synaesthesia.
-
-2006-09-16 21:58:48 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- More G_OBJECT macro fixing.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c:
- * gst/mpegstream/gstrfc2250enc.h:
- * gst/synaesthesia/gstsynaesthesia.c:
- More G_OBJECT macro fixing.
-
-2006-09-15 16:14:15 +0000 Yves Lefebvre <ivanohe@abacom.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Fix initialisation dummy buffer, the offsets are relative to the start of the buffers. Fi...
- Original commit message from CVS:
- Patch by: Yves Lefebvre <ivanohe at abacom dot com>
- * ext/mpeg2dec/gstmpeg2dec.c: (init_dummybuf):
- Fix initialisation dummy buffer, the offsets are relative to the start
- of the buffers. Fixes #356004.
-
-2006-09-12 10:14:29 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- update spec file
- Original commit message from CVS:
- update spec file
-
-2006-09-09 15:22:58 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Add convert query (needed for later when we just operate in time format and let the base so...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
- Add convert query (needed for later when we just operate in time
- format and let the base source class handle all the seeking stuff).
-
-2006-09-07 16:05:31 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfdemux.c: Erm, lets properly fix it. The only non-text tag that we support is the track-number and ...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_get_gst_tag_from_tag_name),
- (gst_asf_demux_process_ext_content_desc):
- Erm, lets properly fix it. The only non-text tag that we support is
- the track-number and that is an UINT. asfdemux was returning a GValue
- initialized as INT. Further the Track and not the TrackNumber tag
- (the latter is a string too).
-
-2006-09-07 14:08:42 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfdemux.c: Skip tags that are unknown (was producing an uninialized GValue).
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_get_gst_tag_from_tag_name),
- (gst_asf_demux_process_ext_content_desc):
- Skip tags that are unknown (was producing an uninialized GValue).
-
-2006-09-01 16:21:43 +0000 from Michal Benes <michal.benes@itonis.tv>
-
- ext/a52dec/gsta52dec.*: Add two things to a52dec: configure the exact output format for ac3 decoding through properti...
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_mode_get_type),
- (gst_a52dec_class_init), (gst_a52dec_init), (gst_a52dec_channels),
- (gst_a52dec_handle_frame), (gst_a52dec_change_state),
- (gst_a52dec_set_property), (gst_a52dec_get_property):
- * ext/a52dec/gsta52dec.h:
- Patch from from Michal Benes <michal.benes@itonis.tv>:
- Add two things to a52dec: configure the exact output format for ac3
- decoding through properties, if desired.
- By default, configure an output format preferred by downstream. Now
- that audioconvert lists caps by preference, this means that a52dec
- can do downmixing (iff required) rather than audioconvert, so it can
- use the ac3 downmix levels from the bitstream.
-
-2006-08-31 13:04:31 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- Add missing GST_LIBS to the link flags
- Original commit message from CVS:
- * ext/lame/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdsub/Makefile.am:
- * gst/mpegaudioparse/Makefile.am:
- Add missing GST_LIBS to the link flags
-
-2006-08-29 13:28:41 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
- Original commit message from CVS:
- * configure.ac:
- Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
-
-2006-08-27 20:46:54 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/mpegstream/gstmpegpacketize.c: fix build for debug disabled
- Original commit message from CVS:
- * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new):
- fix build for debug disabled
-
-2006-08-22 15:52:16 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Use static pad templates with ANY caps for the source pads for simplicity and to avoid wa...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
- Use static pad templates with ANY caps for the source pads for
- simplicity and to avoid warnings when creating pads for unhandled
- codec IDs (#351795).
-
-2006-08-16 10:34:57 +0000 Michal Benes <michal.benes@itonis.tv>
-
- ext/mad/gstmad.c: Fix timestamping in mad by only activating a new timestamp when the previous frame has been decoded...
- Original commit message from CVS:
- Patch by: Michal Benes <michal dot benes at itonis dot tv>
- * ext/mad/gstmad.c: (gst_mad_chain):
- Fix timestamping in mad by only activating a new timestamp when the
- previous frame has been decoded. Fixes #350723.
- Also clean up some of the non fatal warnings when the input buffer is
- too small to decode a header.
-
-=== release 0.10.4 ===
-
-2006-08-14 11:15:09 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * 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-rmdemux.xml:
- * docs/plugins/inspect/plugin-siddec.xml:
- releasing 0.10.4
- Original commit message from CVS:
- releasing 0.10.4
-
-2006-08-14 11:06:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/it.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- * po/vi.po:
- Update .po files
- Original commit message from CVS:
- Update .po files
-
-2006-08-14 10:19:41 +0000 Wim Taymans <wim@fluendo.com>
-
- ext/a52dec/gsta52dec.c: Instead of forwarding the event in the wrong format, unref it and set a boolean that we still...
- Original commit message from CVS:
- Patch by: Wim Taymans <wim at fluendo dot com>
- * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
- Instead of forwarding the event in the wrong format, unref it and set
- a boolean that we still need to send it in the streaming thread.
- Fixes #350554
-
-2006-08-14 09:50:26 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- ext/dvdread/dvdreadsrc.c: Put debug category initialization before use of GST_DEBUG, in order to remove a fatal warni...
- Original commit message from CVS:
- Patch by: Edward Hervey (edward at fluendo dot com)
- * ext/dvdread/dvdreadsrc.c: (plugin_init):
- Put debug category initialization before use of GST_DEBUG, in order
- to remove a fatal warning. Fixes #350895
-
-2006-08-08 13:23:27 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/dvdsub/gstdvdsubdec.c: Set rank to NONE for the time being until we make playbin handle subtitle pictures again (...
- Original commit message from CVS:
- * gst/dvdsub/gstdvdsubdec.c: (plugin_init):
- Set rank to NONE for the time being until we make playbin handle
- subtitle pictures again (dvdsubdec seems to be a bit shaky at
- times when seeking, so it's probably better if it doesn't get
- autoplugged for the time being).
-
-2006-08-07 19:01:40 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Handle audio streams with stream_version 3 properly; warn about unknown stream versions; han...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_mdpr):
- Handle audio streams with stream_version 3 properly; warn about
- unknown stream versions; handle unknown fourccs a tad more
- gracefully (setting bogus caps). Also, use GST_FOURCC_ARGS
- with GST_FOURCC_FORMAT.
-
-2006-08-07 16:25:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Error out properly if this is an interactive DVD (fixes #345694).
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
- Error out properly if this is an interactive DVD (fixes #345694).
-
-2006-08-07 16:18:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/a52dec/gsta52dec.c: When the first_access is 1 or 0, we should copy the timestamp from the incoming buffer if the...
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
- When the first_access is 1 or 0, we should copy the timestamp from
- the incoming buffer if there is one.
-
-2006-08-07 14:01:33 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/a52dec/gsta52dec.c: Use GST_ELEMENT_ERROR for error reporting; post errors in some more places; remove superfluou...
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
- (gst_a52dec_reneg), (gst_a52dec_handle_frame), (gst_a52dec_chain):
- Use GST_ELEMENT_ERROR for error reporting; post errors in some
- more places; remove superfluous newlines from debug statements.
-
-2006-08-07 09:17:01 +0000 Frédéric Riss <frederic.riss@gmail.com>
-
- gst/dvdsub/gstdvdsubdec.c: which happens when you use macros that got changed during the last unstable cycle because ...
- Original commit message from CVS:
- Patch by: Frédéric Riss <frederic.riss at gmail com>
- * gst/dvdsub/gstdvdsubdec.c: (gst_send_subtitle_frame):
- Don't set negative durations on outgoing buffers (#350044),
- which happens when you use macros that got changed during
- the last unstable cycle because they were thought not to
- be used anywhere.
-
-2006-08-06 19:47:40 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.*: Add basic support for time-based seeking; set timestamps on outgoing buffers if we have the...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_stop),
- (gst_dvd_read_src_goto_chapter),
- (gst_dvd_read_src_get_chapter_starts),
- (gst_dvd_read_src_goto_title), (gst_dvd_read_src_get_next_cell),
- (gst_dvd_read_src_get_time_for_sector),
- (gst_dvd_read_src_get_sector_from_time), (gst_dvd_read_src_read),
- (gst_dvd_read_src_handle_seek_event), (gst_dvd_read_src_do_seek),
- (gst_dvd_read_src_goto_sector):
- * ext/dvdread/dvdreadsrc.h:
- Add basic support for time-based seeking; set timestamps on
- outgoing buffers if we have them; create table with
- chapter to time mapping when opening a title; rename
- gst_dvd_read_src_get_next_cell_for() to _get_next_cell() and
- make it take an explicit pgc argument; fix up some debugging
- messages so that title/chapter numbers are printed as starting
- from 1 for easier readability.
-
-2006-08-04 13:05:01 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/: Factor out some code into rmutils.[ch]; when reading strings, don't read beyond the available data; r...
- Original commit message from CVS:
- * gst/realmedia/Makefile.am:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_parse_cont):
- * gst/realmedia/rmutils.c: (gst_rm_utils_read_string8),
- (gst_rm_utils_read_string16), (gst_rm_utils_read_tags):
- * gst/realmedia/rmutils.h:
- Factor out some code into rmutils.[ch]; when reading
- strings, don't read beyond the available data; read
- metadata strings correctly (string length is 16 bits
- here, not just 8).
-
-2006-07-31 09:53:05 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- Fix dist by including gst-libs/
- Original commit message from CVS:
- * Makefile.am:
- * configure.ac:
- * gst/asfdemux/gstasfdemux.c:
- Fix dist by including gst-libs/
-
-2006-07-29 11:20:30 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Make custom error messages translatable.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (plugin_init):
- * po/POTFILES.in:
- Make custom error messages translatable.
- * gst/asfdemux/gstasf.c: (plugin_init):
- Remove setlocale() call, doesn't seem to be needed or recommended for
- plugins, at least not according to gstreamer/docs/random/i18n.
-
-2006-07-28 15:15:15 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
- Error out when the stream is encrypted (rather than feeding
- garbage to the decoders). Fixes #349025.
-
-2006-07-28 15:11:42 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Add/enable autofoo magic for translations.
- Original commit message from CVS:
- * Makefile.am:
- * autogen.sh:
- * configure.ac:
- * po/POTFILES.in:
- Add/enable autofoo magic for translations.
-
-2006-07-28 13:28:19 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Don't leak streams, strings or caps. Get rid of unnecessary getcaps() function.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
- (gst_rmdemux_change_state), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_cont), (gst_rmdemux_descramble_cook_audio),
- (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
- Don't leak streams, strings or caps. Get rid of unnecessary
- getcaps() function.
-
-2006-07-27 20:34:25 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Descramble cook audio streams before sending them to the decoder. Fixes #347292.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
- (gst_rmdemux_init), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_data),
- (gst_rmdemux_stream_clear_cached_subpackets),
- (gst_rmdemux_descramble_cook_audio),
- (gst_rmdemux_descramble_dnet_audio),
- (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
- Descramble cook audio streams before sending them to the
- decoder. Fixes #347292.
- Also miscellaneous clean-ups and log-level changes.
-
-2006-07-26 17:09:04 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
-
- ext/lame/gstlame.c: Fix lame putting lots of 0's at start of mp3. Fixes bug #348786.
- Original commit message from CVS:
- 2006-07-26 Zaheer Abbas Merali <zaheerabbas at merali dot org>
- * ext/lame/gstlame.c: (gst_lame_setup):
- Fix lame putting lots of 0's at start of mp3. Fixes bug #348786.
-
-2006-07-21 11:01:55 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/sidplay/gstsiddec.*: Remove old metadata thing.
- Original commit message from CVS:
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- Remove old metadata thing.
-
-2006-07-15 13:33:38 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Find language codes for audio streams if they are available.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_get_ext_stream_props_for_stream),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_change_state):
- Find language codes for audio streams if they are available.
-
-2006-07-14 13:02:53 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Parse extended stream properties objects and stream objects hidden inside them (but delay creation of ...
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_obj_stream),
- (gst_asf_demux_process_stream),
- (gst_asf_demux_process_language_list),
- (gst_asf_demux_process_ext_stream_props),
- (gst_asf_demux_process_queued_extended_stream_objects),
- (gst_asf_demux_process_object), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Parse extended stream properties objects and stream objects
- hidden inside them (but delay creation of the appropriate
- pads until after all the 'normal' stream objects have been
- dealt with) (#343763). Also parse language list object.
-
-2006-07-13 11:28:32 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.*: Cleanups, use GstSegment for seeking.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
- (gst_rmdemux_finalize), (gst_rmdemux_src_event),
- (find_seek_offset_time), (gst_rmdemux_perform_seek),
- (gst_rmdemux_src_query), (gst_rmdemux_change_state),
- (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
- (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_combine_flows), (gst_rmdemux_parse_packet):
- * gst/realmedia/rmdemux.h:
- Cleanups, use GstSegment for seeking.
- Fix error handling.
- Combine flow return from all streams.
-
-2006-07-11 22:46:47 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/cdio/gstcdiocddasrc.c: Remove g_assert that shouldn't be there.
- Original commit message from CVS:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_close):
- Remove g_assert that shouldn't be there.
-
-2006-07-10 11:52:58 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Fix refcounting when cropping. Fixes #341677.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
- Fix refcounting when cropping. Fixes #341677.
-
-2006-07-09 14:07:31 +0000 Grzegorz Lukasik <hauserx@gmail.com>
-
- gst/asfdemux/gstasfdemux.c: Fix typo. Closes #347029.
- Original commit message from CVS:
- Patch by: Grzegorz Lukasik <hauserx at gmail dot com>
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_segment):
- Fix typo. Closes #347029.
-
-2006-07-08 20:29:56 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Skip chunks for unknown streams properly. Fixes broken sound and/or video for files that ...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
- Skip chunks for unknown streams properly. Fixes broken sound
- and/or video for files that have additional streams that
- we don't recognise yet (e.g. if they are embedded in extended
- stream properties). Partly fixes #343763.
-
-2006-07-07 19:26:40 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/: Add some more GUIDs and make debug log more readable and easier to follow when parsing the headers.
- Original commit message from CVS:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_identify_guid),
- (gst_asf_demux_process_header), (gst_asf_demux_push_obj),
- (gst_asf_demux_pop_obj), (gst_asf_demux_process_object),
- (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- Add some more GUIDs and make debug log more readable
- and easier to follow when parsing the headers.
-
-2006-06-30 11:26:22 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.*: Rewrite seeking code and make seeking in DVDs work (#337834).
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
- (gst_dvd_read_src_is_seekable), (gst_dvd_read_src_class_init),
- (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
- (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event),
- (gst_dvd_read_src_do_seek), (gst_dvd_read_src_src_event):
- * ext/dvdread/dvdreadsrc.h:
- Rewrite seeking code and make seeking in DVDs work (#337834).
-
-2006-06-29 14:31:55 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- autogen.sh: Check for automake-1.9 as well.
- Original commit message from CVS:
- * autogen.sh:
- Check for automake-1.9 as well.
-
-2006-06-29 12:25:15 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Make check stronger.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_is_nav_pack):
- Make check stronger.
-
-2006-06-28 11:20:03 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.*: Handle unknown codec IDs/fourccs properly (#345879); send tag events after newsegment eve...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
- (gst_asf_demux_push_buffer):
- * gst/asfdemux/gstasfdemux.h:
- Handle unknown codec IDs/fourccs properly (#345879); send tag
- events after newsegment event; fix use of GST_FOURCC_FORMAT
- macro.
-
-2006-06-23 16:29:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/a52dec/gsta52dec.c: Call the channel positions get_type() method in plugin_init to ensure that it isn't simultane...
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (plugin_init):
- Call the channel positions get_type() method in plugin_init
- to ensure that it isn't simultaneously called later from
- multiple threads.
-
-2006-06-23 12:24:56 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Also flush packetizer cache when we get a buffer that has the
- Original commit message from CVS:
- * gst/mpegstream/gstmpegpacketize.c:
- (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
- Also flush packetizer cache when we get a buffer that has the
- DISCONT flag set; update current byte position from buffer
- offset after a flush.
-
-2006-06-23 11:22:04 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetiz...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new),
- (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy),
- (gst_mpeg_packetize_read):
- * gst/mpegstream/gstmpegpacketize.h:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
- (gst_mpeg_parse_change_state):
- Flush packetizer cache when we get a FLUSH_STOP event;
- remove unused source pad member from packetizer; add debug
- category for packetizer.
-
-2006-06-23 09:28:28 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/a52dec/gsta52dec.c: Treat dual-mono as stereo. It should really be output on 2 separate pads, but isn't for now.
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (plugin_init):
- Treat dual-mono as stereo. It should really be output on 2 separate
- pads, but isn't for now.
-
-2006-06-19 15:16:43 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Assume 4:3 DAR rather than 4:3 PAR (#345184).
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
- Assume 4:3 DAR rather than 4:3 PAR (#345184).
-
-2006-06-19 11:59:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us any PAR whatsoever (rathe...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
- Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us
- any PAR whatsoever (rather than using 0/0, which will lead to
- an abort later on). Fixes #345184.
-
-2006-06-17 19:35:41 +0000 Michael Dominic K <mdk@mdk.org.pl>
-
- ext/mad/gstmad.c: Send newsegment event before calling gst_pad_alloc_buffer_and_set_caps(), makes mad behave better i...
- Original commit message from CVS:
- Patch by: Michael Dominic K. < mdk at mdk org pl>
- * ext/mad/gstmad.c: (gst_mad_chain):
- Send newsegment event before calling
- gst_pad_alloc_buffer_and_set_caps(), makes mad behave better
- in connection with pad blocking (#342594). While we're at it,
- do some minor clean-ups.
-
-2006-06-17 14:48:04 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Fix --disable-external (can't set conditionals conditionally, #343602).
- Original commit message from CVS:
- * configure.ac:
- Fix --disable-external (can't set conditionals conditionally,
- #343602).
-
-2006-06-15 17:10:09 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/a52dec/Makefile.am: ... and then he said "When you go and fix the build you better make sure you have some spare ...
- Original commit message from CVS:
- * ext/a52dec/Makefile.am:
- ... and then he said "When you go and fix the build you
- better make sure you have some spare backslashes in your
- pocket".
-
-2006-06-13 15:46:09 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/sidplay/gstsiddec.cc: Fix copyright, email addresses and descriptions.
- Original commit message from CVS:
- * ext/sidplay/gstsiddec.cc:
- Fix copyright, email addresses and descriptions.
- Use saner defaults for arguments. Fixes #344667.
- constify some stuff.
- Fix memleaks.
- Add tags.
- Fix negotiation to do mono/44100 by default.
- Post error messages.
- Use _scale_int where possible.
-
-2006-06-12 14:09:20 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/dvdnav/.cvsignore: More ignore
- Original commit message from CVS:
- * ext/dvdnav/.cvsignore:
- More ignore
-
-2006-06-12 13:49:42 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- tests/check/elements/amrnbenc.c: Init memory before feeding it to the encoder to make the valgrind test succeed.
- Original commit message from CVS:
- * tests/check/elements/amrnbenc.c: (push_data):
- Init memory before feeding it to the encoder to make
- the valgrind test succeed.
-
-2006-06-12 13:27:18 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/.cvsignore: More ignore
- Original commit message from CVS:
- * gst/asfdemux/.cvsignore:
- More ignore
-
-2006-06-11 20:38:54 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- .cvsignore: Ignore files generated by 'make dist'.
- Original commit message from CVS:
- * .cvsignore:
- Ignore files generated by 'make dist'.
-
-2006-06-11 17:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- update build files
- Original commit message from CVS:
- * autogen.sh:
- * configure.ac:
- * ext/a52dec/Makefile.am:
- * ext/dvdnav/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/lame/Makefile.am:
- * ext/mad/Makefile.am:
- * ext/mpeg2dec/Makefile.am:
- * ext/sidplay/Makefile.am:
- update build files
-
-2006-06-11 13:57:18 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- autogen.sh: require am17
- Original commit message from CVS:
- * autogen.sh:
- require am17
- * configure.ac:
- * ext/annodex/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/dv/Makefile.am:
- * ext/esd/Makefile.am:
- * ext/flac/Makefile.am:
- * ext/gdk_pixbuf/Makefile.am:
- * ext/ladspa/Makefile.am:
- * ext/libcaca/Makefile.am:
- * ext/speex/Makefile.am:
- * ext/taglib/Makefile.am:
- * sys/oss/Makefile.am:
- * sys/sunaudio/Makefile.am:
- * sys/ximage/Makefile.am:
- clean up build further
-
-2006-06-07 17:05:48 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Simplify and don't leak our buffer pool.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
- (gst_mpeg2dec_reset), (clear_buffers), (handle_picture),
- (gst_mpeg2dec_sink_convert), (gst_mpeg2dec_src_convert),
- (gst_mpeg2dec_change_state):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Simplify and don't leak our buffer pool.
- Use _scale_int.
- Remove unfixed bug number from previous ChangeLog entry.
-
-2006-06-07 16:15:42 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Fix padtemplate as we can now do fractional framerates.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
- (gst_mpeg2dec_class_init), (gst_mpeg2dec_init),
- (gst_mpeg2dec_finalize), (gst_mpeg2dec_reset),
- (gst_mpeg2dec_qos_reset), (gst_mpeg2dec_alloc_buffer),
- (gst_mpeg2dec_negotiate_format), (init_dummybuf),
- (handle_sequence), (handle_picture), (handle_slice),
- (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
- (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Fix padtemplate as we can now do fractional framerates.
- Small cleanups.
- Use GstSegment.
- Add simple frame dropping QoS.
- Precalc buffer output sizes and UV offsets.
- Always give libmpeg2 a valid fbuf when it wants one.
- don't trust libmpeg to discard our buffers but manage it
- ourselves.
- Fixes #343627, #327350, #335288
-
-2006-06-05 20:57:12 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- win32/MANIFEST: Add a manifest for futures ugly win32 releases.
- Original commit message from CVS:
- * win32/MANIFEST:
- Add a manifest for futures ugly win32 releases.
- * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
- Move bufcaps declaration at the begining of the instructions
- block.
-
-2006-06-01 22:00:26 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
- Original commit message from CVS:
- * ext/alsaspdif/alsaspdifsink.h:
- * ext/amrwb/gstamrwbdec.h:
- * ext/amrwb/gstamrwbenc.h:
- * ext/amrwb/gstamrwbparse.h:
- * ext/arts/gst_arts.h:
- * ext/artsd/gstartsdsink.h:
- * ext/audiofile/gstafparse.h:
- * ext/audiofile/gstafsink.h:
- * ext/audiofile/gstafsrc.h:
- * ext/audioresample/gstaudioresample.h:
- * ext/bz2/gstbz2dec.h:
- * ext/bz2/gstbz2enc.h:
- * ext/dirac/gstdiracdec.h:
- * ext/directfb/dfbvideosink.h:
- * ext/divx/gstdivxdec.h:
- * ext/divx/gstdivxenc.h:
- * ext/dts/gstdtsdec.h:
- * ext/faac/gstfaac.h:
- * ext/gsm/gstgsmdec.h:
- * ext/gsm/gstgsmenc.h:
- * ext/ivorbis/vorbisenc.h:
- * ext/libfame/gstlibfame.h:
- * ext/nas/nassink.h:
- * ext/neon/gstneonhttpsrc.h:
- * ext/polyp/polypsink.h:
- * ext/sdl/sdlaudiosink.h:
- * ext/sdl/sdlvideosink.h:
- * ext/shout/gstshout.h:
- * ext/snapshot/gstsnapshot.h:
- * ext/sndfile/gstsf.h:
- * ext/swfdec/gstswfdec.h:
- * ext/tarkin/gsttarkindec.h:
- * ext/tarkin/gsttarkinenc.h:
- * ext/theora/theoradec.h:
- * ext/wavpack/gstwavpackdec.h:
- * ext/wavpack/gstwavpackparse.h:
- * ext/xine/gstxine.h:
- * ext/xvid/gstxviddec.h:
- * ext/xvid/gstxvidenc.h:
- * gst/cdxaparse/gstcdxaparse.h:
- * gst/cdxaparse/gstcdxastrip.h:
- * gst/colorspace/gstcolorspace.h:
- * gst/festival/gstfestival.h:
- * gst/freeze/gstfreeze.h:
- * gst/gdp/gstgdpdepay.h:
- * gst/gdp/gstgdppay.h:
- * gst/modplug/gstmodplug.h:
- * gst/mpeg1sys/gstmpeg1systemencode.h:
- * gst/mpeg1videoparse/gstmp1videoparse.h:
- * gst/mpeg2sub/gstmpeg2subt.h:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- * gst/multifilesink/gstmultifilesink.h:
- * gst/overlay/gstoverlay.h:
- * gst/playondemand/gstplayondemand.h:
- * gst/qtdemux/qtdemux.h:
- * gst/rtjpeg/gstrtjpegdec.h:
- * gst/rtjpeg/gstrtjpegenc.h:
- * gst/smooth/gstsmooth.h:
- * gst/smoothwave/gstsmoothwave.h:
- * gst/spectrum/gstspectrum.h:
- * gst/speed/gstspeed.h:
- * gst/stereo/gststereo.h:
- * gst/switch/gstswitch.h:
- * gst/tta/gstttadec.h:
- * gst/tta/gstttaparse.h:
- * gst/videodrop/gstvideodrop.h:
- * gst/xingheader/gstxingmux.h:
- * sys/directdraw/gstdirectdrawsink.h:
- * sys/directsound/gstdirectsoundsink.h:
- * sys/dxr3/dxr3audiosink.h:
- * sys/dxr3/dxr3spusink.h:
- * sys/dxr3/dxr3videosink.h:
- * sys/qcam/gstqcamsrc.h:
- * sys/vcd/vcdsrc.h:
- Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-
-2006-06-01 21:11:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.h:
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.h:
- * ext/amrnb/amrnbparse.h:
- * ext/mpeg2dec/gstmpeg2dec.h:
- * ext/sidplay/gstsiddec.h:
- * gst/ac3parse/gstac3parse.h:
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/gstasfmux.h:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- * gst/iec958/ac3iec.h:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegclock.h:
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegparse.h:
- Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-
-2006-05-27 11:35:11 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- README: Replace current README (containing the release notes from some 0.9.x version) with a proper README taken from...
- Original commit message from CVS:
- * README:
- Replace current README (containing the release notes from
- some 0.9.x version) with a proper README taken from the core.
-
-2006-05-24 15:56:13 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/: Sortof first quick cleanup of all this mess...
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_event), (gst_amrnbdec_chain):
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_sink_event), (gst_amrnbparse_chain),
- (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
- * ext/amrnb/amrnbparse.h:
- Sortof first quick cleanup of all this mess...
- Don't crap out on empty and invalid FTs but treat them as
- empty packets, the decoder handles them fine.
- Fixes #342222.
-
-2006-05-22 08:24:09 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasf.c: Call gst_riff_init() so the riff debug category gets set up before it is being used.
- Original commit message from CVS:
- * gst/asfdemux/gstasf.c: (plugin_init):
- Call gst_riff_init() so the riff debug category gets set up
- before it is being used.
-
-2006-05-19 13:55:11 +0000 Michael Smith <msmith@xiph.org>
-
- gst/iec958/: Write rate into the caps, for the allowed ac3 rates. Some minor cleanups.
- Original commit message from CVS:
- * gst/iec958/ac3_padder.c: (ac3p_parse):
- * gst/iec958/ac3_padder.h:
- * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_set_property),
- (ac3iec_chain_raw), (ac3iec_change_state):
- * gst/iec958/ac3iec.h:
- Write rate into the caps, for the allowed ac3 rates. Some minor
- cleanups.
-
-2006-05-18 13:00:21 +0000 James Doc Livingston <doclivingston@gmail.com>
-
- ext/mad/gstid3tag.c: Do tag merging correctly (#339918). Output taglists properly in debug statements too while we're...
- Original commit message from CVS:
- Patch by: James "Doc" Livingston <doclivingston gmail com>
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_tag_to_render):
- Do tag merging correctly (#339918). Output taglists
- properly in debug statements too while we're at it.
-
-2006-05-11 16:17:44 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/a52dec/gsta52dec.c: Add more debug
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
- Add more debug
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
- (gst_dvdlpcmdec_init), (update_timestamps),
- (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
- (dvdlpcmdec_sink_event):
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- If we have a first_access offset but no current timestamp (might
- happen after a seek), then calculate a start time for the first
- portion so that it will align with the timestamp given for the
- first_access portion.
- If a new-segment arrives with format time, store the start
- time as a failsafe timestamp in case we never get any further
- timestamp info (unlikely)
- Mask out the 'frame number' section of the incoming header so
- that we don't consider it to be changing on every buffer and
- reset the caps constantly.
- Use gst_util_uint64_scale for duration calculation
-
-2006-05-11 14:34:10 +0000 Michael Smith <msmith@xiph.org>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.c: Fix timestamping for cases where the first_access parameter is 4.
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
- Fix timestamping for cases where the first_access parameter is 4.
- Ensure we don't overrun buffers in other cases.
-
-2006-05-10 14:40:03 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: Fix silly bug when reading metadata (#341254).
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_string):
- Fix silly bug when reading metadata (#341254).
-
-2006-05-08 11:57:26 +0000 Edward Hervey <bilboed@bilboed.com>
-
- autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize
- Original commit message from CVS:
- * autogen.sh: (CONFIGURE_DEF_OPT):
- libtoolize on Darwin/MacOSX is called glibtoolize
-
-2006-05-06 11:38:30 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.*: Remove tag writing from lame (which was completely broken anyway, #329184). Leaving GstTagSetter ...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_get_type),
- (gst_lame_release_memory), (gst_lame_init), (gst_lame_sink_event),
- (gst_lame_setup), (gst_lame_change_state):
- * ext/lame/gstlame.h:
- Remove tag writing from lame (which was completely broken
- anyway, #329184). Leaving GstTagSetter interface around for
- now, albeit non-functional. Should be removed completely
- in 0.11. Use the 'id3v2mux' plugin from -good for writing
- tags.
-
-2006-05-06 00:18:31 +0000 Maciej Katafiasz <mathrick@mathrick.org>
-
- * ChangeLog:
- * ext/dvdread/dvdreadsrc.c:
- * gst/asfdemux/gstasfdemux.c:
- Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
- Original commit message from CVS:
- Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
-
-2006-05-05 08:23:39 +0000 Andres Salomon <dilinger@debian.org>
-
- ext/lame/gstlame.c: Fix typo (comma vs. semicolon) (#340710).
- Original commit message from CVS:
- Patch by: Andres Salomon <dilinger at debian org>
- * ext/lame/gstlame.c: (gst_lame_sink_event):
- Fix typo (comma vs. semicolon) (#340710).
-
-2006-05-04 08:24:52 +0000 Lutz Müller <lutz@topfrose.de>
-
- ext/mad/gstmad.c: Make mad the second element to support the highly useful
- Original commit message from CVS:
- Patch by: Lutz Müller <lutz at topfrose de>
- * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query):
- Make mad the second element to support the highly useful
- FORMATS query (#340594)
-
-2006-05-02 10:28:48 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Remember the query duration format before passing it upstream since it could have been mo...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_sink_convert),
- (gst_mpeg2dec_src_query):
- Remember the query duration format before passing it upstream since it
- could have been modified.
- Add GST_WARNING_OBJECT in sink convert function to detail why the
- conversion didn't work.
-
-2006-04-25 21:56:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Define GstElementDetails as const and also static (when defined as global)
- Original commit message from CVS:
- * ext/amrwb/gstamrwbdec.c:
- * ext/amrwb/gstamrwbenc.c:
- * ext/amrwb/gstamrwbparse.c:
- * ext/arts/gst_arts.c:
- * ext/artsd/gstartsdsink.c:
- * ext/audiofile/gstafparse.c:
- * ext/audiofile/gstafsink.c:
- * ext/audiofile/gstafsrc.c:
- * ext/audioresample/gstaudioresample.c:
- * ext/bz2/gstbz2dec.c:
- * ext/bz2/gstbz2enc.c:
- * ext/cdaudio/gstcdaudio.c:
- * ext/directfb/dfbvideosink.c:
- * ext/divx/gstdivxdec.c:
- * ext/divx/gstdivxenc.c:
- * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
- * ext/faac/gstfaac.c: (gst_faac_base_init):
- * ext/faad/gstfaad.c:
- * ext/gsm/gstgsmdec.c:
- * ext/gsm/gstgsmenc.c:
- * ext/hermes/gsthermescolorspace.c:
- * ext/ivorbis/vorbisfile.c:
- * ext/lcs/gstcolorspace.c:
- * ext/libfame/gstlibfame.c:
- * ext/libmms/gstmms.c: (gst_mms_base_init):
- * ext/musepack/gstmusepackdec.c: (gst_musepackdec_base_init):
- * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
- * ext/nas/nassink.c: (gst_nassink_base_init):
- * ext/neon/gstneonhttpsrc.c:
- * ext/sdl/sdlaudiosink.c:
- * ext/sdl/sdlvideosink.c:
- * ext/shout/gstshout.c:
- * ext/snapshot/gstsnapshot.c:
- * ext/sndfile/gstsf.c:
- * ext/swfdec/gstswfdec.c:
- * ext/tarkin/gsttarkindec.c:
- * ext/tarkin/gsttarkinenc.c:
- * ext/theora/theoradec.c:
- * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
- * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
- * ext/xvid/gstxviddec.c:
- * ext/xvid/gstxvidenc.c:
- * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
- * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
- * gst/chart/gstchart.c:
- * gst/colorspace/gstcolorspace.c:
- * gst/deinterlace/gstdeinterlace.c:
- * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
- * gst/festival/gstfestival.c:
- * gst/filter/gstbpwsinc.c:
- * gst/filter/gstiir.c:
- * gst/filter/gstlpwsinc.c:
- * gst/freeze/gstfreeze.c:
- * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
- * gst/librfb/gstrfbsrc.c:
- * gst/mixmatrix/mixmatrix.c:
- * gst/mpeg1sys/gstmpeg1systemencode.c:
- * gst/mpeg1videoparse/gstmp1videoparse.c:
- * gst/mpeg2sub/gstmpeg2subt.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/multifilesink/gstmultifilesink.c:
- * gst/overlay/gstoverlay.c:
- * gst/passthrough/gstpassthrough.c:
- * gst/playondemand/gstplayondemand.c:
- * gst/qtdemux/qtdemux.c:
- * gst/rtjpeg/gstrtjpegdec.c:
- * gst/rtjpeg/gstrtjpegenc.c:
- * gst/smooth/gstsmooth.c:
- * gst/smoothwave/gstsmoothwave.c:
- * gst/spectrum/gstspectrum.c:
- * gst/speed/gstspeed.c:
- * gst/stereo/gststereo.c:
- * gst/switch/gstswitch.c:
- * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
- * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
- * gst/vbidec/gstvbidec.c:
- * gst/videocrop/gstvideocrop.c:
- * gst/videodrop/gstvideodrop.c:
- * gst/virtualdub/gstxsharpen.c:
- * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
- * gst/y4m/gsty4mencode.c:
- * sys/cdrom/gstcdplayer.c:
- * sys/directdraw/gstdirectdrawsink.c:
- * sys/directsound/gstdirectsoundsink.c:
- * sys/glsink/glimagesink.c:
- * sys/qcam/gstqcamsrc.c:
- * sys/v4l2/gstv4l2src.c:
- * sys/vcd/vcdsrc.c: (gst_vcdsrc_base_init):
- * sys/ximagesrc/ximagesrc.c:
- Define GstElementDetails as const and also static (when defined as
- global)
-
-2006-04-25 21:47:03 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Define GstElementDetails as const and also static (when defined as global)
- Original commit message from CVS:
- * ext/mad/gstid3tag.c:
- * ext/mad/gstmad.c:
- * gst/ac3parse/gstac3parse.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- Define GstElementDetails as const and also static (when defined as
- global)
-
-2006-04-25 21:39:40 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Define GstElementDetails as const and also static (when defined as global)
- Original commit message from CVS:
- * ext/aalib/gstaasink.c:
- * ext/annodex/gstcmmldec.c:
- * ext/annodex/gstcmmlenc.c:
- * ext/cairo/gsttextoverlay.c:
- * ext/cairo/gsttimeoverlay.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dv/gstdvdec.c:
- * ext/dv/gstdvdemux.c:
- * ext/esd/esdmon.c:
- * ext/esd/esdsink.c:
- * ext/flac/gstflacenc.c:
- * ext/flac/gstflactag.c:
- * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
- * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
- * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
- * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
- * ext/gdk_pixbuf/pixbufscale.c:
- * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
- * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
- * ext/jpeg/gstjpegdec.c:
- * ext/jpeg/gstjpegenc.c:
- * ext/jpeg/gstsmokedec.c:
- * ext/jpeg/gstsmokeenc.c:
- * ext/libcaca/gstcacasink.c:
- * ext/libmng/gstmngdec.c:
- * ext/libmng/gstmngenc.c:
- * ext/libpng/gstpngdec.c:
- * ext/libpng/gstpngenc.c:
- * ext/mikmod/gstmikmod.c:
- * ext/raw1394/gstdv1394src.c:
- * ext/shout2/gstshout2.c: (gst_shout2send_init):
- * ext/shout2/gstshout2.h:
- * ext/speex/gstspeexdec.c:
- * ext/speex/gstspeexenc.c:
- * gst/alpha/gstalpha.c:
- * gst/alpha/gstalphacolor.c:
- * gst/apetag/gstapedemux.c:
- * gst/auparse/gstauparse.c:
- * gst/autodetect/gstautoaudiosink.c:
- (gst_auto_audio_sink_base_init):
- * gst/autodetect/gstautovideosink.c:
- (gst_auto_video_sink_base_init):
- * gst/avi/gstavidemux.c: (gst_avi_demux_base_init):
- * gst/avi/gstavimux.c: (gst_avimux_base_init):
- * gst/cutter/gstcutter.c:
- * gst/debug/breakmydata.c:
- * gst/debug/efence.c:
- * gst/debug/gstnavigationtest.c:
- * gst/debug/gstnavseek.c:
- * gst/debug/negotiation.c:
- * gst/debug/progressreport.c:
- * gst/debug/testplugin.c:
- * gst/effectv/gstaging.c:
- * gst/effectv/gstdice.c:
- * gst/effectv/gstedge.c:
- * gst/effectv/gstquark.c:
- * gst/effectv/gstrev.c:
- * gst/effectv/gstshagadelic.c:
- * gst/effectv/gstvertigo.c:
- * gst/effectv/gstwarp.c:
- * gst/flx/gstflxdec.c:
- * gst/goom/gstgoom.c:
- * gst/icydemux/gsticydemux.c:
- * gst/id3demux/gstid3demux.c:
- * gst/interleave/deinterleave.c:
- * gst/interleave/interleave.c:
- * gst/law/alaw-decode.c: (gst_alawdec_base_init):
- * gst/law/alaw-encode.c: (gst_alawenc_base_init):
- * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
- * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
- * gst/level/gstlevel.c:
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
- * gst/median/gstmedian.c:
- * gst/monoscope/gstmonoscope.c:
- * gst/multipart/multipartdemux.c:
- * gst/multipart/multipartmux.c:
- * gst/oldcore/gstaggregator.c:
- * gst/oldcore/gstfdsink.c:
- * gst/oldcore/gstmd5sink.c:
- * gst/oldcore/gstmultifilesrc.c:
- * gst/oldcore/gstpipefilter.c:
- * gst/oldcore/gstshaper.c:
- * gst/oldcore/gststatistics.c:
- * gst/rtp/gstasteriskh263.c:
- * gst/rtp/gstrtpL16depay.c:
- * gst/rtp/gstrtpL16pay.c:
- * gst/rtp/gstrtpamrdepay.c:
- * gst/rtp/gstrtpamrpay.c:
- * gst/rtp/gstrtpdepay.c:
- * gst/rtp/gstrtpgsmpay.c:
- * gst/rtp/gstrtph263pay.c:
- * gst/rtp/gstrtph263pdepay.c:
- * gst/rtp/gstrtph263ppay.c:
- * gst/rtp/gstrtpilbcdepay.c:
- * gst/rtp/gstrtpmp4gpay.c:
- * gst/rtp/gstrtpmp4vdepay.c:
- * gst/rtp/gstrtpmp4vpay.c:
- * gst/rtp/gstrtpmpadepay.c:
- * gst/rtp/gstrtpmpapay.c:
- * gst/rtp/gstrtppcmadepay.c:
- * gst/rtp/gstrtppcmapay.c:
- * gst/rtp/gstrtppcmudepay.c:
- * gst/rtp/gstrtppcmupay.c:
- * gst/rtp/gstrtpspeexdepay.c:
- * gst/rtp/gstrtpspeexpay.c:
- * gst/rtsp/gstrtpdec.c:
- * gst/rtsp/gstrtspsrc.c:
- * gst/smpte/gstsmpte.c:
- * gst/udp/gstdynudpsink.c:
- * gst/udp/gstmultiudpsink.c:
- * gst/udp/gstudpsink.c:
- * gst/udp/gstudpsrc.c:
- * gst/videobox/gstvideobox.c:
- * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
- * gst/videofilter/gstvideobalance.c:
- * gst/videofilter/gstvideoflip.c:
- * gst/videofilter/gstvideotemplate.c:
- (gst_videotemplate_base_init):
- * gst/videomixer/videomixer.c:
- * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
- (gst_wavparse_class_init), (gst_wavparse_dispose),
- (gst_wavparse_reset), (gst_wavparse_init),
- (gst_wavparse_perform_seek), (gst_wavparse_peek_chunk_info),
- (gst_wavparse_peek_chunk), (gst_wavparse_stream_headers),
- (gst_wavparse_parse_stream_init), (gst_wavparse_send_event),
- (gst_wavparse_add_src_pad), (gst_wavparse_stream_data),
- (gst_wavparse_chain), (gst_wavparse_srcpad_event),
- (gst_wavparse_sink_activate), (gst_wavparse_sink_activate_pull),
- (gst_wavparse_change_state):
- * gst/wavparse/gstwavparse.h:
- * sys/oss/gstossmixerelement.c:
- * sys/oss/gstosssink.c:
- * sys/oss/gstosssrc.c:
- * sys/osxaudio/gstosxaudioelement.c:
- * sys/osxaudio/gstosxaudiosink.c:
- * sys/osxaudio/gstosxaudiosrc.c:
- * sys/sunaudio/gstsunaudiomixer.c:
- * sys/sunaudio/gstsunaudiosink.c:
- Define GstElementDetails as const and also static (when defined as
- global)
-
-2006-04-25 12:17:02 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdnav/dvdnavsrc.c: Fix name of custom event (use same as dvdreadsrc).
- Original commit message from CVS:
- * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_push_titlelang_event):
- Fix name of custom event (use same as dvdreadsrc).
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_chain),
- (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event):
- Fix event parsing (the event name is in the structure, not the
- name of the structure itself); also fix indentation after
- boilerplate macro.
-
-2006-04-23 09:49:14 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstid3tag.c: Change debug category to 'id3mux'.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (plugin_init):
- Change debug category to 'id3mux'.
-
-2006-04-22 18:49:01 +0000 Alexander Lancaster <alexl@users.sourceforge.net>
-
- ext/mad/gstid3tag.c: When acting as a muxer, set caps on outgoing buffers and set caps on source pad (fixes #323658)....
- Original commit message from CVS:
- Patch by: Alexander Lancaster <alexl at users sourceforge net>
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_caps), (gst_id3_tag_init),
- (gst_id3_tag_sink_event), (gst_id3_tag_src_link),
- (gst_id3_tag_chain):
- When acting as a muxer, set caps on outgoing buffers and set caps
- on source pad (fixes #323658). Remove unused application/x-gst-tags
- cruft from the 0.6 days.
-
-2006-04-21 20:37:43 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: .. and DEFAULT queries should work too. Use magic gst util scale functions in some places.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src),
- (gst_mad_src_query), (gst_mad_chain):
- .. and DEFAULT queries should work too. Use magic gst util scale
- functions in some places.
-
-2006-04-21 19:31:47 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Fix duration query in BYTES format (#336824).
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_src_query):
- Fix duration query in BYTES format (#336824).
-
-2006-04-21 12:40:41 +0000 Ed Catmur <ed@catmur.co.uk>
-
- ext/lame/gstlame.c: Don't crash if we get an EOS event before the encoder has been set up (#339287).
- Original commit message from CVS:
- Patch by: Ed Catmur <ed at catmur dot co dot uk>
- * ext/lame/gstlame.c: (gst_lame_sink_event):
- Don't crash if we get an EOS event before the encoder
- has been set up (#339287).
-
-2006-04-21 11:17:08 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/dvdread/dvdreadsrc.c: Move errors out of the normal code flow.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_start),
- (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read),
- (gst_dvd_read_src_create), (gst_dvd_read_src_goto_sector):
- Move errors out of the normal code flow.
- Don't send eos, basesrc will do that for us when needed.
-
-2006-04-21 10:50:17 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegstream/: Do state changes correctly
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_change_state):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_change_state):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_change_state):
- Do state changes correctly
-
-2006-04-13 19:08:20 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Can't use gst_pad_alloc_buffer*() when we are going to crop the image before sending it o...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf),
- (gst_mpeg2dec_alloc_buffer):
- Can't use gst_pad_alloc_buffer*() when we are going to crop
- the image before sending it out. Downstream basetransform-based
- elements will complain about the wrong unit size otherwise
- (when not operating in passthrough-mode at least).
- Const-ify some static variables and do some minor clean-ups.
- Use I420 macros for size/offsets (not really necessary in this
- particular context, but this kind of code gets copy'n'pasted).
-
-2006-04-13 18:21:08 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegpacketize.*: g_malloc() can't fail, we don't need to handle this. Same for gst_buffer_new_and_a...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_put),
- (read_cache):
- * gst/mpegstream/gstmpegpacketize.h:
- g_malloc() can't fail, we don't need to handle this. Same for
- gst_buffer_new_and_alloc().
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
- klass->send_buffer() should have the same semantics as
- gst_pad_push(), ie. ownership of the buffer is transfered,
- so we never have to unref the buffer no matter what the flow
- return value was.
-
-2006-04-12 16:21:17 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * tests/check/gst-plugins-ugly.supp:
- one more suppression for FC4
- Original commit message from CVS:
- one more suppression for FC4
-
-2006-04-10 16:58:24 +0000 Michael Smith <msmith@xiph.org>
-
- * tests/check/gst-plugins-ugly.supp:
- The AMR encoder sucks giant sucky things through a sucky object with a giant sucking machine. More suppressions.
- Original commit message from CVS:
- The AMR encoder sucks giant sucky things through a sucky object with a giant
- sucking machine. More suppressions.
-
-2006-04-10 14:47:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- add test for amrnbenc, enable test infrastructure, and fix a leak
- Original commit message from CVS:
- add test for amrnbenc, enable test infrastructure, and fix a leak
- * common/check.mak:
- allow for specifying more than one suppressions file in SUPPRESSIONS
- * Makefile.am:
- * tests/Makefile.am:
- * tests/check/.cvsignore:
- * tests/check/Makefile.am:
- * tests/check/elements/.cvsignore:
- * configure.ac:
- add tests/check
- * tests/check/gst-plugins-ugly.supp:
- add suppressions for libs used by -ugly
- * tests/check/elements/amrnbenc.c: (buffer_new), (buffer_unref),
- (setup_amrnbenc), (cleanup_amrnbenc), (push_data),
- (GST_START_TEST), (amrnbenc_suite), (main):
- add a simple test for encoding amr
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init):
- fix pad template leaks
-
-2006-04-10 11:48:29 +0000 Michael Smith <msmith@xiph.org>
-
- ext/amrnb/amrnbenc.c: Plug big leak in AMR encoder.
- Original commit message from CVS:
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
- Plug big leak in AMR encoder.
-
-2006-04-09 18:09:40 +0000 Sébastien Moutte <sebastien@moutte.net>
-
- ext/mad/gstmad.c: move GstIndexEntry *entry variable declaration before the first instruction
- Original commit message from CVS:
- * ext/mad/gstmad.c: (index_seek):
- move GstIndexEntry *entry variable declaration before
- the first instruction
- * ext/mad/gstmad.c:
- remove debug macros with variable number of parameter by using
- GST_DEBUG for WIN32
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
- use gst_guint64_to_gdouble for conversions
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_sync_stream_to_time):
- replace __FUNCTION__ which is not supported by MSVC by the current function name
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset):
- remove LL suffix by using G_GINT64_CONSTANT
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead),(gst_mpeg_parse_get_rate):
- use gst_guint64_to_gdouble for conversions
- * gst/mpegstream/gstmpegparse.h:
- remove LL suffix by using G_GINT64_CONSTANT
- * win32/vs6:
- add project files for tagac3parse, asfdemux, dvdlpcmdec, dvdsub, iec958, lame,
- mad, mpegaudioparse, mpegstream, realmedia, synaesthesia
-
-2006-04-08 21:42:19 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init):
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_class_init):
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_class_init):
- * ext/mad/gstmad.c: (gst_mad_class_init):
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init):
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_class_init):
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_class_init):
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_class_init):
- * gst/iec958/ac3iec.c: (ac3iec_class_init):
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_class_init):
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init):
- * gst/mpegstream/gstmpegclock.c: (gst_mpeg_clock_class_init):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_class_init):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init):
- * gst/synaesthesia/gstsynaesthesia.c:
- (gst_synaesthesia_class_init):
- Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
-
-2006-04-07 09:14:26 +0000 Fabrizio Gennari <fabrizio.ge@tiscali.it>
-
- gst/asfdemux/gstasfdemux.c: Send newsegment event only once per pad, fixes #336550.
- Original commit message from CVS:
- Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
- (gst_asf_demux_push_buffer):
- Send newsegment event only once per pad, fixes #336550.
-
-2006-04-06 11:35:26 +0000 j^ <j@bootlab.org>
-
- Unify the long descriptions in the plugin details (#337263).
- Original commit message from CVS:
- Patch by: j^ <j at bootlab dot org>
- * ext/amrwb/gstamrwbdec.c:
- * ext/amrwb/gstamrwbenc.c:
- * ext/amrwb/gstamrwbparse.c:
- * ext/arts/gst_arts.c:
- * ext/artsd/gstartsdsink.c:
- * ext/audiofile/gstafparse.c:
- * ext/audiofile/gstafsink.c:
- * ext/audiofile/gstafsrc.c:
- * ext/cdaudio/gstcdaudio.c:
- * ext/directfb/dfbvideosink.c:
- * ext/divx/gstdivxdec.c:
- * ext/divx/gstdivxenc.c:
- * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
- * ext/faac/gstfaac.c: (gst_faac_base_init):
- * ext/faad/gstfaad.c:
- * ext/gsm/gstgsmdec.c:
- * ext/gsm/gstgsmenc.c:
- * ext/hermes/gsthermescolorspace.c:
- * ext/ivorbis/vorbisfile.c:
- * ext/lcs/gstcolorspace.c:
- * ext/libfame/gstlibfame.c:
- * ext/libmms/gstmms.c: (gst_mms_base_init):
- * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
- * ext/nas/nassink.c: (gst_nassink_base_init):
- * ext/neon/gstneonhttpsrc.c:
- * ext/polyp/polypsink.c: (gst_polypsink_base_init):
- * ext/sdl/sdlaudiosink.c:
- * ext/sdl/sdlvideosink.c:
- * ext/shout/gstshout.c:
- * ext/snapshot/gstsnapshot.c:
- * ext/sndfile/gstsf.c:
- * ext/tarkin/gsttarkindec.c:
- * ext/tarkin/gsttarkinenc.c:
- * ext/theora/theoradec.c:
- * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
- * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
- * ext/xvid/gstxviddec.c:
- * ext/xvid/gstxvidenc.c:
- * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
- * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
- * gst/chart/gstchart.c:
- * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
- * gst/festival/gstfestival.c:
- * gst/filter/gstiir.c:
- * gst/filter/gstlpwsinc.c:
- * gst/freeze/gstfreeze.c:
- * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
- * gst/mixmatrix/mixmatrix.c:
- * gst/mpeg1sys/gstmpeg1systemencode.c:
- * gst/mpeg1videoparse/gstmp1videoparse.c:
- * gst/mpeg2sub/gstmpeg2subt.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/multifilesink/gstmultifilesink.c:
- * gst/overlay/gstoverlay.c:
- * gst/passthrough/gstpassthrough.c:
- * gst/playondemand/gstplayondemand.c:
- * gst/qtdemux/qtdemux.c:
- * gst/rtjpeg/gstrtjpegdec.c:
- * gst/rtjpeg/gstrtjpegenc.c:
- * gst/smooth/gstsmooth.c:
- * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
- * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
- * gst/videocrop/gstvideocrop.c:
- * gst/videodrop/gstvideodrop.c:
- * gst/virtualdub/gstxsharpen.c:
- * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
- * gst/y4m/gsty4mencode.c:
- Unify the long descriptions in the plugin details (#337263).
-
-2006-04-05 10:02:34 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- fix version numbering
- Original commit message from CVS:
- fix version numbering
-
-2006-04-05 09:18:35 +0000 Christian Schaller <uraeus@gnome.org>
-
- * common:
- * gst-plugins-ugly.spec.in:
- add dvdsub plugin to spec
- Original commit message from CVS:
- add dvdsub plugin to spec
-
-2006-04-01 15:43:46 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- docs/plugins/: add siddec
- Original commit message from CVS:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/inspect/plugin-siddec.xml:
- add siddec
- * ext/dvdnav/dvdnavsrc.c:
- doc fixes
-
-2006-04-01 15:30:56 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * configure.ac:
- * ext/sidplay/Makefile.am:
- disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
- Original commit message from CVS:
- disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
-
-2006-04-01 14:08:36 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * docs/plugins/.gitignore:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- ignore more
- Original commit message from CVS:
- ignore more
-
-2006-04-01 14:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * 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-rmdemux.xml:
- update plugin inspect files
- Original commit message from CVS:
- update plugin inspect files
-
-2006-04-01 10:09:10 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * gst/mpegaudioparse/gstxingmux.c:
- rework build; add translations for v4l2
- Original commit message from CVS:
- rework build; add translations for v4l2
-
-2006-04-01 09:54:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- configure.ac: rework similarly to other modules
- Original commit message from CVS:
- * configure.ac:
- rework similarly to other modules
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnb.c:
- * ext/dvdnav/dvdnavsrc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.c:
- * ext/mad/gstid3tag.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/asfdemux/gstasf.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdsub/gstdvdsubdec.c:
- * gst/iec958/ac3iec.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegstream/gstmpegstream.c:
- * gst/realmedia/rmdemux.c: (plugin_init):
- use the correct defines
-
-2006-04-01 09:53:17 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * docs/.gitignore:
- * docs/plugins/.gitignore:
- ignore more
- Original commit message from CVS:
- ignore more
-
-2006-03-31 11:13:50 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * common:
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.10.3 ===
-
-2006-03-31 11:10:46 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-iec958.xml:
- * docs/plugins/inspect/plugin-mpegaudioparse.xml:
- * docs/plugins/inspect/plugin-rmdemux.xml:
- releasing 0.10.3
- Original commit message from CVS:
- releasing 0.10.3
-
-2006-03-30 15:37:00 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- better/unified long descriptions
- Original commit message from CVS:
- * ext/aalib/gstaasink.c:
- * ext/annodex/gstcmmldec.c:
- * ext/annodex/gstcmmlenc.c:
- * ext/cairo/gsttextoverlay.c:
- * ext/cairo/gsttimeoverlay.c:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/dv/gstdvdec.c:
- * ext/esd/esdmon.c:
- * ext/esd/esdsink.c:
- * ext/flac/gstflacdec.c:
- * ext/flac/gstflacenc.c:
- * ext/flac/gstflactag.c:
- * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
- * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
- * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
- * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
- * ext/gdk_pixbuf/gstgdkpixbuf.c:
- * ext/gdk_pixbuf/pixbufscale.c:
- * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
- * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
- * ext/jpeg/gstjpegdec.c:
- * ext/jpeg/gstjpegenc.c:
- * ext/jpeg/gstsmokedec.c:
- * ext/jpeg/gstsmokeenc.c:
- * ext/libcaca/gstcacasink.c:
- * ext/libmng/gstmngdec.c:
- * ext/libmng/gstmngenc.c:
- * ext/libpng/gstpngdec.c:
- * ext/libpng/gstpngenc.c:
- * ext/mikmod/gstmikmod.c:
- * ext/raw1394/gstdv1394src.c:
- * ext/shout2/gstshout2.c:
- * ext/speex/gstspeexdec.c:
- * ext/speex/gstspeexenc.c:
- * gst/alpha/gstalpha.c:
- * gst/alpha/gstalphacolor.c:
- * gst/auparse/gstauparse.c:
- * gst/autodetect/gstautoaudiosink.c:
- (gst_auto_audio_sink_base_init):
- * gst/autodetect/gstautovideosink.c:
- (gst_auto_video_sink_base_init):
- * gst/avi/gstavimux.c: (gst_avimux_base_init):
- * gst/cutter/gstcutter.c:
- * gst/debug/breakmydata.c:
- * gst/debug/efence.c:
- * gst/debug/gstnavigationtest.c:
- * gst/debug/negotiation.c:
- * gst/debug/progressreport.c:
- * gst/debug/testplugin.c:
- * gst/effectv/gstaging.c:
- * gst/effectv/gstdice.c:
- * gst/effectv/gstedge.c:
- * gst/effectv/gstquark.c:
- * gst/effectv/gstrev.c:
- * gst/effectv/gstvertigo.c:
- * gst/effectv/gstwarp.c:
- * gst/flx/gstflxdec.c:
- * gst/goom/gstgoom.c:
- * gst/interleave/deinterleave.c:
- * gst/interleave/interleave.c:
- * gst/law/alaw-decode.c: (gst_alawdec_base_init):
- * gst/law/alaw-encode.c: (gst_alawenc_base_init):
- * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
- * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
- * gst/level/gstlevel.c:
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
- * gst/median/gstmedian.c:
- * gst/monoscope/gstmonoscope.c:
- * gst/multipart/multipartdemux.c:
- * gst/multipart/multipartmux.c:
- * gst/oldcore/gstmd5sink.c:
- * gst/oldcore/gstmultifilesrc.c:
- * gst/oldcore/gstpipefilter.c:
- * gst/oldcore/gstshaper.c:
- * gst/oldcore/gststatistics.c:
- * gst/rtp/gstasteriskh263.c:
- * gst/rtp/gstrtpL16depay.c:
- * gst/rtp/gstrtpL16pay.c:
- * gst/rtp/gstrtpamrdepay.c:
- * gst/rtp/gstrtpamrpay.c:
- * gst/rtp/gstrtpdepay.c:
- * gst/rtp/gstrtpgsmpay.c:
- * gst/rtp/gstrtph263pay.c:
- * gst/rtp/gstrtph263pdepay.c:
- * gst/rtp/gstrtph263ppay.c:
- * gst/rtp/gstrtpmp4gpay.c:
- * gst/rtp/gstrtpmp4vdepay.c:
- * gst/rtp/gstrtpmp4vpay.c:
- * gst/rtp/gstrtpmpadepay.c:
- * gst/rtp/gstrtpmpapay.c:
- * gst/rtp/gstrtppcmadepay.c:
- * gst/rtp/gstrtppcmapay.c:
- * gst/rtp/gstrtppcmudepay.c:
- * gst/rtp/gstrtppcmupay.c:
- * gst/rtp/gstrtpspeexdepay.c:
- * gst/rtp/gstrtpspeexpay.c:
- * gst/rtsp/gstrtpdec.c:
- * gst/smpte/gstsmpte.c:
- * gst/videobox/gstvideobox.c:
- * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
- * gst/videofilter/gstvideobalance.c:
- * gst/videofilter/gstvideoflip.c:
- * gst/videofilter/gstvideotemplate.c:
- (gst_videotemplate_base_init):
- * gst/videomixer/videomixer.c:
- * gst/wavenc/gstwavenc.c:
- * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init):
- better/unified long descriptions
- Fixed #336602
- Some cleanups to auparse, don't send multiple newsegments.
-
-2006-03-29 11:31:55 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegparse.c: Don't unref event unconditionally after giving away ownership (gst_pad_push_event(), g...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_event):
- Don't unref event unconditionally after giving away ownership
- (gst_pad_push_event(), gst_pad_send_event() and
- gst_pad_event_default() take ownership of the event
- passed to them). Fixes warnings/crashes caused by
- navigation events.
-
-2006-03-28 20:19:31 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegdemux.c: Don't ref NULL caps (private streams have NULL caps) (#336387); also, no need to set c...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
- Don't ref NULL caps (private streams have NULL caps) (#336387);
- also, no need to set caps on the same buffer twice.
-
-2006-03-28 19:44:51 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Don't leak element and pad names in error messages, use
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
- (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_get_subpicture_stream):
- * gst/mpegstream/gstmpegdemux.c:
- (gst_mpeg_demux_sync_stream_to_time):
- Don't leak element and pad names in error messages, use
- GST_DEBUG_PAD_NAME instead. Add some more debug code.
-
-2006-03-28 19:29:39 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Name the structure in the custom event with the language codes for the audio and subtitle s...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
- (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read):
- Name the structure in the custom event with the
- language codes for the audio and subtitle streams
- actually like dvddemux expects it to be named.
- Set caps on source pad and outgoing buffers.
-
-2006-03-28 16:06:05 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.*: Make xingheader property non-functional, it's broken anyway after all (use xingmux instead).
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_set_property),
- (gst_lame_get_property), (gst_lame_setup):
- * ext/lame/gstlame.h:
- Make xingheader property non-functional, it's broken anyway
- after all (use xingmux instead).
-
-2006-03-28 15:10:18 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: On EOS, flush encoder and send remaining data. Fix return value handling in sink event function.
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_event):
- On EOS, flush encoder and send remaining data. Fix
- return value handling in sink event function.
-
-2006-03-27 14:04:08 +0000 Jürg Billeter <j@bitron.ch>
-
- ext/dvdread/dvdreadsrc.c: Fix wrong check for started flag when setting the 'device' property.
- Original commit message from CVS:
- Patch by: Jürg Billeter <j at bitron dot ch>
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_set_property):
- Fix wrong check for started flag when setting the 'device' property.
- We want to allow it when the source is NOT started yet and ignore it
- when the source is running.
-
-2006-03-27 10:39:03 +0000 Fabrizio Gennari <fabrizio.ge@tiscali.it>
-
- gst/asfdemux/gstasfdemux.*: Subtract first timestamp from timestamps, so that stream starts from 0; makes live stream...
- Original commit message from CVS:
- Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
- (gst_asf_demux_process_chunk):
- * gst/asfdemux/gstasfdemux.h:
- Subtract first timestamp from timestamps, so that
- stream starts from 0; makes live streams that don't
- start at 0 work again (fixes #317310, #336097).
-
-2006-03-27 10:09:43 +0000 Christian Kirbach <christian.kirbach@googlemail.com>
-
- configure.ac: Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
- Original commit message from CVS:
- Patch by: Christian Kirbach
- * configure.ac:
- Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
- -good. Fixes build on some systems (#331838).
-
-2006-03-24 19:47:37 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Extract more tags and also post codec name tag on the bus so this shows up in totem and naut...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_cont):
- Extract more tags and also post codec name tag on the
- bus so this shows up in totem and nautilus.
-
-2006-03-24 19:06:41 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: Extra data usually goes into the caps as 'codec_data', not as first buffer into the stream.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_fill_audio_packet), (gst_rmdemux_parse_packet):
- Extra data usually goes into the caps as 'codec_data', not
- as first buffer into the stream.
- Need to byte swap AC3 content in realmedia files for some
- reason (fixes #331588).
-
-2006-03-24 12:08:39 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: When operating in pull mode, post an error message on the bus when all source pads are unlin...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
- (gst_rmdemux_validate_offset), (gst_rmdemux_loop),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
- When operating in pull mode, post an error message on the
- bus when all source pads are unlinked or some other fatal
- error occured (#323023). Regrade some recurring debug messages
- to LOG level. Convert c++-style comments into C-style ones.
-
-2006-03-24 11:42:31 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.*: Handle unlinked source pads properly and stop if all source pads are unlinked (#323023).
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
- (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
- (gst_rmdemux_all_source_pads_unlinked),
- (gst_rmdemux_at_least_one_stream_flowok), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_packet):
- * gst/realmedia/rmdemux.h:
- Handle unlinked source pads properly and stop if all source pads
- are unlinked (#323023).
-
-2006-03-23 18:17:34 +0000 Michal Benes <michal.benes@xeris.cz>
-
- gst/mpegstream/: Timestamps in mpeg stream are 32-bit numbers. Therefore, with a clock_freq of 90kHz this timestamp o...
- Original commit message from CVS:
- Patch by: Michal Benes <michal dot benes at xeris dot cz>
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
- (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
- (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_reset):
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
- Timestamps in mpeg stream are 32-bit numbers. Therefore, with a
- clock_freq of 90kHz this timestamp overflows every ~13 hours. This
- situation really happens when grabbing DVB streams. Current
- mpegdemuxer can not handle this situation correctly and it
- restarts counting gstreamer timestamps from zero.
- Fixes #326598.
-
-2006-03-15 22:01:40 +0000 Michael Smith <msmith@xiph.org>
-
- ext/a52dec/gsta52dec.*: Fix #334550: failure to play raw AC3 files due to segment problems.
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
- (gst_a52dec_chain_raw), (gst_a52dec_change_state):
- * ext/a52dec/gsta52dec.h:
- Fix #334550: failure to play raw AC3 files due to segment problems.
-
-2006-03-15 13:43:42 +0000 Christophe Fergeau <teuf@gnome.org>
-
- ext/lame/gstlame.c: use GST_DEBUG_FUNCPTR more often.
- Original commit message from CVS:
- Patch by: Christophe Fergeau <teuf gnome org>
- * ext/lame/gstlame.c: (gst_lame_release_memory),
- (gst_lame_finalize), (gst_lame_class_init),
- (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
- (gst_lame_change_state):
- Fix some memory leaks (#333345), use GST_DEBUG_FUNCPTR more often.
-
-2006-03-14 19:41:17 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Include AUDIO_CODEC tag with tags posted if input is not framed (#334258). Use _scale() util functi...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_update_info),
- (gst_mad_sink_event), (gst_mad_change_state):
- Include AUDIO_CODEC tag with tags posted if input is not
- framed (#334258). Use _scale() util functions in more places.
-
-2006-03-12 11:00:33 +0000 Christophe Fergeau <teuf@gnome.org>
-
- ext/lame/gstlame.c: mark the xing-header property as BROKEN (see http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19...
- Original commit message from CVS:
- 2006-03-12 Christophe Fergeau <teuf@gnome.org>
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * ext/lame/gstlame.c: (gst_lame_class_init): mark the xing-header
- property as BROKEN (see
- http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19 for an
- explanation why it's broken).
-
-2006-03-11 11:12:30 +0000 Christophe Fergeau <teuf@gnome.org>
-
- added new element to add Xing headers to MP3 files (this allows decoder to figure out the length of VBR files)
- Original commit message from CVS:
- 2006-03-11 Christophe Fergeau <teuf@gnome.org>
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * configure.ac:
- * gst/xingheader/Makefile.am:
- * gst/xingheader/gstxingmux.c:
- * gst/xingheader/gstxingmux.h: added new element to add Xing headers
- to MP3 files (this allows decoder to figure out the length of VBR
- files)
-
-2006-03-07 11:19:55 +0000 Alex Lancaster <alexlan@fedoraproject.org>
-
- ext/mad/gstid3tag.c: Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
- Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
- tag (#333683, patch by: Alex Lancaster).
-
-2006-03-02 20:03:00 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/: Further fancyfication.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
- (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init),
- (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
- (gst_amrnbenc_state_change):
- * ext/amrnb/amrnbenc.h:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_query):
- Further fancyfication.
- Use _take to get writable data from the adapter.
- Precalc packet duration.
- Handle disconts.
- Forward _push to upstream.
- Post error messages when something goes wrong.
- Remove old code in amrnbparse.
- Don't ignore query results from upstream.
-
-2006-03-02 18:45:40 +0000 Michael Smith <msmith@xiph.org>
-
- ext/amrnb/amrnbenc.c: The AMR encoder writes into the audio buffers it processes, so use gst_buffer_make_writable() o...
- Original commit message from CVS:
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
- The AMR encoder writes into the audio buffers it processes, so
- use gst_buffer_make_writable() on buffers we might (they go through
- an adapter, so there can be copying going on later anyway) be
- encoding.
-
-2006-03-01 12:35:09 +0000 Jens Granseuer <jensgr@gmx.net>
-
- gst/mpegstream/gstmpegparse.c: Declare variables at the beginning of a block and make
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_pad_added),
- (gst_mpeg_parse_handle_src_query):
- Declare variables at the beginning of a block and make
- gcc-2.9x happy (fixes #328957; patch by: Jens Granseuer).
-
-2006-03-01 09:55:49 +0000 Fabrizio <fabrizio.ge@tiscali.it>
-
- gst/asfdemux/gstasfdemux.c: Read packet size, sequence and padsize in right order again
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
- Read packet size, sequence and padsize in right order again
- (fixes #332796; patch by: Fabrizio Gennari).
-
-2006-02-28 13:50:02 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/iec958/ac3iec.c: Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
- Original commit message from CVS:
- * gst/iec958/ac3iec.c:
- Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
-
-2006-02-27 18:37:47 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Make the id3tag and mad checks check for both a header and the appropriate library if the pkg-config is...
- Original commit message from CVS:
- * configure.ac:
- Make the id3tag and mad checks check for both a header and the
- appropriate library if the pkg-config is missing. (Closes #331842)
- Split the id3tag and mad checks into 2 pieces. Sometime soon I might
- do the same for the plugins themselves.
-
-2006-02-27 14:49:05 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.*: Don't treat STATE_INVALID as fatal error; throw an error only after five consecutive deco...
- Original commit message from CVS:
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
- (gst_mpeg2dec_reset), (gst_mpeg2dec_chain):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Don't treat STATE_INVALID as fatal error; throw an error
- only after five consecutive decoding errors. Makes decoding
- mpeg streams more robust and fixes playback of joined clips
- (#300682).
-
-2006-02-26 22:33:33 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdnav/dvdnavsrc.h: Oops. forgot to add this one.
- Original commit message from CVS:
- * ext/dvdnav/dvdnavsrc.h:
- Oops. forgot to add this one.
-
-2006-02-26 21:25:01 +0000 Julien Moutte <julien@moutte.net>
-
- ext/Makefile.am: Fix dist-check.
- Original commit message from CVS:
- 2006-02-26 Julien MOUTTE <julien@moutte.net>
- * ext/Makefile.am: Fix dist-check.
-
-2006-02-26 18:01:15 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Disable dvdnavsrc for now.
- Original commit message from CVS:
- * configure.ac:
- Disable dvdnavsrc for now.
-
-2006-02-26 17:55:05 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- dvdnavsrc ported to 0.10, for the most part at least. Not quite ready for prime time yet though.
- Original commit message from CVS:
- * configure.ac:
- * ext/Makefile.am:
- * ext/dvdnav/Makefile.am:
- * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_base_init),
- (gst_dvd_nav_src_class_init), (gst_dvd_nav_src_check_get_range),
- (gst_dvd_nav_src_init), (gst_dvd_nav_src_finalize),
- (gst_dvd_nav_src_is_open), (gst_dvd_nav_src_set_property),
- (gst_dvd_nav_src_get_property), (gst_dvd_nav_src_set_clock),
- (gst_dvd_nav_src_tca_seek), (gst_dvd_nav_src_update_streaminfo),
- (gst_dvd_nav_src_set_domain), (gst_dvd_nav_src_update_highlight),
- (gst_dvd_nav_src_user_op), (dvdnav_get_event_name),
- (dvdnav_get_read_domain_name), (gst_dvd_nav_src_print_event),
- (gst_dvd_nav_src_make_dvd_event),
- (gst_dvd_nav_src_structure_set_uint64),
- (gst_dvd_nav_src_push_dvd_nav_packet_event),
- (gst_dvd_nav_src_push_clut_change_event), (read_vts_info),
- (gst_dvd_nav_src_push_titlelang_event),
- (gst_dvd_nav_src_process_next_block), (gst_dvd_nav_src_create),
- (gst_dvd_nav_src_start), (gst_dvd_nav_src_stop),
- (gst_dvd_nav_src_handle_navigation_event),
- (gst_dvd_nav_src_handle_seek_event), (gst_dvd_nav_src_src_event),
- (gst_dvd_nav_src_query_position), (gst_dvd_nav_src_query_duration),
- (gst_dvd_nav_src_query), (gst_dvd_nav_src_uri_get_type),
- (gst_dvd_nav_src_uri_get_protocols), (gst_dvd_nav_src_uri_get_uri),
- (gst_dvd_nav_src_uri_set_uri), (gst_dvd_nav_src_uri_handler_init),
- (gst_dvd_nav_src_do_init), (plugin_init):
- dvdnavsrc ported to 0.10, for the most part at least. Not quite
- ready for prime time yet though.
-
-2006-02-23 20:08:58 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/cdio/Makefile.am: Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be required for Cygwin, see #317048)
- Original commit message from CVS:
- * ext/cdio/Makefile.am:
- Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be
- required for Cygwin, see #317048)
- * gst/rtp/gstasteriskh263.c:
- Cygwin has includes for both the unix network socket API
- and the windows API, but only one can be included, so fix
- includes to only use one or the other, prefering the unxi
- one (#317048).
-
-2006-02-22 14:54:54 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Port dvdsubdec to 0.10
- Original commit message from CVS:
- * configure.ac:
- * gst/dvdsub/Makefile.am:
- * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_base_init),
- (gst_dvd_sub_dec_class_init), (gst_dvd_sub_dec_init),
- (gst_dvd_sub_dec_finalize), (gst_dvd_sub_dec_src_event),
- (gst_dvd_sub_dec_get_event_delay), (gst_dvd_sub_dec_parse_subpic),
- (gst_get_nibble), (gst_setup_palette), (gst_get_rle_code),
- (gst_draw_rle_line), (gst_dvd_sub_dec_merge_title),
- (gst_send_empty_fill), (gst_send_subtitle_frame),
- (gst_dvd_sub_dec_advance_time), (gst_dvd_sub_dec_chain),
- (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event),
- (plugin_init):
- * gst/dvdsub/gstdvdsubdec.h:
- Port dvdsubdec to 0.10
-
-2006-02-21 16:24:10 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/mpegstream/gstdvddemux.c: Push the rank up to SECONDARY+1 so that dvddemux is preferred over mpegdemux for MPEG-2...
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
- Push the rank up to SECONDARY+1 so that dvddemux is preferred over
- mpegdemux for MPEG-2 video streams.
-
-2006-02-20 19:16:10 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: Bump nano back to CVS
- Original commit message from CVS:
- * configure.ac:
- Bump nano back to CVS
-
-=== release 0.10.2 ===
-
-2006-02-20 19:13:54 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: releasing 0.10.2, "Season to Taste"
- Original commit message from CVS:
- * configure.ac:
- releasing 0.10.2, "Season to Taste"
-
-2006-02-19 23:45:34 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: releasing 0.10.1.3 prelease for 0.10.2
- Original commit message from CVS:
- * configure.ac:
- releasing 0.10.1.3 prelease for 0.10.2
-
-2006-02-17 17:58:44 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/asfdemux/gstasfdemux.c: In sink event handler, release object lock again _before_ sending EOS event downstream (#...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
- In sink event handler, release object lock again
- _before_ sending EOS event downstream (#313838).
-
-2006-02-17 17:54:37 +0000 Christian Schaller <uraeus@gnome.org>
-
- * ChangeLog:
- * gst/asfdemux/gstasf.c:
- fix rank of asfdemux
- Original commit message from CVS:
- fix rank of asfdemux
-
-2006-02-17 15:08:28 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- configure.ac: releasing 0.10.1.2 prelease for 0.10.2
- Original commit message from CVS:
- * configure.ac:
- releasing 0.10.1.2 prelease for 0.10.2
-
-2006-02-17 15:02:30 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- latest updates
- Original commit message from CVS:
- latest updates
-
-2006-02-17 11:51:12 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: When we need to crop the output buffer, make sure we create a buffer of the right size an...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_copy_i420_buffer),
- (crop_copy_i422_buffer), (crop_buffer):
- When we need to crop the output buffer, make sure we
- create a buffer of the right size and respect the implicit
- striding used for I420 elsewhere in GStreamer (#331301).
-
-2006-02-17 11:19:34 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/cdio/gstcdio.c: Init debug category (#331253).
- Original commit message from CVS:
- * ext/cdio/gstcdio.c: (plugin_init):
- Init debug category (#331253).
-
-2006-02-17 10:24:56 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/gstasfdemux.c: Do not error out on non-recognized streams. Ignore them and allow playback of the other s...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream):
- Do not error out on non-recognized streams. Ignore them and allow
- playback of the other streams.
-
-2006-02-17 10:10:40 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.c: Add a small sanity check for LPCM reading.
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
- Add a small sanity check for LPCM reading.
-
-2006-02-17 09:54:43 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/gstasfdemux.c: Take into account the file properties preroll value for timestamping/newsegment. It's wei...
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file):
- Take into account the file properties preroll value for
- timestamping/newsegment. It's weird this value was commented out.
-
-2006-02-16 17:57:59 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/asfdemux/Makefile.am: More asf makefile fixing.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- More asf makefile fixing.
-
-2006-02-16 17:16:06 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/lame/gstlame.c: Fix up lame a bit.
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
- (gst_lame_change_state):
- Fix up lame a bit.
- Apply patch #319782 by Gautier Portet.
-
-2006-02-16 11:14:11 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/Makefile.am: But we do need to link against the riff libraryr.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- But we do need to link against the riff libraryr.
-
-2006-02-16 11:08:51 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/asfdemux/Makefile.am: We don't want asfmux.c yet.
- Original commit message from CVS:
- * gst/asfdemux/Makefile.am:
- We don't want asfmux.c yet.
-
-2006-02-16 09:50:43 +0000 Jon Trowbridge <trow@ximian.com>
-
- ext/mad/gstmad.c: Port fixes for bugs 314771, 308772, 140237, and 302625
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_init), (scale), (gst_mad_update_info),
- (gst_mad_sink_event), (gst_mad_check_caps_reset), (gst_mad_chain),
- (gst_mad_change_state):
- Port fixes for bugs 314771, 308772, 140237, and 302625
- from 0.8 (Patch by Jonathan Matthew, Fixes #329575)
- Use GST_EVENT_FLUSH_STOP to clear data from the current input
- buffer, to avoid using it for any future decoding.
-
-2006-02-15 15:48:07 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping...
- Original commit message from CVS:
- * configure.ac:
- * gst/asfdemux/asfheaders.c: (gst_asf_identify_guid),
- (gst_asf_get_guid_nick):
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
- (gst_asf_demux_class_init), (gst_asf_demux_init),
- (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
- (gst_asf_demux_handle_src_event),
- (gst_asf_demux_get_current_offset), (gst_asf_demux_chain),
- (gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid),
- (gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16),
- (gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64),
- (gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer),
- (gst_asf_demux_get_bytes), (gst_asf_demux_get_string),
- (gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file),
- (gst_asf_demux_get_bitrate_record),
- (gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header),
- (gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream),
- (gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data),
- (gst_asf_demux_get_obj_data_correction),
- (gst_asf_demux_get_stream_audio),
- (gst_asf_demux_get_stream_correction),
- (gst_asf_demux_get_stream_video),
- (gst_asf_demux_get_stream_video_format),
- (gst_asf_demux_get_stream), (gst_asf_demux_setup_pad),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
- (gst_asf_demux_process_stream),
- (gst_asf_demux_get_gst_tag_from_tag_name),
- (gst_asf_demux_commit_taglist),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_get_object_header), (gst_asf_demux_process_data),
- (gst_asf_demux_process_header), (gst_asf_demux_process_file),
- (gst_asf_demux_process_comment),
- (gst_asf_demux_process_bitrate_props_object),
- (gst_asf_demux_process_header_ext), (gst_asf_demux_process_object),
- (gst_asf_demux_descramble_segment),
- (gst_asf_demux_element_send_event),
- (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
- (gst_asf_demux_process_chunk), (gst_asf_demux_process_segment),
- (gst_asf_demux_handle_data), (gst_asf_demux_parse_data),
- (gst_asf_demux_get_src_query_types),
- (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- asfdemux ported to 0.10. Does still need a bit of work (seems like
- there's something funky going on when timestamping video frames).
- The seeking code is likely to make Wim cry, but hey, at least it
- compiles.
-
-2006-02-15 10:18:39 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/amrnbdec.c: Some more comments.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_setcaps),
- (gst_amrnbdec_chain), (gst_amrnbdec_state_change):
- Some more comments.
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
- Applied patch from Fabrizio Gennari, fixes #330844.
-
-2006-02-14 14:57:18 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.*: Let's try to play the title the user set via the URI handler or via properties instead of a...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
- (gst_dvd_read_src_class_init), (gst_dvd_read_src_start),
- (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
- (gst_dvd_read_src_set_property), (gst_dvd_read_src_get_property),
- (gst_dvd_read_src_uri_get_uri), (gst_dvd_read_src_uri_set_uri):
- * ext/dvdread/dvdreadsrc.h:
- Let's try to play the title the user set via the URI handler or
- via properties instead of always playing the first title. Also,
- Also, count title/chapter/angle number in URI and properties
- from 1 rather than 0.
-
-2006-02-13 14:09:26 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable, otherwise GstBaseSrc will ...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
- (gst_dvd_read_src_get_size), (gst_dvd_read_src_do_seek),
- (gst_dvd_read_src_do_duration_query):
- Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable,
- otherwise GstBaseSrc will think we can operate pull_range based,
- which we don't really, and typefinding will fail miserably.
- Also, make seeking work somewhat (only works with flumpegdemux
- at the moment, mpegstream needs fixing for that first).
-
-2006-02-13 14:00:35 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Only allocate buffer once we know exactly how much we need, rather than gratuitously alloca...
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
- (gst_dvd_read_src_create), (gst_dvd_read_src_src_event):
- Only allocate buffer once we know exactly how much we need,
- rather than gratuitously allocating 2MB-buffers all the time
- even if we usually need much less than that. Also, demote
- a debug message from DEBUG to LOG level.
-
-2006-02-10 12:40:54 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/dvdread/dvdreadsrc.c: Add some more debugging and fix duration query in BYTES.
- Original commit message from CVS:
- * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
- (gst_dvd_read_src_seekable), (gst_dvd_read_src_get_size),
- (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_duration_query),
- (gst_dvd_read_src_do_position_query):
- Add some more debugging and fix duration query in BYTES.
-
-2006-02-09 17:27:57 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Half-baked port to 0.10. Needs some love in the seeking department, but at least it does something.
- Original commit message from CVS:
- * configure.ac:
- * ext/Makefile.am:
- * ext/dvdread/Makefile.am:
- * ext/dvdread/dvdreadsrc.c:
- * ext/dvdread/dvdreadsrc.h:
- Half-baked port to 0.10. Needs some love
- in the seeking department, but at least
- it does something.
- * ext/dvdread/stream_labels.c:
- * ext/dvdread/stream_labels.h:
- Remove these (we use ISO-639 language codes internally; applications
- that want to translate those into language names for display to the
- user should rely on the iso-codes package for that).
-
-2006-02-06 15:55:28 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/amrnbdec.*: Fix amrnbdec, handle events, take copy from adapter since the decoder apparently writes in the ...
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
- (gst_amrnbdec_setcaps), (gst_amrnbdec_event), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbdec.h:
- Fix amrnbdec, handle events, take copy from adapter since the decoder
- apparently writes in the source data.
- Use some _scale_int, and precalc duration.
- Fix some leaks, post ERROR messages.
-
-2006-02-06 11:34:23 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- docs/plugins/: Add cdio plugin to docs.
- Original commit message from CVS:
- * docs/plugins/Makefile.am:
- * docs/plugins/gst-plugins-good-plugins-docs.sgml:
- * docs/plugins/gst-plugins-good-plugins-sections.txt:
- * docs/plugins/inspect/plugin-cdio.xml:
- Add cdio plugin to docs.
- * ext/cdio/gstcdiocddasrc.c:
- Add gtk-doc blurb.
- * ext/cdio/gstcdio.c:
- The plugin is called 'cdio' not 'cddio'.
-
-2006-02-04 15:22:02 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/realmedia/rmdemux.c: One source pad not being linked is not an error condition when we're still parsing the heade...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
- One source pad not being linked is not an error condition when we're
- still parsing the header. In this case (e.g. where we don't have a
- suitable decoder installed) just pretend everything is fine, so that
- the demuxer will actually go on to signal no-more-pads when done
- parsing the header, otherwise decodebin/playbin will never post the
- appropriate error message if decoders are not available.
-
-2006-02-03 18:24:54 +0000 Edgard Lima <edgard.lima@indt.org.br>
-
- * ChangeLog:
- * common:
- * ext/mad/gstid3tag.c:
- * gst/realmedia/rmdemux.c:
- Just make it compile with --disable-gst-debug.
- Original commit message from CVS:
- Just make it compile with --disable-gst-debug.
-
-2006-01-31 22:03:30 +0000 Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
-
- ext/mad/gstmad.c: Merge patch from Radoslaw Szkodzinski (bug 326734)
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_convert_src), (scale),
- (gst_mad_check_caps_reset), (gst_mad_chain):
- Merge patch from Radoslaw Szkodzinski (bug 326734)
-
-2006-01-30 22:00:18 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/mad/gstid3tag.c: fixing Gdate handling enabling mux/demux mode switching adding better debug output
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach),
- (gst_id3_tag_get_tag_to_render), (gst_id3_tag_sink_event),
- (gst_id3_tag_src_link), (gst_id3_tag_send_tag_event),
- (gst_id3_tag_chain):
- fixing Gdate handling
- enabling mux/demux mode switching
- adding better debug output
-
-2006-01-30 18:57:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/gstmpegparse.c: If we haven't set caps on a source pad yet, the caps on the pad are NULL, not un-fixed...
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_buffer):
- If we haven't set caps on a source pad yet, the caps on the
- pad are NULL, not un-fixed. Set caps on outgoing buffers.
-
-2006-01-23 18:37:16 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.*: Contrary to what the const char in the lame API might suggest, lame expects us to keep the string...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_finalize), (gst_lame_class_init),
- (gst_lame_init), (add_one_tag), (gst_lame_set_metadata):
- * ext/lame/gstlame.h:
- Contrary to what the const char in the lame API might suggest,
- lame expects us to keep the strings we pass to id3tag_set_foo()
- around; it doesn't free them either though, so we have to store
- them somewhere and free them later when we can be sure lame
- doesn't need them any longer.
-
-2006-01-23 15:02:04 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/lame/gstlame.c: don't pass an uninitialised string pointer to lame if we don't know how to handle the tag type, a...
- Original commit message from CVS:
- * ext/lame/gstlame.c: (add_one_tag):
- Fix handling of GST_TAG_DATE (#311679), don't pass an
- uninitialised string pointer to lame if we don't know
- how to handle the tag type, and fix minor memory leak.
-
-2006-01-23 10:15:27 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Fix debug message.
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_chain):
- Fix debug message.
-
-2006-01-22 12:00:46 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event): Erase spurious call to gst_segment_set_newsegment.
- Original commit message from CVS:
- 2006-01-22 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
- Erase spurious call to gst_segment_set_newsegment.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Call
- the superclass method when handling NEWSEGMENT events.
- (gst_dvd_demux_handle_dvd_event): Get rid of dvd-audio-shutdown
- and dvd-audio-restart event handling. There are currently less
- hackish ways of handling the sparse audio stream problem.
-
-2006-01-20 14:18:20 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- fix up error domains, error strings, and use of translation
- Original commit message from CVS:
- 2006-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
- * ext/dvdnav/dvdnavsrc.c: (if):
- * ext/dvdread/stream_labels.c:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
- fix up error domains, error strings, and use of translation
- * po/POTFILES.in:
- fix up this file, even though none of them are actually marked
- for build yet.
-
-2006-01-19 21:32:05 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse): gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset) (gst_mpeg_...
- Original commit message from CVS:
- 2006-01-19 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
- (gst_mpeg_parse_process_event, gst_mpeg_parse_parse_packhead)
- (gst_mpeg_parse_change_state):
- Make timestamp adjustment somewhat milder. Actual timestamps are
- now sent unmodified unless an actual gap is found in the
- stream. This should fix time display when playing most MPEG
- files.
-
-2006-01-19 00:10:51 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/cdio/: Fix build for libcdio versions >= 76; give slightly lower rank than cdparanoia.
- Original commit message from CVS:
- * ext/cdio/gstcdio.c: (gst_cdio_add_cdtext_field), (plugin_init):
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_get_cdtext):
- Fix build for libcdio versions >= 76; give slightly lower rank
- than cdparanoia.
-
-2006-01-18 19:30:36 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Port libcdio cdda source, formerly known as cddasrc, now known as cdiocddasrc (fixes #323327). Should also read CD-TE...
- Original commit message from CVS:
- * configure.ac:
- * ext/Makefile.am:
- * ext/cdio/Makefile.am:
- * ext/cdio/gstcdio.c:
- * ext/cdio/gstcdio.h:
- * ext/cdio/gstcdiocddasrc.c:
- * ext/cdio/gstcdiocddasrc.h:
- Port libcdio cdda source, formerly known as cddasrc, now known as
- cdiocddasrc (fixes #323327). Should also read CD-TEXT if available,
- but that's not tested (fixes #317658).
-
-2006-01-18 09:30:00 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/mpegstream/gstmpegdemux.c: tss tss... always set caps on outgoing buffer.
- Original commit message from CVS:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
- tss tss... always set caps on outgoing buffer.
-
-2006-01-17 14:16:52 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- update spec file
- Original commit message from CVS:
- update spec file
-
-2006-01-13 19:30:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.10.1 ===
-
-2006-01-13 19:25:42 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- releasing 0.10.1
- Original commit message from CVS:
- releasing 0.10.1
-
-2006-01-11 11:44:02 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- prerelease
- Original commit message from CVS:
- prerelease
-
-2006-01-10 11:43:37 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Pass unhandled queries upstream (useful e.g. for SEEKING query)
- Original commit message from CVS:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query):
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
- * ext/mad/gstmad.c: (gst_mad_src_query):
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_query):
- * ext/sidplay/gstsiddec.cc:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query):
- Pass unhandled queries upstream (useful e.g. for SEEKING query)
- (fixes #325652; based on patch by: Philippe); make rmdemux return
- FALSE for position queries, instead of setting -1 as value and
- returning TRUE.
-
-2006-01-05 21:36:49 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
- Original commit message from CVS:
- 2006-01-05 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
- (gst_mpeg_parse_process_event, gst_mpeg_parse_pad_added): Don't
- rewrite timestamps in the case segments are being set from
- upstream, but use timestamps unmodified. Also send proper position
- values. This allows for correct time display and makes queries
- work in sink elements.
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
- (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer):
- Rename flush_filter to segment_filter, which is better represents
- what the arreibute does.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event):
- Activate segment filtering when a timestamp discontinuity is seen.
-
-2006-01-04 15:17:15 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Don't forget that we need to send out a newsegment event after a restart even if we don't have enou...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_chain):
- Don't forget that we need to send out a newsegment event after a
- restart even if we don't have enough data to decode a frame right
- now.
-
-2005-12-30 23:51:46 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event): Use the new "audio-shutdown" and "audio-restart" DVD e...
- Original commit message from CVS:
- 2005-12-31 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
- Use the new "audio-shutdown" and "audio-restart" DVD events
- instead of the "spu-still-frame" event to shutdown and restart
- the audio pipeline.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts):
- Check for cases where the segment-based adjustment calculation
- would produce negative values (which result in an overflow) and
- return GST_CLOCK_TIME_NONE instead.
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
- (gst_dvd_demux_process_event, gst_dvd_demux_send_subbuffer):
- Add a mechanism to discard audio buffers with timestamps outside
- the currently set segment. This was causing (sometimes serious)
- synchronization problems after seeking in DVDs with LPCM audio,
- since VOBUs usually contain audio material that lies outside the
- timestamp range specified by the header.
-
-2005-12-30 16:25:05 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mad/gstid3tag.c: Remove lingering reference to GstID3Demux
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_type):
- Remove lingering reference to GstID3Demux
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
- Don't output debug saying padding streams are unknown type,
- because they're not
-
-2005-12-27 19:06:08 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
- Original commit message from CVS:
- 2005-12-27 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
- (gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for
- LPCM.
- * gstmpegdemux.h:
- * gstmpegdemux.c (gst_mpeg_demux_get_video_stream)
- (gst_mpeg_demux_get_audio_stream):
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream)
- (gst_dvd_demux_get_audio_stream)
- (gst_dvd_demux_get_subpicture_stream)
- (gst_dvd_demux_send_subbuffer):
- Send current* pad buffers with appropriate caps.
-
-2005-12-26 17:48:32 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/iec958/ac3iec.*: (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
- Original commit message from CVS:
- 2005-12-26 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/iec958/ac3iec.h:
- * gst/iec958/ac3iec.c:
- (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
- (ac3iec_init, ac3iec_set_property, ac3iec_get_property): Add a
- raw-audio property to ac3iec958 that allows setting the source pad
- caps to raw audio instead of audio/x-iec958. This makes it
- possible to use ac3iec958 together with the normal alsasink
- element to drive an external receiver that autodetects AC3
- content.
-
-2005-12-23 15:48:04 +0000 Michael Smith <msmith@xiph.org>
-
- gst/iec958/ac3iec.*: Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
- Original commit message from CVS:
- * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_setcaps),
- (ac3iec_chain_dvd):
- * gst/iec958/ac3iec.h:
- Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
-
-2005-12-21 10:25:34 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: When getting a seek event, first check if the upstream element can handle it and only do ...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_event):
- When getting a seek event, first check if the upstream element
- can handle it and only do our own seek stuff when it can't
- (should fix #322856).
-
-2005-12-21 09:58:43 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Really convert to BYTES format when we want to convert to bytes (use right variable; fixe...
- Original commit message from CVS:
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * ext/mpeg2dec/gstmpeg2dec.c: (normal_seek):
- Really convert to BYTES format when we want to convert
- to bytes (use right variable; fixes #322856).
-
-2005-12-19 17:26:47 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- Big mpegparse clean up, second round:
- Original commit message from CVS:
- 2005-12-19 Martin Soto <martinsoto@users.sourceforge.net>
- Big mpegparse clean up, second round:
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
- Send and EOS event down the audio pipeline when an still frame
- event arrives. This prevents the pipeline from locking when a
- still menu comes directly after a flush.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset):
- Don't send a newsegment in reset.
- (gst_mpeg_parse_adjust_ts): Check for invalid timestamps.
- (gst_mpeg_parse_handle_newsegment, gst_mpeg_parse_process_event):
- Move the code of handle_newsegment to process_event. Send a
- NEWSEGMENT after FLUSH_STOP.
- (gst_mpeg_parse_change_state): Send a NEWSEGMENT right after
- moving to PAUSED.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event)
- (gst_mpeg_demux_class_init): Don't override send_event.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
- (gst_mpeg_demux_send_event, gst_mpeg_demux_send_subbuffer)
- (gst_mpeg_demux_reset):
- * gst/mpegstream/gstmpegdemux.h: Get rid of just_flushed
- attribute.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
- Reset the mpegparse element after a flush.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment):
- Don't forward events.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
- handle_newsegment is not a virtual method anymore.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_newsegment)
- (gst_mpeg_parse_reset, gst_mpeg_parse_class_init):
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): Get
- rid of send_newsegment virtual method.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Only
- handle DVD events and call the superclass method for other event
- types.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event): Don't
- override process_event anymore.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_event)
- (gst_mpeg_parse_process_event): Move actual event processing to
- process event so that subclasses can properly override or extend
- it.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
- Eliminate time parameter in process event.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
- (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes)
- (gst_mpeg_demux_send_subbuffer):
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
- (gst_mpeg_parse_parse_packhead, gst_mpeg_parse_event)
- (gst_mpeg_parse_chain): Use the new adjust_ts method instead of
- adding the value of the adjust attribute.
- * gst/mpegstream/gstmpegdemux.h (struct _GstMPEGVideoStream): Get
- rid of the adjust attribute. Now all timestamp adjustments are
- performed by mpegparse using the current segment.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
- (gst_mpeg_parse_class_init): Implement the adjust_ts method based
- on the adjust attribute for SCR values and the current segment.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): New
- adjust_ts virtual method to adjust timestamps for outgoing
- buffers.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_newsegment)
- (gst_mpeg_demux_parse_packet): Don't override send_newsegment.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
- (gst_dvd_demux_handle_newsegment): Don't override
- handle_newsegment.
- (gst_dvd_demux_process_event, gst_dvd_demux_handle_dvd_event):
- Check for DVD events in process_event instead of
- handle_dvd_event.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
- (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_send_event):
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_process_event)
- (gst_mpeg_demux_send_event):
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
- (gst_dvd_demux_handle_dvd_event):
- Eliminate the time parameter in send_event.
-
-2005-12-18 15:08:15 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mad/gstid3tag.c: Fix typefinding in id3demux, and then remove it in favour of the new LGPL id3demux in gst-plugin...
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind),
- (gst_id3_tag_do_caps_nego), (gst_id3_tag_chain), (plugin_init):
- Fix typefinding in id3demux, and then remove it in favour
- of the new LGPL id3demux in gst-plugins-good
- * ext/mad/gstmad.c: (gst_mad_dispose):
- dispose can run more than once.
-
-2005-12-16 21:56:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- gst/asfdemux/gstasfmux.c: change some char* into char[]
- Original commit message from CVS:
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_file_start):
- change some char* into char[]
-
-2005-12-15 17:06:10 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/realmedia/rmdemux.c: Remove memleak from unused GstRMDemuxStream
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
- Remove memleak from unused GstRMDemuxStream
-
-2005-12-12 19:17:11 +0000 Michael Smith <msmith@xiph.org>
-
- ext/mad/gstid3tag.c: Use the correct function to free typefind factory list.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
- (gst_id3_tag_do_typefind):
- Use the correct function to free typefind factory list.
-
-2005-12-09 18:38:53 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: For position and duration queries in TIME format, try the peer first (might be a demuxer).
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_src_query):
- For position and duration queries in TIME format, try the peer
- first (might be a demuxer).
-
-2005-12-08 12:45:09 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment): Properly handle non contiguous VOBUs by adding the se...
- Original commit message from CVS:
- 2005-12-08 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment):
- Properly handle non contiguous VOBUs by adding the segment accum
- field to the adjust value.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
- (gst_dvd_demux_init, gst_dvd_demux_handle_newsegment): Extend
- handle_newsegment to prevent sending actual newsegment events and
- use tiemstamp rewriting instead.
- (gst_dvd_demux_handle_dvd_event): Don't send a newsegment after
- dvd-lang-codes.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
- (gst_mpeg_parse_event):
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
- Add a new parameter to handle_newsegment to allow controlling
- whether newsegment events are forwarded or not.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
- (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
- (gst_dvd_demux_reset):
- last_end_ptm and discont_time aren't necessary anymore, since
- timestamp adjustment is now replaced by newsegment events.
- (gst_dvd_demux_init): Prevent MPEGParse from adjusting
- timestamps.
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
- Don't handle dvd-nav-packet events anymore, since the are now
- replaced by standard newsegment events.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
- (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
- (gst_dvd_demux_change_state):
- * gst/mpegstream/gstdvddemux.h:
- Get rid of the ignore_next_newmedia_discont hack.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
- (gst_dvd_demux_handle_newsegment):
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
- (gst_mpeg_demux_handle_newsegment): Don't override
- handle_newsegment anymore. It was only necessary to handle
- NEWMEDIA events.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
- (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_set_cur_audio)
- (gst_dvd_demux_set_cur_subpicture):
- Reactivate handling of DVD events.
- * gst/mpegstream/gstmpegparse.c (normal_seek)
- (gst_mpeg_parse_handle_src_event)
- (gst_mpeg_parse_handle_src_query):
- First attempt at reenabling seek.
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
- (gst_mpeg_parse_update_streaminfo)
- (gst_mpeg_parse_get_rate)
- (gst_mpeg_parse_convert, gst_mpeg_parse_get_src_query_types)
- (gst_mpeg_parse_handle_src_query):
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_new_output_pad):
- Make queries work again.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
- (gst_mpeg_parse_handle_newsegment)
- (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_pad_added)
- (gst_mpeg_parse_chain, gst_mpeg_parse_handle_src_event):
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
- Get rid of the newsegment_pending attribute, and rely instead on
- proper timestamp adjustment.
- * gst/mpegstream/gstmpegparse.c
- (gst_mpeg_parse_get_src_event_masks): Erase.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init):
- Initialize fields before creating pads to prevent the pad creation
- callback from failing.
- (gst_mpeg_parse_reset): Initialize new fields, and change
- initialization order to match the order in the structure.
- (gst_mpeg_parse_handle_newsegment): Forward new segment events
- whenever possible, and update the current segment.
- (gst_mpeg_parse_send_newsegment): Update the current segment and
- pending_newsegment.
- (gst_mpeg_parse_pad_added): Use the current segment to send
- newsegment events to new pads.
- (gst_mpeg_parse_chain): Properly add adjust time to sent buffers
- and events. Properly update newsegment_pending.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
- New fields do_adjust and current_segment.
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegparse.h:
- Rename handle_discont virtual method to handle_newsegment. Erase
- some (already commented out support) for old NEW_MEDIA events.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
- (gst_mpeg_parse_reset, gst_mpeg_parse_handle_discont)
- (gst_mpeg_parse_pad_added, gst_mpeg_parse_parse_packhead)
- (gst_mpeg_parse_event, gst_mpeg_parse_chain):
- Erase the "pending_scr" field, and replace it by a slightly
- different handling of the current SCR. Document code blocks in
- parse_packhead and chain.
-
-2005-12-07 11:50:10 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/mad/gstid3tag.c: g_warning() are only for really fatal warnings. If we can't decode a tag, just ignore that tag a...
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- g_warning() are only for really fatal warnings. If we can't decode a
- tag, just ignore that tag and do a GST_WARNING.
-
-2005-12-06 19:48:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * ext/a52dec/gsta52dec.h:
- * ext/dvdread/dvdreadsrc.h:
- * ext/lame/gstlame.h:
- * ext/mad/gstid3tag.c:
- * ext/mad/gstmad.c:
- * ext/mad/gstmad.h:
- * ext/mpeg2dec/gstmpeg2dec.h:
- * ext/sidplay/gstsiddec.h:
- * gst/ac3parse/gstac3parse.c:
- * gst/ac3parse/gstac3parse.h:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfdemux.h:
- * gst/iec958/ac3iec.h:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegclock.h:
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegpacketize.h:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/mpegstream/gstrfc2250enc.h:
- * gst/realmedia/rmdemux.c:
- * gst/realmedia/rmdemux.h:
- * gst/synaesthesia/synaescope.c:
- expand tabs
- Original commit message from CVS:
- expand tabs
-
-2005-12-05 18:12:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.10.0 ===
-
-2005-12-05 18:04:06 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- releasing 0.10.0
- Original commit message from CVS:
- releasing 0.10.0
-
-2005-12-05 13:03:40 +0000 Andy Wingo <wingo@pobox.com>
-
- Update for alloc_buffer changes.
- Original commit message from CVS:
- 2005-12-05 Andy Wingo <wingo@pobox.com>
- * ext/a52dec/gsta52dec.c: (gst_a52dec_push):
- * ext/mad/gstmad.c: (gst_mad_chain):
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
- * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_packet): Update for alloc_buffer changes.
-
-2005-12-05 09:33:32 +0000 Andy Wingo <wingo@pobox.com>
-
- ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just id3demux and id3mux now. Fixes #323199.
- Original commit message from CVS:
- 2005-12-05 Andy Wingo <wingo@pobox.com>
- * ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just
- id3demux and id3mux now. Fixes #323199.
-
-2005-12-04 22:36:51 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- update spec file for latest changes
- Original commit message from CVS:
- update spec file for latest changes
-
-2005-12-02 12:28:03 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- fix silly Makefile.am bug so they link correctly again
- Original commit message from CVS:
- * ext/amrnb/Makefile.am:
- * gst/realmedia/Makefile.am:
- fix silly Makefile.am bug so they link correctly again
-
-2005-12-01 19:18:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.9.7 ===
-
-2005-12-01 19:14:57 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- * docs/random/LICENSE:
- * docs/random/PORTED_09:
- releasing 0.9.7
- Original commit message from CVS:
- releasing 0.9.7
-
-2005-12-01 15:49:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * common:
- * ext/amrnb/Makefile.am:
- * gst/realmedia/Makefile.am:
- Don't know how these escaped my eye before. Fix link flags.
- Original commit message from CVS:
- Don't know how these escaped my eye before. Fix link flags.
-
-2005-11-30 18:37:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * examples/Makefile.am:
- * examples/capsfilter/Makefile.am:
- * examples/capsfilter/capsfilter1.c:
- * examples/gob/Makefile.am:
- * examples/gob/gst-identity2.gob:
- * examples/gstplay/.gitignore:
- * examples/gstplay/Makefile.am:
- * examples/gstplay/player.c:
- * examples/indexing/.gitignore:
- * examples/indexing/Makefile.am:
- * examples/indexing/indexmpeg.c:
- * examples/level/Makefile.am:
- * examples/level/README:
- * examples/level/demo.c:
- * examples/level/plot.c:
- * examples/stats/Makefile.am:
- * examples/stats/mp2ogg.c:
- * examples/switch/.gitignore:
- * examples/switch/Makefile.am:
- * examples/switch/switcher.c:
- no examples
- Original commit message from CVS:
- no examples
-
-2005-11-29 11:26:35 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Ref events before sending them to multiple pads, after all gst_pad_send_event() takes ownership of e...
- Original commit message from CVS:
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_event):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_newsegment),
- (gst_mpeg_parse_send_event):
- Ref events before sending them to multiple pads, after all
- gst_pad_send_event() takes ownership of events. Don't leak
- events that have not been handled (fixes #322745).
-
-2005-11-28 19:13:51 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
- Original commit message from CVS:
- 2005-11-28 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
- (gst_dvd_demux_handle_dvd_event): Erase code to prevent mpegparse
- from making timestamp adjustments. This will have to be re-added
- in some form in the near future, but in order to do that, some nav
- packet parsing will be necessary in mpegdemux.
- * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
- (g_value_set_int, gst_mpeg_parse_set_property)
- Get rid of do_adjust and use_adjust. Rename max_discont to
- max_src_gap.
- (gst_mpeg_parse_parse_packhead): When max_scr_gap has a value of
- -1, no adjustment is made.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init):
- Rename max_discont property to max_scr_gap. Erase "adjust"
- property.
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_event): Don't
- override send_event anymore, base class does the job.
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event):
- Base class now does most of the work.
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_event):
- Generalize to forwarding the event to all source pads in the
- element.
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
- (gst_mpeg_parse_init, gst_mpeg_parse_set_clock)
- (gst_mpeg_parse_chain, gst_mpeg_parse_get_property)
- (gst_mpeg_parse_set_property):
- Clock synchronization doesn't make sense anymore for a
- demultiplexer.
-
-2005-11-28 18:54:09 +0000 Michael Smith <msmith@xiph.org>
-
- gst/realmedia/rmdemux.c: Don't treat normal EOS as a fatal error.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
- Don't treat normal EOS as a fatal error.
-
-2005-11-28 15:47:01 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/mad/gstmad.c: Proper warning statements,
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_chain):
- Proper warning statements,
- Don't error if the src pad isn't linked when pushing.
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_change_state):
- Proper state_change, avoids borkage when going to READY
-
-2005-11-27 15:34:00 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- * gst-libs/Makefile.am:
- * gst-libs/README:
- * gst-libs/ext/.gitignore:
- * gst-libs/gst/media-info/.gitignore:
- * gst-libs/gst/play/.gitignore:
- * gst-libs/gst/play/play.h:
- * gst-libs/gst/play/play.vcproj:
- no need for an AS_LIBTOOL call
- Original commit message from CVS:
- no need for an AS_LIBTOOL call
-
-2005-11-27 14:34:34 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * Makefile.am:
- * common:
- * gst-plugins-ugly.spec.in:
- add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
- Original commit message from CVS:
- add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
-
-2005-11-25 17:02:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it doesn't ask us to disca...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
- Prime libmpeg2's pumps with some null custom buffers
- to ensure it doesn't ask us to discard garbage later yay.
-
-2005-11-25 17:01:46 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it ask us to discard garba...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
- Prime libmpeg2's pumps with some null custom buffers
- to ensure it ask us to discard garbage later yay.
-
-2005-11-25 14:50:19 +0000 Michael Smith <msmith@xiph.org>
-
- ext/a52dec/gsta52dec.*: Accept AC3 in audio/x-private1-ac3 format, which includes
- Original commit message from CVS:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
- (gst_a52dec_sink_setcaps), (gst_a52dec_chain),
- (gst_a52dec_chain_raw):
- * ext/a52dec/gsta52dec.h:
- Accept AC3 in audio/x-private1-ac3 format, which includes
- DVD-specific headers, as well as raw AC3, for compatibility with
- some demuxers.
-
-2005-11-25 00:03:52 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mad/gstmad.c: When pad_alloc returns other-than-GST_FLOW_OK and mad exits early, skip frame synthesis and consume...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_chain):
- When pad_alloc returns other-than-GST_FLOW_OK and mad exits early,
- skip frame synthesis and consume input data as if we'd done the
- decode. Makes mad not error when the src pad is not connected.
- (#319784)
-
-2005-11-24 13:58:55 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- * ChangeLog:
- Erase old CVS conflict line.
- Original commit message from CVS:
- Erase old CVS conflict line.
-
-2005-11-24 13:52:49 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init) (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegm...
- Original commit message from CVS:
- 2005-11-23 Martin Soto <martinsoto@users.sourceforge.net>
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
- (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegment)
- (gst_mpeg_parse_chain):
- * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
- (gst_mpeg_demux_send_newsegment):
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_subbuffer):
- * gst/mpegstream/gstmpegparse.h:
- Rename send_discont method to send_newsegment and add parameters
- to handle actual segments. Adapt code all around to run with the
- new name and signature.
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstdvddemux.c:
- Convert to GST_BOILERPLATE.
-
-2005-11-24 12:23:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- fix AS_LIBTOOL call
- Original commit message from CVS:
- fix AS_LIBTOOL call
-
-2005-11-23 21:26:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * Makefile.am:
- add a torture target
- Original commit message from CVS:
- add a torture target
-
-2005-11-23 20:05:47 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.9.6 ===
-
-2005-11-23 19:57:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- releasing 0.9.6
- Original commit message from CVS:
- releasing 0.9.6
-
-2005-11-23 00:26:42 +0000 Michael Smith <msmith@xiph.org>
-
- gst/realmedia/rmdemux.c: Fractional framerates.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
- (gst_rmdemux_src_event), (gst_rmdemux_validate_offset),
- (find_seek_offset_bytes), (find_seek_offset_time),
- (gst_rmdemux_perform_seek), (gst_rmdemux_src_query),
- (gst_rmdemux_loop), (gst_rmdemux_fourcc_isplausible),
- (gst_rmdemux_chain), (gst_rmdemux_send_event),
- (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_parse_packet):
- Fractional framerates.
-
-2005-11-23 00:12:24 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Use fractional framerates
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
- (gst_mpeg2dec_negotiate_format), (handle_sequence),
- (gst_mpeg2dec_sink_event):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Use fractional framerates
-
-2005-11-22 19:07:13 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegstream/gstmpegparse.c: set_clock returns a boolean.
- Original commit message from CVS:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_set_clock):
- set_clock returns a boolean.
-
-2005-11-22 18:39:36 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Fix seeking even more by sending the newsegment event with the right parameters. Should fix queryin...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_chain):
- Fix seeking even more by sending the newsegment event with the
- right parameters. Should fix querying in playbin/totem after
- a seek.
-
-2005-11-22 17:39:36 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstmad.c: Fix seeking in stand-alone mode. Fix nonexistant enum value introduced in previous commit. Improve ...
- Original commit message from CVS:
- * ext/mad/gstmad.c: (gst_mad_mode_get_type), (gst_mad_src_query),
- (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
- Fix seeking in stand-alone mode. Fix nonexistant enum value
- introduced in previous commit. Improve debug messages here and
- there. Actually return a proper return value in the sink event
- handler.
-
-2005-11-22 17:15:25 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ext/lame/gstlame.c:
- doh
- Original commit message from CVS:
- doh
-
-2005-11-22 17:04:38 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * ext/lame/gstlame.c:
- * ext/mad/gstmad.c:
- * ext/sidplay/gstsiddec.cc:
- fix up GValueEnum
- Original commit message from CVS:
- fix up GValueEnum
-
-2005-11-22 12:39:29 +0000 Andy Wingo <wingo@pobox.com>
-
- * ChangeLog:
- * ext/lame/gstlame.c:
- * ext/mad/gstid3tag.c:
- * ext/sidplay/gstsiddec.cc:
- Update for gst_tag_setter API changes.
- Original commit message from CVS:
- 2005-11-22 Andy Wingo <wingo@pobox.com>
- * Update for gst_tag_setter API changes.
-
-2005-11-22 11:55:32 +0000 Andy Wingo <wingo@pobox.com>
-
- * ChangeLog:
- * ext/a52dec/gsta52dec.c:
- * ext/mad/gstid3tag.c:
- * ext/mad/gstmad.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/realmedia/rmdemux.c:
- ext/a52dec/gsta52dec.c (gst_a52dec_sink_event) ext/mad/gstid3tag.c (gst_id3_tag_sink_event) ext/mad/gstmad.c (gst_mad...
- Original commit message from CVS:
- 2005-11-22 Andy Wingo <wingo@pobox.com>
- * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event)
- * ext/mad/gstid3tag.c (gst_id3_tag_sink_event)
- * ext/mad/gstmad.c (gst_mad_chain)
- * gst/mpegaudioparse/gstmpegaudioparse.c
- (gst_mp3parse_sink_event)
- * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
- * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_discont)
- (gst_mpeg_parse_send_discont, gst_mpeg_parse_pad_added)
- * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek)
- (gst_rmdemux_chain, gst_rmdemux_add_stream): Run update-funcnames.
-
-2005-11-22 11:39:06 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/Makefile.am: libgsttagedit => libgsttag
- Original commit message from CVS:
- * ext/mad/Makefile.am:
- libgsttagedit => libgsttag
-
-2005-11-21 23:50:02 +0000 Edward Hervey <bilboed@bilboed.com>
-
- ext/lame/gstlame.c: Don't take the stream lock
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_sink_event):
- Don't take the stream lock
-
-2005-11-21 17:34:30 +0000 Andy Wingo <wingo@pobox.com>
-
- ext/: Don't take the stream lock.
- Original commit message from CVS:
- 2005-11-21 Andy Wingo <wingo@pobox.com>
- * ext/sidplay/gstsiddec.cc (gst_siddec_sink_event):
- * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event):
- * ext/mad/gstmad.c (gst_mad_sink_event):
- * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event): Don't take the
- stream lock.
- * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek): Update for
- stream lock changes.
-
-2005-11-21 16:36:44 +0000 Andy Wingo <wingo@pobox.com>
-
- *.*: Ran scripts/update-macros. Oh yes.
- Original commit message from CVS:
- 2005-11-21 Andy Wingo <wingo@pobox.com>
- * *.h:
- * *.c: Ran scripts/update-macros. Oh yes.
-
-2005-11-21 15:12:43 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/mpegstream/: Filler events have beem removed for now.
- Original commit message from CVS:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event):
- Filler events have beem removed for now.
-
-2005-11-21 14:08:45 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- gst/: Update for GST_FOURCC_FORMAT API change.
- Original commit message from CVS:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
- (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr):
- Update for GST_FOURCC_FORMAT API change.
-
-2005-11-21 10:32:55 +0000 Edward Hervey <bilboed@bilboed.com>
-
- gst/: Modifications for disapearance of GST_PAD_IS_USABLE()
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
- (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_parse_packet):
- Modifications for disapearance of GST_PAD_IS_USABLE()
-
-2005-11-18 16:14:00 +0000 Michael Smith <msmith@xiph.org>
-
- gst/iec958/ac3iec.c: Remove some setcaps brokenness.
- Original commit message from CVS:
- * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_chain_dvd):
- Remove some setcaps brokenness.
- Don't crash on bad input.
-
-2005-11-15 22:46:23 +0000 Johan Dahlin <johan@gnome.org>
-
- ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after calling transform.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after
- calling transform.
- (gst_id3_tag_do_typefind): Unref caps
- * ext/mad/gstmad.c (gst_mad_check_caps_reset): Ditto
-
-2005-11-15 21:00:44 +0000 Johan Dahlin <johan@gnome.org>
-
- * ext/mad/gstmad.c:
- remove accidentally commited hack
- Original commit message from CVS:
- remove accidentally commited hack
-
-2005-11-15 20:30:53 +0000 Johan Dahlin <johan@gnome.org>
-
- * ext/mad/gstmad.c:
- free pad templates
- Original commit message from CVS:
- free pad templates
-
-2005-11-15 14:19:38 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mpeg2dec/gstmpeg2dec.c: Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe; nice-ify debug message...
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice),
- (gst_mpeg2dec_sink_event):
- Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe;
- nice-ify debug message in event handler; add CHECKME.
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
- (gst_dvd_demux_send_event), (gst_dvd_demux_process_private),
- (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset),
- (gst_dvd_demux_sync_stream_to_time):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
- (gst_mpeg_demux_process_event), (gst_mpeg_demux_send_event),
- (gst_mpeg_demux_handle_discont), (gst_mpeg_demux_new_output_pad),
- (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
- (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_process_private),
- (gst_mpeg_demux_sync_stream_to_time),
- (gst_mpeg_demux_handle_src_event), (gst_mpeg_demux_reset):
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
- (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_send_buffer),
- (gst_mpeg_parse_process_event), (gst_mpeg_parse_send_discont),
- (gst_mpeg_parse_send_event), (gst_mpeg_parse_event),
- (gst_mpeg_parse_chain):
- * gst/mpegstream/gstmpegparse.h:
- Get rid of GST_PAD_IS_USABLE and fix GstFlowReturn vs. gboolean
- return value confusion (gst_pad_push vs. gst_pad_send_event and
- gst_pad_push_event); pass flow return values to caller;
- miscellaneous fixes and clean-ups.
-
-2005-11-15 08:37:00 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst/mpegstream/gstdvddemux.c:
- set rank to secondary until it works 100%
- Original commit message from CVS:
- set rank to secondary until it works 100%
-
-2005-11-15 07:59:58 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- add mpegstream plugin to spec file
- Original commit message from CVS:
- add mpegstream plugin to spec file
-
-2005-11-14 22:18:21 +0000 Martin Soto <martinsoto@users.sourceforge.net>
-
- gst/mpegstream/Makefile.am (noinst_HEADERS): Add gstrfc2250enc.h.
- Original commit message from CVS:
- 2005-11-14 Martin Soto <soto@localhost.localdomain>
- * gst/mpegstream/Makefile.am (noinst_HEADERS): Add
- gstrfc2250enc.h.
-
-2005-11-14 21:20:21 +0000 Josef Zlomek <josef.zlomek@xeris.cz>
-
- partially port the mpegstream plugin to GStreamer 0.9.
- Original commit message from CVS:
- 2005-11-14 Martin Soto <martinsoto@users.sourceforge.net>
- * configure.ac:
- * gst/mpegstream/Makefile.am:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegpacketize.c:
- * gst/mpegstream/gstmpegpacketize.h:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstmpegstream.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/mpegstream/gstrfc2250enc.h:
- Applied patch from Josef Zlomek <josef.zlomek@xeris.cz> to
- partially port the mpegstream plugin to GStreamer 0.9.
-
-2005-11-14 17:13:20 +0000 Andy Wingo <wingo@pobox.com>
-
- configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better debugging, allows dll builds on windows. Fixes #316076.
- Original commit message from CVS:
- 2005-11-14 Andy Wingo <wingo@pobox.com>
- * configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better
- debugging, allows dll builds on windows. Fixes #316076.
-
-2005-11-11 19:37:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- back to head
- Original commit message from CVS:
- back to head
-
-=== release 0.9.5 ===
-
-2005-11-11 19:35:55 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * RELEASE:
- * common:
- * configure.ac:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- releasing 0.9.5
- Original commit message from CVS:
- releasing 0.9.5
-
-2005-10-27 21:50:11 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Forward GstFlowReturn about everywhere.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
- (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
- (handle_sequence), (handle_picture), (handle_slice),
- (gst_mpeg2dec_chain), (gst_mpeg2dec_src_query), (normal_seek),
- (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
- Forward GstFlowReturn about everywhere.
- Handle seeking correctly.
-
-2005-10-27 17:26:13 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: Small cleanups in refcounting.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format),
- (handle_sequence), (handle_slice), (gst_mpeg2dec_chain),
- (gst_mpeg2dec_src_query), (gst_mpeg2dec_change_state):
- Small cleanups in refcounting.
-
-2005-10-26 16:45:04 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/mpeg2dec/gstmpeg2dec.*: Removed lots of dubious code.
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
- (gst_mpeg2dec_dispose), (gst_mpeg2dec_reset),
- (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
- (handle_sequence), (handle_picture):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Removed lots of dubious code.
- Handle flushing and seeking correctly. Still leaks though...
-
-2005-10-24 13:37:47 +0000 Christian Schaller <uraeus@gnome.org>
-
- * ChangeLog:
- * configure.ac:
- port plugins listing changes
- Original commit message from CVS:
- port plugins listing changes
-
-2005-10-23 23:06:09 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.9.4 ===
-
-2005-10-23 22:44:44 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * Makefile.am:
- * NEWS:
- * RELEASE:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.signals:
- * docs/plugins/inspect/plugin-a52dec.xml:
- * docs/plugins/inspect/plugin-amrnb.xml:
- * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
- * gst/realmedia/rmdemux.c:
- * po/POTFILES.in:
- releasing 0.9.4
- Original commit message from CVS:
- releasing 0.9.4
-
-2005-10-23 14:32:49 +0000 Julien Moutte <julien@moutte.net>
-
- gst/realmedia/rmdemux.c: STOPPED->FAILED
- Original commit message from CVS:
- 2005-10-23 Julien MOUTTE <julien@moutte.net>
- * gst/realmedia/rmdemux.c: (gst_rmdemux_loop): STOPPED->FAILED
-
-2005-10-21 16:22:00 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- add packaging of a52dec
- Original commit message from CVS:
- add packaging of a52dec
-
-2005-10-21 11:58:38 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: Set correct stream time in newsegment event.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
- (gst_rmdemux_perform_seek), (gst_rmdemux_src_query):
- Set correct stream time in newsegment event.
-
-2005-10-20 22:43:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ext/Makefile.am:
- fix distcheck
- Original commit message from CVS:
- fix distcheck
-
-2005-10-20 22:40:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * ext/Makefile.am:
- fix distcheck
- Original commit message from CVS:
- fix distcheck
-
-2005-10-20 09:51:58 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/a52dec/: Re-enable CPU flags, use liboil to get them.
- Original commit message from CVS:
- * ext/a52dec/Makefile.am:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_base_init),
- (gst_a52dec_class_init), (gst_a52dec_sink_event),
- (gst_a52dec_change_state):
- * ext/a52dec/gsta52dec.h:
- Re-enable CPU flags, use liboil to get them.
-
-2005-10-20 09:00:30 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- Port AC3 decoder to 0.9 (#318849).
- Original commit message from CVS:
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
- * configure.ac:
- * ext/a52dec/Makefile.am:
- * ext/a52dec/gsta52dec.c:
- * ext/a52dec/gsta52dec.h:
- Port AC3 decoder to 0.9 (#318849).
-
-2005-10-20 08:30:33 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/sidplay/gstsiddec.cc: Small fixes and more error messages.
- Original commit message from CVS:
- * ext/sidplay/gstsiddec.cc:
- Small fixes and more error messages.
-
-2005-10-19 16:01:35 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- API change fixen.
- Original commit message from CVS:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
- (gst_amrnbparse_state_change):
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
- * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/sidplay/gstsiddec.cc:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
- (gst_rmdemux_src_query), (gst_rmdemux_src_query_types):
- API change fixen.
-
-2005-10-19 12:43:28 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: GST_DOC has been renamed to GST_DOCBOOK_CHECK
- Original commit message from CVS:
- * configure.ac:
- GST_DOC has been renamed to GST_DOCBOOK_CHECK
-
-2005-10-19 09:47:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- configure.ac: some docs I had
- Original commit message from CVS:
- * configure.ac:
- some docs I had
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
- trivial fixes
-
-2005-10-18 13:23:22 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/realmedia/rmdemux.c: segment-start/done API change.
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
- (gst_rmdemux_perform_seek):
- segment-start/done API change.
-
-2005-10-17 17:50:45 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * common:
- * gst/iec958/ac3iec.c:
- Set buffer durations on IEC958 buffers.
- Original commit message from CVS:
- Set buffer durations on IEC958 buffers.
-
-2005-10-16 17:06:42 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- configure.ac: Fix glib check
- Original commit message from CVS:
- * configure.ac:
- Fix glib check
-
-2005-10-13 19:14:25 +0000 Tim-Philipp Müller <tim@centricular.net>
-
- ext/mad/gstid3tag.c: Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
-
-2005-10-13 15:29:56 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- examples/stats/mp2ogg.c: yes, typo fixes
- Original commit message from CVS:
- * examples/stats/mp2ogg.c:
- yes, typo fixes
-
-2005-10-12 14:30:36 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition
- Original commit message from CVS:
- * examples/indexing/indexmpeg.c: (main):
- * ext/a52dec/gsta52dec.c: (gst_a52dec_init):
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_is_open),
- (dvdnavsrc_set_property), (dvdnavsrc_open), (dvdnavsrc_close),
- (dvdnavsrc_event), (dvdnavsrc_convert), (dvdnavsrc_query):
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_set_property),
- (dvdreadsrc_srcpad_query), (dvdreadsrc_get),
- (dvdreadsrc_open_file), (dvdreadsrc_close_file):
- * ext/dvdread/dvdreadsrc.h:
- * ext/lame/gstlame.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init):
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
- * gst/iec958/ac3iec.h:
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
- * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init):
- renamed GST_FLAGS macros to GST_OBJECT_FLAGS
- moved bitshift from macro to enum definition
-
-2005-10-11 16:37:16 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- newsegment API update.
- Original commit message from CVS:
- * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
- * ext/mad/gstmad.c: (gst_mad_chain):
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (gst_mp3parse_chain):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
- (gst_rmdemux_chain), (gst_rmdemux_add_stream):
- newsegment API update.
-
-2005-10-06 13:14:38 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/amrnbdec.c: Mark invalid frame sizes
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c:
- Mark invalid frame sizes
- * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
- UNUSABLE is not to be used here, just push out stuff so
- probes can continue linking or making the pad usable.
-
-2005-10-05 11:25:51 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/realmedia/rmdemux.c:
- Improve seek error-resilience.
- Original commit message from CVS:
- Improve seek error-resilience.
- Better error handling generally.
-
-2005-10-03 17:59:55 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * configure.ac:
- back to head
- Original commit message from CVS:
- back to head
-
-=== release 0.9.3 ===
-
-2005-10-03 17:49:44 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * README:
- * configure.ac:
- * ext/sidplay/Makefile.am:
- release time
- Original commit message from CVS:
- release time
-
-2005-09-30 16:43:12 +0000 Michael Smith <msmith@xiph.org>
-
- * gst/realmedia/rmdemux.h:
- Forgot to commit this file. I hate Nano.
- Original commit message from CVS:
- Forgot to commit this file. I hate Nano.
-
-2005-09-30 16:39:47 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * common:
- * gst/realmedia/rmdemux.c:
- Sanity checks and memory leak fixes for real demuxer
- Original commit message from CVS:
- Sanity checks and memory leak fixes for real demuxer
-
-2005-09-29 13:44:15 +0000 Michael Smith <msmith@xiph.org>
-
- gst/realmedia/rmdemux.c: Real demuxer fixes. Make it more bulletproof against bad data, identify a few more stream ty...
- Original commit message from CVS:
- * gst/realmedia/rmdemux.c: (gst_rmdemux_src_event),
- (gst_rmdemux_perform_seek), (gst_rmdemux_loop),
- (gst_rmdemux_send_event), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
- Real demuxer fixes. Make it more bulletproof against bad data,
- identify a few more stream types.
- Fix seeking so that it works (at least with the seek example
- program; it still fails with totem).
-
-2005-09-26 14:41:23 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.c: Set correct caps on buffers too.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_sink_event), (gst_mp3parse_chain):
- Set correct caps on buffers too.
-
-2005-09-26 14:31:53 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/mpegaudioparse/gstmpegaudioparse.*: Put timestamps on buffers.
- Original commit message from CVS:
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
- (gst_mp3parse_sink_event), (gst_mp3parse_chain):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Put timestamps on buffers.
-
-2005-09-21 22:21:22 +0000 Flavio Oliveira <flavio.oliveira@indt.org.br>
-
- * ChangeLog:
- * ext/amrnb/amrnbenc.c:
- Changed amrnbenc description, it is an encoder, not decoder.
- Original commit message from CVS:
- Changed amrnbenc description, it is an encoder, not decoder.
-
-2005-09-21 16:21:45 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/iec958/ac3_padder.c:
- * gst/iec958/ac3_padder.h:
- * gst/iec958/ac3iec.c:
- Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers and dump the frame (as a probable sync failu...
- Original commit message from CVS:
- Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers
- more accurate, and to check AC3 checksums (both of them in each frame),
- and dump the frame (as a probable sync failure) if they don't match.
- General code cleanup, improved comments. Changed to not construct the
- header backwards, and not byteswap everything else. If we end up needing
- to do little-endian output, we should swap in the element doing the
- output (AC3 is big-endian).
-
-2005-09-20 17:37:54 +0000 Christian Schaller <uraeus@gnome.org>
-
- * gst-plugins-ugly.spec.in:
- fix spec file for ugly
- Original commit message from CVS:
- fix spec file for ugly
-
-2005-09-19 23:25:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * docs/plugins/inspect/plugin-lame.xml:
- revert empty commit
- Original commit message from CVS:
- revert empty commit
-
-2005-09-19 23:24:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * docs/plugins/scan.stamp:
- whoops, wrong files
- Original commit message from CVS:
- whoops, wrong files
-
-2005-09-19 23:21:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- docs/plugins/gst-plugins-ugly-plugins.*: commit missing files
- Original commit message from CVS:
- * docs/plugins/gst-plugins-ugly-plugins.args:
- * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
- * docs/plugins/gst-plugins-ugly-plugins.interfaces:
- * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
- commit missing files
- * docs/plugins/inspect/plugin-lame.xml:
- update
-
-2005-09-19 16:44:13 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * Makefile.am:
- * common:
- * gst-plugins-ugly.spec.in:
- add check-valgrind target
- Original commit message from CVS:
- add check-valgrind target
-
-2005-09-19 13:46:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * docs/plugins/scanobj-build.stamp:
- add stamp
- Original commit message from CVS:
- add stamp
-
-2005-09-19 11:07:40 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/lame/gstlame.c: Set caps on outgoing buffers.
- Original commit message from CVS:
- * ext/lame/gstlame.c: (gst_lame_chain):
- Set caps on outgoing buffers.
-
-2005-09-16 16:04:28 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * ext/lame/gstlame.c:
- * ext/lame/gstlame.h:
- clean up further so we don't try to set up five times for a simple pipeline
- Original commit message from CVS:
- clean up further so we don't try to set up five times for
- a simple pipeline
-
-2005-09-16 15:43:08 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * common:
- * gst/iec958/ac3iec.c:
- Set setcaps function on sink pad, not source pad. Produce correct caps on output buffers.
- Original commit message from CVS:
- Set setcaps function on sink pad, not source pad. Produce correct caps
- on output buffers.
-
-2005-09-11 17:53:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-iec958.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpegaudioparse.xml:
- * docs/plugins/inspect/plugin-rmdemux.xml:
- update inspect with source
- Original commit message from CVS:
- update inspect with source
-
-2005-09-07 13:42:44 +0000 Stefan Kost <ensonic@users.sourceforge.net>
-
- ext/mad/gstid3tag.c: gsttaginterface.h -> gsttagsetter.h
- Original commit message from CVS:
- * ext/mad/gstid3tag.c:
- gsttaginterface.h -> gsttagsetter.h
-
-2005-09-06 14:06:51 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * configure.ac:
- back to HEAD
- Original commit message from CVS:
- back to HEAD
-
-=== release 0.9.1 ===
-
-2005-09-06 14:05:40 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * ChangeLog:
- * NEWS:
- * README:
- * RELEASE:
- * autogen.sh:
- * configure.ac:
- releasing 0.9.2
- Original commit message from CVS:
- releasing 0.9.2
-
-2005-09-06 12:00:33 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- ext/amrnb/: State change function updates.
- Original commit message from CVS:
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_state_change):
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_state_change):
- State change function updates.
-
-2005-09-05 17:24:20 +0000 Jan Schmidt <thaytan@mad.scientist.com>
-
- ext/mpeg2dec/gstmpeg2dec.c: GST_CAT_SEEK disappeared from the public API at some point
- Original commit message from CVS:
- * ext/mpeg2dec/gstmpeg2dec.c:
- GST_CAT_SEEK disappeared from the public API at some point
-
-2005-09-05 11:42:10 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * gst/iec958/ac3_padder.c:
- * gst/iec958/ac3_padder.h:
- doc fixes
- Original commit message from CVS:
- doc fixes
-
-2005-09-04 19:28:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * Makefile.am:
- * autogen.sh:
- * common:
- * configure.ac:
- * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
- * docs/plugins/inspect-build.stamp:
- * docs/plugins/inspect.stamp:
- * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
- * docs/plugins/inspect/plugin-iec958.xml:
- * docs/plugins/inspect/plugin-lame.xml:
- * docs/plugins/inspect/plugin-mad.xml:
- * docs/plugins/inspect/plugin-mpegaudioparse.xml:
- * docs/plugins/inspect/plugin-rmdemux.xml:
- docs for ugly plugins
- Original commit message from CVS:
- docs for ugly plugins
-
-2005-09-02 18:01:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * gst-plugins-ugly.spec.in:
- * gst/iec958/Makefile.am:
- build fixes
- Original commit message from CVS:
- build fixes
-
-2005-09-02 17:04:39 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/iec958/ac3iec.c:
- Accept audio/x-private1-a3c on sink pad
- Original commit message from CVS:
- Accept audio/x-private1-a3c on sink pad
-
-2005-09-02 17:01:14 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * gst-plugins-ugly.spec.in:
- spec updates
- Original commit message from CVS:
- spec updates
-
-2005-09-02 15:43:54 +0000 Andy Wingo <wingo@pobox.com>
-
- * examples/gstplay/player.c:
- * examples/stats/mp2ogg.c:
- * ext/a52dec/gsta52dec.c:
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c:
- * ext/amrnb/amrnbparse.c:
- * ext/dvdnav/dvdnavsrc.c:
- * ext/dvdread/dvdreadsrc.c:
- * ext/lame/gstlame.c:
- * ext/mad/gstid3tag.c:
- * ext/mad/gstmad.c:
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst/ac3parse/gstac3parse.c:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfmux.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/iec958/ac3iec.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegparse.c:
- * gst/mpegstream/gstrfc2250enc.c:
- * gst/realmedia/rmdemux.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- All plugins updated for element state changes.
- Original commit message from CVS:
- 2005-09-02 Andy Wingo <wingo@pobox.com>
- * All plugins updated for element state changes.
-
-2005-09-02 14:19:17 +0000 Michael Smith <msmith@xiph.org>
-
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/iec958/ac3iec.c:
- Fix return types in setcaps functions
- Original commit message from CVS:
- Fix return types in setcaps functions
-
-2005-09-02 13:37:13 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/iec958/ac3iec.c:
- Changes to correctly use first_access parameter in ac3 and lpcm plugins.
- Original commit message from CVS:
- Changes to correctly use first_access parameter in ac3 and lpcm plugins.
- Some general cleanups in iec958 framer.
-
-2005-09-01 21:07:34 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * m4/Makefile.am:
- * m4/as-arts.m4:
- * m4/esd.m4:
- * m4/gst-alsa.m4:
- * m4/gst-artsc.m4:
- * m4/gst-matroska.m4:
- * m4/ogg.m4:
- * m4/vorbis.m4:
- fix distcheck; remove some old m4s
- Original commit message from CVS:
- fix distcheck; remove some old m4s
-
-2005-09-01 17:31:21 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * configure.ac:
- * gst/iec958/Makefile.am:
- * gst/iec958/ac3_padder.c:
- * gst/iec958/ac3_padder.h:
- * gst/iec958/ac3iec.c:
- * gst/iec958/ac3iec.h:
- AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
- Original commit message from CVS:
- AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
-
-2005-09-01 11:52:34 +0000 Wim Taymans <wim.taymans@gmail.com>
-
- gst/dvdlpcmdec/gstdvdlpcmdec.c: Cleanups, fixed header parsing and stripping.
- Original commit message from CVS:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_setcaps),
- (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
- (gst_dvdlpcmdec_change_state):
- Cleanups, fixed header parsing and stripping.
-
-2005-09-01 11:34:39 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- Use the right bytes when parsing the LPCM dvd header
- Original commit message from CVS:
- Use the right bytes when parsing the LPCM dvd header
-
-2005-09-01 11:16:15 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- Return the correct values from chain function
- Original commit message from CVS:
- Return the correct values from chain function
-
-2005-09-01 10:04:53 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- * common:
- * docs/Makefile.am:
- * docs/plugins/.gitignore:
- * docs/random/ChangeLog-0.8:
- * docs/version.entities.in:
- adding doc stuff
- Original commit message from CVS:
- adding doc stuff
-
-2005-08-31 19:37:08 +0000 Michael Smith <msmith@xiph.org>
-
- * ChangeLog:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c:
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- Restructure LPCM decoder to not expect the demuxer to parse the LPCM header; instead do this internally. Also support...
- Original commit message from CVS:
- Restructure LPCM decoder to not expect the demuxer to parse the LPCM
- header; instead do this internally. Also support the old way, using
- a different mime-type. CVS:
-
-2001-12-17 18:37:01 +0000 Thomas Vander Stichele <thomas@apestaart.org>
-
- building up speed
- Original commit message from CVS:
- building up speed
-
+++ /dev/null
-GStreamer is currently maintained by the consensus of a number
-of people, including, but not limited to:
-
- Jan Schmidt <thaytan@noraisin.net>
- Wim Taymans <wim.taymans@gmail.com>
- David Schleef <ds@schleef.org>
- Tim-Philipp Müller <tim centricular net>
- Sebastian Dröge <slomo@coaxion.net>
-
-Maintainer-related issues should be addressed to:
-
- gstreamer-devel@lists.freedesktop.org
+++ /dev/null
-GStreamer 1.20 Release Notes
-
-GStreamer 1.20 has not been released yet. It is scheduled for release
-around October/November 2021.
-
-1.19.x is the unstable development version that is being developed in
-the git main branch and which will eventually result in 1.20, and 1.19.2
-is the current development release in that series
-
-It is expected that feature freeze will be in early October 2021,
-followed by one or two 1.19.9x pre-releases and the new 1.20 stable
-release around October/November 2021.
-
-1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
-1.10, 1.8, 1.6,, 1.4, 1.2 and 1.0 release series.
-
-See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
-version of this document.
-
-Last updated: Wednesday 22 September 2021, 18:00 UTC (log)
-
-Introduction
-
-The GStreamer team is proud to announce a new major feature release in
-the stable 1.x API series of your favourite cross-platform multimedia
-framework!
-
-As always, this release is again packed with many new features, bug
-fixes and other improvements.
-
-Highlights
-
-- this section will be completed in due course
-
-Major new features and changes
-
-Noteworthy new features and API
-
-- this section will be filled in in due course
-
-New elements
-
-- this section will be filled in in due course
-
-New element features and additions
-
-- this section will be filled in in due course
-
-Plugin and library moves
-
-- this section will be filled in in due course
-
-- There were no plugin moves or library moves in this cycle.
-
-Plugin removals
-
-The following elements or plugins have been removed:
-
-- this section will be filled in in due course
-
-Miscellaneous API additions
-
-- this section will be filled in in due course
-
-Miscellaneous performance, latency and memory optimisations
-
-- this section will be filled in in due course
-
-Miscellaneous other changes and enhancements
-
-- this section will be filled in in due course
-
-Tracing framework and debugging improvements
-
-- this section will be filled in in due course
-
-Tools
-
-- this section will be filled in in due course
-
-GStreamer RTSP server
-
-- this section will be filled in in due course
-
-GStreamer VAAPI
-
-- this section will be filled in in due course
-
-GStreamer OMX
-
-- this section will be filled in in due course
-
-GStreamer Editing Services and NLE
-
-- this section will be filled in in due course
-
-GStreamer validate
-
-- this section will be filled in in due course
-
-GStreamer Python Bindings
-
-- this section will be filled in in due course
-
-GStreamer C# Bindings
-
-- this section will be filled in in due course
-
-GStreamer Rust Bindings and Rust Plugins
-
-The GStreamer Rust bindings are released separately with a different
-release cadence that’s tied to gtk-rs, but the latest release has
-already been updated for the upcoming new GStreamer 1.20 API.
-
-gst-plugins-rs, the module containing GStreamer plugins written in Rust,
-has also seen lots of activity with many new elements and plugins.
-
-What follows is a list of elements and plugins available in
-gst-plugins-rs, so people don’t miss out on all those potentially useful
-elements that have no C equivalent.
-
-- FIXME: add new elements
-
-Rust audio plugins
-
-- audiornnoise: New element for audio denoising which implements the
- noise removal algorithm of the Xiph RNNoise library, in Rust
-- rsaudioecho: Port of the audioecho element from gst-plugins-good
- rsaudioloudnorm: Live audio loudness normalization element based on
- the FFmpeg af_loudnorm filter
-- claxondec: FLAC lossless audio codec decoder element based on the
- pure-Rust claxon implementation
-- csoundfilter: Audio filter that can use any filter defined via the
- Csound audio programming language
-- lewtondec: Vorbis audio decoder element based on the pure-Rust
- lewton implementation
-
-Rust video plugins
-
-- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
- on a pure-Rust CD+G implementation, used for example by karaoke CDs
-- cea608overlay: CEA-608 Closed Captions overlay element
-- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
- subtitles) converter
-- tttocea608: CEA-608 Closed Captions from timed-text converter
-- mccenc/mccparse: MacCaption Closed Caption format encoder and parser
-- sccenc/sccparse: Scenarist Closed Caption format encoder and parser
-- dav1dec: AV1 video decoder based on the dav1d decoder implementation
- by the VLC project
-- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
- encoder implementation
-- rsflvdemux: Alternative to the flvdemux FLV demuxer element from
- gst-plugins-good, not feature-equivalent yet
-- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
- implementations by the image-rs project
-
-Rust text plugins
-
-- textwrap: Element for line-wrapping timed text (e.g. subtitles) for
- better screen-fitting, including hyphenation support for some
- languages
-
-Rust network plugins
-
-- reqwesthttpsrc: HTTP(S) source element based on the Rust
- reqwest/hyper HTTP implementations and almost feature-equivalent
- with the main GStreamer HTTP source souphttpsrc
-- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
-- awstranscriber: Live audio to timed text transcription element using
- the Amazon AWS Transcribe API
-
-Generic Rust plugins
-
-- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
- on libsodium/NaCl
-- togglerecord: Recording element that allows to pause/resume
- recordings easily and considers keyframe boundaries
-- fallbackswitch/fallbacksrc: Elements for handling potentially
- failing (network) sources, restarting them on errors/timeout and
- showing a fallback stream instead
-- threadshare: Set of elements that provide alternatives for various
- existing GStreamer elements but allow to share the streaming threads
- between each other to reduce the number of threads
-- rsfilesrc/rsfilesink: File source/sink elements as replacements for
- the existing filesrc/filesink elements
-
-Build and Dependencies
-
-- this section will be filled in in due course
-
-gst-build
-
-- this section will be filled in in due course
-
-Cerbero
-
-Cerbero is a meta build system used to build GStreamer plus dependencies
-on platforms where dependencies are not readily available, such as
-Windows, Android, iOS and macOS.
-
-General improvements
-
-- this section will be filled in in due course
-
-macOS / iOS
-
-- this section will be filled in in due course
-
-Windows
-
-- this section will be filled in in due course
-
-Windows MSI installer
-
-- this section will be filled in in due course
-
-Linux
-
-- this section will be filled in in due course
-
-Android
-
-- this section will be filled in in due course
-
-Platform-specific changes and improvements
-
-Android
-
-- this section will be filled in in due course
-
-macOS and iOS
-
-- this section will be filled in in due course
-
-Windows
-
-- this section will be filled in in due course
-
-Linux
-
-- this section will be filled in in due course
-
-Documentation improvements
-
-- this section will be filled in in due course
-
-Possibly Breaking Changes
-
-- this section will be filled in in due course
-- MPEG-TS SCTE-35 API changes (FIXME: flesh out)
-- gst_parse_launch() and friends now error out on non-existing
- properties on top-level bins where they would silently fail and
- ignore those before.
-
-Known Issues
-
-- this section will be filled in in due course
-
-- There are a couple of known WebRTC-related regressions/blockers:
-
- - webrtc: DTLS setup with Chrome is broken
- - webrtcbin: First keyframe is usually lost
-
-Contributors
-
-- this section will be filled in in due course
-
-… and many others who have contributed bug reports, translations, sent
-suggestions or helped testing.
-
-Stable 1.20 branch
-
-After the 1.20.0 release there will be several 1.20.x bug-fix releases
-which will contain bug fixes which have been deemed suitable for a
-stable branch, but no new features or intrusive changes will be added to
-a bug-fix release usually. The 1.20.x bug-fix releases will be made from
-the git 1.20 branch, which will be a stable branch.
-
-1.20.0
-
-1.20.0 is scheduled to be released around October/November 2021.
-
-Schedule for 1.22
-
-Our next major feature release will be 1.22, and 1.21 will be the
-unstable development version leading up to the stable 1.22 release. The
-development of 1.21/1.22 will happen in the git main branch.
-
-The plan for the 1.22 development cycle is yet to be confirmed.
-
-1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
-1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
-
-------------------------------------------------------------------------
-
-These release notes have been prepared by Tim-Philipp Müller with
-contributions from …
-
-License: CC BY-SA 4.0
+++ /dev/null
-GStreamer 1.19.x development series
-
-WHAT IT IS
-----------
-
-This is GStreamer, a framework for streaming media.
-
-WHERE TO START
---------------
-
-We have a website at
-
- https://gstreamer.freedesktop.org
-
-Our documentation, including tutorials, API reference and FAQ can be found at
-
- https://gstreamer.freedesktop.org/documentation/
-
-You can subscribe to our mailing lists:
-
- https://lists.freedesktop.org/mailman/listinfo/gstreamer-announce
-
- https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-
-We track bugs, feature requests and merge requests (patches) in GitLab at
-
- https://gitlab.freedesktop.org/gstreamer/
-
-You can join us on IRC - #gstreamer on irc.freenode.org
-
-GStreamer 1.0 series
---------------------
-
-Starring
-
- GSTREAMER
-
-The core around which all other modules revolve. Base functionality and
-libraries, some essential elements, documentation, and testing.
-
- BASE
-
-A well-groomed and well-maintained collection of GStreamer plug-ins and
-elements, spanning the range of possible types of elements one would want
-to write for GStreamer.
-
-And introducing, for the first time ever, on the development screen ...
-
- THE GOOD
-
- --- "Such ingratitude. After all the times I've saved your life."
-
-A collection of plug-ins you'd want to have right next to you on the
-battlefield. Shooting sharp and making no mistakes, these plug-ins have it
-all: good looks, good code, and good licensing. Documented and dressed up
-in tests. If you're looking for a role model to base your own plug-in on,
-here it is.
-
-If you find a plot hole or a badly lip-synced line of code in them,
-let us know - it is a matter of honour for us to ensure Blondie doesn't look
-like he's been walking 100 miles through the desert without water.
-
- THE UGLY
-
- --- "When you have to shoot, shoot. Don't talk."
-
-There are times when the world needs a color between black and white.
-Quality code to match the good's, but two-timing, backstabbing and ready to
-sell your freedom down the river. These plug-ins might have a patent noose
-around their neck, or a lock-up license, or any other problem that makes you
-think twice about shipping them.
-
-We don't call them ugly because we like them less. Does a mother love her
-son less because he's not as pretty as the other ones ? No - she commends
-him on his great personality. These plug-ins are the life of the party.
-And we'll still step in and set them straight if you report any unacceptable
-behaviour - because there are two kinds of people in the world, my friend:
-those with a rope around their neck and the people who do the cutting.
-
- THE BAD
-
- --- "That an accusation?"
-
-No perfectly groomed moustache or any amount of fine clothing is going to
-cover up the truth - these plug-ins are Bad with a capital B.
-They look fine on the outside, and might even appear to get the job done, but
-at the end of the day they're a black sheep. Without a golden-haired angel
-to watch over them, they'll probably land in an unmarked grave at the final
-showdown.
-
-Don't bug us about their quality - exercise your Free Software rights,
-patch up the offender and send us the patch on the fastest steed you can
-steal from the Confederates. Because you see, in this world, there's two
-kinds of people, my friend: those with loaded guns and those who dig.
-You dig.
-
-The Lowdown
------------
-
- --- "I've never seen so many plug-ins wasted so badly."
-
-GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
-the chaff. Also, distributors have brought up issues about the legal status
-of some of the plug-ins we ship. To remedy this, we've divided the previous
-set of available plug-ins into four modules:
-
-- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
- of possible types of elements; these are continuously kept up-to-date
- with any core changes during the development series.
-
- - We believe distributors can safely ship these plug-ins.
- - People writing elements should base their code on these elements.
- - These elements come with examples, documentation, and regression tests.
-
-- gst-plugins-good: a set of plug-ins that we consider to have good quality
- code, correct functionality, our preferred license (LGPL for the plug-in
- code, LGPL or LGPL-compatible for the supporting library).
-
- - We believe distributors can safely ship these plug-ins.
- - People writing elements should base their code on these elements.
-
-- gst-plugins-ugly: a set of plug-ins that have good quality and correct
- functionality, but distributing them might pose problems. The license
- on either the plug-ins or the supporting libraries might not be how we'd
- like. The code might be widely known to present patent problems.
-
- - Distributors should check if they want/can ship these plug-ins.
- - People writing elements should base their code on these elements.
-
-- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
- rest. They might be close to being good quality, but they're missing
- something - be it a good code review, some documentation, a set of tests,
- a real live maintainer, or some actual wide use.
- If the blanks are filled in they might be upgraded to become part of
- either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
-
- - If the plug-ins break, you can't complain - instead, you can fix the
- problem and send us a patch, or bribe someone into fixing them for you.
- - New contributors can start here for things to work on.
-
-PLATFORMS
----------
-
-- Linux is of course fully supported
-- FreeBSD is reported to work; other BSDs should work too; same for Solaris
-- MacOS works, binary 1.x packages can be built using the cerbero build tool
-- Windows works; binary 1.x packages can be built using the cerbero build tool
- - MSys/MinGW builds
- - Microsoft Visual Studio builds are also available and supported
-- Android works, binary 1.x packages can be built using the cerbero build tool
-- iOS works
-
-INSTALLING FROM PACKAGES
-------------------------
-
-You should always prefer installing from packages first. GStreamer is
-well-maintained for a number of distributions, including Fedora, Debian,
-Ubuntu, Mandrake, Arch Linux, Gentoo, ...
-
-Only in cases where you:
-
- - want to hack on GStreamer
- - want to verify that a bug has been fixed
- - do not have a sane distribution
-
-should you choose to build from source tarballs or git.
-
-Find more information about the various packages at
-
- https://gstreamer.freedesktop.org/download/
-
-COMPILING FROM SOURCE TARBALLS
-------------------------------
-
-- again, make sure that you really need to install from source!
- If GStreamer is one of your first projects ever that you build from source,
- consider taking on an easier project.
-
-- you need a recent version of Meson installed, see
-
- http://mesonbuild.com/Getting-meson.html
-
- and
-
- https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
-
-- run
-
- meson build
- ninja -C build
-
- to build GStreamer.
-
-- if you want to install it (not required, but what you usually want to do), run
-
- ninja -C build install
-
-- try out a simple test:
- gst-launch-1.0 -v fakesrc num_buffers=5 ! fakesink
- (If you didn't install GStreamer, run `./build/tools/gst-launch-1.0`)
-
- If it outputs a bunch of messages from fakesrc and fakesink, everything is
- ok.
-
- If it did not work, keep in mind that you might need to adjust the
- PATH and/or LD_LIBRARY_PATH environment variables to make the system
- find GStreamer in the prefix where you installed (by default that is /usr/local).
-
-- After this, you're ready to install gst-plugins, which will provide the
- functionality you're probably looking for by now, so go on and read
- that README.
-
-COMPILING FROM GIT
-------------------
-
-You can build an uninstalled GStreamer from git for development or testing
-purposes without affecting your system installation.
-
-Get started with:
-
- git clone https://gitlab.freedesktop.org/gstreamer/gst-build
- meson build
- ninja -C build
- ninja -C build uninstalled
-
-For more information, see the `gst-build` module and its documentation:
-
- https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
-
-
-PLUG-IN DEPENDENCIES AND LICENSES
----------------------------------
-
-GStreamer is developed under the terms of the LGPL (see COPYING file for
-details). Some of our plug-ins however rely on libraries which are available
-under other licenses. This means that if you are distributing an application
-which has a non-GPL compatible license (for instance a closed-source
-application) with GStreamer, you have to make sure not to distribute GPL-linked
-plug-ins.
-
-When using GPL-linked plug-ins, GStreamer is for all practical reasons
-under the GPL itself.
-
-HISTORY
--------
-
-The fundamental design comes from the video pipeline at Oregon Graduate
-Institute, as well as some ideas from DirectMedia. It's based on plug-ins that
-will provide the various codec and other functionality. The interface
-hopefully is generic enough for various companies (ahem, Apple) to release
-binary codecs for Linux, until such time as they get a clue and release the
-source.
+++ /dev/null
-=================================
- GStreamer Static Linking README
-=================================
-
-DRAFT, April 2013
-
-
- I. INTRODUCTION
-
-It is possible to link GStreamer libraries, plugins and applications
-statically, both in case of free/libre/open-source software applications
-and proprietary applications. On some platforms static linking may even
-be required.
-
-However, distributing statically linked binaries using GStreamer usually
-requires additional effort to stay compliant with the GNU LGPL v2.1 license.
-
-The purpose of this document is to draw attention to this fact, and to
-summarise in layman's terms what we believe is required from anyone
-distributing statically linked GStreamer binaries. Most of this also
-applies to dynamically linked GStreamer binaries.
-
-
- II. DISCLAIMER
-
-This document is not legal advice, nor is it comprehensive. It may use
-words in ways that do not match the definition or use in the license
-text. It may even be outright wrong. Read the license text for all the
-details, it is the only legally binding document in this respect.
-
-This document is primarily concerned with the implications for the
-distribution of binaries based on LGPL-licensed software as imposed by
-the LGPL license, but there may be other restrictions to the distribution
-of such binaries, such as terms and conditions of distribution channels
-(e.g. "app stores").
-
-
- III. THE SPIRIT OF THE LGPL LICENSE
-
-The GNU LGPL v2.1 license allows use of such-licensed software by
-proprietary applications, but still aims to ensure that at least the
-LGPL-licensed software parts remain free under all circumstances. This
-means any changes to LGPL-licensed source code must be documented and
-be made available on request to those who received binaries of the
-software. It also means that it must be possible to make changes to the
-LGPL-licensed software parts and make the application use those, as far
-as that is possible. And that recipients of an application using
-LGPL-licensed software are made aware of their rights according to the
-LGPL license.
-
-In an environment where GStreamer libraries and plugins are used as
-dynamically-loaded shared objects (DLL/.so/.dyn files), this is usually
-not a big problem, because it is fairly easy to compile a modified version
-of the GStreamer libraries or LGPL plugins, and the application will/should
-just pick up and use the modified version automatically. All that is needed
-is for the original, LGPL-licensed source code and source code modifications
-to be made available, and for a way to build the libraries or plugins for
-the platform required (usually that will be using the build system scripts
-that come with GStreamer, and using the typical build environment on the
-system in question, but where that is not the case the needed build scripts
-and/or tools would need to be provided as well).
-
-
- IV. THINGS YOU NEED TO DO
-
- * You must tell users of your application that you are using LGPL-licensed
- software, which LGPL-licensed software exactly, and you must provide them
- with a copy of the license so they know their rights under the LGPL.
-
- * You must provide (on request) all the source code and all the changes
- or additions you have made to the LGPL-licensed software you are using.
-
- For GStreamer code we would recommend that the changes be provided either
- in form of a branch in a git repository, or as a set of "git format-patch"-
- style patches against a GStreamer release or a snapshot of a GStreamer git
- repository. The patches should ideally say what was changed and why it
- was changed, and there should ideally be separate patches for independent
- changes.
-
- * You must provide a way for users of your application to make changes to
- the LGPL-licensed parts of the code, and re-create a full application
- binary with the changes (using the standard toolchain and tools of the
- target platform; if you are using a custom toolchain or custom tools
- you must provide these and document how to use them to create a new
- application binary).
-
- Note that this of course does not mean that the user is allowed to
- re-distribute the changed application. Nor does it mean that you have
- to provide your proprietary source code - it is sufficient to provide a
- ready-made compiled object file that can be relinked into an application
- binary with the re-compiled LGPL components.
-
-
- V. THINGS TO LOOK OUT FOR
-
-While most GStreamer plugins and the libraries they depend on are licensed
-under the LGPL or even more permissive licenses, that is not the case for
-all plugins and libraries used, esp. those in the gst-plugins-ugly or
-some of those in the gst-plugins-bad set of plugins.
-
-When statically linking proprietary code, care must be taken not to
-statically link plugins or libraries that are licensed under less permissive
-terms than the LGPL, such as e.g. GPL-licensed libraries.
-
-
- VI. SPECIAL CONSIDERATIONS FOR SPECIFIC USE-CASES
-
-
- 1. Proprietary GStreamer/GLib-based Application On iOS
-
-Let's assume an individual or a company wants to distribute a proprietary
-iOS application that is built on top of GStreamer and GLib through
-Apple's App Store. At the time of writing the Apple iPhone developer
-agreement didn’t allow the bundling of shared libraries, so distributing
-a proprietary iOS application with shared libraries is only possible using
-distribution mechanisms outside of the App Store and/or only to jailbroken
-devices, a prospect that may not appeal to our individual or company. So the
-only alternative then is to link everything statically, which means the
-obligations mentioned above come into play.
-
-
- 2. Example: Jabber on iOS
-
-Tandberg (now Cisco) created a Jabber application for iOS, based on GStreamer.
-On request they provided an LGPL compliance bundle in form of a zip file, with
-roughly the following contents:
-
-buildapp.sh
-readme.txt
-Jabber/Jabber-Info.plist
-Jabber/libip.a [236MB binary with proprietary code]
-Jabber/main.mm
-Jabber/xcconfig/Application.xcconfig
-Jabber/xcconfig/Debug.xcconfig
-Jabber/xcconfig/Release.xcconfig
-Jabber/xcconfig/Shared.xcconfig
-Jabber/Resources/*.lproj/Localizable.strings
-Jabber/Resources/{Images,Audio,Sounds,IB,Message Styles,Emoticons,Fonts}/*
-Jabber/Resources/*
-Jabber.xcodeproj/project.pbxproj
-Jabber.xcodeproj/project.xcworkspace/contents.xcworkspacedata
-opensource/build/config.site
-opensource/build/m4/movi.m4
-opensource/build/scripts/clean-deps.sh
-opensource/build/scripts/fixup-makefile.sh
-opensource/build/scripts/MoviMaker.py
-opensource/build.sh
-opensource/env.sh
-opensource/Makefile
-opensource/external/glib/*
-opensource/external/gstreamer/{gstreamer,gst-plugins-*}/*
-opensource/external/openssl/*
-opensource/external/proxy-libintl/*
-opensource/toolchain/darwin-x86/bin/{misc autotoools,m4,glib-mkenums,glib-genmarshal,libtool,pkg-config,etc.}
-opensource/toolchain/darwin-x86/share/{aclocal,aclocal-1.11,autoconf,automake-1.11,libtool}/*
-opensource/toolchain/darwin-x86/share/Config.pm
-opensource/toolchain/darwin-x86/share/Config.pm.movi.in
-patches/glib/glib.patch
-patches/gst-plugins-bad/gst-plugins-bad.patch
-patches/gst-plugins-base/gst-plugins-base.patch
-patches/gst-plugins-good/gst-plugins-good.patch
-patches/gstreamer/gstreamer.patch
-patches/openssl/openssl.patch
-
-readme.txt starts with "This Readme file describes how to build the Cisco
-Jabber for iPad application. You need to install Xcode, but the final package
-is built by running buildapp.sh." and describes how to build project,
-prerequisites, the procedure in detail, and a "How to Include Provisioning
-Profile Manually / Alternate Code Signing Instructions" section.
-
-
- 3. Random Links Which May Be Of Interest
-
-[0] http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/
+++ /dev/null
-This is GStreamer gst-plugins-ugly 1.19.2.
-
-GStreamer 1.19 is the development branch leading up to the next major
-stable version which will be 1.20.
-
-The 1.19 development series adds new features on top of the 1.18 series and is
-part of the API and ABI-stable 1.x release series of the GStreamer multimedia
-framework.
-
-Full release notes will one day be found at:
-
- https://gstreamer.freedesktop.org/releases/1.20/
-
-Binaries for Android, iOS, Mac OS X and Windows will usually be provided
-shortly after the release.
-
-This module will not be very useful by itself and should be used in conjunction
-with other GStreamer modules for a complete multimedia experience.
-
- - gstreamer: provides the core GStreamer libraries and some generic plugins
-
- - gst-plugins-base: a basic set of well-supported plugins and additional
- media-specific GStreamer helper libraries for audio,
- video, rtsp, rtp, tags, OpenGL, etc.
-
- - gst-plugins-good: a set of well-supported plugins under our preferred
- license
-
- - gst-plugins-ugly: a set of well-supported plugins which might pose
- problems for distributors
-
- - gst-plugins-bad: a set of plugins of varying quality that have not made
- their way into one of core/base/good/ugly yet, for one
- reason or another. Many of these are are production quality
- elements, but may still be missing documentation or unit
- tests; others haven't passed the rigorous quality testing
- we expect yet.
-
- - gst-libav: a set of codecs plugins based on the ffmpeg library. This is
- where you can find audio and video decoders and encoders
- for a wide variety of formats including H.264, AAC, etc.
-
- - gstreamer-vaapi: hardware-accelerated video decoding and encoding using
- VA-API on Linux. Primarily for Intel graphics hardware.
-
- - gst-omx: hardware-accelerated video decoding and encoding, primarily for
- embedded Linux systems that provide an OpenMax
- implementation layer such as the Raspberry Pi.
-
- - gst-rtsp-server: library to serve files or streaming pipelines via RTSP
-
- - gst-editing-services: library an plugins for non-linear editing
-
-==== Download ====
-
-You can find source releases of gstreamer in the download
-directory: https://gstreamer.freedesktop.org/src/gstreamer/
-
-The git repository and details how to clone it can be found at
-https://gitlab.freedesktop.org/gstreamer/
-
-==== Homepage ====
-
-The project's website is https://gstreamer.freedesktop.org/
-
-==== Support and Bugs ====
-
-We have recently moved from GNOME Bugzilla to GitLab on freedesktop.org
-for bug reports and feature requests:
-
- https://gitlab.freedesktop.org/gstreamer
-
-Please submit patches via GitLab as well, in form of Merge Requests. See
-
- https://gstreamer.freedesktop.org/documentation/contribute/
-
-for more details.
-
-For help and support, please subscribe to and send questions to the
-gstreamer-devel mailing list (see below for details).
-
-There is also a #gstreamer IRC channel on the Freenode IRC network.
-
-==== Developers ====
-
-GStreamer source code repositories can be found on GitLab on freedesktop.org:
-
- https://gitlab.freedesktop.org/gstreamer
-
-and can also be cloned from there and this is also where you can submit
-Merge Requests or file issues for bugs or feature requests.
-
-Interested developers of the core library, plugins, and applications should
-subscribe to the gstreamer-devel list:
-
- https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
+++ /dev/null
-GStreamer uses a *large* array of tools and libraries, most of which are
-optional. We have attempted to make sure that any code that depends on
-optional libraries doesn't get built unless you have those libraries. If
-you find this not to be the case, please, let us know by filing a bug
-report at http://bugzilla.gnome.org/.
-
-
-Required tools:
-===============
-
-An extra set of tools is required if you wish to build GStreamer out of
-git (using autogen.sh):
-
-autoconf 2.52 or better
-automake 1.5
-gettext 0.11.5
-libtool v1.4 or better
-pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
-
-Required libraries:
-===================
-
-The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
-the version that corresponds to this plugin release.
-
-Optional libraries:
-===================
-
-This file lists supporting libraries for which gst-plugins contains plugins,
-as well as their minimum version. You can find the corresponding plugins in
-ext/(library)
-
-a52dec (for the a52dec AC-3 decoder)
- http://liba52.sourceforge.net/
-opencore-amr (for the AMR-NB decoder and encoder and the AMR-WB decoder)
- http://sourceforge.net/projects/opencore-amr/
-libdvdread (for the dvdreadsrc)
- http://www.dtek.chalmers.se/groups/dvd/
- (optional: libcss for encrypted DVDs)
-mpeg2dec (for mpeg2 related plugins and dvd playback)
- http://libmpeg2.sourceforge.net/
-liborc (for the liborc optimization library)
- http://code.entropywave.com/download/orc/
-cdio (for the cdio CDDA CD audio source)
- http://savannah.gnu.org/projects/libcdio/
-x264 (for the x264enc H.264 encoder)
- http://www.videolan.org/developers/x264.html
-sidplay FIXME
+++ /dev/null
----
-short-description: Plugins from gst-plugins-ugly
-...
-
-# Plugins
-
+++ /dev/null
-@GST_API_VERSION@
+++ /dev/null
-{
- "a52dec": {
- "description": "Decodes ATSC A/52 encoded audio streams",
- "elements": {
- "a52dec": {
- "author": "David I. Lehn <dlehn@users.sourceforge.net>",
- "description": "Decodes ATSC A/52 encoded audio streams",
- "hierarchy": [
- "GstA52Dec",
- "GstAudioDecoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Audio/Converter",
- "long-name": "ATSC A/52 audio decoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/x-ac3:\naudio/ac3:\naudio/x-private1-ac3:\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/x-raw:\n format: F32LE\n layout: interleaved\n rate: [ 4000, 96000 ]\n channels: [ 1, 6 ]\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "drc": {
- "blurb": "Use Dynamic Range Compression",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "lfe": {
- "blurb": "LFE",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "mode": {
- "blurb": "Decoding Mode (default 3f2r)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": " (0)",
- "mutable": "null",
- "readable": true,
- "type": "GstA52DecMode",
- "writable": true
- }
- },
- "rank": "secondary"
- }
- },
- "filename": "gsta52dec",
- "license": "GPL",
- "other-types": {
- "GstA52DecMode": {
- "kind": "enum",
- "values": [
- {
- "desc": "Mono",
- "name": "mono",
- "value": "1"
- },
- {
- "desc": "Stereo",
- "name": "stereo",
- "value": "2"
- },
- {
- "desc": "3 Front",
- "name": "3f",
- "value": "3"
- },
- {
- "desc": "2 Front, 1 Rear",
- "name": "2f1r",
- "value": "4"
- },
- {
- "desc": "3 Front, 1 Rear",
- "name": "3f1r",
- "value": "5"
- },
- {
- "desc": "2 Front, 2 Rear",
- "name": "2f2r",
- "value": "6"
- },
- {
- "desc": "3 Front, 2 Rear",
- "name": "3f2r",
- "value": "7"
- },
- {
- "desc": "Dolby",
- "name": "dolby",
- "value": "10"
- }
- ]
- }
- },
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "amrnb": {
- "description": "Adaptive Multi-Rate Narrow-Band",
- "elements": {
- "amrnbdec": {
- "author": "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>",
- "description": "Adaptive Multi-Rate Narrow-Band audio decoder",
- "hierarchy": [
- "GstAmrnbDec",
- "GstAudioDecoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Audio",
- "long-name": "AMR-NB audio decoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/AMR:\n rate: 8000\n channels: 1\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 8000\n channels: 1\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "variant": {
- "blurb": "The decoder variant",
- "conditionally-available": false,
- "construct": true,
- "construct-only": false,
- "controllable": false,
- "default": "IF1 (0)",
- "mutable": "null",
- "readable": true,
- "type": "GstAmrnbVariant",
- "writable": true
- }
- },
- "rank": "primary"
- },
- "amrnbenc": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Adaptive Multi-Rate Narrow-Band audio encoder",
- "hierarchy": [
- "GstAmrnbEnc",
- "GstAudioEncoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstPreset"
- ],
- "klass": "Codec/Encoder/Audio",
- "long-name": "AMR-NB audio encoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 8000\n channels: 1\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/AMR:\n rate: 8000\n channels: 1\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "band-mode": {
- "blurb": "Encoding Band Mode (Kbps)",
- "conditionally-available": false,
- "construct": true,
- "construct-only": false,
- "controllable": false,
- "default": "MR122 (7)",
- "mutable": "null",
- "readable": true,
- "type": "GstAmrnbEncBandMode",
- "writable": true
- }
- },
- "rank": "secondary"
- }
- },
- "filename": "gstamrnb",
- "license": "unknown",
- "other-types": {
- "GstAmrnbEncBandMode": {
- "kind": "enum",
- "values": [
- {
- "desc": "MR475",
- "name": "MR475",
- "value": "0"
- },
- {
- "desc": "MR515",
- "name": "MR515",
- "value": "1"
- },
- {
- "desc": "MR59",
- "name": "MR59",
- "value": "2"
- },
- {
- "desc": "MR67",
- "name": "MR67",
- "value": "3"
- },
- {
- "desc": "MR74",
- "name": "MR74",
- "value": "4"
- },
- {
- "desc": "MR795",
- "name": "MR795",
- "value": "5"
- },
- {
- "desc": "MR102",
- "name": "MR102",
- "value": "6"
- },
- {
- "desc": "MR122",
- "name": "MR122",
- "value": "7"
- },
- {
- "desc": "MRDTX",
- "name": "MRDTX",
- "value": "8"
- }
- ]
- },
- "GstAmrnbVariant": {
- "kind": "enum",
- "values": [
- {
- "desc": "IF1",
- "name": "IF1",
- "value": "0"
- },
- {
- "desc": "IF2",
- "name": "IF2",
- "value": "1"
- }
- ]
- }
- },
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "amrwbdec": {
- "description": "Adaptive Multi-Rate Wide-Band Decoder",
- "elements": {
- "amrwbdec": {
- "author": "Renato Araujo <renato.filho@indt.org.br>",
- "description": "Adaptive Multi-Rate Wideband audio decoder",
- "hierarchy": [
- "GstAmrwbDec",
- "GstAudioDecoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Audio",
- "long-name": "AMR-WB audio decoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/AMR-WB:\n rate: 16000\n channels: 1\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 16000\n channels: 1\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {},
- "rank": "primary"
- }
- },
- "filename": "gstamrwbdec",
- "license": "unknown",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "asf": {
- "description": "Demuxes and muxes audio and video in Microsofts ASF format",
- "elements": {
- "asfdemux": {
- "author": "Owen Fraser-Green <owen@discobabe.net>",
- "description": "Demultiplexes ASF Streams",
- "hierarchy": [
- "GstASFDemux",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Demuxer",
- "long-name": "ASF Demuxer",
- "pad-templates": {
- "audio_%%u": {
- "caps": "ANY",
- "direction": "src",
- "presence": "sometimes"
- },
- "sink": {
- "caps": "video/x-ms-asf:\n",
- "direction": "sink",
- "presence": "always"
- },
- "video_%%u": {
- "caps": "ANY",
- "direction": "src",
- "presence": "sometimes"
- }
- },
- "rank": "secondary",
- "signals": {}
- },
- "rtpasfdepay": {
- "author": "Tim-Philipp Müller <tim centricular net>, Wim Taymans <wim.taymans@gmail.com>",
- "description": "Extracts ASF streams from RTP",
- "hierarchy": [
- "GstRtpAsfDepay",
- "GstRTPBaseDepayload",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Depayloader/Network",
- "long-name": "RTP ASF packet depayloader",
- "pad-templates": {
- "sink": {
- "caps": "application/x-rtp:\n media: { (string)application, (string)video, (string)audio }\n payload: [ 96, 127 ]\n clock-rate: [ 1, 2147483647 ]\n encoding-name: X-ASF-PF\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "video/x-ms-asf:\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {},
- "rank": "marginal"
- },
- "rtspwms": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Extends RTSP so that it can handle WMS setup",
- "hierarchy": [
- "GstRTSPWMS",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstRTSPExtension"
- ],
- "klass": "Network/Extension/Protocol",
- "long-name": "WMS RTSP Extension",
- "rank": "secondary"
- }
- },
- "filename": "gstasf",
- "license": "LGPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "cdio": {
- "description": "Read audio from audio CDs",
- "elements": {
- "cdiocddasrc": {
- "author": "Tim-Philipp Müller <tim centricular net>",
- "description": "Read audio from CD using libcdio",
- "hierarchy": [
- "GstCdioCddaSrc",
- "GstAudioCdSrc",
- "GstPushSrc",
- "GstBaseSrc",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstURIHandler"
- ],
- "klass": "Source/File",
- "long-name": "CD audio source (CDDA)",
- "pad-templates": {
- "src": {
- "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 44100\n channels: 2\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "read-speed": {
- "blurb": "Read from device at the specified speed (-1 = default)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "-1",
- "max": "100",
- "min": "-1",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- }
- },
- "rank": "secondary - 1"
- }
- },
- "filename": "gstcdio",
- "license": "GPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "dvdlpcmdec": {
- "description": "Decode DVD LPCM frames into standard PCM",
- "elements": {
- "dvdlpcmdec": {
- "author": "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>",
- "description": "Decode DVD LPCM frames into standard PCM audio",
- "hierarchy": [
- "GstDvdLpcmDec",
- "GstAudioDecoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Audio",
- "long-name": "DVD LPCM Audio decoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/x-private1-lpcm:\naudio/x-private2-lpcm:\naudio/x-private-ts-lpcm:\naudio/x-lpcm:\n width: { (int)16, (int)20, (int)24 }\n rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n channels: [ 1, 8 ]\n dynamic_range: [ 0, 255 ]\n emphasis: { (boolean)true, (boolean)false }\n mute: { (boolean)true, (boolean)false }\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/x-raw:\n format: { S16BE, S24BE }\n layout: interleaved\n rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n channels: [ 1, 8 ]\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {},
- "rank": "primary"
- }
- },
- "filename": "gstdvdlpcmdec",
- "license": "LGPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "dvdread": {
- "description": "Access a DVD with dvdread",
- "elements": {
- "dvdreadsrc": {
- "author": "Erik Walthinsen <omega@cse.ogi.edu>",
- "description": "Access a DVD title/chapter/angle using libdvdread",
- "hierarchy": [
- "GstDvdReadSrc",
- "GstPushSrc",
- "GstBaseSrc",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstURIHandler"
- ],
- "klass": "Source/File/DVD",
- "long-name": "DVD Source",
- "pad-templates": {
- "src": {
- "caps": "video/mpeg:\n mpegversion: 2\n systemstream: true\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "angle": {
- "blurb": "angle",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1",
- "max": "999",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- },
- "chapter": {
- "blurb": "chapter",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1",
- "max": "999",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- },
- "device": {
- "blurb": "DVD device location",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "/dev/dvd",
- "mutable": "null",
- "readable": true,
- "type": "gchararray",
- "writable": true
- },
- "title": {
- "blurb": "title",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1",
- "max": "999",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- }
- },
- "rank": "none"
- }
- },
- "filename": "gstdvdread",
- "license": "GPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "dvdsub": {
- "description": "DVD subtitle parser and decoder",
- "elements": {
- "dvdsubdec": {
- "author": "Wim Taymans <wim.taymans@gmail.com>, Jan Schmidt <thaytan@mad.scientist.com>",
- "description": "Decodes DVD subtitles into AYUV video frames",
- "hierarchy": [
- "GstDvdSubDec",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Video",
- "long-name": "DVD subtitle decoder",
- "pad-templates": {
- "sink": {
- "caps": "subpicture/x-dvd:\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "video/x-raw:\n format: { AYUV, ARGB }\n width: 720\n height: 576\n framerate: 0/1\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "rank": "none"
- },
- "dvdsubparse": {
- "author": "Mark Nauwelaerts <mnauw@users.sourceforge.net>",
- "description": "Parses and packetizes DVD subtitle streams",
- "hierarchy": [
- "GstDvdSubParse",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Parser/Subtitle",
- "long-name": "DVD subtitle parser",
- "pad-templates": {
- "sink": {
- "caps": "subpicture/x-dvd:\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "subpicture/x-dvd:\n parsed: true\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "rank": "none"
- }
- },
- "filename": "gstdvdsub",
- "license": "LGPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "mpeg2dec": {
- "description": "LibMpeg2 decoder",
- "elements": {
- "mpeg2dec": {
- "author": "Wim Taymans <wim.taymans@chello.be>",
- "description": "Uses libmpeg2 to decode MPEG video streams",
- "hierarchy": [
- "GstMpeg2dec",
- "GstVideoDecoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Video",
- "long-name": "mpeg1 and mpeg2 video decoder",
- "pad-templates": {
- "sink": {
- "caps": "video/mpeg:\n mpegversion: [ 1, 2 ]\n systemstream: false\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "video/x-raw:\n format: { YV12, I420, Y42B, Y444 }\n width: [ 16, 4096 ]\n height: [ 16, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {},
- "rank": "secondary"
- }
- },
- "filename": "gstmpeg2dec",
- "license": "GPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "realmedia": {
- "description": "RealMedia support plugins",
- "elements": {
- "pnmsrc": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Receive data over the network via PNM",
- "hierarchy": [
- "GstPNMSrc",
- "GstPushSrc",
- "GstBaseSrc",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstURIHandler"
- ],
- "klass": "Source/Network",
- "long-name": "PNM packet receiver",
- "pad-templates": {
- "src": {
- "caps": "application/vnd.rn-realmedia:\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "location": {
- "blurb": "Location of the PNM url to read",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "NULL",
- "mutable": "null",
- "readable": true,
- "type": "gchararray",
- "writable": true
- }
- },
- "rank": "marginal"
- },
- "rademux": {
- "author": "Tim-Philipp Müller <tim centricular net>",
- "description": "Demultiplex a RealAudio file",
- "hierarchy": [
- "GstRealAudioDemux",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Demuxer",
- "long-name": "RealAudio Demuxer",
- "pad-templates": {
- "sink": {
- "caps": "application/x-pn-realaudio:\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "ANY",
- "direction": "src",
- "presence": "sometimes"
- }
- },
- "rank": "secondary",
- "signals": {}
- },
- "rdtdepay": {
- "author": "Lutz Mueller <lutz at topfrose dot de>, Wim Taymans <wim@fluendo.com>",
- "description": "Extracts RealMedia from RDT packets",
- "hierarchy": [
- "GstRDTDepay",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Depayloader/Network",
- "long-name": "RDT packet parser",
- "pad-templates": {
- "sink": {
- "caps": "application/x-rdt:\n media: application\n clock-rate: [ 1, 2147483647 ]\n encoding-name: X-REAL-RDT\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "application/vnd.rn-realmedia:\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "rank": "marginal"
- },
- "rdtmanager": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Accepts raw RTP and RTCP packets and sends them forward",
- "hierarchy": [
- "GstRDTManager",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Parser/Network",
- "long-name": "RTP Decoder",
- "pad-templates": {
- "recv_rtcp_sink_%%u": {
- "caps": "application/x-rtcp:\n",
- "direction": "sink",
- "presence": "request"
- },
- "recv_rtp_sink_%%u": {
- "caps": "application/x-rdt:\n",
- "direction": "sink",
- "presence": "request"
- },
- "recv_rtp_src_%%u_%%u_%%u": {
- "caps": "application/x-rdt:\n",
- "direction": "src",
- "presence": "sometimes"
- },
- "rtcp_src_%%u": {
- "caps": "application/x-rtcp:\n",
- "direction": "src",
- "presence": "request"
- }
- },
- "properties": {
- "latency": {
- "blurb": "Amount of ms to buffer",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "200",
- "max": "-1",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- }
- },
- "rank": "none",
- "signals": {
- "clear-pt-map": {
- "args": [],
- "return-type": "void",
- "when": "last"
- },
- "on-bye-ssrc": {
- "args": [
- {
- "name": "arg0",
- "type": "guint"
- },
- {
- "name": "arg1",
- "type": "guint"
- }
- ],
- "return-type": "void",
- "when": "last"
- },
- "on-bye-timeout": {
- "args": [
- {
- "name": "arg0",
- "type": "guint"
- },
- {
- "name": "arg1",
- "type": "guint"
- }
- ],
- "return-type": "void",
- "when": "last"
- },
- "on-npt-stop": {
- "args": [
- {
- "name": "arg0",
- "type": "guint"
- },
- {
- "name": "arg1",
- "type": "guint"
- }
- ],
- "return-type": "void",
- "when": "last"
- },
- "on-timeout": {
- "args": [
- {
- "name": "arg0",
- "type": "guint"
- },
- {
- "name": "arg1",
- "type": "guint"
- }
- ],
- "return-type": "void",
- "when": "last"
- },
- "request-pt-map": {
- "args": [
- {
- "name": "arg0",
- "type": "guint"
- },
- {
- "name": "arg1",
- "type": "guint"
- }
- ],
- "return-type": "GstCaps",
- "when": "last"
- }
- }
- },
- "rmdemux": {
- "author": "David Schleef <ds@schleef.org>",
- "description": "Demultiplex a RealMedia file into audio and video streams",
- "hierarchy": [
- "GstRMDemux",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Demuxer",
- "long-name": "RealMedia Demuxer",
- "pad-templates": {
- "audio_%%u": {
- "caps": "ANY",
- "direction": "src",
- "presence": "sometimes"
- },
- "sink": {
- "caps": "application/vnd.rn-realmedia:\n",
- "direction": "sink",
- "presence": "always"
- },
- "video_%%u": {
- "caps": "ANY",
- "direction": "src",
- "presence": "sometimes"
- }
- },
- "rank": "primary",
- "signals": {}
- },
- "rtspreal": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Extends RTSP so that it can handle RealMedia setup",
- "hierarchy": [
- "GstRTSPReal",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstRTSPExtension"
- ],
- "klass": "Network/Extension/Protocol",
- "long-name": "RealMedia RTSP Extension",
- "rank": "marginal"
- }
- },
- "filename": "gstrealmedia",
- "license": "LGPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "sid": {
- "description": "Uses libsidplay to decode .sid files",
- "elements": {
- "siddec": {
- "author": "Wim Taymans <wim.taymans@gmail.com>",
- "description": "Use libsidplay to decode SID audio tunes",
- "hierarchy": [
- "GstSidDec",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Codec/Decoder/Audio",
- "long-name": "Sid decoder",
- "pad-templates": {
- "sink": {
- "caps": "audio/x-sid:\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/x-raw:\n format: { S16LE, U16LE, S8, U8 }\n layout: interleaved\n rate: [ 8000, 48000 ]\n channels: [ 1, 2 ]\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "blocksize": {
- "blurb": "Size in bytes to output per buffer",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "4096",
- "max": "-1",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "clock": {
- "blurb": "clock",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "pal (1)",
- "mutable": "null",
- "readable": true,
- "type": "GstSidClock",
- "writable": true
- },
- "filter": {
- "blurb": "filter",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "force-speed": {
- "blurb": "force_speed",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "measured-volume": {
- "blurb": "measured_volume",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "memory": {
- "blurb": "memory",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "bank-switching (32)",
- "mutable": "null",
- "readable": true,
- "type": "GstSidMemory",
- "writable": true
- },
- "metadata": {
- "blurb": "Metadata",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "mutable": "null",
- "readable": true,
- "type": "GstCaps",
- "writable": false
- },
- "mos8580": {
- "blurb": "mos8580",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "tune": {
- "blurb": "tune",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "100",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- }
- },
- "rank": "primary"
- }
- },
- "filename": "gstsid",
- "license": "GPL",
- "other-types": {
- "GstSidClock": {
- "kind": "enum",
- "values": [
- {
- "desc": "PAL",
- "name": "pal",
- "value": "1"
- },
- {
- "desc": "NTSC",
- "name": "ntsc",
- "value": "2"
- }
- ]
- },
- "GstSidMemory": {
- "kind": "enum",
- "values": [
- {
- "desc": "Bank Switching",
- "name": "bank-switching",
- "value": "32"
- },
- {
- "desc": "Transparent ROM",
- "name": "transparent-rom",
- "value": "33"
- },
- {
- "desc": "Playsid Environment",
- "name": "playsid-environment",
- "value": "34"
- }
- ]
- }
- },
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "x264": {
- "description": "libx264-based H264 plugins",
- "elements": {
- "x264enc": {
- "author": "Josef Zlomek <josef.zlomek@itonis.tv>, Mark Nauwelaerts <mnauw@users.sf.net>",
- "description": "H264 Encoder",
- "hierarchy": [
- "GstX264Enc",
- "GstVideoEncoder",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "interfaces": [
- "GstPreset"
- ],
- "klass": "Codec/Encoder/Video",
- "long-name": "x264enc",
- "pad-templates": {
- "sink": {
- "caps": "video/x-raw:\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n format: { Y444, Y42B, I420, YV12, NV12, Y444_10LE, I422_10LE, I420_10LE }\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "video/x-h264:\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n stream-format: { (string)avc, (string)byte-stream }\n alignment: au\n profile: { (string)high-4:4:4, (string)high-4:2:2, (string)high-10, (string)high, (string)main, (string)baseline, (string)constrained-baseline, (string)high-4:4:4-intra, (string)high-4:2:2-intra, (string)high-10-intra }\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "properties": {
- "analyse": {
- "blurb": "Partitions to consider",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "(none)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncAnalyse",
- "writable": true
- },
- "aud": {
- "blurb": "Use AU (Access Unit) delimiter",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "b-adapt": {
- "blurb": "Automatically decide how many B-frames to use",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "b-pyramid": {
- "blurb": "Keep some B-frames as references",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "bframes": {
- "blurb": "Number of B-frames between I and P",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "16",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "bitrate": {
- "blurb": "Bitrate in kbit/sec",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "2048",
- "max": "2048000",
- "min": "1",
- "mutable": "playing",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "byte-stream": {
- "blurb": "Generate byte stream format of NALU",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "cabac": {
- "blurb": "Enable CABAC entropy coding",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "dct8x8": {
- "blurb": "Adaptive spatial transform size",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "frame-packing": {
- "blurb": "Set frame packing mode for Stereoscopic content",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "auto (-1)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncFramePacking",
- "writable": true
- },
- "insert-vui": {
- "blurb": "Insert VUI NAL in stream",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "interlaced": {
- "blurb": "Interlaced material",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "intra-refresh": {
- "blurb": "Use Periodic Intra Refresh instead of IDR frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "ip-factor": {
- "blurb": "Quantizer factor between I- and P-frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1.4",
- "max": "2",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "gfloat",
- "writable": true
- },
- "key-int-max": {
- "blurb": "Maximal distance between two key-frames (0 for automatic)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "2147483647",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "mb-tree": {
- "blurb": "Macroblock-Tree ratecontrol",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "me": {
- "blurb": "Integer pixel motion estimation method",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "hex (1)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncMe",
- "writable": true
- },
- "multipass-cache-file": {
- "blurb": "Filename for multipass cache file",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "x264.log",
- "mutable": "null",
- "readable": true,
- "type": "gchararray",
- "writable": true
- },
- "noise-reduction": {
- "blurb": "Noise reduction strength",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "100000",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "option-string": {
- "blurb": "String of x264 options (overridden by element properties) in the format \"key1=value1:key2=value2\".",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "",
- "mutable": "null",
- "readable": true,
- "type": "gchararray",
- "writable": true
- },
- "pass": {
- "blurb": "Encoding pass/type",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "cbr (0)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncPass",
- "writable": true
- },
- "pb-factor": {
- "blurb": "Quantizer factor between P- and B-frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1.3",
- "max": "2",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "gfloat",
- "writable": true
- },
- "psy-tune": {
- "blurb": "Preset name for psychovisual tuning options",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "none (0)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncPsyTune",
- "writable": true
- },
- "qp-max": {
- "blurb": "Maximum quantizer",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "51",
- "max": "63",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "qp-min": {
- "blurb": "Minimum quantizer",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "10",
- "max": "63",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "qp-step": {
- "blurb": "Maximum quantizer difference between frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "4",
- "max": "63",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "quantizer": {
- "blurb": "Constant quantizer or quality to apply",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "21",
- "max": "50",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "rc-lookahead": {
- "blurb": "Number of frames for frametype lookahead",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "40",
- "max": "250",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- },
- "ref": {
- "blurb": "Number of reference frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "3",
- "max": "16",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "sliced-threads": {
- "blurb": "Low latency but lower efficiency threading",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "speed-preset": {
- "blurb": "Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "medium (6)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncPreset",
- "writable": true
- },
- "sps-id": {
- "blurb": "SPS and PPS ID number",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "31",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "subme": {
- "blurb": "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "1",
- "max": "10",
- "min": "1",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "sync-lookahead": {
- "blurb": "Number of buffer frames for threaded lookahead (-1 for automatic)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "-1",
- "max": "250",
- "min": "-1",
- "mutable": "null",
- "readable": true,
- "type": "gint",
- "writable": true
- },
- "threads": {
- "blurb": "Number of threads used by the codec (0 for automatic)",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "0",
- "max": "2147483647",
- "min": "0",
- "mutable": "null",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "trellis": {
- "blurb": "Enable trellis searched quantization",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "true",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- },
- "tune": {
- "blurb": "Preset name for non-psychovisual tuning options",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "(none)",
- "mutable": "null",
- "readable": true,
- "type": "GstX264EncTune",
- "writable": true
- },
- "vbv-buf-capacity": {
- "blurb": "Size of the VBV buffer in milliseconds",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "600",
- "max": "10000",
- "min": "0",
- "mutable": "playing",
- "readable": true,
- "type": "guint",
- "writable": true
- },
- "weightb": {
- "blurb": "Weighted prediction for B-frames",
- "conditionally-available": false,
- "construct": false,
- "construct-only": false,
- "controllable": false,
- "default": "false",
- "mutable": "null",
- "readable": true,
- "type": "gboolean",
- "writable": true
- }
- },
- "rank": "primary"
- }
- },
- "filename": "gstx264",
- "license": "GPL",
- "other-types": {
- "GstX264EncAnalyse": {
- "kind": "flags",
- "values": [
- {
- "desc": "i4x4",
- "name": "i4x4",
- "value": "0x00000001"
- },
- {
- "desc": "i8x8",
- "name": "i8x8",
- "value": "0x00000002"
- },
- {
- "desc": "p8x8",
- "name": "p8x8",
- "value": "0x00000010"
- },
- {
- "desc": "p4x4",
- "name": "p4x4",
- "value": "0x00000020"
- },
- {
- "desc": "b8x8",
- "name": "b8x8",
- "value": "0x00000100"
- }
- ]
- },
- "GstX264EncFramePacking": {
- "kind": "enum",
- "values": [
- {
- "desc": "Automatic (use incoming video information)",
- "name": "auto",
- "value": "-1"
- },
- {
- "desc": "checkerboard - Left and Right pixels alternate in a checkerboard pattern",
- "name": "checkerboard",
- "value": "0"
- },
- {
- "desc": "column interleaved - Alternating pixel columns represent Left and Right views",
- "name": "column-interleaved",
- "value": "1"
- },
- {
- "desc": "row interleaved - Alternating pixel rows represent Left and Right views",
- "name": "row-interleaved",
- "value": "2"
- },
- {
- "desc": "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view",
- "name": "side-by-side",
- "value": "3"
- },
- {
- "desc": "top bottom - L is on top, R on bottom",
- "name": "top-bottom",
- "value": "4"
- },
- {
- "desc": "frame interleaved - Each frame contains either Left or Right view alternately",
- "name": "frame-interleaved",
- "value": "5"
- }
- ]
- },
- "GstX264EncMe": {
- "kind": "enum",
- "values": [
- {
- "desc": "dia",
- "name": "dia",
- "value": "0"
- },
- {
- "desc": "hex",
- "name": "hex",
- "value": "1"
- },
- {
- "desc": "umh",
- "name": "umh",
- "value": "2"
- },
- {
- "desc": "esa",
- "name": "esa",
- "value": "3"
- },
- {
- "desc": "tesa",
- "name": "tesa",
- "value": "4"
- }
- ]
- },
- "GstX264EncPass": {
- "kind": "enum",
- "values": [
- {
- "desc": "Constant Bitrate Encoding",
- "name": "cbr",
- "value": "0"
- },
- {
- "desc": "Constant Quantizer",
- "name": "quant",
- "value": "4"
- },
- {
- "desc": "Constant Quality",
- "name": "qual",
- "value": "5"
- },
- {
- "desc": "VBR Encoding - Pass 1",
- "name": "pass1",
- "value": "17"
- },
- {
- "desc": "VBR Encoding - Pass 2",
- "name": "pass2",
- "value": "18"
- },
- {
- "desc": "VBR Encoding - Pass 3",
- "name": "pass3",
- "value": "19"
- }
- ]
- },
- "GstX264EncPreset": {
- "kind": "enum",
- "values": [
- {
- "desc": "No preset",
- "name": "None",
- "value": "0"
- },
- {
- "desc": "ultrafast",
- "name": "ultrafast",
- "value": "1"
- },
- {
- "desc": "superfast",
- "name": "superfast",
- "value": "2"
- },
- {
- "desc": "veryfast",
- "name": "veryfast",
- "value": "3"
- },
- {
- "desc": "faster",
- "name": "faster",
- "value": "4"
- },
- {
- "desc": "fast",
- "name": "fast",
- "value": "5"
- },
- {
- "desc": "medium",
- "name": "medium",
- "value": "6"
- },
- {
- "desc": "slow",
- "name": "slow",
- "value": "7"
- },
- {
- "desc": "slower",
- "name": "slower",
- "value": "8"
- },
- {
- "desc": "veryslow",
- "name": "veryslow",
- "value": "9"
- },
- {
- "desc": "placebo",
- "name": "placebo",
- "value": "10"
- }
- ]
- },
- "GstX264EncPsyTune": {
- "kind": "enum",
- "values": [
- {
- "desc": "No tuning",
- "name": "none",
- "value": "0"
- },
- {
- "desc": "Film",
- "name": "film",
- "value": "1"
- },
- {
- "desc": "Animation",
- "name": "animation",
- "value": "2"
- },
- {
- "desc": "Grain",
- "name": "grain",
- "value": "3"
- },
- {
- "desc": "PSNR",
- "name": "psnr",
- "value": "4"
- },
- {
- "desc": "SSIM",
- "name": "ssim",
- "value": "5"
- }
- ]
- },
- "GstX264EncTune": {
- "kind": "flags",
- "values": [
- {
- "desc": "Still image",
- "name": "stillimage",
- "value": "0x00000001"
- },
- {
- "desc": "Fast decode",
- "name": "fastdecode",
- "value": "0x00000002"
- },
- {
- "desc": "Zero latency",
- "name": "zerolatency",
- "value": "0x00000004"
- }
- ]
- }
- },
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- },
- "xingmux": {
- "description": "Add XING tags to mpeg audio files",
- "elements": {
- "xingmux": {
- "author": "Christophe Fergeau <teuf@gnome.org>",
- "description": "Adds a Xing header to the beginning of a VBR MP3 file",
- "hierarchy": [
- "GstXingMux",
- "GstElement",
- "GstObject",
- "GInitiallyUnowned",
- "GObject"
- ],
- "klass": "Formatter/Muxer/Metadata",
- "long-name": "MP3 Xing muxer",
- "pad-templates": {
- "sink": {
- "caps": "audio/mpeg:\n mpegversion: 1\n layer: [ 1, 3 ]\n",
- "direction": "sink",
- "presence": "always"
- },
- "src": {
- "caps": "audio/mpeg:\n mpegversion: 1\n layer: [ 1, 3 ]\n",
- "direction": "src",
- "presence": "always"
- }
- },
- "rank": "marginal"
- }
- },
- "filename": "gstxingmux",
- "license": "LGPL",
- "other-types": {},
- "package": "GStreamer Ugly Plug-ins",
- "source": "gst-plugins-ugly",
- "tracers": {},
- "url": "Unknown package origin"
- }
-}
\ No newline at end of file
+++ /dev/null
-build_hotdoc = false
-
-required_hotdoc_extensions = ['gst-extension']
-plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
-if gst_dep.type_name() == 'internal'
- gst_proj = subproject('gstreamer')
- plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
-else
- plugins_cache_generator = find_program(join_paths(gst_dep.get_pkgconfig_variable('libexecdir'), 'gstreamer-' + api_version, 'gst-plugins-doc-cache-generator'),
- required: false)
-endif
-
-if plugins.length() == 0
- message('All ugly plugins have been disabled')
-elif plugins_cache_generator.found()
- plugins_doc_dep = custom_target('ugly-plugins-doc-cache',
- command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
- input: plugins,
- output: 'gst_plugins_cache.json',
- build_always_stale: true,
- )
-else
- warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
-endif
-
-hotdoc_p = find_program('hotdoc', required: get_option('doc'))
-if not hotdoc_p.found()
- message('Hotdoc not found, not building the documentation')
- subdir_done()
-endif
-
-hotdoc_req = '>= 0.11.0'
-hotdoc_version = run_command(hotdoc_p, '--version').stdout()
-if not hotdoc_version.version_compare(hotdoc_req)
- if get_option('doc').enabled()
- error('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
- else
- message('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
- subdir_done()
- endif
-endif
-
-hotdoc = import('hotdoc')
-foreach extension: required_hotdoc_extensions
- if not hotdoc.has_extensions(extension)
- if get_option('doc').enabled()
- error('Documentation enabled but @0@ missing'.format(extension))
- endif
-
- message('@0@ extension not found, not building documentation'.format(extension))
- subdir_done()
- endif
-endforeach
-
-build_hotdoc = true
-docconf = configuration_data()
-docconf.set('GST_API_VERSION', api_version)
-
-configure_file(input : 'gst_api_version.in',
- output : 'gst_api_version.md',
- configuration : docconf)
-
-root_rel = '..'
-excludes = []
-foreach f: []
- excludes += [join_paths(meson.current_source_dir(), root_rel, '..', f)]
-endforeach
-
-libs_doc = []
-plugins_doc = []
-list_plugin_res = run_command(python3, '-c',
-'''
-import sys
-import json
-
-with open("@0@") as f:
- print(':'.join(json.load(f).keys()), end='')
-'''.format(plugins_cache))
-
-assert(list_plugin_res.returncode() == 0,
- 'Could not list plugins from @0@'.format(plugins_cache))
-
-foreach plugin_name: list_plugin_res.stdout().split(':')
- plugins_doc += [hotdoc.generate_doc(plugin_name,
- project_version: api_version,
- sitemap: 'sitemap.txt',
- index: 'index.md',
- gst_index: 'index.md',
- gst_smart_index: true,
- gst_c_sources: [
- join_paths(root_rel, 'sys/*/*.[ch]'),
- join_paths(root_rel, 'ext/*/*.[ch]'),
- join_paths(root_rel, 'gst/*/*.[ch]'),
- ],
- gst_c_source_filters: excludes,
- dependencies: [gst_dep, plugins],
- gst_order_generated_subpages: true,
- disable_incremental_build: true,
- gst_cache_file: plugins_cache,
- gst_plugin_name: plugin_name,
- )]
-endforeach
+++ /dev/null
-2005-08-31 Michael Smith <msmith@fluendo.com>
-
- * configure.ac:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
- (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link), (update_timestamps),
- (gst_dvdlpcmdec_chain):
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- Port LPCM decoder to 0.9
-
-2005-08-30 Jan Schmidt <thaytan@mad.scientist.com>
-
- * configure.ac:
- Remove plugins that should have disappeared.
-
-2005-08-30 Jan Schmidt <thaytan@mad.scientist.com>
-
- * autogen.sh:
- * configure.ac:
- Make autogen work again.
-
-2005-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/aalib/Makefile.am:
- * ext/aalib/gstaasink.c:
- * ext/aalib/gstaasink.h:
- * ext/cairo/Makefile.am:
- * ext/cairo/gstcairo.c:
- * ext/cairo/gsttextoverlay.c:
- * ext/cairo/gsttextoverlay.h:
- * ext/cairo/gsttimeoverlay.c:
- * ext/cairo/gsttimeoverlay.h:
- * ext/dv/Makefile.am:
- * ext/dv/NOTES:
- * ext/dv/demo-play.c:
- * ext/dv/gstdv.c:
- * ext/dv/gstdvdec.c:
- * ext/dv/gstdvdec.h:
- * ext/dv/gstdvdemux.c:
- * ext/dv/gstdvdemux.h:
- * ext/esd/Makefile.am:
- * ext/esd/README:
- * ext/esd/esdmon.c:
- * ext/esd/esdmon.h:
- * ext/esd/esdsink.c:
- * ext/esd/esdsink.h:
- * ext/esd/gstesd.c:
- * ext/flac/Makefile.am:
- * ext/flac/flac_compat.h:
- * ext/flac/gstflac.c:
- * ext/flac/gstflacdec.c:
- * ext/flac/gstflacdec.h:
- * ext/flac/gstflacenc.c:
- * ext/flac/gstflacenc.h:
- * ext/flac/gstflactag.c:
- * ext/flac/gstflactag.h:
- * ext/gconf/Makefile.am:
- * ext/gconf/gconf.c:
- * ext/gconf/gconf.h:
- * ext/gconf/gstgconfaudiosink.c:
- * ext/gconf/gstgconfaudiosink.h:
- * ext/gconf/gstgconfelements.c:
- * ext/gconf/gstgconfelements.h:
- * ext/gconf/gstgconfvideosink.c:
- * ext/gconf/gstgconfvideosink.h:
- * ext/gdk_pixbuf/Makefile.am:
- * ext/gdk_pixbuf/gst_loader.c:
- * ext/gdk_pixbuf/gstgdkanimation.c:
- * ext/gdk_pixbuf/gstgdkanimation.h:
- * ext/gdk_pixbuf/gstgdkpixbuf.c:
- * ext/gdk_pixbuf/gstgdkpixbuf.h:
- * ext/gdk_pixbuf/pixbufscale.c:
- * ext/gdk_pixbuf/pixbufscale.h:
- * ext/jpeg/Makefile.am:
- * ext/jpeg/README:
- * ext/jpeg/gstjpeg.c:
- * ext/jpeg/gstjpegdec.c:
- * ext/jpeg/gstjpegdec.h:
- * ext/jpeg/gstjpegenc.c:
- * ext/jpeg/gstjpegenc.h:
- * ext/jpeg/gstsmokedec.c:
- * ext/jpeg/gstsmokedec.h:
- * ext/jpeg/gstsmokeenc.c:
- * ext/jpeg/gstsmokeenc.h:
- * ext/jpeg/smokecodec.c:
- * ext/jpeg/smokecodec.h:
- * ext/jpeg/smokeformat.h:
- * ext/ladspa/Makefile.am:
- * ext/ladspa/gstladspa.c:
- * ext/ladspa/gstladspa.h:
- * ext/ladspa/gstsignalprocessor.c:
- * ext/ladspa/gstsignalprocessor.h:
- * ext/ladspa/load.c:
- * ext/ladspa/search.c:
- * ext/ladspa/utils.h:
- * ext/libcaca/Makefile.am:
- * ext/libcaca/gstcacasink.c:
- * ext/libcaca/gstcacasink.h:
- * ext/libmng/Makefile.am:
- * ext/libmng/gstmng.c:
- * ext/libmng/gstmng.h:
- * ext/libmng/gstmngdec.c:
- * ext/libmng/gstmngdec.h:
- * ext/libmng/gstmngenc.c:
- * ext/libmng/gstmngenc.h:
- * ext/libpng/Makefile.am:
- * ext/libpng/gstpng.c:
- * ext/libpng/gstpng.h:
- * ext/libpng/gstpngdec.c:
- * ext/libpng/gstpngdec.h:
- * ext/libpng/gstpngenc.c:
- * ext/libpng/gstpngenc.h:
- * ext/mikmod/Makefile.am:
- * ext/mikmod/README:
- * ext/mikmod/drv_gst.c:
- * ext/mikmod/gstmikmod.c:
- * ext/mikmod/gstmikmod.h:
- * ext/mikmod/mikmod_reader.c:
- * ext/mikmod/mikmod_types.c:
- * ext/mikmod/mikmod_types.h:
- * ext/pango/Makefile.am:
- * ext/pango/gsttextoverlay.c:
- * ext/pango/gsttextoverlay.h:
- * ext/pango/gsttimeoverlay.c:
- * ext/pango/gsttimeoverlay.h:
- * ext/raw1394/Makefile.am:
- * ext/raw1394/gst1394.c:
- * ext/raw1394/gstdv1394src.c:
- * ext/raw1394/gstdv1394src.h:
- * ext/shout2/Makefile.am:
- * ext/shout2/gstshout2.c:
- * ext/shout2/gstshout2.h:
- * ext/speex/Makefile.am:
- * ext/speex/gstspeex.c:
- * ext/speex/gstspeexdec.c:
- * ext/speex/gstspeexdec.h:
- * ext/speex/gstspeexenc.c:
- * ext/speex/gstspeexenc.h:
- * gst/avi/.cvsignore:
- * gst/avi/Makefile.am:
- * gst/avi/README:
- * gst/avi/avi-ids.h:
- * gst/avi/avi.vcproj:
- * gst/avi/gstavi.c:
- * gst/avi/gstavidemux.c:
- * gst/avi/gstavidemux.h:
- * gst/avi/gstavimux.c:
- * gst/avi/gstavimux.h:
- * gst/level/gstlevel.c: (gst_level_transform):
- * sys/Makefile.am:
- * sys/oss/.cvsignore:
- * sys/oss/Makefile.am:
- * sys/oss/gst-i18n-plugin.h:
- * sys/oss/gstossaudio.c:
- * sys/oss/gstossdmabuffer.c:
- * sys/oss/gstossdmabuffer.h:
- * sys/oss/gstosshelper.c:
- * sys/oss/gstosshelper.h:
- * sys/oss/gstossmixer.c:
- * sys/oss/gstossmixer.h:
- * sys/oss/gstossmixerelement.c:
- * sys/oss/gstossmixerelement.h:
- * sys/oss/gstossmixertrack.c:
- * sys/oss/gstossmixertrack.h:
- * sys/oss/gstosssink.c:
- * sys/oss/gstosssink.h:
- * sys/oss/gstosssrc.c:
- * sys/oss/gstosssrc.h:
- * sys/oss/oss_probe.c:
- * sys/osxaudio/Makefile.am:
- * sys/osxaudio/gstosxaudio.c:
- * sys/osxaudio/gstosxaudioelement.c:
- * sys/osxaudio/gstosxaudioelement.h:
- * sys/osxaudio/gstosxaudiosink.c:
- * sys/osxaudio/gstosxaudiosink.h:
- * sys/osxaudio/gstosxaudiosrc.c:
- * sys/osxaudio/gstosxaudiosrc.h:
- * sys/osxvideo/Makefile.am:
- * sys/osxvideo/cocoawindow.h:
- * sys/osxvideo/cocoawindow.m:
- * sys/osxvideo/osxvideosink.h:
- * sys/osxvideo/osxvideosink.m:
- all these plugins are moved to gst-plugins-good
-
-2005-08-28 Flavio Oliveira <flavio.oliveira@indt.org.br>
-
- * gst/wavenc/gstwavenc.c: Ported to GStreamer 0.9.
- Need to fix performance issues.
-
-2005-08-28 Andy Wingo <wingo@pobox.com>
-
- * Updates for two-arg init from GST_BOILERPLATE.
-
- * ext/ladspa/gstsignalprocessor.c (gst_signal_processor_init): Use
- the second arg for the class, because G_OBJECT_GET_CLASS (self)
- returns the wrong thing.
- (gst_signal_processor_add_pad_from_template): Make pads of the
- right type.
-
- * ext/ladspa/gstladspa.c (gst_ladspa_class_get_param_spec): Make
- writable param specs G_PARAM_CONSTRUCT so default values work.
- (gst_ladspa_init): Use the second arg for the class.
-
-2005-08-26 Andy Wingo <wingo@pobox.com>
-
- * ext/ladspa/gstladspa.c:
- * ext/ladspa/gstladspa.h: Finish porting, still doesn't work but
- it does compile and register. I have more features than you.
-
- * ext/ladspa/gstsignalprocessor.h:
- * ext/ladspa/gstsignalprocessor.c: Updates, bug fixen.
-
-2005-08-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/effectv/gstquark.c: (gst_quarktv_init),
- (gst_quarktv_change_state):
- do proper cleanup/creation, fixes state changes
-
-2005-08-25 Jan Schmidt <thaytan@mad.scientist.com>
-
- * gst/level/gstlevel.c: (gst_level_message_new):
- Revert unpopular change for GST_MESSAGE_SRC to GObject.
-
-2005-08-25 Andy Wingo <wingo@pobox.com>
-
- * ext/ladspa/gstladspa.h:
- * ext/ladspa/gstladspa.c: Halfway-ported. Doesn't compile yet.
-
- * ext/ladspa/gstsignalprocessor.h:
- * ext/ladspa/gstsignalprocessor.c: New files, the start of a base
- class for DSP elements.
-
- * configure.ac: Sort the external libs checks, add a ladspa check,
- output the ladspa makefile.
-
-2005-08-25 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c (gst_rmdemux_loop, gst_rmdemux_chain):
- Fixed EOS.
- (gst_rmdemux_parse_indx_data, gst_rmdemux_parse_indx): Handle
- malformed index headers where the packet size is incorrect.
-
-2005-08-24 Andy Wingo <wingo@pobox.com>
-
- * ext/dv/gstdvdemux.c (gst_dvdemux_demux_frame): Send out valid
- segment end timestamps.
-
-2005-08-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/Makefile.am:
- lame and mpegaudioparse seem to work
- * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
- (gst_video_box_transform_caps), (gst_video_box_get_unit_size):
- update for basetransform changes
-
-2005-08-24 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/level/gstlevel.c: (gst_level_message_new):
- GST_MESSAGE_SRC became a GObject
-
-2005-08-23 Stefan Kost <ensonic@users.sf.net>
-
- * ext/speex/gstspeexenc.h:
- Fixed include path of adapter
-
-2005-08-23 Wim Taymans <wim@fluendo.com>
-
- * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init):
- * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
- Fix property warning.
-
-2005-08-23 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
- (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain):
- * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
- (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
- * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
- (gst_rtph263penc_flush), (gst_rtph263penc_chain):
- Small updates, RFC reference to payload encoders.
-
-2005-08-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/speex/Makefile.am:
- * ext/speex/gstspeex.c: (plugin_init):
- * ext/speex/gstspeexdec.c: (speex_get_query_types),
- (gst_speex_dec_init), (speex_dec_src_query), (speex_dec_src_event),
- (speex_dec_event), (speex_dec_chain):
- Port speexdec. Leads to some unfamiliar warnings on console,
- but works otherwise.
-
-2005-08-23 Andy Wingo <wingo@pobox.com>
-
- * sys/oss/gstosssrc.c (gst_oss_src_open): Set the device-name
- property after opening the mixer.
-
- * sys/oss/gstosssrc.c:
- * sys/oss/gstosssrc.h: Easy to implement a mixer, eh...
-
- * sys/oss/gstossmixerelement.h:
- * sys/oss/gstossmixerelement.c: Added mixer element like
- alsamixer.
-
- * sys/oss/Makefile.am:
- * sys/oss/gstossaudio.c: Register the ossmixer element.
-
- * sys/oss/gstossmixer.h:
- * sys/oss/gstossmixer.c: Refactored to be more like alsamixer.
-
- * sys/oss/gstossmixertrack.h:
- * sys/oss/gstossmixertrack.c: Split out from gstossmixer.[ch],
- like gstalsamixer.
-
- * sys/oss/gstosssrc.c:
- * sys/oss/gstosssink.c: Where before we used a gstosselement
- object as a helper library, now just call functions from
- gstosshelper.
-
- * sys/oss/gstosshelper.h:
- * sys/oss/gstosshelper.c: Made a real library. Removed
- propertyprobe for now, should add it back later.
-
- * sys/oss/gstosselement.h:
- * sys/oss/gstosselement.c: Removed, we don't have a shared base
- class.
-
- * sys/oss/gstosshelper.c (gst_oss_helper_probe_caps): Search
- higher-to-lower, makes 16 bit appear earlier in the caps, which
- makes it preferred.
-
- * sys/oss/gstosssrc.h:
- * sys/oss/gstosssrc.c: Totally ported, dude.
-
- * sys/oss/Makefile.am:
- * sys/oss/gstossaudio.c: Add osssrc.
-
- * sys/oss/gstosssink.c: We do native byte order.
-
-2005-08-23 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c (gst_rmdemux_src_event): Fixed bug
- causing events to be passed wrong way.
- (gst_rmdemux_parse_packet): Avoid accidentally skipping audio.
-
-2005-08-22 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_init),
- (gst_id3_tag_sink_event), (gst_id3_tag_do_caps_nego),
- (gst_id3_tag_chain), (gst_id3_tag_change_state), (plugin_init):
- Works a bit better now, but still needs a rewrite to use
- get_range instead of this seeking nastiness.
-
-2005-08-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/flac/Makefile.am:
- * ext/flac/gstflac.c: (plugin_init):
- * ext/flac/gstflacdec.c: (flacdec_get_type), (gst_flacdec_init),
- (gst_flacdec_update_metadata), (gst_flacdec_seek),
- (gst_flacdec_tell), (gst_flacdec_length), (gst_flacdec_read),
- (gst_flacdec_write), (gst_flacdec_loop),
- (gst_flacdec_get_src_query_types), (gst_flacdec_src_query),
- (gst_flacdec_src_event), (gst_flacdec_sink_activate),
- (gst_flacdec_sink_activate_pull), (gst_flacdec_change_state):
- * ext/flac/gstflacdec.h:
- Port flacdec (seeking is still slow'ish).
-
-2005-08-22 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c:
- (gst_rmdemux_perform_seek, gst_rmdemux_parse_packet):
- Seeking improvements.
-
-2005-08-19 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_class_init):
- Remove get_time code that is both wrong and unneeded.
-
-2005-08-19 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
- (gst_rtph263penc_flush), (gst_rtph263penc_chain),
- (gst_rtph263penc_set_property), (gst_rtph263penc_get_property):
- * gst/rtp/gstrtph263penc.h:
- Added configurable pt and ssrc, to be merged in the caps or
- a base class...
-
-2005-08-19 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_init),
- (gst_rtph263pdec_chain):
- * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
- (gst_rtph263penc_flush), (gst_rtph263penc_chain):
- Some cleanups in the h263p (de)payloaders.
-
-2005-08-19 Wim Taymans <wim@fluendo.com>
-
- * ext/amrnb/amrnbdec.c:
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_setcaps):
- * ext/amrnb/amrnbparse.c:
- Update caps with audio/AMR.
-
- * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
- (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain),
- (gst_rtpamrdec_change_state):
- * gst/rtp/gstrtpamrdec.h:
- * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
- (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
- Dont set FT headers twice, it was already in the encoded
- bitstream.
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
- (gst_rtspsrc_close), (gst_rtspsrc_play):
- * gst/rtsp/rtspconnection.c: (parse_line):
- Cleanups
-
- * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init),
- (gst_udpsrc_create), (gst_udpsrc_set_property),
- (gst_udpsrc_get_property):
- * gst/udp/gstudpsrc.h:
- Added caps property, we need this soon to type the buffers.
-
-2005-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
- (gst_rtpamrdec_chain):
- Fix up amr depayloader a bit.
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
- (gst_rtspsrc_close), (gst_rtspsrc_play):
- Look for options result in Public and Allow header fields..
- spec says Allow but some servers return Public...
-
-2005-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
- (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
- (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property):
- * gst/rtp/gstrtpamrenc.h:
- Added payload_type and ssrc properties to the payloader.
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
- (gst_rtspsrc_close), (gst_rtspsrc_play):
- Options need to be stripped and are in the Public header field.
-
- * gst/rtsp/rtspurl.c: (rtsp_url_parse):
- Fix url / parsing...
-
-
-2005-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/Makefile.am:
- * gst/rtp/gstrtp.c: (plugin_init):
- * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_get_type),
- (gst_rtpamrdec_base_init), (gst_rtpamrdec_class_init),
- (gst_rtpamrdec_init), (gst_rtpamrdec_chain),
- (gst_rtpamrdec_set_property), (gst_rtpamrdec_get_property),
- (gst_rtpamrdec_change_state), (gst_rtpamrdec_plugin_init):
- * gst/rtp/gstrtpamrdec.h:
- * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_get_type),
- (gst_rtpamrenc_base_init), (gst_rtpamrenc_class_init),
- (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
- (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property),
- (gst_rtpamrenc_change_state), (gst_rtpamrenc_plugin_init):
- * gst/rtp/gstrtpamrenc.h:
- * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_class_init),
- (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain):
- Added very simplistic amr payloader. depayloader does not
- work yet.
-
-2005-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
- (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
- (gst_rtspsrc_change_state):
- * gst/rtsp/gstrtspsrc.h:
- * gst/rtsp/rtspdefs.c: (rtsp_method_as_text), (rtsp_find_method):
- * gst/rtsp/rtspdefs.h:
- * gst/rtsp/rtsptransport.c: (rtsp_transport_parse):
- Handle RTSP defaults better.
- Issue OPTIONS request to figure out what we are allowed to do.
- Make the methods a bitfield so we can easily collect supported
- options.
- Fix rtsp_find_method.
- Do proper RTSP connection shutdown.
-
-2005-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/Makefile.am:
- * gst/rtp/gstrtp-common.h:
- * gst/rtp/gstrtp.c: (plugin_init):
- * gst/rtp/gstrtpL16enc.h:
- * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
- (gst_rtpdec_class_init), (gst_rtpdec_chain_rtp),
- (gst_rtpdec_chain_rtcp), (gst_rtpdec_change_state),
- (gst_rtpdec_plugin_init):
- * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_get_type),
- (gst_rtph263pdec_base_init), (gst_rtph263pdec_class_init),
- (gst_rtph263pdec_init), (gst_rtph263pdec_chain),
- (gst_rtph263pdec_set_property), (gst_rtph263pdec_get_property),
- (gst_rtph263pdec_change_state), (gst_rtph263pdec_plugin_init):
- * gst/rtp/gstrtph263pdec.h:
- * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_get_type),
- (gst_rtph263penc_base_init), (gst_rtph263penc_class_init),
- (gst_rtph263penc_init), (gst_rtph263penc_flush),
- (gst_rtph263penc_chain), (gst_rtph263penc_set_property),
- (gst_rtph263penc_get_property), (gst_rtph263penc_change_state),
- (gst_rtph263penc_plugin_init):
- * gst/rtp/gstrtph263penc.h:
- * gst/rtp/gstrtpmpadec.c: (gst_rtpmpadec_get_type),
- (gst_rtpmpadec_base_init), (gst_rtpmpadec_class_init),
- (gst_rtpmpadec_init), (gst_rtpmpadec_chain),
- (gst_rtpmpadec_set_property), (gst_rtpmpadec_get_property),
- (gst_rtpmpadec_change_state), (gst_rtpmpadec_plugin_init):
- * gst/rtp/gstrtpmpadec.h:
- * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_get_type),
- (gst_rtpmpaenc_base_init), (gst_rtpmpaenc_class_init),
- (gst_rtpmpaenc_init), (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain),
- (gst_rtpmpaenc_set_property), (gst_rtpmpaenc_get_property),
- (gst_rtpmpaenc_change_state), (gst_rtpmpaenc_plugin_init):
- * gst/rtp/gstrtpmpaenc.h:
- * gst/rtp/rtp-packet.c:
- * gst/rtp/rtp-packet.h:
- Remove old code that is now in gst-libs/gst/rtp/.
- Added some payload/depayloaders.
-
- * gst/udp/gstudpsink.c: (gst_udpsink_class_init):
- Fix port number range.
-
-2005-08-17 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- Added mpegaudioparse
-
- * ext/lame/gstlame.c: (gst_lame_src_getcaps),
- (gst_lame_src_setcaps), (gst_lame_sink_setcaps),
- (gst_lame_sink_event), (gst_lame_chain):
- Some cleanups.
- Fix memleak.
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (gst_mp3parse_class_init), (gst_mp3parse_init),
- (gst_mp3parse_chain), (gst_mp3parse_change_state):
- * gst/mpegaudioparse/gstmpegaudioparse.h:
- Ported mpegaudioparse
-
-2005-08-17 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_open), (gst_rtspsrc_play):
- Support absolute control urls too.
-
-2005-08-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
- (gst_avi_demux_stream_header):
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_add_stream), (qtdemux_parse_tree):
- Uncomment metadata and codec-name handling.
-
-2005-08-16 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_read_header):
- Fix compile warning.
-
- * ext/lame/gstlame.c: (gst_lame_class_init),
- (gst_lame_src_getcaps), (gst_lame_src_setcaps),
- (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
- (gst_lame_chain), (gst_lame_change_state):
- * ext/lame/gstlame.h:
- Port lame plugin
-
-2005-08-16 Andy Wingo <wingo@pobox.com>
-
- * ext/dv/gstdvdemux.c (gst_dvdemux_flush): Use gst_adapter_take so
- we have our own copy of the data.
- (gst_dvdemux_demux_video): Set the take() data as malloc_data so
- it will get freed later.
-
- * ext/raw1394/gstdv1394src.c (gst_dv1394src_iso_receive): Note
- license info in the source code -- was only in the commit log
- before.
-
- * ext/dv/gstdvdec.h:
- * ext/dv/gstdvdec.c: Only decodes systemstream=FALSE dv video --
- old pipelines using dvdec should probably have a dvdemux first.
-
- * ext/dv/gstdvdemux.h:
- * ext/dv/gstdvdemux.c: Split out from dvdec, chunks the incoming
- systemstream=TRUE data into frames, sets caps data, and spits out
- PCM audio in addition to systemstream=FALSE video frames. Operates
- in chain mode only for now; should make a getrange version as
- well.
-
- * ext/dv/gstdv.c: New file, registers the libgstdv plugin.
-
- * ext/dv/Makefile.am: Library name changed to libgstdv. Split
- dvdec into dvdemux and dvdec.
-
-2005-08-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_event), (gst_faad_chain):
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
- Handle _push() return values.
-
-2005-08-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_event):
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
- Fix debug.
-
-2005-08-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak),
- (qtdemux_video_caps):
- Forwardport from 0.8 to implement RLE.
-
-2005-08-15 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/README:
- Added rtsp server implementation docs.
-
-2005-08-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/aalib/gstaasink.c:
- aalib is LGPL, so this plugin can be LGPL
- * ext/arts/gst_arts.c: (plugin_init):
- rename, we don't like underscores
- * ext/audiofile/gstaf.c:
- * ext/sndfile/gstsf.c:
- rename, we like a descriptive plugin name
- * ext/gconf/gstgconfelements.c:
- change description a little
- * ext/musicbrainz/gsttrm.c:
- musicbrainz is LGPL, so plugin can be LGPL
- * ext/raw1394/gst1394.c:
- rename, we like all-digit names
- * gst/equalizer/gstiirequalizer.c:
- * gst/fdsrc/gstfdsrc.c:
- * gst/multifilesink/gstmultifilesink.c:
- rename
- * gst/virtualdub/gstvirtualdub.c:
- use GST_PLUGIN_DEFINE
- * sys/dxr3/dxr3init.c:
- only uses system headers, and code is LGPL, so plugin is LGPL
-
-2005-08-13 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/mad/Makefile.am:
- * gst/avi/Makefile.am:
- * gst/effectv/Makefile.am:
- * gst/udp/Makefile.am:
- * gst/wavparse/Makefile.am:
- Use -lgstfoo-@GST_MAJORMINOR@ instead of -lgstfoo-0.9
-
-2005-08-12 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_decode_indirect),
- (gst_jpeg_dec_decode_direct), (gst_jpeg_dec_chain):
- Fix decoding of pictures with certain uneven or unaligned
- widths where jpeglib needs more horizontal padding than our
- I420 buffers provide, resulting in blocky artifacts at the
- left side of the picture (#164176).
- Also make use of our shiny new GST_ROUND_N() macros.
-
-2005-08-11 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), (gst_jpeg_dec_chain),
- (gst_jpeg_dec_change_state):
- * ext/jpeg/gstjpegdec.h:
- Fix crashes/invalid memory access for pictures that have a height
- that is not a multiple of 16 (or rather: v_samp_factor * DCTSIZE).
-
- Also fix the state change function for downwards state changes
- (need to chain up to parent before destroying our resources, to
- make sure pads get deactivated and our chain function isn't
- running and using those very same resources in another thread).
-
- The jpeg line buffer only needs to be v_samp_factor*DCTSIZE lines
- per plane, not picture_height lines; allocate that on the stack.
-
-2005-08-10 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_stream_headers),
- (gst_wavparse_stream_data):
- Add some fixes from 0.8 branch: allow 24/32bps songs and
- blockalign samples to the header-specified size, if any
- (#311070); error out on channels==0 or bitrate==0
- (#309043, #304588).
-
-2005-08-10 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/level/gstlevel.c: (gst_level_init), (gst_level_set_caps),
- (gst_level_transform):
- * gst/level/gstlevel.h:
- remove unused MS struct member
- don't reset the CS values for channels on every _chain, so that
- level actually correctly calculates the RMS value. sigh.
- calculate RMS values correctly for peak and decay peak sums;
- before we were signalling them as if they already were amplitude
- and not power values. sigh.
- Remind me to not try and pretend I'm writing DSP code.
-
-2005-08-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_class_init), (gst_faad_setcaps):
- Add debug category, remove Close() call that made it crash
- whenever reusing, renegotiating or anything; Close() actually
- free()s the handle and should only be called on READY->NULL.
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
- Actually set caps on buffer (in addition to pad), also.
-
-2005-08-10 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c (gst_rmdemux_sink_activate)
- (gst_rmdemux_sink_activate_push, gst_rmdemux_sink_activate_pull)
- (gst_rmdemux_loop, gst_rmdemux_src_event)
- (gst_rmdemux_perform_seek, gst_rmdemux_src_query): Implemented
- push-pull and seeking.
-
-2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_event):
- Sign/unsign mismatch.
- * configure.ac:
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_class_init),
- (gst_qtdemux_init), (gst_qtdemux_get_src_query_types),
- (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
- (plugin_init), (gst_qtdemux_handle_sink_event),
- (gst_qtdemux_change_state), (gst_qtdemux_loop_header),
- (qtdemux_sink_activate), (qtdemux_sink_activate_pull),
- (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
- (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
- * gst/qtdemux/qtdemux.h:
- Half-assed port (hey, it works).
-
-2005-08-09 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
- Fix AVI header parsing: add missing break statement after
- GST_RIFF_INFO_LIST parsing code; gst_riff_read_chunk() has
- already advanced the avi->offset, no need to do it twice
- (fixes MovieOfMovies.avi).
-
-2005-08-09 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
- (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain),
- (gst_jpeg_dec_change_state):
- * ext/jpeg/gstjpegdec.h:
- Make mjpeg actually work and skip jpeg data parsing if we
- know that the input is packetized (ie. each input buffer
- is exactly one jpeg frame).
-
-2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
- It'd be nice if I could listen to my mp3 files, so send out an
- initial discont, as the sink apparently wants.
-
-2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
- (gst_avi_demux_handle_seek):
- Fix seeking (or, well, fix threading issue where a variable was
- set before a lock was taken and was already unset before that
- same lock was taken and was thus no longer in existance when it
- actually had to be used).
-
-2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
- Mixing binary and logical operators is not going to work; fix
- position-querying in Totem.
-
-2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_class_init),
- (gst_faad_init), (gst_faad_setcaps), (gst_faad_srcgetcaps),
- (gst_faad_event), (gst_faad_update_caps), (gst_faad_chain),
- (gst_faad_change_state):
- * ext/faad/gstfaad.h:
- Fix negotiation (#310932) and miscellaneous other stuff. Probably
- still needs some more work.
-
-2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
- (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain):
- Add setcaps() function (for mjpeg).
-
-2005-08-08 Andy Wingo <wingo@pobox.com>
-
- * ext/esd/esdsink.c (gst_esdsink_getcaps): Seems that wierd
- va_list caps setting function was borked. Fixed esdsink.
-
- * sys/oss/gstosssink.c (gst_oss_sink_open, gst_oss_sink_close)
- (gst_oss_sink_prepare, gst_oss_sink_unprepare): Update for newer
- audiosink api.
-
- * ext/raw1394/gstdv1394src.c (gst_dv1394src_get_property)
- (gst_dv1394src_set_property): Style. All about the style.
-
- * ext/esd/esdsink.c (gst_esdsink_getcaps): Return specific caps
- only if in READY or higher (i.e., if _open() has been called.)
- (gst_esdsink_open, gst_esdsink_close, gst_esdsink_prepare)
- (gst_esdsink_unprepare): Update for audiosink changes.
- (gst_esdsink_change_state): Die!
-
-2005-08-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/jpeg/Makefile.am:
- Fix compile.
-
-2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/jpeg/Makefile.am:
- * ext/jpeg/gstjpeg.c: (plugin_init):
- * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_get_type),
- (gst_jpeg_dec_finalize), (gst_jpeg_dec_base_init),
- (gst_jpeg_dec_class_init), (gst_jpeg_dec_fill_input_buffer),
- (gst_jpeg_dec_init_source), (gst_jpeg_dec_skip_input_data),
- (gst_jpeg_dec_resync_to_restart), (gst_jpeg_dec_term_source),
- (gst_jpeg_dec_my_output_message), (gst_jpeg_dec_my_emit_message),
- (gst_jpeg_dec_my_error_exit), (gst_jpeg_dec_init),
- (is_jpeg_start_marker), (is_jpeg_end_marker),
- (gst_jpeg_dec_find_jpeg_header), (gst_jpeg_dec_ensure_header),
- (gst_jpeg_dec_have_end_marker),
- (gst_jpeg_dec_parse_tag_has_entropy_segment),
- (gst_jpeg_dec_parse_image_data), (gst_jpeg_dec_chain),
- (gst_jpeg_dec_change_state):
- * ext/jpeg/gstjpegdec.h:
- Port jpegdec to 0.9; handles 'progressive loading' now, ie. input does
- no longer need to be one single buffer.
-
-2005-08-04 Andy Wingo <wingo@pobox.com>
-
- * sys/oss/gstossaudio.c (plugin_init): Second-class citizen.
-
- * gst/videobox/gstvideobox.c (gst_video_box_get_size): Update for
- API changes.
-
- * configure.ac (DEFAULT_AUDIOSINK, DEFAULT_VIDEOSINK): Set to
- autoaudiosink and autovideosink.
-
-2005-08-04 Edward Hervey <edward@fluendo.com>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
- (gst_avi_demux_parse_stream), (gst_avi_demux_process_next_entry):
- You need to allocatate (len+1) characters to store a len size string.
- Also don't stop the processing task if the output pad is not linked.
-
-2005-08-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_reset),
- (gst_gconf_audio_sink_init), (do_toggle_element),
- (cb_toggle_element), (gst_gconf_audio_sink_change_state):
- * ext/gconf/gstgconfaudiosink.h:
- * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_reset),
- (gst_gconf_video_sink_init), (do_toggle_element),
- (cb_toggle_element), (gst_gconf_video_sink_change_state):
- * ext/gconf/gstgconfvideosink.h:
- * gst/autodetect/gstautoaudiosink.c: (gst_auto_audio_sink_reset),
- (gst_auto_audio_sink_init), (gst_auto_audio_sink_detect),
- (gst_auto_audio_sink_change_state):
- * gst/autodetect/gstautoaudiosink.h:
- * gst/autodetect/gstautovideosink.c: (gst_auto_video_sink_reset),
- (gst_auto_video_sink_init), (gst_auto_video_sink_detect),
- (gst_auto_video_sink_change_state):
- * gst/autodetect/gstautovideosink.h:
- Use new ghostpad API; now they actually work in Totem, also.
-
-2005-08-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/libpng/Makefile.am:
- Fix uninstalled build.
-
-2005-08-02 Edward Hervey <edward@fluendo.com>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/libpng/Makefile.am:
- * ext/libpng/gstpng.c:
- * ext/libpng/gstpngenc.c:
- Ported pngenc , still have to port pngdec...
-
-2005-08-01 Stefan Kost <ensonic@users.sf.net>
-
- reviewed by: <delete if not using a buddy>
-
- * configure.ac:
- * ext/ladspa/Makefile.am:
- * ext/ladspa/gstladspa.c: (gst_ladspa_init), (gst_ladspa_loop),
- (gst_ladspa_chain), (gst_ladspa_get), (plugin_init):
- * ext/ladspa/gstladspa.h:
- deactivate and remove dparams (libgstcontrol)
-
-2005-07-27 Wim Taymans <wim@fluendo.com>
-
- * ext/faad/gstfaad.c: (gst_faad_event):
- Compile fixes.
-
-2005-07-27 Wim Taymans <wim@fluendo.com>
-
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_event),
- (gst_amrnbparse_loop):
- * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event),
- (gst_dvdec_handle_src_event), (gst_dvdec_decode_frame):
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_event),
- (gst_id3_tag_sink_event), (gst_id3_tag_chain):
- * ext/mad/gstmad.c: (gst_mad_src_query), (index_seek),
- (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/shout2/gstshout2.c: (gst_shout2send_event):
- * ext/sidplay/gstsiddec.cc:
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
- (gst_avi_demux_send_event), (gst_avi_demux_stream_header),
- (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry):
- * gst/goom/gstgoom.c: (gst_goom_event):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
- (gst_rmdemux_chain), (gst_rmdemux_send_event),
- (gst_rmdemux_add_stream):
- * gst/wavparse/gstwavparse.c: (gst_wavparse_handle_seek),
- (gst_wavparse_stream_headers), (gst_wavparse_stream_data),
- (gst_wavparse_loop), (gst_wavparse_srcpad_event):
- Various event updates and cleanups.
-
-2005-07-25 Christian Schaller <uraeus@gnome.org>
-
-
- * gst-plugins.spec.in: add silence and videoflip
- * gst/videofilter/Makefile.am: add missing header to noinst
-
-2005-07-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videofilter/Makefile.am:
- * gst/videofilter/gstgamma.c: (gst_gamma_setup):
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_setup):
- * gst/videofilter/gstvideofilter.c: (gst_videofilter_class_init),
- (gst_videofilter_getcaps), (gst_videofilter_setcaps),
- (gst_videofilter_init), (gst_videofilter_chain),
- (gst_videofilter_set_property), (gst_videofilter_get_property),
- (gst_videofilter_setup), (gst_videofilter_class_add_pad_templates):
- * gst/videofilter/gstvideofilter.h:
- * gst/videofilter/gstvideoflip.c: (gst_videoflip_init),
- (gst_videoflip_set_property), (gst_videoflip_get_property),
- (plugin_init), (gst_videoflip_setup), (gst_videoflip_planar411):
- forward port from 0.9 and enable videoflip now that it works
-
-2005-07-23 Edward Hervey <edward@fluendo.com>
-
- * configure.ac:
- * gst/silence/Makefile.am:
- * gst/silence/gstsilence.h:
- * gst/silence/gstsilence.c:
- Ported silence to 0.9 using GstBaseSrc ... 180 lines :)
-
-2005-07-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_src_event):
- First try forwarding events, makes seeking in AVI files with mp3
- audio work again.
-
-2005-07-20 Andy Wingo <wingo@pobox.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event): Signedness
- fix.
-
-2005-07-20 Edward Hervey <edward@fluendo.com>
-
- * configure.ac:
- * gst/wavparse/gstwavparse.c:
- * gst/wavparse/gstwavparse.h:
- * gst/wavparse/Makefile.am:
- Ported wavparse to 0.9 . Playing, seeking and state changes work.
- Could need more loving on the headers though.
-
-2005-07-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/gconf/Makefile.am:
- * ext/gconf/gconf.c: (gst_bin_find_unconnected_pad),
- (gst_gconf_render_bin_from_description),
- (gst_gconf_get_default_video_sink):
- * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init),
- (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_dispose),
- (cb_toggle_element), (gst_gconf_audio_sink_change_state):
- * ext/gconf/gstgconfelements.h:
- * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init),
- (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_dispose),
- (cb_toggle_element), (gst_gconf_video_sink_change_state):
- * gst/autodetect/gstautoaudiosink.c:
- (gst_auto_audio_sink_base_init), (gst_auto_audio_sink_class_init),
- (gst_auto_audio_sink_detect), (gst_auto_audio_sink_change_state):
- * gst/autodetect/gstautovideosink.c:
- (gst_auto_video_sink_base_init), (gst_auto_video_sink_class_init),
- (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect):
- Port auto/gconfsinks to 0.9. They actually appear to work here in
- Totem as well, making them actually useful.
-
-2005-07-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/Makefile.am:
- Fix uninstalled build.
-
-2005-07-19 Wim Taymans <wim@fluendo.com>
-
- * sys/oss/gstosssink.c: (gst_oss_sink_get_format),
- (gst_oss_sink_open):
- Parse spec to set correct oss values.
-
-2005-07-19 Edgard N. A. G. Lima <edgard.lima@indt.org.br>
-
- * configure.ac
- * ext/Makefile.am
- * ext/amrnb/amrnbdec.c
- * ext/amrnb/amrnbenc.c
- * ext/amrnb/amrnbparse.c
- * ext/faad/gstfaad.c
- * ext/mpeg2dec/gstmpeg2dec.c
- Ported amrnb, faad, mpeg2dec to 0.9
-
-2005-07-19 Andy Wingo <wingo@pobox.com>
-
- * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Set the proper
- framerate on the outbound buffer.
-
- * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber
- alloc_buffer's return value.
- (gst_dvdec_decode_frame): Handle unlinked pads with grace and
- agility.
-
- * ext/dv/gstdvdec.h: Fix signedness error.
-
-2005-07-19 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
- (gst_dvdec_sink_convert), (gst_dvdec_get_src_query_types),
- (gst_dvdec_src_query), (gst_dvdec_get_sink_query_types),
- (gst_dvdec_sink_query), (gst_dvdec_send_event),
- (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
- (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
- (gst_dvdec_decode_frame), (gst_dvdec_flush), (gst_dvdec_chain):
- * ext/dv/gstdvdec.h:
- Implemented seeking in dvdec.
-
-2005-07-19 Andy Wingo <wingo@pobox.com>
-
- * ext/Makefile.am: Enable dvdev and raw1394src.
-
-2005-07-18 Andy Wingo <wingo@pobox.com>
-
- * configure.ac: Use AS_LIBTOOL_TAGS. Fix crap gettext commit
- comment.
-
-2005-07-18 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_add_element),
- (gst_rtspsrc_play):
- Fix for core changes.
-
-2005-07-18 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
- When returning to NORMAL state after reading tags,
- pass on the discont event.
-
-2005-07-18 Wim Taymans <wim@fluendo.com>
-
- * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
- (gst_rmdemux_change_state), (gst_rmdemux_chain),
- (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
- (gst_rmdemux_add_stream):
- Send discont event before pushing first buffer.
-
-2005-07-17 Philippe Khalaf <burger@speedy.org>
-
- * gst/fdsrc/gstfdsrc.c:
- Removed #include <gst_private.h>
-
-2005-07-16 Philippe Khalaf <burger@speedy.org>
-
- * gst/fdsrc/gstfdsrc.c:
- * gst/fdsrc/gstfdsrc.h:
- * gst/fdsrc/Makefile.am:
- Moved fdsrc 0.9 port from gstreamer/gst/elements to here.
-
-2005-07-16 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event),
- (gst_mad_chain):
- Add convert function for proper timestamp calculations.
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_send_event),
- (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
- (gst_avi_demux_process_next_entry), (gst_avi_demux_loop):
- Send out initial discont.
-
-2005-07-15 Wim Taymans <wim@fluendo.com>
-
- * gst/level/gstlevel.c: (gst_level_transform):
- * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
- (gst_video_box_get_size), (gst_video_box_transform):
- Port to new base class.
-
-2005-07-14 Wim Taymans <wim@fluendo.com>
-
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
- (gst_dv1394src_class_init), (gst_dv1394src_init),
- (gst_dv1394src_iso_receive), (gst_dv1394src_create),
- (gst_dv1394src_change_state), (gst_dv1394src_query):
- It's PUSH_SRC now.
-
-2005-07-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
- (gst_udpsrc_class_init):
- more autistic cleanliness in functions/names/defines
-
-
-2005-07-10 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/aalib/gstaasink.c: (gst_aasink_get_type),
- (gst_aasink_class_init), (gst_aasink_init):
- * ext/esd/esdsink.c: (gst_esdsink_get_type),
- (gst_esdsink_class_init):
- * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
- (gst_cacasink_class_init), (gst_cacasink_init):
- * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
- (gst_shout2send_class_init), (gst_shout2send_init):
- * gst/udp/gstdynudpsink.c: (gst_dynudpsink_get_type),
- (gst_dynudpsink_class_init):
- * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
- (gst_multiudpsink_class_init):
- more macro splitting
-
-2005-07-08 Andy Wingo <wingo@pobox.com>
-
- * sys/oss/: Port from THREADED+wim's fixes.
-
- * gst/avi/Makefile.am (libgstavi_la_CFLAGS): No gettext hacks, the
- defines come from config.h.
-
- * autogen.sh: Run autopoint, etc.
-
- * Makefile.am (DIST_SUBDIRS, SUBDIRS): Go into po/.
-
- * configure.ac: Add gettext stuff.
-
-2005-07-07 Wim Taymans <wim@fluendo.com>
-
- * gst/videobox/gstvideobox.c: (gst_video_box_init),
- (gst_video_box_transform_caps), (gst_video_box_set_caps):
- Logic was reversed. Needs some more fixes in the transform
- function to include AYUV output.
- Moved AYUV as prefered format.
-
-2005-07-07 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/dv/Makefile.am:
- * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
- (gst_dvdec_get_src_query_types), (gst_dvdec_src_query),
- (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
- (gst_dvdec_video_getcaps), (gst_dvdec_video_setcaps),
- (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
- (gst_dvdec_decode_frame), (gst_dvdec_chain),
- (gst_dvdec_change_state), (gst_dvdec_set_property),
- (gst_dvdec_get_property), (plugin_init):
- * ext/dv/gstdvdec.h:
- * ext/esd/esdsink.c: (gst_esdsink_class_init):
- Ported DVdec to 0.9.
- Parent of esdsink is GstAudioSink.
-
-2005-07-07 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/raw1394/Makefile.am:
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
- (gst_dv1394src_class_init), (gst_dv1394src_init),
- (gst_dv1394src_iso_receive), (gst_dv1394src_create),
- (gst_dv1394src_change_state), (gst_dv1394src_convert),
- (gst_dv1394src_get_query_types), (gst_dv1394src_query):
- * ext/raw1394/gstdv1394src.h:
- Ported the 1394 source to 0.9.
-
-2005-07-07 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_query_types):
- * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
- * gst/avi/gstavidemux.c: (gst_avi_demux_get_src_query_types):
- Remove deprecated/unsed code.
-
-2005-07-06 Edward Hervey <edward@fluendo.com>
-
- * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
- GST_BASESRC --> GST_BASE_SRC
-
-2005-07-05 Andy Wingo <wingo@pobox.com>
-
- * gst/oneton: Removed (replaced by deinterleave).
-
- * gst/adder:
- * gst/audioconvert:
- * gst/audiorate:
- * gst/audioscale:
- * gst/ffmpegcolorspace:
- * gst/playback:
- * gst/sine:
- * gst/subparse:
- * gst/tags:
- * gst/tcp:
- * gst/videoscale:
- * gst/volume: Removed dirs that are now in gst-plugins-base.
-
-2005-07-05 Edward Hervey <edward@fluendo.com>
-
- * configure.ac: (GST_PLUGINS_ALL):
- videofilter must be compiled first, since other plugins depend ont it.
-
-2005-07-05 Andy Wingo <wingo@pobox.com>
-
- * Way, way, way too many files:
- Remove crack comment from the 2000 era.
-
-2005-07-05 Andy Wingo <wingo@pobox.com>
-
- * gst/videobox/gstvideobox.c: Clean up, port to 0.9, use
- BaseTransform.
-
- * gst/videobox/Makefile.am: Link to base libs, include
- plugins-base cflags, dist the README.
-
- * configure.ac (GST_PLUGIN_ALL, AC_CONFIG_FILES): Add videobox to
- the build.
-
-2005-07-04 Wim Taymans <wim@fluendo.com>
-
- * gst/realmedia/rmdemux.c:
- I don't think that piece of changelog should go there.
-
-2005-07-04 Andy Wingo <wingo@pobox.com>
-
- * examples/level/:
- * examples/level/Makefile.am:
- * examples/level/README:
- * examples/level/demo.c:
- * examples/level/plot.c: Examples moved out of the source dir. Not
- updated tho.
-
- * configure.ac: Add level to the build.
-
- * gst/level/Makefile.am:
- * gst/level/gstlevel.h:
- * gst/level/gstlevel.c: Cleaned up, ported to 0.9.
-
- * ext/aalib/gstaasink.c (gst_aasink_fixate): Update for newer
- fixate prototype.
-
-2005-07-03 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c (gst_rmdemux_add_stream),
- (gst_rmdemux_src_getcaps), (gst_rmdemux_chain):
- Added getcaps function no_more_pads call
-
-2005-07-01 Philippe Khalaf <burger@speedy.org>
- * gst/udp/Makefile.am:
- * gst/udp/gstudp.c:
- * gst/udp/gstdynudpsink.c: (new)
- * gst/udp/gstdynudpsink.h: (new)
- Added new element (udpdynsink) that receives GstNetBuffers and sends the
- udp packets to the source given in the buffer. It's used by rtpsession
- element for now.
- * gst/udp/gstudpsrc.c:
- Fixed memory leak.
-
-2005-07-01 Jan Schmidt <thaytan@mad.scientist.com>
-
- * configure.ac:
- * ext/mad/Makefile.am:
- * sys/oss/Makefile.am:
- Roll gstreamer-interfaces-0.9.pc into gstreamer-plugins-base-0.9.pc
-
-2005-07-01 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/libcaca/Makefile.am:
- * ext/mad/Makefile.am:
- * gst/effectv/Makefile.am:
- * gst/udp/Makefile.am:
- Replace GST_PLUGINS_LIBS_* with GST_PLUGINS_BASE_*
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_query),
- (gst_id3_tag_src_event), (gst_id3_tag_sink_event),
- (gst_id3_tag_chain), (plugin_init):
- * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
- Signedness warning fix, use gst_pad_get_peer instead of GST_PAD_PEER
- in querying and event handling, because we're not holding the pad
- lock and the peer may disappear.
- * gst/avi/gstavidemux.c: (gst_avi_demux_parse_subindex),
- (gst_avi_demux_parse_index), (gst_avi_demux_massage_index):
- Signedness warning fixes.
-
- * gst/videofilter/gstvideotemplate.c: (plugin_init):
- Remove gst_library_load
-
-2005-06-30 Edward Hervey <edward@fluendo.com>
-
- * gst/avi/Makefile.am: (libgstavi_la_LIBADD):
- Added linking to libgstriff-0.9
-
- * ext/mad/gstmad.c: (gst_mad_src_query):
- check the format of the upstream query and return query if it's the
- same format as the requested one.
-
-2005-06-30 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
- Compiler pains.
-
-2005-06-30 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * gst/avi/Makefile.am:
- * gst/avi/gstavi.c: (plugin_init):
- * gst/avi/gstavidemux.c: (gst_avi_demux_get_type),
- (gst_avi_demux_class_init), (gst_avi_demux_init),
- (gst_avi_demux_reset), (gst_avi_demux_index_next),
- (gst_avi_demux_index_entry_for_time),
- (gst_avi_demux_index_entry_for_byte),
- (gst_avi_demux_index_entry_for_frame), (gst_avi_demux_src_convert),
- (gst_avi_demux_handle_src_query), (gst_avi_demux_handle_src_event),
- (gst_avi_demux_parse_file_header), (gst_avi_demux_stream_init),
- (gst_avi_demux_parse_avih), (gst_avi_demux_parse_superindex),
- (gst_avi_demux_parse_subindex), (gst_avi_demux_read_subindexes),
- (gst_avi_demux_parse_stream), (gst_avi_demux_parse_odml),
- (gst_avi_demux_parse_index), (gst_avi_demux_stream_index),
- (gst_avi_demux_stream_scan), (gst_avi_demux_massage_index),
- (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
- (gst_avi_demux_process_next_entry), (gst_avi_demux_stream_data),
- (gst_avi_demux_loop), (gst_avi_demux_sink_activate),
- (gst_avi_demux_sink_activate_pull):
- * gst/avi/gstavidemux.h:
- Port from -THREADED to HEAD, and fix for latest API changes of
- the day. Keep avimux dead for now.
-
-2005-06-29 Wim Taymans <wim@fluendo.com>
-
- * ext/shout2/gstshout2.c: (gst_shout2send_render):
- Fix build.
-
-2005-06-29 Andy Wingo <wingo@pobox.com>
-
- * gst/videofilter/gstvideoexample.c: Removed gst_library_load, I
- think. Whatever this plugin actually does, that I don't know.
-
-2005-06-29 Andy Wingo <wingo@pobox.com>
-
- * ext/mad/gstid3tag.c (gst_id3_tag_get_event_masks): Reschmoove.
-
- * ext/mad/gstmad.c (gst_mad_get_event_masks): Remove.
- (gst_mad_chain): Appease GCC.
-
- * ext/libcaca/gstcacasink.c (gst_cacasink_setcaps): Signedness.
-
- * ext/aalib/gstaasink.c (gst_aasink_fixate): Unref caps, not free.
- (gst_aasink_scale): Signedness.
-
- * gst/udp/gstudpsink.c (gst_udpsink_get_type): Actually add the
- URI handler.
-
- * gst/udp/gstudpsrc.c (gst_udpsrc_start):
- (gst_udpsrc_create): Signedness.
-
- * gst/rtsp/sdpmessage.c (sdp_message_parse_buffer): Thanks
- compiler!
- (sdp_parse_line): Signedness fix.
-
- * configure.ac (GST_CFLAGS): GCC strikes back!!! Let the build
- breakage ensue!!!
-
- * gst/rtsp/gstrtspsrc.c (gst_rtspsrc_loop, gst_rtspsrc_open):
- Signedness, unused var fixes.
- (gst_rtspsrc_close): Unused?
-
- * gst/realmedia/rmdemux.c (re_hexdump_bytes): Unused.
-
- * gst/law/mulaw-encode.c (gst_mulawenc_chain): Signeness fix.
-
- * gst/law/alaw-encode.c (alawenc_getcaps): Remove unneeded
- declarations. Typo (probably crasher) fix.
-
- * gst/law/mulaw-encode.c (mulawdec_getcaps):
- * gst/law/mulaw-encode.c (mulawenc_getcaps):
- * gst/law/alaw-decode.c (alawdec_getcaps): Same crasher fix.
-
- * gst/goom/gstgoom.c (gst_goom_init): Hook up the event function.
-
- * gst/effectv/gstwarp.c (gst_warptv_setup): Signedness fix.
-
- * gst/effectv/gstdice.c (gst_dicetv_draw): Um, deferencing
- uninitialized pointer not good.
-
- * gst/videofilter/gstvideoexample.c (plugin_init):
- * gst/videofilter/Makefile.am (libgstvideoexample_la_LIBADD): Link
- to libgstvideofilter instead of gst_library_load.
-
- * gst/alpha/gstalpha.c (gst_alpha_chroma_key_i420)
- (gst_alpha_chroma_key_ayuv): Signedness fixen.
-
-2005-06-29 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
- (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
- (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
- (gst_rtspsrc_change_state):
- Fix case where outpad could not be decided.
-
-2005-06-29 Andy Wingo <wingo@pobox.com>
-
- * ext/Makefile.am (MAD_DIR): Add mad to the build.
-
-2005-06-28 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
- * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
- Fix old RPAD macro.
- basesrc -> base_src
-
-2005-06-27 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
- * ext/mad/gstmad.c: (gst_mad_chain):
- RPAD_ -> PAD
- Fix args in bufferalloc function call.
- Makes the mad plugin compile again
-
-2005-06-27 Owen Fraser-Green <owen@discobabe.net>
-
- * gst/realmedia/rmdemux.c: Rewrote to use gstadapter. Also parses
- audio and video header packets for known properties.
-
-2005-06-23 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
- (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
- (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
- (gst_rtspsrc_change_state):
- * gst/rtsp/rtspurl.c: (rtsp_url_parse):
- Make rtspsrc a live source.
- Don't try to parse NULL urls.
-
-2005-06-23 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
- Make udpsrc a live source.
-
-2005-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/Makefile.am:
- Use versioned net lib.
-
-2005-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/Makefile.am:
- Fix hack in makefile.
-
-2005-06-02 Andy Wingo <wingo@pobox.com>
-
- * ext/mad/gstid3tag.c: Finish porting to 0.9: no more gstdata,
- check for link functions before calling them, give
- gst_message_new_tag its own copy of the tag list, set the parser
- state before sending the event (because in 0.9 events are
- processed immediately), casting fixes.
-
- * ext/mad/Makefile.am (libgstmad_la_LDFLAGS): Link with
- gsttagedit.
-
-2005-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/Makefile.am:
- * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
- (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
- (gst_multiudpsink_init), (gst_multiudpsink_finalize),
- (gst_multiudpsink_get_times), (gst_multiudpsink_render),
- (gst_multiudpsink_set_property), (gst_multiudpsink_init_send),
- (gst_multiudpsink_add), (client_compare), (free_client),
- (gst_multiudpsink_remove), (gst_multiudpsink_clear),
- (gst_multiudpsink_get_stats):
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
- (gst_udpsrc_base_init), (gst_udpsrc_class_init),
- (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
- (gst_udpsrc_unlock), (gst_udpsrc_stop):
- Use NetBuffer and small cleanups.
- Implement client removal in multiudpsink.
-
-2005-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/README:
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
- (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
- (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
- (gst_rtspsrc_change_state):
- * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
- (rtsp_transport_init), (parse_mode), (parse_range),
- (rtsp_transport_parse), (rtsp_transport_free):
- RTSP cleanups.
-
-2005-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/effectv/gstquark.c: (gst_quarktv_chain):
- * gst/goom/gstgoom.c: (gst_goom_chain):
- * gst/videobox/Makefile.am:
- * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
- (gst_video_box_init), (gst_video_box_sink_setcaps),
- (gst_video_box_chain):
- * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
- * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
- (gst_videorate_getcaps), (gst_videorate_setcaps),
- (gst_videorate_init), (gst_videorate_event), (gst_videorate_chain),
- (gst_videorate_change_state):
- Bufferalloc changes.
-
-2005-05-25 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstmad.c: (gst_mad_chain), (gst_mad_change_state):
- * ext/sidplay/gstsiddec.cc:
- * gst/alpha/gstalpha.c: (gst_alpha_chain):
- * gst/goom/gstgoom.c: (gst_goom_chain):
- No need to take the lock anymore, core already did
- that before calling us.
-
-2005-05-25 Wim Taymans <wim@fluendo.com>
-
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init),
- (gst_amrnbenc_finalize), (gst_amrnbenc_chain),
- (gst_amrnbenc_state_change):
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_query), (gst_amrnbparse_chain),
- (gst_amrnbparse_read_header), (gst_amrnbparse_loop),
- (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
- Core already took the lock.
-
-2005-05-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/esd/Makefile.am:
- Disable tcp elements and esdmon (they don't compile).
-
-2005-05-19 Jan Schmidt <thaytan@mad.scientist.com>
-
- * Makefile.am:
- * ext/Makefile.am:
- * sys/Makefile.am:
- Make my automake version shut up about undefined variables
- * gst/goom/gstgoom.c:
- GstAdapter moved to base objects.
-
-2005-05-18 Wim Taymans <wim@fluendo.com>
-
- * ext/amrnb/Makefile.am:
- * ext/amrnb/amrnb.c: (plugin_init):
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
- (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbenc.c: (gst_amrnbenc_get_type),
- (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
- (gst_amrnbenc_init), (gst_amrnbenc_finalize),
- (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
- (gst_amrnbenc_state_change):
- * ext/amrnb/amrnbenc.h:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
- (gst_amrnbparse_query), (gst_amrnbparse_event),
- (gst_amrnbparse_chain), (gst_amrnbparse_read_header),
- (gst_amrnbparse_loop), (gst_amrnbparse_sink_activate),
- (gst_amrnbparse_state_change):
- * ext/amrnb/amrnbparse.h:
- Ported AMR decoder/parse.
- Added AMR encoder.
-
-2005-05-18 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * gst/goom/Makefile.am:
- * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_sink_setcaps),
- (gst_goom_src_setcaps), (gst_goom_src_negotiate), (gst_goom_event),
- (gst_goom_chain), (gst_goom_change_state), (plugin_init):
- Ported goom.
- Added goom and alpha to build.
-
-2005-05-17 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * gst/alpha/Makefile.am:
- * gst/alpha/gstalpha.c: (gst_alpha_class_init), (gst_alpha_init),
- (gst_alpha_sink_setcaps), (gst_alpha_chain):
- Ported alpha, remove alphacolor as functionality is in
- ffmpegcolorspace.
-
-2005-05-17 Wim Taymans <wim@fluendo.com>
-
- * ext/libcaca/gstcacasink.c: (gst_cacasink_setcaps),
- (gst_cacasink_render), (gst_cacasink_open), (gst_cacasink_close),
- (gst_cacasink_change_state):
- * ext/libcaca/gstcacasink.h:
- Cleanups.
-
-2005-05-15 David Schleef <ds@schleef.org>
-
- Move core plugins out of core. I don't mind fdsrc/fdsink
- going back into the core; they were just disabled there, so
- I moved them. Some of this stuff could (should) be deleted.
- * gst/oldcore/Makefile.am:
- * gst/oldcore/gstaggregator.c:
- * gst/oldcore/gstaggregator.h:
- * gst/oldcore/gstelements.c:
- * gst/oldcore/gstfdsink.c:
- * gst/oldcore/gstfdsink.h:
- * gst/oldcore/gstfdsrc.c:
- * gst/oldcore/gstfdsrc.h:
- * gst/oldcore/gstmd5sink.c:
- * gst/oldcore/gstmd5sink.h:
- * gst/oldcore/gstmultifilesrc.c:
- * gst/oldcore/gstmultifilesrc.h:
- * gst/oldcore/gstpipefilter.c:
- * gst/oldcore/gstpipefilter.h:
- * gst/oldcore/gstshaper.c:
- * gst/oldcore/gstshaper.h:
- * gst/oldcore/gststatistics.c:
- * gst/oldcore/gststatistics.h:
-
-2005-05-13 Christian Schaller <uraeus@gnome.org>
-
- * ext/Makefile.am: dist esd directory
- * gst-plugins.spec.in: add rtp plugins and esd plugin
- * gst/effectv/Makefile.am: fix videofilter linking
- * gst/rtp/Makefile.am: add missing headers
- * gst/rtsp/Makefile.am: add missing headers
-
-2005-05-12 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/sidplay/gstsiddec.cc:
- Add working plugins to build.
- Make sidplay compile again.
-
-2005-05-12 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
- * ext/mad/gstmad.c: (gst_mad_chain):
- Fix mad and id3tag compilation again.
-
-2005-05-12 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/.cvsignore:
- * gst/udp/Makefile.am:
- * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
- (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
- (gst_multiudpsink_init), (gst_multiudpsink_finalize),
- (gst_multiudpsink_get_times), (gst_multiudpsink_render),
- (gst_multiudpsink_set_property), (gst_multiudpsink_get_property),
- (gst_multiudpsink_init_send), (gst_multiudpsink_close),
- (gst_multiudpsink_add), (gst_multiudpsink_remove),
- (gst_multiudpsink_clear), (gst_multiudpsink_get_stats),
- (gst_multiudpsink_change_state):
- * gst/udp/gstmultiudpsink.h:
- * gst/udp/gstudp-marshal.list:
- * gst/udp/gstudp.c: (plugin_init):
- * gst/udp/gstudp.h:
- * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
- (gst_udpsink_base_init), (gst_udpsink_class_init),
- (gst_udpsink_init), (gst_udpsink_set_uri),
- (gst_udpsink_set_property), (gst_udpsink_get_property),
- (gst_udpsink_uri_get_type), (gst_udpsink_uri_get_protocols),
- (gst_udpsink_uri_get_uri), (gst_udpsink_uri_set_uri),
- (gst_udpsink_uri_handler_init):
- * gst/udp/gstudpsink.h:
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
- (gst_udpsrc_base_init), (gst_udpsrc_class_init),
- (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
- (gst_udpsrc_unlock), (gst_udpsrc_stop):
- * gst/udp/gstudpsrc.h:
- Added multifdsink to send UDP to multiple addresses.
- Cleaned up UDP source/sink elements some more.
- Make UDP sink extends from multiudpsink.
-
-2005-05-12 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event):
- Make queries actually work (update core first).
-
-2005-05-12 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/README:
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get_type),
- (gst_tcpclientsrc_base_init), (gst_tcpclientsrc_class_init),
- (gst_tcpclientsrc_init), (gst_tcpclientsrc_getcaps),
- (gst_tcpclientsrc_stop), (gst_tcpclientsrc_eos),
- (gst_tcpclientsrc_create), (gst_tcpclientsrc_start):
- * gst/tcp/gsttcpclientsrc.h:
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get_type),
- (gst_tcpserversrc_base_init), (gst_tcpserversrc_class_init),
- (gst_tcpserversrc_init), (gst_tcpserversrc_create),
- (gst_tcpserversrc_start), (gst_tcpserversrc_stop):
- * gst/tcp/gsttcpserversrc.h:
- * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get_type),
- (gst_tcpsrc_base_init), (gst_tcpsrc_class_init), (gst_tcpsrc_init),
- (gst_tcpsrc_create), (gst_tcpsrc_start), (gst_tcpsrc_stop):
- * gst/tcp/gsttcpsrc.h:
- * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
- (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
- (gst_udpsink_set_property), (gst_udpsink_get_property),
- (gst_udpsink_change_state):
- * gst/udp/gstudpsink.h:
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
- (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
- (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
- (gst_udpsrc_stop):
- * gst/udp/gstudpsrc.h:
- Make UDP and TCP elements use PushSrc.
-
-
-2005-05-11 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query),
- (index_seek), (normal_seek), (gst_mad_sink_event):
- Port to new query API and replace gst_pad_convert()
- and gst_pad_get_formats() usage. gstid3tag looks like
- it needs some more love before it will work again, if
- not a rewrite.
-
-2005-05-12 Zeeshan Ali <zeenix@gmail.com>
-
- * gst/effectv/Makefile.am:
- Fixed the effectv build again.
-
-2005-05-11 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_get_type),
- (gst_multifdsink_base_init), (gst_multifdsink_class_init),
- (gst_multifdsink_init), (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_render),
- (gst_multifdsink_change_state):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
- (gst_tcpclientsink_base_init), (gst_tcpclientsink_class_init),
- (gst_tcpclientsink_init), (gst_tcpclientsink_render),
- (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property),
- (gst_tcpclientsink_change_state):
- * gst/tcp/gsttcpclientsink.h:
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
- (gst_tcpclientsrc_init_receive):
- * gst/tcp/gsttcpplugin.c: (plugin_init):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init):
- * gst/tcp/gsttcpserversink.h:
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init):
- * gst/tcp/gsttcpsink.c: (gst_tcpsink_get_type),
- (gst_tcpsink_base_init), (gst_tcpsink_class_init),
- (gst_tcpsink_setcaps), (gst_tcpsink_init), (gst_tcpsink_get_times),
- (gst_tcpsink_render), (gst_tcpsink_set_property),
- (gst_tcpsink_get_property):
- * gst/tcp/gsttcpsink.h:
- * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_class_init), (gst_tcpsrc_get):
- Ported over some sink elements.
- Sources not ported yet as they require a PushSource base class.
-
-2005-05-11 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/effectv/Makefile.am:
- * gst/videofilter/Makefile.am:
- Turn videofilter into a library (private for now)
-
-2005-05-11 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/README:
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
- (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
- (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play):
- * gst/rtsp/rtsp.h:
- * gst/rtsp/rtspconnection.c: (rtsp_connection_create),
- (rtsp_connection_send), (read_line), (parse_request_line),
- (parse_line), (read_body), (rtsp_connection_receive),
- (rtsp_connection_free):
- * gst/rtsp/rtspconnection.h:
- * gst/rtsp/rtspdefs.c: (rtsp_find_method):
- * gst/rtsp/rtspdefs.h:
- * gst/rtsp/rtspmessage.c: (rtsp_message_set_body),
- (rtsp_message_take_body):
- * gst/rtsp/rtspmessage.h:
- * gst/rtsp/rtspstream.h:
- * gst/rtsp/sdpmessage.c: (sdp_parse_line):
- Added README
- Some cleanups.
-
-2005-05-11 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_class_init), (gst_rtspsrc_init),
- (gst_rtspsrc_create_stream), (gst_rtspsrc_add_element),
- (gst_rtspsrc_set_state), (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_close),
- (gst_rtspsrc_play), (gst_rtspsrc_change_state):
- * gst/rtsp/gstrtspsrc.h:
- Setup UDP sources correctly, receives raw data from RTSP
- compliant servers now.
-
-2005-05-11 Wim Taymans <wim@fluendo.com>
-
- * gst/rtsp/.cvsignore:
- * gst/rtsp/Makefile.am:
- * gst/rtsp/gstrtsp.c: (plugin_init):
- * gst/rtsp/gstrtsp.h:
- * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
- (gst_rtspsrc_get_type), (gst_rtspsrc_base_init),
- (gst_rtspsrc_class_init), (gst_rtspsrc_init),
- (gst_rtspsrc_set_property), (gst_rtspsrc_get_property),
- (gst_rtspsrc_create_stream), (rtspsrc_add_element),
- (gst_rtspsrc_stream_setup_rtp),
- (gst_rtspsrc_stream_configure_transport), (find_stream),
- (gst_rtspsrc_loop), (gst_rtspsrc_send), (gst_rtspsrc_open),
- (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
- (gst_rtspsrc_activate), (gst_rtspsrc_change_state):
- * gst/rtsp/gstrtspsrc.h:
- * gst/rtsp/rtsp.h:
- * gst/rtsp/rtspconnection.c: (rtsp_connection_open),
- (rtsp_connection_create), (append_header), (rtsp_connection_send),
- (read_line), (read_string), (read_key), (parse_response_status),
- (parse_line), (read_body), (rtsp_connection_receive),
- (rtsp_connection_close):
- * gst/rtsp/rtspconnection.h:
- * gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_method_as_text),
- (rtsp_header_as_text), (rtsp_status_as_text),
- (rtsp_status_to_string), (rtsp_find_header_field):
- * gst/rtsp/rtspdefs.h:
- * gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
- (rtsp_message_init_request), (rtsp_message_new_response),
- (rtsp_message_init_response), (rtsp_message_init_data),
- (rtsp_message_add_header), (rtsp_message_remove_header),
- (rtsp_message_get_header), (rtsp_message_get_header_copy),
- (rtsp_message_set_body), (rtsp_message_set_body_copy),
- (rtsp_message_get_body), (rtsp_message_get_body_copy), (dump_mem),
- (dump_key_value), (rtsp_message_dump):
- * gst/rtsp/rtspmessage.h:
- * gst/rtsp/rtspstream.h:
- * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
- (rtsp_transport_init), (parse_mode), (parse_range),
- (rtsp_transport_parse), (rtsp_transport_free):
- * gst/rtsp/rtsptransport.h:
- * gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_free):
- * gst/rtsp/rtspurl.h:
- * gst/rtsp/sdp.h:
- * gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
- (sdp_message_clean), (sdp_message_free), (sdp_media_new),
- (sdp_media_init), (sdp_message_set_origin),
- (sdp_message_get_origin), (sdp_message_set_connection),
- (sdp_message_get_connection), (sdp_message_add_bandwidth),
- (sdp_message_add_time), (sdp_message_add_zone),
- (sdp_message_set_key), (sdp_message_get_key),
- (sdp_message_get_attribute_val), (sdp_message_add_attribute),
- (sdp_message_add_media), (sdp_media_add_attribute),
- (sdp_media_add_bandwidth), (sdp_media_add_format),
- (sdp_media_get_attribute_val), (read_string), (read_string_del),
- (sdp_parse_line), (sdp_message_parse_buffer), (print_media),
- (sdp_message_dump):
- * gst/rtsp/sdpmessage.h:
- * gst/rtsp/test.c: (main):
- Ported to 0.9.
- Set up transports, init UDP ports, init RTP session managers.
-
-2005-05-11 Wim Taymans <wim@fluendo.com>
-
- * gst/rtp/Makefile.am:
- * gst/rtp/gstrtp.c: (plugin_init):
- * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
- (gst_rtpdec_class_init), (gst_rtpdec_init), (gst_rtpdec_chain_rtp),
- (gst_rtpdec_chain_rtcp), (gst_rtpdec_set_property),
- (gst_rtpdec_get_property), (gst_rtpdec_change_state),
- (gst_rtpdec_plugin_init):
- * gst/rtp/gstrtpdec.h:
- * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
- (gst_udpsink_get_times), (gst_udpsink_render),
- (gst_udpsink_change_state):
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
- (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
- (gst_udpsrc_loop), (gst_udpsrc_set_uri), (gst_udpsrc_set_property),
- (gst_udpsrc_get_property), (gst_udpsrc_init_receive),
- (gst_udpsrc_activate), (gst_udpsrc_change_state),
- (gst_udpsrc_uri_get_type), (gst_udpsrc_uri_get_protocols),
- (gst_udpsrc_uri_get_uri), (gst_udpsrc_uri_set_uri),
- (gst_udpsrc_uri_handler_init):
- * gst/udp/gstudpsrc.h:
- UDP fixes, added uri handler.
- Added rtpdec that will manage the RTP session in the future.
-
-2005-05-10 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * PORTED_09:
- * configure.ac:
- * ext/Makefile.am:
- * ext/esd/Makefile.am:
- * ext/esd/esdsink.c: (gst_esdsink_get_type),
- (gst_esdsink_class_init), (gst_esdsink_init),
- (gst_esdsink_dispose), (gst_esdsink_change_state),
- (gst_caps_set_each), (gst_esdsink_getcaps), (gst_esdsink_open),
- (gst_esdsink_close), (gst_esdsink_write), (gst_esdsink_delay),
- (gst_esdsink_reset), (gst_esdsink_set_property),
- (gst_esdsink_get_property), (gst_esdsink_factory_init):
- * ext/esd/esdsink.h:
- * ext/esd/gstesd.c: (plugin_init):
- Ported esdsink plugin
-
-2005-05-10 Wim Taymans <wim@fluendo.com>
-
- * gst/udp/Makefile.am:
- * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
- (gst_udpsink_base_init), (gst_udpsink_class_init),
- (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
- (gst_udpsink_set_property), (gst_udpsink_get_property),
- (gst_udpsink_init_send), (gst_udpsink_close),
- (gst_udpsink_change_state):
- * gst/udp/gstudpsink.h:
- * gst/udp/gstudpsrc.c: (gst_udpsrc_base_init),
- (gst_udpsrc_class_init), (gst_udpsrc_init), (gst_udpsrc_loop),
- (gst_udpsrc_set_property), (gst_udpsrc_get_property),
- (gst_udpsrc_init_receive), (gst_udpsrc_close),
- (gst_udpsrc_activate), (gst_udpsrc_change_state):
- * gst/udp/gstudpsrc.h:
- Ported udp src/sink.
-
-2005-05-09 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * PORTED_09:
- * configure.ac:
- * ext/Makefile.am:
- * ext/shout2/Makefile.am:
- * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
- (gst_shout2send_base_init), (gst_shout2send_class_init),
- (gst_shout2send_init), (gst_shout2send_event),
- (gst_shout2send_render), (gst_shout2send_set_property),
- (gst_shout2send_get_property), (gst_shout2send_setcaps),
- (gst_shout2send_change_state):
- * ext/shout2/gstshout2.h:
-
- Port shout2 plugin
-
-2005-05-08 Zeeshan Ali <zeenix@gmail.com>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/libcaca/Makefile.am:
- * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
- (gst_cacasink_class_init), (gst_cacasink_get_times),
- (gst_cacasink_setcaps), (gst_cacasink_init), (gst_cacasink_render),
- (plugin_init):
- * ext/libcaca/gstcacasink.h:
- Ported the libcaca plugin.
-
-2005-05-08 Zeeshan Ali <zeenix@gmail.com>
-
- * configure.ac:
- * ext/mad/Makefile.am:
- * effectv/Makefile.am:
- Fixed a few things to enable the mad and effectv to be able to find the
- headers in the gst-plugins-base/gst-libs and to link against the libs
- in there.
-
-2005-05-07 Zeeshan Ali <zeenix@gmail.com>
-
- * configure.ac:
- Fixed the build by fixing a small mistake of Wim.
-
-2005-05-06 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/aalib/Makefile.am:
- * ext/aalib/gstaasink.c: (gst_aasink_get_type),
- (gst_aasink_class_init), (gst_aasink_fixate), (gst_aasink_setcaps),
- (gst_aasink_init), (gst_aasink_get_times), (gst_aasink_render),
- (gst_aasink_set_property), (gst_aasink_get_property),
- (gst_aasink_open), (gst_aasink_close), (gst_aasink_change_state):
- * ext/aalib/gstaasink.h:
- * gst/smpte/Makefile.am:
- * gst/smpte/gstsmpte.c: (gst_smpte_setcaps), (gst_smpte_init),
- (gst_smpte_collected):
- * gst/smpte/gstsmpte.h:
- Ported 2 more plugins. usgly hack in the Makefile.am though, I'm
- sure someone will fix it.
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * configure.ac: add sidplay
- * ext/Makefile.am: add sidplay
- * ext/sidplay/Makefile.am: add GST_PLUGINS_CFLAGS
- * ext/sidplay/gstsiddec.cc: remove bytestream.h
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * configure.ac: add gst-plugins-libs
-
-2005-05-06 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * ext/sidplay/gstsiddec.cc:
- * ext/sidplay/gstsiddec.h:
- Ported sidplay.
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * configure.ac:
- * ext/mad/Makefile.am: add linking of gstinterfaces
- * ext/mad/gstid3tag.c: (plugin_init): remove library_load
- * gst-plugins.spec.in:
- * gst/effectv/Makefile.am: link to libgstvideofilter
- * gst/effectv/gsteffectv.c: (plugin_init): same as for mad
- * gst/videofilter/Makefile.am: make sure videoflip is not built
-
-2005-05-06 Wim Taymans <wim@fluendo.com>
-
- * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_setcaps),
- (gst_alawdec_init), (gst_alawdec_chain):
- * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_setcaps),
- (gst_alawenc_init), (gst_alawenc_chain):
- * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_setcaps),
- (gst_mulawdec_init), (gst_mulawdec_chain):
- * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_setcaps),
- (gst_mulawenc_init), (gst_mulawenc_chain):
- Ported alaw and mulaw plugins to 0.9, fixed the negotiation as
- well.
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * ext/alsa: removed plugins that are now in gst-plugins-base
- * ext/gnomevfs:
- * ext/theora:
- * ext/vorbis:
- * gst/adder:
- * gst/audioconvert:
- * gst/ffmpegcolorspace:
- * gst/typefind:
- * gst/videofilter: comment out videoflip and gamma plugins
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * gst-libs: Remove all files as this is in gst-plugins-base now
- * gst-libs/README: add a remove informing of this move
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * PORTED_09: update to add videofilter
- * configure.ac: re-add videofilter
- * gst/videofilter/Makefile.am: remove videobalance (not ported yet)
- * gst/videofilter/gstgamma.c: (gst_gamma_class_init):
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init):
- * gst/videofilter/gstvideofilter.c: (gst_videofilter_getcaps),
- (gst_videofilter_setcaps), (gst_videofilter_init),
- (gst_videofilter_chain), (gst_videofilter_set_output_size):
- * gst/videofilter/gstvideoflip.c: (gst_videoflip_class_init):
-
-2005-05-06 Christian Schaller <uraeus@gnome.org>
-
- * ext/mad: ported plugin from threaded branch
- * gst/effectv: ported plugins from threaded branch
- * gst/law: enable law plugin as it compiles (Wim will fixor)
-
-2005-05-06 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- fix typo
-
-2005-05-05 Christian Schaller <uraeus@gnome.org>
-
- * Update configure.ac and Makefiles to only build what is actually
- ported and not moved into gst-plugins-base
-
-2005-02-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- hunting season on 0.9 is now OPEN
-
-2005-02-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
- Kick the hell out of gcc for not warning me about a symbol conflict.
-
-2005-02-22 Luca Ognibene <luogni@tin.it>
-
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link):
- Don't leak caps string (fixes #168134)
-
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init),
- (gst_jpegenc_init), (gst_jpegenc_finalize),
- (gst_jpegenc_change_state):
- Don't leak line buffers and context struct (fixes #168133).
-
-2005-02-21 Tim-Philipp Müller <tim at centricular dot net>
-
- * configure.ac:
- * ext/dirac/gstdiracdec.cc:
- (gst_diracdec_chain):
- Since dirac 0.5.0 the framerate in dirac is expressed as a
- rational number. Fix build and up requirement to 0.5.0, and
- also pass parameters to gst_diracdec_link in the right order
- (fixes #167959).
-
-2005-02-21 Maciej Katafiasz <mathrick@freedesktop.org>
-
- * ext/faad/gstfaad.c: (gst_faad_sinkconnect), (gst_faad_chain):
- * ext/faad/gstfaad.h:
- TEH LONGEST DEBUGGING SESSION EVAR is over. Fix interaction with
- certain invalid muxed streams, where some packets will contain
- junk after decoder data. Partially fixes #149158.
-
-2005-02-21 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
- Make sure we only write to writable buffers
-
-2005-02-20 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data):
- Do actually fix invalid RIFF fmt header values for alaw
- and mulaw audio instead of just saying so.
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
- Give gst_riff_create_audio_caps_with_data() a chance to
- fix up broken format header fields before extracting any
- parameters from the header. (fixes #167633)
-
-2005-02-19 Martin Holters <martin.holters@gmx.de>
-
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/audioconvert/bufferframesconvert.c:
- (buffer_frames_convert_link):
- Don't leak othercaps. (fixes #167878)
-
-2005-02-19 Arwed v. Merkatz <v.merkatz@gmx.net>>
-
- * configure.ac:
- * ext/libvisual/visual.c: (gst_visual_srclink),
- (gst_visual_change_state):
- Support libvisual 0.2.0.
-
-2005-02-18 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_chain):
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_resync), (gst_jpegenc_chain):
- Use same rowstrides for I420 as used everywhere else.
-
-2005-02-17 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_invert):
- Declare variables at beginning of block and make gcc-2.95 happy
- (fixes # 167482, patch by Gergely Nagy).
-
- * gst/tcp/gsttcpclientsrc.c:
- * gst/tcp/gsttcpclientsrc.h:
- Move some includes into the header, so that struct sockaddr_in is
- defined when it should be defined on FreeBSD as well (fixes
- #167483).
-
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
- Don't pass uninitialised values to setsockopt() here either.
-
-2005-02-17 Luca Ognibene <luogni at tin dot it>
-
- Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send):
- Don't pass uninitialised values to setsockopt(). (fixes #167704)
-
-2005-02-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (add_sink):
- Invert bin_add/link order to workaround deadlock in opt.
-
-2005-02-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/modplug/gstmodplug.cc:
- Add missing break causing position queries to fail.
-
-2005-02-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate):
- Granpos can apparently be -1, which screws up calculations...
-
-2005-02-16 Jan Schmidt <thaytan@mad.scientist.com>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
- (gst_ximagesink_send_pending_navigation),
- (gst_ximagesink_navigation_send_event), (gst_ximagesink_finalize),
- (gst_ximagesink_init):
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
- (gst_xvimagesink_send_pending_navigation),
- (gst_xvimagesink_navigation_send_event),
- (gst_xvimagesink_finalize), (gst_xvimagesink_init):
- * sys/xvimage/xvimagesink.h:
- Use a mutex protected list to marshal navigation
- events into the stream thread from whichever thread
- sends them.
-
-2005-02-15 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/speed/demo-mp3.c: (time_tick_cb), (main):
- Display current position and track length; misc. clean-ups.
-
- * gst/speed/gstspeed.c: (speed_get_query_types), (speed_src_query),
- (speed_init), (speed_chain):
- Add query function, so that the stream length and current position
- get adjusted when queried (note that current position queries may
- still be wrong if the audio sink returns values based on buffer
- timestamps instead of passing on the query).
-
-2005-02-13 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
- (gst_audio_convert_channels):
- create channel conversion matrix when linking
- * gst/audioconvert/.cvsignore:
- * gst/audioconvert/Makefile.am:
- * gst/audioconvert/channelmixtest.c: (main):
- add (ugly) test that ensures stereo <=> mono conversion works
- correctly
-
-2005-02-13 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstchannelmix.h:
- include missing header file
- * gst/audioconvert/gstchannelmix.c:
- (gst_audio_convert_fill_compatible):
- use same sign for both channels when converting to/from compatible
- channel. Previously used different signs made the signals cancel
- each other out and appear like silence. (fixes #167269)
-
-2005-02-12 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/imgconvert.c:
- Convert to and from YV12 (fixes #156379).
-
-2005-02-12 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
- (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
- (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
- (gst_ximagesink_expose), (gst_ximagesink_set_property),
- (gst_ximagesink_finalize), (gst_ximagesink_init): Protect interface
- methods from chain and negotiation and vice versa (Fixes #166142).
- * sys/ximage/ximagesink.h: Add stream_lock.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
- (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
- (gst_xvimagesink_expose): Check for xcontext before trying to link.
-
-2005-02-12 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_open):
- Don't send "Hey! You gave me a NULL pointer you naughty person" as
- error message when we can't open the DVD device (when dvdnav_open()
- fails, src->dvdnav is NULL, so dvdnav_err_to_string() will return
- the above). Send something more useful instead (fixes #167117).
-
-2005-02-11 Julien MOUTTE <julien@moutte.net>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
- (gst_xvimagesink_sink_link), (gst_xvimagesink_change_state),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
- (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
- (gst_xvimagesink_expose), (gst_xvimagesink_set_property),
- (gst_xvimagesink_finalize), (gst_xvimagesink_init): Protect interface
- methods from chain and negotiation and vice versa (Fixes #166142).
- Fix a possible bug of images in the buffer pool being discarded because
- we are looking at the wrong geometry.
- * sys/xvimage/xvimagesink.h: Add stream_lock.
-
-2005-02-11 David Schleef <ds@schleef.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer): Change uint to
- unsigned int. (fixes #167128)
-
-2005-02-11 David Schleef <ds@schleef.org>
-
- * gst/librfb/Makefile.am: Testing stuff before committing is
- for wimps... and people with fast machines. Fix stupid
- mistake.
-
-2005-02-11 David Schleef <ds@schleef.org>
-
- * configure.ac: Pull in librfb from my CVS tree, because it is
- too small and annoying to be separate. Move rfbsrc plugin
- to gst/.
- * ext/Makefile.am:
- * ext/librfb/Makefile.am:
- * ext/librfb/gstrfbsrc.c:
- * gst/librfb/Makefile.am:
- * gst/librfb/gstrfbsrc.c:
- * gst/librfb/rfb.c:
- * gst/librfb/rfb.h:
- * gst/librfb/rfbbuffer.c:
- * gst/librfb/rfbbuffer.h:
- * gst/librfb/rfbbytestream.c:
- * gst/librfb/rfbbytestream.h:
- * gst/librfb/rfbcontext.h:
- * gst/librfb/rfbdecoder.c:
- * gst/librfb/rfbdecoder.h:
- * gst/librfb/rfbutil.h:
-
-2005-02-10 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/speed/Makefile.am:
- * gst/speed/demo-mp3.c: (main):
- * gst/speed/filter.func:
- * gst/speed/gstspeed.c: (speed_link), (speed_parse_caps),
- (speed_class_init), (speed_init), (speed_chain_int16),
- (speed_chain_float32), (speed_chain), (speed_set_property),
- (speed_get_property), (speed_change_state):
- * gst/speed/gstspeed.h:
- Fix speed element and make it chain-based (fixes #156467),
- and make it handle more than one channel.
-
-2005-02-10 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dts/gstdtsdec.c: (gst_dtsdec_init), (gst_dtsdec_channels),
- (gst_dtsdec_handle_event), (gst_dtsdec_handle_frame),
- (gst_dtsdec_chain), (gst_dtsdec_change_state):
- * ext/dts/gstdtsdec.h:
- Don't clobber the stack constructing the channels array.
- Make the element chain-based. DTS tracks can now be played.
-
-2005-02-09 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst-libs/gst/audio/multichannel.h:
- * gst-libs/gst/gconf/gconf.h:
- * gst-libs/gst/idct/idct.h:
- * gst-libs/gst/media-info/media-info-priv.h:
- * gst-libs/gst/play/play.h:
- * gst-libs/gst/resample/private.h:
- * gst-libs/gst/resample/resample.h:
- * gst-libs/gst/riff/riff-ids.h:
- * gst-libs/gst/video/video.h:
- * gst-libs/gst/video/videosink.h:
- Add G_BEGIN_DECLS and G_END_DECLS around headers where
- missing, so that they work when included from C++ code.
-
-2005-02-09 David Schleef <ds@schleef.org>
-
- * testsuite/gst-lint: Check for non-statically scoped
- parent_class variables. This won't be a problem once
- plugins are loaded with RTLD_LOCAL.
-
-2005-02-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mplex/gstmplexibitstream.cc:
- gcc madness.
-
-2005-02-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstogmparse.c:
- * gst/debug/gstnavigationtest.c:
- Die, thou faulty symbol pollutors (non-static parent_class).
-
-2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mplex/gstmplexibitstream.cc:
- Fix event handling (#165525).
-
-2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mikmod/gstmikmod.c:
- * gst/modplug/gstmodplug.cc:
- Add missing endianness to template (fixes #165509).
-
-2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
- Fix wrong order of reading of optional bytes (#165290).
-
-2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- Implement FILLER event awareness.
-
-2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_convert):
- Fix track calculations (#166208).
-
-2005-02-08 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/libpng/gstpngdec.c: (gst_pngdec_init), (gst_pngdec_chain):
- * ext/libpng/gstpngenc.c:
- Fix byte-order, use proper fixed caps. Fixes #164197.
-
-2005-02-08 Jan Schmidt <thaytan@mad.scientist.com>
-
- * configure.ac:
- Add dvdlpcmdec
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
- (free_all_buffers), (gst_mpeg2dec_alloc_buffer):
- Don't push buffers if the src pad isn't negotiated yet.
-
- * gst/audioconvert/gstaudioconvert.c:
- (gst_audio_convert_buffer_to_default_format),
- (gst_audio_convert_buffer_from_default_format):
- Add support for 24-bit width.
-
- * gst/dvdlpcmdec/.cvsignore:
- * gst/dvdlpcmdec/Makefile.am:
- * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_get_type),
- (gst_dvdlpcmdec_base_init), (gst_dvdlpcmdec_class_init),
- (gst_dvdlpcm_reset), (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link),
- (gst_dvdlpcmdec_chain), (gst_dvdlpcmdec_change_state),
- (plugin_init):
- * gst/dvdlpcmdec/gstdvdlpcmdec.h:
- New decoder for rearranging DVD LPCM into our audio/x-raw-int
- format. Needs support for the channels maps if someone can find
- a DVD LPCM track with > 2 channels.
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_handle_dvd_event),
- (gst_dvd_demux_send_discont), (gst_dvd_demux_handle_discont),
- (gst_dvd_demux_get_audio_stream), (gst_dvd_demux_process_private):
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
- (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_init_stream),
- (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_handle_src_query):
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_reset),
- (gst_mpeg_parse_parse_packhead), (gst_mpeg_parse_loop),
- (gst_mpeg_parse_get_rate), (gst_mpeg_parse_convert_src),
- (gst_mpeg_parse_handle_src_query),
- (gst_mpeg_parse_handle_src_event):
- Use audio/x-dvd-lpcm for LPCM output.
- Add DTS output.
-
-2005-02-08 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/alpha/gstalphacolor.c: (gst_alpha_color_sink_link),
- (transform_rgb), (transform_bgr), (gst_alpha_color_chain):
- Add BGRA handling (#165736).
-
-2005-02-08 Francis Labonte <francis_labonte@hotmail.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/law/alaw-decode.c: (alawdec_link):
- * gst/law/alaw-encode.c: (alawenc_link):
- * gst/law/mulaw-decode.c: (mulawdec_link):
- * gst/law/mulaw-encode.c: (mulawenc_link):
- Fix caps memleaks (#166600).
-
-2005-02-08 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/tarkin/mem.h:
- * ext/tarkin/wavelet.h:
- * ext/tarkin/yuv.h:
- * gst/ffmpegcolorspace/avcodec.h:
- Include "_stdint.h" instead of <stdint.h>. Fixes build on
- systems that don't have stdint.h, like Solaris9 (fixes #166631).
-
-2005-02-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_change_state):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_clear),
- (gst_xvimagesink_change_state):
- Clear window on PAUSED->READY instead of READY->PAUSED. Stop
- Xv video (and thereby regenerate Xv colourkey) in clear() so
- that PLAY -> READY -> PLAY works (fixes #162504).
-
-2005-02-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_getcaps):
- Switch to list instead of range, since MJPEG-devices really just
- support decimations, not any size.
-
-2005-02-05 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_open_decoder),
- (gst_mpeg2dec_reset), (free_all_buffers),
- (gst_mpeg2dec_alloc_buffer), (handle_sequence):
- * ext/mpeg2dec/gstmpeg2dec.h:
- The libmpeg2 user-allocated buffer management is awkward,
- to say the least. Hopefully this fixes things.
-
-2005-02-04 Andy Wingo <wingo@pobox.com>
-
- * gst/audioconvert/bufferframesconvert.c
- (buffer_frames_convert_fixate): New function, fixates to 256
- frames per buffer by default. (Much better than 1.)
- (buffer_frames_convert_init): Set the fixate function for both src
- and sink pad.
- (buffer_frames_convert_link): After success setting nonfixed caps,
- get the negotiated caps so we can know how many buffer-frames it
- will be. No idea how this worked at all before.
-
-2005-02-05 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
- (gst_mpeg2dec_close_decoder), (put_buffer), (check_buffer),
- (free_buffer), (free_all_buffers), (gst_mpeg2dec_alloc_buffer),
- (handle_sequence), (handle_picture):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Rearrange buffer tracking and refcounting and refactor
- a little for readability.
-
-2005-02-04 Jan Schmidt <thaytan@mad.scientist.com>
- * sys/v4l/gstv4l.c: (plugin_init):
- * sys/v4l/gstv4ljpegsrc.c: (gst_v4ljpegsrc_get_type),
- (gst_v4ljpegsrc_base_init), (gst_v4ljpegsrc_class_init),
- (gst_v4ljpegsrc_init), (gst_v4ljpegsrc_src_link),
- (gst_v4ljpegsrc_getcaps), (gst_v4ljpegsrc_get):
- * sys/v4l/gstv4ljpegsrc.h:
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_open), (gst_v4lsrc_src_link):
- * sys/v4l/v4l_calls.h:
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_palette_name),
- (gst_v4lsrc_get_fps):
- * sys/v4l/v4lsrc_calls.h:
- Add new v4ljpegsrc for handling the ov51x hacky "I'll give
- you jpeg inside rgb frames" driver.
- Don't error in the v4lsrc link function, just return
- REFUSED.
-
-2005-02-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_change_state),
- (gst_qcamsrc_open):
- Use GST_ELEMENT_ERROR, not g_warning, if open failed.
-
-2005-02-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
- Change caps on MJPEG-B so it doesn't interfere with MJPEG/JPEG.
-
-2005-02-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_change_state):
- Reset negotiated state on PAUSED->READY.
-
-2005-02-02 David Schleef <ds@schleef.org>
-
- * configure.ac: Put DEFAULT_AUDIOSINK in config.h and use
- whereever possible. (Fixes #165997)
- * examples/capsfilter/capsfilter1.c: (main):
- * examples/dynparams/filter.c: (create_ui):
- * examples/seeking/cdparanoia.c: (get_track_info), (main):
- * examples/seeking/chained.c: (main):
- * examples/seeking/seek.c: (make_mod_pipeline), (make_dv_pipeline),
- (make_wav_pipeline), (make_flac_pipeline), (make_sid_pipeline),
- (make_vorbis_pipeline), (make_mp3_pipeline), (make_avi_pipeline),
- (make_mpeg_pipeline), (make_mpegnt_pipeline):
- * examples/seeking/spider_seek.c: (make_spider_pipeline):
- * examples/switch/switcher.c: (main):
- * ext/dv/demo-play.c: (main):
- * ext/faad/gstfaad.c: (gst_faad_change_state):
- * ext/mad/gstmad.c: (gst_mad_chain):
- * ext/smoothwave/demo-osssrc.c: (main):
- * gst-libs/gst/gconf/gconf.c: (gst_gconf_set_string),
- (gst_gconf_render_bin_from_description),
- (gst_gconf_get_default_audio_sink),
- (gst_gconf_get_default_video_sink),
- (gst_gconf_get_default_audio_src),
- (gst_gconf_get_default_video_src),
- (gst_gconf_get_default_visualization_element):
- * gst/level/demo.c: (main):
- * gst/level/plot.c: (main):
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element):
- * gst/playback/test.c: (gen_video_element), (gen_audio_element):
- * gst/playondemand/demo-mp3.c: (setup_pipeline):
- * gst/sine/demo-dparams.c: (main):
- * gst/spectrum/demo-osssrc.c: (main):
- * gst/speed/demo-mp3.c: (main):
- * gst/volume/demo.c: (main):
- * testsuite/embed/embed.c: (main):
-
-2005-02-02 Jan Schmidt <thaytan@mad.scientist.com>
-
- * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_class_init),
- (gst_tcpclientsink_finalize):
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
- (gst_tcpclientsrc_finalize):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
- (gst_tcpserversink_init), (gst_tcpserversink_finalize):
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
- (gst_tcpserversrc_init), (gst_tcpserversrc_finalize):
- Don't leak the hostname when shutting down.
- In tcpserversrc, take a copy of the default hostname.
-
-2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_iso_receive):
- Set caps to systemstream=TRUE.
-
-2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * testsuite/Makefile.am:
- Fix more OSX buildbots.
-
-2005-02-02 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Don't send things to NULL PAD_PEERs
-
- * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_chain):
- Copy-on-write the incoming buffer.
-
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegclock.h:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
- (normal_seek), (gst_mpeg_demux_handle_src_event):
- * gst/mpegstream/gstmpegdemux.h:
- * gst/mpegstream/gstmpegpacketize.h:
- * gst/mpegstream/gstmpegparse.c:
- (gst_mpeg_parse_update_streaminfo), (gst_mpeg_parse_reset),
- (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead),
- (gst_mpeg_parse_loop), (gst_mpeg_parse_get_rate),
- (gst_mpeg_parse_convert_src), (gst_mpeg_parse_handle_src_query),
- (gst_mpeg_parse_handle_src_event), (gst_mpeg_parse_change_state):
- * gst/mpegstream/gstmpegparse.h:
- * gst/mpegstream/gstrfc2250enc.h:
- Various changes to the way time is computed that make seeking and
- total time estimation much better here.
- Use G_BEGIN/END_DECLS instead of __cplusplus
-
- * gst/videocrop/gstvideocrop.c: (gst_video_crop_chain):
- Use gst_buffer_stamp instead of only copying the TIMESTAMP
-
-2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/subparse/gstsubparse.c:
- Fix OSX buildbot.
-
-2005-01-31 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/theora/theoraenc.c: (theora_buffer_from_packet),
- (theora_enc_chain), (theora_enc_change_state):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
- (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_chain),
- (gst_vorbisenc_change_state):
- * ext/vorbis/vorbisenc.h:
- Set granulepos and timestamp correctly for streams not
- starting at 0, taking into account the initial delay.
-
-2005-01-31 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/mpegstream/gstdvddemux.c:
- Add audio/x-dts to audio pad template caps
-
-2005-01-30 David Schleef <ds@schleef.org>
-
- * ext/polyp/polypsink.c: (gst_polypsink_base_init),
- (create_context), (gst_polypsink_link): Fix silly endianness
- bug. Add some debugging. Remove float from caps; it doesn't
- work. Attempt to get remote audio working.
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
- Add 3IV2 fourcc.
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream), (swap_line),
- (gst_avi_demux_invert), (gst_avi_demux_process_next_entry),
- (gst_avi_demux_stream_data):
- * gst/avi/gstavidemux.h:
- Invert DIB images. Fixes #132341.
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_chain):
- D'oh, reference the palette data, not the palette structure.
- Fixes color distortion in #132341.
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
- PAR can be non-fixed when not provided as argument (#162626).
-
-2005-01-29 David Moore <dcm@acm.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_loop_header):
- Re-apply patch from #142272 that allows non-seekable sources,
- re-proposed by Daniel Drake <dsd@gentoo.org>.
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/rtp/gstrtpgsmenc.c: (gst_rtpgsmenc_init):
- Use the src template for creating the src pad (#162330).
-
-2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/musepack/Makefile.am:
- * ext/musepack/gstmusepackdec.c: (gst_musepackdec_class_init),
- (gst_musepackdec_init), (gst_musepackdec_dispose),
- (gst_musepackdec_src_query), (gst_musepackdec_src_convert),
- (gst_musepack_stream_init), (gst_musepackdec_loop),
- (gst_musepackdec_change_state):
- * ext/musepack/gstmusepackdec.cpp:
- * ext/musepack/gstmusepackdec.h:
- * ext/musepack/gstmusepackreader.c: (gst_musepack_reader_peek),
- (gst_musepack_reader_read), (gst_musepack_reader_seek),
- (gst_musepack_reader_tell), (gst_musepack_reader_get_size),
- (gst_musepack_reader_canseek), (gst_musepack_init_reader):
- * ext/musepack/gstmusepackreader.cpp:
- * ext/musepack/gstmusepackreader.h:
- Update to 1.1 API (#165446).
-
-2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/Makefile.am:
- Unbreak buildbot.
-
-2005-01-28 Andy Wingo <wingo@pobox.com>
-
- * ext/dv/gstdvdec.c: Change the pixel aspect ratio of dvdec output
- to reflect a different dubious internet source. Add a reference
- and some commentary.
-
-2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gststreamselector.c: (gst_stream_selector_init),
- (gst_stream_selector_get_caps), (gst_stream_selector_chain):
- * gst/playback/gststreamselector.h:
- Be more selective when we're redoing caps negotiation from
- within the chain function on a stream change.
-
-2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/amrnb/Makefile.am:
- * ext/amrnb/amrnb.c: (plugin_init):
- * ext/amrnb/amrnbdec.c: (gst_amrnbdec_get_type),
- (gst_amrnbdec_base_init), (gst_amrnbdec_class_init),
- (gst_amrnbdec_init), (gst_amrnbdec_link), (gst_amrnbdec_chain),
- (gst_amrnbdec_state_change):
- * ext/amrnb/amrnbdec.h:
- * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
- (gst_amrnbparse_base_init), (gst_amrnbparse_class_init),
- (gst_amrnbparse_init), (gst_amrnbparse_formats),
- (gst_amrnbparse_querytypes), (gst_amrnbparse_query),
- (gst_amrnbparse_handle_event), (gst_amrnbparse_reserve),
- (gst_amrnbparse_loop), (gst_amrnbparse_state_change):
- * ext/amrnb/amrnbparse.h:
- Add support for AMR-NB (mobile phone audio format; #155163, #163286).
- * gst/typefind/gsttypefindfunctions.c: (plugin_init):
- Add AMR-NB/-WB raw formats.
- * ext/alsa/gstalsa.c: (gst_alsa_link):
- Keep valid time when changing format.
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (qtdemux_parse_trak):
- Add some more format-specific options (#140141, #143555, #155163).
-
-2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_blockgroup):
- Fix logic error in timing of subtitle stream synchronization.
- * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
- Add skip-chunk, which is found in kodak-camera streams.
-
-2005-01-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/vi.po:
- Adding Vietnamese translation (submitted by Clytie Siddall)
-
-2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstdecodebin.c: (try_to_link_1):
- Use realpad for signal.
-
-2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_base_init):
- Fix category so decodebin picks it up.
-
-2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/Makefile.am:
- * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_get_type),
- (gst_id3demux_bin_base_init), (gst_id3demux_bin_class_init),
- (gst_id3demux_bin_init), (gst_id3demux_bin_remove_pad),
- (found_type), (gst_id3demux_bin_change_state):
- * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
- (gst_id3_tag_init), (gst_id3_tag_handle_event),
- (gst_id3_tag_src_link), (gst_id3_tag_chain),
- (gst_id3_tag_change_state), (plugin_init):
- * ext/mad/gstmad.h:
- Add id3demuxbin (which is a simple bin consisting of id3demux
- and typefind), take over rank from id3demux, remove typefind
- code from id3demux. Makes all broken mp3s that I know of work,
- and thereby fixes #152688.
-
-2005-01-27 Edward Hervey <bilboed@bilboed.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_src_event):
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
- Allow seeks on audio pad, make mad forward those (#164826).
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
- Set duration (#165335).
-
-2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
- (gst_asf_demux_commit_taglist), (gst_asf_demux_process_comment),
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_change_state), (gst_asf_demux_add_audio_stream),
- (gst_asf_demux_add_video_stream), (gst_asf_demux_setup_pad):
- * gst/asfdemux/gstasfdemux.h:
- Improve metadata display, e.g. if the metadata comes before the
- streams are loaded (which is perfectly valid).
-
-2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * tools/gst-launch-ext-m.m:
- Fix AVI/ASF pipelines (#165340).
-
-2005-01-26 Amaury Jacquot <sxpert@esitcom.org>
- * ext/cairo/gsttextoverlay.c: include string.h and strings.h to fix
- build failure on amd64
-
-2005-01-26 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/mad/gstid3tag.c: (mad_id3_parse_latin1_string),
- (mad_id3_parse_comment_frame), (gst_mad_id3_to_tag_list):
- Check environment variables GST_ID3V2_TAG_ENCODING,
- GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
- list of character encodings to force interpretation of non-unicode
- strings stored in an ID3v2 tag to a particular encoding. If none
- is specified, try to use current locale's encoding, then fall back
- to ISO-8859-1 (which will always succeed). (Resolves #149274)
- * gst/tags/gstid3tag.c: (gst_tag_from_id3_tag),
- (gst_tag_extract_id3v1_string), (gst_tag_list_new_from_id3v1):
- Check environment variables GST_ID3V1_TAG_ENCODING,
- GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
- list of character encodings to use in case a string encountered
- in an ID3v1 tag is not valid UTF-8 already. If no encoding is
- specified, try to use the current locale's encoding, then fall
- back to ISO-8859-1 (which will always succeed).
-
-2005-01-25 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
- - on half framerate, compute the rate in advance so the comparisons
- don't compare wrong values
- - don't use mad_synth/frame_mute anymore, this mirrors mad_decoder
- behaviour
- - don't use mad_header_decode anymore, mad_frame_decode does that
- automatically
- - when getting rid of consumed bytes, reset the stream's skiplen
- (fixes #163867)
-
-2005-01-26 Jan Schmidt <thaytan@mad.scientist.com>
-
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init)
- Use 1/2 a second for default max_discont, as PES streams from DVB
- seem to have larger spacings in the SCR.
- Fix a typo.
-
-2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (group_commit):
- Notify delayed stream-info availability.
-
-2005-01-26 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
- (gst_a52dec_handle_event), (gst_a52dec_chain):
- Add some debug output. Check that a discont has a valid
- time associated.
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
- (gst_alsa_sink_loop):
- Ignore TAG events. A little extra debug for broken timestamps.
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init), (dvdnavsrc_loop),
- (dvdnavsrc_change_state):
- Ensure we send a discont to engage the link before we send any
- other events.
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_init),
- (dvdreadsrc_finalize), (_close), (_open), (_seek_title),
- (_seek_chapter), (seek_sector), (dvdreadsrc_get),
- (dvdreadsrc_uri_get_uri), (dvdreadsrc_uri_set_uri):
- Handle URI of the form dvd://title[,chapter[,angle]]. Currently only
- dvd://title works in totem because typefinding sends a seek that ends
- up going back to chapter 1 regardless.
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2dec/gstmpeg2dec.h:
- Output correct timestamps and handle disconts.
- * ext/ogg/gstoggdemux.c: (get_relative):
- Small guard against a null dereference.
- * ext/pango/gsttextoverlay.c: (gst_textoverlay_finalize),
- (gst_textoverlay_set_property):
- Free memory when done. Don't call gst_event_filler_get_duration on
- EOS events. Use GST_LOG and GST_WARNING instead of g_message and
- g_warning.
- * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_init),
- (draw_line), (gst_smoothwave_dispose), (gst_sw_sinklink),
- (gst_sw_srclink), (gst_smoothwave_chain):
- Draw solid lines, prettier colours.
- * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_init):
- Add a default palette that'll work for some movies.
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init),
- (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_send_discont),
- (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset):
- * gst/mpegstream/gstdvddemux.h:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
- (gst_mpeg_demux_parse_syshead), (gst_mpeg_demux_parse_pes):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
- (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead):
- * gst/mpegstream/gstmpegparse.h:
- Use PTM/NAV events when for timestamp adjustment when connected to
- dvdnavsrc. Don't use many discont events where one suffices.
- * gst/playback/gstplaybasebin.c: (group_destroy),
- (gen_preroll_element), (gst_play_base_bin_add_element):
- * gst/playback/gstplaybasebin.h:
- Make sure we remove subtitles from the same bin we put them in.
- * gst/subparse/gstsubparse.c: (convert_encoding), (parse_subrip),
- (gst_subparse_buffer_format_autodetect),
- (gst_subparse_change_state):
- Fix some memleaks and invalid accesses.
- * gst/typefind/gsttypefindfunctions.c: (ogganx_type_find),
- (oggskel_type_find), (cmml_type_find), (plugin_init):
- Some typefind functions for Annodex v3.0 files
- * gst/wavparse/gstwavparse.h:
- GstRiffReadClass is the correct parent class.
-
-2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- Add extradata to huffyuv (fixes #165013).
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_vids_with_data):
- Fix extradata extraction if it is in the chunk size.
-
-2005-01-25 Edward Hervey <bilboed@bilboed.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/effectv/gstquark.c: (gst_quarktv_class_init),
- (gst_quarktv_change_state), (gst_quarktv_dispose):
- Memory free'ing location fix (#164708).
-
-2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (group_commit),
- (gen_preroll_element), (probe_triggered), (gen_source_element),
- (setup_source), (gst_play_base_bin_change_state),
- (gst_play_base_bin_add_element):
- Don't block for streams.
- * gst/playback/gststreaminfo.c: (stream_info_change_state),
- (gst_stream_info_set_mute):
- Use gst_pad_set_active_recursive.
-
-2005-01-25 Andy Wingo <wingo@pobox.com>
-
- * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Fix compile
- for #ifndef HAVE_XVIDEO.
-
-2005-01-24 Jeffrey C. Ollie
-
- reviewed by: Maciej Katafiasz <mathrick@freedesktop.org>
-
- * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_chain):
- * ext/gsm/gstgsmdec.h:
- * ext/gsm/gstgsmenc.c: (gst_gsmenc_init), (gst_gsmenc_chain):
- * ext/gsm/gstgsmenc.h:
- Fix rate to 8kHz as per spec, removes obscure errors when no rate
- was given by property. Add proper buffer timestamps and offsets.
-
-2005-01-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data):
- Audio can be <8000Hz.
-
-2005-01-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
- Explicit state change to workaround refcount bugs.
-
-2005-01-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavimux.c: (gst_avimux_write_tag),
- (gst_avimux_riff_get_avi_header):
- Fix...
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_element_data),
- (gst_riff_read_element_data):
- * gst-libs/gst/riff/riff-read.h:
- Add _peek version (req'ed in CDXA).
- * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_init),
- (gst_cdxaparse_loop):
- Fix parsing in playbin.
- * gst/playback/gstdecodebin.c: (close_pad_link):
- Ignore current_ pads, they cause major annoyance.
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- Safety guard.
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavimux.c: (gst_avimux_write_tag):
- Fix padding...
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/ebml-read.c: (gst_ebml_read_buffer):
- Allow for 0-sized buffers. Fixes length query problems in
- starwars.mkv from the testsuite.
-
-2005-01-19 Tim-Philipp Müller <tim at centricular dot net>
-
- * gst/videobox/gstvideobox.c: (gst_video_box_copy_plane_i420),
- (gst_video_box_i420), (gst_video_box_chain):
- Fix row strides for I420 (fixes #163159)
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
- MPEG2 has a useful rate property, so we can actually use that.
- For MPEG-1, continue using the bytes/time properties.
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_template_caps):
- Add intel-h263.
-
-2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
- Fail if caps negotiation fails. Should fix #162184, and should
- definately be in there regardless of it fixing the actual bug.
- * gst/avi/gstavimux.c: (gst_avimux_get_type), (gst_avimux_init),
- (gst_avimux_write_tag), (gst_avimux_riff_get_avi_header),
- (gst_avimux_riff_get_avix_header),
- (gst_avimux_riff_get_video_header),
- (gst_avimux_riff_get_audio_header), (gst_avimux_write_index),
- (gst_avimux_start_file), (gst_avimux_handle_event),
- (gst_avimux_change_state):
- * gst/avi/gstavimux.h:
- Refactor structure writing to use GST_WRITE_UINT macros, add
- metadata writing support.
-
-2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gststreaminfo.c: (gst_stream_info_dispose):
- Elements may already be destroyed when this function is called.
-
-2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
- More memory leak fixes (#149162).
-
-2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_add_stream):
- Fix two memleaks.
-
-2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
- Argh...
-
-2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
- Fix off-by-one bug. Fixes warnings during playback of sincity.mp4
- when fixating to six channels in Totem.
-
-2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/dvdread/dvdreadsrc.c: (get_next_cell_for):
- Fix compile warnings on Solaris 10 buildbot
-
-2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/dvdread/dvdreadsrc.c: (_read):
- Don't read beyond the last cell in a chapter (fixes
- invalid memory access)
-
-2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
-
- * ext/dvdread/stream_labels.c:
- (dvdreadsrc_get_audio_stream_labels):
- Use NULL for an empty GList instead of g_list_alloc(); fix
- memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead
- of GString (easier to bulk free later)
-
-2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_pixfmt_to_caps):
- Fix BGRA32 caps (#164209).
-
-2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_caps_to_pixfmt):
- alpha_mask can be RGBA/ABGR. Fixes #164265.
-
-2005-01-17 Francis Labonte <francis_labonte@hotmail.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer),
- (gst_mpeg2dec_alloc_buffer):
- * ext/mpeg2dec/gstmpeg2dec.h:
- Crop if decoding size is not the actual image size (#163676).
-
-2005-01-17 Steve Baker <steve@stevebaker.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (aiff_type_find),
- (svx_type_find), (sds_type_find), (ircam_type_find), (plugin_init):
- Add libsndfile typefind functions (#163309).
-
-2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * tools/gst-launch-ext-m.m:
- Add .aac, fix .m1v/.m2v (#163891).
-
-2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsaclock.c: (gst_alsa_clock_wait):
- Sanity check, don't wait endlessly since the clock might not
- actually run at this point (which is a deadlock). Fixes #164069.
-
-2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (probe_triggered):
- Of course, only pause if group is done...
-
-2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (probe_triggered):
- Thread safety.
-
-2005-01-16 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/swfdec/gstswfdec.c: (gst_swfdec_change_state):
- Don't return state change success when the parent
- failed.
-
-2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavimux.c: (gst_avimux_handle_event):
- Free events (fix memleak in #162905).
-
-2005-01-15 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_caps_to_pixfmt):
- Fix for depth = 15. Fixes #161675.
-
-2005-01-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
- Set FPS correctly, even for webcams and the like.
- * sys/v4l/v4l_calls.c: (gst_v4l_set_chan_norm):
- Don error on setting while capturing.
-
-2005-01-14 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/gstdvdec.c:
- * gst/subparse/gstsubparse.c: (parse_mdvdsub):
- * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
- I'm a bad boy. using /1001. to force C to do float division
- and not integer division (as it did in my last commit)
- Thanks to David I. Lehn for pointing this mistake.
-
-2005-01-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
- Revert Johan´s 1.35->1.36 since it breaks compat.
-
-2005-01-14 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/gstdvdec.c:
- * ext/libfame/gstlibfame.c:
- * gst/subparse/gstsubparse.c: (parse_mdvdsub):
- * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
- replace framerate aproximations by their real value
- (24000/1001, 30000/1001, 60000/1001)
- Finish fixing bug #164049
-
-2005-01-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/ogg/gstoggmux.c:
- eos/bos debugging
- * gst/tcp/gstmultifdsink.c:
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcp.h:
- * gst/tcp/gsttcpclientsink.c:
- * gst/tcp/gsttcpclientsrc.c:
- * gst/tcp/gsttcpserversink.c:
- * gst/tcp/gsttcpserversrc.c:
- improve reusability of elements after state changes and errors
- make multifdsink throw away streamheaders when receiving new ones
-
-2005-01-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
- Fix for if items are already in list...
-
-2005-01-12 Benjamin Otte <otte@gnome.org>
-
- * gst/adder/gstadder.c: (gst_adder_loop):
- fix adder a bit so it doesn't screw up with events as much anymore
-
-2005-01-12 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link),
- (pixbufscale_scale), (gst_pixbufscale_chain):
- * ext/gdk_pixbuf/pixbufscale.h:
- Incorporate changes from Tim-Philipp Mueller <t.i.m@orange.net>
- to ensure rowstrides are calculated the same way as
- ffmpegcolorspace
- Use gst_buffer_stamp instead of copying TIMESTAMP manually, so
- that we pick up duration and offset also.
-
-2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavimux.c: (gst_avimux_class_init),
- (gst_avimux_pad_unlink), (gst_avimux_release_pad):
- Reusability fixes.
-
-2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
- (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
- (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
- (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
- Update flags when requested.
-
-2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
- Fix dmix.
-
-2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (gst_play_base_bin_init), (gst_play_base_bin_dispose),
- (probe_triggered), (new_decoded_pad), (gen_source_element),
- (gst_play_base_bin_set_property), (gst_play_base_bin_get_property):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
- (gst_play_bin_init), (group_switch), (remove_sinks), (setup_sinks),
- (gst_play_bin_change_state):
- Implement group-switch signal for use in apps to clear metadata
- cache, clean up subtitle, add suburi property instead of # hack,
- some error-out fixes.
-
-2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- Debug.
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame):
- If we got a state change in the _get handler, don't return success.
-
-2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_my_output_message),
- (gst_jpegdec_my_emit_message), (gst_jpegdec_init):
- Make jpegdec quiet on MJPEG decoding
- * gst/asfdemux/README:
- Fix mimetypes for MJPEG and H263
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/theora/theoradec.c: (theora_dec_chain):
- Fix broken code generation by gcc by swapping arguments.
- * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
- Fix \n in debug.
-
-2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * TODO:
- delete this file, it is by far outdated
- * ext/alsa/gstalsa.1: remove
- * ext/alsa/gstalsa.c: (add_rates), (add_channels), (gst_alsa_caps),
- (gst_alsa_check_sample_rates), (gst_alsa_rates_probe),
- (gst_alsa_get_caps):
- Add HW probing for supported sample rates. Fixes #161704
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
- Don't crash, biatch! :).
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/musepack/gstmusepackreader.cpp:
- * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
- Some work on tags - still doesn't work in playbin...
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
- Handle events...
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_tree):
- Also shove tags on kid pads.
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
- Don't bail on unknown events.
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
- Don't crash on events before negotiation.
- * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
- Send tags on pads, too.
- * gst/playback/gststreamselector.c:
- (gst_stream_selector_request_new_pad):
- Forward events on first pad if no input was selected yet.
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (setup_substreams):
- Don't disable streamtype if the stream doesn't exist, since
- then playing a video after audio will disable both and nothing
- will happen. Fixes the testsuite.
-
-2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_interface_init),
- (gst_v4l_xoverlay_set_xwindow_id):
- * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_interface_init),
- (gst_v4l2_xoverlay_set_xwindow_id):
- Add debug categories, fix overlay disabling.
-
-2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_get_caps):
- * ext/alsa/gstalsa.h:
- Add HW probing for period_count/size and buffer_size MIX/MAX
- Adjust default/user defined value if out of bounds
- Should fix bug #162024
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event):
- Fix warning (#161191).
-
-2005-01-09 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dvdread/stream_labels.c:
- (dvdreadsrc_get_audio_stream_labels):
- Fix warning (init the good variable in switch default)
-
-2005-01-09 Koop Mast <kwm@rainbow-runner.nl>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/tta/gstttaparse.c: (gst_tta_src_event):
- Fix gcc-2.95 compile (#163485).
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/flac/gstflacenc.c: (gst_flacenc_init),
- (gst_flacenc_seek_callback), (gst_flacenc_write_callback),
- (gst_flacenc_tell_callback), (gst_flacenc_chain),
- (gst_flacenc_change_state):
- * ext/flac/gstflacenc.h:
- Update for API change in flac-1.1.1. Update requirement in
- configure.ac. Fixes #162974.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (group_destroy):
- Remove hack to get rid of assert and get rid of unlinked
- signals properly.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (setup_source):
- Set source to NULL so that resources are free'ed. Fixes issues
- with playback of CDDA and similar device-accessing things.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * testsuite/embed/Makefile.am:
- test->noinst, fix make test in buildbot.
-
-2005-01-09 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dvdread/stream_labels.c: new file
- * ext/dvdread/stream_labels.h: new file
- * ext/dvdread/Makefile.am:
- * ext/dvdread/dvdreadsrc.c: (_seek_title):
- Extract audio stream label from DVD IFO files.
- It only dump them on the console for now, still have to
- make playbin aware of them.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (setup_source):
- Fix hanging subs.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
- (gen_preroll_element), (remove_groups), (setup_subtitle),
- (gen_source_element), (setup_source):
- * gst/playback/gstplaybasebin.h:
- Multiple .sub files is just a stupid idea... Fix some threading
- mistakes. Interestingly, external .sub files cause playbin to
- hang, I don't know why... Parsing fixes contributed by François
- Kooman <fkooman@tuxed.net>.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * testsuite/embed/Makefile.am:
- Fix buildbot.
-
-2005-01-09 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
- (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
- (gst_pngenc_set_property):
- * ext/libpng/gstpngenc.h:
- Add compression level property (#163323).
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * examples/capsfilter/capsfilter1.c: (main):
- * examples/seeking/spider_seek.c: (make_spider_pipeline):
- * ext/dvdread/Makefile.am:
- * ext/dvdread/demo-play:
- * ext/dvdread/demo-play.c:
- * gconf/gstreamer.schemas.in:
- * gst-libs/gst/gconf/gconf.c:
- * sys/v4l/TODO:
- * testsuite/Makefile.am:
- * testsuite/embed/Makefile.am:
- * testsuite/embed/embed.c: (cb_expose), (main):
- Remove all references to xvideosink, fix examples (#140845).
- * gst/playback/gstplaybasebin.c: (group_destroy):
- Apparently, disposal does not unlink - so do explicitely.
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- Add debug.
-
-2005-01-09 Maciej Katafiasz <mathrick@freedesktop.org>
-
- * README: fix PKG_CONFIG_PATH instructions, what was there
- previously was breaking default search path, not nice.
- Fixes #163358
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_init),
- (gst_audioscale_chain):
- %#^@^#@^@#^#@^#@^@#^@#^@#^@#^#@^#@^#@^@#^#@ fix seeking
- when resampling - how the ^@$^!@^! is this possible?!?
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state):
- Reset variables on READY.
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_request_new_pad),
- (gst_matroska_mux_loop):
- Require data before writing header.
-
-2005-01-09 Francis Labonte <francis_labonte@hotmail.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_chain):
- Don't call mad_stream_sync() directly after recovering sync.
- Fixes #151661.
-
-2005-01-09 Martin Eikermann <meiker@upb.de>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init),
- (snapshot_handler), (gst_snapshot_sinkconnect),
- (gst_snapshot_chain):
- Allocate resources when required, fix recursive signal emission
- and fix caps. Fixes #161667.
-
-2005-01-09 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps),
- (gst_pngdec_chain):
- Handle only 8-bppc (bits-per-pixel-component) images, better
- error handling and correct strides. Fixes #163177.
- * ext/libpng/gstpngenc.c: (gst_pngenc_sinklink),
- (gst_pngenc_chain):
- Better error handling. Fixes #163348.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_get_type),
- (dvdnavsrc_uri_get_type), (dvdnavsrc_uri_get_protocols),
- (dvdnavsrc_uri_get_uri), (dvdnavsrc_uri_set_uri),
- (dvdnavsrc_uri_handler_init):
- Add DVD-nav URI (dvdnav://) for Totem testing purposes.
- * gst/playback/gstplaybasebin.c: (gen_source_element):
- Add MMS to streaming URIs.
-
-2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
- * sys/xvimage/xvimagesink.c:
- (gst_xvimagesink_navigation_send_event):
- Check for pad availability before sending event.
-
-2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-plugins.spec.in:
- Add subparse.
-
-2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Since we use functions from CVS, up requirement.
-
-2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/Makefile.am:
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (group_destroy), (group_commit), (group_is_muted),
- (gen_preroll_element), (add_stream), (unknown_type),
- (probe_triggered), (preroll_unlinked), (mute_stream),
- (silence_stream), (new_decoded_pad), (setup_substreams),
- (setup_source), (get_active_source), (mute_group_type),
- (muted_group_change_state), (set_active_source),
- (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
- (play_base_eos), (gst_play_base_bin_change_state):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (add_sink), (setup_sinks):
- * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
- (gst_stream_info_dispose), (stream_info_mute_pad),
- (stream_info_change_state), (gst_stream_info_set_mute):
- * gst/playback/gststreamselector.c: (gst_stream_selector_get_type),
- (gst_stream_selector_base_init), (gst_stream_selector_class_init),
- (gst_stream_selector_init), (gst_stream_selector_dispose),
- (gst_stream_selector_get_linked_pad),
- (gst_stream_selector_get_caps), (gst_stream_selector_link),
- (gst_stream_selector_get_linked_pads),
- (gst_stream_selector_request_new_pad), (gst_stream_selector_chain):
- * gst/playback/gststreamselector.h:
- Adding stream selection support plus required properties for
- applications to use this. Fully fixes #100931.
-
-2005-01-08 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstpuzzle.c: (nav_event_handler):
- - handle nav events differently: forward every event no matter if it
- was handled or not.
- - translate events
- You can now cheat by using navigationtest ! puzzle and moving the
- mouse close to the edge of a tile. ;)
-
-2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
- * ext/ogg/gstogmparse.c: (gst_ogm_text_parse_get_type),
- (gst_ogm_text_parse_base_init), (gst_ogm_text_parse_init),
- (gst_ogm_parse_get_sink_querytypes), (gst_ogm_parse_sink_convert),
- (gst_ogm_parse_sink_query), (gst_ogm_parse_chain),
- (gst_ogm_parse_plugin_init):
- * ext/pango/gsttextoverlay.c: (gst_textoverlay_linkedpads),
- (gst_textoverlay_link), (gst_textoverlay_getcaps),
- (gst_textoverlay_event), (gst_textoverlay_video_chain),
- (gst_textoverlay_loop), (gst_textoverlay_init), (plugin_init):
- * ext/pango/gsttextoverlay.h:
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
- (gst_matroska_demux_handle_seek_event),
- (gst_matroska_demux_sync_streams),
- (gst_matroska_demux_parse_blockgroup),
- (gst_matroska_demux_subtitle_caps),
- (gst_matroska_demux_plugin_init):
- * gst/matroska/matroska-ids.h:
- * gst/playback/gstdecodebin.c: (close_pad_link):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
- (gen_preroll_element), (remove_groups), (add_stream),
- (new_decoded_pad), (setup_subtitles), (gen_source_element),
- (setup_source):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gen_text_element), (setup_sinks):
- * gst/subparse/Makefile.am:
- * gst/subparse/gstsubparse.c: (gst_subparse_get_type),
- (gst_subparse_base_init), (gst_subparse_class_init),
- (gst_subparse_init), (gst_subparse_formats),
- (gst_subparse_eventmask), (gst_subparse_event),
- (gst_subparse_handle_event), (convert_encoding), (get_next_line),
- (parse_mdvdsub), (parse_mdvdsub_init), (parse_subrip),
- (parse_subrip_deinit), (parse_subrip_init), (parse_mpsub),
- (parse_mpsub_deinit), (parse_mpsub_init),
- (gst_subparse_buffer_format_autodetect),
- (gst_subparse_format_autodetect), (gst_subparse_loop),
- (gst_subparse_change_state), (gst_subparse_type_find),
- (plugin_init):
- * gst/subparse/gstsubparse.h:
- * gst/typefind/gsttypefindfunctions.c: (ogmtext_type_find),
- (plugin_init):
- Add subtitle support, .sub parser (supports SRT and MPsub),
- OGM text support, Matroska UTF-8 text support, deadlock fixes
- all over the place, subtitle awareness in decodebin/playbin
- and some fixes to textoverlay to handle subtitles in a stream
- correctly. Fixes #100931.
-
-2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
- Check for pad availability before doing a query on it.
-
-2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/gstdvdec.c:
- really fix bpp24/32 dvdec caps (classic rgba indeed)
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc):
- don't send text tags if they are empty (bis repetita)
-
-2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/gstdvdec.c:
- remove unneeded comment from dvdec
- (related to DV 4CC codes in AVI files)
- moved them in gstreamer/docs/random/mimetypes
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc):
- don't send text tags if they are empty
- fix mem leak on error path
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/imgconvert.c: (img_get_alpha_info):
- * gst/ffmpegcolorspace/imgconvert_template.h:
- adds BGR32 and BGRA32 to ffmpegcolorspace
- (still bad colors, fixing it on next commit)
- helps with dvdec outputing BGR32
-
-2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/gstdvdec.c:
- Fix audio caps i just broke (missing ',')
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_get_type),
- (gst_matroska_mux_reset):
- Fix typo + add FIXME about old "x-gst-metadata" crap
-
-2005-01-07 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * ext/dv/demo-play.c: (main):
- xvideosink -> xvimagesink
- * ext/dv/gstdvdec.c:
- change rgb 32/32 caps to 24/32 (no alpha)
- change nb of channels to be a list (2 or 4, not 2)
- change sample rate to be a list (32, 44.1, 48 kHz) not a range
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc):
- Add 'date/year' to extracted metadata list
-
-2005-01-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
- The return value of fixate_to does not imply that the requested
- value was set, so don't assume.
-
-2005-01-07 Gergely Nagy <algernon@bonehunter.rulez.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/libpng/gstpngdec.c:
- * ext/libpng/gstpngenc.c: (gst_pngenc_base_init),
- (gst_pngenc_sinklink), (gst_pngenc_init), (gst_pngenc_chain):
- * ext/libpng/gstpngenc.h:
- Alpha support (encoder; #163161), mime fixage.
-
-2005-01-07 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faac/gstfaac.c: (gst_faac_outputformat_get_type),
- (gst_faac_class_init), (gst_faac_init), (gst_faac_srcconnect),
- (gst_faac_set_property), (gst_faac_get_property):
- * ext/faac/gstfaac.h:
- Allow for ADTS output (#153434).
-
-2005-01-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
- Fix against template (#150576).
-
-2005-01-06 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstpuzzle.c: (draw_puzzle):
- don't draw a puzzle if either width or height of tiles would be 0.
-
-2005-01-06 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstpuzzle.c: (gst_puzzle_get_type),
- (gst_puzzle_class_init), (gst_puzzle_finalize):
- no memleaks, please
- (gst_puzzle_create), (gst_puzzle_init),
- (gst_puzzle_set_property), (gst_puzzle_setup):
- change initialization code around so we don't reshuffle on resize
- (draw_puzzle):
- fix another stupid typo
-
-2005-01-06 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstvideoimage.c: (copy_hline_YUY2):
- fix stupid typo that borked copying on YUY2
-
-2005-01-06 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstpuzzle.c: (draw_puzzle):
- fix edges when image sizes aren't multiples of tile sizes
-
-2005-01-06 Benjamin Otte <otte@gnome.org>
-
- * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
- make RGB endianness work correctly
- (gst_puzzle_show), (gst_puzzle_swap), (gst_puzzle_move):
- refactor and fix race with initial shuffling
- (nav_event_handler):
- allow using the mouse to puzzle
- (draw_puzzle):
- insist on tiles having width and height as multiples of 4 to get
- clean YUV image handling
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
- (gst_xvimagesink_handle_xevents), (gst_xvimagesink_buffer_alloc):
- s/DEBUG/LOG/ for common messages
- (gst_xvimagesink_navigation_send_event):
- fix mouse event translation to not include screen PAR
- * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
- fix mouse event translation to actually work
-
-2005-01-06 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc):
- Extract TrackNumber metadata + clean up code
- * gst/games/gstvideoimage.c: (gst_video_image_draw_rectangle):
- Hope this is the good fix (var used unitialised)
-
-2005-01-06 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_chain):
- Only increment timestamp if it's valid. Fixes raw AAC streams.
-
-2005-01-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- * gst/games/Makefile.am:
- * gst/games/gstpuzzle.c:
- add a puzzle game with...
- * gst/games/gstvideoimage.c:
- * gst/games/gstvideoimage.h:
- ... full colorspace support (that includes YUV9 and RGB16)) stolen
- from videotestsrc and made into something that would be a nice
- library for a lot of other plugins.
-
-2005-01-06 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * configure.ac:
- don't compile faad plugin if a RC of 2.0 is found
- Fixes #155346 (and FC1 buildbot)
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc):
- try to make Solaris compiler happier
-
-2005-01-06 Paul Jack <pjack@sfaf.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init):
- Fix segfault (#161667).
-
-2005-01-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
- Fix framerate reporting.
-
-2005-01-05 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
-
- * gst-libs/gst/riff/riff-ids.h:
- * gst/wavenc/riff.h:
- Add AMR (VBR and CBR) ids to riff.h audio codec list
- * gst/asfdemux/gstasfdemux.c:
- (gst_asf_demux_process_ext_content_desc),
- (gst_asf_demux_process_object):
- Retrieve more tags from ASF files (Genre, AlbumTitle, Artist)
-
-2005-01-05 Martin Eikermann <meiker@upb.de>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
- (gst_dvd_demux_handle_discont):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
- (gst_mpeg_demux_handle_discont):
- Recreate pads on new-media (#160730).
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_new_pad):
- Send discont even if manager changes timestamps (#161929).
-
-2005-01-05 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16):
- Fix invalid memory access (#159211).
-
-2005-01-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * examples/gstplay/player.c: (main):
- Don't iterate.
- * examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
- Add visualizations.
- * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
- (gst_a52dec_handle_frame):
- Set duration.
- * ext/dvdnav/gst-dvd:
- Add audioconvert. Fixes #161325.
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
- Explicitely case to gint64. Possible valgrind error.
- * gst-libs/gst/play/play.c: (caps_set), (setup_size),
- (gst_play_tick_callback), (gst_play_change_state),
- (gst_play_dispose), (gst_play_init), (gst_play_class_init),
- (gst_play_set_location), (gst_play_get_location),
- (gst_play_seek_to_time), (gst_play_set_data_src),
- (gst_play_set_video_sink), (gst_play_set_audio_sink),
- (gst_play_set_visualization), (gst_play_connect_visualization),
- (gst_play_get_framerate), (gst_play_get_all_by_interface),
- (gst_play_new):
- Use playbin. Fixes #139749 and #147744.
- * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
- Add genre tag.
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
- (audioscale_get_type), (gst_audioscale_base_init),
- (gst_audioscale_class_init), (gst_audioscale_expand_caps),
- (gst_audioscale_getcaps), (gst_audioscale_fixate),
- (gst_audioscale_link), (gst_audioscale_get_buffer),
- (gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
- (gst_audioscale_init), (gst_audioscale_dispose),
- (gst_audioscale_chain), (gst_audioscale_set_property),
- (gst_audioscale_get_property), (plugin_init):
- Indent properly.
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
- Fix LPCM.
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
- (qtdemux_tag_add_str), (qtdemux_tag_add_num),
- (qtdemux_tag_add_gnre), (qtdemux_video_caps):
- Add more metadata (fixes #162656).
-
-2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- back to cvs
-
-=== release 0.8.7 ===
-
-2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- releasing 0.8.7, "Hyperspace"
-
-2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- * gst/playback/gstplaybasebin.c:
- Fix for #162924 - free caps after use, not before
-
-2005-01-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c:
- * gst/wavparse/gstwavparse.c:
- Fix for #154773 - fixes playback of small .wav files
-
-2005-01-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioscale/gstaudioscale.c:
- Fix for #162819 - make audioscale reusable
- Fixes playback of more than one file with playbin/totem
-
-2004-12-29 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- * gst/ffmpegcolorspace/imgconvert.c:
- clean up the mess that made me cry and avoid needless duplication
-
-2004-12-29 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/imgconvert.c:
- give some indication of why we're segfaulting
-
-2004-12-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Fix indentation, fix v4l2 plugin detection.
- * ext/Makefile.am:
- Fix libmms location (Maciej, use diff -u!).
- * ext/alsa/gstalsa.c: (gst_alsa_init):
- Initialize caps cache to NULL.
- * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
- Only change state on audiosink if it exists.
-
-2004-12-28 Maciej Katafiasz <mathrick@mathrick.org>
-
- * gst/matroska/matroska-demux.c:
- * gst/matroska/matroska-ids.h:
- * gst/matroska/matroska-demux.h:
- Fix Vorbis streams failing to decode in some files, where cluster_time
- isn't 0, because then it doesn't send codec_priv before actual data.
- Remove time-based test and replace it with marker set on beginning of
- new stream
-
-2004-12-28 David Schleef <ds@schleef.org>
-
- Merge patch from Ronald fixing problems with streaming
- text.
- * ext/cairo/gstcairo.c: (plugin_init):
- * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
- (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
- (gst_textoverlay_video_chain), (gst_textoverlay_loop),
- (gst_textoverlay_font_init), (gst_textoverlay_init),
- (gst_textoverlay_set_property):
- * ext/cairo/gsttextoverlay.h:
-
-2004-12-27 David Schleef <ds@schleef.org>
-
- * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
- (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
- (gst_textoverlay_video_chain), (gst_textoverlay_loop),
- (gst_textoverlay_font_init), (gst_textoverlay_init),
- (gst_textoverlay_set_property): Improvements to actually
- render text as white on black outline on video, including
- font selection and horizontal/vertical alignment. (Ronald's
- christmas present)
- * ext/cairo/gsttextoverlay.h:
-
-2004-12-26 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/ogg/gstogg.c:
- * ext/ogg/gstogmparse.c:
- fix ogm[audio/video]parse plugin registration
- (riff won't load if bytestream is already loaded)
-
-2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/audioconvert/gstchannelmix.c:
- fix for GLIB < 2.4
-
-2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * configure.ac:
- disable docs again until it actually passes make distcheck.
-
-2004-12-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_type_get), (qtdemux_audio_caps):
- * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
- (plugin_init):
- Add 3GP (variables name Q3GP because they can't start with a
- number). Add samr audio fourcc (used in .3gp files), decoder
- is work in progress. Also do a GST_WARNING instead of ERROR
- in case of unknown nodes, to decrease output.
-
-2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- really fix dist
-
-2004-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/speex/gstspeexdec.h:
- * ext/speex/gstspeexenc.h:
- Fixes #158382. Make speex plugin compatible with both 1.0 and 1.1.
- Fix detection code in configure.ac
-
-2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_blockgroup):
- Save position, so that queries give proper return values. Don't
- know how this could ever have worked before...
-
-2004-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- Put additional LAME check inside the conditional. Fixes #152339
-
-2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
- (gst_avi_demux_stream_scan):
- Add some more debug. Fix logic error when setting movi offset
- while reading index.
-
-2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
- (gst_avi_demux_stream_scan), (gst_avi_demux_handle_seek),
- (gst_avi_demux_process_next_entry):
- Add some debugging. Better detection of broken indexes and the
- accompanying index recovery. No infinite loops on state changes
- when we're still in our loopfunction.
-
-2004-12-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Fix up.
-
-2004-12-22 Archana Shah <archana.shah@wipro.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_volume):
- Normalizing the value before setting
- (gst_sunaudiomixer_get_volume):
- Normalizing the value after getting. Fixes bug# 161980
-
-2004-12-22 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
-
- * Makefile.am: Make sure docs gets disted
- * docs/Makefile.am: Make sure all needed files get disted
- * gst-plugins.spec.in: latest updates
-
-2004-12-22 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
- Revert patch 1.38 as clock distribution over schedulers does
- not work correcly in the core yet.
-
-2004-12-21 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * sys/oss/README: remove this file, which predates my birth
- (and which content is by far outdated)
-
-2004-12-20 Stefan Kost <ensonic@users.sf.net>
-
- * Makefile.am:
- * configure.ac:
- * docs/Makefile.am:
- * docs/libs/Makefile.am:
- * docs/libs/gst-plugins-libs-docs.sgml:
- * docs/libs/gst-plugins-libs-sections.txt:
- * docs/libs/tmpl/gstgconf.sgml:
- * docs/upload.mak:
- * docs/version.entities.in:
- Added boilerplate gtk-doc files for plugin-libs documentation.
-
-2004-12-19 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/auparse/gstauparse.c: fix int and float audio caps
-
-2004-12-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
- * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
- g_assert() can be a macro, don't use #ifdef inside it.
-
-2004-12-19 Edward Hervey <bilboed@bilboed.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_blank_data),
- (gst_videorate_init), (gst_videorate_chain),
- (gst_videorate_change_state):
- Event handling (fixes #159986).
-
-2004-12-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- Add BLZ0 (Blizzard's version of DivX) fourcc.
-
-2004-12-18 David Schleef <ds@schleef.org>
-
- * gst/tta/gstttadec.c: (gst_tta_dec_link): And yet another
- portability fix.
-
-2004-12-18 David Schleef <ds@schleef.org>
-
- * gst/tta/ttadec.h: Disable some header code that isn't used
- and clearly isn't portable.
-
-2004-12-18 David Schleef <ds@schleef.org>
-
- * gst/ffmpegcolorspace/imgconvert.c: (get_pix_fmt_info),
- (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
- (avcodec_get_pix_fmt), (avpicture_layout),
- (avcodec_get_pix_fmt_loss), (avg_bits_per_pixel), (img_copy),
- (get_convert_table_entry), (img_convert), (img_get_alpha_info):
- Fix code to not use GCC extensions (and c99 extensions that
- Forte does not like.)
-
-2004-12-19 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
- (gst_deinterlace_chain):
- Rowstride fixes. Fixes #161039.
- * gst/videocrop/gstvideocrop.c: (gst_video_crop_init),
- (gst_video_crop_get_property), (gst_video_crop_add_to_struct_val),
- (gst_video_crop_getcaps), (gst_video_crop_link),
- (gst_video_crop_i420), (gst_video_crop_chain),
- (gst_video_crop_change_state):
- Rework of negotiation. Actually works now. Fixes #158650.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_sint):
- That was very stupid.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_blockgroup):
- Fix possible crasher.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_uint),
- (gst_matroska_ebmlnum_sint), (gst_matroska_demux_parse_blockgroup):
- Lace sizes can be zero.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/musepack/gstmusepackdec.cpp:
- Fetch error return values. Fixes #161624.
- * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
- Really EOS.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index):
- Work for truncated (unfinished download etc.) files. Fixes #160514.
-
-2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- Fix for integer overflow. Makes #156001 not crash. Probably masks
- the real bug.
-
-2004-12-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ac3parse/gstac3parse.c: (plugin_init):
- Parsers never have ranks. Fixes #159651.
-
-2004-12-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/playback/gstdecodebin.c: (compare_ranks):
- make sure the facotries are ordered the same every time even if they
- have the same rank by using the name
- * gst/playback/gstdecodebin.c: (find_compatibles):
- make sure we don't add factories to the list twice
-
-2004-12-16 David Schleef <ds@schleef.org>
-
- * configure.ac: look for musepack headers as musepack/*.h
- (fixes #159847)
- * ext/musepack/gstmusepackdec.h: use <musepack/*.h>
- * ext/musepack/gstmusepackreader.h: same
-
-2004-12-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_auds_with_data):
- Read extradata correctly (fixes #155879).
-
-2004-12-16 David Schleef <ds@schleef.org>
-
- * gst/audioscale/gstaudioscale.c: allow passthru of >2 channel
- audio. does _not_ attempt or allow conversion unless channels
- is 1 or 2.
-
-2004-12-16 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
-
- * tools/gst-launch-ext-m.m: fix mpeg and vob pipelines
-
-2004-12-16 David Schleef <ds@schleef.org>
-
- * gst/audioscale/gstaudioscale.c: the resample library only
- handles 1 or 2 channels. Change caps to compensate.
-
-2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (aac_rate_idx), (aac_profile_idx),
- (gst_matroska_demux_audio_caps):
- Some MPEG-AAC hacks, because else it doesn't work...
-
-2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_template_caps):
- Add h264.
-
-2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/audio/Makefile.am:
- Try to fix buildbot.
-
-2004-12-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gstmultifdsink.c:
- Clean up and uniformize debugging.
-
-2004-12-16 Edward Hervey <bilboed@bilboed.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
- (gst_dvd_demux_reset), (gst_dvd_demux_change_state):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset),
- (gst_mpeg_demux_change_state):
- Reset on ready. Fixes 160276.
-
-2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_pad_link):
- Fix memleak (#154815).
-
-2004-12-16 James Bowes <bowes@cs.dal.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init),
- (gst_musicbrainz_init), (gst_musicbrainz_chain),
- (gst_musicbrainz_set_property), (gst_musicbrainz_get_property):
- * ext/musicbrainz/gsttrm.h:
- Add support for using a proxy server when getting a trm id from
- the MusicBrainz database (#149613).
-
-2004-12-16 Christophe Fergeau <teuf@gnome.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstdecodebin.c: (new_pad), (close_link):
- * gst/playback/gstplaybasebin.c: (new_decoded_pad):
- Fix memleaks (#157233).
-
-2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/resample/resample.c: (gst_resample_close):
- * gst-libs/gst/resample/resample.h:
- * gst/audioscale/gstaudioscale.c:
- Fix memleak (#159215).
-
-2004-12-16 Toni Willberg <toniw@iki.fi>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
- * sys/oss/oss_probe.c: (main):
- Check for mono/stereo support (similar to samplerate probing),
- fixes #159433. Also add missing copyright header to oss_probe.c.
-
-2004-12-15 David Schleef <ds@schleef.org>
-
- * configure.ac: add audioresample and cairo plugins. Remove
- HAVE_MMX stuff, because it's not used.
- * ext/Makefile.am: same
- * ext/audioresample/Makefile.am: You are not ready for an
- audio resampling element based on audioresample.
- * ext/audioresample/gstaudioresample.c:
- * ext/audioresample/gstaudioresample.h:
- * ext/cairo/Makefile.am: You are not ready for overlay elements
- based on cairo. Don't look too closely, these elements kinda
- suck right now.
- * ext/cairo/gstcairo.c: new
- * ext/cairo/gsttextoverlay.c: new
- * ext/cairo/gsttextoverlay.h: new
- * ext/cairo/gsttimeoverlay.c: new
- * ext/cairo/gsttimeoverlay.h: new
- * gst-libs/gst/media-info/media-info-priv.h: fix compile
- problem with compilers that don't support variadic macros.
-
-2004-12-15 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
-
- Reviewed by: David Schleef <ds@schleef.org>
-
- * sys/sunaudio/gstsunaudio.c: (plugin_init): Apply patch from
- Bala, registering sunaudiosrc (oops!), and cleaning up code a
- bit. Also ran indent-gst.
- * sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_init),
- (gst_sunaudiosrc_change_state), (gst_sunaudiosrc_get),
- (gst_sunaudiosrc_setparams):
-
-2004-12-14 David Schleef <ds@schleef.org>
-
- * gst/festival/gstfestival.c: (gst_festival_chain): Set the
- output rate to 16000. Should fix #160235.
-
-2004-12-14 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
- Add typefinding for mpeg2 pes streams
-
-2004-12-13 David Schleef <ds@schleef.org>
-
- * configure.ac: Applied patch from bug #143659, making default
- sources and sinks OS-dependent (for Solaris), and added code
- for OS/X.
- * gconf/gstreamer.schemas.in: use OS-dependent sinks in gconf.
-
-2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst-libs/gst/riff/riff-media.c:
- forgot to add h2.64 to avidemux template caps
-
-2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/wavenc/riff.h:
- * gst-libs/gst/riff/riff-media.c:
- * gst-libs/gst/riff/riff-ids.h:
- * gst/avi/gstavimux.c
- add 4CC code for VideoSoft h264 in AVI (VSSH)
- fixes bug #160655
- remove s323 from riff, it's quicktime specific :(
-
-2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/asfdemux/README
- * gst/wavenc/riff.h
- * gst-libs/gst/riff/riff-ids.h
- * gst-libs/gst/riff/riff-media.c
- * gst/qtdemux/qtdemux.c:
- add new 4CC codes for h263 related codecs
- fixes partially bug #155163
-
-2004-12-12 Christian Fredrik Kalager Schaller <christian at fluendo dot com>
-
- * configure.ac: Update polyaudio requirement to 0.7
- * ext/polyp/polypsink.c: (create_stream): add patch from iain (158258)
-
-2004-12-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/interleave/deinterleave.c:
- fix my name's spelling! :)
-
-2004-12-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * AUTHORS ChangeLog
- * gst/auparse/gstauparse.c
- * gst/interleave/deinterleave.c
- * gst/law/:
- alaw-decode.c alaw-encode.c
- mulaw-decode.c mulaw-encode.c
- * gst/oneton/gstoneton.c
- * sys/osxaudio/:
- gstosxaudioelement.c gstosxaudiosink.c gstosxaudiosrc.c
- * sys/osxvideo/:
- cocoawindow.h cocoawindow.m
- osxvideosink.h osxvideosink.m
-
- put the same mail address for Zaheer Abbas Merali everywhere
-
-2004-12-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
- Align by packetsize, and assert that we a packet available before
- playing. The first makes webstreams work (they often include
- trailing padding data in a packet), the second allows pausing a
- ASF stream in totem without getting demux errors afterwards.
-
-2004-12-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (get_relative):
- Check for non-NULL before accessing member (end-of-chain).
-
-2004-12-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
- (cdparanoia_set_property), (cdparanoia_get_property):
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
- (dvdnavsrc_set_property), (dvdnavsrc_get_property):
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
- (dvdreadsrc_init), (dvdreadsrc_set_property),
- (dvdreadsrc_get_property):
- * sys/vcd/vcdsrc.c: (gst_vcdsrc_class_init),
- (gst_vcdsrc_set_property), (gst_vcdsrc_get_property):
- Synchronize property names where not yet the case. Devices are
- now device=X, other versions are deprecated (but still exist).
- Also use g_free() unconditionally.
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (setup_source), (gst_play_base_bin_get_property):
- Expose source.
-
-2004-12-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: move GCONF macro outside conditional for the am
- conditional. Fixes #160439
-
-2004-12-08 David Schleef <ds@schleef.org>
-
- * tools/gst-visualise-m.m: Switch to elements that currently
- exist.
-
-2004-12-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
- We love wrong commas.
-
-2004-12-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_handle_src_query):
- Don't set DEFAULT, unsupported - makes length display incorrectly
- in some cases.
-
-2004-12-07 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
-
- * gst/monoscope/README: remove blurb about files being GPL
- * gst/monoscope/gstmonoscope.c: Change license field to LGPL
- * gst/monoscope/monoscope.c: Change license to BSD with explanation
- monoscope is now effectively LGPL licensed
-
-2004-12-07 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
-
- * gst/monoscope/README: Update information to be more correct
- * gst/monoscope/convolve.c: Relicense to LGPL
- * gst/monoscope/convolve.h: Relicense to LGPL
-
-2004-12-06 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- set BUFFER_DURATION to correct values (mpeg1 audio frame length is fixed)
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link):
- set default_duration for mpeg1 audio
-
-2004-12-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_close_audio):
- * ext/alsa/gstalsa.h:
- refactor big chunks of the core caps negotiation code to make it
- a lot faster, because people claim it's really slow
- (actually, just cache the getcaps when the device is opened)
-
-2004-12-06 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
- (gst_a52dec_handle_event), (gst_a52dec_update_streaminfo),
- (gst_a52dec_handle_frame), (gst_a52dec_chain),
- (gst_a52dec_change_state), (plugin_init):
- * ext/a52dec/gsta52dec.h:
- Do something useful with timestamps. Make chain-based (since
- there's really no reason to be loopbased).
- * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
- Update current_byte/frame correctly.
-
-2004-12-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags),
- (gst_ape_demux_stream_init):
- Forward tags, too.
-
-2004-12-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/apetag/apedemux.c: (gst_ape_demux_stream_init):
- Let's make sure we're done typefinding when detecting tags.
-
-2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/ebml-read.c: (gst_ebml_read_class_init),
- (gst_ebml_read_init), (gst_ebml_read_use_event),
- (gst_ebml_read_element_id), (gst_ebml_peek_id),
- (gst_ebml_read_seek), (gst_ebml_read_skip),
- (gst_ebml_read_reserve), (gst_ebml_read_buffer),
- (gst_ebml_read_master):
- * gst/matroska/ebml-read.h:
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_contents),
- (gst_matroska_demux_loop_stream), (gst_matroska_demux_audio_caps):
- Disgustingly evil hack for working around INTERRUPT events and
- their extremely annoying habit of being a pain in the ass. We
- simply peek a cluster before reading any of it.
-
-2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/musepack/gstmusepackdec.cpp:
- There's also floating point libmusepacks.
-
-2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_chanpos_from_gst),
- (gst_faad_chanpos_to_gst), (gst_faad_chain):
- Set DURATION even if source buffer didn't. Also use increasing
- timestamps.
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data):
- Block_align can have larger values than 8192.
-
-2004-12-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link):
- * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link):
- * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link):
- * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link):
- Fix caps.
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
- Fix logic bug.
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_type_find):
- Yay, another one.
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/esd/esdsink.c: (gst_esdsink_chain):
- Make error actually say something useful (fixes #156798).
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_template_caps):
- Add Intel Video 5.0 fourcc (IV50).
-
-2004-12-01 Christophe Fergeau <teuf@gnome.org>
-
- * ext/mad/gstmad.c: (mpg123_parse_xing_header): fix xing header
- detection on mono and stereo mp3 files.
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
- Don't crash on EMPTY caps (e.g. when the demuxer didn't recognize
- the contained stream).
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_srcconnect), (gst_faad_chain):
- Oops, remove debug.
-
-2004-12-01 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/law/alaw-decode.c: (alawdec_getcaps):
- * gst/law/mulaw-decode.c: (mulawdec_getcaps):
- Prevent warnings when negotiating caps (fixes #159338).
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_chain):
- Remove old leftover that shouldn't be there...
-
-2004-12-01 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
- Don't forward DISCONT events (fixes #159684).
-
-2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (remove_sinks), (setup_sinks):
- Unlink manually since sometimes bin disposal (and therefore
- pad unlinking) is delayed, which will cause a new media file
- to not be able to start playing instantly.
-
-2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gststreaminfo.c: (stream_info_mute_pad):
- On mute of an unlinked stream, check for pad availability so
- we don't crash on unlinked pad.
-
-2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
- (gst_avi_demux_massage_index):
- Fix quite humiliating bug in omitting 0-sized index chunks but
- forgetting to count them for timestamps.
-
-2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
- Actually leave the loop if we failed to sync. Don't crash.
-
-2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_process_private):
- * gst/mpegstream/gstdvddemux.h:
- Fix crash (#159759). Doesn't work, though. :-(.
-
-2004-11-28 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
- more overwriting protection due to modifying channels one by one
- instead of all at once
-
-2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioconvert/gstchannelmix.c:
- (gst_audio_convert_fill_normalize):
- Normalize using absolute values.
-
-2004-11-28 Julien MOUTTE <julien@moutte.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/directfb/Makefile.am:
- * ext/directfb/directfbvideosink.c: (gst_directfbvideosink_create),
- (gst_directfbvideosink_get_pixel_format),
- (gst_directfbvideosink_get_format_from_fourcc),
- (gst_directfbvideosink_fixate), (gst_directfbvideosink_getcaps),
- (gst_directfbvideosink_sink_link),
- (gst_directfbvideosink_change_state),
- (gst_directfbvideosink_chain), (gst_directfbvideosink_buffer_free),
- (gst_directfbvideosink_buffer_alloc),
- (gst_directfbvideosink_interface_supported),
- (gst_directfbvideosink_interface_init),
- (gst_directfbvideosink_navigation_send_event),
- (gst_directfbvideosink_navigation_init),
- (gst_directfbvideosink_set_property),
- (gst_directfbvideosink_get_property),
- (gst_directfbvideosink_finalize), (gst_directfbvideosink_init),
- (gst_directfbvideosink_base_init),
- (gst_directfbvideosink_class_init),
- (gst_directfbvideosink_get_type), (plugin_init):
- * ext/directfb/directfbvideosink.h: Adding a first version of
- directfbvideosink.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): Initializing some
- more.
-
-2004-11-28 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
- walk the samples backwards if out_channels > in_channels so we don't
- overwrite data
-
-2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioconvert/Makefile.am:
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
- (gst_audio_convert_link), (gst_audio_convert_change_state),
- (gst_audio_convert_channels):
- * gst/audioconvert/gstchannelmix.c:
- (gst_audio_convert_unset_matrix),
- (gst_audio_convert_fill_identical),
- (gst_audio_convert_fill_compatible),
- (gst_audio_convert_detect_pos), (gst_audio_convert_fill_one_other),
- (gst_audio_convert_fill_others),
- (gst_audio_convert_fill_normalize),
- (gst_audio_convert_fill_matrix), (gst_audio_convert_setup_matrix),
- (gst_audio_convert_passthrough), (gst_audio_convert_mix):
- * gst/audioconvert/gstchannelmix.h:
- Implement a channel mixer.
-
-2004-11-28 Martin Soto <martinsoto@users.sourceforge.net>
-
- * ext/alsa/gstalsasink.c (gst_alsa_sink_loop):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsa.c (gst_alsa_set_clock):
- Make alsasink actually honor gst_element_set_clock and use that
- clock instead of its internal one.
-
-2004-11-27 Christophe Fergeau <teuf@gnome.org>
-
- * gst/playback/gstplaybasebin.c: (setup_source): fixed a caps leak
- (gst_play_base_bin_change_state): nullify source and decoder when
- going from READY to NULL so that we don't try to do weird stuff with
- them when going from NULL to READY
- * gst/playback/gstplaybin.c: (gst_play_bin_init): use gst_object_unref
- instead of g_object_unref
- (gen_video_element), (gen_audio_element): more refcounting fixes, now
- it should be correct
- (gst_play_bin_change_state): don't call remove_sinks if we are
- currently disposing the object
-
-2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
- Don't forget bass if it's there. Else left channel is silent...
-
-2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_loop),
- (gst_a52dec_change_state):
- Don't do sample adjusting anymore, we use float audio now.
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
- Don't fixate to non-existing properties.
-
-2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_channels),
- (gst_a52dec_change_state):
- Advertise that we can do surround sound.
-
-2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_reneg):
- Add buffer-frames=0.
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get_type),
- (dvdreadsrc_init), (dvdreadsrc_get_event_mask),
- (dvdreadsrc_get_query_types), (dvdreadsrc_get_formats),
- (dvdreadsrc_srcpad_event), (dvdreadsrc_srcpad_query),
- (_seek_title), (_seek_chapter), (get_next_cell_for), (_read),
- (seek_sector), (dvdreadsrc_get), (dvdreadsrc_open_file),
- (dvdreadsrc_change_state), (dvdreadsrc_uri_get_type),
- (dvdreadsrc_uri_get_protocols), (dvdreadsrc_uri_get_uri),
- (dvdreadsrc_uri_set_uri), (dvdreadsrc_uri_handler_init):
- * ext/dvdread/dvdreadsrc.h:
- Add seeking, querying for bytes, sectors, title, angle and
- chapter. Handle multiple chapters. Relicense to LGPL because
- Billy agreed on that (thanks Billy!).
-
-2004-11-27 Christophe Fergeau <teuf@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_dispose):
- call parent dispose method
-
-2004-11-27 Martin Soto <martinsoto@users.sourceforge.net>
-
- * gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
- (gst_audio_clock_get_internal_time):
- Fix active <-> inactive transitions: ensure time value always
- grows and avoid abrupt value changes.
-
-2004-11-27 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * configure.ac:
- * gst/tta/Makefile.am:
- * gst/tta/crc32.h:
- * gst/tta/filters.h:
- * gst/tta/gsttta.c:
- * gst/tta/gstttadec.c:
- * gst/tta/gstttadec.h:
- * gst/tta/gstttaparse.c:
- * gst/tta/gstttaparse.h:
- * gst/tta/ttadec.h:
- added TTA parser and decoder
-
-2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (probe_triggered), (check_queue), (buffer_underrun),
- (buffer_running), (buffer_overrun), (gen_source_element),
- (setup_source):
- * gst/playback/gstplaybasebin.h:
- Implement buffering. Needs some more work.
-
-2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/theora/theoradec.c: (theora_dec_chain):
- Fix ilog mask range overflow.
-
-2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
- Don't omit the last (which in case of dmix is the only :) )
- channel count. Don't set channels if <= 2.
-
-2004-11-26 Christophe Fergeau <teuf@gnome.org>
-
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element): Removed 2 obsolete comments
-
-2004-11-26 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/vorbis/oggvorbisenc.c
- * ext/vorbis/vorbisenc.c :
- change description fields of those plugins to differentiate them
- (pitivi show Encoders by description, they had the same one)
-
-2004-11-25 Christophe Fergeau <teuf@gnome.org>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (gst_play_bin_dispose),
- (gst_play_bin_set_property), (gen_video_element),
- (gen_audio_element):
- Refcounting fixes for provided audio-/videosinks.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element), (setup_sinks), (gst_play_bin_change_state):
- Don't reference all sinks, but only the video- and audiosinks.
- The vis. element should be disposed when we're done with it.
- We don't have any reason to keep it around. This fixes warnings
- when reusing playbin for playing multiple audio files with
- vis. enabled. Also release audio device on pause - idea stolen
- from Rhythmbox.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
- (gst_a52dec_reneg), (gst_a52dec_loop), (plugin_init):
- * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
- * ext/alsa/gstalsaplugin.c: (plugin_init):
- * ext/dts/gstdtsdec.c: (gst_dtsdec_channels),
- (gst_dtsdec_renegotiate), (gst_dtsdec_loop), (plugin_init):
- * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chanpos_from_gst),
- (gst_faad_chanpos_to_gst), (gst_faad_sinkconnect),
- (gst_faad_srcgetcaps), (gst_faad_srcconnect), (gst_faad_chain),
- (gst_faad_change_state), (plugin_init):
- * ext/faad/gstfaad.h:
- * ext/vorbis/vorbis.c: (plugin_init):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- * gst-libs/gst/audio/Makefile.am:
- * gst-libs/gst/audio/audio.c: (plugin_init):
- * gst-libs/gst/audio/multichannel.c:
- (gst_audio_check_channel_positions),
- (gst_audio_get_channel_positions),
- (gst_audio_set_channel_positions),
- (gst_audio_set_structure_channel_positions_list),
- (add_list_to_struct), (gst_audio_set_caps_channel_positions_list),
- (gst_audio_fixate_channel_positions):
- * gst-libs/gst/audio/multichannel.h:
- * gst-libs/gst/audio/testchannels.c: (main):
- * gst/audioconvert/gstaudioconvert.c:
- (gst_audio_convert_class_init), (gst_audio_convert_init),
- (gst_audio_convert_dispose), (gst_audio_convert_getcaps),
- (gst_audio_convert_parse_caps), (gst_audio_convert_link),
- (gst_audio_convert_fixate), (gst_audio_convert_channels):
- * gst/audioconvert/plugin.c: (plugin_init):
- Surround sound support.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
- Fix position for discont if we're close as well. Nitpicking, but
- saves a few milliseconds of extra waiting or skipping.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter):
- We sometimes need parsers for playback, so add those too.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * gst/apetag/Makefile.am:
- * gst/apetag/apedemux.c: (gst_ape_demux_get_type),
- (gst_ape_demux_base_init), (gst_ape_demux_class_init),
- (gst_ape_demux_init), (gst_ape_demux_get_src_formats),
- (gst_ape_demux_get_src_query_types),
- (gst_ape_demux_handle_src_query), (gst_ape_demux_get_event_mask),
- (gst_ape_demux_handle_src_event), (gst_ape_demux_handle_event),
- (gst_ape_demux_typefind_peek), (gst_ape_demux_typefind_get_length),
- (gst_ape_demux_typefind_suggest), (gst_ape_demux_typefind),
- (gst_ape_demux_parse_tags), (gst_ape_demux_stream_init),
- (gst_ape_demux_stream_data), (gst_ape_demux_loop),
- (gst_ape_demux_change_state):
- * gst/apetag/apedemux.h:
- * gst/apetag/apetag.c: (plugin_init):
- * gst/typefind/gsttypefindfunctions.c: (apetag_type_find),
- (plugin_init):
- APE v1/2 tag reader plus typefind function.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
- Remove hacks for older core. Require newer core version
- accordingly.
-
-2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/cdxaparse/Makefile.am:
- * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_get_type),
- (gst_cdxaparse_class_init), (gst_cdxaparse_init),
- (gst_cdxaparse_loop), (gst_cdxaparse_change_state), (plugin_init):
- * gst/cdxaparse/gstcdxaparse.h:
- * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_get_type),
- (gst_cdxastrip_base_init), (gst_cdxastrip_class_init),
- (gst_cdxastrip_init), (gst_cdxastrip_get_src_formats),
- (gst_cdxastrip_get_src_query_types),
- (gst_cdxastrip_handle_src_query), (gst_cdxastrip_get_event_mask),
- (gst_cdxastrip_handle_src_event), (gst_cdxastrip_strip),
- (gst_cdxastrip_sync), (gst_cdxastrip_handle_event),
- (gst_cdxastrip_chain), (gst_cdxastrip_change_state):
- * gst/cdxaparse/gstcdxastrip.h:
- SVCD/VCD header stripping separated from CDXA image parsing.
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
- (plugin_init):
- Add VCD/SVCD header typefinding for VCD/SVCD.
- * sys/vcd/vcdsrc.c: (gst_vcdsrc_get_type), (gst_vcdsrc_base_init),
- (gst_vcdsrc_class_init), (gst_vcdsrc_init),
- (gst_vcdsrc_set_property), (gst_vcdsrc_get_property),
- (gst_vcdsrc_get_event_mask), (gst_vcdsrc_get_query_types),
- (gst_vcdsrc_get_formats), (gst_vcdsrc_srcpad_event),
- (gst_vcdsrc_srcpad_query), (gst_vcdsrc_get),
- (gst_vcdsrc_open_file), (gst_vcdsrc_close_file),
- (gst_vcdsrc_change_state), (gst_vcdsrc_msf),
- (gst_vcdsrc_recalculate), (gst_vcdsrc_uri_get_type),
- (gst_vcdsrc_uri_get_protocols), (gst_vcdsrc_uri_get_uri),
- (gst_vcdsrc_uri_set_uri), (gst_vcdsrc_uri_handler_init):
- * sys/vcd/vcdsrc.h:
- Fix up, add seeking, querying, URI interface. Works in totem now.
-
-2004-11-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- back to CVS
-
-=== release 0.8.6 ===
-
-2004-11-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/it.po:
- * po/nb.po:
- * po/nl.po:
- * po/or.po:
- * po/sq.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- releasing 0.8.6, "IOU Love"
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c:
- Fix unplayable files error handling. Fixes #158365
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c:
- Fix broken mp3 typefinding. Fixes #158375
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c:
- Fix sync on broken files. Fixes #158976
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Edward Hervey <bilboed@bilboed.com>
-
- * ext/libpng/gstpngenc.c:
- Copy over buffer properties. Fixes #158832
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- * ext/dvdread/dvdreadsrc.c:
- Fixes invalid reads (#158462)
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c:
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4lsrc_calls.c:
- Probe less and cache it. Fixes #159187.
-
-2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videorate/gstvideorate.c:
- Handle all video formats. Fixes #159186.
-
-2004-11-16 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/synaesthesia/gstsynaesthesia.c:
- (gst_synaesthesia_class_init), (gst_synaesthesia_init),
- (gst_synaesthesia_dispose), (gst_synaesthesia_finalize),
- (gst_synaesthesia_sink_link), (gst_synaesthesia_src_getcaps),
- (gst_synaesthesia_src_link), (gst_synaesthesia_chain),
- (gst_synaesthesia_change_state), (plugin_init):
- Fix up synaesthesia to work under different samplerates/ buffer sizes.
- Force 320x200 output, as that's the only thing the underlying
- synaesthesia implementation supports. Still needs to be made
- re-entrant.
-
-2004-11-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Fix mpeg2enc configure check (similar to mplex check below).
-
-2004-11-14 Koop Mast <kwm@rainbow-runner.nl>
-
- reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- Fix for gcc-2.95 (fixes #158221).
-
-2004-11-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
- Re-add clock distribution hack (until new core is released).
- Fixes #158125.
-
-2004-11-13 Arwed v. Merkatz <v.merkatz@gmx.net>
- * configure.ac:
- fix mplex configure check segfaulting on some systems (bug #140994)
-
-2004-11-13 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait):
- add debugging
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- do a wait when we enter the loop func with no data available to
- write instead of getting into an 100% CPU loop by just returning and
- being called again by the scheduler
-
-2004-11-13 Jan Schmidt <thaytan@mad.scientist.com>
-
- * configure.ac:
- * ext/libvisual/visual.c: (gst_visual_get_type),
- (libvisual_log_handler), (gst_visual_getcaps),
- (gst_visual_srclink), (gst_visual_change_state), (make_valid_name),
- (plugin_init):
- Update libvisual to 0.1.7. Link in the debug handling to gstreamer
- * ext/smoothwave/Makefile.am:
- * ext/smoothwave/demo-osssrc.c: (main):
- * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_class_init),
- (gst_smoothwave_init), (gst_smoothwave_dispose), (gst_sw_sinklink),
- (gst_sw_srclink), (gst_smoothwave_chain), (gst_sw_change_state),
- (plugin_init):
- * ext/smoothwave/gstsmoothwave.h:
- Make gstsmoothwave a working element in the 20th century.
-
- * gst/chart/gstchart.c: (gst_chart_init), (gst_chart_srcconnect):
- Fix incorrect link function
-
-2004-11-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/volume/gstvolume.c:
- Allow buffer-frames=0.
-
-2004-11-12 Iain <iaingnome@gmail.com>
-
- * configure.ac: Check for polypaudio
-
- * ext/Makefile.am: Build the polyp dir
-
- * ext/polyp: The polypsink sources.
-
-2004-10-30 Iain <iaingnome@gmail.com>
-
- * gst/interleave/interleave.c (interleave_unlink): Change the src pads
- caps to reflect the new number of channels.
-
-2004-11-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- Fix for negotiation order problem. This would show when the
- ALSA loopfuction was called before any other function. ALSA
- wouldn't do anything because we're not negotiated yet, leading
- to an infinite loop. Showed in e.g. Rhythmbox. Fixes #158006.
-
-2004-11-11 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
- No warnings (#157986).
-
-2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (plugin_init):
- Prefer apev1/2 and id3v1 (at end of file) over musepack.
-
-2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_loop_stream):
- Signal no-more-pads (so it works in playbin).
-
-2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/musepack/gstmusepackreader.cpp:
- Workaround for older core.
-
-2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/imgconvert.c: (yuv420p_to_yuv422):
- Actually test for odd width/height rather than testing whether
- a temporary variable that was 0 before we subtracted 1 is now
- not equal to zero (which it always is).
-
-2004-11-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
- Fix compilation if HAVE_XVIDEO is not defined
-
-2004-11-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
- Fix compilation if HAVE_XVIDEO is not defined
-
-2004-11-11 Jan Schmidt <thaytan@mad.scientist.com>
-
- * gst/goom/gstgoom.c: (gst_goom_class_init), (gst_goom_init),
- (gst_goom_dispose), (gst_goom_sinkconnect), (gst_goom_chain),
- (gst_goom_change_state), (plugin_init):
- Use the bytestream adapter so goom doesn't depend on the input
- buffer size.
- Add a debug category
-
-2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state):
- Only set hardware parameters *after* negotiation. Before
- negotiation, it will set ANY and that seems to cause crashes
- (see e.g. #151288, #153227).
-
-2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
- This seems to be antique leftover. It needs to pass error
- checking.
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
- (gst_sdlvideosink_deinitsdl), (gst_sdlvideosink_initsdl),
- (gst_sdlvideosink_destroy), (gst_sdlvideosink_create),
- (gst_sdlvideosink_sinkconnect), (gst_sdlvideosink_chain):
- Fix GstXOverlay implementation (#151059).
-
-2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
- Don't assert (#157853).
-
-2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
- Fix bytes/samples confustion.
- (gst_alsa_sink_mmap), (gst_alsa_sink_loop):
- Fix for underrun (#144389).
-
-2004-11-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
- Disable halfway-seek for pending release (since it needs a new
- core release).
-
-2004-11-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c:
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4lsrc_calls.c:
- add autoprobe-fps property so we can separate autoprobing parts
-
-2004-11-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c:
- * sys/v4l/v4lsrc_calls.c:
- initialise fourcc to catch unset fourcc's, and debug
-
-2004-11-09 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/README:
- * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
- * gst/playback/gstplaybin.c: (gst_play_bin_init),
- (gst_play_bin_dispose), (gst_play_bin_set_property),
- (remove_sinks), (setup_sinks), (gst_play_bin_change_state),
- (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
- (gst_play_bin_get_formats), (gst_play_bin_convert),
- (gst_play_bin_get_query_types), (gst_play_bin_query):
- Cleanups and some more documentation.
-
-2004-11-09 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
- (gst_cacasink_init), (gst_cacasink_chain):
- * ext/libcaca/gstcacasink.h:
- Cacasink inherits from VideoSink, so let that store the clock.
-
-2004-11-09 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/README:
- * gst/playback/gstplaybasebin.c: (group_destroy), (group_is_muted),
- (add_stream), (unknown_type), (add_element_stream), (no_more_pads),
- (probe_triggered), (preroll_unlinked), (new_decoded_pad),
- (gst_play_base_bin_change_state), (gst_play_base_bin_found_tag):
- * gst/playback/gstplaybin.c: (gen_vis_element), (remove_sinks),
- (setup_sinks):
- * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute),
- (gst_stream_info_is_mute), (gst_stream_info_set_property):
- * gst/playback/gststreaminfo.h:
- Updated README.
- Only switch groups if all streams have muted (EOSed).
- Send Tags in sync with the stream playback instead of in
- the playback/preroll phase.
- Some cleanups, free the fakesrc elements.
-
-2004-11-09 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_caps_internal):
- buffer-frames property was missing
- * ext/arts/gst_arts.c:
- rate missing from sinkcaps
- * ext/audiofile/gstafparse.c:
- * ext/audiofile/gstafsink.c:
- * ext/audiofile/gstafsrc.c:
- * ext/swfdec/gstswfdec.c:
- int audio doesn't know buffer-frames
- * ext/cdparanoia/gstcdparanoia.c:
- int audio doesn't know chunksize either
- * ext/nas/nassink.c:
- it's endianness, not endianess
- * gst-libs/gst/audio/audio.h:
- make float standard pad template caps really describe float
- * gst/law/mulaw.c: (linear_factory):
- signed only, please
- * gst/mpegstream/gstdvddemux.c:
- widths of 20 are not valid
-
-2004-11-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- Submitted by: Luca Ferretti <elle.uca@infinito.it>
-
- * po/LINGUAS:
- * po/it.po:
- Add Italian
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/README:
- * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
- * gst/playback/gstplaybasebin.c: (probe_triggered),
- (gst_play_base_bin_change_state):
- Updated README, added more comments for fixmes etc..
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
- We can remove this hack now.
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_ayuv),
- (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
- (gst_videomixer_blend_buffers), (gst_videomixer_loop):
- Only mix AYUV for maximum quality.
-
-2004-11-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_demux_src_query),
- (gst_ogg_demux_push), (gst_ogg_pad_push):
- Let's act as if we're synchronized now! :).
- * ext/theora/theoradec.c: (theora_dec_chain):
- Add some debug.
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
- (gst_alpha_set_property), (gst_alpha_sink_link),
- (gst_alpha_set_ayuv), (gst_alpha_set_i420),
- (gst_alpha_chroma_key_ayuv), (gst_alpha_chroma_key_i420),
- (gst_alpha_init_params), (gst_alpha_chain):
- Implement alpha functions for AYUV too, this increases
- accuracy quite a bit.
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_caps_remove_format_info):
- * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
- (shrink12), (img_get_alpha_info), (deinterlace_line),
- (deinterlace_line_inplace):
- * gst/ffmpegcolorspace/imgconvert_template.h:
- Added AYUV colorspace and handle RGBA a bit more respectful.
-
-2004-11-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- Actually always send a discont (cornercase when resending the
- same serial-tagged chain twice).
-
-2004-11-08 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_clear),
- (gst_ximagesink_finalize):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
- (gst_xvimagesink_finalize): Some more cleanups, leaks fixed and checks.
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/typefind/gsttypefindfunctions.c: (aac_type_find):
- Don't segfault on NULL data.
-
-2004-11-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (unlinked):
- * gst/playback/gstplay-marshal.list:
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (gst_play_base_bin_init), (group_create), (get_active_group),
- (get_building_group), (group_destroy), (group_commit),
- (queue_overrun), (remove_groups), (add_stream), (unknown_type),
- (add_element_stream), (no_more_pads), (probe_triggered),
- (preroll_unlinked), (new_decoded_pad), (removed_decoded_pad),
- (state_change), (setup_source), (gst_play_base_bin_get_property),
- (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
- (gst_play_base_bin_link_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
- (remove_sinks), (setup_sinks), (gst_play_bin_change_state):
- Add support for chained ogg files. Prepare for playlist
- support. This patch introduces the concept of pad groups, which
- together compose one playable media file.
-
-2004-11-07 David Schleef <ds@schleef.org>
-
- * testsuite/gst-lint: Check for pad templates that aren't statically
- scoped.
-
-2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/musepack/Makefile.am:
- * ext/musepack/gstmusepackdec.cpp:
- * ext/musepack/gstmusepackdec.h:
- * ext/musepack/gstmusepackreader.cpp:
- * ext/musepack/gstmusepackreader.h:
- Add musepack decoder.
- * ext/faad/gstfaad.c: (gst_faad_base_init):
- Make pad templates static.
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
- (plugin_init):
- Add musepack typefinder, make mp3 typefinding work halfway stream,
- which doesn't actually work yet because id3demux doesn't implement
- _get_length().
-
-2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop):
- Fix interrupt event handling (#144436).
-
-2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
- Hide unused glory.
-
-2004-11-06 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/vorbis/vorbisenc.c: (raw_caps_factory):
- Fix weird caps (#157548).
-
-2004-11-06 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/rtp/gstrtpgsmparse.c: (gst_rtpgsm_caps_nego):
- Add missing NULL terminator (#157543).
-
-2004-11-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcp.h:
- * gst/tcp/gsttcpclientsink.c:
- * gst/tcp/gsttcpclientsrc.c:
- * gst/tcp/gsttcpserversink.c:
- * gst/tcp/gsttcpserversrc.c:
- ports can go up to 65535. Move common defines to gsttcp.h
-
-2004-11-05 Wim Taymans <wim@fluendo.com>
-
- * gst/videotestsrc/videotestsrc.c: (paint_setup_Y41B),
- (paint_hline_Y41B), (paint_setup_Y42B), (paint_hline_Y42B):
- Added two more colorspaces.
-
-2004-11-05 Wim Taymans <wim@fluendo.com>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
- (yuv422p_to_yuv422), (yuv420p_to_yuv422), (shrink12),
- (img_convert), (deinterlace_line), (deinterlace_line_inplace):
- More stride fixes.
-
-2004-11-05 Wim Taymans <wim@fluendo.com>
-
- * gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add),
- (gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain):
- * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
- (gst_videomixer_fill_checker), (gst_videomixer_blend_buffers),
- (gst_videomixer_loop):
- More stride fixes.
-
-2004-11-05 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstmad.c: (gst_mad_chain):
- don't overflow data buffer. Flush not needed sync data when syncing
- failed.
-
-2004-11-04 Wim Taymans <wim@fluendo.com>
-
- * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
- (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
- (gst_alpha_get_property), (gst_alpha_add), (gst_alpha_chroma_key),
- (gst_alpha_init_params), (gst_alpha_chain),
- (gst_alpha_change_state):
- Updated the chroma keying algorithm with something more
- sophisticated.
-
-2004-11-03 Wim Taymans <wim@fluendo.com>
-
- * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
- (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
- (gst_videomixer_blend_buffers), (gst_videomixer_loop):
- Fix stride issues. Does not completely work for odd
- heights.
-
-2004-11-03 Wim Taymans <wim@fluendo.com>
-
- * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
- (gst_alpha_chroma_key), (gst_alpha_chain):
- Fix stride issues. Does not completely work for odd
- heights.
-
-2004-11-03 Christophe Fergeau <teuf@gnome.org>
-
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
- * gst/videoscale/videoscale.c: (videoscale_find_by_structure):
- leak fixes
-
-2004-11-03 Wim Taymans <wim@fluendo.com>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
- (avpicture_alloc):
- * gst/ffmpegcolorspace/imgconvert_template.h:
- Use correct _fill function to get correct strides.
-
-2004-11-02 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
- (qtdemux_parse_udta), (qtdemux_tag_add), (gst_qtdemux_handle_esds):
- Change all g_print()s to debugging. Add a bunch of consistency
- checks.
-
-2004-11-02 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
- (try_to_link_1), (get_our_ghost_pad), (remove_element_chain),
- (unlinked), (no_more_pads), (close_link):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
- (unknown_type), (add_element_stream), (new_decoded_pad),
- (removed_decoded_pad), (setup_source):
- * gst/playback/gststreaminfo.c: (gst_stream_info_get_type),
- (gst_stream_info_class_init), (gst_stream_info_init),
- (gst_stream_info_new), (gst_stream_info_dispose),
- (stream_info_mute_pad), (gst_stream_info_set_property),
- (gst_stream_info_get_property):
- * gst/playback/gststreaminfo.h:
- Fix playback of multiple files.
- a slightly different approach to handling dynamic pad removals.
- This one only looks at pads that we have linked.
-
-2004-11-01 Christophe Fergeau <teuf@gnome.org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_finalize): fix an "invalid
- free" warning from libc.
-
-2004-11-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
- (get_unconnected_element), (remove_starting_from), (pad_removed),
- (close_link):
- Implement support for dynamic pad changing. We listen to "live"
- pad removals (i.e. while playing) and re-setup autoplugging
- after that. Playbasebin/playbin need some more work for this
- to finally work, but decodebin supports (and replugs) chained
- ogg now.
-
-2004-11-02 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose),
- (gst_alsa_finalize):
- * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init),
- (gst_cdaudio_finalize):
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
- (cdparanoia_finalize):
- * ext/divx/gstdivxdec.c: (gst_divxdec_dispose):
- * ext/divx/gstdivxenc.c: (gst_divxenc_dispose):
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
- (dvdreadsrc_finalize):
- * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
- (gst_flacdec_finalize):
- * ext/flac/gstflacenc.c: (gst_flacenc_class_init),
- (gst_flacenc_finalize):
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init),
- (gst_gnomevfssink_finalize):
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init),
- (gst_gnomevfssrc_finalize):
- * ext/libfame/gstlibfame.c: (gst_fameenc_class_init),
- (gst_fameenc_finalize):
- * ext/nas/nassink.c: (gst_nassink_class_init),
- (gst_nassink_finalize):
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize),
- (gst_sdlvideosink_class_init):
- * ext/sndfile/gstsf.c: (gst_sf_dispose):
- * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose):
- * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose):
- * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose):
- * gst-libs/gst/xwindowlistener/xwindowlistener.c:
- (gst_x_window_listener_dispose):
- * gst/audioscale/gstaudioscale.c:
- * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init),
- (play_on_demand_finalize):
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose):
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
- * sys/cdrom/gstcdplayer.c: (cdplayer_class_init),
- (cdplayer_finalize):
- * sys/glsink/glimagesink.c: (gst_glimagesink_finalize),
- (gst_glimagesink_class_init):
- * sys/oss/gstosselement.c: (gst_osselement_class_init),
- (gst_osselement_finalize):
- * sys/oss/gstosssink.c: (gst_osssink_dispose):
- * sys/oss/gstosssrc.c: (gst_osssrc_dispose):
- * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose):
- Fixes a bunch of problems with finalize and dispose functions,
- either assumptions that dispose is only called once, or not calling
- the parent class dispose/finalize function
-
-2004-11-01 Stefan Kost <ensonic@users.sf.net>
-
- * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link):
- added two api precondition guards
- use g_strdup with getenv to fix crash when using ENVVAR
-
-2004-11-01 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/esd/esdsink.c: (gst_esdsink_class_init),
- (gst_esdsink_finalize):
- Use a finalize function, not dispose, and more importantly,
- call the parent class finalize function too
-
-2004-11-01 Johan Dahlin <johan@gnome.org>
-
- * ext/ogg/gstoggdemux.c:
- * gst/tags/gstvorbistag.c:
- Plug leaks.
-
-2004-10-31 Benjamin Otte <otte@gnome.org>
-
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
- lotsa memleaks today. But they're all small...
-
-2004-10-31 Benjamin Otte <otte@gnome.org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- another memleak crushed
-
-2004-10-31 Benjamin Otte <otte@gnome.org>
-
- * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
- fix memleak
-
-2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- Hack to prevent crash when going to READY inside signal handler
- while this function is active.
-
-2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/ffmpegcolorspace/Makefile.am:
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/common.h:
- * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
- * gst/ffmpegcolorspace/dsputil.h:
- * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_get_palette), (gst_ffmpeg_set_palette),
- (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_smpfmt_to_caps),
- (gst_ffmpegcsp_codectype_to_caps), (gst_ffmpeg_caps_to_smpfmt),
- (gst_ffmpeg_caps_to_pixfmt), (gst_ffmpegcsp_caps_with_codectype),
- (gst_ffmpegcsp_avpicture_fill):
- * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
- (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_get_type),
- (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
- (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
- (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
- (gst_ffmpegcsp_get_property), (gst_ffmpegcolorspace_register):
- * gst/ffmpegcolorspace/imgconvert.c:
- (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
- (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
- (avpicture_get_size), (avcodec_get_pix_fmt_loss),
- (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
- (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
- (yuv422_to_yuv420p), (uyvy422_to_yuv420p), (uyvy422_to_yuv422p),
- (yuv422_to_yuv422p), (yuv422p_to_yuv422), (yuv422p_to_uyvy422),
- (uyvy411_to_yuv411p), (yuv420p_to_yuv422), (C_JPEG_TO_CCIR),
- (img_convert_init), (img_apply_table), (shrink41), (shrink21),
- (shrink12), (shrink22), (shrink44), (grow21_line), (grow41_line),
- (grow21), (grow22), (grow41), (grow44), (conv411),
- (gif_clut_index), (build_rgb_palette), (bitcopy_n), (mono_to_gray),
- (monowhite_to_gray), (monoblack_to_gray), (gray_to_mono),
- (gray_to_monowhite), (gray_to_monoblack), (avpicture_alloc),
- (avpicture_free), (is_yuv_planar), (img_convert),
- (get_alpha_info_pal8), (img_get_alpha_info), (deinterlace_line),
- (deinterlace_line_inplace), (deinterlace_bottom_field),
- (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
- * gst/ffmpegcolorspace/imgconvert_template.h:
- * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
- * gst/ffmpegcolorspace/mmx.h:
- * gst/ffmpegcolorspace/utils.c: (av_mallocz), (av_strdup),
- (av_fast_realloc), (av_mallocz_static), (av_free_static),
- (av_freep), (avcodec_get_context_defaults),
- (avcodec_alloc_context), (avcodec_init):
- Sync back from gst-ffmpeg. Deprecates ffcolorspace. Adds palette
- handling plus update from ffmpeg CVS. Large clean-up.
-
-2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/Makefile.am:
- We need the marshallers for decodebin, too.
-
-2004-10-30 David Schleef <ds@schleef.org>
-
- * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Make
- quicktime typefinding work with 64-bit offsets.
-
-2004-10-30 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event):
- Set EOS on the element when processing an EOS event.
- * ext/speex/gstspeexdec.h:
- * ext/speex/gstspeexenc.h:
- Only keep a const ptr to the mode
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data),
- (gst_riff_create_audio_template_caps):
- Allow WMAV3, with up to 6 channels.
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_request_new_pad):
- Don't call gst_pad_set_event_function on a sink pad.
- * gst/mpegstream/gstdvddemux.c:
- (gst_dvd_demux_get_subpicture_stream),
- (gst_dvd_demux_set_cur_audio), (gst_dvd_demux_set_cur_subpicture):
- Copy the explicit caps that were set across to the cur_* pads,
- instead of trying to use a possibly non-existent negotiated caps.
- Reset the type of subpicture pads to UNKNOWN after calling
- init_stream, so that the caps get set.
-
-2004-10-29 Martin Pitt <martin.pitt@canonical.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
- Don't touch buffer if it is of size 0 (fixes #151064).
-
-2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push):
- Synchronized discont handling.
-
-2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
- (gst_ogg_demux_push):
- Make seeking sort-of exact again (fixes #156387).
-
-2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (unknown_type),
- (add_element_stream), (new_decoded_pad),
- (gst_play_base_bin_change_state):
- * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
- (gst_stream_info_init), (gst_stream_info_new),
- (gst_stream_info_dispose), (gst_stream_info_get_property):
- * gst/playback/gststreaminfo.h:
- Make caps explicitely available. Makes testing for unsupported
- types possible. Improves error reporting.
-
-2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/audioconvert/gstaudioconvert.c:
- (gst_audio_convert_buffer_to_default_format):
- Really don't touch read-only buffers (#156563).
-
-2004-10-29 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewd by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
- Fix memleak (#155223).
-
-2004-10-29 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/.cvsignore:
- * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
- (gst_multifdsink_class_init), (gst_multifdsink_init),
- (gst_multifdsink_add), (gst_multifdsink_remove),
- (gst_multifdsink_remove_client_link), (is_sync_frame),
- (gst_multifdsink_new_client),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
- (gst_multifdsink_get_property):
- * gst/tcp/gstmultifdsink.h:
- Added burst on connect sync_method, deprecated sync_clients,
- streamlined the sync code some more.
-
-2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (thread_error), (setup_source),
- (gst_play_base_bin_change_state):
- Improve error reporting.
-
-2004-10-28 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/fdsetstress.c: (mess_some_more), (run_test), (main):
- * gst/tcp/gstfdset.c: (nearest_pow), (resize), (ensure_size),
- (gst_fdset_new), (gst_fdset_free), (gst_fdset_set_mode),
- (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
- (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
- (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
- (gst_fdset_wait):
- Added more locks around fdset structures. Fixed/reworked
- the poll array resizing code.
- Added stress test for fdset.
-
-2004-10-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
- fix build
-
-2004-10-28 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
- fix link function to always query channels and query width for
- floats
- * configure.ac:
- add equalizer dir
- * gst/equalizer/Makefile.am:
- * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_get_type),
- (gst_iir_equalizer_base_init), (gst_iir_equalizer_class_init),
- (gst_iir_equalizer_init), (gst_iir_equalizer_finalize),
- (arg_to_scale), (setup_filter),
- (gst_iir_equalizer_compute_frequencies),
- (gst_iir_equalizer_set_property), (gst_iir_equalizer_get_property),
- (gst_iir_equalizer_filter_inplace), (gst_iir_equalizer_setup),
- (plugin_init):
- add an equalizer
-
-2004-10-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- Submitted by: Kjartan Maraas <kmaraas@broadpark.no>
-
- * po/LINGUAS:
- * po/nb.po:
- Added Norwegian Bokmaal translation
-
-2004-10-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- Don't break on options (fixes #156488).
-
-2004-10-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/cdaudio/Makefile.am:
- * sys/Makefile.am:
- fix build on older automake
-
-2004-10-26 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
- (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
- Allow a little margin when negotiating the framerate.
-
-2004-10-26 Stefan Kost <ensonic@users.sf.net>
-
- * gst/level/gstlevel.c:
- synchonised naming of pads and pad-templates
-
-2004-10-26 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
- (gst_ogg_demux_handle_event), (_find_chain_get_unknown_part),
- (_find_streams_check), (gst_ogg_demux_push):
- Fix EOS again. Needs to be done in a better way. We should not
- remove the pad if there is no new chained stream.
-
-2004-10-26 Iain <iaingnome@gmail.com>
-
- * ext/ogg/gstoggdemux.c (gst_ogg_pad_new): Free the tag list.
- * gst/audioscale/gstaudioscale.c (gst_audioscale_link): Free the copy
- of the caps.
- * gst/interleave/interleave.c (interleave_class_init): Hook up release
- pad.
- (interleave_release_pad): Remove the pad.
- * gst/level/gstlevel.c: Allow the level to take 1 or 2 channels.
- * sys/sunaudio/gstsunaudio.c (gst_sunaudio_setparams): Pay attention to
- the set device.
- * sys/xvimage/xvimagesink.c (gst_xvimagesink_get_xv_support): Free the
- attrs
- (gst_xvimagesink_xcontext_clear): Free the xcontext.
- (gst_xvimagesink_finalize): Free the par.
-
-2004-10-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavimux.c: (gst_avimux_audsinkconnect),
- (gst_avimux_stop_file):
- First calculate the rate, and only then use it. Hdr.rate is a
- multiple and not a derivative of hdr.scale. Scale is not the
- same as blockalign but is solely related to rate.
-
-2004-10-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_init),
- (gst_gnomevfssink_handle_event), (gst_gnomevfssink_chain):
- Implement seeking.
-
-2004-10-25 James Henstridge <james@jamesh.id.au>
-
- Reviewed by: David Schleef <ds@schleef.org>
-
- * examples/gstplay/player.c: (got_stream_length), (main):
- * examples/seeking/cdplayer.c: (update_scale):
- * examples/seeking/seek.c: (format_value), (update_scale):
- * examples/seeking/spider_seek.c: (format_value), (update_scale),
- (stop_seek):
- Build fixes on AMD64.
-
-2004-10-25 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- reviewed by: Ronald Bultje <rbultje at gnome dot org>
-
- * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
- Fix for some v4l cards which hang in v4lsrc
-
-2004-10-25 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_remove),
- (gst_ogg_demux_push), (gst_ogg_chains_clear):
- Make sure to remove the pad when a new chain is
- encountered. Set some vars to NULL so we don't try
- to reference freed memory.
-
-2004-10-25 Wim Taymans <wim@fluendo.com>
-
- * examples/seeking/Makefile.am:
- * examples/seeking/cdplayer.c: (update_scale):
- * examples/seeking/chained.c: (unlinked), (new_pad), (main):
- * examples/seeking/playbin.c: (make_playerbin_pipeline),
- (format_value), (update_scale), (iterate), (start_seek),
- (stop_seek), (print_media_info), (play_cb), (pause_cb), (stop_cb),
- (print_usage), (main):
- Added some more examples, update others.
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
- * ext/speex/gstspeexdec.c: (speex_dec_chain):
- * ext/theora/theoradec.c: (theora_dec_chain):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- Add codec-name metadata.
-
-2004-10-25 Takao Fujiwara <Takao.Fujiwara@Sun.COM>
-
- Reviewd by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
- * ext/alsa/gstalsamixertrack.h:
- * po/POTFILES.in:
- ALSA mixer track label internationalization (#154054).
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/theora/theoradec.c: (theora_dec_chain):
- Export bitrate as metadata.
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
- * ext/alsa/gstalsamixertrack.h:
- Fix names, fix loop.
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/speex/gstspeexdec.c: (gst_speex_dec_init),
- (speex_dec_convert):
- sinkconvert function so oggdemux can get the file length (totem).
-
-2004-10-25 James Morrison <ja2morri@csclub.uwaterloo.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
- Don't push incomplete packets.
- * gst/typefind/gsttypefindfunctions.c: (m4a_type_find):
- Fix MPEG-4 audio typefinding.
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/Makefile.am:
- * sys/v4l/gstv4l.c: (plugin_init):
- * sys/v4l/gstv4lelement.c: (gst_v4lelement_get_type),
- (gst_v4lelement_init), (gst_v4lelement_dispose),
- (gst_v4lelement_change_state):
- * sys/v4l/gstv4lelement.h:
- * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_open),
- (gst_v4l_xoverlay_close), (idle_refresh),
- (gst_v4l_xoverlay_set_xwindow_id):
- * sys/v4l/gstv4lxoverlay.h:
- * sys/v4l/v4l-overlay_calls.c:
- * sys/v4l/v4l_calls.h:
- * sys/v4l2/Makefile.am:
- * sys/v4l2/gstv4l2.c: (plugin_init):
- * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_type),
- (gst_v4l2element_init), (gst_v4l2element_dispose),
- (gst_v4l2element_change_state):
- * sys/v4l2/gstv4l2element.h:
- * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_open),
- (gst_v4l2_xoverlay_close), (idle_refresh),
- (gst_v4l2_xoverlay_set_xwindow_id):
- * sys/v4l2/gstv4l2xoverlay.h:
- * sys/v4l2/v4l2-overlay_calls.c:
- * sys/v4l2/v4l2_calls.h:
- Remove client-side overlay handling, use the X-server v4l plugin
- for that. Nicer overlay, less code. Also make the plugin
- compileable without X (but then without overlay, obviously).
- Makes xwindowlistener obsolete, should we remove that?
-
-2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosssrc.c: (gst_osssrc_get_time), (gst_osssrc_get),
- (gst_osssrc_src_query):
- * sys/oss/gstosssrc.h:
- OK, so people want offset in DEFAULT. This time, actually fix all
- cases.
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
- Add FPS properly.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfmux.c:
- * gst/avi/gstavimux.c:
- Framerate.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2element.c: (gst_v4l2element_set_property):
- Fix properties (channel, norm, frequency).
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_property):
- Flag typo.
- * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults):
- No warnings.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_clear_format_list):
- Fix hang.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2element.h:
- Yet Another Hack (tm) for kernel header borkedness.
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
- (gst_v4l2src_v4l2fourcc_to_caps), (gst_v4l2_fourcc_from_structure),
- (gst_v4l2src_link), (gst_v4l2src_getcaps),
- (gst_v4l2src_change_state):
- * sys/v4l2/gstv4l2src.h:
- * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_capture_init),
- (gst_v4l2src_capture_start), (gst_v4l2src_capture_stop):
- Fix caps, keep track of state, work.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
- Quiet.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosssrc.c: (gst_osssrc_get):
- Don't mix bytes and samples.
-
-2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggmux.c:
- Basic pad template which accepts OGM tracks, speex, flac, vorbis
- and theora. Any is incorrect.
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_vidsink_link):
- Fix caps.
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_base_init):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_base_init),
- (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_srcconnect),
- (gst_v4lmjpegsrc_getcaps), (gst_v4lmjpegsrc_change_state):
- * sys/v4l/gstv4lmjpegsrc.h:
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
- (gst_v4lsrc_change_state):
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_start),
- (gst_v4lmjpegsrc_capture_stop):
- Fix caps. Keep track of internal state. Work.
-
-2004-10-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/Makefile.am:
- Fix the build fixes.
-
-2004-10-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (_find_chain_seek),
- (gst_ogg_pad_push):
- Check for pad availability before using it.
- * ext/ogg/gstoggdemux.c: (_find_chain_process):
- Fix parsing of chained ogg. Needs more work on the decoder side.
-
-2004-10-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/spectrum/Makefile.am:
- * gst/spectrum/demo-osssrc.c: (spectrum_chain), (main),
- (idle_func):
- Fix demo and reenable it. Yes, I'm currently playing with audio
- analysis tools
-
-2004-10-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- We love it if files that start at zero work too...
-
-2004-10-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
- Handle files with missing EOS headers.
-
-2004-10-21 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/tcp/gsttcpserversink.c:
- (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_init_send):
- Zero some variables first (need for accept not to return EINVAL)
-
-2004-10-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (gst_ogg_pad_push):
- * ext/theora/theoradec.c: (theora_dec_sink_convert),
- (theora_dec_chain):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
- (gst_vorbis_dec_init), (vorbis_dec_convert), (vorbis_dec_chain):
- Seeking and querying finetune.
-
-2004-10-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/raw1394/Makefile.am:
- fix the build
-
-2004-10-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
- Wrong return.
- * gst/playback/Makefile.am:
- * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
- * gst/playback/gstplay-marshal.list:
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init):
- Fix marshallers.
-
-2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event):
- Silence.
-
-2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
- (gst_ogg_pad_push):
- Yay for non-lineair granulepos in theora.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
- (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
- * ext/dv/gstdvdec.h:
- Make sure we renegotiate aspect ratio when the camera switches.
-
-2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (gst_ogg_pad_push):
- Start at zero.
- * ext/theora/theoradec.c: (theora_dec_chain):
- Skip headers. Bad idea for chained ogg, but fixes seeking.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- I swear, this is the last time I touch this.
-
-2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
- (_read_bos_process), (gst_ogg_demux_iterate), (gst_ogg_pad_new):
- Faster seeking.
- * ext/theora/theoradec.c: (theora_dec_sink_convert):
- Time-to-default conversion.
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- Don't error on unknown packets, just skip. We should probably
- read them if we want to support chained ogg.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- Added cdaudio to wrong list.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- Revive cdaudio.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
- (gst_dvdec_video_link), (gst_dvdec_push):
- * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
- (gst_smokeenc_resync), (gst_smokeenc_chain):
- Fix mimetype on smoke encoder.
- Add aspect ratio to dvdec. Not sure if these
- values are correct though....
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init):
- Fix vorbis property descriptions and ranges.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
- Really do nothing when no data is available.
- Go to the playing state when the stream is not seekable
- instead of failing.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * ext/cdaudio/gstcdaudio.c: (_do_init), (gst_cdaudio_base_init),
- (gst_cdaudio_get_event_masks), (gst_cdaudio_send_event),
- (gst_cdaudio_query), (plugin_init), (cdaudio_uri_get_type),
- (cdaudio_uri_get_protocols), (cdaudio_uri_get_uri),
- (cdaudio_uri_set_uri), (cdaudio_uri_handler_init):
- Added uri handler for cd://
- Port to new API.
-
-2004-10-18 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
- (gst_decode_bin_init), (find_compatibles), (close_pad_link),
- (try_to_link_1), (no_more_pads), (close_link), (type_found):
- * gst/playback/gstplaybasebin.c: (gen_preroll_element),
- (remove_prerolls), (unknown_type), (add_element_stream),
- (new_decoded_pad), (setup_source), (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_link_stream):
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_vis_element), (remove_sinks), (setup_sinks):
- * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
- (gst_stream_info_get_type), (gst_stream_info_class_init),
- (gst_stream_info_init), (gst_stream_info_new),
- (gst_stream_info_dispose), (stream_info_mute_pad),
- (gst_stream_info_set_property), (gst_stream_info_get_property):
- * gst/playback/gststreaminfo.h:
- Add sink padtemplate to decodebin.
- Added some more comments.
- Make queue size configurable in playbasebin.
- Added possibility to use elements as sinks (ex cdaudio).
-
-2004-10-15 Wim Taymans <wim@fluendo.com>
-
- * ext/speex/gstspeexenc.c: (gst_speexenc_class_init),
- (gst_speexenc_chain):
- Fix speex timestamps so that it gets muxed properly.
-
-2004-10-15 Wim Taymans <wim@fluendo.com>
-
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
- (gst_dv1394src_base_init), (gst_dv1394src_class_init),
- (gst_dv1394src_init), (gst_dv1394src_dispose),
- (gst_dv1394src_iso_receive), (gst_dv1394src_discover_avc_node),
- (gst_dv1394src_change_state), (gst_dv1394src_get_event_mask),
- (gst_dv1394src_event), (gst_dv1394src_get_formats),
- (gst_dv1394src_convert), (gst_dv1394src_get_query_types),
- (gst_dv1394src_query), (gst_dv1394src_uri_get_type),
- (gst_dv1394src_uri_get_protocols), (gst_dv1394src_uri_get_uri),
- (gst_dv1394src_uri_set_uri), (gst_dv1394src_uri_handler_init):
- * ext/raw1394/gstdv1394src.h:
- Added conversion/query functions.
- Update buffer timestamps,
- Added signals.
- Added uri dv:// so it might play from the firewire in playbin.
- Fix a possible leak.
- Added debugging.
-
-2004-10-15 Wim Taymans <wim@fluendo.com>
-
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_class_init),
- (gst_dv1394src_init), (gst_dv1394src_set_property),
- (gst_dv1394src_get_property), (gst_dv1394src_iso_receive),
- (gst_dv1394src_discover_avc_node), (gst_dv1394src_change_state):
- * ext/raw1394/gstdv1394src.h:
- Added AV/C VTR control support needed for some cameras.
- Added automatic port detection.
- Added properties for selecting the channel.
- The configure.ac script is not yet updated to reflect the
- new libavc1394 and librom1394 dependencies.
-
-2004-10-15 Wim Taymans <wim@fluendo.com>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (qtdemux_parse), (gst_qtdemux_handle_esds):
- An esds box is not a container.
- Fix parsing of mp4v boxes.
- Do not try to renegotiate fps for each frame. Need to
- find a better method. This should fix mp4 playback.
-
-2004-10-14 David Schleef <ds@schleef.org>
-
- * configure.ac: update for swfdec-0.3 and liboil-0.2
- * ext/swfdec/gstswfdec.c: update for swfdec-0.3
- * ext/swfdec/gstswfdec.h: same
- * gst/videofilter/gstvideobalance.c: update for liboil-0.2
- * gst/videotestsrc/videotestsrc.c: same
-
-2004-10-14 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
- (is_sync_frame), (gst_multifdsink_new_client),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
- Turn warnings into info.
- Don't allow a state change in the streaming thread.
-
-2004-10-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/oggvorbisenc.c:
- * ext/vorbis/vorbisdec.c:
- fix template sample rate
-
-2004-10-13 Wim Taymans <wim@fluendo.com>
-
- * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
- Decoding the header first fixes some problems in resyncing
- in more mp3s.
-
-2004-10-12 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_vis_element), (remove_sinks), (setup_sinks):
- Added vis plugin support, need to configure the vis
- element to activate it.
-
-2004-10-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get),
- (gst_gnomevfssrc_srcpad_query), (gst_gnomevfssrc_srcpad_event):
- Some debug.
- * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
- (gst_avi_demux_handle_src_event), (gst_avi_demux_read_superindex),
- (gst_avi_demux_read_subindexes), (gst_avi_demux_add_stream),
- (gst_avi_demux_stream_index), (gst_avi_demux_skip),
- (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
- (gst_avi_demux_massage_index), (gst_avi_demux_stream_header):
- * gst/avi/gstavidemux.h:
- Support for openDML-2.0 indx/ix## chunks. Support for broken index
- recovery (where, if part of the index is broken, we will still read
- the rest of the index and recover the broken part by stream
- scanning). More broken media support. EOS workarounds. General AVI
- braindamage headache recovery. Aspirin included.
-
-2004-10-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_open),
- (cdparanoia_event), (cdparanoia_query):
- Get rid of hideous lead-in.
-
-2004-10-11 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (setup_source):
- Wrong var used to get g_list_next.
-
-2004-10-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
- (cdparanoia_get), (cdparanoia_open):
- Report discid as metadata, add duration.
-
-2004-10-11 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (setup_source):
- Cleanup the previous pipeline a little earlier for the
- case that a source element provides raw data.
-
-2004-10-11 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- reset v1 tag offset when there is no v1 tag. Fixes id3demux always
- consuming the last 128 bytes, even though it was valid mp3 data.
-
-2004-10-10 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
- (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
- Change g_warnings to GST_WARNING_OBJECT and fix colourspace issue
-
-2004-10-10 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps):
- Fix for webcams that support only specific width or height
-
-2004-10-09 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavenc/gstwavenc.c: (gst_wavenc_stop_file):
- Fix wrong discont event setup (fixes #154967).
-
-2004-10-09 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/auparse/gstauparse.c: (gst_auparse_chain):
- Error out on invalid data (fixes #154807).
-
-2004-10-09 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/dvdread/dvdreadsrc.c: (_read):
- Make titles > 0 work again (fixes #154834).
-
-2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_template_caps):
- WMV3 missing in template caps.
-
-2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
- OK, so the original code was too strict. It makes random AVI files
- hang for seconds upon opening, which is unacceptable and is far
- beyond the original goal of getting multiple chunks for one-chunk
- sounc stream files. So now do just that.
-
-2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (setup_source),
- (gst_play_base_bin_change_state):
- Actually clean up streaminfo if output fails. This would trigger
- if, for example, there was no CD in the drive. No preroll, so
- a streaminfo structure is created, but the subsequent state change
- of the thread fails.
- * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
- Don't change state if parent failed.
-
-2004-10-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
- (gst_play_bin_init), (gst_play_bin_get_property), (handoff),
- (gen_video_element), (remove_sinks):
- Add small bits of code for screenshot handling.
-
-2004-10-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybin.c: (gst_play_bin_set_property),
- (gen_video_element), (gen_audio_element), (setup_sinks):
- Don't assume the user provided sinks are named "sink"...
-
-2004-10-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (gen_preroll_element),
- (unknown_type), (setup_source), (gst_play_base_bin_remove_element),
- (gst_play_base_bin_link_stream):
- Do not try to autoplug sources that generate raw streams like
- cdparanoia.
- disconnect the preroll overrun signal when we don't need it anymore.
-
-2004-10-08 Milosz Derezynski <internalerror.rez@fhtw-berlin.de>
-
- * ext/cdparanoia/gstcdparanoia.c: (_do_init),
- Added reworked patch from #154903 from milosz derezynski (deadchip).
-
-2004-10-08 Wim Taymans <wim@fluendo.com>
-
- * ext/cdparanoia/gstcdparanoia.c: (_do_init),
- (cdparanoia_base_init), (cdparanoia_class_init), (cdparanoia_init),
- (cdparanoia_dispose), (cdparanoia_get), (cdparanoia_change_state),
- (cdparanoia_convert), (cdparanoia_uri_get_type),
- (cdparanoia_uri_get_protocols), (cdparanoia_uri_get_uri),
- (cdparanoia_uri_set_uri), (cdparanoia_uri_handler_init):
- * ext/cdparanoia/gstcdparanoia.h:
- This adds the cdda://<tracknum> uri.
-
-2004-10-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
- (gst_decode_bin_init), (find_compatibles), (close_pad_link),
- (try_to_link_1), (no_more_pads), (close_link), (type_found):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
- (unknown_type), (gst_play_base_bin_remove_element),
- (gst_play_base_bin_link_stream):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_init),
- (gst_play_bin_set_property), (gen_video_element),
- (gen_audio_element), (setup_sinks):
- * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
- (gst_stream_info_get_type), (gst_stream_info_class_init),
- (gst_stream_info_init), (gst_stream_info_new),
- (gst_stream_info_dispose), (stream_info_mute_pad),
- (gst_stream_info_set_property), (gst_stream_info_get_property):
- * gst/playback/gststreaminfo.h:
- Reuse the audio and video bins.
- Some internal cleanups in the stream selection code.
-
-2004-10-08 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
- (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
- (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
- * sys/xvimage/xvimagesink.h: Reverting Ronald's changes as the issue is
- not coming from those elements. Moreover these elements should not keep
- the xid they have been given when in NULL state.
-
-2004-10-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
- (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
- (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
- * sys/xvimage/xvimagesink.h:
- Actually only create a new toplevel window if we're not gonna
- embed it right after.
-
-2004-10-07 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream):
- * gst/playback/gstplaybin.c: (setup_sinks):
- Implement muting/unmuting of streams, mute streams that are not
- used.
-
-2004-10-07 Wim Taymans <wim@fluendo.com>
-
- * gst/typefind/gsttypefindfunctions.c: (ac3_type_find),
- (plugin_init):
- Added lame audio/x-ac3 typefind function.
-
-2004-10-06 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * configure.ac:
- bump nano to cvs
-
-=== release 0.8.5 ===
-
-2004-10-06 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * NEWS:
- * RELEASE:
- * configure.ac:
- releasing 0.8.5, "Take You On"
-
-2004-10-06 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
- (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
- (no_more_pads), (close_link), (type_found):
- * gst/playback/gstplaybasebin.c: (new_decoded_pad):
- * gst/playback/gstplaybin.c: (gen_video_element):
- Do not signal the no_more_pads after the first pad when
- we are plugging a non dynamic element with multiple
- output pads (like swfdec, dvdec, ...).
-
-2004-10-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- bump for prerelease
-
-2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/wavparse/gstwavparse.c:
- add ATRAC3 to STATIC CAPS to fix a warning
-
- * gst/matroska/ebml-read.c:
- * gst-libs/gst/riff/riff-read.c:
- fix typos
-
-2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst-libs/gst/riff/riff-media.c:
- generate caps for ATRAC3 audio streams
-
- * gst/realmedia/rmdemux.c:
- generate caps for ATRAC3 audio streams
-
-2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/wavparse/Makefile.am
- * gst/wavparse/riff.h
- * gst/wavparse/wavparse.vcproj
- riff.h removal (unused and duplication with riff-ids.h)
-
-2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/wavparse/gstwavparse.h
- remove duplicated defines for audio codec codes
-
- * gst-libs/gst/riff/riff-ids.h
- * gst/wavenc/riff.h:
- add "4CC" code for ATRAC3 audio streams
- add "4CC" code for ITU_G721_ADPCM (unused for now)
-
-2004-10-06 Wim Taymans <wim@fluendo.com>
-
- * gst/flx/gstflxdec.c: (gst_flxdec_init), (gst_flxdec_loop):
- Actually _do_ negotiation. Pass gdouble as arg instead
- of guint64 for the framerate.
-
-2004-10-06 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
- (find_compatibles), (close_pad_link), (try_to_link_1),
- (no_more_pads), (close_link), (type_found):
- * gst/playback/gstplaybasebin.c: (new_decoded_pad):
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element):
- Set state on newly added element to READY so that negotiation
- can happen ASAP.
- Addes some more debug info.
- Do not try to plug pads with multiple caps structures or ANY
- because it is too dangerous since we do not do dynamic
- replugging.
-
-2004-10-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- written by: Gora Mohanty <gora_mohanty@yahoo.co.in>
-
- * po/LINGUAS:
- * po/or.po:
- add Oriya translation
-
-2004-10-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
- Prevent overwrite of size member. Makes audio sound crappy.
-
-2004-10-05 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/typefind/gsttypefindfunctions.c: (plugin_init):
- Add rmvb to the list of known RealMedia extensions
-
-2004-10-05 Wim Taymans <wim@fluendo.com>
-
- * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error),
- (mngdec_openstream), (mngdec_closestream),
- (mngdec_handle_sink_event), (mngdec_readdata),
- (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader),
- (mngdec_getcanvasline), (mngdec_refresh),
- (gst_mngdec_change_state):
- Set the framerate correctly.
-
-2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
- There was something wrong with the index massaging.
-
-2004-10-04 Wim Taymans <wim@fluendo.com>
-
- * ext/jpeg/gstjpeg.c: (smoke_type_find), (plugin_init):
- * ext/jpeg/gstsmokedec.c: (gst_smokedec_init),
- (gst_smokedec_chain):
- * ext/jpeg/gstsmokedec.h:
- * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
- (gst_smokeenc_init), (gst_smokeenc_resync), (gst_smokeenc_chain):
- * ext/jpeg/gstsmokeenc.h:
- * ext/jpeg/smokecodec.c: (smokecodec_encode_new),
- (smokecodec_decode_new), (smokecodec_info_free),
- (smokecodec_set_quality), (smokecodec_get_quality),
- (smokecodec_set_threshold), (smokecodec_get_threshold),
- (smokecodec_set_bitrate), (smokecodec_get_bitrate),
- (find_best_size), (abs_diff), (put), (smokecodec_encode_id),
- (smokecodec_encode), (smokecodec_parse_id),
- (smokecodec_parse_header), (smokecodec_decode):
- * ext/jpeg/smokecodec.h:
- * ext/jpeg/smokeformat.h:
- Updated smoke, new bitstream, allows embedding in ogg.
-
-2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
- Fix seeking in some files. All this code is no longer needed (and
- actually breaks stuff) because we now synchronize the full index
- right when reading the header.
-
-2004-10-04 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- configure update for libmng.
-
-2004-10-04 Wim Taymans <wim@fluendo.com>
-
- * ext/libmng/Makefile.am:
- * ext/libmng/gstmng.c: (plugin_init):
- * ext/libmng/gstmng.h:
- * ext/libmng/gstmngdec.c: (gst_mngdec_get_type),
- (gst_mngdec_base_init), (gst_mngdec_class_init),
- (gst_mngdec_sinklink), (gst_mngdec_init), (gst_mngdec_src_getcaps),
- (gst_mngdec_loop), (gst_mngdec_get_property),
- (gst_mngdec_set_property), (mngdec_error), (mngdec_openstream),
- (mngdec_closestream), (mngdec_handle_sink_event),
- (mngdec_readdata), (mngdec_gettickcount), (mngdec_settimer),
- (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh),
- (gst_mngdec_change_state):
- * ext/libmng/gstmngdec.h:
- * ext/libmng/gstmngenc.c: (gst_mngenc_get_type),
- (mng_caps_factory), (raw_caps_factory), (gst_mngenc_base_init),
- (gst_mngenc_class_init), (gst_mngenc_sinklink), (gst_mngenc_init),
- (gst_mngenc_chain), (gst_mngenc_get_property),
- (gst_mngenc_set_property):
- * ext/libmng/gstmngenc.h:
- Added basic MNG decoder. Needs more work. The encoder does
- not work yet.
-
-2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/realmedia/rmdemux.c: (gst_rmdemux_handle_sink_event),
- (gst_rmdemux_loop), (gst_rmdemux_add_stream),
- (gst_rmdemux_parse_mdpr), (gst_rmdemux_dump_mdpr):
- Don't hang on length=0 chunks. Some negotiation fixes. Signal
- no-more-pads.
-
-2004-10-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- you need at least 1.0.4 of speex
-
-2004-10-04 Iain <iaingnome@gmail.com>
-
- * ext/speex/gstspeexdec.h: Revert the includes changes.
-
- * ext/speex/gstspeexenc.[ch]: Revert the includes changes.
-
-2004-09-30 Iain <iaingnome@gmail.com>
-
- * sys/sunaudio/gstsunaudio.c (gst_sunaudiosink_open): Use the device
- found during init or set as a property instead of hardcoding /dev/audio
-
-2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
- (gst_rmdemux_init), (gst_rmdemux_handle_sink_event),
- (gst_rmdemux_loop), (gst_rmdemux_add_stream), (re_hexdump_bytes),
- (re_dump_pascal_string), (gst_rmdemux_dump__rmf),
- (gst_rmdemux_dump_prop), (gst_rmdemux_parse_mdpr),
- (gst_rmdemux_dump_mdpr), (gst_rmdemux_dump_indx),
- (gst_rmdemux_dump_data):
- Use debug category, fix EOS handling. filesrc ! rmdemux now
- works.
-
-2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
- (gst_avi_demux_stream_scan), (sort), (gst_avi_demux_massage_index),
- (gst_avi_demux_stream_header), (gst_avi_demux_stream_data):
- Improve allocation, cutting and sorting of the index. How takes a
- few seconds instead of minutes.
-
-2004-10-03 Christophe Fergeau <teuf@gnome.org>
-
- * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
- fixed compilation
-
-2004-10-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_template_caps):
- Add wing commander format mimetype/fourccs.
- * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
- Don't crash if some value is 0.
-
-2004-10-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_template_caps):
- Add DIB fourcc (raw, palettized 8-bit RGB).
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_vids_with_data):
- Oops, fix strf_data reading bug.
- * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
- Use a non-NULL tag.
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
- Time for hacks. Sorry Dave. At least one quicktime movie (a
- trailer) that I've encountered contains multiple video tracks.
- One of those is the actual video track, the other are one-frame
- tracks (images). Unfortunately, the number of frames according
- to the trak header is 1 for each, so that doesn't help. So
- instead, I look at the duration and discard tracks with a
- duration shorter than 20% of the length of the stream. Better
- than nothing.
-
-2004-10-01 Christian Schaller <christian@fluendo.com>
-
- * ext/ivorbis/vorbis.c:
- Patch from Phil Blundell (Bug 152341)
-
-2004-10-01 Wim Taymans <wim@fluendo.com>
-
- * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init),
- (speex_dec_get_formats), (speex_dec_convert),
- (speex_dec_src_query), (speex_dec_src_event), (speex_dec_event),
- (speex_dec_chain), (gst_speexdec_get_property),
- (gst_speexdec_set_property):
- Small cleanups.
-
-2004-10-01 Wim Taymans <wim@fluendo.com>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_class_init),
- (gst_wavparse_stream_init), (gst_wavparse_fmt),
- (gst_wavparse_other), (gst_wavparse_loop),
- (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
- (gst_wavparse_srcpad_event):
- * gst/wavparse/gstwavparse.h:
- Added some more debugging info.
- Fix the case where the length of the file is 0.
- Make sure we seek to sample borders.
-
-2004-10-01 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/README:
- * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
- (gst_decode_bin_init), (find_compatibles), (close_pad_link),
- (try_to_link_1), (no_more_pads), (close_link), (type_found):
- Add some debug info to decodebin, update README
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/dvdnav/dvdnavsrc.c: (dvdnav_handle_navigation_event):
- Don't use g_print(); use GST_DEBUG().
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_queue_pads):
- Handle EOS properly.
-
-2004-10-01 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_sinkconnect),
- (gst_faad_chain), (gst_faad_change_state):
- * ext/faad/gstfaad.h:
- Allow playback of raw (unframed) MPEG AAC files (#148993).
-
-2004-10-01 Sebastien Cote <sc5@hermes.usherb.ca>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
- Throw error if we didn't recognize the stream. Fixes #152289.
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
- Fix negotiation.
-
-2004-10-01 Francis Labonte <francis_labonte@hotmail.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
- Fix memleak.
-
-2004-10-01 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
-
- Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_setparams):
- Solve #152805.
- * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_mute):
- Solve 152806.
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_audio_caps_with_data):
- Add codec_data handling (like asfdemux used to do).
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
- Use riff-media for caps creation instead of our own (mostly
- broken) copy of its functions.
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_capture):
- Don't actually error out if we get another return value than
- -EINVAL. Opposite to what I first thought, drivers have random
- return values for this, although -EINVAL is the expected return
- value. Since this is not fatal, we shouldn't use
- GST_ELEMENT_ERROR() but just GST_ERROR_OBJECT().
-
-2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
- (dvdreadsrc_init), (dvdreadsrc_dispose), (dvdreadsrc_set_property),
- (dvdreadsrc_get_property), (_open), (_seek), (_read),
- (dvdreadsrc_get), (dvdreadsrc_open_file),
- (dvdreadsrc_change_state):
- Fix. Don't do one big huge loop around the whole DVD, that will
- cache all data and thus eat sizeof(dvd) (several GB) before we
- see something.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
- Actually NULL'ify event after using it.
- * gst/matroska/ebml-read.c: (gst_ebml_read_use_event),
- (gst_ebml_read_handle_event), (gst_ebml_read_element_id),
- (gst_ebml_read_element_length), (gst_ebml_read_element_data),
- (gst_ebml_read_seek), (gst_ebml_read_skip):
- Handle events.
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
- (gst_dvd_demux_init), (gst_dvd_demux_get_audio_stream),
- (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_plugin_init):
- Fix timing (this will probably break if I seek using menus, but
- I didn't get there yet). VOBs and normal DVDs should now work.
- Add a mpeg2-only pad with high rank so this get autoplugged for
- MPEG-2 movies.
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_base_init),
- (gst_mpeg_demux_class_init), (gst_mpeg_demux_init),
- (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream),
- (gst_mpeg_demux_get_private_stream), (gst_mpeg_demux_parse_packet),
- (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_plugin_init):
- Use this as second rank for MPEG-1 and MPEG-2. Still use this for
- MPEG-1 but use dvddemux for MPEG-2.
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
- (gst_mpeg_parse_init), (gst_mpeg_parse_new_pad),
- (gst_mpeg_parse_parse_packhead):
- Timing. Only add pad template if it exists. Add sink template from
- class and not from ourselves. This means we will always use the
- correct sink template even if it is not the one defined in this
- file.
-
-2004-09-29 Wim Taymans <wim@fluendo.com>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_packet),
- (gst_mpeg_demux_parse_pes):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
- Fix playback of mpeg again, timestamps where screwed up by
- patch 1.61.
-
-2004-09-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_src_query):
- Only return true if we actually filled something in. Prevents
- player applications from showing a random length for flac files.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
- (gst_riff_read_use_event), (gst_riff_read_handle_event),
- (gst_riff_read_seek), (gst_riff_read_skip), (gst_riff_read_strh),
- (gst_riff_read_strf_vids_with_data),
- (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_iavs):
- OK, ok, so I implemented event handling. Apparently it's normal
- that we receive random events at random points without asking
- for it.
- * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
- (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
- (gst_avi_demux_handle_src_event), (gst_avi_demux_stream_index),
- (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
- (gst_avi_demux_massage_index), (gst_avi_demux_stream_header),
- (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry),
- (gst_avi_demux_stream_data), (gst_avi_demux_loop):
- * gst/avi/gstavidemux.h:
- Implement non-lineair chunk handling and subchunk processing.
- The first solves playback of AVI files where the audio and video
- data of individual buffers that we read are not synchronized.
- This should not happen according to the wonderful AVI specs, but
- of course it does happen in reality. It is also a prerequisite for
- the second. Subchunk processing allows us to cut chunks in small
- pieces and process each of these pieces separately. This is
- required because I've seen several AVI files with incredibly large
- audio chunks, even some files with only one audio chunk for the
- whole file. This allows for proper playback including seeking.
- This patch is supposed to fix all AVI A/V sync issues.
- * gst/flx/gstflxdec.c: (gst_flxdec_class_init),
- (flx_decode_chunks), (flx_decode_color), (gst_flxdec_loop):
- Work.
- * gst/modplug/gstmodplug.cc:
- Proper return value setting for the query() function.
- * gst/playback/gstplaybasebin.c: (setup_source):
- Being in non-playing state (after, e.g., EOS) is not necessarily
- a bad thing. Allow for that. This fixes playback of short files.
- They don't actually playback fully now, because the clock already
- runs. This means that small files (<500kB) with a small length
- (<2sec) will still not or barely play. Other files, such as mod
- or flx, will work correctly, however.
-
-2004-09-28 Wim Taymans <wim@fluendo.com>
-
- * ext/speex/gstspeex.c: (plugin_init):
- * ext/speex/gstspeexdec.c: (gst_speex_dec_base_init),
- (gst_speex_dec_class_init), (speex_dec_get_formats),
- (speex_get_event_masks), (speex_get_query_types),
- (gst_speex_dec_init), (speex_dec_convert), (speex_dec_src_query),
- (speex_dec_src_event), (speex_dec_event), (speex_dec_chain),
- (gst_speexdec_get_property), (gst_speexdec_set_property),
- (speex_dec_change_state):
- * ext/speex/gstspeexdec.h:
- * ext/speex/gstspeexenc.c: (gst_speexenc_get_formats),
- (gst_speexenc_get_type), (speex_caps_factory), (raw_caps_factory),
- (gst_speexenc_base_init), (gst_speexenc_class_init),
- (gst_speexenc_sinkconnect), (gst_speexenc_convert_src),
- (gst_speexenc_convert_sink), (gst_speexenc_get_query_types),
- (gst_speexenc_src_query), (gst_speexenc_init),
- (gst_speexenc_get_tag_value), (comment_init), (comment_add),
- (gst_speexenc_metadata_set1), (gst_speexenc_set_metadata),
- (gst_speexenc_setup), (gst_speexenc_buffer_from_data),
- (gst_speexenc_push_buffer), (gst_speexenc_set_header_on_caps),
- (gst_speexenc_chain), (gst_speexenc_get_property),
- (gst_speexenc_set_property), (gst_speexenc_change_state):
- * ext/speex/gstspeexenc.h:
- Rewrote speex encoder, make sure it can be embedded in ogg.
- Implemented speex decoder.
-
-2004-09-28 Christian Schaller <christian@fluendo.com>
-
- * configure.ac:
- Remove kioslave plugin. Markey is brewing a new working one
- * ext/Makefile.am: Remove kioslave plugin
- * ext/kio: remove
- * gst-plugins.spec.in: remove kio plugin from spec
-
-2004-09-27 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
- (is_sync_frame), (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_new_client),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients):
- * gst/tcp/gstmultifdsink.h:
- Make syncing to keyframes actually work for new clients and lagging
- clients.
-
-2004-09-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/debug/gstnavigationtest.c: (gst_navigationtest_class_init),
- (gst_navigationtest_handle_src_event), (draw_box_planar411),
- (gst_navigationtest_planar411), (gst_navigationtest_change_state):
- * gst/debug/gstnavigationtest.h:
- make navigationtest display button-press and button-release events
-
-2004-09-26 Iain <iaingnome@gmail.com>
-
- * gst/interleave/interleave.c (all_channels_new_media): Checks if all
- the channels have received a new media event.
- (interleave_buffered_loop): Compresses a new media event on all
- channels into one.
-
-2004-09-26 Iain <iaingnome@gmail.com>
-
- * gst/wavenc/gstwavenc.c (gst_wavenc_chain): Company says we need to
- call the sinkpad's default event handler and not the srcpads. He also
- says this is confusing :)
- (gst_wavenc_stop_file): Company says that seek events only go upstream
- we should send a discontinuous downstream instead.
-
-2004-09-25 Christian Schaller <christian@fluendo.com>
-
- * Update SPEC file to be usable in conjunction with Fedora Core,
- Fedora.us and freshrpms packages
- * Fix typo in multifilesrc test Makefile
-
-2004-09-24 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (new_decoded_pad):
- Only signal the no_more_pads signal when we have
- added the stream to our list.
-
-2004-09-24 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (remove_prerolls),
- (new_decoded_pad):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (setup_sinks):
- Don't try to preroll or decode more than one audio/video
- track.
-
-2004-09-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
- Throw error if we failed to find a suitable output. This should
- throw an error if we successfully set up a pipeline (e.g. because
- we recognized a media file) but found no decodable streams in it
- (e.g. because it contains only media stream types for which we
- have no decoders, or because it's not a media type).
-
-2004-09-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/dirac/Makefile.am:
- * ext/dirac/gstdirac.cc:
- * ext/dirac/gstdiracdec.cc:
- * ext/dirac/gstdiracdec.h:
- Do something. Don't actually know if this works because I don't
- have a demuxer yet.
- * ext/gsm/gstgsmdec.c: (gst_gsmdec_getcaps):
- Add channels=1 to caps returned from _getcaps().
- * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_get_type),
- (gst_ogm_video_parse_get_type), (gst_ogm_audio_parse_base_init),
- (gst_ogm_video_parse_base_init), (gst_ogm_parse_init),
- (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init),
- (gst_ogm_parse_sink_convert), (gst_ogm_parse_chain),
- (gst_ogm_parse_change_state):
- Separate between audio/video so ogmaudioparse actually uses the
- audio pad templates. Both audio and video work now, including
- autoplugging. Also use sometimes-srcpad hack.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
- Handle events better. Don't hang on infinite loops.
- * gst/avi/gstavidemux.c: (gst_avi_demux_class_init),
- (gst_avi_demux_init), (gst_avi_demux_reset),
- (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
- (gst_avi_demux_stream_header), (gst_avi_demux_stream_data),
- (gst_avi_demux_change_state):
- * gst/avi/gstavidemux.h:
- Improve A/V sync. Still not perfect.
- * gst/matroska/ebml-read.c: (gst_ebml_read_seek),
- (gst_ebml_read_skip):
- Handle events better.
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
- (gst_qtdemux_loop_header), (qtdemux_parse_trak),
- (qtdemux_audio_caps):
- Add IMA4. Improve event handling. Save offset after a seek when
- the headers are at the end of the file so that we don't end up in
- an infinite loop.
- * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
- Add low-priority typefind support for files with no length.
-
-2004-09-23 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * testsuite/multifilesink/Makefile.am:
- fix typo
-
-2004-09-22 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls): Fix
- mistakes from thaytan's patches.
-
-2004-09-23 Jan Schmidt <thaytan@mad.scientist.com>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
- For completeness, XSync in the destroy function as xvimage does.
-
-2004-09-23 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
- Correct caps negotiation
- * gst/volume/gstvolume.c: (volume_chain_float),
- (volume_chain_int16):
- Modify debug output to be little more informative
- * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_destroy):
- Add XSync calls after detaching from the shared memory segment to
- avoid a crash.
-
-2004-09-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
- (gst_ogg_mux_next_buffer), (gst_ogg_mux_loop):
- * ext/vorbis/vorbis.c: (plugin_init):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
- (gst_vorbisenc_chain):
- * ext/vorbis/vorbisenc.h:
- remove explicit newmedia support from oggmux and vorbisenc
- add debug category to vorbisenc
- * gst/multifilesink/gstmultifilesink.c:
- (gst_multifilesink_class_init), (gst_multifilesink_init),
- (gst_multifilesink_dispose), (gst_multifilesink_set_location),
- (gst_multifilesink_set_property), (gst_multifilesink_next_file),
- (gst_multifilesink_handle_event), (gst_multifilesink_chain),
- (plugin_init):
- * gst/multifilesink/gstmultifilesink.h:
- add support for streamheader in multifilesink
-
-2004-09-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (_read_var_length), (_read_guid),
- (gst_asf_demux_process_segment), (gst_asf_demux_handle_data),
- (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event):
- Prevent infinite loops. More correct error reporting.
- * gst/auparse/gstauparse.c: (gst_auparse_chain):
- Error out if negotiation fails.
- * gst/playback/gstplaybasebin.c: (setup_source),
- (gst_play_base_bin_change_state), (gst_play_base_bin_error),
- (gst_play_base_bin_found_tag):
- Error/tag forwarding. Pre-roll fixes for source errors on state
- changes (e.g. "file does not exist") to prevent hangs.
-
-2004-09-21 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * testsuite/multifilesink/Makefile.am:
- * testsuite/multifilesink/lame_test.c: (gst_newmedia_base_init),
- (gst_newmedia_class_init), (gst_newmedia_init),
- (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
- (newfile_signal), (test_signal), (main):
- * testsuite/multifilesink/multifilesrc_test.c: (main):
- * testsuite/multifilesink/oggtheora_test.c:
- (gst_newmedia_base_init), (gst_newmedia_class_init),
- (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
- (test_format), (newfile_signal), (test_signal), (main):
- * testsuite/multifilesink/oggvorbis_test.c:
- (gst_newmedia_base_init), (gst_newmedia_class_init),
- (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
- (test_format), (newfile_signal), (test_signal), (main):
- * testsuite/multifilesink/wavenc_test.c: (gst_newmedia_base_init),
- (gst_newmedia_class_init), (gst_newmedia_init),
- (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
- (newfile_signal), (test_signal), (main):
- New media tests
-
-2004-09-20 Christian Schaller <christian@fluendo.com>
-
- * Fix mikmod license to LGPL as they have relicensed
- * Move Dirac and Effectv into LGPL section of README_license
-
-2004-09-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_check_caps_reset),
- (gst_mad_change_state):
- Allow for mp3 rate/channels changes. However, only very
- conservatively. Reason that we *have* to enable this is smiply
- because the mad find_sync() function is not good enough, it will
- regularly sync on random data as valid frames and therefore make
- us provide random caps as *final* caps of the stream. The best fix
- I could think of is to simply require several of the same stream
- changes in a row before we change caps.
- The actual testcase that works now is #
- * ext/ogg/Makefile.am:
- * ext/ogg/gstogg.c: (plugin_init):
- * ext/ogg/gstogmparse.c:
- OGM support (video only for now; I need an audio sample file).
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
- (gst_asf_demux_process_stream), (gst_asf_demux_video_caps),
- (gst_asf_demux_add_video_stream):
- WMV extradata.
- * gst/playback/gstplaybasebin.c: (unknown_type):
- Don't error out on single unknown-types after all. It's wrong.
- If we found type of video and audio but not of a subtitle stream,
- it will still error out (which is unwanted). Will find a better fix
- later on.
- * gst/typefind/gsttypefindfunctions.c: (ogmvideo_type_find),
- (ogmaudio_type_find), (plugin_init):
- OGM support.
-
-2004-09-20 Johan Dahlin <johan@gnome.org>
-
- * ext/jpeg/gstjpegdec.c (gst_jpegdec_chain): Allocate the buffer
- after setting caps.
-
-2004-09-19 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/wavenc/gstwavenc.c: (gst_wavenc_init), (gst_wavenc_chain):
- * gst/wavenc/gstwavenc.h:
- Added newmedia support to wavenc
-
-2004-09-17 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (gst_fdset_fd_has_closed),
- (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
- (gst_fdset_fd_can_write), (gst_fdset_wait):
- * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type),
- (gst_multifdsink_init), (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_get_stats),
- (gst_multifdsink_remove_client_link),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_handle_clients),
- (gst_multifdsink_close), (gst_multifdsink_change_state):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
- (gst_tcpserversink_removed):
- Small cleanups in fdset.c
- Use a hastable to map fd to the client structure for faster
- lookup in _remove and get_stats.
- Added virtual function to close the fds.
- Handle clients even when the select/poll call was unblocked because
- of a command.
- Implement syncing to keyframe in the recovery procedure.
-
-2004-09-16 Iain <iaingnome@gmail.com>
-
- * gst/audioconvert/gstaudioconvert.c (_fixate_caps_to_int): Free the
- try caps.
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream):
- Caps are only set if the type of the stream is unknown, but this
- is initialized in ->init_stream(), so set to UNKNOWN after calling
- ->init_stream() so that capsnego starts.
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
- (gst_avi_demux_stream_data):
- Just hardcode for raw audio then. AVI audio sucks.
-
-2004-09-15 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
- * gst/matroska/matroska-mux.c: (audiosink_templ),
- (gst_matroska_mux_audio_pad_link):
- * gst/typefind/gsttypefindfunctions.c: (tta_caps), (plugin_init):
- Use audio/x-ttafile for tta files and audio/x-tta for raw tta frames.
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
- (gst_avi_demux_stream_data):
- Try to fix a/v sync issues.
-
-2004-09-15 David Schleef <ds@schleef.org>
-
- * configure.ac: remove NASM check, since we don't use it. Update
- dirac check to 0.4
- * ext/dirac/gstdiracdec.cc: update to current 0.4 API
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- Initialized variables.
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_loop_header), (qtdemux_parse), (qtdemux_parse_trak),
- (gst_qtdemux_handle_esds), (qtdemux_audio_caps): Fix seeking, add
- SVQ3 format
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
- (gst_avi_demux_add_stream), (gst_avi_demux_stream_data):
- * gst/avi/gstavidemux.h:
- Fix for compressed audio (mp3) timestamp generation. How did this
- ever work?
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
- Volume is a double not a float.
-
-2004-09-15 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_remove_client_link),
- (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
- Don't close the fd in multifdsink as we didn't open it in the
- first place. Some cleanups.
-
-2004-09-15 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
- Fix the case where the muxer would mark pages as delta
- frames when they are not (vorbis only ogg).
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c: (state_change), (setup_source),
- (gst_play_base_bin_change_state):
- Handle the case where we failed to setup a clear pipeline. This
- will throw an error (or EOS, another nice case) and if you don't
- catch that, the app will wait for the signal forever (and thus
- hang).
-
-2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssink.c:
- (gst_gnomevfssink_uri_get_protocols):
- * ext/gnomevfs/gstgnomevfssrc.c:
- (gst_gnomevfssrc_uri_get_protocols):
- * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
- * ext/gnomevfs/gstgnomevfsuri.h:
- Use _uri_new() instead of _open(), so it doesn't take as long and
- Christophe's computer won't hang.
- * gst/playback/gstplaybasebin.c: (unknown_type):
- Throw error on unknown media type, so apps actually display it.
-
-2004-09-14 Brian Cameron <brian.cameron@sun.com
-
- * tools/gst-launch-ext-m.m: Changed ~ to $ENV{HOME} to allow
- this script to work on Solaris since bash shell handles echo
- differenly than bash.
-
-2004-09-17 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstplaybasebin.c: (queue_overrun), (no_more_pads),
- (setup_source), (gst_play_base_bin_set_property),
- (gst_play_base_bin_add_element):
- * gst/playback/gstplaybin.c: (gst_play_bin_send_event):
- Some more work on making sure seeking pauses the pipeline and
- that changing the uri actually does something.
-
-2004-09-17 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (gst_fdset_wait):
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_close):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send),
- (gst_tcpserversink_close):
- Be a bit more paranoid when freeing memory.
-
-2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
- (qtdemux_parse_trak):
- Don't crash by dividing by zero (see sample movie in #126922).
-
-2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
- Don't touch non-existing data (fixes crash on file in #140147).
-
-2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/playback/gstplaybasebin.c:
- (gst_play_base_bin_dispose), (gst_play_base_bin_set_property):
- Handle double disposals, and proper change of URIs.
-
-2004-09-13 Martin Eikermann <meiker@upb.de>
-
- * gst/mpegstream/gstmpegparse.c:
- fix synchronistation for streams recorded from digital PCR
- fixes bug #119376
-
-2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/Makefile.am:
- * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_get_type),
- (gst_gnomevfssink_dispose), (gst_gnomevfssink_init),
- (gst_gnomevfssink_uri_get_type),
- (gst_gnomevfssink_uri_get_protocols),
- (gst_gnomevfssink_uri_get_uri), (gst_gnomevfssink_uri_set_uri),
- (gst_gnomevfssink_uri_handler_init),
- (gst_gnomevfssink_set_property), (gst_gnomevfssink_get_property),
- (gst_gnomevfssink_open_file), (gst_gnomevfssink_close_file):
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_type),
- (gst_gnomevfssrc_init), (gst_gnomevfssrc_dispose),
- (gst_gnomevfssrc_uri_get_type),
- (gst_gnomevfssrc_uri_get_protocols), (gst_gnomevfssrc_uri_get_uri),
- (gst_gnomevfssrc_uri_set_uri), (gst_gnomevfssrc_uri_handler_init),
- (gst_gnomevfssrc_set_property), (gst_gnomevfssrc_get_property),
- (gst_gnomevfssrc_open_file), (gst_gnomevfssrc_close_file):
- * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
- * ext/gnomevfs/gstgnomevfsuri.h:
- Add URI support to Gnome-VFS plugins. Tries to load a fixed list
- of fake URIs to see which this version of Gnome-VFS likes, and
- uses that for the Gst-URI interface. Makes playbin support http://
- streams. Also fix up some stupid behaviour in gnomevfssrc.
-
-2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
- (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
- (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
- (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
- Update mixer (to sync with other sessions) if we try to obtain
- a new value. This makes alsamixer work accross applications.
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
- Only call sync functions if we're running, else alsalib asserts.
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
- Sometimes fails to compile. Possibly a gcc bug.
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element):
- Add a reference to an application-provided object, because we lose
- this same reference if we add it to the bin. If we don't do this,
- we can only use this object once and thus crash if we go from
- ready to playing, back to ready and back to playing again.
- Also add an audioscale element because several cheap soundcards -
- like mine - don't support all samplerates.
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
- (gst_ximagesink_xcontext_clear), (gst_ximagesink_change_state):
- Fix wrong order or PAR calls. Makes automatically obtained PAR
- from the X server atually being used.
-
-2004-09-12 David Schleef <ds@schleef.org>
-
- Fixes: #151879, #151881, #151882, #151883, #151884, #151886,
- #151887, #152102, #152247.
- * examples/indexing/indexmpeg.c: 64-bit warning fixes.
- * examples/seeking/cdparanoia.c: same
- * examples/seeking/cdplayer.c: same
- * examples/seeking/seek.c: same
- * examples/seeking/spider_seek.c: same
- * examples/seeking/vorbisfile.c: same
- * examples/stats/mp2ogg.c: same
- * ext/esd/esdsink.c: (gst_esdsink_class_init),
- (gst_esdsink_dispose): Dispose of element properly.
- * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_seek): 64-bit warning
- fixes.
- * ext/nas/nassink.c: (gst_nassink_class_init),
- (gst_nassink_dispose): Dispose of element correctly.
- * gst/wavenc/gstwavenc.c: (gst_wavenc_chain): Fix leak.
- * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
- (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
- Fix 64-bit warning.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
- Fix 64-bit warning.
-
-2004-09-12 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * configure.ac : change speex detection as 1.1.6 now uses
- .pc/pkg-config and they changed their headers location.
-
-2004-09-09 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/matroska-mux.h:
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset),
- (gst_matroska_mux_start), (gst_matroska_mux_finish),
- (gst_matroska_mux_write_data):
- Write multiple blocks/frames per cluster.
- Write meta-seek information (seek heads).
-
-2004-09-09 Scott Wheeler <wheeler@kde.org>
-
- * gst/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_set_property), (gst_play_bin_get_property),
- (gen_audio_element), (gen_audio_element):
- Add a volume element / property to the pipeline.
-
-2004-09-07 Wim Taymans <wim@fluendo.com>
-
- * gst/videomixer/videomixer.c: (gst_videomixer_blend_buffers):
- Copy timestamps from the master pad to the output buffers.
-
-2004-09-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/raw1394/gstdv1394src.c:
- throw errors when applicable
-
-2004-09-01 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/ebml-ids.h:
- * gst/matroska/ebml-read.c: (gst_ebml_read_date):
- * gst/matroska/ebml-write.c: (gst_ebml_write_date):
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_finish):
- automatically convert unix time <-> ebml time when reading/writing
- a date, use gst_ebml_write_uint to write CUETIME,
- not gst_ebml_write_date.
- * gst/matroska/matroska-ids.h:
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_create_uid),
- (gst_matroska_mux_reset), (gst_matroska_mux_audio_pad_link),
- (gst_matroska_mux_track_header), (gst_matroska_mux_start),
- (gst_matroska_mux_write_data):
- Write track and segment UIDs, write muxing date, write
- TRACKDEFAULTDURATION for TTA audio, write BLOCKDURATION if known.
- Create cues for audio only files.
-
-2004-08-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
- Re-commit ALSA switches.
- * gst/adder/gstadder.c: (gst_adder_loop):
- 64-bit fix (#151416).
- * gst/debug/progressreport.c: (gst_progressreport_report):
- 64-bit fix (#151419).
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_contents):
- 64-bit fix (#151420).
- * gst/playback/test3.c: (update_scale):
- 64-bit fix (#151421).
-
-2004-08-31 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- bump nano to cvs
-
-=== release 0.8.4 ===
-
-2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: releasing 0.8.4, "Alias"
-
-2004-08-31 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/theora/Makefile.am:
- fix makefile. Fixes #151462.
-
-2004-08-30 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_wait):
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
- (gst_multifdsink_remove_client_link),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write):
- * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
- Fix some memory leaks.
-
-2004-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- Patch by: David Schleef
-
- * configure.ac:
- * sys/Makefile.am:
- rename our detection macro for V4L2. Fixes #151236.
-
-2004-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- Patch by: David Schleef
-
- * configure.ac:
- check to define LAMEPRESET. Fixes #151232.
-
-2004-08-27 David Schleef <ds@schleef.org>
-
- * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),
- (gst_glimagesink_xwindow_new), (gst_glimagesink_xcontext_get),
- (gst_glimagesink_fixate): Move local variable declarations to
- make gcc-2.95 happy.
-
-2004-08-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- bump nano for prerelease
-
-2004-08-27 David Schleef <ds@schleef.org>
-
- * sys/sunaudio/Makefile.am: Add sunaudiosrc patch from Bala
- * sys/sunaudio/gstsunaudiosrc.c:
- * sys/sunaudio/gstsunaudiosrc.h:
-
-2004-08-27 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/ebml-read.c: (gst_ebml_peed_id), (gst_ebml_read_element_id),
- handle EOS correctly
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_video_pad_link):
- * gst/matroska/matroska-mux.h:
- added BITMAPINFOHEADER structure, mux video/x-divx and video/x-xvid in
- VFW compatibility mode
-
-2004-08-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Zaheer Abbas Merali
-
- * ext/ogg/gstoggmux.c:
- * ext/vorbis/vorbisenc.c:
- * ext/vorbis/vorbisenc.h:
- handle NEWMEDIA
-
-2004-08-26 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/ebml-write.c: (gst_ebml_write_float),
- fix byte order reversion on little endian machines.
- * gst/matroska/matroska-mux.c: (audiosink_templ),
- (gst_matroska_mux_audio_pad_link):
- add TTA codec to the list of supported codecs.
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_init),
- (gst_matroska_mux_start), (gst_matroska_mux_finish),
- (gst_matroska_mux_write_data):
- * gst/matroska/matroska-mux.h:
- write segment duration correctly, write muxing app string, fixes bugs
- #140897 and #140898.
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_loop),
- wait for all pads to be negotiated before starting to mux.
-
-2004-08-26 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain):
- * ext/lame/gstlame.h:
- Added new media support to lame
-
-2004-08-25 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup),
- send vorbis headers at the beginning of a stream, fixes bug #141554.
- Interpret BLOCKDURATION and set buffer duration accordingly, fixes
- bug #148950.
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps),
- (gst_matroska_demux_plugin_init):
- * gst/matroska/matroska-ids.h:
- enable demuxing of TTA audio streams, fixes bug #148951.
- * gst/typefind/gsttypefindfunctions.c: (tta_type_find), (plugin_init),
- enable typefinding for TTA audio files, fixes bug #148711.
- * ext/xvid/gstxviddec.c: (gst_xviddec_chain),
- set XVID_LOWDELAY flag for decoding so xvid always returns an image,
- fixes playback of packed bitstream and xvid with bframes, bug #135407.
-
-2004-08-24 Sebastien Cote <sc5@hermes.usherb.ca>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
- (gst_riff_read_element_data), (gst_riff_read_seek),
- (gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
- #144616, patch reviewed by Ronald and committed by Christophe Fergeau
- <teuf@gnome.org>
-
-2004-08-23 Iain <iaingnome@gmail.com>
-
- * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM
- tags. They appear to be handled differently to normal.
- (tag_list_to_id3_tag_foreach): Ditto.
-
-2004-08-22 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
- Make sure we never send -1 granulepos.
-
-2004-08-20 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_loop):
- I will accept bitchslappings with non sharp objects.
-
-2004-08-20 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- Clean up the test for lame presets
-
-2004-08-19 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- * ext/lame/Makefile.am:
- * ext/lame/gstlame.c: (gst_lame_class_init),
- (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
- Only enable lame presets if version of lame has presets in API
-
-2004-08-19 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/udp/gstudpsrc.c: (gst_udpsrc_init), (gst_udpsrc_get):
- * gst/udp/gstudpsrc.h:
- Don't call gst_pad_push in a get function. Fixes #150449
-
-2004-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_set_mode),
- (gst_fdset_get_mode), (gst_fdset_add_fd), (gst_fdset_remove_fd),
- (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
- (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
- (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
- (gst_fdset_wait):
- * gst/tcp/gstfdset.h:
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write):
- * gst/tcp/gstmultifdsink.h:
- Some extra checks in gstfdset.
- Only use send() when the fd is a socket. Don't try to
- read from write only fds.
-
-2004-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (gst_fdset_add_fd), (gst_fdset_remove_fd),
- (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
- (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
- (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
- (gst_fdset_wait):
- Add more locking and bounds checking.
-
-2004-08-18 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_wait):
- Realloc test fdset in the lock and right before starting
- the poll call. Bump the limit to 4096.
-
-2004-08-17 David Schleef <ds@schleef.org>
-
- * sys/sunaudio/Makefile.am:
- * sys/sunaudio/gstsunaudio.c: Fix caps to handle full range
- of rates and channels. Make debugging less obnoxious.
-
- Patch from Balamurali Viswanathan implementing a mixer for
- Sun audio. (bug #144091):
- * sys/sunaudio/gstsunelement.c:
- * sys/sunaudio/gstsunelement.h:
- * sys/sunaudio/gstsunmixer.c:
- * sys/sunaudio/gstsunmixer.h:
-
-2004-08-17 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/audioscale/gstaudioscale.c:
- * gst/audioscale/gstaudioscale.h:
- made audioscale resample from any sample rate to any sample rate
-
-2004-08-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/libpng/gstpngdec.c:
- error out on unsupported types
-
-2004-08-17 Iain <iaingnome@gmail.com>
-
- * ext/flac/gstflacenc.c (gst_flacenc_update_quality): Only set the
- mid_side and loose_mid_side properties if its a stereo stream.
-
-2004-08-17 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (gst_theora_dec_class_init),
- (theora_get_formats), (theora_dec_src_convert),
- (theora_dec_sink_convert), (theora_dec_src_query),
- (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
- Add a debug line.
-
-2004-08-17 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate),
- (gst_ogg_pad_push):
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
- (gst_ogg_mux_request_new_pad), (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_buffer_from_page), (gst_ogg_mux_push_page),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
- Mark delta units in the muxer.
- Try to decode the packet after an out-of-sync error from
- libogg.
-
-2004-08-17 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_init), (gst_multifdsink_add),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_set_property), (gst_multifdsink_get_property):
- * gst/tcp/gstmultifdsink.h:
- Added option to send a keyframe to clients as the first buffer.
- Make timeout property writable.
-
-2004-08-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch by: Wim Taymans
-
- * gst/tcp/gstfdset.c:
- * gst/tcp/gstmultifdsink.c:
- fix index comparison, should include 0
-
-2004-08-16 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_new),
- (gst_fdset_add_fd), (gst_fdset_remove_fd),
- (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
- (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
- (gst_fdset_wait):
- copy when reallocing for poll so the select arguments don't get
- changed during the call
-
-2004-08-16 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_border_mode_get_type),
- (gst_theora_enc_class_init), (theora_enc_sink_link),
- (theora_buffer_from_packet), (theora_enc_chain):
- Fix bug where buffers were not marked as keyframes
- correctly.
-
-2004-08-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
- (gst_lame_preset_get_type), (gst_lame_class_init):
- describe the enum values for vbr mode and presets more verbosely
-
-2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_mode_get_type),
- (gst_lame_quality_get_type), (gst_lame_padding_get_type),
- (gst_lame_preset_get_type), (gst_lame_class_init), (gst_lame_init),
- (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
- * ext/lame/gstlame.h:
- add preset property to lame so it can use lame presets
-
-2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_get_property):
- whoops forgot break, thanks teuf
-
-2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
- (gst_lame_class_init), (gst_lame_src_getcaps),
- (gst_lame_sink_link), (gst_lame_init), (gst_lame_set_property),
- (gst_lame_get_property), (gst_lame_setup):
- * ext/lame/gstlame.h:
- fix lame's broken vbr stuff, allow it to resample if need be, and also
- make xing header optional
-
-2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_src_getcaps), (gst_lame_init):
- added getcaps function so samplerate doesnt get fixated to silly values
-
-2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_src_link):
- revert previous fix
-
-2004-08-12 Johan Dahlin <johan@gnome.org>
-
- * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Remove bogus
- checks. Doesn't matter what state we are in. Interfaces are a
- compile time thing, not runtime. It also broke the python bindings.
-
-2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_src_link):
- made source pad link function check if sinkpad is ok..fixes the problem
- where core fixates the output rate of lame stupidly
-
-2004-08-12 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_fixate):
- * sys/v4l/v4l_calls.c:
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_set_capture):
- fix fixate function to handle nonsimple caps.
- remove bogus check in _link
- cleanups
-
-2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init):
- set default compression ratio parameter to 0.0 so bitrate parameter
- works :)
-
-2004-08-11 David Schleef <ds@schleef.org>
-
- * gst/tcp/gstfdset.c: Fix compile problem on OS/X.
-
-2004-08-11 David Schleef <ds@schleef.org>
-
- * gst/mpeg1sys/gstmpeg1systemencode.c: Oops, this was correct
- before.
-
-2004-08-11 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/video/videosink.h: Change copyright block to LGPL.
-
-2004-08-11 David Schleef <ds@schleef.org>
-
- * ext/pango/gsttextoverlay.c: Add copyright block and fix plugin
- license field
- * gst-libs/gst/idct/Makefile.am: Remove mmx/sse code
- * gst-libs/gst/video/gstvideosink.c: Change copyright block to
- LGPL.
- * gst/auparse/gstauparse.c: Fix plugin license field.
- * gst/monoscope/gstmonoscope.c: Fix plugin license field.
- * gst/mpeg1sys/gstmpeg1systemencode.c: Fix plugin license field.
- * gst/rtp/gstrtp.c: Fix plugin license field.
-
-2004-08-11 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/gstfdset.c: (gst_fdset_mode_get_type), (nearest_pow),
- (ensure_size), (gst_fdset_new), (gst_fdset_free),
- (gst_fdset_set_mode), (gst_fdset_get_mode), (gst_fdset_add_fd),
- (gst_fdset_remove_fd), (gst_fdset_fd_ctl_write),
- (gst_fdset_fd_ctl_read), (gst_fdset_fd_has_closed),
- (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
- (gst_fdset_fd_can_write), (gst_fdset_wait):
- * gst/tcp/gstfdset.h:
- * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
- (gst_multifdsink_class_init), (gst_multifdsink_init),
- (gst_multifdsink_add), (gst_multifdsink_remove),
- (gst_multifdsink_clear), (gst_multifdsink_get_stats),
- (gst_multifdsink_remove_client_link),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_client_queue_data),
- (gst_multifdsink_client_queue_caps),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
- (gst_multifdsink_get_property), (gst_multifdsink_init_send),
- (gst_multifdsink_close):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
- (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_handle_wait), (gst_tcpserversink_init_send),
- (gst_tcpserversink_close):
- * gst/tcp/gsttcpserversink.h:
- Abstracted away the select call, implemented poll (yes we ran into
- the 1024 limit in production).
-
-2004-08-11 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcpplugin.c:
- improve debuggging, remove assert
-
-2004-08-10 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
- (gst_client_status_get_type), (gst_multifdsink_class_init),
- (gst_multifdsink_init), (gst_multifdsink_remove_client_link),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
- (gst_multifdsink_get_property):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcp-marshal.list:
- Starting to prepare for specifying buffer time in other units
- than buffers. Expose remove reason in signal.
-
-2004-08-10 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_clear),
- (gst_multifdsink_remove_client_link),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_client_queue_data),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients),
- (gst_multifdsink_chain), (gst_multifdsink_close):
- * gst/tcp/gstmultifdsink.h:
- Added more debugging info. Changed the way clients are
- removed from the lists. Fixed a bug where a bad file descriptor
- could cause many clients to be removed.
-
-2004-08-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/videotestsrc/gstvideotestsrc.c: (generate_capslist):
- allow all pixel-aspect-ratios, not just 1:1
-
-2004-08-09 David Schleef <ds@schleef.org>
-
- * sys/glsink/ARB_multitexture.h: Remove old files.
- * sys/glsink/EXT_paletted_texture.h:
- * sys/glsink/NV_register_combiners.h:
- * sys/glsink/gstgl_nvimage.c:
- * sys/glsink/gstgl_pdrimage.c:
- * sys/glsink/gstgl_rgbimage.c:
- * sys/glsink/gstglsink.c:
- * sys/glsink/gstglsink.h:
- * sys/glsink/gstglxwindow.c:
- * sys/glsink/regcomb_yuvrgb.c:
-
-2004-08-09 David Schleef <ds@schleef.org>
-
- Patch from Gernot Ziegler <gz@lysator.liu.se> rewriting the
- GL sink plugin. (Bug #147302)
-
- * configure.ac: Test for OpenGL
- * sys/Makefile.am: Use test for OpenGL
- * sys/glsink/Makefile.am:
- * sys/glsink/glimagesink.c: rewrite
- * sys/glsink/glimagesink.h: rewrite
-
-2004-08-09 David Schleef <ds@schleef.org>
-
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_base_init): Only allow
- sane framerates.
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get): same
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support): same
- * testsuite/gst-lint: Test for G_GUINT64_FORMAT usage near gettext.
-
-2004-08-09 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_get_stats),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
- Do a bit more logging, make the client_read code more robust.
-
-2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init_source),
- (gst_jpegdec_fill_input_buffer), (gst_jpegdec_skip_input_data),
- (gst_jpegdec_resync_to_restart), (gst_jpegdec_term_source),
- (gst_jpegdec_init), (gst_jpegdec_chain):
- * gst/multipart/multipartdemux.c: (gst_multipart_demux_init),
- (gst_multipart_demux_chain), (gst_multipart_demux_change_state):
- cleanups, debugging fixes and memleak plugging
-
-2004-08-09 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (gst_theora_dec_class_init),
- (theora_get_formats), (theora_dec_src_convert),
- (theora_dec_sink_convert), (theora_dec_src_query),
- (theora_dec_src_event), (theora_dec_event), (theora_dec_chain),
- (theora_dec_change_state):
- Don't crash on missing header packets.
-
-2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/sq.po:
- Added Albanian translation (Laurent Dhima)
- * po/cs.po:
- updated
-
-2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/lame/gstlame.c:
- fix/add debugging
-
-2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c:
- * sys/xvimage/xvimagesink.c:
- assign all TOO_LAZY's to a real category. Thanks to Warthy Warthog.
-
-2004-08-06 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_get_stats),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
- Make sure we don't try to read more from a client that what
- ioctl says us or we deadlock.
-
-2004-08-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_src_link),
- (gst_videotestsrc_change_state), (gst_videotestsrc_src_query),
- (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
- decouple running_time and n_frames so it can handle changing
- framerate while running
-
-2004-08-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/nl.po:
- * po/sv.po:
- updated translations
-
-2004-08-04 Benjamin Otte <otte@gnome.org>
-
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_get_capslist), (generate_capslist),
- (plugin_init):
- generate the list of supported caps at startup and reuse it instead
- of always generating it
-
-2004-07-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link):
- whoops, last checkin broke normal build
-
-2004-08-03 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume),
- (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
- (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
- (gst_alsa_mixer_get_option):
- * ext/dvdnav/dvdnavsrc.c: (dvdnav_get_event_name),
- (dvdnavsrc_print_event):
- * ext/ogg/gstoggdemux.c: (_find_chain_process), (gst_ogg_print):
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_pad_link),
- (gst_ogg_mux_pad_unlink):
- * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link),
- (gst_multipart_mux_pad_unlink):
- * gst/videofilter/gstvideobalance.c:
- (gst_videobalance_colorbalance_set_value):
- * gst/videomixer/videomixer.c: (gst_videomixer_pad_link),
- (gst_videomixer_pad_unlink):
- * po/uk.po:
- * sys/oss/gstossmixer.c:
- * sys/v4l/gstv4lcolorbalance.c:
- * sys/v4l/gstv4ltuner.c:
- * sys/v4l/v4lsrc_calls.c:
- * sys/v4l2/gstv4l2colorbalance.c:
- * sys/v4l2/gstv4l2tuner.c:
- compile fixes for --disable-gst-debug, G_DISABLE_ASSERT and friends
-
-2004-08-03 Benjamin Otte <otte@gnome.org>
-
- * examples/dynparams/filter.c: (ui_control_create):
- * examples/gstplay/player.c: (print_tag):
- * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad):
- * ext/gdk_pixbuf/gstgdkanimation.c:
- (gst_gdk_animation_iter_may_advance):
- * ext/jack/gstjack.c: (gst_jack_request_new_pad):
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
- (tag_list_to_id3_tag_foreach), (gst_id3_tag_handle_event):
- * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_tag_value):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value):
- * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
- * gst-libs/gst/media-info/media-info-test.c: (print_tag):
- * gst/sine/demo-dparams.c: (main):
- * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
- * testsuite/alsa/formats.c: (create_pipeline):
- * testsuite/alsa/sinesrc.c: (sinesrc_force_caps), (sinesrc_get):
- fixes for G_DISABLE_ASSERT and friends
- * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
- (mp3_type_frame_length_from_header), (mp3_type_find),
- (plugin_init):
- require mp3 typefinding to have at least MIN_HEADERS valid headers
- add typefinding for AAC adts files
-
-2004-08-04 Jan Schmidt <thaytan@mad.scientist.com>
-
- * sys/ximage/ximagesink.c:
- (gst_ximagesink_calculate_pixel_aspect_ratio):
- * sys/xvimage/xvimagesink.c:
- (gst_xvimagesink_calculate_pixel_aspect_ratio):
- Make sure we calculate pixel-aspect-ratio using floating point maths
-
-2004-08-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/uk.po:
- updated translation
-
-2004-08-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get):
- add debugging for display PAR calculation
-
-2004-08-02 David Schleef <ds@schleef.org>
-
- * configure.ac: Fix mikmod CFLAGS.
-
-2004-07-27 Benjamin Otte <otte@gnome.org>
-
- * gst/audioscale/gstaudioscale.c:
- - fix templates to only support S16, it's the only format that works
- - make caps nego code use try_set_caps_nonfixed and fixation instead
- of try_set_caps twice, which is not nice for autopluggers
- - change rank to secondary, so autopluggers can pick it up after
- audioconvert
-
-2004-08-02 Iain <iain@prettypeople.org>
-
- * gst/interleave/interleave.c (interleave_init),
- (interleave_request_new_pad),
- (interleave_pad_removed),
- (interleave_buffered_loop): Use the real pad count, not the artificial
- one.
-
-2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: bump nano back to development
-
-=== release 0.8.3 ===
-
-2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: releasing 0.8.3, "Water"
-
-2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/xvimage/xvimagesink.c:
- (gst_xvimagesink_calculate_pixel_aspect_ratio),
- (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_sink_link),
- (gst_xvimagesink_change_state), (gst_xvimagesink_buffer_alloc),
- (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
- (gst_xvimagesink_init), (gst_xvimagesink_class_init):
- * sys/xvimage/xvimagesink.h:
- apply similar PAR fixes as to ximagesink
-
-2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch from: Benjamin Otte
-
- * ext/lame/gstlame.c: (gst_lame_src_link), (gst_lame_init):
- add link function to lame. Fixes #148986.
-
-2004-08-02 Johan Dahlin <johan@gnome.org>
-
- * gst/multipart/multipartmux.c (gst_multipart_mux_next_buffer):
- fix debugging log
-
-2004-07-30 David Schleef <ds@schleef.org>
-
- * gst/videomixer/Makefile.am: Fix things that should have been
- fixed in the last checkin.
-
-2004-07-30 David Schleef <ds@schleef.org>
-
- * gst/multipart/Makefile.am: Fix things that should have been
- fixed in the last checkin.
-
-2004-07-30 David Schleef <ds@schleef.org>
-
- * testsuite/multifilesink/Makefile.am: Fix unused variable.
-
-2004-07-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- bump nano for prerelease
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/nl.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- updates
-
-2004-07-30 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_remove),
- (gst_multifdsink_clear), (gst_multifdsink_get_stats),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
- * gst/tcp/gstmultifdsink.h:
- Recover from a select with a bad file descriptor by removing
- the client.
-
-2004-07-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- fix requirement of core
- * gst-libs/gst/play/play.c: (gst_play_error_plugin),
- (gst_play_pipeline_setup):
- don't use colorspace element. do use hermescolorspace element.
- make macro to get a colorspace element.
- mark strings for translation.
- * po/POTFILES.in:
- add play.c
- * po/af.po:
- * po/az.po:
- * po/cs.po:
- * po/en_GB.po:
- * po/hu.po:
- * po/nl.po:
- * po/sr.po:
- * po/sv.po:
- * po/uk.po:
- update translations
-
-2004-07-30 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/libpng/gstpngenc.c: (gst_pngenc_class_init):
- fix default for newmedia flag
-
-2004-07-30 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (gst_theora_dec_class_init),
- (gst_theora_dec_init), (theora_get_formats),
- (theora_dec_src_convert), (theora_dec_sink_convert),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
- (theora_dec_chain), (theora_dec_set_property),
- (theora_dec_get_property):
- * ext/theora/theoraenc.c: (gst_border_mode_get_type),
- (gst_theora_enc_class_init), (gst_theora_enc_init),
- (theora_enc_sink_link), (theora_enc_chain),
- (theora_enc_set_property), (theora_enc_get_property):
- Added cropping option to theora decoder.
- Added border option to theora encoder.
-
-2004-07-30 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
- (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
- (gst_pngenc_set_property):
- * ext/libpng/gstpngenc.h:
- Added newmedia support to pngenc so now gst-launch-0.8 videotestsrc ! ffmpegcolorspace ! pngenc snapshot=false newmedia=true ! multifilesink location=blah%d.png works as expected
-
-2004-07-30 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (theora_enc_sink_link), (theora_enc_chain),
- (theora_enc_set_property), (theora_enc_get_property):
- Fix encoding of non-multiple-of-16 video.
-
-2004-07-29 David Schleef <ds@schleef.org>
-
- * configure.ac: make test for audiofile more strict
-
-2004-07-25 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/typefind/gsttypefindfunctions.c: (plugin_init):
- give different names to typefind functions
-
-2004-07-28 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_calculate_pixel_aspect_ratio),
- (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
- (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
- (gst_ximagesink_set_xwindow_id), (gst_ximagesink_set_property),
- (gst_ximagesink_get_property), (gst_ximagesink_init):
- * sys/ximage/ximagesink.h:
- allocate PAR's dynamically.
- use autodetected PAR if no object-set PAR is given.
- add workaround for directfb's X not setting physical size.
- fix to xvimagesink will follow tomorrow.
-
-2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
- * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
- (gst_shout2send_get_type), (gst_shout2send_set_clock),
- (gst_shout2send_class_init), (gst_shout2send_init),
- (set_shout_metadata), (gst_shout2send_set_metadata),
- (gst_shout2send_chain), (gst_shout2send_set_property),
- (gst_shout2send_get_property), (gst_shout2send_connect),
- (gst_shout2send_change_state):
- * ext/shout2/gstshout2.h:
- - fix for sending mp3 audio to icecast2 server, if pad link function not
- called before PAUSED state
- - added option to use GStreamer clock sync (as opposed to libshout's own sync)
- - added tagging support for mp3 audio broadcasted
- * gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
- debug info
-
-2004-07-28 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
- (gst_ogg_demux_push):
- Return query failure when we don't know the length of
- an ogg stream insteda of returning TRUE with a bogus value.
-
-2004-07-28 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (theora_get_formats),
- (theora_dec_src_convert), (theora_dec_sink_convert),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
- (theora_dec_chain):
- Don't screw up the 1 Chroma for 1 luma sample situation when we
- have an odd offset/width by adding a black border in those cases.
-
-2004-07-28 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (theora_get_formats),
- (theora_dec_src_convert), (theora_dec_sink_convert),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
- (theora_dec_chain):
- * ext/theora/theoraenc.c: (theora_enc_sink_link):
- Added first attempt at cropping of the image as required by the
- theora spec. We need more properties in the caps (offset_x,
- offset_y,stride) to implement this correctly.
-
-2004-07-28 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dvdnav/README:
- Update the README to use dvddemux
- * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
- Ensure getcaps returns a subset of the template caps
- * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_base_init),
- (gst_mpeg2subt_init):
- Ensure getcaps returns a subset of the template caps
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
- (gst_dvd_demux_init), (gst_dvd_demux_get_video_stream),
- (gst_dvd_demux_get_subpicture_stream),
- (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_set_cur_subpicture):
- * gst/mpegstream/gstdvddemux.h:
- Set the explicit caps on the current_video pad before pushing
- anything
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream):
- Free caps used to gst_pad_set_explicit_caps, which takes a const
- GstCaps *
-
-2004-07-28 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: update GStreamer requirement to 0.8.4 because of
- GstFraction.
-
-2004-07-28 Wim Taymans <wim@fluendo.com>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt),
- (gst_wavparse_handle_seek), (gst_wavparse_srcpad_event):
- Add the pad to the element after setting up the caps. This
- makes it a lot easier to autoplug.
-
-2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/median/gstmedian.c:
- * gst/mpeg2subt/gstmpeg2subt.c:
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegpacketize.c:
- * gst/rtjpeg/gstrtjpeg.c:
- * gst/rtjpeg/gstrtjpegdec.c:
- * gst/rtjpeg/gstrtjpegenc.c:
- * gst/sine/gstsinesrc.c:
- * gst/smooth/gstsmooth.c:
- * gst/smpte/gstsmpte.c:
- * gst/smpte/gstsmpte.h:
- * gst/stereo/gststereo.c:
- * gst/videofilter/gstgamma.c:
- * gst/videofilter/gstvideobalance.c:
- * gst/videofilter/gstvideofilter.c:
- * gst/videofilter/gstvideoflip.c:
- * gst/videoscale/gstvideoscale.c:
- * gst/videoscale/videoscale.c:
- * gst/videotestsrc/gstvideotestsrc.c:
- * gst/videotestsrc/videotestsrc.c:
- * gst/wavenc/gstwavenc.c:
- * gst/wavparse/gstwavparse.c:
- fix local includes and 64 bits constants
-
-2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
-
- * win32/gst.sln:
- * gst-libs/gst/*/*.vcproj:
- * gst/*/*.vcproj:
- more working plugins
-
-2004-07-27 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * testsuite/alsa/Makefile.am:
- * testsuite/alsa/srcstate.c:
- add test for alsasrc changing state
-
-2004-07-27 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/silence/gstsilence.c: (gst_silence_init), (gst_silence_link),
- (gst_silence_get):
- * gst/silence/gstsilence.h:
- fix silence generation for 16bit raw audio
-
-2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_metadata),
- (gst_matroska_demux_video_caps), (gst_matroska_demux_plugin_init):
- * gst/mpegaudio/common.c:
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_class_init),
- (gst_videoscale_getcaps), (gst_videoscale_link),
- (gst_videoscale_src_fixate), (gst_videoscale_init),
- (gst_videoscale_finalize):
- * gst/videoscale/gstvideoscale.h:
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_get_capslist):
- * gst/wavenc/gstwavenc.c:
- * sys/oss/gstossmixer.c: (fill_labels):
- * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_handle_xevents),
- (gst_ximagesink_calculate_pixel_aspect_ratio),
- (gst_ximagesink_xcontext_get), (gst_ximagesink_fixate),
- (gst_ximagesink_getcaps), (gst_ximagesink_sink_link),
- (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
- (gst_ximagesink_set_property), (gst_ximagesink_get_property),
- (gst_ximagesink_init), (gst_ximagesink_class_init):
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c:
- (gst_xvimagesink_calculate_pixel_aspect_ratio),
- (gst_xvimagesink_xcontext_get), (gst_xvimagesink_sink_link),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
- (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
- (gst_xvimagesink_init), (gst_xvimagesink_class_init):
- * sys/xvimage/xvimagesink.h:
- first batch of pixel aspect ratio commits.
-
-2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_chain):
- * gst/ffmpegcolorspace/imgconvert.c: (avpicture_fill):
- handle stride, needs work if we want to move stride handling
- upstream, but works correctly for our purposes.
-
-2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videoscale/README:
- add testing examples
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_link),
- (gst_videoscale_chain):
- * gst/videoscale/videoscale.c: (gst_videoscale_setup),
- (gst_videoscale_get_size):
- add get_size function that handles stride like videotestsrc.
- fixes conversion for YUV formats for as much as I can test them.
-
-2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
- (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
- (gst_xvimagesink_xvimage_put):
- further cleanups, logging, error handling and synchronizing
-
-2004-07-27 Wim Taymans <wim@fluendo.com>
-
- * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
- (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
- (gst_videomixer_pad_set_property),
- (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
- (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
- (gst_videomixer_class_init), (gst_videomixer_init),
- (gst_videomixer_getcaps), (gst_videomixer_request_new_pad),
- (gst_videomixer_blend_ayuv_i420), (pad_zorder_compare),
- (gst_videomixer_sort_pads), (gst_videomixer_fill_checker),
- (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
- (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
- (gst_videomixer_loop), (plugin_init):
- Be a nicer negotiation citizen and provide a getcaps function on
- the srcpad. This also fixes a crash when resizing.
-
-2004-07-27 Julien MOUTTE <julien@moutte.net>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new): Some fixes to image size calculation.
-
-2004-07-27 Wim Taymans <wim@fluendo.com>
-
- * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
- * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
- (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
- (gst_pngenc_set_property):
- * ext/libpng/gstpngenc.h:
- Added snapshot property to pngenc.
- removed g_print from pngdec
-
-2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/ac3parse/ac3parse.vcproj
- * gst/adder/adder.vcproj
- * gst/alpha/alpha.vcproj
- * gst/alpha/alphacolor.vcproj
- * gst/asfdemux/asf.vcproj
- * gst/audioconvert/audioconvert.vcproj
- * gst/audiorate/audiorate.vcproj
- * gst/audioscale/audioscale.vcproj
- * gst/auparse/auparse.vcproj
- * gst/avi/avi.vcproj
- * gst/cdxaparse/cdxaparse.vcproj
- * gst/chart/chart.vcproj
- * gst/colorspace/colorspace.vcproj
- * gst/cutter/cutter.vcproj
- * gst/debug/debug.vcproj
- * gst/debug/efence.vcproj
- * gst/debug/navigationtest.vcproj
- * gst/deinterlace/deinterlace.vcproj
- * gst/effectv/effectv.vcproj
- * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
- * gst/filter/filter.vcproj
- * gst/flx/flxdec.vcproj
- * gst/goom/goom.vcproj
- * gst/interleave/interleave.vcproj
- * gst/law/alaw.vcproj
- * gst/law/mulaw.vcproj
- * gst/matroska/matroska.vcproj
- * gst/median/median.vcproj
- * gst/mixmatrix/mixmatrix.vcproj
- * gst/mpeg1sys/mpeg1systemencode.vcproj
- * gst/mpeg1videoparse/mp1videoparse.vcproj
- * gst/mpeg2sub/mpeg2subt.vcproj
- * gst/mpegaudio/mpegaudio.vcproj
- * gst/mpegaudioparse/mpegaudioparse.vcproj
- * gst/mpegstream/mpegstream.vcproj
- * gst/multifilesink/multifilesink.vcproj
- * gst/multipart/multipart.vcproj
- * gst/oneton/oneton.vcproj
- * gst/overlay/overlay.vcproj
- * gst/passthrough/passthrough.vcproj
- * gst/qtdemux/qtdemux.vcproj
- * gst/realmedia/rmdemux.vcproj
- * gst/rtjpeg/rtjpeg.vcproj
- * gst/rtp/rtp.vcproj
- * gst/silence/silence.vcproj
- * gst/sine/sinesrc.vcproj
- * gst/smooth/smooth.vcproj
- * gst/smpte/smpte.vcproj
- * gst/spectrum/spectrum.vcproj
- * gst/speed/speed.vcproj
- * gst/stereo/stereo.vcproj
- * gst/switch/switch.vcproj
- * gst/tags/tagedit.vcproj
- * gst/tcp/tcp.vcproj
- * gst/typefind/typefindfunctions.vcproj
- * gst/udp/udp.vcproj
- * gst/videobox/videobox.vcproj
- * gst/videocrop/videocrop.vcproj
- * gst/videodrop/videodrop.vcproj
- * gst/videofilter/gamma.vcproj
- * gst/videofilter/videobalance.vcproj
- * gst/videofilter/videofilter.vcproj
- * gst/videofilter/videoflip.vcproj
- * gst/videoflip/videoflip.vcproj
- * gst/videomixer/videomixer.vcproj
- * gst/videorate/videorate.vcproj
- * gst/videoscale/videoscale.vcproj
- * gst/videotestsrc/videotestsrc.vcproj
- * gst/virtualdub/virtualdub.vcproj
- * gst/volenv/volenv.vcproj
- * gst/volume/volume.vcproj
- * gst/wavenc/wavenc.vcproj
- * gst/wavparse/wavparse.vcproj
- * gst/y4m/y4menc.vcproj
- * gst-libs/gst/audio/audio.vcproj
- * gst-libs/gst/audio/audiofilter.vcproj
- * gst-libs/gst/colorbalance/colorbalance.vcproj
- * gst-libs/gst/idct/idtc.vcproj
- * gst-libs/gst/media-info/media-info.vcproj
- * gst-libs/gst/mixer/mixer.vcproj
- * gst-libs/gst/navigation/navigation.vcproj
- * gst-libs/gst/play/play.vcproj
- * gst-libs/gst/propertyprobe/propertyprobe.vcproj
- * gst-libs/gst/resample/resample.vcproj
- * gst-libs/gst/riff/riff.vcproj
- * gst-libs/gst/tuner/tuner.vcproj
- * gst-libs/gst/video/video.vcproj
- * gst-libs/gst/xoverlay/xoverlay.vcproj
- avoid problems with math.h, fix release dependancy
- rename GStreamer-0.8.lib to libgstreamer.lib
-
-2004-07-27 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate): When
- the atom is not available we have to unlock the mutex. Fixes #148023
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst-libs/gst/media-info/media-info.h:
- issue for a vararg macro with MSVC
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/effectv/effectv.vcproj
- * gst-libs/gst/idct/idct.vcproj:
- * gst-libs/gst/media-info/media-info.vcproj:
- * gst-libs/gst/navigation/navigation.vcproj:
- * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
- * gst-libs/gst/video/video.vcproj:
- * gst-libs/gst/xoverlay/xoverlay.vcproj:
- fixes for build problems
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst-libs/gst/audio/audio.def:
- * gst-libs/gst/audio/riff.def:
- add some definitions needed by plugins
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/asfdemux/gstasfmux.c
- Fix some 64 bits constants to be glib friendly
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/ac3parse/gstac3parse.c
- * gst/audioscale/gstaudioscale.c
- * gst/auparse/gstauparse.c
- * gst/colorspace/gstcolorspace.c
- * gst/colorspace/yuv2rgb.h
- local include fixes
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * win32/gst.sln
- add more plugins to the build
-
-2004-07-26 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
- (gst_ximagesink_ximage_new): Some more fixes to image size calculation.
-
-2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
- (gst_level_set_property), (gst_level_get_property),
- (gst_level_base_init), (gst_level_class_init):
- add debugging categories. cleanups.
-
-2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videoscale/videoscale.c: (gst_videoscale_setup),
- (gst_videoscale_planar411), (gst_videoscale_planar400),
- (gst_videoscale_packed422), (gst_videoscale_packed422rev),
- (gst_videoscale_scale_nearest_str1),
- (gst_videoscale_scale_nearest_str2),
- (gst_videoscale_scale_nearest_str4),
- (gst_videoscale_scale_nearest_16bit),
- (gst_videoscale_scale_nearest_24bit):
- fixed stride issues
- tested with 320x240 -> 321, 322, 324 x240
- tested with YV12, I420, YUY2, UYVY
- fixed packed422rev (don't think it could have worked before)
- by testing with UYVY
-
-2004-07-26 Benjamin Otte <otte@gnome.org>
-
- * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_init),
- (gst_lame_chain), (gst_lame_setup), (gst_lame_change_state),
- (plugin_init):
- add debugging category, add error checks like checking return values
- of setup calls, make sure it still works after
- PLAYING=>NULL=>PLAYING, fix encoding of mono streams
-
-2004-07-26 Wim Taymans <wim@fluendo.com>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
- (gst_mpeg_demux_get_audio_stream),
- (gst_mpeg_demux_process_private):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_data):
- Check for error codes from the negotiation functions. Make sure
- we really set the pad caps when a new pad is created.
-
-2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_caps_to_pix_fmt):
- * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_pad_link):
- don't make function do two things at the same time without reason.
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/ac3parse/ac3parse.vcproj
- * gst/adder/adder.vcproj
- * gst/alpha/alpha.vcproj
- * gst/alpha/alphacolor.vcproj
- * gst/asfdemux/asf.vcproj
- * gst/audioconvert/audioconvert.vcproj
- * gst/audiorate/audiorate.vcproj
- * gst/audioscale/audioscale.vcproj
- * gst/auparse/auparse.vcproj
- * gst/avi/avi.vcproj
- * gst/cdxaparse/cdxaparse.vcproj
- * gst/chart/chart.vcproj
- * gst/colorspace/colorspace.vcproj
- * gst/cutter/cutter.vcproj
- * gst/debug/debug.vcproj
- * gst/debug/efence.vcproj
- * gst/debug/navigationtest.vcproj
- * gst/deinterlace/deinterlace.vcproj
- * gst/effectv/effectv.vcproj
- * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
- * gst/filter/filter.vcproj
- * gst/flx/flxdec.vcproj
- * gst/goom/goom.vcproj
- * gst/interleave/interleave.vcproj
- * gst/law/alaw.vcproj
- * gst/law/mulaw.vcproj
- * gst/matroska/matroska.vcproj
- * gst/median/median.vcproj
- * gst/mixmatrix/mixmatrix.vcproj
- * gst/mpeg1sys/mpeg1systemencode.vcproj
- * gst/mpeg1videoparse/mp1videoparse.vcproj
- * gst/mpeg2sub/mpeg2subt.vcproj
- * gst/mpegaudio/mpegaudio.vcproj
- * gst/mpegaudioparse/mpegaudioparse.vcproj
- * gst/mpegstream/mpegstream.vcproj
- * gst/multifilesink/multifilesink.vcproj
- * gst/multipart/multipart.vcproj
- * gst/oneton/oneton.vcproj
- * gst/overlay/overlay.vcproj
- * gst/passthrough/passthrough.vcproj
- * gst/qtdemux/qtdemux.vcproj
- * gst/realmedia/rmdemux.vcproj
- * gst/rtjpeg/rtjpeg.vcproj
- * gst/rtp/rtp.vcproj
- * gst/silence/silence.vcproj
- * gst/sine/sinesrc.vcproj
- * gst/smooth/smooth.vcproj
- * gst/smpte/smpte.vcproj
- * gst/spectrum/spectrum.vcproj
- * gst/speed/speed.vcproj
- * gst/stereo/stereo.vcproj
- * gst/switch/switch.vcproj
- * gst/tags/tagedit.vcproj
- * gst/tcp/tcp.vcproj
- * gst/typefind/typefindfunctions.vcproj
- * gst/udp/udp.vcproj
- * gst/videobox/videobox.vcproj
- * gst/videocrop/videocrop.vcproj
- * gst/videodrop/videodrop.vcproj
- * gst/videofilter/gamma.vcproj
- * gst/videofilter/videobalance.vcproj
- * gst/videofilter/videofilter.vcproj
- * gst/videofilter/videoflip.vcproj
- * gst/videoflip/videoflip.vcproj
- * gst/videomixer/videomixer.vcproj
- * gst/videorate/videorate.vcproj
- * gst/videoscale/videoscale.vcproj
- * gst/videotestsrc/videotestsrc.vcproj
- * gst/virtualdub/virtualdub.vcproj
- * gst/volenv/volenv.vcproj
- * gst/volume/volume.vcproj
- * gst/wavenc/wavenc.vcproj
- * gst/wavparse/wavparse.vcproj
- * gst/y4m/y4menc.vcproj
- more plugins supported under windows
-
-2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
- (gst_ximagesink_ximage_put), (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_chain), (gst_ximagesink_buffer_alloc):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc):
- Add debugging statements. Use the sizes as returned by the
- *CreateImage calls.
-
-2004-07-26 Johan Dahlin <johan@gnome.org>
-
- * gst/tcp/gsttcpclientsrc.c (gst_tcpclientsrc_get): Make sure that
- the pad is negotiated.
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c (gst_ffmpegcolorspace_chain): Ditto
-
-2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst-libs/gst/colorbalance/colorbalance.vcproj:
- * gst-libs/gst/idct/idct.vcproj:
- * gst-libs/gst/media-info/media-info.vcproj:
- * gst-libs/gst/mixer/mixer.vcproj:
- * gst-libs/gst/navigation/navigation.vcproj:
- * gst-libs/gst/play/play.vcproj:
- * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
- * gst-libs/gst/resample/resample.vcproj:
- * gst-libs/gst/tuner/tuner.vcproj:
- * gst-libs/gst/video/video.vcproj:
- * gst-libs/gst/xoverlay/xoverlay.vcproj:
- more plugins supported under windows
-
-2004-07-25 Iain <iain@prettypeople.org>
-
- * gst/wavparse/gstwavparse.c (gst_wavparse_fmt): Set the caps on the
- pad now rather than when the pad is created because state changes wipe
- explicit caps (fixes #148043).
-
-2004-07-25 Sebastien Cote <sc5@hermes.usherb.ca>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstmad.c:
- fix mad plugin crashing on Sun (fixes #148289)
-
-2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/avi/avi.def:
- * gst/avi/avi.vcproj:
- * gst/matroska/matroska.def:
- * gst/matroska/matroska.vcproj:
- remove unused .def files
-
-2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst-libs/gst/audio/gstaudiofilter.c:
- Clean the local include
-
-2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
-
- * win32/gst.sln:
- * gst-libs/gst/audio/audio.def:
- * gst-libs/gst/audio/audio.vcproj:
- * gst-libs/gst/audio/audiofilter.vcproj:
- * gst-libs/gst/audio/riff.def:
- * gst-libs/gst/audio/riff.vcproj:
- * gst-libs/gst/gst-libs.def:
- * gst-libs/gst/gst-libs.vcproj:
- * gst/avi/avi.vcproj:
- * gst/avi/avi.vcproj:
- Copy the files where needed after building, cleaner projects
-
-2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
-
- * gst/matroska/ebml-write.c:
- Fix some 64 bits constants to be glib friendly
-
-2004-07-24 Steve Lhomme <steve.lhomme@free.fr>
-
- * win32/gst.sln:
- * gst-libs/gst/gst-libs.def:
- * gst-libs/gst/gst-libs.vcproj:
- * gst/matroska/matroska.def:
- * gst/matroska/matroska.vcproj:
- Add the preliminary canvas to build plugins on Win32
-
-2004-07-23 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- don't enfore negotiation from source side, it breaks
- sinesrc ! audioconvert ! osssink
-
-2004-07-22 David Schleef <ds@schleef.org>
-
- * gst/typefind/gsttypefindfunctions.c: (plugin_init): Add typefind
- for ELF files, since they can easily be recognized as audio/mpeg.
- (bug #147441)
-
-2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videoscale/videoscale.c: (gst_videoscale_setup),
- (gst_videoscale_planar411), (gst_videoscale_scale_nearest_32bit),
- (gst_videoscale_scale_nearest_24bit),
- (gst_videoscale_scale_nearest_16bit):
- fix 16bit and 24bit for stride (24bit might need testing)
- don't pretend we do more than one algorithm
-
-2004-07-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- * gst/Makefile.am:
- * gst/multifilesink/Makefile.am:
- * gst/multifilesink/gstmultifilesink.c:
- (gst_multifilesink_get_formats),
- (gst_multifilesink_get_query_types), (_do_init),
- (gst_multifilesink_base_init), (gst_multifilesink_class_init),
- (gst_multifilesink_init), (gst_multifilesink_dispose),
- (gst_multifilesink_set_location), (gst_multifilesink_set_property),
- (gst_multifilesink_get_property), (gst_multifilesink_open_file),
- (gst_multifilesink_close_file), (gst_multifilesink_next_file),
- (gst_multifilesink_pad_query), (gst_multifilesink_handle_event),
- (gst_multifilesink_chain), (gst_multifilesink_change_state),
- (gst_multifilesink_uri_get_type),
- (gst_multifilesink_uri_get_protocols),
- (gst_multifilesink_uri_get_uri), (gst_multifilesink_uri_set_uri),
- (gst_multifilesink_uri_handler_init), (plugin_init):
- * gst/multifilesink/gstmultifilesink.h:
- * testsuite/Makefile.am:
- * testsuite/multifilesink/Makefile.am:
- * testsuite/multifilesink/fakesrc_test.c: (gst_newmedia_base_init),
- (gst_newmedia_class_init), (gst_newmedia_init),
- (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
- (newfile_signal), (test_signal), (main):
- multifilesink plugin for creating new files every time a new media
- discontinuity event occurs
-
-2004-07-22 Wim Taymans <wim@fluendo.com>
-
- * gst/alpha/Makefile.am:
- * gst/alpha/gstalphacolor.c: (gst_alpha_color_get_type),
- (gst_alpha_color_base_init), (gst_alpha_color_class_init),
- (gst_alpha_color_init), (gst_alpha_color_set_property),
- (gst_alpha_color_get_property), (gst_alpha_color_sink_link),
- (transform), (gst_alpha_color_chain),
- (gst_alpha_color_change_state), (plugin_init):
- Stupid plugin to to RGBA to AYUV conversion because none of
- the colorspace plugins can handle that yet.
-
-2004-07-22 Wim Taymans <wim@fluendo.com>
-
- * examples/seeking/seek.c: (update_scale), (main):
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
- (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
- (gst_decode_bin_init), (gst_decode_bin_dispose),
- (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
- (no_more_pads), (close_link), (type_found),
- (gst_decode_bin_set_property), (gst_decode_bin_get_property),
- (plugin_init):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
- (gst_play_base_bin_class_init), (gst_play_base_bin_init),
- (gst_play_base_bin_dispose), (queue_overrun),
- (gen_preroll_element), (remove_prerolls), (unknown_type),
- (no_more_pads), (new_stream), (setup_source),
- (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
- (play_base_eos), (gst_play_base_bin_change_state),
- (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
- (gst_play_base_bin_unlink_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybin.c: (gen_video_element),
- (gen_audio_element):
- * gst/playback/gststreaminfo.h:
- More playback updates, attempt to fix things after the state change
- breakage.
-
-2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videoscale/videoscale.c: (gst_videoscale_planar411),
- (gst_videoscale_scale_nearest_16bit):
- comment algorithm
-
-2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_class_init), (gst_videotestsrc_src_link),
- (gst_videotestsrc_init), (gst_videotestsrc_get),
- (gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
- (gst_videotestsrc_get_property):
- * gst/videotestsrc/gstvideotestsrc.h:
- * gst/videotestsrc/videotestsrc.c:
- * gst/videotestsrc/videotestsrc.h:
- cleanup and commenting
-
-2004-07-21 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
- (gst_ogg_demux_get_formats), (gst_ogg_demux_src_query),
- (gst_ogg_demux_src_event), (gst_ogg_demux_src_convert),
- (gst_ogg_demux_handle_event), (gst_ogg_demux_seek_before),
- (_find_chain_get_unknown_part), (_find_streams_check),
- (gst_ogg_demux_push), (gst_ogg_pad_push):
- * ext/theora/theoradec.c: (theora_get_formats),
- (theora_dec_src_convert), (theora_dec_sink_convert),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
- (theora_dec_chain):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
- (vorbis_dec_convert), (vorbis_dec_src_query),
- (vorbis_dec_src_event), (vorbis_dec_event):
- More seeking fixes, oggdemux now supports seeking to time and
- uses the downstream element to convert granulepos to time.
- Seeking in theora-only ogg files now works.
-
-2004-07-21 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (gst_theora_dec_init),
- (theora_get_formats), (theora_get_event_masks),
- (theora_get_query_types), (theora_dec_src_convert),
- (theora_dec_sink_convert), (theora_dec_src_query),
- (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
- (vorbis_get_event_masks), (vorbis_get_query_types),
- (gst_vorbis_dec_init), (vorbis_dec_convert),
- (vorbis_dec_src_query), (vorbis_dec_src_event), (vorbis_dec_event):
- Added query/convert/formats functions to vorbis and theora decoders
- so that the outside world can use them too. Fixed seeking on an
- ogg/theora/vorbis file by disabling the seeking seeking on the
- theora srcpad.
-
-2004-07-21 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
- (gst_ximagesink_renegotiate_size), (gst_ximagesink_sink_link),
- (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id): Optimize
- images creation for both elements. We don't create the image on caps
- nego or renego, we just destroy the internal one if present if it does
- not match the needs. The chain function takes care of creating a new
- image when needed.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
- (gst_xvimagesink_xwindow_decorate), (gst_xvimagesink_sink_link),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
- (gst_xvimagesink_set_xwindow_id): Additionally xvimage now contains
- the image format information. The buffer pool checks for the context
- image format and discard images with different formats.
- * sys/xvimage/xvimagesink.h: Adding im_format in the xvimage structure.
-
-2004-07-21 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_chain):
- no point in doing any chaining if the pad we want to push from
- isn't usable.
-
-2004-07-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data):
- Fix double end-to-native symbol conversion (#148021).
-
-2004-07-20 David Schleef <ds@schleef.org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
- Don't use an Atom that doesn't exist.
-
-2004-07-20 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_get_stats),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer):
- * gst/tcp/gstmultifdsink.h:
- More multifdsink stats. Avoid deadlock by releasing locks
- before sending out a signal.
-
-2004-07-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/hu.po:
- added Hungarian translation (Laszlo Dvornik)
-
-2004-07-20 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer):
- * gst/tcp/gsttcp-marshal.list:
- Fixed the stupid marshal definition.
-
-2004-07-20 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_init), (gst_multifdsink_add),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_queue_buffer), (gst_multifdsink_chain),
- (gst_multifdsink_set_property), (gst_multifdsink_get_property),
- (gst_multifdsink_init_send):
- * gst/tcp/gstmultifdsink.h:
- Added more stats, added timeout for a client, fixed some typos
- and added some comments.
-
-2004-07-20 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
- (gst_multifdsink_add), (gst_multifdsink_get_stats),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_write):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcp-marshal.list:
- Added get_stats method that returns a GValueArray of
- stats values.
-
-2004-07-19 Benjamin Otte <otte@gnome.org>
-
- * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
- make sure longname, description and author are valid UTF-8
-
-2004-07-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_change_state),
- (gst_ximagesink_set_property):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state),
- (gst_xvimagesink_set_property):
- make sure SYNCHRONOUS is respected after getting the X context
-
-2004-07-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_handle_src_event),
- (gst_matroska_demux_parse_blockgroup):
- * gst/matroska/matroska-ids.h:
- add BlockReference tag and ignore it to clear out log.
- ignore NAVIGATION events to clear out log.
-
-2004-07-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
- (gst_matroska_demux_add_stream):
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_class_init):
- add debug categories
-
-2004-07-16 Wim Taymans <wim@fluendo.com>
-
- * ext/libpng/Makefile.am:
- * ext/libpng/gstpng.c: (plugin_init):
- * ext/libpng/gstpngdec.c: (user_error_fn), (user_warning_fn),
- (gst_pngdec_get_type), (gst_pngdec_base_init),
- (gst_pngdec_class_init), (gst_pngdec_sinklink), (gst_pngdec_init),
- (gst_pngdec_src_getcaps), (user_read_data), (gst_pngdec_chain):
- * ext/libpng/gstpngdec.h:
- Added png decoder.
-
-2004-07-16 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
- (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_new),
- (gst_ximagesink_ximage_destroy), (gst_ximagesink_sink_link),
- (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
- (gst_ximagesink_buffer_alloc):
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
- (gst_xvimagesink_buffer_alloc):
- * sys/xvimage/xvimagesink.h: Getting the 2 video sinks synchronized
- again. Using internal data pointer of the x(v)image to store image's
- data to be coherent with the buffer alloc mechanism. Investigated the
- image destruction code to be sure that everything gets freed correctly.
-
-2004-07-16 Wim Taymans <wim@fluendo.com>
-
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_vids_with_data),
- (gst_riff_read_strf_auds_with_data):
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
- (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
- Make sure we don't create 0 sized subbuffers in riff-read.
- Signal the no more pads signal after reading the avi header.
-
-2004-07-16 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
- (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
- (gst_decode_bin_init), (gst_decode_bin_dispose),
- (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
- (no_more_pads), (close_link), (type_found),
- (gst_decode_bin_set_property), (gst_decode_bin_get_property),
- (gst_decode_bin_change_state), (plugin_init):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
- (gst_play_base_bin_class_init), (gst_play_base_bin_init),
- (gst_play_base_bin_dispose), (queue_overrun),
- (gen_preroll_element), (remove_prerolls), (unknown_type),
- (no_more_pads), (new_stream), (setup_source),
- (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
- (play_base_eos), (gst_play_base_bin_change_state),
- (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
- (gst_play_base_bin_unlink_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybasebin.h:
- Better error recovery. Added configurable preroll queue size. Faster
- detection of no-more-pads.
-
-2004-07-16 Wim Taymans <wim@fluendo.com>
-
- * gst-libs/gst/video/video.h:
- Added 32 bits RGBA. Not sure if we should use another mime-type
- for alpha rgb. Currently the presence of the alpha_mask property
- signals an alpha channel.
-
-2004-07-16 Wim Taymans <wim@fluendo.com>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
- FPS seems to be 0.0 to MAX everywhere else.
-
-2004-07-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- mp42/mp43 (no caps) exist too.
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_video_caps):
- Set pixel_width/height; we've got them in-caps.
- * gst/typefind/gsttypefindfunctions.c: (plugin_init):
- * gst/wavparse/gstwavparse.c: (plugin_init):
- Both are valid primary.
- * sys/oss/gstossmixer.c:
- Remove i18n hack and enable translations.
-
-2004-07-15 Benjamin Otte <otte@gnome.org>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
- fix for non-shm xv. Original patch by Tim Ringenbach (fixes #147248)
-
-2004-07-15 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
- (gst_alsa_sw_params_dump), (gst_alsa_hw_params_dump),
- (gst_alsa_close_audio):
- disable some of the debugging code for now. Writing debugging to a
- buffer is broken in current alsalib releases.
-
-2004-07-12 Benjamin Otte <otte@gnome.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
- use bufferpools
-
-2004-07-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/theora/theoradec.c: (gst_theora_dec_class_init),
- (theora_dec_src_query), (theora_dec_event):
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
- add debugging categories. Remove \n's.
-
-2004-07-13 Johan Dahlin <johan@gnome.org>
-
- * gst/playback/gstplaybin.c (gst_play_bin_set_property)
- (gst_play_bin_get_property): Impl.
-
-2004-07-13 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_seek_before):
- When trying to find the stream length, seek back N pages
- instead of just one, where N is the number of streams in
- the current chain.
-
-2004-07-13 Wim Taymans <wim@fluendo.com>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_audio_caps_with_data),
- (gst_riff_create_audio_caps),
- (gst_riff_create_audio_template_caps):
- * gst-libs/gst/riff/riff-media.h:
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_vids_with_data),
- (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_auds):
- * gst-libs/gst/riff/riff-read.h:
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
- (gst_avi_demux_add_stream):
- Set codec_data on caps for avidemuxer.
-
-2004-07-12 David Schleef <ds@schleef.org>
-
- * configure.ac: Fix test for Objective C
-
-2004-07-12 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_get_capslist),
- (gst_gdk_pixbuf_chain):
- Add svg and pcx to template caps, and ensure that getcaps returns a
- subset of the template caps.
- Copy each row manually for output, as gdkpixbuf may pad the
- rowstride to a 32-bit word boundary.
-
-2004-07-12 Wim Taymans <wim@fluendo.com>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
- (gst_riff_create_video_template_caps):
- Fix the template caps to include some more media types.
-
-2004-07-12 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
- (compare_ranks), (print_feature), (gst_decode_bin_init),
- (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
- (try_to_link_1), (new_pad), (close_link), (type_found),
- (gst_decode_bin_set_property), (gst_decode_bin_get_property),
- (gst_decode_bin_change_state), (plugin_init):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
- (gst_play_base_bin_class_init), (gst_play_base_bin_init),
- (gst_play_base_bin_dispose), (queue_overrun),
- (gen_preroll_element), (remove_prerolls), (no_more_pads),
- (new_stream), (setup_source), (gst_play_base_bin_set_property),
- (gst_play_base_bin_get_property), (play_base_eos),
- (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
- (gst_play_base_bin_unlink_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
- (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_dispose), (gst_play_bin_set_property),
- (gst_play_bin_get_property), (gen_video_element),
- (gen_audio_element), (remove_sinks), (setup_sinks),
- (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
- (gst_play_bin_send_event), (gst_play_bin_get_formats),
- (gst_play_bin_convert), (gst_play_bin_get_query_types),
- (gst_play_bin_query), (plugin_init):
- * gst/playback/test4.c: (main):
- More fixes on reusing of the element.
-
-2004-07-11 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstmad.c: (normal_seek):
- allow seeking for other methods than just SET
-
-2004-07-11 Andy Wingo <wingo@pobox.com>
-
- * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_link): For
- float, "any" caps -> buffer_frames=[0,MAX].
-
- * gst/interleave/interleave.c (interleave_getcaps): Seems the core
- doesn't intersect our caps with the template any more. Do it
- ourselves.
- (interleave_buffered_loop): Use g_newa instead of malloc/free.
-
-2004-07-09 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
- (compare_ranks), (print_feature), (gst_decode_bin_init),
- (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
- (try_to_link_1), (new_pad), (close_link), (type_found),
- (gst_decode_bin_set_property), (gst_decode_bin_get_property),
- (gst_decode_bin_change_state), (plugin_init):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
- (gst_play_base_bin_class_init), (gst_play_base_bin_init),
- (gst_play_base_bin_dispose), (queue_overrun),
- (gen_preroll_element), (remove_prerolls), (no_more_pads),
- (new_stream), (setup_source), (gst_play_base_bin_set_property),
- (gst_play_base_bin_get_property), (play_base_eos),
- (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
- (gst_play_base_bin_unlink_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
- (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_dispose), (gst_play_bin_set_property),
- (gst_play_bin_get_property), (gen_video_element),
- (gen_audio_element), (remove_sinks), (setup_sinks),
- (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
- (gst_play_bin_send_event), (gst_play_bin_get_formats),
- (gst_play_bin_convert), (gst_play_bin_get_query_types),
- (gst_play_bin_query), (plugin_init):
- * gst/playback/test4.c: (main):
- Work on object reuse and seeking.
-
-2004-07-09 Wim Taymans <wim@fluendo.com>
-
- * examples/seeking/seek.c: (iterate):
- Don't consume all CPU in the idle loop.
-
-2004-07-09 Wim Taymans <wim@fluendo.com>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_new_output_pad),
- (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_process_private):
- Add pad to element *after* setting the pad functions so that
- the scheduler can use the correct ones.
-
-2004-07-09 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (theora_dec_from_granulepos),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_chain):
- Sync to keyframe after seek
-
-2004-07-09 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
- (gst_alsa_sink_loop), (gst_alsa_sink_change_state):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_change_state):
- * ext/libvisual/visual.c: (gst_visual_change_state):
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_change_state):
- * ext/theora/theoradec.c: (theora_dec_change_state):
- * ext/theora/theoraenc.c: (theora_enc_change_state):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_change_state):
- * gst-libs/gst/navigation/navigation.c:
- * gst/adder/gstadder.c: (gst_adder_change_state):
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
- (gst_audio_convert_get_buffer):
- * gst/multipart/multipartdemux.c:
- (gst_multipart_demux_change_state):
- * gst/playback/gstdecodebin.c: (gst_decode_bin_change_state):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
- * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
- * gst/videoscale/gstvideoscale.c:
- (gst_videoscale_handle_src_event):
- * gst/volume/gstvolume.c: (volume_chain_int16):
- don't assert in state change, this should be done by the base
- GstElement class.
- various debugging fixes.
-
-2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * configure.ac:
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
- (gst_play_dispose), (gst_play_set_location),
- (gst_play_set_data_src), (gst_play_set_video_sink),
- (gst_play_set_audio_sink), (gst_play_set_visualization),
- (gst_play_connect_visualization), (gst_play_get_sink_element),
- (gst_play_get_all_by_interface):
- * gst-libs/gst/play/play.h:
- add new method to get elements implementing an interface.
- add various error logging
-
-2004-07-08 Wim Taymans <wim@fluendo.com>
-
- * examples/seeking/seek.c: (make_dv_pipeline), (make_avi_pipeline),
- (make_mpeg_pipeline), (make_mpegnt_pipeline),
- (make_playerbin_pipeline), (query_durations_elems),
- (query_durations_pads), (query_positions_elems),
- (query_positions_pads), (update_scale), (iterate), (stop_seek),
- (main):
- Added playbin seeking example.
-
-2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * gst-libs/gst/play/play.c: (gst_play_set_location),
- (gst_play_set_data_src), (gst_play_set_video_sink),
- (gst_play_set_audio_sink), (gst_play_set_visualization),
- (gst_play_connect_visualization), (gst_play_get_framerate):
- use a macro to look up elements from hash table
-
-2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
- (gst_play_get_length_callback), (gst_play_set_location),
- (gst_play_seek_to_time), (gst_play_set_data_src),
- (gst_play_set_video_sink), (gst_play_set_audio_sink),
- (gst_play_set_visualization), (gst_play_connect_visualization),
- (gst_play_get_sink_element):
- - add debugging info
- - fix looking up sink elements by iterating over complete caps
- - put everything except for source and autoplugger in a complete bin
-
-2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_drain_audio):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_flush_one_pad),
- (gst_alsa_sink_check_event), (gst_alsa_sink_mmap),
- (gst_alsa_sink_write), (gst_alsa_sink_loop):
- * ext/alsa/gstalsasink.h:
- - add debugging info
- - clean up schizophrenia of data/buffer/event
- - fix double event unref error
-
-2004-07-08 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/Makefile.am:
- Add headers to noinst
-
-2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * tools/gst-launch-ext-m.m:
- * tools/gst-launch-ext.1.in:
- convert to the third millenium
-
-2004-07-07 David Schleef <ds@schleef.org>
-
- * sys/dxr3/Makefile.am: noinst_SOURCES should be nodist_SOURCES
-
-2004-07-07 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/Makefile.am:
- * gst/playback/README:
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
- (compare_ranks), (print_feature), (gst_decode_bin_init),
- (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
- (try_to_link_1), (new_pad), (close_link), (type_found),
- (gst_decode_bin_set_property), (gst_decode_bin_get_property),
- (plugin_init):
- * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
- (gst_play_base_bin_class_init), (gst_play_base_bin_init),
- (gst_play_base_bin_dispose), (rebuild_pipeline), (queue_overrun),
- (gen_preroll_element), (no_more_pads), (new_stream),
- (setup_source), (gst_play_base_bin_set_property),
- (gst_play_base_bin_get_property), (gst_play_base_bin_change_state),
- (gst_play_base_bin_add_element),
- (gst_play_base_bin_remove_element),
- (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
- (gst_play_base_bin_unlink_stream),
- (gst_play_base_bin_get_streaminfo):
- * gst/playback/gstplaybasebin.h:
- * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
- (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_dispose), (gst_play_bin_set_property),
- (gst_play_bin_get_property), (gen_video_element),
- (gen_audio_element), (setup_sinks), (gst_play_bin_change_state),
- (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
- (gst_play_bin_get_formats), (gst_play_bin_convert),
- (gst_play_bin_get_query_types), (gst_play_bin_query),
- (plugin_init):
- * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
- (gst_stream_info_get_type), (gst_stream_info_class_init),
- (gst_stream_info_init), (gst_stream_info_new),
- (gst_stream_info_dispose), (gst_stream_info_set_property),
- (gst_stream_info_get_property):
- * gst/playback/gststreaminfo.h:
- * gst/playback/test.c: (gen_video_element), (gen_audio_element),
- (main):
- * gst/playback/test2.c: (main):
- * gst/playback/test3.c: (update_scale), (main):
- More playbin fixes. Added README. Do better element filtering.
- Added base class to preroll media. Added test apps.
-
-2004-07-07 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_flush_decoder):
- * ext/mpeg2dec/gstmpeg2dec.h:
- various debugging improvements. Reset stream to next picture
- instead of sequence header, otherwise seeks cannot work.
-
-2004-07-07 Wim Taymans <wim@fluendo.com>
-
- * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
- (gst_video_box_class_init), (gst_video_box_set_property),
- (gst_video_box_i420), (gst_video_box_ayuv), (gst_video_box_chain):
- Use pad_alloc where possible.
-
-2004-07-07 Wim Taymans <wim@fluendo.com>
-
- * sys/oss/gstosselement.c: (gst_osselement_reset),
- (gst_osselement_parse_caps):
- * sys/oss/gstosselement.h:
- * sys/oss/gstosssrc.c: (gst_osssrc_get):
- Fix offset on osssrc.
-
-2004-07-07 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theora.c: (plugin_init):
- * ext/theora/theoradec.c: (theora_dec_from_granulepos),
- (theora_dec_src_query), (theora_dec_chain):
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (theora_enc_sink_link), (theora_buffer_from_packet),
- (theora_push_packet), (theora_enc_chain):
- Fix theora granulepos calculation.
- Fix overflow in duration/position calculation.
- Bump rank to PRIMARY for theoradec.
- Use granulepos of last packet to calculate position.
- Set keyframe flag on buffers when needed.
-
-2004-07-06 David Schleef <ds@schleef.org>
-
- * gst/playback/Makefile.am: 'test' in bin_PROGRAMS? Are you
- serious? (Fixed, obviously.)
-
-2004-07-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/cs.po:
- added Czech translation (Miloslav Trmac)
-
-2004-07-05 Wim Taymans <wim@fluendo.com>
-
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
- (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
- (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
- (close_link), (type_found), (gst_decode_bin_set_property),
- (gst_decode_bin_get_property), (gst_decode_bin_get_event_masks),
- (gst_decode_bin_send_event), (gst_decode_bin_get_formats),
- (gst_decode_bin_convert), (gst_decode_bin_get_query_types),
- (gst_decode_bin_query), (plugin_init):
- * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
- (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_dispose), (rebuild_pipeline), (get_audio_element),
- (get_video_element), (new_pad), (setup_source),
- (gst_play_bin_set_property), (gst_play_bin_get_property),
- (gst_play_bin_change_state), (gst_play_bin_add_element),
- (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
- (gst_play_bin_send_event), (gst_play_bin_get_formats),
- (gst_play_bin_convert), (gst_play_bin_get_query_types),
- (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
- * gst/playback/test.c: (main):
- More fixes, cleaned up playbin, make it use decodebin. Added
- threaded property to playbin.
-
-2004-07-05 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * gst/playback/Makefile.am:
- * gst/playback/decodetest.c: (main):
- * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
- (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
- (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
- (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
- (close_link), (type_found), (gst_decode_bin_set_property),
- (gst_decode_bin_get_property), (gst_decode_bin_change_state),
- (gst_decode_bin_get_event_masks), (gst_decode_bin_send_event),
- (gst_decode_bin_get_formats), (gst_decode_bin_convert),
- (gst_decode_bin_get_query_types), (gst_decode_bin_query),
- (plugin_init):
- * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
- (gst_play_bin_class_init), (gst_play_bin_init),
- (gst_play_bin_dispose), (gen_default_output), (rebuild_pipeline),
- (collect_sink_pads), (find_compatibles), (close_pad_link),
- (try_to_link_1), (new_pad), (close_link), (type_found),
- (setup_source), (gst_play_bin_set_property),
- (gst_play_bin_get_property), (gst_play_bin_factory_filter),
- (compare_ranks), (gst_play_bin_collect_factories),
- (gst_play_bin_change_state), (gst_play_bin_add_element),
- (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
- (gst_play_bin_send_event), (gst_play_bin_get_formats),
- (gst_play_bin_convert), (gst_play_bin_get_query_types),
- (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
- * gst/playback/test.c: (main):
- Added some playback helper elements and some test apps, very alpha
- still.
-
-2004-07-04 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
- only restart audio when we indeed have an xrun to fix repeated
- xruns. Fix suggested by Giuliano Pochini.
-
-2004-07-03 David Schleef <ds@schleef.org>
-
- * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper): Disable
- call to gst_debug_log() if debugging is disabled (bug #145118)
-
-2004-07-03 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
- use our own functions for restarting the alsa device.
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- I should apply patches myself - use MIN for the third argument, not
- the second, this fixes seeking
-
-2004-07-02 David Schleef <ds@schleef.org>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
- (gst_flacdec_write): Actually, GST_PAD_CAPS() has nothing to
- do with the logic.
-
-2004-07-02 David Schleef <ds@schleef.org>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_write): Set duration on
- output buffers. Fix logic mistake. (bug #144866)
-
-2004-07-02 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/xoverlay/Makefile.am: xoverlay no longer depends
- on X. (bug #144753)
-
-2004-07-02 David Schleef <ds@schleef.org>
-
- * gst/wavenc/gstwavenc.c: (gst_wavenc_setup),
- (gst_wavenc_stop_file): Switch to GST_WRITE_UINT32_LE macros
- (bug #144624)
- * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
- (gst_osselement_rate_probe_check): Add another workaround for
- buggy drivers (bug #145336)
-
-2004-07-02 David Schleef <ds@schleef.org>
-
- * gst/tcp/gstmultifdsink.c: (gst_multifdsink_handle_client_write):
- Most systems don't have MSG_NOSIGNAL.
-
-2004-07-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/tuner/Makefile.am:
- (hopefully) fix both install and dist and make error message useful.
- needs testing across automakes.
-
-2004-07-02 Benjamin Otte <otte@gnome.org>
-
- * ext/ogg/gstogg.c: (plugin_init):
- we require bytestream now
- * ext/ogg/gstoggdemux.c:
- huge diff to implement chain setup in a fast and generic way. This
- improves tag reading and startup of huge files (read: Theora videos)
- quite a bit. It probably contains bugs, too, so please test.
- Seeking is not improved to the fast method.
-
-2004-06-29 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- * ext/ogg/gstoggmux.c:
- Fix memleak in oggdemux when running unconnected pads.
- doc update in mux, start working on keyframe mode.
-
-2004-06-29 Benjamin Otte <otte@gnome.org>
-
- * sys/oss/gstosssink.c:
- * sys/oss/gstosssrc.c:
- advertise correct template caps - we indeed do non-native endianness
- and 8bit audio has no endianness
- * sys/ximage/ximagesink.c: (gst_ximagesink_getcaps):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps):
- avoid (wrong) duplications in getcaps function and return
- template caps
-
-2004-06-29 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
- (gst_multifdsink_class_init), (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_clear),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_client_queue_data),
- (gst_multifdsink_client_queue_caps),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
- (gst_multifdsink_init_send), (gst_multifdsink_close):
- Fix wrong GList iteration that could crash the server when
- more then 2 clients disconnect at the same time. Read all the
- pending commands in one batch to recover from command storms under
- very heavy load.
-
-2004-06-28 Wim Taymans <wim@fluendo.com>
-
- * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
- (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
- (gst_videomixer_pad_set_property),
- (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
- (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
- (gst_videomixer_class_init), (gst_videomixer_init),
- (gst_videomixer_request_new_pad), (gst_videomixer_blend_ayuv_i420),
- (pad_zorder_compare), (gst_videomixer_sort_pads),
- (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
- (gst_videomixer_fill_queues), (gst_videomixer_blend_buffers),
- (gst_videomixer_update_queues), (gst_videomixer_loop),
- (plugin_init):
- Avoid divide by zero, choose masterpad as the pad with the highest
- framerate.
-
-2004-06-27 Julien Moutte <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
- (gst_ximagesink_xwindow_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
- (gst_xvimagesink_xwindow_new): I prefer locking the mutex in the
- function directly. We might want to call it from somewhere else one day.
-
-2004-06-27 Julien Moutte <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
- (gst_ximagesink_xwindow_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
- (gst_xvimagesink_xwindow_new): Trying to fix the random behaviour of
- window decorations.
-
-2004-06-27 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
- (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
- (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state),
- (gst_dvdec_set_property), (gst_dvdec_get_property):
- * ext/dv/gstdvdec.h:
- Implement drop_factor property to lower the framerate with
- a factor.
-
-2004-06-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/tuner/Makefile.am:
- unbreak Company's fix that didn't install the -enum.h files
-
-2004-06-27 Wim Taymans <wim@fluendo.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_push), (gst_dvdec_loop),
- (gst_dvdec_change_state):
- * ext/dv/gstdvdec.h:
- Fix timestamp, duration and offset of the buffers.
-
-2004-06-27 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
- (gst_multifdsink_class_init), (gst_multifdsink_add),
- (gst_multifdsink_remove), (gst_multifdsink_clear),
- (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_client_queue_data),
- (gst_multifdsink_client_queue_caps),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
- (gst_multifdsink_init_send), (gst_multifdsink_close):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcpserversink.c:
- (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_handle_select), (gst_tcpserversink_close):
- More multifdsink fixes, more recovery policy fixes.
- Removed stupid g_print
-
-2004-06-26 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
- (gst_multifdsink_get_type), (gst_multifdsink_base_init),
- (gst_multifdsink_class_init), (gst_multifdsink_init),
- (gst_multifdsink_debug_fdset), (gst_multifdsink_client_remove),
- (gst_multifdsink_handle_client_read),
- (gst_multifdsink_client_queue_data),
- (gst_multifdsink_client_queue_caps),
- (gst_multifdsink_client_queue_buffer),
- (gst_multifdsink_handle_client_write),
- (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
- (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
- (gst_multifdsink_chain), (gst_multifdsink_set_property),
- (gst_multifdsink_get_property), (gst_multifdsink_init_send),
- (gst_multifdsink_close), (gst_multifdsink_change_state):
- * gst/tcp/gstmultifdsink.h:
- * gst/tcp/gsttcpplugin.c: (plugin_init):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_get_type),
- (gst_tcpserversink_class_init), (gst_tcpserversink_init),
- (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_handle_select),
- (gst_tcpserversink_set_property), (gst_tcpserversink_get_property),
- (gst_tcpserversink_init_send), (gst_tcpserversink_close):
- * gst/tcp/gsttcpserversink.h:
- Added multifdsink, made tcpserversink a subclass of fdsink, removed
- one of the locks, added recovery policy to multifdsink.
-
-2004-06-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_chain):
- fix decision for when getting frames with same timestamp
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
- (gst_v4lsrc_get), (gst_v4lsrc_set_property),
- (gst_v4lsrc_get_property):
- * sys/v4l/gstv4lsrc.h:
- add latency offset property
-
-2004-06-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_chain),
- (plugin_init):
- fix debugging. add category.
-
-2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
- fix wrong offsets
-
-2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
- (gst_alsa_src_get_time), (gst_alsa_src_loop),
- (gst_alsa_src_change_state):
- return a time that is in sync with the element's processing
-
-2004-06-25 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
- (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_client_remove),
- (gst_tcpserversink_handle_client_read),
- (gst_tcpserversink_client_queue_data),
- (gst_tcpserversink_client_queue_caps),
- (gst_tcpserversink_client_queue_buffer),
- (gst_tcpserversink_handle_client_write),
- (gst_tcpserversink_queue_buffer),
- (gst_tcpserversink_handle_clients), (gst_tcpserversink_thread),
- (gst_tcpserversink_chain), (gst_tcpserversink_set_property),
- (gst_tcpserversink_get_property), (gst_tcpserversink_init_send),
- (gst_tcpserversink_close):
- * gst/tcp/gsttcpserversink.h:
- Serversink rewrite. Really do non blocking writes to clients and
- maintain an internal queue to handle slower clients while not
- disturbing fast clients.
-
-2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
- better debug, don't override OFFSET and OFFSET_END
-
-2004-06-25 Iain <iain@prettypeople.org>
-
- * gst-libs/gst/media-info/media-info-priv.c (gmi_set_mime): Add
- name=source for the wavparse pipeline.
-
-2004-06-24 Johan Dahlin <johan@gnome.org>
-
- * ext/theora/theoraenc.c (theora_enc_chain): Call
- gst_pad_try_set_caps instead of gst_pad_set_explicit_caps so the
- streamheader caps are set correctly.
-
-2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisenc.c: (raw_caps_factory),
- (gst_vorbisenc_setup), (gst_vorbisenc_set_property):
- respect minimum bitrate; same could be done for max bitrate
-
-2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisenc.c: (raw_caps_factory),
- (gst_vorbisenc_setup):
- fix sample rate range
-
-2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_class_init),
- (gst_oggvorbisenc_setup):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init),
- (gst_vorbisenc_setup):
- resolve ambiguities in code and description
-
-2004-06-24 Wim Taymans <wim@fluendo.com>
-
- * ext/alsa/gstalsa.c: (gst_alsa_start), (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
- (gst_alsa_src_update_avail), (gst_alsa_src_loop):
- Use alsa trigger_tstamp to get the timestamp of the first
- sample in the buffer for more precise sync. Some cleanups.
-
-2004-06-24 Wim Taymans <wim@fluendo.com>
-
- * gst/audiorate/gstaudiorate.c: (gst_audiorate_link),
- (gst_audiorate_init), (gst_audiorate_chain),
- (gst_audiorate_set_property), (gst_audiorate_get_property):
- * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
- (gst_videorate_chain):
- Added some logging, fixed an overflow bug in videorate.
-
-2004-06-24 Benjamin Otte <otte@gnome.org>
-
- * ext/kio/Makefile.am:
- fix for builddir != srcdir and distcheck
-
-2004-06-24 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/tuner/Makefile.am:
- * gst/tcp/Makefile.am:
- * sys/dxr3/Makefile.am:
- don't include -enumtypes.[ch] or -marshal.[ch] files in the disted
- tarball.
- Also add all *.list files that were missing.
- * Makefile.am:
- add a distcheck hook to ensure the above doesn't happen again.
-
-2004-06-23 David I. Lehn <dlehn@users.sourceforge.net>
-
- * ext/Makefile.am: s/DTS_DIR=dvdread/DTS_DIR=dts/
-
-2004-06-23 Colin Walters <walters@redhat.com>
-
- * m4/Makefile.am: Distribute gst-fionread.m4.
-
-2004-06-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: back to dev
-
-2004-06-23 Wim Taymans <wim@fluendo.com>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
- (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
- (gst_alsa_sink_loop), (gst_alsa_sink_get_time):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
- (gst_alsa_src_get_time), (gst_alsa_src_update_avail),
- (gst_alsa_src_loop):
- Add clock to alsasrc. Take new capture timestamp when
- restarting after an overrun. Split up some functions between
- alsasrc and alsasink.
-
-=== release 0.8.2 ===
-
-2004-06-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
- (gst_alsa_change_state), (gst_alsa_update_avail),
- (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- merge back changes from release
-
-2004-06-23 Wim Taymans <wim@fluendo.com>
-
- * gst/audiorate/gstaudiorate.c: (gst_audiorate_class_init),
- (gst_audiorate_init), (gst_audiorate_chain),
- (gst_audiorate_set_property), (gst_audiorate_get_property):
- Implement sample dropping and notify
-
-2004-06-22 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (theora_enc_sink_link), (theora_buffer_from_packet),
- (theora_push_packet), (theora_enc_chain):
- Some cleanups, make sure the timestamps are correct.
-
-2004-06-22 Wim Taymans <wim@fluendo.com>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_time), (gst_alsa_clock_update),
- (gst_alsa_change_state), (gst_alsa_update_avail),
- (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
- Cleanups, take queued samples into account when reporting
- the time.
-
-2004-06-22 Wim Taymans <wim@fluendo.com>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
- (gst_videorate_init):
- Initialize the property as well.
-
-2004-06-22 Wim Taymans <wim@fluendo.com>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
- (gst_videorate_init), (gst_videorate_chain),
- (gst_videorate_set_property), (gst_videorate_get_property):
- Add property to make videorate silent.
- Add property to prefer new frames over old ones.
-
-2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/osxvideo/Makefile.am:
- Workaround so that the osxvideo .so file gets linked with the
- Cocoa, OpenGL and QuickTime frameworks
-
-2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * sys/osxaudio/Makefile.am:
- Workaround so that the osxaudio .so file gets linked with the
- CoreAudio framework
-
-2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- Whoops, my fault...fixed build issues
-
-2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- Add objective-c support if running in Darwin/Mac OS X
- * sys/Makefile.am:
- * sys/osxvideo:
- * sys/osxvideo/Makefile.am:
- * sys/osxvideo/osxvideosink.h:
- * sys/osxvideo/osxvideosink.m:
- * sys/osxvideo/cocoawindow.h:
- * sys/osxvideo/cocoawindow.m:
- Add osxvideosink, a cocoa-based osx video sink
-
-
-2004-06-19 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/dvdnav/gst-dvd:
- Grab the gconf key from the right spot
- * gst/debug/gstnavseek.c: (gst_navseek_init),
- (gst_navseek_segseek), (gst_navseek_handle_src_event),
- (gst_navseek_chain):
- * gst/debug/gstnavseek.h:
- Add 's', 'e' and 'l' keypresses to navseek to define the start,end
- and loop parameters of a segment seek.
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_init),
- (gst_videotestsrc_get_event_masks),
- (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
- * gst/videotestsrc/gstvideotestsrc.h:
- Add seeking support to videotestsrc
- Initialise the timestamp_offset variable.
-
-2004-06-18 Wim Taymans <wim@fluendo.com>
-
- * ext/sidplay/gstsiddec.cc:
- Fix negotiation and set correct end offset.
-
-2004-06-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: branch and prerelease
-
-2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init),
- (gst_tcpclientsrc_getcaps), (gst_tcpclientsrc_get),
- (gst_tcpclientsrc_init_receive):
- * gst/tcp/gsttcpclientsrc.h:
- read caps when connecting to server for GDP so we set them correctly
-
-2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videorate/gstvideorate.c: (gst_videorate_chain):
- notify drops and duplicates
- * gst/videoscale/videoscale.c: (videoscale_get_structure):
- no good reason to limit ourselves to 100x100
-
-2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
- (gst_v4lsrc_open), (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
- (gst_v4lsrc_get), (gst_v4lsrc_set_property),
- (gst_v4lsrc_get_property):
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
- (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
- (gst_v4l_set_audio):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame),
- (gst_v4lsrc_try_capture):
- * sys/v4l/v4lsrc_calls.h:
- change try_palette to more general try_capture
- add autoprobe option so we can turn off autoprobing
- various fixes
-
-2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- add videorate
- * sys/ximage/ximagesink.c: (gst_ximagesink_finalize),
- (gst_ximagesink_class_init):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_finalize),
- (gst_xvimagesink_class_init):
- run them as finalize, not dispose, since dispose can be invoked
- multiple times
-
-2004-06-17 Wim Taymans <wim@fluendo.com>
-
- * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
- (gst_alsa_get_time), (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_init), (gst_alsa_src_loop),
- (gst_alsa_src_change_state):
- * ext/alsa/gstalsasrc.h:
- Make the xrun code timestamp and offset the buffers correctly.
- moved the clock to the base class, use alsa methods to get time.
- Do correct timestamping on outgoing buffers.
-
-2004-06-17 Wim Taymans <wim@fluendo.com>
-
- * gst/audiorate/Makefile.am:
- * gst/audiorate/gstaudiorate.c: (gst_audiorate_get_type),
- (gst_audiorate_base_init), (gst_audiorate_class_init),
- (gst_audiorate_link), (gst_audiorate_init), (gst_audiorate_chain),
- (gst_audiorate_set_property), (gst_audiorate_get_property),
- (gst_audiorate_change_state), (plugin_init):
- Added an audiorate converter that fills in gaps.
-
-2004-06-17 Johan Dahlin <johan@gnome.org>
-
- * ext/tcp/*: Revert Zaheer changes, to make things actually work again.
-
-2004-06-16 Wim Taymans <wim@fluendo.com>
-
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
- (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
- (gst_v4lsrc_get), (gst_v4lsrc_set_property),
- (gst_v4lsrc_get_property):
- * sys/v4l/gstv4lsrc.h:
- Added a copy mode to v4lsrc where it will output a copied version
- of its internal hardware buffer.
- Fix the wrong FLAG_SET usage. The flags are integers, not bits, you
- can't | them.
-
-2004-06-16 Wim Taymans <wim@fluendo.com>
-
- * sys/oss/gstosssrc.c: (gst_osssrc_get):
- Timestamp fixes.
-
-2004-06-16 Wim Taymans <wim@fluendo.com>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
- (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
- (gst_v4lsrc_get), (gst_v4lsrc_set_property),
- (gst_v4lsrc_get_property):
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
- Added a sync mode enum property to control v4lsrc timestamp method
- Removed the use-fixed-fps property and moved functionality in
- the enum.
- Don't error on an error value from v4l-conf, it might not always
- be a real error.
-
-2004-06-16 Wim Taymans <wim@fluendo.com>
-
- * gst/videorate/Makefile.am:
- * gst/videorate/gstvideorate.c: (gst_videorate_get_type),
- (gst_videorate_base_init), (gst_videorate_class_init),
- (gst_videorate_getcaps), (gst_videorate_link),
- (gst_videorate_init), (gst_videorate_chain),
- (gst_videorate_set_property), (gst_videorate_get_property),
- (gst_videorate_change_state), (plugin_init):
- Added a video timestamp corrector.
-
-2004-06-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- fixed a potential leak with previous commit
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
-
-2004-06-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
- Added missing refcount, fixes bug #144425
- Cheers Tim for finding the bug
-
-2004-06-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4l.c: (plugin_init):
- * sys/v4l/gstv4lcolorbalance.c:
- * sys/v4l/gstv4lcolorbalance.h:
- * sys/v4l/gstv4lelement.c:
- * sys/v4l/gstv4lelement.h:
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
- * sys/v4l/gstv4lmjpegsink.h:
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
- * sys/v4l/gstv4lmjpegsrc.h:
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
- (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
- (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/gstv4ltuner.c:
- * sys/v4l/gstv4ltuner.h:
- * sys/v4l/gstv4lxoverlay.c:
- * sys/v4l/gstv4lxoverlay.h:
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
- (gst_v4l_set_window), (gst_v4l_enable_overlay):
- * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
- (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
- (gst_v4l_set_audio):
- * sys/v4l/v4l_calls.h:
- * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
- (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_sync_frame),
- (gst_v4lmjpegsink_set_buffer), (gst_v4lmjpegsink_set_playback),
- (gst_v4lmjpegsink_playback_init),
- (gst_v4lmjpegsink_playback_start), (gst_v4lmjpegsink_get_buffer),
- (gst_v4lmjpegsink_play_frame), (gst_v4lmjpegsink_wait_frame),
- (gst_v4lmjpegsink_playback_stop),
- (gst_v4lmjpegsink_playback_deinit):
- * sys/v4l/v4lmjpegsink_calls.h:
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
- (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_buffer),
- (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
- (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_capture_start),
- (gst_v4lmjpegsrc_grab_frame), (gst_v4lmjpegsrc_requeue_frame),
- (gst_v4lmjpegsrc_capture_stop), (gst_v4lmjpegsrc_capture_deinit):
- * sys/v4l/v4lmjpegsrc_calls.h:
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
- (gst_v4lsrc_sync_frame), (gst_v4lsrc_set_capture),
- (gst_v4lsrc_capture_init), (gst_v4lsrc_capture_start),
- (gst_v4lsrc_grab_frame), (gst_v4lsrc_requeue_frame),
- (gst_v4lsrc_capture_stop), (gst_v4lsrc_capture_deinit),
- (gst_v4lsrc_try_palette):
- * sys/v4l/v4lsrc_calls.h:
- bunch of paranoia cleanups
-
-2004-06-14 David Schleef <ds@schleef.org>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_init),
- (cdparanoia_get), (cdparanoia_open), (cdparanoia_change_state):
- Send discont events and change timestamps appropriately when
- we get a seek event. (bug #144240)
- * ext/cdparanoia/gstcdparanoia.h:
-
-2004-06-14 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: Use snd_pcm_hw_params_set_rate _near instead of
- snd_pcm_hw_params_set_rate since the latter fails for no good
- reason on some setups.
-
-2004-06-14 David Schleef <ds@schleef.org>
-
- * gst/volume/demo.c: (value_changed_callback): exp10() is not
- standard. Thank you for playing.
-
-2004-06-14 Wim Taymans <wim@fluendo.com>
-
- * gst/ffmpegcolorspace/imgconvert.c: (img_convert):
- Patch 1.3 broke the ordering of the colorspace info and
- made the plugin basically work by coincidence, reordered
- the info.
-
-2004-06-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/lame/gstlame.c:
- * ext/mad/gstmad.c:
- sync caps. Make sure mad can only output a list of rates, not
- a full range. In the future, have three caps lists for each of the
- mpeg versions. Change mpegversion to a double as well.
-
-2004-06-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/volume/.cvsignore:
- * gst/volume/Makefile.am:
- * gst/volume/demo.c: (value_changed_callback), (idler),
- (setup_gui), (main):
- added small demo app
-
-2004-06-13 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/esd/esdsink.c: (gst_esdsink_change_state):
- * ext/esd/esdsink.h:
- Close the esd connection on pause, because esd will just wait -
- blocking all other esd clients indefinitely.
-
-2004-06-12 Christophe Fergeau <teuf@gnome.org>
-
- * gst/tags/gstvorbistag.c: replaced a g_warning which I added in my
- previous commit with GST_DEBUG
-
-2004-06-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- add a header check for a dvdread header in dvdnav. Fixes #133002
-
-2004-06-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
- * gst/tcp/gsttcpclientsink.h:
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
- * gst/tcp/gsttcpclientsrc.h:
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init),
- (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_init_send):
- * gst/tcp/gsttcpserversink.h:
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
- * gst/tcp/gsttcpserversrc.h:
- Modified the tcp plugins so they are portable (IPv4,IPv6, any future
- version of IP)
-
-2004-06-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * configure.ac:
- Added ogg library so that OSX detects libtheora properly
-
-2004-06-11 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoradec.c: (theora_dec_chain),
- (theora_dec_change_state):
- Don't try to decode frames before we received a keyframe.
-
-2004-06-11 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
- (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
- (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
- Added property to set the maximum delay of a page.
-
-2004-06-10 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
- (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
- (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
- Added max-delay property to control the maximum amount
- of data to put in one page.
-
-2004-06-10 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (gst_theora_enc_init), (theora_enc_sink_link),
- (theora_buffer_from_packet), (theora_enc_set_property),
- (theora_enc_get_property):
- Set duration on encoded buffer, added some more properties
-
-2004-06-10 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
- (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
- * ext/theora/theoraenc.c: (theora_enc_chain):
- Fix refcounting bugs
-
-2004-06-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
- (gst_asf_demux_loop), (gst_asf_demux_process_file),
- (gst_asf_demux_process_data), (gst_asf_demux_handle_data),
- (gst_asf_demux_process_object), (gst_asf_demux_get_stream),
- (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event),
- (gst_asf_demux_handle_src_event), (gst_asf_demux_handle_src_query),
- (gst_asf_demux_change_state):
- * gst/asfdemux/gstasfdemux.h:
- You know Chimaira? "I - HATE - EVERYTHING". Yeah, that's what this
- feels like. I think we should set a new requirement for demuxers
- from now on to implement sane loop functions, data loops, query
- and seek functions before first commit into CVS. And this commit
- fixes all of the above.
-
-2004-06-10 Christophe Fergeau <teuf@gnome.org>
-
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add): make sure parsed
- vorbis comments are properly encoded in UTF-8 before adding them
- to a GstTagList
-
-2004-06-09 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (add_channels):
- handle min <= max correctly
- * ext/alsa/gstalsa.c: (gst_alsa_fixate_to_mimetype),
- (gst_alsa_fixate_field_nearest_int), (gst_alsa_fixate):
- add fixation functions so we fixate correctly. No preferring of alaw
- anymore because it's the first structure.
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsa.c: (gst_alsa_sw_params_dump),
- (gst_alsa_hw_params_dump):
- add functions to ease debugging in alsalib
- * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
- (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
- (gst_alsa_start_audio):
- only specify hw params if we really setup a format (fixes #134007 -
- or at least works around it)
-
-2004-06-09 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
- (gst_ogg_mux_next_buffer), (gst_ogg_mux_buffer_from_page),
- (gst_ogg_mux_push_page), (gst_ogg_mux_get_headers),
- (gst_ogg_mux_set_header_on_caps), (gst_ogg_mux_send_headers),
- (gst_ogg_mux_loop):
- Use stream caps to setup the initial pages in the ogg stream.
- Correctly set the streamheader caps on the srcpad.
-
-2004-06-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
- (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
- (gst_v4lsrc_getcaps):
- * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
- (gst_v4l_get_picture), (gst_v4l_get_audio), (gst_v4l_set_audio):
- add querying of fps lists for webcams. Negotiating to a framerate
- now works.
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/theora/theoraenc.c: (theora_buffer_from_packet),
- (theora_push_buffer), (theora_push_packet),
- (theora_set_header_on_caps), (theora_enc_chain):
- mark buffers and put on streamheader, raw theora streaming
- now works too, whee
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
- (gst_tcp_gdp_read_caps):
- do a looping read for caps and GDP headers too
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get):
- return EOS instead of NULL in _get
-
-2004-06-08 Wim Taymans <wim@fluendo.com>
-
- * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
- (gst_tcp_gdp_read_caps), (gst_tcp_gdp_write_header),
- (gst_tcp_gdp_write_caps):
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
- (gst_tcpserversrc_gdp_read_header), (gst_tcpserversrc_get):
- Memory leak fixes
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/Makefile.am:
- * ext/vorbis/vorbis.c: (plugin_init):
- * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_base_init),
- (gst_vorbis_parse_class_init), (gst_vorbis_parse_init),
- (vorbis_parse_set_header_on_caps), (vorbis_parse_chain),
- (vorbis_parse_change_state):
- * ext/vorbis/vorbisparse.h:
- adding a vorbisparse element that marks the buffers, streaming
- raw vorbis using GDP now works, whee
-
-2004-06-08 Wim Taymans <wim@fluendo.com>
-
- * ext/jpeg/Makefile.am:
- * ext/jpeg/README:
- * ext/jpeg/gstjpeg.c: (plugin_init):
- * ext/jpeg/gstsmokedec.c: (gst_smokedec_get_type),
- (gst_smokedec_base_init), (gst_smokedec_class_init),
- (gst_smokedec_init), (gst_smokedec_link), (gst_smokedec_chain):
- * ext/jpeg/gstsmokedec.h:
- * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_get_type),
- (gst_smokeenc_base_init), (gst_smokeenc_class_init),
- (gst_smokeenc_init), (gst_smokeenc_getcaps), (gst_smokeenc_link),
- (gst_smokeenc_resync), (gst_smokeenc_chain),
- (gst_smokeenc_set_property), (gst_smokeenc_get_property):
- * ext/jpeg/gstsmokeenc.h:
- * ext/jpeg/smokecodec.c: (smokecodec_init_destination),
- (smokecodec_flush_destination), (smokecodec_term_destination),
- (smokecodec_init_source), (smokecodec_fill_input_buffer),
- (smokecodec_skip_input_data), (smokecodec_resync_to_restart),
- (smokecodec_term_source), (smokecodec_encode_new),
- (smokecodec_decode_new), (smokecodec_info_free),
- (smokecodec_set_quality), (smokecodec_get_quality),
- (smokecodec_set_threshold), (smokecodec_get_threshold),
- (smokecodec_set_bitrate), (smokecodec_get_bitrate),
- (find_best_size), (abs_diff), (put), (smokecodec_encode),
- (smokecodec_parse_header), (smokecodec_decode):
- * ext/jpeg/smokecodec.h:
- Added a new simple jpeg based codec
-
-2004-06-08 Wim Taymans <wim@fluendo.com>
-
- * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
- (gst_multipart_mux_loop):
- Fix memory leak
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_client_remove),
- (gst_tcpserversink_handle_client_read), (gst_tcp_buffer_write),
- (gst_tcpserversink_handle_client_write), (gst_tcpserversink_chain),
- (gst_tcpserversink_init_send), (gst_tcpserversink_close):
- * gst/tcp/gsttcpserversink.h:
- take streamheader into account
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/level/Makefile.am:
- * gst/level/gstlevel.c: (gst_level_class_init):
- clean up marshal generation
-
-2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
- (gst_tcpclientsink_class_init), (gst_tcpclientsink_init),
- (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property):
- * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
- (gst_tcpclientsrc_init), (gst_tcpclientsrc_set_property),
- (gst_tcpclientsrc_get_property):
- * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
- (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
- (gst_tcpserversink_handle_client_read),
- (gst_tcpserversink_handle_client_write),
- (gst_tcpserversink_set_property), (gst_tcpserversink_get_property):
- * gst/tcp/gsttcpserversink.h:
- add signals client-added and client-removed
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
- (gst_tcpserversrc_init), (gst_tcpserversrc_set_property),
- (gst_tcpserversrc_get_property):
- uniformized, change default protocol to NONE
- * gst/tcp/gsttcp-marshal.list: added
-2004-06-07 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- handle discont events if they happen before caps nego
-
-2004-06-07 Wim Taymans <wim@fluendo.com>
-
- * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
- (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
- (gst_multipart_demux_plugin_init):
- * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
- (gst_multipart_mux_init), (gst_multipart_mux_loop),
- (gst_multipart_mux_change_state):
- Small updates, fix a memleak
-
-2004-06-07 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * configure.ac: OSS portability
- * ext/arts/gst_arts.c: idem
- * sys/oss/gstosselement.c: idem
- * sys/oss/gstossmixer.c: idem
- * sys/oss/gstosssink.c: idem
- * sys/oss/gstosssrc.c: idem
- * sys/oss/oss_probe.c: idem
- - check for soundcard.h in different places for some BSD
-
-2004-06-07 Jan Schmidt <thaytan@mad.scientist.com>
-
- * AUTHORS:
- Add me to the authors file
- * configure.ac:
- Increase the libdv requirement to >= version 0.100
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
- (gst_dvdec_src_query), (gst_dvdec_handle_sink_event),
- (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state):
- * ext/dv/gstdvdec.h:
- Add support for the new_media flag when sending DISCONT events
- Make the querying work when video pad is not linked
-
-2004-06-07 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init):
- create a NULL-initialized array of pads, so we don't think they
- exist already. (fixes #143130)
-
-2004-06-07 Benjamin Otte <otte@gnome.org>
-
- * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init),
- (mixmatrix_resize), (gst_mixmatrix_set_all_caps),
- (gst_mixmatrix_request_new_pad), (gst_mixmatrix_loop):
- don't use // coments
-
-2004-06-07 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_samples_to_timestamp):
- cast to GstClockTime to get higher granularity
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- use gst_element_set_time_delay to get the exact time
- * ext/mad/gstmad.c: (gst_mad_chain):
- use the negotiated rate instead of the current frame's rate which
- might be wrong because of bit errors. This avoids emitting totally
- bogus timestamps and screwing sync.
- (fixes #143454)
-
-2004-06-07 Tim-Philipp Müller <t.i.m@zen.co.uk>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * gst/adder/gstadder.c: (gst_adder_loop):
- properly error out when no negotiation has happened yet. (fixes
- #143032)
-
-2004-06-06 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
- forward correctly transformed offset in discont events. Based on
- patch by Arwed v. Merkatz. (fixes #142851)
-
-2004-06-06 David Schleef <ds@schleef.org>
-
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c: that's
- G_HAVE_GNUC_VARARGS, not G_HAVE_GNU_VARARGS. Should fix compile
- problems on several systems.
-
-2004-06-06 Benjamin Otte <otte@gnome.org>
-
- * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
- use explicit caps on the srcpad
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- properly error out if caps couldn't be set (fixes #142764)
-
-2004-06-06 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
- (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
- (gst_alsa_start_audio):
- - don't call set_periods_integer anymore, it breaks the
- configuration randomly
- - call snd_pcm_hw_params_set_access directly instead of using masks
- - don't fail if the sw_params can't be set, just use the default
- params and hope it works. Alsalib has weird issues when you touch
- sw_params and does no proper error reporting about what failed.
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
- (gst_alsa_close_audio):
- make our alsa debugging go via gst debugging and not conditionally
- defined
- * ext/alsa/gstalsa.h:
- add ALSA_DEBUG_FLUSH macro
- * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper),
- (plugin_init):
- wrap alsa errors to be printed via the gst debugging system and not
- spammed to stderr
-
-2004-06-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_init),
- (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
- (gst_qtdemux_handle_sink_event), (gst_qtdemux_change_state),
- (gst_qtdemux_loop_header), (qtdemux_dump_mvhd),
- (qtdemux_parse_trak):
- * gst/qtdemux/qtdemux.h:
- Bitch. Also known as seeking, querying & co.
- * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
- (gst_osssink_change_state):
- * sys/oss/gstosssink.h:
- Resyncing is for weenies, this hack is no longer needed and was
- broken anyway (since it - unintendedly - always leaves resync to
- TRUE).
-
-2004-06-05 Andrew Turner <zxombie@hotpop.com>
-
- * gst/tcp/gsttcp.c: portability (Solaris 10/FreeBSD)
- * gst/tcp/gsttcpclientsrc.h: idem
- - define MSG_NOSIGNAL if not done
- - include unistd.h for off_t
- (fixes #143749)
-
-2004-06-05 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- * ext/kio/Makefile.am:
- check for qt's moc preprocessor explicitly and use it
-
-2004-06-03 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
- don't get a signal for EPIPE on socket writes
- (somebody check if this works on other platforms)
-
-2004-06-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
- check error condition on available samples correctly
-
-2004-06-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_time):
- avoid a segfault
- * gst/tcp/gsttcp.c: (gst_tcp_socket_write), (gst_tcp_socket_read),
- (gst_tcp_gdp_read_header), (gst_tcp_gdp_read_caps):
- * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
- (gst_tcpserversrc_gdp_read_header):
- use ssize_t over size_t since the former is signed and thus the
- check for error codes can work
-
-2004-06-02 Wim Taymans <wim@fluendo.com>
-
- reviewed by: Johan
-
- * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
- (gst_multipart_mux_loop):
- Oops
-
-2004-06-02 Wim Taymans <wim@fluendo.com>
-
- * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
- (gst_multipart_mux_init), (gst_multipart_mux_loop),
- (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
- (gst_multipart_mux_change_state):
- Added configurable boundary specifier, added the value as a
- caps field as well.
-
-2004-06-02 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcpclientsrc.c:
- * gst/tcp/gsttcpclientsrc.h:
- * gst/tcp/gsttcpserversrc.c:
- - portability fix, to compile on OSX
- (fixes #143146)
-
- * sys/osxaudio/gstosxaudioelement.c:
- * sys/osxaudio/gstosxaudiosink.c:
- * sys/osxaudio/gstosxaudiosrc.c:
- - compilation warnings on OSX
- (fixes #143153)
-
-2004-06-02 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/vorbis/vorbisdec.c : sign warning fixes
-
- * gst-libs/gst/mixer/mixertrack.c :
- do no use defines which are glib 2.4 specific
-
-2004-06-01 Christophe Fergeau <teuf@gnome.org>
-
- * ext/flac/gstflactag.c: strip ending framing bit from vorbiscomment
- buffer since libflac doesn't expect it (reports a sync error when
- it encounters that)
-
-
-2004-06-01 Owen Fraser-Green <owen@discobabe.net>
-
- * gst-libs/gst/mixer/mixertrack.h: Changed struct syntax
- * gst-libs/gst/mixer/mixertrack.c:
- (gst_mixer_track_get_property), (get_mixer_track_init),
- (get_mixer_track_get_property): Added property accessors
- * gst-libs/gst/mixer/mixeroptions.h: Changed struct syntax
- * gst-libs/gst/mixer/mixeroptions.c:
- (gst_mixer_options_get_values): Added
- * gst-libs/gst/mixer/mixer.h: Changed GstMixerClass syntax
- * gst-libs/gst/mixer/mixer.c: Fixed comment
-
-
-2004-06-01 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
- improve error messages on open
-
-
-2004-06-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
- check if v4l-conf is in path
-
-2004-06-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
- change assert to a more readable error message
-
-2004-05-31 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst-libs/gst/tuner/tunerchannel.h:
- - add a freq_multiplicator field to make the conversion
- between internal frequency unit and Hz
- * sys/v4l/gstv4lelement.c:
- * sys/v4l2/gstv4l2element.c:
- - change default video device to /dev/video0
- * sys/v4l/v4l_calls.c:
- * sys/v4l2/v4l2_calls.c:
- - we only expose frequency to the user in Hz instead of
- bastard v4lX unit (either 62.5kHz or 62.5Hz)
-
-2004-05-31 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- Initialise b_o_s and e_o_s variables
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- Add some unusual fourcc's from mplayer avi's
- * gst/multipart/multipartmux.c: (gst_multipart_mux_plugin_init):
- Make the muxer have rank GST_RANK_NONE, so it doesn't mess up
- autoplugging.
-
-2004-05-28 Wim Taymans <wim@fluendo.com>
-
- * configure.ac:
- * gst/alpha/Makefile.am:
- * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
- (gst_alpha_get_type), (gst_alpha_base_init),
- (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
- (gst_alpha_get_property), (gst_alpha_sink_link), (gst_alpha_add),
- (gst_alpha_chroma_key), (gst_alpha_chain),
- (gst_alpha_change_state), (plugin_init):
- A plugin to add an alpha channel to I420 video. Can optionally do
- chroma keying.
- * gst/multipart/Makefile.am:
- * gst/multipart/multipart.c: (plugin_init):
- * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
- (gst_multipart_demux_class_init), (gst_multipart_demux_init),
- (gst_multipart_demux_finalize), (gst_multipart_demux_handle_event),
- (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
- (gst_multipart_demux_change_state),
- (gst_multipart_demux_plugin_init):
- * gst/multipart/multipartmux.c: (gst_multipart_mux_get_type),
- (gst_multipart_mux_base_init), (gst_multipart_mux_class_init),
- (gst_multipart_mux_get_sink_event_masks), (gst_multipart_mux_init),
- (gst_multipart_mux_sinkconnect), (gst_multipart_mux_pad_link),
- (gst_multipart_mux_pad_unlink),
- (gst_multipart_mux_request_new_pad),
- (gst_multipart_mux_handle_src_event),
- (gst_multipart_mux_next_buffer), (gst_multipart_mux_compare_pads),
- (gst_multipart_mux_queue_pads), (gst_multipart_mux_loop),
- (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
- (gst_multipart_mux_change_state), (gst_multipart_mux_plugin_init):
- A Multipart demuxer/muxer. Not sure if it violates specs. Used to
- send multipart jpeg images to a browser.
- * gst/videobox/Makefile.am:
- * gst/videobox/README:
- * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
- (gst_video_box_get_type), (gst_video_box_base_init),
- (gst_video_box_class_init), (gst_video_box_init),
- (gst_video_box_set_property), (gst_video_box_get_property),
- (gst_video_box_sink_link), (gst_video_box_i420),
- (gst_video_box_ayuv), (gst_video_box_chain),
- (gst_video_box_change_state), (plugin_init):
- Crops or adds borders around an image. can do alpha channel
- borders as well.
- * gst/videomixer/Makefile.am:
- * gst/videomixer/README:
- * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
- (gst_videomixer_pad_base_init), (gst_videomixer_pad_class_init),
- (gst_videomixer_pad_get_sink_event_masks),
- (gst_videomixer_pad_get_property),
- (gst_videomixer_pad_set_property),
- (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_link),
- (gst_videomixer_pad_unlink), (gst_videomixer_pad_init),
- (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
- (gst_videomixer_base_init), (gst_videomixer_class_init),
- (gst_videomixer_init), (gst_videomixer_request_new_pad),
- (gst_videomixer_handle_src_event),
- (gst_videomixer_blend_ayuv_i420), (gst_videomixer_fill_checker),
- (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
- (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
- (gst_videomixer_loop), (gst_videomixer_get_property),
- (gst_videomixer_set_property), (gst_videomixer_change_state),
- (plugin_init):
- Generic video mixer plugin, can handle multiple inputs all with
- different framerates and video sizes. Is fully alpha channel
- aware.
-
-2004-05-27 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- Select first track as master track. Not sure how else to handle
- that...
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer):
- Discard discont events. Should fix #142962.
-
-2004-05-26 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/Makefile.am:
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init),
- (gst_alsa_mixer_build_list), (gst_alsa_mixer_get_volume),
- (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
- (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
- (gst_alsa_mixer_get_option):
- * ext/alsa/gstalsamixer.h:
- * ext/alsa/gstalsamixeroptions.c:
- (gst_alsa_mixer_options_get_type),
- (gst_alsa_mixer_options_class_init), (gst_alsa_mixer_options_init),
- (gst_alsa_mixer_options_new):
- * ext/alsa/gstalsamixeroptions.h:
- * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
- * ext/alsa/gstalsamixertrack.h:
- Add enumerations (as GstMixerOptions). Make correct distinction
- between input/output tracks. Add capture/playback private flag.
- Use flag to decide on whether to set capture or playback volumes
- or switches. Use playback and record switches.
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/mixer/mixer-marshal.list:
- * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init),
- (gst_mixer_set_option), (gst_mixer_get_option),
- (gst_mixer_mute_toggled), (gst_mixer_record_toggled),
- (gst_mixer_volume_changed), (gst_mixer_option_changed):
- * gst-libs/gst/mixer/mixer.h:
- * gst-libs/gst/mixer/mixeroptions.c: (gst_mixer_options_get_type),
- (gst_mixer_options_class_init), (gst_mixer_options_init),
- (gst_mixer_options_dispose):
- * gst-libs/gst/mixer/mixeroptions.h:
- Add GstMixerOptions.
- * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
- Rename Audio Mixer to OSS Mixer (similar to Alsa Mixer). Fix
- broken device detection on computers with multiple OSS sound
- cards.
-
-2004-05-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
- fixate nicely even when the peer is not negotiating
-
-2004-05-25 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/audioconvert/gstaudioconvert.c:
- (gst_audio_convert_parse_caps):
- make sure we don't allow depth > width
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
- fixate endianness to G_BYTE_ORDER as default
- * gst/audioscale/gstaudioscale.c:
- we don't handle another endianness as host-endianness
-
-2004-05-25 David Schleef <ds@schleef.org>
-
- * gst/ffmpegcolorspace/mem.c: malloc() is in stdlib.h, not malloc.h
-
-2004-05-24 Benjamin Otte <otte@gnome.org>
-
- * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
- (gst_oggvorbisenc_setup):
- properly fail when we can't setup the vorbis encoder due to
- unsupported settings
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
- (gst_vorbisenc_setup):
- same
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- fix case where warnings occured when one pad was unlinked while the
- other's link function was called
-
-2004-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/Makefile.am:
- use GST_ENABLE_NEW
-
-2004-05-24 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/resample/private.h:
- don't use optimizations that are #if 0'ed
-
-2004-05-24 Wim Taymans <wim@fluendo.com>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
- Fix potential division by zero error and hopefully get
- the position query right to get correct timestamps on avi
- audio.
-
-2004-05-24 Wim Taymans <wim@fluendo.com>
-
- * gst/videoscale/videoscale.c: (gst_videoscale_scale_nearest),
- (gst_videoscale_scale_nearest_str2),
- (gst_videoscale_scale_nearest_str4),
- (gst_videoscale_scale_nearest_32bit),
- (gst_videoscale_scale_nearest_24bit),
- (gst_videoscale_scale_nearest_16bit):
- Fix the scaling algorithm and avoid a buffer overflow.
- removed the while loop in the scaling function as it
- was used for point sampling only.
-
-2004-05-24 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
- (gst_id3_tag_class_init), (gst_id3_tag_init),
- (gst_id3_tag_set_property), (gst_id3_tag_get_tag_to_render),
- (gst_id3_tag_handle_event), (gst_id3_tag_do_caps_nego),
- (gst_id3_tag_send_tag_event):
- lots of fixes to make id3mux work and id3demux work correctly
-
-2004-05-24 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/Makefile.am:
- add rules to build shout2send (was removed by accident
- when this module was no more marked experimental/broken)
-
-2004-05-24 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- * ext/shout2/gstshout2.c:
- * ext/shout2/gstshout2.h:
- adding a "connection problem" signal to shout2send
- (fixes #142954)
-
-2004-05-21 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/kio/kioreceiver.cpp:
- * ext/kio/kioreceiver.h:
- fix sign comparison issues
-
-2004-05-21 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/cdxaparse/gstcdxaparse.c:
- * gst/cdxaparse/gstcdxaparse.h:
- some renaming
- add some checks/sanity
- prepare for seek addition
-
- * sys/sunaudio/gstsunaudio.c:
- remove exported dupe init function
-
-2004-05-21 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_get_formats),
- (gst_dvdec_src_convert), (gst_dvdec_sink_convert):
- Fix format conversion and position querying.
- * gst/debug/progressreport.c: (gst_progressreport_report):
- Don't output a bogus total value that we didn't query.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
- Always set XV_AUTOPAINT_COLORKEY to true. Fixes xvimagesink showing
- only a blank window after xine has been used.
-
-2004-05-21 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * m4/as-arts.m4:
- sync with upstream version to fix test on FC2
- readd with -ko to preserve Id header
-
-2004-05-20 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * configure.ac:
- test for FIONREAD ioctl in sys/filio.h for Solaris compat.
- * gst/tcp/gsttcpclientsrc.c: idem
- * gst/tcp/gsttcpserversink.c: idem
- * gst/tcp/gsttcpserversrc.c: idem
- * m4/gst-fionread.m4: idem
-
- * sys/sunaudio/gstsunaudio.c: change category to Sink/Audio
-
- * configure.ac: enable speex plugin for speex 1.1.5+
- * ext/speex/gstspeexenc.c: fix cast warning
-
- * ext/esd/README: fix typo
-
-2004-05-20 David Schleef <ds@schleef.org>
-
- * configure.ac: Minor cosmetic change to convince the buildbot to
- reautogen.
- * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_class_init),
- (gst_sunaudiosink_init), (gst_sunaudiosink_getcaps),
- (gst_sunaudiosink_pad_link), (gst_sunaudiosink_chain),
- (gst_sunaudiosink_setparams), (gst_sunaudiosink_open),
- (gst_sunaudiosink_close), (gst_sunaudiosink_change_state),
- (gst_sunaudiosink_set_property), (gst_sunaudiosink_get_property):
- More hacking. Plays audio now.
-
-2004-05-20 David Schleef <ds@schleef.org>
-
- * configure.ac:
- * sys/Makefile.am:
-
-2004-05-20 David Schleef <ds@schleef.org>
-
- * sys/osxaudio/Makefile.am: New OS X audio plugin by Zaheer Abbas Merali
- * sys/osxaudio/gstosxaudio.c:
- * sys/osxaudio/gstosxaudioelement.c:
- * sys/osxaudio/gstosxaudioelement.h:
- * sys/osxaudio/gstosxaudiosink.c:
- * sys/osxaudio/gstosxaudiosink.h:
- * sys/osxaudio/gstosxaudiosrc.c:
- * sys/osxaudio/gstosxaudiosrc.h:
-
-2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_set_header_on_caps),
- (gst_vorbisenc_chain):
- put the codec headers on the caps as streamheader as well as
- pushing them out
-
-2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
- (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_push_buffer),
- (gst_vorbisenc_push_packet), (gst_vorbisenc_chain):
- split up push_packet into two functions
-
-2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/.cvsignore:
- ignore enums
- * gst/tcp/Makefile.am:
- * gst/tcp/README:
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcp.h:
- * gst/tcp/gsttcpclientsink.c:
- * gst/tcp/gsttcpclientsink.h:
- * gst/tcp/gsttcpclientsrc.c:
- * gst/tcp/gsttcpclientsrc.h:
- * gst/tcp/gsttcpplugin.c:
- * gst/tcp/gsttcpserversink.c:
- * gst/tcp/gsttcpserversink.h:
- * gst/tcp/gsttcpserversrc.c:
- * gst/tcp/gsttcpserversrc.h:
- add new tcp elements
-
-2004-05-19 Wim Taymans <wim@fluendo.com>
-
- * gst/law/mulaw-conversion.c: (mulaw_encode):
- Fix overflow bug in ulaw encoding.
-
-2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstmad.c: (gst_mad_handle_event):
- don't unref the event twice
-
-2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- remove -Wno-sign-compare
-
-2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- remove -DG_DISABLE_DEPRECATED. It's not usable without workarounds
- if you want to work against glib 2.2 and 2.4
-
-2004-05-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tcp/Makefile.am:
- * gst/tcp/gsttcp.c:
- * gst/tcp/gsttcp.h:
- * gst/tcp/gsttcpsink.h:
- * gst/tcp/gsttcpsrc.h:
- gsttcp -> gsttcpplugin + CVS surgery in preparation for tcp merge
-
-2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/debug/tests.c: (md5_get_value):
- fix segfault on gst-inspect
-
-2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/debug/testplugin.c:
- * gst/debug/tests.c:
- * gst/debug/tests.h:
- add new extensible and configurable testing element. Current tests
- include buffer count, stream length, timestamp/duration matching and
- md5.
- * gst/debug/Makefile.am:
- * gst/debug/gstdebug.c: (plugin_init):
- add infrastructure for new element
-
-2004-05-19 Johan Dahlin <johan@gnome.org>
-
- * ext/dv/gstdvdec.c (gst_dvdec_quality_get_type): Add proper
- ending of the array. Fixes gst-inspect segfault on ppc.
-
-2004-05-19 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/dirac/gstdiracdec.cc : change category to Codec/Decoder/Video
-
- * m4/a52.m4 : don't fix a test that should fail with current a52dec lib
-
-2004-05-18 David Schleef <ds@schleef.org>
-
- * gst/ffmpegcolorspace/imgconvert.c: (img_convert): Fixes for
- warnings (bugs, actually) noticed by gcc but not forte.
-
-2004-05-18 David Schleef <ds@schleef.org>
-
- * sys/sunaudio/Makefile.am:
- * sys/sunaudio/gstsunaudio.c: New sunaudiosink
-
-2004-05-18 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
- (gst_qtdemux_loop_header): Patch from dcm@acm.org (David Moore)
- to allow qtdemux to use non-seekable streams. (bug #142272)
-
-2004-05-18 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16),
- (gst_resample_sinc_ft_float): Remove use of static temporary
- buffer. This code was obviously not supposed to last long, but
- it's stuck in our ABI, so it required a little hack to make it
- ABI-compatible. Fixes #142585.
- * gst-libs/gst/resample/resample.h: same.
-
-2004-05-18 David Schleef <ds@schleef.org>
-
- * configure.ac: Add sunaudio
- * examples/Makefile.am: make gstplay depend on gconf
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Remove c99-isms
- * gst/ffmpegcolorspace/imgconvert.c: (build_rgb_palette),
- (convert_table_lookup), (img_convert): remove c99-isms
- * gst/ffmpegcolorspace/imgconvert_template.h: make a constant
- unsigned, to fix a warning on Solaris
- * gst/mpeg1sys/systems.c: bcopy->memcpy
- * gst/rtjpeg/RTjpeg.c: (RTjpeg_yuvrgb8): bcopy->memcpy
- * sys/Makefile.am: Add sunaudio
-
-2004-05-18 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type), (gst_ogg_mux_init),
- (gst_ogg_mux_sinkconnect), (gst_ogg_mux_request_new_pad),
- (gst_ogg_mux_next_buffer), (gst_ogg_mux_push_page),
- (gst_ogg_mux_compare_pads), (gst_ogg_mux_queue_pads),
- (gst_ogg_mux_loop):
- Fix an ugly memleak where the muxer didn't flush enough ogg
- pages. This also resulted in badly muxed ogg files.
-
-2004-05-18 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/asfdemux/asfheaders.c :
- * gst/asfdemux/asfheaders.h :
- * gst/asfdemux/gstasfdemux.c :
- - fix ASF_OBJ_PADDING guid
- - add 3 new object guids (language list, metadata,
- extended stream properties)
- - add a function to parse extended header objects
-
-2004-05-18 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
- remove leftover debugging g_print
-
-2004-05-17 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_handle_event):
- Fix for when the first format in a discont event is not a
- byte-based one. Should fix #137710.
-
-2004-05-18 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * m4/a52.m4 : fix compilation with -Wall -Werror
- * m4/libfame.m4 : idem
- * m4/libmikmod.m4 : idem
-
-2004-05-17 Benjamin Otte <otte@gnome.org>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
- signal the new tags before giving up the reference
-
-2004-05-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/shout2/gstshout2.c:
- use application/ogg instead of application/x-ogg (patch by Patrick
- Guimond, fixes #142432)
- * sys/oss/gstosselement.c: (gst_osselement_reset),
- (gst_osselement_sync_parms):
- don't set fragment size unless specified (fixes #142493)
-
-2004-05-17 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * configure.ac : fix compilation of v4l2src with "-Wall -Werror"
- fixes #142664
-
-2004-05-17 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- compute offsets correctly for internal buffers so timestamps are set
- correctly when we can't seek. Also handle cases where there are no
- offsets. (based on a patch by David Moore, fixes #142507)
-
-2004-05-17 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- use correct variable when determining amount of data to skip so we
- don't skip into the void and segfault
-
-2004-05-16 Benjamin Otte <otte@gnome.org>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
- Hi, I'm a memleak
-
-2004-05-16 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/asfdemux/gstasfdemux.c:
- - fix a mem leak and always propagate tags
- - add WMV3 to known video codecs (but no decoder yet)
- - replace "surplus data" at end of audio header for what
- it is : codec specific data
- - fix a typo
-
-2004-05-16 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- reviewed by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/audio/audioclock.c:
- Fix wrong return type (#142205).
-
-2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_init):
- Ignore CRCs by default (fixes #142566).
-
-2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
- (gst_alsa_mixer_close), (gst_alsa_mixer_supported),
- (gst_alsa_mixer_build_list), (gst_alsa_mixer_free_list),
- (gst_alsa_mixer_change_state), (gst_alsa_mixer_list_tracks),
- (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
- (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record):
- Fix for cases where we fail to attach to a mixer.
-
-2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
- Don't touch events after not owning them anymore.
- * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
- (gst_wavparse_fmt), (gst_wavparse_other),
- (gst_wavparse_handle_seek), (gst_wavparse_loop),
- (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
- (gst_wavparse_srcpad_event):
- * gst/wavparse/gstwavparse.h:
- Add seeking, fix querying.
-
-2004-05-16 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
- - process comments even if they don't end with \0\0
- g_convert would ignore them if present and works well without them
-
-2004-05-16 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_caps), (gst_alsa_get_caps):
- simplify caps
-
-2004-05-16 Benjamin Otte <otte@gnome.org>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
- don't write to memory we might not write to - g_convert does that
- for us anyway (fixes #142613)
- (gst_asf_demux_audio_caps):
- comment out gst_util_dump_mem
-
-2004-05-16 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- compute correct expected timestamps after seek (broken since
- last commit)
- * ext/gdk_pixbuf/pixbufscale.c: (pixbufscale_init):
- rename element and debugging category to gdkpixbufscale
-
-2004-05-16 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- add error checking to snd_pcm_delay and remove duplicate call to
- snd_pcm_delay that caused issues (see inline code comments)
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
- make more readable and fix return value when snd_pcm_delay fails
- (fixes #142586)
-
-2004-05-15 Jan Schmidt <thaytan@mad.scientisti.com>
- * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_method_get_type),
- (gst_pixbufscale_get_type), (gst_pixbufscale_base_init),
- (gst_pixbufscale_class_init), (gst_pixbufscale_getcaps),
- (gst_pixbufscale_link), (gst_pixbufscale_init),
- (gst_pixbufscale_handle_src_event), (pixbufscale_scale),
- (gst_pixbufscale_chain), (gst_pixbufscale_set_property),
- (gst_pixbufscale_get_property), (pixbufscale_init):
- * ext/gdk_pixbuf/pixbufscale.h:
- Add these files I forgot earlier
-
-2004-05-15 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/gdk_pixbuf/Makefile.am:
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
- * ext/gdk_pixbuf/gstgdkpixbuf.h:
- Add new pixbufscale element to scale RGB video
- using gdk_pixbuf, because gdk_pixbuf does BILINEAR
- and HYPER interpolation correctly.
- * ext/theora/theoraenc.c: (theora_enc_chain),
- Discard buffer and return if explicit caps could not be set
- (theora_enc_get_property):
- Make _get return kbps for the bitrate consistent with
- the _set function.
-
-
-2004-05-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/libvisual/visual.c: (gst_visual_chain):
- add missing visual_audio_analyze
-
-2004-05-14 David Schleef <ds@schleef.org>
-
- * ext/esd/esdsink.c: (gst_esdsink_chain): Fix crash when ESD
- is killed while we're playing.
- * gst/qtdemux/qtdemux.c: (qtdemux_parse): call
- gst_element_no_more_pads().
-
-2004-05-14 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst-libs/gst/riff/riff-read.c :
- - fix INFO tag extraction in RIFF/AVI files
- because gst_event_unref (event) also freed taglist
- - avoid a mem leak
-
-2004-05-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/mad/gstid3tag.c : move from "Codec/(Dem/M)uxer" to "Codec/(Dem/M)uxer/Audio"
- * gst/wavenc/gstwavenc.c : move from "Codec/Encoder/Audio" to "Codec/Muxer/Audio"
-
- * gst/auparse/gstauparse.c :
- - add code (commented for now) to support audio/x-adpcm on src pad
- (we have no decoder for those layout yet)
-
- * gst/cdxaparse/gstcdxaparse.c :
- * gst/cdxaparse/gstcdxaparse.h :
- - partial rewrite using RiffRead (ripped iain's wavparse code)
-
- * gst/rtp/gstrtpL16enc.c : typo
- * gst/rtp/gstrtpgsmenc.c : typo
-
-2004-05-13 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- check for exact version of libvisual, it's not supposed to be
- API/ABI stable yet
-
-2004-05-13 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
- signal no-more-pads
-
-2004-05-13 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_src_convert)
- Report which format was used for GST_FORMAT_DEFAULT
- * gst/debug/Makefile.am:
- * gst/debug/gstdebug.c: (plugin_init):
- * gst/debug/progressreport.c: (gst_progressreport_base_init),
- (gst_progressreport_class_init), (gst_progressreport_init),
- (gst_progressreport_report), (gst_progressreport_set_property),
- (gst_progressreport_get_property), (gst_progressreport_chain),
- (gst_progressreport_plugin_init):
- Add progressreport element for testing.
-
-2004-05-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_change_state):
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
- (gst_v4lsrc_grab_frame):
- add more debugging
- send a discont at start
-
-2004-05-12 Colin Walters <walters@redhat.com>
-
- * gst/asfdemux/gstasfdemux.c (gst_asf_demux_process_segment): Avoid
- inflooping if we can't find a chunk. Or in other words, don't blow
- chunks if we don't have a chunk to blow.
-
-2004-05-13 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/audiofile/gstafsrc.c: (gst_afsrc_get):
- Remove old debug output
- * ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
- (gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
- (gst_dvdec_set_property), (gst_dvdec_get_property):
- Change the quality setting to an enum, so it works from gst-launch
- Don't renegotiate a non-linked pad. Allows audio only decoding.
- * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
- (gst_deinterlace_link), (gst_deinterlace_init):
- * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
- (gst_videodrop_link):
- Some caps negotiation fixes
-
-2004-05-12 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/tarkin/gsttarkin.c :
- - Change RANK from NONE to PRIMARY
- * ext/gdk_pixbuf/gstgdkpixbuf.c :
- - Change RANK from NONE to MARGINAL
- * ext/divx/gstdivxenc.c :
- - Change RANK from PRIMARY to NONE (encoder/spider issue)
-
-2004-05-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
- (gst_vorbisenc_push_packet):
- copy a function that was added between 1.0 and 1.0.1 until we
- depend on worthwhile features of post-1.0
-
-2004-05-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- enable shout2 by default
- * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
- (gst_shout2send_base_init), (gst_shout2send_init),
- (gst_shout2send_connect), (gst_shout2send_change_state):
- * ext/shout2/gstshout2.h:
- make this work again. Based on a patch by Zaheer Abbas Merali (fixes
- #142262)
- * ext/theora/theora.c: (plugin_init):
- don't set rank on encoders
-
-2004-05-11 Jeremy Simon <jesimon@libertysurf.fr>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
- Use codec_data property instead of flag1 and flag2 for wma
-
-2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/cdxaparse/gstcdxaparse.c :
- - Add mpegversion to CAPS to make it link
- - Rank is as GST_RANK_SECONDARY instead of NONE
- * gst/auparse/gstauparse.c :
- - Document all audio encoding we can encounter from Solaris 9
- headers and libsndfile information.
- - Increase max. rate from 48000 to 192000 (to match other elements)
- - Don't try to play junk data between header and samples
-
-2004-05-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/libvisual/visual.c: (gst_visual_getcaps):
- use the right caps depending on endianness (I hope)
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_plugin_init):
- use GST_RANK_NONE for all non-decoding elements or spider gets
- mighty confused
-
-2004-05-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
- Fix some odd cases and fix BE metadata parsing of unicode16 text.
-
-2004-05-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/switch/gstswitch.c: (gst_switch_release_pad),
- (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
- (gst_switch_loop), (gst_switch_get_type):
- whoever that was: DO NOT IMPORT PRIVATE SYMBOLS THAT ARE NOT IN
- HEADERS. Had to be said.
-
-2004-05-10 David Schleef <ds@schleef.org>
-
- * configure.ac: Add prototype Dirac support.
- * ext/Makefile.am:
- * ext/dirac/Makefile.am:
- * ext/dirac/gstdirac.cc:
- * ext/dirac/gstdiracdec.cc:
-
-2004-05-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/auparse/gstauparse.c: (gst_auparse_class_init),
- (gst_auparse_init), (gst_auparse_chain),
- (gst_auparse_change_state):
- Hack around spider. Remove me some day please.
-
-2004-05-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/auparse/gstauparse.c: (gst_auparse_chain):
- Fix for some uninitialized variables in previous patch, also
- makes it work. Fixes #142286 while we're at it.
-
-2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/auparse/gstauparse.c:
- fixes a-law, adds mu-law, linear pcm (8,16,24,32), ieee (32, 64)
- only unsupported formats are ADPCM/CCITT G.72x
- reviewed by Ronald
- * gst-libs/gst/audio/audio.h: adds 24bit depth to PCM (x-raw-int)
-
-2004-05-10 Wim Taymans <wim@fluendo.com>
-
- * ext/vorbis/Makefile.am:
- * ext/vorbis/README:
- * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_formats),
- (oggvorbisenc_get_type), (vorbis_caps_factory), (raw_caps_factory),
- (gst_oggvorbisenc_base_init), (gst_oggvorbisenc_class_init),
- (gst_oggvorbisenc_sinkconnect), (gst_oggvorbisenc_convert_src),
- (gst_oggvorbisenc_convert_sink),
- (gst_oggvorbisenc_get_query_types), (gst_oggvorbisenc_src_query),
- (gst_oggvorbisenc_init), (gst_oggvorbisenc_get_tag_value),
- (gst_oggvorbisenc_metadata_set1), (gst_oggvorbisenc_set_metadata),
- (get_constraints_string), (update_start_message),
- (gst_oggvorbisenc_setup), (gst_oggvorbisenc_write_page),
- (gst_oggvorbisenc_chain), (gst_oggvorbisenc_get_property),
- (gst_oggvorbisenc_set_property), (gst_oggvorbisenc_change_state):
- * ext/vorbis/oggvorbisenc.h:
- * ext/vorbis/vorbis.c: (plugin_init):
- * ext/vorbis/vorbisenc.c: (vorbis_caps_factory),
- (raw_caps_factory), (gst_vorbisenc_class_init),
- (gst_vorbisenc_init), (gst_vorbisenc_setup),
- (gst_vorbisenc_push_packet), (gst_vorbisenc_chain),
- (gst_vorbisenc_get_property), (gst_vorbisenc_set_property):
- * ext/vorbis/vorbisenc.h:
- Added a raw vorbis encoder to be used with the oggmuxer.
- We still need the old encoder for some gnome applications,
- read the README to find out how that works.
- The raw encoder is called "rawvorbisenc" until 0.9.
-
-2004-05-10 Wim Taymans <wim@fluendo.com>
-
- * ext/ogg/gstogg.c: (plugin_init):
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init),
- (gst_ogg_print):
- * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type),
- (gst_ogg_mux_base_init), (gst_ogg_mux_class_init),
- (gst_ogg_mux_get_sink_event_masks), (gst_ogg_mux_init),
- (gst_ogg_mux_sinkconnect), (gst_ogg_mux_pad_link),
- (gst_ogg_mux_pad_unlink), (gst_ogg_mux_request_new_pad),
- (gst_ogg_mux_handle_src_event), (gst_ogg_mux_next_buffer),
- (gst_ogg_mux_push_page), (gst_ogg_mux_compare_pads),
- (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop),
- (gst_ogg_mux_get_property), (gst_ogg_mux_set_property),
- (gst_ogg_mux_change_state), (gst_ogg_mux_plugin_init):
- Added an ogg muxer.
- Small typo fixes in the demuxer.
-
-2004-05-10 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
- (theora_enc_change_state), (theora_enc_set_property),
- (theora_enc_get_property):
- Mark the last packet with an EOS flag which is not really needed
- in gstreamer.
- Do some better video framerate initialisation.
- Update the buffer timestamp.
-
-2004-05-10 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_change_state):
- Return the result of the parent state change call
-
-2004-05-10 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * gst/law/alaw.c : alawdec should be registered with type ALAWDEC, not ALAWENC
- * gst/law/alaw-decode.c : put audio/x-alaw on pads, instead of audio/x-mulaw
- * gst/law/alaw-encode.c : (idem)
- * ext/a52dec/gsta52dec.c : mark audio/a52, audio/ac3 as deprecated in a comment
- * gst/ac3parse/gstac3parse.c : audio/ac3 => audio/x-ac3
- * gst/realmedia/rmdemux.c : audio/a52 => audio/x-ac3
-
-2004-05-09 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
- don't use a fixed buffer size when writing variable length data to
- it. Fixes memory corruption and makes alsasrc work
-
-2004-05-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssink.c:
- (_gst_boolean_allow_overwrite_accumulator),
- (gst_gnomevfssink_class_init), (gst_gnomevfssink_open_file):
- Run glib's default signal handler (??) in RUN_CLEANUP rather than
- RUN_LAST, and don't use that to set the accumulator value because
- then it's always FALSE.
-
-2004-05-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_audio_caps),
- (gst_riff_create_audio_template_caps):
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
- Fix for unaligned RIFF files (i.e. where all the chunks together
- in a LIST chunk are not of the same size as the size given in
- the LIST chunk header). Fixes several odd WAVE files. Also fix
- ADPCM (block_align property) in audio, so that wavparse based
- on this works now as it used to stand-alone.
-
-2004-05-09 Edward Hervey <bilboed@bilboed.com>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/a52dec/gsta52dec.c:
- * ext/divx/gstdivxdec.c:
- * ext/divx/gstdivxenc.c:
- * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
- * ext/faac/gstfaac.c: (gst_faac_base_init):
- * ext/faad/gstfaad.c: (gst_faad_base_init):
- * ext/ivorbis/vorbisfile.c:
- * ext/lame/gstlame.c:
- * ext/libfame/gstlibfame.c:
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
- * ext/sidplay/gstsiddec.cc:
- * ext/speex/gstspeexdec.c:
- * ext/speex/gstspeexenc.c:
- * ext/xvid/gstxviddec.c:
- * ext/xvid/gstxvidenc.c:
- correct klasses. Mostly s,Codec/(Audio|Video),\1/Codec,
- (fixes #142193)
-
-2004-05-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (device_list),
- (gst_alsa_class_probe_devices):
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
- Fix alsa oddness in mixer after the combination of using mixer
- in source/sink elements and using hw:x,y instead of just hw:x.
-
-2004-05-09 Benjamin Otte <otte@gnome.org>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_destroy_sourcepad),
- (gst_wavparse_create_sourcepad):
- make PAUSED=>READY=>PAUSED=READY work by not destroying NULL
- sourcepads
-
-2004-05-09 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- allow discont events before caps nego
-
-2004-05-08 Benjamin Otte <otte@gnome.org>
-
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
- don't leak events
-
-2004-05-08 Benjamin Otte <otte@gnome.org>
-
- * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
- (gst_level_change_state), (gst_level_init):
- * gst/level/gstlevel.h:
- figure out if we're initialized directly instead of keeping a
- variable that's wrong in 90% of cases
- don't initialize pads and then leak them and use a new unitialized
- pad. (fixes #142084)
- these were bugs so n00bish I didn't find them for an hour :/
-
-2004-05-08 Iain <iain@prettypeople.org>
-
- * gst/wavparse/gstwavparse.[ch]: Rewrote to use RiffRead instead.
- * gst-libs/gst/riff/riff-read.c (gst_riff_read_peek_head): Unstatic it
- (gst_riff_read_element_data): Ditto, and added a got_bytes argument to
- return the length that was read.
- (gst_riff_read_strf_auds): Allow fmt tags as well.
-
-2004-05-07 David Schleef <ds@schleef.org>
-
- * ext/faad/gstfaad.c: (gst_faad_sinkconnect): HACK to correct
- signed char assumption in faad.h.
-
-2004-05-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps):
- Missing break, detected by Daniel Gazard <daniel.gazard@free.fr>.
-
-2004-05-07 Colin Walters <walters@redhat.com>
-
- * gst/volume/gstvolume.c (gst_volume_dispose): Unref dpman.
- * ext/flac/gstflacdec.c (gst_flacdec_dispose): Add dispose
- function.
- * gst/audioscale/gstaudioscale.c (gst_audioscale_dispose):
- Add dispose function.
-
-2004-05-08 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/dv/gstdvdec.c: (gst_dvdec_video_link):
- Fix caps nego and pad templates. RGB mode caps should
- work now.
- * ext/dvdnav/gst-dvd:
- Move mpeg2dec inside the thread because otherwise the
- queue rejects cap changes mid-stream
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
- (gst_mpeg2dec_flush_decoder):
- For mpeg2dec > 0.4.0, call the flush function instead of
- manually extracting all in-flight frames.
- * ext/raw1394/gstdv1394src.c: (gst_dv1394src_factory),
- (gst_dv1394src_init), (gst_dv1394src_iso_receive):
- Change mime type video/dv go video/x-dv to match the
- rest of gst-plugins
-
-2004-05-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_type),
- (gst_alsa_sink_class_init):
- * ext/alsa/gstalsasink.h:
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_type),
- (gst_alsa_src_class_init):
- * ext/alsa/gstalsasrc.h:
- Make alsasink/src a subclass of alsamixer so that mixer stuff
- shows up in gst-rec. Needs some finetuning.
-
-2004-05-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/lame/gstlame.c: (gst_lame_chain):
- simplify
- * ext/mad/gstmad.c: (gst_mad_handle_event):
- fix event leak
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
- be able to detect mp3 files < 4096 bytes
-
-2004-05-06 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
- (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
- (theora_enc_set_property), (theora_enc_get_property):
- Also encode the first frame, cleanup some code.
-
-2004-05-06 Wim Taymans <wim@fluendo.com>
-
- * ext/mpeg2enc/gstmpeg2enc.cc:
- Forward events first before deciding that negotiation was
- not performed.
-
-2004-05-06 Wim Taymans <wim@fluendo.com>
-
- * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
- First process the events before deciding that negotiation
- was not performed.
-
-2004-05-06 Wim Taymans <wim@fluendo.com>
-
- * ext/theora/Makefile.am:
- * ext/theora/theora.c: (plugin_init):
- * ext/theora/theoradec.c: (theora_dec_change_state):
- * ext/theora/theoraenc.c: (gst_theora_enc_base_init),
- (gst_theora_enc_class_init), (gst_theora_enc_init),
- (theora_enc_sink_link), (theora_enc_event), (theora_push_packet),
- (theora_enc_chain), (theora_enc_change_state),
- (theora_enc_set_property), (theora_enc_get_property):
- Added a theora encoder, grouped the encoder and decoder into the
- same plugin.
-
-2004-05-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
- (gst_jpegenc_chain):
- fix DURATION on outgoing buffers
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
- debug using time formats
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
- (gst_xvimagesink_sink_link):
- windows with width/height 0 generate X errors, so don't allow them
-
-2004-05-05 Wim Taymans <wim@fluendo.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
- (gst_mpeg2dec_base_init), (gst_mpeg2dec_init),
- (gst_mpeg2dec_negotiate_format):
- * ext/mpeg2dec/gstmpeg2dec.h:
- removed the static pad template so that we can add the
- more accurate framerate value to the caps.
-
-
-2004-05-04 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- check for kdemacros.h, too (should fix #141821)
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
- don't crash if no header was sent, but nicely error out (fixes part
- of #141554)
-
-2004-05-04 Wim Taymans <wim@fluendo.com>
-
- * ext/mpeg2enc/gstmpeg2enc.cc: (gst_mpeg2enc_dispose): call the
- parent dispose function to avoid segfault on destroy.
-
-2004-05-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
- (plugin_init):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_sink_link):
- clean up debugging caps
- also recreate xvimage when format has changed
-
-2004-05-04 Benjamin Otte <otte@gnome.org>
-
- * ext/libvisual/Makefile.am:
- * ext/libvisual/visual.c: (gst_visual_class_init),
- (gst_visual_init), (gst_visual_dispose), (gst_visual_getcaps),
- (gst_visual_srclink), (gst_visual_chain),
- (gst_visual_change_state), (plugin_init):
- use a GstAdapter to correctly adapt buffer sizes - allows using a
- framerate
-
-2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/gstv4lelement.h:
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps), (gst_v4lsrc_getcaps),
- (gst_v4lsrc_buffer_free):
- * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
- (gst_v4lsrc_sync_frame), (gst_v4lsrc_grab_frame),
- (gst_v4lsrc_requeue_frame):
- move some debugging categories around
- query for fps index and set accordingly if found
-
-2004-05-03 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/lame/gstlame.c:
- correct defaults that lame_init puts out of range
-
-2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/divx/gstdivxenc.c: (gst_divxenc_get_type),
- (gst_divxenc_class_init):
- fix range since -1 is the default
- * gst/mpeg1sys/gstmpeg1systemencode.c:
- (gst_mpeg1_system_encode_get_type), (gst_system_encode_multiplex):
- * gst/rtjpeg/gstrtjpegdec.c: (gst_rtjpegdec_get_type),
- (gst_rtjpegdec_chain):
- * gst/rtjpeg/gstrtjpegenc.c: (gst_rtjpegenc_get_type),
- (gst_rtjpegenc_chain):
- * sys/qcam/gstqcamsrc.c: (gst_autoexp_mode_get_type),
- (gst_qcamsrc_get_type), (gst_qcamsrc_change_state):
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_get_type):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get_type):
- * sys/v4l/gstv4lsrc.c:
- * sys/v4l/v4l_calls.c: (gst_v4l_open):
- * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init):
- * sys/vcd/vcdsrc.c: (vcdsrc_get_type), (vcdsrc_get):
- remove gst_info calls
-
-2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * po/af.po:
- * po/az.po:
- * po/en_GB.po:
- * po/nl.po:
- * po/sr.po:
- * po/sv.po:
- Updated translations
-
-2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
- refactor/comment code
-
-2004-05-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/Makefile.am:
- * gst/asfdemux/asfheaders.c:
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasf.c: (plugin_init):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_type),
- (gst_asf_demux_base_init), (gst_asf_demux_process_comment),
- (gst_asf_demux_setup_pad):
- * gst/asfdemux/gstasfdemux.h:
- * gst/asfdemux/gstasfmux.c:
- * gst/asfdemux/gstasfmux.h:
- Add tagging support to demuxer, split out registration in its own
- file instead of in demux (hacky), and prevent having some tables
- in our memory multiple times (in asfheaders.h).
-
-2004-05-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_metadata):
- * gst/matroska/matroska-ids.h:
- Basic tag reading support.
-
-2004-04-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
- Really detect ac-3 audio.
- * gst/typefind/gsttypefindfunctions.c: (matroska_type_find):
- really detect matroska files (off-by-1).
-
-2004-04-30 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_type_get),
- (qtdemux_dump_stsz), (qtdemux_dump_stco), (qtdemux_dump_co64),
- (qtdemux_dump_unknown), (qtdemux_parse_tree), (qtdemux_parse_udta),
- (qtdemux_tag_add), (get_size), (gst_qtdemux_handle_esds): More qtdemux
- hackage -- parse a lot more atoms, extract a few tags. One might even
- mistake this for tag support. Maybe it is.
- * gst/qtdemux/qtdemux.h:
-
-2004-04-30 Colin Walters <walters@verbum.org>
-
- * ext/alsa/gstalsasink.c (gst_alsa_sink_mmap): Plug a memleak.
-
-2004-04-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_getcaps):
- remove broken nego fix
-
-2004-04-30 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/libvisual/Makefile.am:
- * ext/libvisual/visual.c:
- add initial support for libvisual (http://libvisual.sourceforge.net)
- libvisual is still quite alpha, so expect crashes in there :)
-
-2004-04-29 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream), (qtdemux_parse),
- (qtdemux_parse_trak), (get_size), (gst_qtdemux_handle_esds): Hacked
- up qtdemux to make it spit out codec_data. Do _not_ look at this
- code; you will no longer respect me.
-
-2004-04-29 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
- * ext/alsa/gstalsa.c : (gst_alsa_class_probe_devices)
- * ext/alsa/gstalsa.h :
- change alsa pcm device discovery to find more than 1 device
- per card. code review by Ronald.
-
-2004-04-29 David Schleef <ds@schleef.org>
-
- * sys/oss/gstosselement.c: (gst_osselement_rate_probe_check):
- Add a check for a driver bug on FreeBSD. (bug #140565)
-
-2004-04-29 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_get_type):
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
- (gst_jpegenc_getcaps):
- move format setting to inner loop
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_getcaps):
- use GST_PAD_CAPS if available so that we use already negotiated
- caps
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (qtdemux_parse_moov), (qtdemux_parse):
- extra debugging
- * sys/qcam/qcam-Linux.c: (qc_lock_wait), (qc_unlock):
- * sys/qcam/qcam-os.c: (qc_lock_wait), (qc_unlock):
- move hardcoded path to DEFINE
-
-2004-04-28 David Schleef <ds@schleef.org>
-
- * gst/speed/gstspeed.c: (speed_parse_caps): Fix caps parsing.
- (bug #140064)
-
-2004-04-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
- Don't probe for playback device if we're a source element. Fixes
- #139658.
-
-2004-04-29 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
- (gst_id3_tag_chain):
- rewrite buffer offset
-
-2004-04-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/dts/Makefile.am:
- * ext/dts/gstdtsdec.c: (gst_dtsdec_get_type),
- (gst_dtsdec_base_init), (gst_dtsdec_class_init), (gst_dtsdec_init),
- (gst_dtsdec_channels), (gst_dtsdec_renegotiate),
- (gst_dtsdec_handle_event), (gst_dtsdec_update_streaminfo),
- (gst_dtsdec_loop), (gst_dtsdec_change_state),
- (gst_dtsdec_set_property), (gst_dtsdec_get_property),
- (plugin_init):
- * ext/dts/gstdtsdec.h:
- New DTS decoder.
- * ext/faad/gstfaad.c: (gst_faad_sinkconnect),
- (gst_faad_srcconnect):
- Add ESDS atom handling (.m4a).
-
-2004-04-27 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c: (plugin_init):
- Remove comment that makes no sense.
- * ext/mad/gstid3tag.c: (gst_id3_tag_set_property):
- Fix for obvious typo that resulted in warnings during gst-register.
- * ext/xvid/gstxviddec.c: (gst_xviddec_src_link),
- (gst_xviddec_sink_link):
- Fix caps negotiation a bit better.
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
- We call this 'codec_data', not 'esds'.
-
-2004-04-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/monoscope/gstmonoscope.c:
- make sure we only provide 256x128
- * gst/monoscope/monoscope.c: (monoscope_init):
- assert size of 256x128
-
-2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_fixate),
- (gst_v4lsrc_getcaps), (gst_v4lsrc_buffer_free):
- fixate to max width and height of device
-
-2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * sys/v4l/gstv4l.c:
- * sys/v4l/gstv4lsrc.c:
- * sys/v4l/v4l_calls.c:
- * sys/v4l/v4lsrc_calls.c:
- fix for qc-usb driver which fakes having more than one buffer
- by handing the same buffer twice, which confused GStreamer's/v4lsrc
- buffer_free override
- add debugging
-
-2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_class_init), (gst_videotestsrc_change_state),
- (gst_videotestsrc_init), (gst_videotestsrc_get),
- (gst_videotestsrc_set_property), (gst_videotestsrc_get_property):
- * gst/videotestsrc/gstvideotestsrc.h:
- add num-buffers property
-
- 2004-04-26 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (plugin_init):
- set id3mux rank to NONE so it doesn't confuse spider
- require audio/mpeg,mpegversion=1 in id3mux
-
-2004-04-26 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- detect faad correctly as non-working if it's indeed non-working
-
-2004-04-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
- (gst_jpegenc_class_init), (gst_jpegenc_getcaps):
- fix _getcaps so it only negotiates to its supported format
-
-2004-04-25 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
- fix memleak
-
-2004-04-23 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
- audio/x-raw-int with height rules! not. Now it's depth.
-
-2004-04-22 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_create_sourcepad),
- (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
- (gst_wavparse_loop):
- Missing variable initialization. Add handling of DVI ADPCM. Fix
- mis-parsing of LIST chunks. This works around a bug where we mis-
- parse non-aligning LIST chunks (so LIST chunks where the contents
- don't align with the actual LIST size). The correct fix is to use
- rifflib, I'm not going to fix wavparse - too much work. All this
- fixes #104878.
-
-2004-04-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/shout/gstshout.c: (gst_icecastsend_change_state):
- fix shoutcast not working (fixes #140844)
-
-2004-04-22 Benjamin Otte <otte@gnome.org>
-
- * ext/hermes/gsthermescolorspace.c:
- (gst_hermes_colorspace_caps_remove_format_info):
- * gst/colorspace/gstcolorspace.c:
- (gst_colorspace_caps_remove_format_info):
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_caps_remove_format_info):
- s/gst_caps_simplify/gst_caps_do_simplify/
-
-2004-04-22 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- mpegversion is an int
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
- don't try to create pad templates with NULL caps, use any caps
- instead.
-
-2004-04-20 David Schleef <ds@schleef.org>
-
- * ext/sdl/Makefile.am: Link against libgstinterfaces, not
- libgstxoverlay. jmmv@menta.net (Julio M. Merino Vidal)
- (bug #140384)
-
-2004-04-20 Daniel Gazard <daniel.gazard@epita.fr>
-
- reviewed by David Schleef
-
- * ext/mad/gstid3tag.c: Add stdlib.h
- * gst/rtp/gstrtpgsmenc.c: same
- * gst/tags/gstid3tag.c: same
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Fix GST_DISABLE_LOADSAVE
- * gst/tcp/gsttcpsink.c: (gst_tcpsink_sink_link): Adjust
- GST_DISABLE_LOADSAVE use.
- * gst/udp/gstudpsink.c: (gst_udpsink_sink_link): Likewise.
- * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get): Likewise.
- * ext/gnomevfs/gstgnomevfssrc.c: Include <stdlib.h> (needed by
- atol(3)).
- * sys/oss/gstosselement.h: Include <sys/types.h> (needed for dev_t).
- * gst/tags/gstvorbistag.c: Include <stdlib.h> (needed by
- strtoul(3)).
- * gst/rtp/gstrtpL16enc.c: Include <stdlib.h> (needed by random(3)).
- * ext/mad/Makefile.am: (libgstmad_la_CFLAGS): Add $(MAD_CFLAGS)
- $(ID3_CFLAGS).
- * ext/libfame/Makefile.am: (libgstlibfame_la_CFLAGS): Add
- $(LIBFAME_CFLAGS).
-
-2004-04-20 David Schleef <ds@schleef.org>
-
- * gst/realmedia/rmdemux.c: This was supposed to part of the
- last checkin. Same idea.
-
-2004-04-20 Daniel Gazard <daniel.gazard@epita.fr>
-
- reviewed by David Schleef
-
- * configure.ac: bump required gstreamer version to 0.8.1.1
- because of following changes [--ds]
-
- * gst-libs/gst/riff/riff-read.c: Include gst/gstutils.h.
- (gst_riff_peek_head, gst_riff_peek_list, gst_riff_read_list)
- (gst_riff_read_header): Use GST_READ_UINT*
- macros to access possibly unaligned memory.
-
- * gst/typefind/gsttypefindfunctions.c: Include gst/gstutils.h.
- (mp3_type_find): Use GST_READ_UINT*
- macros to access possibly unaligned memory.
- (mp3_type_find, mpeg1_parse_header, qt_type_find)
- (speex_type_find): Likewise
-
- * gst/tags/gstvorbistag.c: (ADVANCE): Likewise
-
- * gst/qtdemux/qtdemux.c: Include stdlib.h (needed by realloc).
- (QTDEMUX_GUINT32_GET, QTDEMUX_GUINT16_GET, QTDEMUX_FP32_GET)
- (QTDEMUX_FP16_GET, QTDEMUX_FOURCC_GET)
- (gst_qtdemux_loop_header, gst_qtdemux_loop_header)
- (qtdemux_node_dump_foreach, qtdemux_tree_get_child_by_type)
- (qtdemux_tree_get_sibling_by_type): Use GST_READ_UINT*
- macros to access possibly unaligned memory.
-
- * gst/mpegstream/gstmpegpacketize.c: (parse_generic, parse_chunk):
- Likewise.
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead)
- (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes): Likewise.
-
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- Likewise.
-
- * gst/mpeg2sub/gstmpeg2subt.c: (GST_BUFFER_DATA)
- (gst_mpeg2subt_chain_subtitle): Likewise.
-
- * gst/mpeg1videoparse/gstmp1videoparse.c: (mp1videoparse_parse_seq)
- (gst_mp1videoparse_time_code, gst_mp1videoparse_real_chain):
- Likewise.
-
- * gst/mpeg1sys/buffer.c: (mpeg1mux_buffer_update_audio_info):
- Likewise.
-
- * gst/cdxaparse/gstcdxaparse.c: (gst_bytestream_peek_bytes):
- Likewise.
-
- * gst/asfdemux/gstasfdemux.c: (_read_var_length, _read_uint):
- Likewise.
-
-2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- update required version of GStreamer because of GST_TIME_FORMAT
-
-2004-04-20 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_init):
- remove leftover g_print
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- don't try setting only a subset of the caps. We don't want to kill
- autoplugging on purpose
-
-2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/ximage/ximagesink.c: (plugin_init):
- * sys/xvimage/xvimagesink.c: (plugin_init):
- add debugging categories
-
-2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/en_GB.po:
- * po/LINGUAS:
- Adding en_GB translation (Gareth Owen)
-
-2004-04-20 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
- (qtdemux_parse), (qtdemux_type_get), (qtdemux_dump_mvhd),
- (qtdemux_dump_tkhd), (qtdemux_dump_stsd), (qtdemux_dump_unknown),
- (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
- A number of new features and hacks to extract the esds atom and
- put it into the caps. (bug #137724)
-
-2004-04-19 David Schleef <ds@schleef.org>
-
- * gconf/Makefile.am: Fix for non-GNU make
- * gst-libs/gst/Makefile.am: Change directory order to handle
- GstPlay linking with gstinterfaces
- * gst-libs/gst/audio/make_filter: make use of tr portable
- * gst-libs/gst/play/Makefile.am: Add intended \
- * gst-libs/gst/xwindowlistener/xwindowlistener.c:
- (gst_xwin_set_clips): Switch to ISO variadic macro. Use a
- function prototype instead of void *.
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Switch to ISO variadic
- macro.
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_chain): wrap NULL in GST_ELEMENT_ERROR call
- * gst/videofilter/make_filter: make use of tr portable
- * pkgconfig/Makefile.am: Remove GNU extension in Makefile target
-
-2004-04-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/uk.po:
- Added Ukrainian translation (Maxim V. Dziumanenko)
-
-2004-04-18 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_getcaps),
- (gst_gsmdec_link), (gst_gsmdec_chain):
- Fix capsnego, simplify chain function slightly.
- * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
- Add GSM.
-
-2004-04-18 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
- (gst_wavparse_destroy_sourcepad), (gst_wavparse_create_sourcepad),
- (gst_wavparse_parse_fmt), (gst_wavparse_change_state):
- Hack to make wavparse work with spider (always -> sometimes pad).
- Fixes #135862 && #140411.
-
-2004-04-18 Benjamin Otte <otte@gnome.org>
-
- * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
- (gst_osselement_rate_probe_check),
- (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate):
- get rid of \n in debug output
-
-2004-04-17 Iain <iain@prettypeople.org>
-
- * gst/wavparse/gstwavparse.c (gst_wavparse_loop): Allow all events,
- not just EOS.
-
-2004-04-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
- (gst_id3_tag_class_init), (gst_id3_tag_get_caps),
- (gst_id3_tag_add_src_pad), (gst_id3_tag_init),
- (gst_id3_tag_set_property), (gst_id3_tag_do_caps_nego),
- (gst_id3_tag_src_link), (gst_id3_tag_chain),
- (gst_id3_tag_change_state), (plugin_init):
- deprecate id3tag element and replace with id3demux/id3mux.
- great side effect: this ugly file is now even uglier, yay!
- * ext/mad/gstmad.h:
- remove non-available function
- update for new get_type
-
-2004-04-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- require mpeg2dec >= 0.4.0
-
-2004-04-17 Benjamin Otte <otte@gnome.org>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
- (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
- (gst_xvimagesink_set_xwindow_id):
- call GST_ELEMENT_ERROR whenever get_xcontext fails. Includes
- assorted cleanup fixes.
-
-2004-04-16 David Schleef <ds@schleef.org>
-
- * sys/ximage/ximagesink.h: Compile fix for FreeBSD. (bug #140268)
- * sys/xvimage/xvimagesink.h: same
-
-2004-04-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
- Fix GST_ELEMENT_ERROR with (NULL)
-
-2004-04-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data):
- Add div[3456] as fourccs for DivX 3 (fixes #140137).
-
-2004-04-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c:
- (gst_riff_create_video_caps_with_data),
- (gst_riff_create_video_caps), (gst_riff_create_audio_caps),
- (gst_riff_create_video_template_caps),
- (gst_riff_create_audio_template_caps):
- * gst-libs/gst/riff/riff-media.h:
- * gst-libs/gst/riff/riff-read.c:
- (gst_riff_read_strf_vids_with_data), (gst_riff_read_strf_vids):
- * gst-libs/gst/riff/riff-read.h:
- * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
- Add MS RLE support. I added some functions to read out strf chunks
- into strf chunks and the data behind it. This is usually color
- palettes (as in RLE, but also in 8-bit RGB). Also use those during
- caps creation. Lastly, add ADPCM (similar to wavparse - which
- should eventually be rifflib based).
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
- (gst_matroska_demux_init), (gst_matroska_demux_reset):
- * gst/matroska/matroska-demux.h:
- Remove placeholders for some prehistoric tagging system. Didn't add
- support for any tag system really anyway.
- * gst/qtdemux/qtdemux.c:
- Add support for audio/x-m4a (MPEG-4) through spider.
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
- (gst_wavparse_loop):
- ADPCM support (#135862). Increase max. buffer size because we
- cannot split buffers for ADPCM (screws references) and I've seen
- files with 2048 byte chunks. 4096 seems safe for now.
-
-2004-04-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: bump nano to 1
-
-=== release 0.8.1 ===
-
-2004-04-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: releasing 0.8.1, "Comforting Sounds"
-
-2004-04-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
- Fix typo in divxversion (3 instead of 4 for "DIVX" fourcc).
- Fixes #140058
-
-2004-04-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
- lower rank of dvddemux so that it's not used for mpeg playback.
-
-2004-04-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- save libs correctly when checking mad
-
-2004-04-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mad/gstid3tag.c: (plugin_init):
- lower rank of id3tag as proposed by Benjamin. Fixes #139926.
-
-2004-04-13 David Schleef <ds@schleef.org>
-
- * common/m4/gst-feature.m4: Call -config scripts with
- --plugin-libs if it is supported.
- * gst/avi/gstavimux.c: (gst_avimux_vidsinkconnect): sequences of
- JPEG images are image/jpeg.
- * gst/debug/Makefile.am:
- * gst/debug/negotiation.c: (gst_negotiation_class_init),
- (gst_negotiation_getcaps), (gst_negotiation_pad_link),
- (gst_negotiation_update_caps), (gst_negotiation_get_property),
- (gst_negotiation_plugin_init): Add a property that acts like
- filter caps.
- * testsuite/gst-lint: Move license checking to be a standard
- test.
-
-2004-04-13 David Schleef <ds@schleef.org>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_reset): Fix memleak.
- patch from Sebastien Cote (bug #139958)
-
-2004-04-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * examples/gstplay/Makefile.am:
- * examples/gstplay/player.c: (main):
- make the commandline player example use gconf settings
-
-2004-04-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
- (gst_cacasink_sinkconnect), (gst_cacasink_init),
- (gst_cacasink_chain), (gst_cacasink_open), (gst_cacasink_close):
- init/end library during state transition, not object
- creation/disposal. get rid of custom dispose handler.
-
-
-2004-04-12 Christian Schaller <Uraeus@gnome.org>
-
- * sys/oss/gstosselement.c: s/lstat/stat/ from freeBSD, since it can
- be a symlink
-
-2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_data):
- Handle JUNK chunks inside data section. Prevents warnings.
-
-2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
- (gst_riff_create_video_template_caps):
- Add MS video v1.
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
- (gst_avi_demux_stream_data):
- Add support for "rec-list" chunks.
-
-2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
- Fix another codecname mismatch.
-
-2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
- Fix divx caps mismatch and move from video/x-jpeg to image/jpeg
- so that MJPEG plays back.
-
-2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
- (gst_mp1videoparse_real_chain), (gst_mp1videoparse_change_state):
- * gst/mpeg1videoparse/gstmp1videoparse.h:
- Fix for some slight mis-cuts in buffer parsing, and for some
- potential overflows or faults-causers. Adds disconts. Also fixes
- #139105 while we're at it.
-
-2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * sys/v4l2/gstv4l2element.h:
- Workaround for missing struct v4l2_buffer declaration in Suse 9
- and Mandrake 10 linux/videodev2.h header file (#135919).
-
-2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
- Bail out if no filename was given.
-
-2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps),
- (gst_v4l2_fourcc_from_structure):
- Add Y41B/Y42B YUV formats (see #125732), fix Y41P (was typo'ed to
- Y41B somewhere).
-
-2004-04-09 Benjamin Otte <otte@gnome.org>
-
- * ext/gnomevfs/gstgnomevfssink.c:
- (_gst_boolean_allow_overwrite_accumulator),
- (gst_gnomevfssink_class_init):
- fix erase signal - if any handler returns false the file will not be
- overwritten. If no handler is connected, the file will not be
- overwritten either.
- renamed signal to "allow-overwrite"
- * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
- free string when adding it to ID3 failed
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
- unref event when done
- * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
- free caps
- * gst/typefind/gsttypefindfunctions.c:
- (mpeg_video_stream_type_find):
- fix invalid read
-
-2004-04-08 David Schleef <ds@schleef.org>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_register): Change rank to PRIMARY.
-
-2004-04-08 David Schleef <ds@schleef.org>
-
- * gst/colorspace/gstcolorspace.c: Don't advertise a conversion
- we don't support (bug #139532)
-
-2004-04-07 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mad/gstmad.c: (gst_mad_handle_event),
- (gst_mad_check_caps_reset), (gst_mad_chain),
- (gst_mad_change_state):
- only set explicit caps if they haven't been set before for
- this stream. MPEG-audio sample rate/channels aren't allowed
- to change in-stream.
- Fixes #139382
-
-2004-04-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_base_init),
- (_gst_boolean_did_something_accumulator),
- (gst_gnomevfssink_class_init), (gst_gnomevfssink_dispose),
- (gst_gnomevfssink_init), (gst_gnomevfssink_set_property),
- (gst_gnomevfssink_get_property), (gst_gnomevfssink_open_file),
- (gst_gnomevfssink_close_file), (gst_gnomevfssink_chain),
- (gst_gnomevfssink_change_state):
- Fix erase signal. Don't erase by default. Remove handoff signal.
- Remove erase property. Don't segfault. General cleanup.
-
-2004-04-07 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/gconf/test-gconf.c: (main):
- add missing gst_init
-
-2004-04-07 Benjamin Otte <otte@gnome.org>
-
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
- free the mutexes, too
-
-2004-04-07 Benjamin Otte <otte@gnome.org>
-
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
- actually free the URI string
- * ext/mad/gstid3tag.c: (gst_id3_tag_src_event):
- compute offset correctly when passing discont events
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
- don't leak discont events
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
- add some missing breaks so caps aren't copied randomly
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream):
- if we realloc memory, we better use it
-
-2004-04-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstmad.c: (normal_seek):
- fix GST_FORMAT_TIME usage
-
-2004-04-05 David Schleef <ds@schleef.org>
-
- * ext/kio/kiosrc.cpp: Undefine KDE_DEPRECATED so we can use
- a deprecated function (hack!)
-
-2004-04-05 Benjamin Otte <otte@gnome.org>
-
- * ext/esd/esdmon.c: (gst_esdmon_get):
- fix nonterminated vararg and memleak
-
-2004-04-05 Benjamin Otte <otte@gnome.org>
-
- * ext/ladspa/gstladspa.c: (gst_ladspa_class_init),
- (gst_ladspa_init), (gst_ladspa_force_src_caps),
- (gst_ladspa_set_property), (gst_ladspa_get_property),
- (gst_ladspa_instantiate), (gst_ladspa_activate),
- (gst_ladspa_deactivate), (gst_ladspa_loop), (gst_ladspa_chain):
- clean up debugging
-
-2004-04-05 Stefan Kost <kost@imn.htwk-leipzig.de>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/ladspa/gstladspa.c: (gst_ladspa_class_init):
- check for broken LADSPA parameters (fixes #138635)
-
-2004-04-05 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps):
- advertise buffer-frames correctly on sinkpads
-
-2004-04-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mad/gstmad.c: (gst_mad_get_type), (gst_mad_layer_get_type),
- (gst_mad_mode_get_type), (gst_mad_emphasis_get_type),
- (gst_mad_get_event_masks), (gst_mad_get_query_types), (index_seek),
- (normal_seek), (gst_mad_src_event), (gst_mad_handle_event),
- (gst_mad_check_caps_reset), (gst_mad_chain):
- add more debugging, only reset caps when we're not in error state
-
-2004-04-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mad/gstmad.c: add debugging category, comment + cleanups
-
-2004-04-05 Julio M. Merino Vidal <jmmv@menta.net>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- fix == in test(1) operator
-
-2004-04-05 Julio M. Merino Vidal <jmmv@menta.net>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- fix --export-symblos-regex to a working regex.
-
-2004-04-04 Benjamin Otte <otte@gnome.org>
-
- * sys/oss/.cvsignore:
- add for oss_probe
-
-2004-04-03 Tim-Phillip Müller <t.i.m@zen.co.uk>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
- add missing 'new_media' argument (fixes #138168)
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_handle_seek_event):
- add vararg terminator (fixes #138169)
-
-2004-04-02 David Schleef <ds@schleef.org>
-
- * ext/gdk_pixbuf/Makefile.am: Make sure gstgdkanimation.h is
- disted (bug #138914)
-
-2004-04-01 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state),
- (gst_alsa_close_audio):
- handle case better where a soundcard can't pause
- * ext/ogg/gstoggdemux.c:
- don't crash when we get events but don't have pads yet
-
-2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
- throw an error if we couldn't probe any caps.
-
-2004-04-01 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dvdnav/gst-dvd:
- Add a really simple sample DVD player
-
-2004-04-01 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/a52dec/gsta52dec.c: (gst_a52dec_get_type), (gst_a52dec_init),
- (gst_a52dec_push), (gst_a52dec_handle_event),
- (gst_a52dec_update_streaminfo), (gst_a52dec_loop),
- (gst_a52dec_change_state):
- * ext/a52dec/gsta52dec.h:
- Use a debug category, Output timestamps correctly
- Emit tag info, Handle events, tell liba52dec about cpu
- capabilities so it can use MMX etc.
- * ext/dv/gstdvdec.c: (gst_dvdec_loop), (gst_dvdec_change_state):
- Fix a crasher accessing invalid memory
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init),
- (dvdnavsrc_update_highlight), (dvdnavsrc_loop),
- (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
- (dvdnavsrc_event), (dvdnavsrc_get_formats), (dvdnavsrc_convert),
- (dvdnavsrc_query):
- Some support for byte-format seeking.
- Small fixes for still frames and menu button overlays
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
- (gst_mpeg2dec_alloc_buffer):
- Use a debug category. Adjust the report level of several items to
- LOG. Call mpeg2_custom_fbuf to mark our buffers as 'custom buffers'
- so it doesn't lose the GstBuffer pointer
- * gst/debug/Makefile.am:
- * gst/debug/gstdebug.c: (plugin_init):
- * gst/debug/gstnavseek.c: (gst_navseek_get_type),
- (gst_navseek_base_init), (gst_navseek_class_init),
- (gst_navseek_init), (gst_navseek_seek),
- (gst_navseek_handle_src_event), (gst_navseek_set_property),
- (gst_navseek_get_property), (gst_navseek_chain),
- (gst_navseek_plugin_init):
- * gst/debug/gstnavseek.h:
- Add the navseek debug element for seeking back and forth in a
- video stream using arrow keys.
- * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_get_type),
- (gst_mpeg2subt_base_init), (gst_mpeg2subt_class_init),
- (gst_mpeg2subt_init), (gst_mpeg2subt_finalize),
- (gst_mpeg2subt_getcaps_video), (gst_mpeg2subt_link_video),
- (gst_mpeg2subt_handle_video), (gst_mpeg2subt_src_event),
- (gst_mpeg2subt_parse_header), (gst_get_nibble),
- (gst_setup_palette), (gst_get_rle_code), (gst_draw_rle_line),
- (gst_merge_uv_data), (gst_mpeg2subt_merge_title),
- (gst_update_still_frame), (gst_mpeg2subt_handle_subtitle),
- (gst_mpeg2subt_handle_dvd_event), (gst_mpeg2subt_loop):
- * gst/mpeg2sub/gstmpeg2subt.h:
- Pretty much a complete rewrite. Now a loopbased element. May still
- require work to properly synchronise subtitle buffers.
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private),
- (gst_dvd_demux_send_subbuffer):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
- Don't attempt to create subbuffers of size 0
- Reduce a couple of error outputs to warnings.
- * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect),
- (gst_y4mencode_chain):
- Output the y4m frame header correctly.
-
-2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
- throw errors instead of allowing SIGFPE
-
-2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_string),
- (gst_gconf_render_bin_from_key):
- leak plugging and style fixing
-
-2004-03-31 David Schleef <ds@schleef.org>
-
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_expand_value),
- (gst_audioscale_getcaps): Fix getcaps to expand and union lists.
- (bug #138225)
- * gst/debug/Makefile.am:
- * gst/debug/breakmydata.c: (gst_break_my_data_plugin_init):
- * gst/debug/gstdebug.c: (plugin_init): Merge elements into one
- plugin.
- * gst/debug/negotiation.c: (gst_gst_negotiation_get_type),
- (gst_negotiation_base_init), (gst_negotiation_class_init),
- (gst_negotiation_init), (gst_negotiation_getcaps),
- (gst_negotiation_pad_link), (gst_negotiation_chain),
- (gst_negotiation_set_property), (gst_negotiation_get_property),
- (gst_negotiation_plugin_init): New element to talk about random
- negotiation things happening in a pipeline.
-
-2004-03-31 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
- fix integer addition with help of Stefan Kost
-
-2004-03-31 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/nl.po: updated Dutch translation (Elros Cyriatan)
-
-2004-03-30 David Schleef <ds@schleef.org>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer),
- (gst_mpeg2dec_negotiate_format): Handle Y42B-format MPEG
- video, patch from Matthew.Spencer@eu.sony.com (Matthew Spencer)
- (bug #137504)
- * ext/mpeg2dec/gstmpeg2dec.h:
-
-2004-03-30 David Schleef <ds@schleef.org>
-
- * ext/gdk_pixbuf/Makefile.am: Remove spurious rules. (bug #136527)
-
-2004-03-30 David Schleef <ds@schleef.org>
-
- * tools/gst-launch-ext-m.m: Applied patch from gnome@flyn.org (W.
- Michael Petullo) to handle .mov
-
-2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
- (gst_osselement_rate_check_rate):
- probe caps correctly for sound cards that only support one format
-
-2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/kio/kiosrc.cpp: (process_events):
- update handling event processing if inside KDE - untested
-
-2004-03-29 David Schleef <ds@schleef.org>
-
- * ext/hermes/gsthermescolorspace.c: (plugin_init): decrease rank
- by 2 to not interfere with other colorspaces.
- * ext/pango/gsttextoverlay.c: (plugin_init): change rank to NONE
- * gst/colorspace/gstcolorspace.c: (plugin_init): decrease rank by
- one to not interfere with ffmpeg_colorspace.
-
-2004-03-29 David Schleef <ds@schleef.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_fixate): Don't fixate fields that
- aren't in the caps.
- * gst/sine/gstsinesrc.c: change rate caps to [1,MAX]
- * gst/videocrop/gstvideocrop.c: (plugin_init): Change rank to NONE.
-
-2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/riff/riff-media.c:
- fail on error, don't try to set stuff on NULL caps
-
-2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/kio/Makefile.am:
- * ext/kio/kioreceiver.cpp:
- * ext/kio/kioreceiver.h:
- * ext/kio/kiosrc.cpp:
- * ext/kio/kiosrc.h:
- add experimental kiosrc plugin
- * ext/alsa/gstalsaplugin.c: (plugin_init):
- initialize debugging category only when we're sure registering the
- plugins worked.
-
-2004-03-29 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * examples/gstplay/player.c: (main):
- * gst-libs/gst/play/play.c: (gst_play_class_init),
- (gst_play_set_location), (gst_play_set_data_src),
- (gst_play_set_video_sink), (gst_play_set_audio_sink),
- (gst_play_set_visualization), (gst_play_connect_visualization):
- check return values of element_set_state and return FALSE where
- failed
-
-2004-03-29 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
- try harder to check if an event is really a discont
-
-2004-03-29 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS: adding Azerbaijani (Mətin Əmirov)
- * po/az.po:
-
-2004-03-28 Benjamin Otte <otte@gnome.org>
-
- * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
- (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
- get rid of non-standard "..." ranges in case statements.
-
-2004-03-27 Martin Soto <martinsoto@users.sourceforge.net>
-
- * gst/mpegstream/gstmpegdemux.c:
- * gst/mpegstream/gstmpegdemux.h: Complete overhaul. All DVD
- specific functionality split to the new dvddemux element.
- * gst/mpegstream/gstdvddemux.c:
- * gst/mpegstream/gstdvddemux.h: New demultiplexer for DVD (VOB)
- streams, derived from mpegdemux.
- * gst/mpegstream/gstmpegparse.c: Discontinuity handling cleaned
- up. SCR based timestamp rewriting can be turned off (will probably
- completely disappear soon).
- * ext/dvdnav/dvdnavsrc.c: Changes resulting from a few months
- hacking. General cleanup. All printf statements replaced by
- debugging messages. Almost complete libdvdnav support.
- (dvdnavsrc_class_init): Got rid of unnecessary signals (replaced
- by events. New properties for audio and subpicture languages.
- (dvdnavsrc_update_highlight): Now uses events.
- (dvdnavsrc_user_op): Cleaned up.
- (dvdnavsrc_get): Renamed to dvdnavsrc_loop (element is now loop
- based). Lots of cleanup, and propper support for most libdvdnav
- events.
- (dvdnavsrc_make_dvd_event): New function.
- (dvdnavsrc_make_dvd_nav_packet_event): New function.
- (dvdnavsrc_make_clut_change_event): New function.
-
-2004-03-26 Benjamin Otte <otte@gnome.org>
-
- * gst/typefind/gsttypefindfunctions.c: (theora_type_find):
- fix bug where typefinding would claim it's theora whenever less then
- 7 bytes of data were available
-
-2004-03-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link),
- (gst_alawdec_base_init), (gst_alawdec_class_init),
- (gst_alawdec_init), (gst_alawdec_chain):
- * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link),
- (gst_alawenc_base_init), (gst_alawenc_class_init),
- (gst_alawenc_init), (gst_alawenc_chain):
- * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link),
- (gst_mulawdec_base_init), (gst_mulawdec_class_init),
- (gst_mulawdec_init), (gst_mulawdec_chain):
- * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link),
- (gst_mulawenc_base_init), (gst_mulawenc_class_init),
- (gst_mulawenc_init), (gst_mulawenc_chain):
- Fix capsnego in all four, remove the unused property functions and
- simplify the chain functions slightly. I guess we could use macros
- or something similar for those, since the code is so similar, but
- I'm currently too lazy...
-
-2004-03-24 David Schleef <ds@schleef.org>
-
- * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
- (gst_osselement_close_audio), (gst_osselement_probe_caps),
- (gst_osselement_get_format_structure),
- (gst_osselement_rate_probe_check), (gst_osselement_rate_add_range),
- (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate),
- (gst_osselement_rate_int_compare): Add code to handle rate probing
- (bug #120883)
- * sys/oss/gstosselement.h: same
- * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_getcaps):
- Use rate probing provided by osselement.
- * sys/oss/gstosssrc.c: (gst_osssrc_init), (gst_osssrc_getcaps): same
-
-2004-03-24 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/xvid/gstxvidenc.c: (gst_xvidenc_set_property),
- (gst_xvidenc_get_property):
- ulong/int mess-up.
-
-2004-03-24 David Schleef <ds@schleef.org>
-
- * ext/speex/gstspeexdec.c: (gst_speexdec_base_init),
- (gst_speexdec_init):
- * ext/speex/gstspeexenc.c: (gst_speexenc_base_init),
- (gst_speexenc_init): Create the pad template correctly (from
- the static pad template, not a NULL pointer.)
-
-2004-03-25 Benjamin Otte <otte@gnome.org>
-
- * gst/debug/Makefile.am:
- * gst/debug/breakmydata.c:
- add element that quasi-randomly changes bytes in the stream.
- Intended use is robustness checking of demuxers and decoders in
- media tests.
-
-2004-03-24 Benjamin Otte <otte@gnome.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
- (gst_alsa_probe_hw_params):
- * ext/alsa/gstalsa.h:
- debugging output fixes
-
-2004-03-24 Benjamin Otte <otte@gnome.org>
-
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_set_property):
- don't g_return_if_fail if element is PLAYING, fail silently as every
- other element.
- * gst/effectv/gstquark.c: (gst_quarktv_chain):
- only fix needed for cast lvalue issues in gst-plugins
- * gst/volenv/gstvolenv.c: (gst_volenv_init):
- add proxy_getcaps
-
-2004-03-24 Benjamin Otte <otte@gnome.org>
-
- * gst/level/gstlevel.c: (gst_level_init):
- add proxying getcaps function, so level doesn't advertise impossible
- caps
-
-2004-03-24 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
- (gst_qtdemux_loop_header), (qtdemux_parse_moov), (qtdemux_parse),
- (qtdemux_node_dump_foreach), (qtdemux_dump_mvhd),
- (qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
- (qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
- (qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
- (qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
- (qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
- (qtdemux_parse_tree), (qtdemux_parse_trak): Fix debugging
- messages. Divide the chunk size by the compression ratio
- (needed for MACE audio)
-
-2004-03-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- Fix buffer overflow read error.
-
-2004-03-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.h:
- Remove unused entry.
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
- Add cinepak.
- * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
- (gst_videodrop_link), (gst_videodrop_chain):
- Fix, sort of. Was horribly broken with new capsnego. Bah...
-
-2004-03-23 Jeremy Simon <jesimon@libertysurf.fr>
-
- * gst/typefind/gsttypefindfunctions.c: (ape_type_find),
- (plugin_init):
- Add a monkeysaudio typefind function
-
-2004-03-23 Johan Dahlin <johan@gnome.org>
-
- * gst-libs/gst/play/play.c (gst_play_audio_fixate)
- (gst_play_video_fixate): Check so the structure has the field
- before trying to fixate them, this makes it possible to have
- fakesinks for video and audio output without printing errors on
- the output console.
-
-2004-03-22 David Schleef <ds@schleef.org>
-
- * sys/oss/Makefile.am:
- * sys/oss/oss_probe.c: (main), (probe_check), (add_range),
- (check_rate), (add_rate): Rate probing test app.
-
-2004-03-21 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
- (_fixate_caps_to_int), (gst_audio_convert_fixate):
- add a fixation function that pretty much does the right thing (fixes
- #137556)
-
-2004-03-20 David I. Lehn <dlehn@users.sourceforge.net>
-
- * configure.ac: GST_PACKAGE default: s/GStreamer/GStreamer Plugins/
-
-2004-03-20 Tim-Phillip Müller <t.i.m@zen.co.uk>
-
- reviewed by: Benjamin Otte <otte@gnome.org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- terminate gst_event_new_discontinuous correctly (fixes parts of
- #137711)
-
-2004-03-19 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/Makefile.am: Enable xoverlay unconditionally,
- since it doesn't depend on X, and it's part of our ABI.
-
-2004-03-19 Iain <iain@prettypeople.org>
-
- * gst/interleave/deinterleave.c (deinterleave_sink_link): Use the
- is_int in the structure, not the local variable.
-
-2004-03-19 David Schleef <ds@schleef.org>
-
- * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_change_state),
- (gst_rfbsrc_init), (gst_rfbsrc_getcaps), (gst_rfbsrc_fixate),
- (gst_rfbsrc_link), (gst_rfbsrc_paint_rect), (gst_rfbsrc_get):
- Improvements in caps negotiation.
-
-2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/af.po:
- adding Afrikaans (Petri Jooste)
-
-2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_chain):
- throw error instead of g_critical (#137588)
-
-2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am:
- * configure.ac:
- dist common and m4 correctly
- * po/sv.po:
-
-2004-03-17 David Schleef <ds@schleef.org>
-
- * pkgconfig/gstreamer-media-info.pc.in: Add Version.
- (bug #137348)
-
-2004-03-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/sv.po:
- adding Swedish translation (Christian Rose)
-
-2004-03-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * Makefile.am: use release.mak
-
-2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * common/ChangeLog:
- * common/gst-autogen.sh:
- add some explanation about the version detection
- * configure.ac:
- fix X check
-
-2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: bump nano to 1
-
-=== release 0.8.0 ===
-
-2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: release 0.8.0, "Pharmaceutical Itch"
-
-2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- update libtool version
- * gst-libs/gst/media-info/Makefile.am:
- actually use libtool version
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: fix speex detection to work with 1.0 but not 1.1
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * gst-plugins.spec.in:
- * pkgconfig/Makefile.am:
- * pkgconfig/gstreamer-gconf-uninstalled.pc.in:
- * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
- * pkgconfig/gstreamer-libs-uninstalled.pc.in:
- * pkgconfig/gstreamer-libs.pc.in:
- * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
- * pkgconfig/gstreamer-play-uninstalled.pc.in:
- * pkgconfig/gstreamer-plugins-uninstalled.pc.in:
- * pkgconfig/gstreamer-plugins.pc.in:
- remove @VERSION@ from some of the pc files since core and plugins
- are decoupled.
- created gstreamer-plugins.pc as it's a better name, but keeping
- -libs around for now to get fixes upstream done first.
-
-2004-03-15 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/play.c: (gst_play_get_framerate),
- (gst_play_get_sink_element): First draft of gst_play_get_framerate.
- * gst-libs/gst/play/play.h:
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * *.c, *.cc: don't mix tabs and spaces
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
- use the new ffmpegcolorspace
- * gst-plugins.spec.in:
- package new colorspace and media-info
- * configure.ac:
- * pkgconfig/Makefile.am:
- fix some more disting issues
- * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
- * pkgconfig/gstreamer-media-info.pc.in:
- generate media-info pc files
-
-2004-03-15 Johan Dahlin <johan@gnome.org>
-
- * *.h: Revert indenting
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- adding ffmpegcolorspace element
- * gst/ffmpegcolorspace/Makefile.am:
- * gst/ffmpegcolorspace/avcodec.h:
- * gst/ffmpegcolorspace/common.h:
- * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
- * gst/ffmpegcolorspace/dsputil.h:
- * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
- * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
- (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_pix_fmt_to_caps),
- (gst_ffmpeg_caps_to_pix_fmt):
- * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
- * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
- (gst_ffmpegcolorspace_caps_remove_format_info),
- (gst_ffmpegcolorspace_getcaps), (gst_ffmpegcolorspace_pad_link),
- (gst_ffmpegcolorspace_get_type), (gst_ffmpegcolorspace_base_init),
- (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_init),
- (gst_ffmpegcolorspace_chain), (gst_ffmpegcolorspace_change_state),
- (gst_ffmpegcolorspace_set_property),
- (gst_ffmpegcolorspace_get_property),
- (gst_ffmpegcolorspace_register):
- * gst/ffmpegcolorspace/imgconvert.c:
- (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
- (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
- (avpicture_get_size), (avcodec_get_pix_fmt_loss),
- (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
- (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
- (yuv422_to_yuv420p), (yuv422_to_yuv422p), (yuv422p_to_yuv422),
- (C_JPEG_TO_CCIR), (img_convert_init), (img_apply_table),
- (shrink41), (shrink21), (shrink12), (shrink22), (shrink44),
- (grow21_line), (grow41_line), (grow21), (grow22), (grow41),
- (grow44), (conv411), (gif_clut_index), (build_rgb_palette),
- (bitcopy_n), (mono_to_gray), (monowhite_to_gray),
- (monoblack_to_gray), (gray_to_mono), (gray_to_monowhite),
- (gray_to_monoblack), (avpicture_alloc), (avpicture_free),
- (is_yuv_planar), (img_convert), (get_alpha_info_pal8),
- (img_get_alpha_info), (deinterlace_line),
- (deinterlace_line_inplace), (deinterlace_bottom_field),
- (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
- * gst/ffmpegcolorspace/imgconvert_template.h:
- * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
- * gst/ffmpegcolorspace/mmx.h:
- * gst/ffmpegcolorspace/utils.c: (avcodec_init):
- adding ffmpegcolorspace element supplied by Ronald after cleaning
- up and pulling in the right bits of upstream source.
- I'm sure a better C/compiler wizard could do some cleaning up (for
- example use GLIB's malloc stuff), but as a first pass this
- works very well
-
-2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/alsa/gstalsa.h:
- I assume Ronald forgot to commit the change to have cardname
- as a struct member. Expect some public spanking at the next
- opportunity.
-
-2004-03-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_property),
- (gst_alsa_open_audio), (gst_alsa_close_audio):
- * ext/alsa/gstalsa.c:
- Don't open the device if we're a mixer (= padless).
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_class_init),
- (gst_alsa_mixer_init), (gst_alsa_mixer_open),
- (gst_alsa_mixer_close), (gst_alsa_mixer_change_state):
- Open mixer during state change rather than during object
- initialization. Also, get a device name. Currently in a somewhat
- hackish fashion, but I didn't really find something better.
-
-2004-03-14 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * *.c, *.h: run gst-indent
-
-2004-03-14 Benjamin Otte <otte@gnome.org>
-
- * gst/modplug/gstmodplug.cc:
- * gst/modplug/gstmodplug.h:
- set correct timestamps on outgoing buffers
-
-2004-03-14 Benjamin Otte <otte@gnome.org>
-
- * gst/modplug/gstmodplug.cc:
- handle events - don't do crap when a discont arrives that's not
- necessary
- This allows correct loading and playback of mods in Rhythmbox
-
-2004-03-14 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- * gst-libs/gst/gconf/Makefile.am:
- * pkgconfig/Makefile.am:
- move gstreamer-gconf pkgconfig files to pkgconfig/ dir. Make sure
- they get rebuilt properly
- * configure.ac:
- when checking for vorbis, try pkgconfig first.
- * gst/modplug/gstmodplug.cc:
- add fixate function
-
-2004-03-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
- Fix for obvious mistake, where we first shift the offset and then
- read a samplesize element assuming the old offset. Note that this
- part still has something weird, i.e. my movies containing those
- don't actually play well, but at least there's something that looks
- like sound now.
-
-2004-03-14 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/typefind/gsttypefindfunctions.c: (speex_type_find),
- (plugin_init):
- Add a typefind function for speex format
-
-2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps),
- (gst_asf_demux_setup_pad):
- Use 25fps as our "fake" fps value (marked for fixage in 0.9.x)
- instead of 0. Reason is simple: some elements have a fps range
- of 1-max instead of 0-max. So now ASF video actually works.
-
-2004-03-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * po/LINGUAS:
- * po/sr.po:
- adding serbian as a language
-
-2004-03-13 Benjamin Otte <otte@gnome.org>
-
- * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
- return taglist correctly from _get function, don't gst_pad_push it.
- (fixes #137042)
-
-2004-03-13 Jan Schmidt <thaytan@mad.scientist.com>
- * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
-
-2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_free_list):
- * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_class_init),
- (gst_alsa_mixer_track_new):
- * ext/alsa/gstalsamixertrack.h:
- Fix ancient leftovers... MixerTrack is a GObject.
-
-2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
- * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
- Don't block during probing...
-
-2004-03-12 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_type), (gst_alsa_class_init),
- (gst_alsa_get_property), (gst_alsa_probe_get_properties),
- (gst_alsa_class_probe_devices), (gst_alsa_class_list_devices),
- (gst_alsa_probe_probe_property), (gst_alsa_probe_needs_probe),
- (gst_alsa_probe_get_values), (gst_alsa_probe_interface_init),
- (gst_alsa_open_audio), (gst_alsa_close_audio):
- * ext/alsa/gstalsa.h:
- Add propertyprobe interface implementation, add some device-name
- property, all this so that it looks good in gnome-volume-control.
-
-2004-03-12 David Schleef <ds@schleef.org>
-
- * configure.ac: the Hermes library controls hermescolorspace, not
- colorspace.
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
- (gst_mpeg2dec_init): minor pet peeve: disable code with #ifdef,
- not /* */
- * ext/sdl/sdlvideosink.c: Change XID to unsigned long.
- * ext/sdl/sdlvideosink.h: ditto.
- * gst/colorspace/gstcolorspace.c: Fix old comments about Hermes
-
-2004-03-12 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_set_xwindow_id),
- (gst_x_overlay_got_xwindow_id):
- * gst-libs/gst/xoverlay/xoverlay.h:
- replace XID with unsigned long to get rid of the xlibs dependency in
- XOverlay (fixes #137004)
-
-2004-03-13 Jan Schmidt <thaytan@mad.scientist.com>
- * gst/effectv/gstaging.c: (gst_agingtv_base_init),
- (gst_agingtv_setup):
- * gst/effectv/gstdice.c: (gst_dicetv_get_type),
- (gst_dicetv_base_init), (gst_dicetv_class_init),
- (gst_dicetv_setup), (gst_dicetv_init), (gst_dicetv_draw):
- * gst/effectv/gstedge.c: (gst_edgetv_get_type),
- (gst_edgetv_base_init), (gst_edgetv_class_init), (gst_edgetv_init),
- (gst_edgetv_setup), (gst_edgetv_rgb32):
- * gst/effectv/gsteffectv.c:
- * gst/effectv/gstquark.c: (gst_quarktv_link), (gst_quarktv_init),
- (gst_quarktv_set_property):
- * gst/effectv/gstrev.c: (gst_revtv_get_type),
- (gst_revtv_base_init), (gst_revtv_class_init), (gst_revtv_init),
- (gst_revtv_setup), (gst_revtv_rgb32):
- * gst/effectv/gstshagadelic.c: (gst_shagadelictv_get_type),
- (gst_shagadelictv_base_init), (gst_shagadelictv_class_init),
- (gst_shagadelictv_init), (gst_shagadelictv_setup),
- (gst_shagadelictv_rgb32):
- * gst/effectv/gstvertigo.c: (gst_vertigotv_get_type),
- (gst_vertigotv_base_init), (gst_vertigotv_class_init),
- (gst_vertigotv_setup), (gst_vertigotv_init), (gst_vertigotv_rgb32):
- * gst/effectv/gstwarp.c:
- Port everything that can be ported to videofilter and fix up the caps.
- Can someone with a big-endian machine please check these?
-
-2004-03-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_get_time),
- (gst_osssink_chain), (gst_osssink_change_state):
- Latest fixes for A/V sync, audio playback and such. This is about
- all... MPEG playback issues are mostly related to the async build-
- up of MPEG files, I cannot fix that. Use basicgthread to solve it.
-
-2004-03-10 Thomas Vander Stichele <thomas at apestaart dot org>
-
- patch from: Stephane Loeuillet
-
- * configure.ac:
- use pkg-config for some libraries, falling back to the old .m4 way
- (fixes #131270)
- * m4/libdv.m4:
- removed
-
-2004-03-10 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * tools/Makefile.am:
- * tools/Makefile.in:
- * tools/gst-launch-ext-m.m:
- * tools/gst-launch-ext.1.in:
- * tools/gst-visualise-m.m:
- * tools/gst-visualise.1:
- * tools/gst-visualise.1.in:
- reorganizing generation of script tools
-
-2004-03-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c:
- Downgrade priority. We prefer ffdec_mpeg4.
- * ext/faad/gstfaad.c: (gst_faad_srcgetcaps), (gst_faad_srcconnect),
- (gst_faad_chain), (gst_faad_change_state):
- Fix capsnego. Doesn't work for some sounds because we don't have
- a 5:1 to stereo element.
- * ext/xvid/gstxvid.c: (plugin_init):
- Add priority.
- * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
- (gst_osssink_change_state):
- Add discont handling.
-
-2004-03-09 Colin Walters <walters@verbum.org>
-
- * gst/audioconvert/gstaudioconvert.c: Fix typo in width 8
- conversion.
-
-2004-03-09 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
- the signals take 2 arguments
-
-2004-03-09 David Schleef <ds@schleef.org>
-
- * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad),
- (gst_alsa_fixate): Add fixate function. (bug #136686)
- * ext/alsa/gstalsa.h:
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_init):
-
-2004-03-09 Benjamin Otte <otte@gnome.org>
-
- * ext/mikmod/gstmikmod.c: (gst_mikmod_init), (gst_mikmod_loop),
- (gst_mikmod_change_state):
- * ext/mikmod/gstmikmod.h:
- make mikmod's loop function not loop infinitely and call
- gst_element_yield anymore
- * gst/modplug/gstmodplug.cc:
- fix pad negotiation (fixes #136590)
-
-2004-03-09 David Schleef <ds@schleef.org>
-
- * ext/lcs/Makefile.am: Fix so that the lcs colorspace plugin
- doesn't conflict with the internal colorspace plugin.
- * gst-libs/gst/audio/make_filter: Use `` instead of $() to
- satisfy the crappy-ass shell shipped by a certain vendor.
- * gst/videofilter/make_filter: same (bug #135299)
-
-2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: bump nano to 1
-
-=== release 0.7.6 ===
-
-2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.in: releasing 0.7.6, "There"
-
-2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * pkgconfig/gstreamer-play-uninstalled.pc.in:
- * pkgconfig/gstreamer-play.pc.in:
- synchronize the two
-
-2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_base_init),
- (cdparanoia_open), (cdparanoia_event):
- fix/add error handling
- * po/POTFILES.in:
- add cdparanoia source
- * tools/Makefile.am:
- make scripts executable
-
-2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/vorbis/Makefile.am:
- * sys/Makefile.am:
- remove id3types, vorbisfile and xvideosink from the build (#133783)
-
-2004-03-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
- Fix metadata read crash (#136537).
-
-2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
- * gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
- adding mime types, fixing the one-stop function
-
-2004-03-08 Christian Schaller <Uraeus@gnome.org>
-
- * ext/nas/nassink.c and /ext/nas/nassink.h:
- More NAS love from Arwed von Merkatz
- So lets all sing 'Can you feel the NAS tonight'
-
-2004-03-08 Christian Schaller <Uraeus@gnome.org>
-
- * tools/gst-launch-ext.in:
- Replace vorbisfile with oggdemux/vorbisdec/audioconvert
-
-2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
- (gst_mpeg2dec_init):
- remove the user_data pad for now, because it is being used in
- fixating causing MPEG playback to fixate on 1000 Hz for playback.
- If someone knows how to fix this properly, please do.
-
-2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/oss/gstosssink.c: (gst_osssink_get_delay),
- (gst_osssink_get_time):
- add a warning, IMO this won't get triggered anymore, remove later
-
-2004-03-07 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (qtdemux_video_caps): Added Cinepak
- format (bug #136470)
-
-2004-03-07 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/Makefile.am:
- * gst-libs/gst/media-info/Makefile.am:
- * gst-libs/gst/media-info/media-info-priv.c: (found_tag_callback),
- (error_callback), (gst_media_info_error_create),
- (gst_media_info_error_element), (gmip_init), (gmip_reset),
- (gmi_clear_decoder), (gmip_find_type_pre), (gmip_find_type):
- * gst-libs/gst/media-info/media-info-priv.h:
- * gst-libs/gst/media-info/media-info-test.c: (main):
- * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
- (gst_media_info_class_init), (gst_media_info_instance_init),
- (gst_media_info_set_source), (gst_media_info_read_with_idler),
- (gst_media_info_read_idler), (gst_media_info_read):
- * gst-libs/gst/media-info/media-info.h:
- fixed, should work now
-
-2004-03-07 Christian Schaller <Uraeus@gnome.org>
-
- * ext/nas/nassink.c:
- A bunch of NAS fixes from Arwed von Merkatz
-
-2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
- (qtdemux_parse_trak):
- Fix crash (j might be greater than n_samples, in which case we're
- writing outside the allocated space for the array) and memleak.
-
-2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosssink.c: (gst_osssink_chain):
- And another caller that couldn't handle delay < 0 (unsigned
- integer overflow). Video now continues playing on an audio
- buffer underrun, and the clock continues working. Audio still
- stalls.
-
-2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosssink.c: (gst_osssink_get_delay),
- (gst_osssink_get_time):
- get_delay() may return values lower than 0. In those cases, we
- should not actually cast to *unsigned* int64, that will break
- stuff horribly. In my case, it screwed up A/V sync in movies
- in totem rather badly.
-
-2004-03-06 Christophe Fergeau <teuf@gnome.org>
-
- * ext/faac/gstfaac.c: (gst_faac_chain):
- * ext/flac/gstflactag.c: (gst_flac_tag_chain):
- * ext/libpng/gstpngenc.c: (user_write_data):
- * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
- * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
- Fix several misuse of gst_buffer_merge (it doesn't take ownership
- of any buffer), should fix some leaks. I hope I didn't unref buffers
- that shouldn't be...
-
-2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
- (deep_notify_callback), (tag_flag_score), (found_tag_callback),
- (error_callback), (gmi_reset), (gmi_seek_to_track),
- (gmi_get_decoder), (gmi_set_mime), (gmip_find_type_pre),
- (gmip_find_type_post), (gmip_find_stream_post),
- (gmip_find_track_streaminfo_post):
- * gst-libs/gst/media-info/media-info-priv.h:
- * gst-libs/gst/media-info/media-info-test.c: (print_tag),
- (info_print), (main):
- * gst-libs/gst/media-info/media-info.c:
- (gst_media_info_error_create), (gst_media_info_error_element),
- (gst_media_info_instance_init), (gst_media_info_get_property),
- (gst_media_info_new), (gst_media_info_set_source),
- (gst_media_info_read_idler), (gst_media_info_read):
- * gst-libs/gst/media-info/media-info.h:
- first pass at making this work again. This seems to work on
- tagged ogg/vorbis and mp3 files.
-
-2004-03-06 Benjamin Otte <otte@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- fix huge leak: gst_buffer_merge doesn't unref the first argument
- itself.
-
-2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_update_info):
- report layer/mode/emphasis
-
-2004-03-06 Christophe Fergeau <teuf@gnome.org>
-
- * ext/mad/gstmad.c: (gst_mad_chain): fixed caps leak
-
-2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
- signal serial
-
-2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbis.c: (plugin_init):
- * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
- (gst_vorbis_dec_init), (vorbis_dec_event):
- add debug category
- make vorbisdec handle _BYTE and _TIME queries
-
-2004-03-06 Christophe Fergeau <teuf@gnome.org>
-
- * ext/mad/gstmad.c: (gst_mad_chain): send the average bitrate read
- from the xing header
-
-2004-03-06 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps),
- (gst_audio_convert_link), (gst_audio_convert_change_state),
- (gst_audio_convert_buffer_from_default_format):
- do conversions from/to float correctly, fix some caps nego errors,
- export correct supported caps in template and getcaps, use correct
- caps in try_set_caps functions
-
-2004-03-06 Christophe Fergeau <teuf@gnome.org>
-
- For some reason, I only committed a ChangeLog entry yesterday and
- not the corresponding code...
- * ext/mad/gstmad.c: Fix detection of Xing headers
- * gst/tags/gstid3tag.c: Changes to support TLEN tags
-
-2004-03-06 Benjamin Otte <otte@gnome.org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_get_pad_by_pad),
- (gst_ogg_demux_src_query):
- make sure to handle the case where there's no current chain
- gracefully.
-
-2004-03-05 David Schleef <ds@schleef.org>
-
- * ext/aalib/gstaasink.c: (gst_aasink_fixate), (gst_aasink_init):
- Add fixate function. (bug #131128)
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
- (gst_sdlvideosink_fixate): Add fixate function.
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- Fix attempt to print a non-pointer using GST_PTR_FORMAT.
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt):
- Fix missing break that was causing ulaw to be interpreted as
- raw int.
-
-2004-03-05 David Schleef <ds@schleef.org>
-
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
- Fix code that ignores return value of gst_buffer_merge().
- (bug #114560)
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_segment):
- * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice): same
- * testsuite/gst-lint: Check for above.
-
-2004-03-05 David Schleef <ds@schleef.org>
-
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Check for unfixed
- caps and throw an element error. (bug #136334)
-
-2004-03-05 David Schleef <ds@schleef.org>
-
- * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
- (gst_faad_chain): Fix negotiation.
- * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
- key and button events.
- * gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
- dung heap of code.
- * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
- depends on gconf
- * gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
- (gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
- function to encourage better negotiation, particularly between
- audioconvert and osssink.
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
- * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak): Make some debugging
- more important.
- * gst/typefind/gsttypefindfunctions.c: Fix mistake in flash
- typefinding.
- * gst/vbidec/vbiscreen.c: Add glib header
- * pkgconfig/gstreamer-play.pc.in: Depends on gst-interfaces.
-
-2004-03-06 Christophe Fergeau <teuf@users.sourceforge.net>
-
- * ext/mad/gstmad.c: Fix detection of Xing headers
- * gst/tags/gstid3tag.c: Changes to support TLEN tags
-
-2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
- (gst_wavparse_pad_convert), (gst_wavparse_pad_query):
- debug updates
-
-2004-03-06 Christophe Fergeau <teuf@gnome.org>
-
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- * ext/mad/gstmad.c: (gst_mad_init), (is_xhead),
- (mpg123_parse_xing_header), (gst_mad_chain): parse Xing header in vbr
- files, and report the parsed length as a GST_TAG_DURATION tag.
- * gst/tags/gstid3tag.c: support TLEN (duration) tag
-
-2004-03-05 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_channels):
- convert channels correctly. convert correctly to unsigned.
-
-2004-03-05 Julien MOUTTE <julien@moutte.net>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state): Check if
- we have a window before clearing it.
-
-2004-03-05 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_change_state): Check if we
- have a window before clearing it.
-
-2004-03-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gconf/gstreamer.schemas.in:
- * gst-libs/gst/gconf/Makefile.am:
- version installation path the same way as for 0.6
- * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
- * pkgconfig/gstreamer-libs-uninstalled.pc.in:
- * pkgconfig/gstreamer-play-uninstalled.pc.in:
- remove comment that was fixed
-
-2004-03-05 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_formats),
- (gst_qtdemux_src_convert), (gst_qtdemux_get_src_query_types),
- (gst_qtdemux_get_event_mask), (gst_qtdemux_handle_src_query),
- (gst_qtdemux_handle_src_event), (gst_qtdemux_add_stream):
- Add prototype code for handling seeking and querying.
-
-2004-03-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * examples/gstplay/player.c: (main):
- Initialize variables to NULL. Prevents a segfault because the
- (uninitialized) variable is not NULL, resulting in a crash on
- trying to reach error->message.
-
-2004-03-05 Benjamin Otte <otte@gnome.org>
-
- * gst/audioconvert/gstaudioconvert.c:
- (gst_audio_convert_buffer_to_default_format):
- make float=>int conversion work correctly even in cornercases.
-
-2004-03-04 David I. Lehn <dlehn@users.sourceforge.net>
-
- * debian/README.Debian:
- * debian/build-deps:
- * debian/changelog:
- * debian/control:
- * debian/control.in:
- * debian/copyright:
- * debian/gstreamer-a52dec.files:
- * debian/gstreamer-aa.files:
- * debian/gstreamer-alsa.files:
- * debian/gstreamer-alsa.manpages:
- * debian/gstreamer-arts.files:
- * debian/gstreamer-artsd.files:
- * debian/gstreamer-audiofile.files:
- * debian/gstreamer-avifile.files:
- * debian/gstreamer-cdparanoia.files:
- * debian/gstreamer-colorspace.files:
- * debian/gstreamer-doc.files:
- * debian/gstreamer-dv.files:
- * debian/gstreamer-dvd.files:
- * debian/gstreamer-esd.files:
- * debian/gstreamer-festival.files:
- * debian/gstreamer-flac.files:
- * debian/gstreamer-gconf.conffiles:
- * debian/gstreamer-gconf.files:
- * debian/gstreamer-gconf.postinst:
- * debian/gstreamer-gnomevfs.files:
- * debian/gstreamer-gsm.files:
- * debian/gstreamer-http.files:
- * debian/gstreamer-jack.files:
- * debian/gstreamer-jpeg.files:
- * debian/gstreamer-mad.files:
- * debian/gstreamer-mikmod.files:
- * debian/gstreamer-misc.files:
- * debian/gstreamer-mpeg2dec.files:
- * debian/gstreamer-oss.files:
- * debian/gstreamer-plugin-apps.files:
- * debian/gstreamer-plugin-apps.manpages:
- * debian/gstreamer-plugin-libs-dev.files:
- * debian/gstreamer-plugin-libs.files:
- * debian/gstreamer-plugin-template.postinst:
- * debian/gstreamer-plugin-template.postrm:
- * debian/gstreamer-sdl.files:
- * debian/gstreamer-sid.files:
- * debian/gstreamer-vorbis.files:
- * debian/gstreamer-x.files:
- * debian/mk.control:
- * debian/rules:
- Debian package info not maintained here.
-
-2004-03-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/aalib/gstaasink.c: (gst_aasink_class_init):
- * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init):
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init):
- * ext/divx/gstdivxenc.c: (gst_divxenc_class_init):
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init):
- * ext/gsm/gstgsmenc.c: (gst_gsmenc_class_init):
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init):
- * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init):
- * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
- * ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init):
- * gst-libs/gst/colorbalance/colorbalance.c:
- (gst_color_balance_class_init):
- * gst-libs/gst/colorbalance/colorbalancechannel.c:
- (gst_color_balance_channel_class_init):
- * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
- * gst-libs/gst/play/play.c: (gst_play_class_init):
- * gst-libs/gst/propertyprobe/propertyprobe.c:
- (gst_property_probe_iface_init):
- * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init):
- * gst-libs/gst/tuner/tunerchannel.c:
- (gst_tuner_channel_class_init):
- * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init):
- * gst/cutter/gstcutter.c: (gst_cutter_class_init):
- * gst/effectv/gstvertigo.c: (gst_vertigotv_class_init):
- * sys/cdrom/gstcdplayer.c: (cdplayer_class_init):
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_class_init):
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_class_init):
- fix signals to use - instead of _
- * ext/libcaca/gstcacasink.h:
- * ext/sdl/sdlvideosink.h:
- fix header rename
-
-2004-03-04 David Schleef <ds@schleef.org>
-
- * testsuite/gst-lint: Add a check for bad signal names.
-
-2004-03-04 <kost@imn.htwk-leipzig.de>
-
- reviewed by David Schleef
-
- * gst/videofilter/gstgamma.c: (gst_gamma_rgb32): Fix typo that
- modified the alpha channel and caused a warning. (bug #136192)
-
-2004-04-03 Christian Schaller <Uraeus@gnome.org>
-
- * gst-plugins.spec.in:
- Change names of plugins to actually be correct. Try to keep things
- alphabetical to avoid getting beat up by Thomas
-
-2004-03-03 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_default_video_sink):
- Using ximagesink as a default if no gconf key found. We should
- probably consider using alsasink instead of osssink for the audio
- part.
-
-2004-03-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- fix --with-plugins, don't think it ever worked before
- * gst-plugins.spec.in:
- even more updates
-
-2004-03-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/sdl/sdlvideosink.h:
- * sys/ximage/ximagesink.h:
- * sys/xvideo/xvideosink.h:
- * sys/xvimage/xvimagesink.h:
- Fix for move of gstvideosink.h -> videosink.h.
-
-2004-03-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/xwindowlistener/Makefile.am:
- this is a plugin library, not a library
-
-2004-03-01 David Schleef <ds@schleef.org>
-
- * AUTHORS: Added some names. Add yourself if you're still
- missing.
-
-2004-03-01 David Schleef <ds@schleef.org>
-
- * MAINTAINERS: Add
-
-2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-plugins.spec.in: clean up spec file
-
-2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/video/Makefile.am:
- * gst-libs/gst/video/gstvideosink.c:
- * gst-libs/gst/video/gstvideosink.h:
- rename gstvideosink.h to videosink.h to match other headers
- * gst/mixmatrix/Makefile.am:
- fix plugin filename
- * gst/tags/Makefile.am: fix plugin filename
-
-2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/tags/Makefile.am: fix plugin filename
-
-2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * examples/gstplay/player.c: (got_time_tick), (main):
- add error handler
- display time_tick more readably
- * gst/mixmatrix/Makefile.am:
- fix plugin file name
-
-2004-02-29 Christophe Fergeau <teuf@gnome.org>
-
- * sys/oss/gstosselement.c: (gst_osselement_probe),
- (device_combination_append), (gst_osselement_class_probe_devices):
- * sys/oss/gstosselement.h:
- Reworked enumeration of oss dsps and mixers so that gst-mixer works
- on my system using alsa oss emulation, fixes bug #135597
-
-2004-02-29 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videodrop/gstvideodrop.c: (gst_videodrop_init),
- (gst_videodrop_chain), (gst_videodrop_change_state):
- * gst/videodrop/gstvideodrop.h:
- Work based on timestamp of input data, not based on the expected
- framerate from the input. The consequence is that this element now
- not only scales framerates, but also functions as a framerate
- corrector or framerate stabilizer/constantizer.
-
-2004-02-27 David Schleef <ds@schleef.org>
-
- patches from jmmv@menta.net (Julio M. Merino Vidal)
-
- * gst/interleave/deinterleave.c: (deinterleave_chain): Fix
- GST_ELEMENT_ERROR call (bug #135634)
- * gst/interleave/interleave.c: (interleave_buffered_loop),
- (interleave_bytestream_loop): Don't use alloca() (bug #135640)
- * sys/cdrom/gstcdplayer_ioctl_bsd.h: Fix ioctls on NetBSD (bug #135645)
- * sys/oss/gstosssink.c: (gst_osssink_get_delay),
- (gst_osssink_chain): Fix ioctls on NetBSD. (bug #135644)
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_sync_next_frame),
- (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
- (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_requeue_frame):
- Fix GST_ELEMENT_ERROR call.
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_palette): Fix
- GST_ELEMENT_ERROR call.
-
-2004-02-27 Benjamin Otte <otte@gnome.org>
-
- * gst-libs/gst/audio/audio.h:
- add macro to make sure header isn't included twice
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
- don't use gst_buffer_free
- * gst/playondemand/filter.func:
- don't use gst_data_free. Free data only once.
-
-2004-02-26 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/tuner/Makefile.am:
- * gst/level/Makefile.am: -marshal.[ch] and -enum.[ch] files
- should not be disted, -marshal.h files should not be installed,
- and -enum.h files _should_ be installed. Fix to make this the
- case.
-
-=== release 0.7.5 ===
-
-2004-02-26 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: release 0.7.5, "Under The Sea"
-
-2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
- (gst_audio_convert_change_state), (gst_audio_convert_get_buffer):
- * gst/videoscale/gstvideoscale.c:
- * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
- assorted debug/warning fixes
-
-2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
- (gst_videoscale_init), (gst_videoscale_chain),
- (gst_videoscale_set_property), (plugin_init):
- * gst/videoscale/gstvideoscale.h:
- * gst/videoscale/videoscale.c: (gst_videoscale_setup),
- (gst_videoscale_scale_rgb), (gst_videoscale_planar411),
- (gst_videoscale_planar400), (gst_videoscale_packed422),
- (gst_videoscale_packed422rev), (gst_videoscale_32bit),
- (gst_videoscale_24bit), (gst_videoscale_16bit),
- (gst_videoscale_bilinear), (gst_videoscale_bicubic),
- (gst_videoscale_scale_plane_slow),
- (gst_videoscale_scale_point_sample),
- (gst_videoscale_scale_nearest),
- (gst_videoscale_scale_nearest_str2),
- (gst_videoscale_scale_nearest_str4),
- (gst_videoscale_scale_nearest_32bit),
- (gst_videoscale_scale_nearest_24bit),
- (gst_videoscale_scale_nearest_16bit):
- add debugging category and use it properly
- fix use of GST_PTR_FORMAT
-
-2004-02-25 Andy Wingo <wingo@pobox.com>
-
- * gst/interleave/interleave.c (interleave_buffered_loop): Always
- push only when channel->buffer is NULL. Prevents segfaults doing
- the state change after a nonlocal exit, like a scheme exception.
-
- * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_getcaps):
- Handle the case where the intersected caps is empty.
-
-2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/law/mulaw-decode.c: (mulawdec_link):
- * gst/law/mulaw.c: (plugin_init):
- fix mulawdec so it actually works again
-
-2004-02-24 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- reviewed by: David Schleef <ds@schleef.org>
-
- * gst/videofilter/gstgamma.c: (gst_gamma_class_init),
- (gst_gamma_init), (gst_gamma_set_property),
- (gst_gamma_get_property), (gst_gamma_calculate_tables),
- (gst_gamma_rgb24), (gst_gamma_rgb32): Adds gamma correction
- for RGB, with separate r g and b correction factors. (#131167)
-
-2004-02-24 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
- only signal tags for bitrate if they're > 0 (#134894)
-
-2004-02-24 David Schleef <ds@schleef.org>
-
- * gst/qtdemux/qtdemux.c: (plugin_init), (gst_qtdemux_loop_header),
- (qtdemux_parse_moov), (qtdemux_parse), (qtdemux_node_dump_foreach),
- (qtdemux_dump_mvhd), (qtdemux_dump_tkhd), (qtdemux_dump_elst),
- (qtdemux_dump_mdhd), (qtdemux_dump_hdlr), (qtdemux_dump_vmhd),
- (qtdemux_dump_dref), (qtdemux_dump_stsd), (qtdemux_dump_stts),
- (qtdemux_dump_stss), (qtdemux_dump_stsc), (qtdemux_dump_stsz),
- (qtdemux_dump_stco), (qtdemux_dump_co64), (qtdemux_dump_dcom),
- (qtdemux_dump_cmvd), (qtdemux_parse_tree), (qtdemux_parse_trak):
- Cleanups. Convert g_prints to GST_LOGs. Add qtdemux debug
- category. Attempt to fix timestamp calculation.
-
-2004-02-24 Johan Dahlin <johan@gnome.org>
-
- * gst-libs/gst/gconf/gconf.c: Add \n to g_print error messages
-
-2004-02-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * gconf/Makefile.am:
- * gconf/gstreamer.schemas:
- * gst-libs/gst/gconf/Makefile.am:
- * gst-libs/gst/gconf/gconf.c:
- version gconf schemas and install locations
-
-2004-02-23 Benjamin Otte <otte@gnome.org>
-
- * ext/xine/xineinput.c: (gst_xine_input_dispose):
- (gst_xine_input_subclass_init):
- call parent dispose.
- change pad template for CD reader correctly
- * ext/xine/Makefile.am:
- * ext/xine/gstxine.h:
- * ext/xine/xine.c: (plugin_init):
- * ext/xine/xineaudiosink.c:
- wrap audio sinks, too
- * gst-libs/gst/resample/private.h:
- * gst-libs/gst/resample/resample.c: (gst_resample_init),
- (gst_resample_reinit), (gst_resample_scale),
- (gst_resample_nearest_s16), (gst_resample_bilinear_s16),
- (gst_resample_sinc_slow_s16), (gst_resample_sinc_s16),
- (gst_resample_sinc_ft_s16), (gst_resample_nearest_float),
- (gst_resample_bilinear_float), (gst_resample_sinc_slow_float),
- (gst_resample_sinc_float), (gst_resample_sinc_ft_float):
- * gst-libs/gst/resample/resample.h:
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
- (gst_audioscale_class_init), (gst_audioscale_link),
- (gst_audioscale_get_buffer), (gst_audioscale_init),
- (gst_audioscale_chain), (gst_audioscale_set_property),
- (gst_audioscale_get_property):
- * gst/audioscale/gstaudioscale.h:
- s/resample_*/gst_resample_*/i to not clobber namespaces
-
-2004-02-23 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
- (gst_riff_create_audio_caps), (gst_riff_create_iavs_caps),
- (gst_riff_create_video_template_caps),
- (gst_riff_create_audio_template_caps),
- (gst_riff_create_iavs_template_caps):
- * gst-libs/gst/riff/riff-media.h:
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
- (gst_asf_demux_audio_caps), (gst_asf_demux_add_audio_stream),
- (gst_asf_demux_video_caps), (gst_asf_demux_add_video_stream):
- * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
- (gst_matroska_demux_video_caps), (gst_matroska_demux_audio_caps),
- (gst_matroska_demux_plugin_init): First batch implementing audio and
- video codec tags in demuxers.
-
-2004-02-22 Benjamin Otte <otte@gnome.org>
-
- * ext/xine/Makefile.am:
- * ext/xine/gstxine.h:
- * ext/xine/xine.c: (plugin_init):
- * ext/xine/xineinput.c:
- add input plugin wrapper. Playback from files, http, mms and cdda
- works.
- * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
- remove leftover G_GNUC_UNUSED
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream),
- (gst_asf_demux_identify_guid):
- improve debugging output
-
-2004-02-22 Benjamin Otte <otte@gnome.org>
-
- reported by: Padraig O'Briain <padraig.obriain@sun.com>
-
- * autogen.sh:
- replace test -e with test -x for mkinstalldirs to be more portable.
- (fixes #134816)
-
-2004-02-22 Benjamin Otte <otte@gnome.org>
-
- reported by: Stefan Kost <kost@imn.htwk-leipzig.de>
-
- * gst/audioconvert/gstaudioconvert.c: (plugin_init):
- set rank to PRIMARY
- * gst/volume/gstvolume.c: (plugin_init):
- set rank to NONE
- fixes #134960
-
-2004-02-22 Julio M. Merino Vidal <jmmv@menta.net>
-
- reviewed by Benjamin Otte <otte@gnome.org>
-
- * ext/flac/gstflacenc.c: (gst_flacenc_chain):
- escape NULL strings in GST_ELEMENT_ERROR properly (fixes #135116)
-
-2004-02-22 Benjamin Otte <otte@gnome.org>
-
- * configure.ac:
- export [_]*{gst,Gst,GST}.* symbols from plugins
-
-2004-02-22 Christophe Fergeau <teuf@gnome.org>
-
- reviewed by: Benjamin Otte <otte@gnome.org>
-
- * ext/lame/gstlame.c: (add_one_tag):
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
- (gst_vorbisenc_metadata_set1):
- * gst/tags/gstid3tag.c:
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
- apply fixes from bugs #135042 (lame can't write tags) and #133817
- (add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)
-
-2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
-
- * configure.ac: Export only gst_plugin_desc from plugins.
- Note that this change only makes any effect with Linux using libtool
- 1.5.2 or higher. Otherwise it is silently ignored, but it would build
- fine. And don't try to have several versions of libtool in different
- directories.
-
-2004-02-20 Andy Wingo <wingo@pobox.com>
-
- * gst/intfloat/, gst/oneton: Removed, replaced by audioconvert and
- interleave respectively.
-
- * gst/interleave/deinterleave.c: New plugin: deinterleave
- (replaces on oneton).
- * gst/interleave/interleave.c: New plugin: interleave.
- * gst/interleave/plugin.h: Support file.
- * gst/interleave/plugin.c: Support file.
-
- * configure.ac: Remove intfloat and oneton, add interleave.
-
- * ext/sndfile/gstsf.c: Handle events better.
-
- * gst/audioconvert/gstaudioconvert.c: Change to support int2float
- and float2int operation. int2float has scheduling problems as
- noted in in2float_chain.
-
-2004-02-20 Benjamin Otte <otte@gnome.org>
-
- * ext/xine/Makefile.am:
- * ext/xine/gstxine.h:
- * ext/xine/xine.c:
- * ext/xine/xineaudiodec.c:
- * ext/xine/xinecaps.c:
- add first version of xine plugin wrapper. Currently only wraps the
- QDM2 win32 DLL, and even that only in proof-of-concept quality.
- * configure.ac:
- * ext/Makefile.am:
- add xine plugin wrapper, disabled by default. Use --enable-xine to
- build. Note that it'll segfault on gst-register if you don't remove
- the goom and tvtime post plugins from xine.
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
- (qtdemux_parse), (qtdemux_parse_trak), (qtdemux_audio_caps):
- add extradata parsing for QDM2.
- change around debugging prints.
-
-2004-02-19 Benjamin Otte <otte@gnome.org>
-
- * ext/lame/gstlame.c: (gst_lame_chain):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
- use gst_tag_list_insert when you want to insert tags
-
-2004-02-18 David Schleef <ds@schleef.org>
-
- * configure.ac: Move massink to gst-rotten
- * ext/Makefile.am:
- * ext/mas/Makefile.am:
- * ext/mas/massink.c:
- * ext/mas/massink.h:
-
-2004-02-18 David Schleef <ds@schleef.org>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init): Disable gdk_pixbuf
- typefinding, since it seems to be worse than nothing.
- * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Add ftyp
- atom to recognize .mp4 and .m4a files as video/quicktime.
-
-2004-02-18 David Schleef <ds@schleef.org>
-
- * gst/sine/demo-dparams.c: (quit_live),
- (dynparm_log_value_changed), (dynparm_value_changed), (main):
- Use double dparams, not float.
- * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
- (gst_sinesrc_init): Change sync default to FALSE, since multiple
- sync'd elements don't really work correctly.
- * gst/volume/gstvolume.c: (volume_class_init), (volume_init),
- (volume_update_volume), (volume_get_property): Change dparam
- to double.
-
-2004-02-18 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c:
- (gst_ximagesink_xwindow_update_geometry),
- (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
- (gst_ximagesink_change_state), (gst_ximagesink_expose),
- (gst_ximagesink_init): Rework the way software video scaling works. So
- now we check on each chain call if the video frames are feeling the
- window. If not we try to renegotiate caps. On failure we memorize that
- and we won't try again for that PLAYING sessions.
- * sys/ximage/ximagesink.h: Adding a boolean to store the caps renego
- failure.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): initialize the
- synchronous flag.
-
-2004-02-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
- break up _link so we can give a better debug message for errors
-
-2004-02-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
- set up debug category
-
-2004-02-18 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_handle_xevents), (gst_ximagesink_expose): Reorganizing
- the way renegotiation work. The event handling function is not taking
- care of external windows and renegotiate method check for pad flags
- NEGOTIATING. Should fix : #133209
-
-2004-02-17 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_expose): Checking if the
- pad is negotiating before trying renegotiation.
-
-2004-02-17 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
- pass on all possible mime types as typefind hints
-
-2004-02-17 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new): Fix a
- possible SHM leak if we crash. All other apps using XShm are doing
- that.
-
-2004-02-17 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_expose): Renegotiate size on expose.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_expose): Update window
- size on expose.
-
-2004-02-16 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * testsuite/alsa/sinesrc.c:
- cosmetic fix to fix compile issue with gcc 2.95.4
-
-2004-02-16 Julien MOUTTE <julien@moutte.net>
-
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
- (gst_alsa_timestamp_to_bytes): Alsa should trigger an error if it
- failed opening the audio device.
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
- (gst_ximagesink_ximage_destroy), (gst_ximagesink_ximage_put),
- (gst_ximagesink_xwindow_new), (gst_ximagesink_xwindow_destroy),
- (gst_ximagesink_xwindow_resize), (gst_ximagesink_xwindow_clear),
- (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
- (gst_ximagesink_xcontext_get), (gst_ximagesink_xcontext_clear),
- (gst_ximagesink_change_state), (gst_ximagesink_chain),
- (gst_ximagesink_set_xwindow_id): Clearing window in READY TO PAUSED.
- Removing some useless g_return_if_fail like wingo suggested.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
- (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xvimage_put),
- (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
- (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_xwindow_clear),
- (gst_xvimagesink_update_colorbalance),
- (gst_xvimagesink_handle_xevents), (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_xcontext_clear),
- (gst_xvimagesink_get_fourcc_from_caps),
- (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
- (gst_xvimagesink_set_xwindow_id),
- (gst_xvimagesink_colorbalance_list_channels),
- (gst_xvimagesink_colorbalance_set_value),
- (gst_xvimagesink_colorbalance_get_value): Clearing window in READY TO
- PAUSED. Removing some useless g_return_if_fail like wingo suggested.
-
-2004-02-16 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
- throw error when not negotiated instead of asserting
-
-2004-02-15 Julien MOUTTE <julien@moutte.net>
-
- * gst/switch/gstswitch.c: (gst_switch_loop): More fixes for
- correct data refcounting.
-
-2004-02-15 Julien MOUTTE <julien@moutte.net>
-
- * gst/switch/gstswitch.c: (gst_switch_change_state),
- (gst_switch_class_init): Cleaning the sinkpads correctly on state
- change, mostly the EOS flag.
-
-2004-02-15 Julien MOUTTE <julien@moutte.net>
-
- * examples/gstplay/player.c: (got_eos), (main): Adding some
- output for debugging.
- * gst-libs/gst/play/play.c: (gst_play_state_change): Stop our
- timeouts if we go to any state different from PLAYING.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek): Fix some
- more EOS bugs in riff lib.
-
-2004-02-14 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/play.c: (gst_play_connect_visualization): Disable
- visualization until i find a way to fix switch correctly.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head): Fix a bug when
- EOS arrives.
- * gst/switch/gstswitch.c: (gst_switch_release_pad),
- (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
- (gst_switch_loop), (gst_switch_dispose), (gst_switch_class_init):
- Reworked switch to get a more correct behaviour with events and refing
- of data stored in sinkpads.
- * gst/switch/gstswitch.h: Adding an eos flag for every sinkpad so that
- we don't pull from a pad in EOS.
-
-2004-02-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- remove v1 tag even if we can't read it (makes sure we don't detect
- it again)
-
-2004-02-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait),
- (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsa.h:
- try xrun recovery when wait failed. Make xrun recovery function
- return TRUE/FALSE to indicate success. (might fix #134354)
-
-2004-02-13 David Schleef <ds@schleef.org>
-
- * gst/sine/demo-dparams.c: (dynparm_log_value_changed),
- (dynparm_value_changed), (main): Convert from float to double.
- * gst/sine/gstsinesrc.c: (gst_sinesrc_init): same.
-
-2004-02-13 David Schleef <ds@schleef.org>
-
- * gst/silence/gstsilence.c: (gst_silence_class_init),
- (gst_silence_set_clock), (gst_silence_get),
- (gst_silence_set_property), (gst_silence_get_property):
- * gst/silence/gstsilence.h: Add sync property.
- * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
- (gst_sinesrc_init), (gst_sinesrc_set_clock), (gst_sinesrc_get),
- (gst_sinesrc_set_property), (gst_sinesrc_get_property):
- * gst/sine/gstsinesrc.h: Add sync property.
-
-2004-02-13 David Schleef <ds@schleef.org>
-
- * gst/intfloat/gstint2float.c: (conv_f32_s16),
- (gst_int2float_chain_gint16): Change stdint usage to glib types.
-
-2004-02-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/Makefile.am:
- * gst-libs/ext/Makefile.am:
- move ffmpeg plugin to gst-ffmpeg module
-
-2004-02-13 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac: use GST_ARCH to detect architecture
-
-2004-02-12 Julien MOUTTE <julien@moutte.net>
-
- * gst/vbidec/vbiscreen.c: Fixing thomasvs fixes. Missing header.
-
-2004-02-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
- classify LADSPA plugins based on number of src/sink pads
- (#133663, Stefan Kost)
- * gst/sine/gstsinesrc.c: (gst_sinesrc_init):
- fix dparams registration
- (#133528, Stefan Kost)
- * gst/vbidec/vbiscreen.c: (vbiscreen_set_current_cell):
- fix use of isprint and use g_ascii_isprint instead
- (#133316, Stefan Kost)
-
-2004-02-11 David Schleef <ds@schleef.org>
-
- Convert a few inner loops to use liboil. This is currently
- optional, and is only enabled if liboil is present (duh!).
- * configure.ac: Check for liboil-0.1
- * gst/intfloat/Makefile.am:
- * gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
- (gst_int2float_chain_gint16):
- * gst/videofilter/Makefile.am:
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
- (tablelookup_u8), (gst_videobalance_planar411):
- * gst/videotestsrc/Makefile.am:
- * gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
- * gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
- (paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
- (paint_hline_RGB565), (paint_hline_xRGB1555):
-
-2004-02-11 David Schleef <ds@schleef.org>
-
- * ext/lcs/gstcolorspace.c: (colorspace_find_lcs_format),
- (gst_colorspace_caps_get_fourcc), (colorspace_setup_converter),
- (gst_colorspace_getcaps), (gst_colorspace_link),
- (gst_colorspace_base_init), (gst_colorspace_init),
- (gst_colorspace_chain), (gst_colorspace_change_state),
- (plugin_init): Merge Ronald's patch (bug #117897) and update
- for new caps and negotiation. Seems to work, although it
- shows off bugs in lcs.
-
-2004-02-11 David Schleef <ds@schleef.org>
-
- * ext/alsa/Makefile.am: Fix linking against libgstinterfaces.
- (bug #133886) Noticed by bugs@leroutier.net (Stephane LOEUILLET)
-
-2004-02-11 David Schleef <ds@schleef.org>
-
- * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_class_init),
- (gst_rfbsrc_change_state), (gst_rfbsrc_init),
- (gst_rfbsrc_set_property), (gst_rfbsrc_get_property):
- Add server and port properties
-
-2004-02-11 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * m4/a52.m4:
- * m4/aalib.m4:
- * m4/as-ffmpeg.m4:
- * m4/as-liblame.m4:
- * m4/as-slurp-ffmpeg.m4:
- * m4/check-libheader.m4:
- * m4/esd.m4:
- * m4/freetype2.m4:
- * m4/gconf-2.m4:
- * m4/glib.m4:
- * m4/gst-alsa.m4:
- * m4/gst-artsc.m4:
- * m4/gst-ivorbis.m4:
- * m4/gst-matroska.m4:
- * m4/gst-sdl.m4:
- * m4/gst-shout2.m4:
- * m4/gst-sid.m4:
- * m4/gtk.m4:
- * m4/libdv.m4:
- * m4/libfame.m4:
- * m4/libmikmod.m4:
- * m4/ogg.m4:
- * m4/vorbis.m4:
- fix underquotedness of macros (#133800)
- * m4/as-avifile.m4:
- * m4/xmms.m4:
- removed because no longer used
-
-2004-02-11 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- require gettext 0.11.5 so ulonglong.m4 gets checked out and copied
- by autopoint (fixes #132996)
-
-2004-02-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_base_init):
- * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_base_init):
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_base_init):
- * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_base_init):
- fix memleaks
-
-2004-02-11 David Schleef <ds@schleef.org>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
- (gst_gdk_pixbuf_chain): Fix logic bug causing spurious errors.
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_base_init),
- (gst_jpegdec_init), (gst_jpegdec_chain): Fix negotiation.
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_base_init),
- (gst_jpegenc_class_init), (gst_jpegenc_init),
- (gst_jpegenc_getcaps), (gst_jpegenc_link), (gst_jpegenc_resync),
- (gst_jpegenc_chain), (gst_jpegenc_set_property),
- (gst_jpegenc_get_property): Fix negotiation. Add some properties.
- * ext/jpeg/gstjpegenc.h: Fix negotiation.
-
-2004-02-10 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
- (gst_mikmod_srcfixate), (gst_mikmod_srclink), (gst_mikmod_loop):
- * ext/mikmod/gstmikmod.h:
- fix caps negotiation in mikmod
- * ext/ogg/gstoggdemux.c: (gst_ogg_print):
- output debug information
-
-2004-02-08 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/navigation/Makefile.am:
- * gst-libs/gst/xoverlay/Makefile.am:
- remove unused GST_OPT_CFLAGS from Makefiles
- include X_CFLAGS and X_LIBS in xoverlay. (#131948)
-
-2004-02-07 David Schleef <ds@schleef.org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_handle_event): Don't
- push events to pads that haven't been created (#133508)
-
-2004-02-07 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
- (gst_dvdec_sink_convert), (gst_dvdec_handle_sink_event),
- (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
- (gst_dvdec_loop), (gst_dvdec_change_state):
- Second attempt at committing a working dvdec element.
-
-2004-02-06 David Schleef <ds@schleef.org>
-
- Build fixes for OS X: (see #129600)
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_strh),
- (gst_riff_read_strf_vids), (gst_riff_read_strf_auds),
- (gst_riff_read_strf_iavs):
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
- (gst_avi_demux_stream_odml):
- * gst/playondemand/Makefile.am:
- * gst/rtp/rtp-packet.c:
-
-2004-02-05 David Schleef <ds@schleef.org>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_loop): Revert
- last change, because it Just Doesn't Compile.
-
-2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
- skip undecodable id3v2 tag instead of keeping it
-
-2004-02-05 David Schleef <ds@schleef.org>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
- Unref leaked buffer. (Noticed by Ronald)
-
-2004-02-05 David I. Lehn <dlehn@users.sourceforge.net>
-
- * pkgconfig/gstreamer-libs-uninstalled.pc.in:
- Sync requires with other checks. >= vs =.
-
-2004-02-06 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
- (gst_dvdec_video_link), (gst_dvdec_loop):
- * ext/dv/gstdvdec.h:
- rework the caps negotiation so that dvdec works again instead
- of just segfaulting.
-
-=== release 0.7.4 ===
-
-2004-02-06 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * NEWS: GStreamer Plugins 0.7.4 "For Great Justice" released
- * configure.ac: changed for release
-
-2004-02-05 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in:
- * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
- * pkgconfig/gstreamer-libs-uninstalled.pc.in:
- * pkgconfig/gstreamer-play-uninstalled.pc.in:
- reworked patch by David Lehn to fix libdir and includedir for
- uninstalled libraries
- removed play and gconf from gstreamer-libs since they have their
- own pkgconfig files
-
-2004-02-04 David Schleef <ds@schleef.org>
-
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt): Fix a caps
- memleak.
-
-2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
- use correct GST_TAG_ENCODER tag
-
-2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state):
- be sure to stop the clock when going to paused
- * sys/oss/gstosssink.c: (gst_osssink_change_state):
- reset number of transmitted when going to ready.
- fixes #132935
-
-2004-02-05 Charles Schmidt <cschmidt2@emich.edu>
-
- reviewed by Benjamin Otte
-
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- extract track count (fixes #133410)
-
-2004-02-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
- that should be !=, not == (fixes #132519)
-
-2004-02-04 David Schleef <ds@schleef.org>
-
- Make sure set_explicit_caps() is called before adding pad.
- * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
- * gst/id3/gstid3types.c: (gst_id3types_loop):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-
-2004-02-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- bump nano to 2, first prerelease
- put back AM_PROG_LIBTOOL
-
-2004-02-04 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * testsuite/alsa/Makefile.am:
- these are user test apps, not automatic testsuite tests
-
-2004-02-04 David Schleef <ds@schleef.org>
-
- Convert GST_DEBUG_CAPS() to GST_DEBUG():
- * gst/mpeg1videoparse/gstmp1videoparse.c:
- (mp1videoparse_parse_seq):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
- * sys/xvideo/gstxwindow.c: (_gst_xwindow_new):
- * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
- (gst_xvideosink_getcaps):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
- * testsuite/gst-lint: more tests
-
-2004-02-04 David Schleef <ds@schleef.org>
-
- Replace use of GST_PAD_FORMATS_FUNCTION() and similar macros
- with the code that they would expand to.
- * ext/flac/gstflacdec.c: (gst_flacdec_get_src_formats),
- (gst_flacdec_get_src_query_types),
- (gst_flacdec_get_src_event_masks):
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_formats),
- (gst_gnomevfssrc_get_query_types),
- (gst_gnomevfssrc_get_event_mask):
-
-2004-02-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
- (gst_sinesrc_dispose):
- fix memleak by properly disposing sinesrc
-
-2004-02-04 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_expose):
- * gst-libs/gst/xoverlay/xoverlay.h: Adding the _expose method to tell
- an overlay to redraw the image because it has been exposed.
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy),
- (gst_ximagesink_ximage_put), (gst_ximagesink_expose),
- (gst_ximagesink_xoverlay_init), (gst_ximagesink_init):
- * sys/ximage/ximagesink.h: Implement expose method from XOverlay
- interface
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_destroy),
- (gst_xvimagesink_xvimage_put), (gst_xvimagesink_expose),
- (gst_xvimagesink_xoverlay_init), (gst_xvimagesink_init):
- * sys/xvimage/xvimagesink.h: Implement expose method from XOverlay
- interface
-
-2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
- more memleak fixage
-
-2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
- * gst/typefind/gsttypefindfunctions.c:
- fix memleaks shown by gst-typefind
-
-2004-02-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * common/glib-gen.mak:
- add hack rule to touch .Plo files
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/tuner/Makefile.am:
- remove glib_root variable
-
-2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream):
- set explicit caps before adding the element, so the autopluggers can
- plug correctly.
- * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
- (mpeg2_sys_type_find), (mpeg1_sys_type_find),
- (mpeg_video_type_find), (mpeg_video_stream_type_find),
- (dv_type_find):
- fix memleaks in typefind functions. gst_type_find_suggest takes a const
- argument.
-
-2004-02-03 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/colorbalance/colorbalance-marshal.list:
- * gst-libs/gst/colorbalance/colorbalance.c:
- * gst-libs/gst/colorbalance/colorbalance.h:
- * gst-libs/gst/colorbalance/colorbalancemarshal.list:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/mixer/mixer-marshal.list:
- * gst-libs/gst/mixer/mixer.c:
- * gst-libs/gst/mixer/mixer.h:
- * gst-libs/gst/mixer/mixermarshal.list:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/play/play.h:
- * gst-libs/gst/tuner/Makefile.am:
- * gst-libs/gst/tuner/tuner-marshal.list:
- * gst-libs/gst/tuner/tuner.c:
- * gst-libs/gst/tuner/tuner.h:
- * gst-libs/gst/tuner/tunermarshal.list:
- use new glib-gen.mak snippet to clean up Makefile.am
- fix various bugs in Makefile.am's
-
-2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
- handle chain parsing correctly in the multichain case
- * ext/theora/theoradec.c: (gst_theora_dec_init), (_theora_ilog),
- (theora_dec_from_granulepos), (theora_dec_to_granulepos),
- (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
- (theora_dec_chain):
- handle events and queries correctly
-
-2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
-
- * .cvsignore:
- Ignore generated file _stdint.h.
-
-2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
-
- * gst-libs/gst/colorbalance/Makefile.am:
- * gst-libs/gst/colorbalance/colorbalance.h:
- * gst-libs/gst/mixer/Makefile.am:
- * gst-libs/gst/mixer/mixer.h:
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/play/play.h:
- * gst-libs/gst/tuner/Makefile.am:
- * gst-libs/gst/tuner/tuner.h:
- Generate enum type code with glib-mkenums.
- * gst-libs/gst/colorbalance/.cvsignore:
- * gst-libs/gst/mixer/.cvsignore:
- * gst-libs/gst/play/.cvsignore:
- * gst-libs/gst/tuner/.cvsignore:
- Ignore generated files.
-
-2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
-
- * gst-libs/gst/audio/.cvsignore:
- Ignore generated file.
- * gst-libs/gst/audio/Makefile.am:
- Do not install example filter.
-
-2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
-
- * examples/switch/.cvsignore:
- Ignore generated file.
-
-2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * common/m4/ax_create_stdint_h.m4:
- * configure.ac:
- add AX_CREATE_STDINT_H to get correct type definitions for a52dec in
- _stdint.h.
- * Makefile.am:
- remove generated _stdint.h in DISTCLEANFILES
- * ext/a52dec/gsta52dec.c:
- include _stdint.h for a52dec. (should fix #133064)
-
-2004-02-02 Jeremy Simon <jesimon@libertysurf.fr>
-
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add),
- (gst_tag_to_vorbis_comments):
- Add replaygain support to vorbistag
-
-2004-02-02 Jeremy Simon <jesimon@libertysurf.fr>
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
- (gst_ffmpeg_caps_to_extradata):
- Fix SVQ3 caps flag properties
- Use glib macro for bytes swap
-
-2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
- * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
- * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
- * ext/sndfile/gstsf.c: (plugin_init):
- * gst/avi/gstavi.c: (plugin_init):
- * sys/dxr3/dxr3init.c: (plugin_init):
- * sys/oss/gstossaudio.c: (plugin_init):
- * sys/v4l/gstv4l.c: (plugin_init):
- * sys/v4l2/gstv4l2.c: (plugin_init):
- remove textdomain calls
- * po/nl.po:
- update Dutch translation
-
-2004-02-02 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
- (gst_play_set_audio_sink): Moving volume in the audio thread for
- instantaneous volume change. Maybe i will add another volume in front
- of visualization later, not sure yet though.
-
-2004-02-02 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
- (gst_ximagesink_handle_xevents): Better X events handling, only take
- the latest events for configure and motion.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents): same.
-
-2004-02-02 Jon Trowbridge <trow@gnu.org>
-
- reviewed by: David Schleef <ds@schleef.org>
-
- Fix memory leaks:
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_register):
-
-2004-02-02 David Schleef <ds@schleef.org>
-
- code cleanup. Change bzero() to memset(). Remove duplicate ; at ends
- of lines.
- * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_event):
- * ext/flac/gstflactag.c: (gst_flac_tag_chain):
- * ext/xvid/gstxviddec.c: (gst_xviddec_src_link):
- * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
- * gst/effectv/gstedge.c: (gst_edgetv_sinkconnect):
- * gst/effectv/gstvertigo.c: (gst_vertigotv_sinkconnect):
- * gst/intfloat/float22int.c: (gst_float2_2_int_getcaps),
- (gst_float2_2_int_link):
- * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
- * gst/rtjpeg/RTjpeg.c: (RTjpeg_init_mcompress):
- * gst/tcp/gsttcpsink.c: (gst_tcpsink_init_send):
- * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_init_receive):
- * gst/udp/gstudpsink.c: (gst_udpsink_init_send):
- * gst/udp/gstudpsrc.c: (gst_udpsrc_init_receive):
- * sys/v4l/gstv4lelement.c: (gst_v4lelement_init):
- * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_set_capture):
- * testsuite/gst-lint: Add tests for bzero and ;;
-
-2004-02-02 David Schleef <ds@schleef.org>
-
- * gst/debug/efence.c: Add fallback if MAP_ANONYMOUS isn't defined.
-
-2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/aalib/gstaasink.c: (gst_aasink_open):
- * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
- * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
- (gst_afsink_close_file):
- * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
- (gst_afsrc_close_file):
- * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
- * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
- * ext/dv/gstdvdec.c: (gst_dvdec_loop):
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
- * ext/esd/esdmon.c: (gst_esdmon_get):
- * ext/esd/esdsink.c: (gst_esdsink_chain), (gst_esdsink_open_audio):
- * ext/faac/gstfaac.c: (gst_faac_chain):
- * ext/faad/gstfaad.c: (gst_faad_chain):
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
- * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
- * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
- * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
- (gst_flacdec_loop):
- * ext/flac/gstflacenc.c: (gst_flacenc_chain):
- * ext/flac/gstflactag.c: (gst_flac_tag_chain):
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
- (gst_gnomevfssink_close_file):
- * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
- (gst_gnomevfssrc_open_file):
- * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
- * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
- * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
- (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
- * ext/mad/gstmad.c: (gst_mad_chain):
- * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/mplex/gstmplex.cc:
- * ext/mplex/gstmplexibitstream.cc:
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
- (gst_ogg_demux_push):
- * ext/raw1394/gstdv1394src.c:
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
- (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
- * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
- (gst_sf_loop):
- * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
- * ext/swfdec/gstswfdec.c: (gst_swfdec_loop):
- * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
- * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
- * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
- * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
- * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
- (gst_riff_read_element_data), (gst_riff_read_seek),
- (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
- * gst/adder/gstadder.c: (gst_adder_loop):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
- (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
- (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
- * gst/avi/gstavimux.c: (gst_avimux_stop_file):
- * gst/flx/gstflxdec.c: (gst_flxdec_loop):
- * gst/goom/gstgoom.c: (gst_goom_chain):
- * gst/id3/gstid3types.c: (gst_id3types_loop):
- * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
- * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
- * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
- * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
- (gst_ebml_read_element_length), (gst_ebml_read_element_data),
- (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
- (gst_ebml_read_float), (gst_ebml_read_header):
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
- (gst_matroska_demux_parse_blockgroup):
- * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
- * gst/oneton/gstoneton.c: (gst_oneton_chain):
- * gst/silence/gstsilence.c: (gst_silence_get):
- * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
- * gst/smpte/gstsmpte.c: (gst_smpte_loop):
- * gst/speed/gstspeed.c: (speed_loop):
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
- * gst/volenv/gstvolenv.c: (gst_volenv_chain):
- * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
- (gst_wavparse_loop):
- * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
- (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
- (dxr3audiosink_close):
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
- (dxr3videosink_close), (dxr3videosink_write_data):
- * sys/oss/gstosselement.c: (gst_osselement_open_audio):
- * sys/oss/gstosssink.c: (gst_osssink_chain):
- * sys/oss/gstosssrc.c: (gst_osssrc_get):
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
- (gst_v4l_set_window), (gst_v4l_enable_overlay):
- * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
- (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
- (gst_v4l_get_frequency), (gst_v4l_set_frequency),
- (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
- (gst_v4l_set_audio):
- * sys/v4l/v4l_calls.h:
- * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
- (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
- (gst_v4lmjpegsink_playback_init),
- (gst_v4lmjpegsink_playback_start):
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
- (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
- (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
- * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
- (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
- * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
- (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
- (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
- (gst_v4l2_get_output), (gst_v4l2_set_output),
- (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
- (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
- (gst_v4l2_set_attribute):
- * sys/v4l2/v4l2_calls.h:
- * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
- (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
- (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
- (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
- (gst_v4l2src_capture_stop):
- * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
- (gst_ximagesink_chain):
- * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
- (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
- (gst_xvideosink_xwindow_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_chain):
-
-2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/volume/gstvolume.c: (gst_volume_set_volume),
- (gst_volume_get_volume), (volume_class_init), (volume_init),
- (volume_chain_int16), (volume_update_volume):
- * gst/volume/gstvolume.h:
- make code more readable by removing magic numbers
- make mixer interface export 0-100 range
- make it internally map to 0.0-1.0 range so users don't distort
- output by putting the sliders at full volume
-
-2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.c: (gst_play_tick_callback),
- (gst_play_state_change), (gst_play_seek_to_time):
- block the tick callback for 0.5 secs after doing a seek
-
-2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.c: (gst_play_new):
- check for GError
-
-2004-02-01 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/play.c: (gst_play_seek_to_time),
- (gst_play_new): Accepting NULL GError, blocking time tick while seeking.
- * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
- (gst_ximagesink_chain), (gst_ximagesink_init): s/sinkconnect/sink_link
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
- (gst_xvimagesink_chain), (gst_xvimagesink_init): s/sinkconnect/sink_link
-
-2004-02-01 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * configure.ac:
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
- check for a function added in vorbis 1.1
-
-2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
- (gst_alsa_drain_audio), (gst_alsa_stop_audio):
- really start/stop clock only on PLAYING <=> PAUSED
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- remove \n from debugging lines
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
- make it work when seeking does not
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
- reset on DISCONT
-
-2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start):
- start clock on PAUSED=>PLAYING, not later
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- extract correct time for different discont formats
- (gst_alsa_sink_get_time):
- don't segfault when no format is negotiated yet, just return 0
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
- (gst_ogg_demux_handle_event), (gst_ogg_demux_push),
- (gst_ogg_pad_push):
- handle flush and discont events correctly
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
- handle discont events correctly
-
-2004-01-31 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.c: (gst_play_error_quark),
- (gst_play_error_create), (gst_play_error_plugin),
- (gst_play_pipeline_setup), (gst_play_init), (gst_play_new):
- * gst-libs/gst/play/play.h:
- add error handling during creation
- * examples/gstplay/player.c: (main):
- use new gst_play_new
-
-
-2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/theora/theoradec.c: (theora_dec_chain):
- make comments work
- * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
- (vorbis_dec_src_event), (vorbis_dec_chain):
- add encoder tag, fix tag reading to be more error tolerant, change
- BITRATE to NOMINAL_BITRATE, add debugging, don't unref events after
- gst_pad_event_default.
- * gst/tags/gstvorbistag.c:
- (gst_tag_list_from_vorbiscomment_buffer):
- undefine function specific define at end of function
-
-2004-01-31 Jeremy Simon <jesimon@libertysurf.fr>
-
- * ext/flac/gstflac.c: (plugin_init):
- * ext/flac/gstflacdec.c: (gst_flacdec_class_init):
- * ext/flac/gstflacdec.h:
- * ext/flac/gstflacenc.h:
- Fix typos
-
-2004-01-30 David I. Lehn <dlehn@users.sourceforge.net>
-
- * examples/gstplay/player.c: s/gstplay.h/play.h/
-
-2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/Makefile.am:
- * gst-libs/gst/play/gstplay.c:
- * gst-libs/gst/play/gstplay.h:
- * gst-libs/gst/play/play.c:
- more surgery, operation complete
-
-2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/play/play.old.c:
- * gst-libs/gst/play/play.old.h:
- after CVS surgery by moving, remove
- * gst-libs/gst/play/playpipelines.c:
- remove
-
- * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
- add negotiation error
-
-2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
- (gst_ogg_demux_push):
- add some seeking debug info
- send a flush when seeking
-
-2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- use AC_C_INLINE
- * configure.ac:
- * ext/Makefile.am:
- * ext/theora/Makefile.am:
- * ext/theora/theoradec.c:
- add theora video decoder. Does just do simple decoding for now and
- has been tested against Theora cvs only. It only works when theora
- is compiled with --enable-static.
- * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
- always reset packetno on DISCONT
-
-2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
- Fix audio.
-
-2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegaudioparse/gstmpegaudioparse.c:
- (mp3_type_frame_length_from_header):
- Fix header parsing - stolen from ffmpeg (thank you! :) ).
-
-2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/esd/esdsink.c: (gst_esdsink_init):
- Since we have static pad template caps, we don't need to negotiate;
- either the core errors out or we know the format.
-
-2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
- (gst_riff_read_seek):
- * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
- (gst_ebml_read_seek):
- Fix event handling.
-
-2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
- removee video/x-theora from vp3 decoder, it doesn't handle raw
- theora streams
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init):
- fix bug with finalizing element that never went to PAUSED
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
- length and position queries were swapped
- * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init),
- (vorbis_dec_from_granulepos), (vorbis_dec_src_query),
- (vorbis_dec_src_event):
- implement querying time and bytes
-
-2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * just about every source file:
- gst_element_error -> GST_ELEMENT_ERROR
-
-2004-01-29 Julien MOUTTE <julien@moutte.net>
-
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get): Fixing seeking
- emiting FLUSH and even before DISCONT.
- * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): Fix seeking to
- get the best instant seeking as possible yay!
-
-2004-01-29 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpeg1videoparse/gstmp1videoparse.c:
- (gst_mp1videoparse_real_chain):
- Committed wrong version last week... Grr... Didn't notice until now.
-
-2004-01-29 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new): Emit the
- have_xwindow_id signal in xwindow_create.
-
-2004-01-29 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ogg/gstoggdemux.c:
- lots of changes - mainly support for chained bitstreams, seeking,
- querying and bugfixes of course
- * ext/vorbis/Makefile.am:
- * ext/vorbis/vorbisdec.c:
- * ext/vorbis/vorbisdec.h:
- add vorbisdec raw vorbis decoder
- * ext/vorbis/vorbis.c: (plugin_init):
- register vorbisdec as PRIMARY, vorbisfile as SECONDARY
- * gst/intfloat/Makefile.am:
- * gst/intfloat/float22int.c:
- * gst/intfloat/float22int.h:
- * gst/intfloat/gstintfloatconvert.c: (plugin_init):
- add float2intnew plugin. It converts multichannel interleaved float to
- multichannel interleaved int. The name should probably be changed.
- * gst/typefind/gsttypefindfunctions.c: (theora_type_find),
- (plugin_init):
- add typefinding for raw theora video so oggdemux can detect it.
-
-2004-01-28 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): seek on video
- sink element first.
- * gst/videoscale/gstvideoscale.c:
- (gst_videoscale_handle_src_event): Fixing src event handler.
-
-2004-01-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
- (gst_v4lsrc_open), (gst_v4lsrc_close),
- (gst_v4lsrc_palette_to_caps), (gst_v4lsrc_srcconnect),
- (gst_v4lsrc_getcaps), (gst_v4lsrc_set_clock):
- * sys/v4l/gstv4lsrc.h:
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_start),
- (gst_v4lsrc_grab_frame), (gst_v4lsrc_capture_stop):
- Implement resizing... Hack. But that's why v4l is b0rked...
-
-2004-01-28 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
- (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy),
- (gst_ximagesink_ximage_put), (gst_ximagesink_xwindow_new),
- (gst_ximagesink_xwindow_destroy):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
- (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
- (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_get_xv_support),
- (gst_xvimagesink_xcontext_get): Removing some useless debugs messages,
- correctly cleaning the image created to check xshm calls on succes,
- added a lot of XSync calls in X11 functions, and fixed a segfault when
- no image format was defined before negotiation happened.
-
-2004-01-28 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_query_func):
- use gst_element_get_time to get correct time
-
-2004-01-28 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
- (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_destroy),
- (gst_ximagesink_xcontext_get), (gst_ximagesink_class_init):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xerror),
- (gst_xvimagesink_check_xshm_calls),
- (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xcontext_get): Our
- X plugins are now able to detect that XShm calls will fail even if the
- server claims that it has XShm support (remote displays most of the
- time). We then log the error as a GST_DEBUG and set use_shm to FALSE
- so that we use non XShm functions. This feature is almost useless for
- xvimagesink as Xv is not supported on remote displays anyway, but
- it might happen than even on the local display XShm calls fail.
-
-2004-01-27 David Schleef <ds@schleef.org>
-
- * ext/esd/esdsink.c: (gst_esdsink_class_init), (gst_esdsink_init),
- (gst_esdsink_link), (gst_esdsink_get_time), (gst_esdsink_chain),
- (gst_esdsink_change_state): Fix sync issues in esdsink. Also
- changed esdsink to only use 44100,16,2, since esd sucks at rate
- conversion and esdsink has had difficulty negotiating.
-
-2004-01-27 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback),
- (gst_play_seek_to_time): Fixing the way to get current position.
-
-2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/oss/gstosssink.c: (gst_osssink_sink_query):
- use gst_element_get_time to get correct time
-
-2004-01-27 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_set_location): The easiest
- fix ever... Inverting 2 lines of code make spider autoplug correctly
- tagged mp3 !
-
-2004-01-27 David Schleef <ds@schleef.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- Use gst_pad_try_set_caps_nonfixed().
-
-2004-01-27 David Schleef <ds@schleef.org>
-
- * gst/ac3parse/gstac3parse.c: update to checklist 5
- * gst/adder/gstadder.c: rewrite negotiation. update to checklist 5
- * gst/audioconvert/gstaudioconvert.c: update to checklist 5
- * gst/audioscale/gstaudioscale.c: same
- * gst/auparse/gstauparse.c: same
- * gst/avi/gstavidemux.c: same
-
-2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
- stop processing after EOS
-
-2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/asfdemux/asfheaders.h:
- * gst/asfdemux/gstasfdemux.c:
- * gst/asfdemux/gstasfmux.c: (gst_asfmux_put_guid),
- (gst_asfmux_put_string), (gst_asfmux_put_wav_header),
- (gst_asfmux_put_vid_header), (gst_asfmux_put_bmp_header):
- lot's of fixes to make data extraction simpler and get the code
- architecture and compiler independant. Add debugging category
- * gst/goom/gstgoom.c: (gst_goom_change_state):
- reset channel count on PAUSED=>READY, not READY=>PAUSED
-
-2004-01-26 Colin Walters <walters@verbum.org>
-
- * ext/gnomevfs/gstgnomevfssrc.c (gst_gnomevfssrc_get): Remove ugly
- code to pull a bigger buffer in iradio mode. This as a side effect
- makes typefinding work.
-
-2004-01-26 Jeremy Simon <jesimon@libertysurf.fr>
-
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
- Fix SVQ3 decoding on PPC
-
-2004-01-26 Julien MOUTTE <julien@moutte.net>
-
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Dunno how
- that one managed to stay there... Fixed.
-
-2004-01-26 Jeremy Simon <jesimon@libertysurf.fr>
-
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
- (gst_ffmpeg_caps_to_extradata), (gst_ffmpeg_caps_to_pixfmt):
- * gst/qtdemux/qtdemux.c: (plugin_init), (qtdemux_parse_trak),
- (qtdemux_video_caps):
- * gst/qtdemux/qtdemux.h:
- Add SVQ3 specific flags to qtdemux and ffmpeg
-
-2004-01-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/audio/audio.h:
- remove buffer-frames from audio caps
- * gst/audioconvert/gstaudioconvert.c:
- fix plugin to really work.
-
-2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/mixer/mixer.c:
- * gst-libs/gst/propertyprobe/propertyprobe.c:
- * gst-libs/gst/tuner/tuner.c: (gst_tuner_find_norm_by_name),
- (gst_tuner_find_channel_by_name):
- * gst-libs/gst/tuner/tuner.h:
- Add gtk-doc style comments. Also fix a function name.
-
-2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c: (gst_divxdec_init),
- (gst_divxdec_negotiate):
- Fix for new capsnego - also fixes gst-player with divxdec.
-
-2004-01-25 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
- (gst_play_identity_handoff), (gst_play_set_location),
- (gst_play_set_visualization), (gst_play_connect_visualization): Another
- try in visualization implementation. Still have an issue with switch
- blocking when pulling from video_queue and only audio comes out of
- spider.
- * gst/switch/gstswitch.c: (gst_switch_release_pad),
- (gst_switch_poll_sinkpads), (gst_switch_class_init): Implementing pad
- release method. And check if the pad is usable before pulling.
-
-2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose),
- (gst_videobalance_init),
- (gst_videobalance_colorbalance_list_channels),
- (gst_videobalance_colorbalance_set_value),
- (gst_videobalance_colorbalance_get_value),
- (gst_videobalance_update_properties),
- (gst_videobalance_update_tables_planar411),
- (gst_videobalance_planar411):
- * gst/videofilter/gstvideobalance.h:
- Implement lookup-tables. +/- 10x faster.
-
-2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
- (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
- The index reading was broken. The rest worked fine, but the whole
- goal of my rewrite was to make avidemux readable, and this was
- not at all readable. Please use typed variables.
-
-2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
- Additional pad usability check.
- * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
- (mp1videoparse_find_next_gop), (gst_mp1videoparse_time_code),
- (gst_mp1videoparse_real_chain):
- Fix MPEG video stream parsing. The original plugin had several
- issues, including not timestamping streams where the source was
- not timestamped (this happens with PTS values in mpeg system
- streams, but MPEG video is also a valid stream on its own so
- that needs timestamps too). We use the display time code for that
- for now. Also, if one incoming buffer contains multiple valid
- frames, we push them all on correctly now, including proper EOS
- handling. Lastly, several potential segfaults were fixed, and we
- properly sync on new sequence/gop headers to include them in next,
- not previous frames (since they're header for the next frame, not
- the previous). Also see #119206.
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain),
- (bpf_from_header):
- Move caps setting so we only do it after finding several valid
- MPEG-1 fraes sequentially, not right after the first one (which
- might be coincidental).
- * gst/typefind/gsttypefindfunctions.c: (mpeg1_sys_type_find),
- (mpeg_video_type_find), (mpeg_video_stream_type_find),
- (plugin_init):
- Add unsynced MPEG video stream typefinding, and change some
- probability values so we detect streams rightly. The idea is as
- follows: I can have an unsynced system stream which contains
- video. In the current code, I would randomly get a type for either
- system or video stream type found, because the probabilities are
- being calculated rather randomly. I now use fixed values, so we
- always prefer system stream if that was found (and that is how it
- should be). If no system stream was found, we can still identity the stream as video-only.
-
-2004-01-23 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
- (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
- don't write to buffer. Extract data without the need of
- __attribute__ ((packed))
-
-2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header),
- (mpeg1_sys_type_find):
- Fix MPEG-1 stream typefinding.
-
-2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
- Fix typefinding for MPEG-1 system streams, similar to MPEG-2.
-
-2004-01-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/esd/esdsink.c: (gst_esdsink_open_audio):
- * ext/esd/gstesd.c: (plugin_init):
- private debugging, better error reporting
-
-2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
- (gst_riff_read_init), (gst_riff_read_change_state):
- * gst-libs/gst/riff/riff-read.h:
- Remove stuff fromold metadata system.
-
-2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ogg/gstoggdemux.c:
- Fix wrong file comment.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
- Add metadata reading properly.
-
-2004-01-23 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/Makefile.am:
- Fix nas DIST_SUBDIRS
- Uraeus:
- Fix bug where make distcheck doesn't get run on adding stuff to
- the build.
-
-2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c: (gst_divxdec_init), (gst_divxdec_setup):
- * ext/divx/gstdivxdec.h:
- Fix divx3 ("msmpeg4") playback using divxdec.
-
-2004-01-23 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/typefind/gsttypefindfunctions.c:
- (mp3_type_frame_length_from_header): fix bug in length computation
- (mp3_type_find): improve debugging output
-
-2004-01-23 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
- (gst_play_set_location), (gst_play_seek_to_time),
- (gst_play_set_audio_sink), (gst_play_set_visualization),
- (gst_play_connect_visualization), (gst_play_get_sink_element): Reworked
- the pipeline from scratch. Visualization is back and switch went out as
- i realized it was not possible to use the way i wanted.
- * sys/ximage/ximagesink.c: (gst_ximagesink_imagepool_clear),
- (gst_ximagesink_change_state), (gst_ximagesink_dispose): Move xcontext
- clearing in state change from READY to NULL. So that one can clean the
- X ressources keeping the element.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_imagepool_clear), (gst_xvimagesink_change_state),
- (gst_xvimagesink_colorbalance_set_value),
- (gst_xvimagesink_colorbalance_get_value),
- (gst_xvimagesink_set_property), (gst_xvimagesink_dispose),
- (gst_xvimagesink_init): Same xcontext cleaning than ximagesink in state
- change from READY to NULL and fixed some stupid bugs in colorbalance
- get/set values. Also added the following feature : when nobody tries to
- set some values to the colorbalance levels before the xcontext is
- grabbed, then when creating channels list from Xv attributes we set the
- internal values to the Xv defaults. This way we handle buggy Xv drivers
- that set default hue values far from the middle of the range (Thanks
- to Jon Trowbridge for pointing that issue).
- * sys/xvimage/xvimagesink.h: Adding a cb_changed boolean to know if
- colorbalance levels have been set before xcontext is grabbed.
-
-2004-01-22 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
- Fix the ossmixer case where we shouldn't open /dev/dsp* because
- it might block operations (which is bad for a mixer).
-
-2004-01-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
- (deep_notify_callback), (gmi_set_decoder), (gmi_clear_decoder),
- (gmip_find_type_pre):
- * gst-libs/gst/media-info/media-info-priv.h:
- * gst-libs/gst/media-info/media-info.c:
- (gst_media_info_instance_init), (gst_media_info_read_idler):
- add fakesink to get caps on decoder src pad again
- fix callback prototype to match new have_type signal signature
-
-2004-01-22 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/adder/gstadder.c: (gst_adder_link):
- fix non-compile and cut-n-paste code
-
-2004-01-21 David Schleef <ds@schleef.org>
-
- * ext/swfdec/gstswfdec.c: (gst_swfdec_video_getcaps),
- (gst_swfdec_video_link), (copy_image), (gst_swfdec_loop),
- (gst_swfdec_init), (gst_swfdec_change_state):
- * ext/swfdec/gstswfdec.h:
- Fix negotiation.
- * gst/adder/gstadder.c: (gst_adder_link), (gst_adder_init),
- (gst_adder_request_new_pad): Fix negotiation.
- * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_src_fixate):
- Add a fixate function.
- * gst/intfloat/gstfloat2int.c:
- * gst/intfloat/gstfloat2int.h:
- * gst/intfloat/gstint2float.c:
- * gst/intfloat/gstint2float.h:
- Completely rewrite the negotiation. Doesn't quite work yet,
- due to some buffer-frames problem.
-
-2004-01-21 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/gnomevfs/gstgnomevfssrc.c:
- * sys/v4l2/v4l2_calls.h:
- fix includes for distcheck
-
-2004-01-21 Christian Schaller <uraeus@gnome.org>
-
- * ext/nas/
- Add libnas (network audio system) plugin, patch from Arwed von Merkatz
- based on earlier patch from Laurent Vivier
-
-2004-01-20 Jeremy Simon <jesimon@libertysurf.fr>
-
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
- Fix wma caps property
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
- Fix typo (flags1 and flags2)
-
-2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/media-info/media-info-priv.c:
- (deep_notify_callback), (gmi_seek_to_track), (gmi_get_decoder),
- (gmip_find_type_pre), (gmip_find_type), (gmip_find_stream_post),
- (gmip_find_stream), (gmip_find_track_metadata),
- (gmip_find_track_streaminfo_post), (gmip_find_track_streaminfo),
- (gmip_find_track_format):
- * gst-libs/gst/media-info/media-info-priv.h:
- * gst-libs/gst/media-info/media-info-test.c: (main):
- * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
- (gst_media_info_read_idler), (gst_media_info_read):
- * gst-libs/gst/media-info/media-info.h:
- register debugging category and use it for debugging
-
-2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/vorbis/vorbisfile.c: (gst_vorbisfile_update_streaminfo),
- (gst_vorbisfile_new_link):
- signal streaminfo through tags
-
-2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mplex/gstmplex.cc:
- * ext/mplex/gstmplexibitstream.cc:
- g++ doesn't like NULL in our i18n/error macros, should be
- either (NULL) or ("").
-
-2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/dxr3/dxr3audiosink.c:
- * sys/dxr3/dxr3init.c:
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_close):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_close):
- Fix more error error error errors (missing includes here).
-
-2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
- fix thomas' error errors.
-
-2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/mpeg2enc/gstmpeg2enc.cc:
- fix error errors.
-
-2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
- * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
- Fix for new error system.
-
-2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
- fix for new error reporting
-
-2004-01-20 David Schleef <ds@schleef.org>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
- (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
- (gst_ximagesink_set_xwindow_id): Change to using a framerate
- of [1,100] instead of [0,MAX], since 0 isn't handled correctly,
- and neither is 100+, most likely.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
- (gst_xvimagesink_getcaps): same
-
-2004-01-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * configure.ac:
- Up version requirement to 2.0.3 (not yet released) to avoid symbol
- clashes with ffmpeg.
-
-2004-01-20 Julien MOUTTE <julien@moutte.net>
-
- * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
- (gst_switch_init): Fixed switch element : proxying link and setting
- caps from src to sink on request.
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
- * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
- (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
- fix element_error
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l/v4l_calls.h:
- * sys/v4l2/v4l2_calls.h:
- element_error fixes
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/gst-i18n-plugin.h:
- add locale.h
- remove config.h inclusion
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * autogen.sh:
- adding autopoint invocation
- * Makefile.am:
- * configure.ac:
- * gst-libs/gst/gettext.h:
- adding gettext bits
- * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
- * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
- * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
- (gst_gnomevfssink_close_file):
- * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_open_file):
- * ext/sndfile/gstsf.c: (gst_sf_loop), (plugin_init):
- * gst-libs/gst/gst-i18n-plugin.h:
- * gst/avi/gstavi.c: (plugin_init):
- * sys/dxr3/dxr3init.c: (plugin_init):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_write_data):
- * sys/oss/gstossaudio.c: (plugin_init):
- * sys/oss/gstosselement.c: (gst_osselement_open_audio):
- * sys/v4l/gstv4l.c: (plugin_init):
- * sys/v4l/v4l_calls.c: (gst_v4l_open):
- * sys/v4l2/gstv4l2.c: (plugin_init):
- * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
- (gst_v4l2_fill_lists), (gst_v4l2_get_norm), (gst_v4l2_set_norm),
- (gst_v4l2_get_input), (gst_v4l2_set_input), (gst_v4l2_get_output),
- (gst_v4l2_set_output), (gst_v4l2_get_frequency),
- (gst_v4l2_set_frequency), (gst_v4l2_signal_strength),
- (gst_v4l2_get_attribute), (gst_v4l2_set_attribute):
- make sure locale and translation domain are set
- fix translated strings
- * po/.cvsignore:
- * po/LINGUAS:
- * po/Makevars:
- * po/POTFILES.in:
- * po/nl.po:
- put translation files into place
- * sys/xvideo/imagetest.c: (main):
- * ext/dv/demo-play.c: (main):
- fix unnecessary translations
-
-2004-01-19 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
- * ext/sndfile/gstsf.c:
- * gst/avi/gstavimux.c:
- * ext/audiofile/gstafsink.c:
- * ext/audiofile/gstafsrc.c:
- * ext/gnomevfs/gstgnomevfssink.c:
- * ext/gnomevfs/gstgnomevfssrc.c:
- * sys/oss/gstosselement.c:
- * sys/v4l/v4l_calls.h:
- fix i18n include
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
- (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
- (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
- (gst_v4l2_get_output), (gst_v4l2_set_output),
- (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
- (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
- (gst_v4l2_set_attribute):
- update to new error handling
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ext/sidplay/gstsiddec.cc:
- * gst/modplug/gstmodplug.cc:
- parenthese NULL because C++ seems angry about it
-
-2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/gst-i18n-plugin.h:
- add skeleton i18n stuff, but needs to be further implemented
-
-2004-01-18 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * examples/gstplay/player.c: (main):
- * ext/aalib/gstaasink.c: (gst_aasink_open):
- * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
- * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
- (gst_afsink_close_file):
- * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
- (gst_afsrc_close_file):
- * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
- * ext/dv/gstdvdec.c: (gst_dvdec_loop):
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
- * ext/esd/esdmon.c: (gst_esdmon_get):
- * ext/esd/esdsink.c: (gst_esdsink_chain):
- * ext/faac/gstfaac.c: (gst_faac_chain):
- * ext/faad/gstfaad.c: (gst_faad_chain):
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
- * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
- * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
- * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
- (gst_flacdec_loop):
- * ext/flac/gstflacenc.c: (gst_flacenc_chain):
- * ext/flac/gstflactag.c: (gst_flac_tag_chain):
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
- * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
- (gst_gnomevfssink_close_file):
- * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
- (gst_gnomevfssrc_open_file):
- * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
- * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
- * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
- * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
- (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
- * ext/mad/gstmad.c: (gst_mad_chain):
- * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
- * ext/mpeg2dec/gstmpeg2dec.c:
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
- * ext/mplex/gstmplex.cc:
- * ext/mplex/gstmplexibitstream.cc:
- * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
- (gst_ogg_demux_push), (gst_ogg_pad_push):
- * ext/raw1394/gstdv1394src.c:
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
- (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
- * ext/sidplay/gstsiddec.cc:
- * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
- (gst_sf_loop):
- * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
- * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
- * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
- * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
- * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
- * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
- * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
- * gst-libs/gst/Makefile.am:
- * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
- (gst_riff_read_element_data), (gst_riff_read_seek),
- (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
- * gst/adder/gstadder.c: (gst_adder_parse_caps), (gst_adder_loop):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
- (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
- * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
- (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
- * gst/avi/gstavimux.c: (gst_avimux_stop_file):
- * gst/flx/gstflxdec.c: (gst_flxdec_loop):
- * gst/goom/gstgoom.c: (gst_goom_chain):
- * gst/id3/gstid3types.c: (gst_id3types_loop):
- * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
- * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
- * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
- (gst_ebml_read_element_length), (gst_ebml_read_element_data),
- (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
- (gst_ebml_read_float), (gst_ebml_read_header):
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
- (gst_matroska_demux_parse_blockgroup):
- * gst/modplug/gstmodplug.cc:
- * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
- * gst/oneton/gstoneton.c: (gst_oneton_chain):
- * gst/silence/gstsilence.c: (gst_silence_get):
- * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
- * gst/smpte/gstsmpte.c: (gst_smpte_loop):
- * gst/speed/gstspeed.c: (speed_loop):
- * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
- * gst/volenv/gstvolenv.c: (gst_volenv_chain):
- * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
- * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
- (gst_wavparse_loop):
- * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
- (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
- (dxr3audiosink_close):
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
- (dxr3videosink_close), (dxr3videosink_write_data):
- * sys/oss/gstosselement.c: (gst_osselement_open_audio):
- * sys/oss/gstosselement.h:
- * sys/oss/gstosssink.c: (gst_osssink_get_type), (gst_osssink_init),
- (gst_osssink_chain):
- * sys/oss/gstosssrc.c: (gst_osssrc_get):
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
- * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_window),
- (gst_v4l_enable_overlay):
- * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
- (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
- (gst_v4l_get_frequency), (gst_v4l_set_frequency),
- (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
- (gst_v4l_set_audio):
- * sys/v4l/v4l_calls.h:
- * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
- (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
- (gst_v4lmjpegsink_playback_init),
- (gst_v4lmjpegsink_playback_start):
- * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
- (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_capture),
- (gst_v4lmjpegsrc_set_capture_m), (gst_v4lmjpegsrc_capture_init),
- (gst_v4lmjpegsrc_requeue_frame):
- * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
- (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
- (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
- * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
- (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
- (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
- (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
- (gst_v4l2src_capture_stop):
- * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
- (gst_ximagesink_chain):
- * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
- (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
- (gst_xvideosink_xwindow_new):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_chain):
- use new error signal, function and categories
-
-2004-01-18 Jeremy Simon <jesimon@libertysurf.fr>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/musicbrainz/gsttrm.c:
- * ext/musicbrainz/gsttrm.h:
- * ext/musicbrainz/Makefile.am:
- Add a trm plugin
-
-2004-01-18 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_set_property),
- (gst_ximagesink_get_property), (gst_ximagesink_class_init): Adding
- synchronous property for debugging.
- * sys/ximage/ximagesink.h: Adding the synchronous boolean flag.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_set_property): Moving a pointer declaration to a
- smaller block, fixing indent.
-
-2004-01-16 David Schleef <ds@schleef.org>
-
- * gst/videofilter/gstvideobalance.c: Fix regression; changing a
- property affects the video stream.
- * sys/xvimage/xvimagesink.c:
- * sys/xvimage/xvimagesink.h:
- Add synchronous property for debugging. Should probably be
- disabled in non-CVS builds. Make sure that the Xv attribute
- exists before we set it (crash!). Fix a silly float bug that
- caused colorbalance to just not work.
-
-2004-01-17 Christian Schaller <Uraeus@gnome.org>
-
- * tools/gst-launch-ext.in - update for new plugins
-
-2004-01-16 David Schleef <ds@schleef.org>
-
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect): Fix use of
- already-freed caps.
-
-2994-01-16 Christian Schaller <Uraeus@gnome.org>
-
- * Update spec for new colorspace plugin and libcaca plugin
- * Fix compilation of libcaca plugin (clock -> id)
-
-2004-01-16 Julien MOUTTE <julien@moutte.net>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_update_colorbalance),
- (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
- (gst_xvimagesink_set_xwindow_id),
- (gst_xvimagesink_colorbalance_set_value),
- (gst_xvimagesink_colorbalance_get_value),
- (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
- (gst_xvimagesink_init), (gst_xvimagesink_class_init): Implementing
- correct colorbalance properties. They can now be set when the element
- is still in NULL state. The values will be committed to the Xv Port
- when xcontext is initialized.
- * sys/xvimage/xvimagesink.h: Added hue, saturation, contrast,
- brightness int values in the GstXvImagesink structure.
-
-2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst-libs/gst/Makefile.am:
- restructure so having local patches works easier.
-
-2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mpeg2enc/Makefile.am:
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
- Bugfix with respect to EOS handling.
-
-2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
- Link with right caps (else, it segfaults).
- * ext/mplex/gstmplexjob.cc:
- Fix for slight API change in 1.6.1.93 release of mjpegtools.
-
-2004-01-15 David Schleef <ds@schleef.org>
-
- * gst-libs/gst/audio/Makefile.am:
- Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c
- from the template.
- * gst-libs/gst/audio/gstaudiofilter.c:
- * gst-libs/gst/audio/gstaudiofilter.h:
- Add bytes_per_sample and size and n_samples calculation.
- * gst-libs/gst/audio/gstaudiofilterexample.c:
- Remove, now autogenerated.
- * gst-libs/gst/audio/gstaudiofiltertemplate.c:
- Moved from gstaudiofilterexample, object name changed, code added
- so that it actually works.
- * gst-libs/gst/audio/make_filter:
- Script to build an audiofilter subclass from the template.
- * gst/colorspace/Makefile.am:
- * gst/colorspace/yuv2yuv.c:
- Remove file, since it's GPL, and we don't use it.
-
-2004-01-15 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Making both of
- them use the buffer free function to test how the buffer was allocated.
-
-2004-01-15 David Schleef <ds@schleef.org>
-
- * ext/esd/esdsink.c: (gst_esdsink_class_init): Remove property
- that handles osssink fallback.
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
- (gst_audio_convert_getcaps):
- * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
- Add audio/x-qdm2 for QDM2 audio.
- * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
- * gst/sine/gstsinesrc.h: Add example of how to implement tags.
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
- Decrease minimum size to 16x16.
- * gst/wavparse/gstwavparse.c:
- Convert disabled pad template caps to new caps.
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_chain): Throw element error when display cannot
- be opened. Increase minimum framerate to 1.0. Check the data
- free function on a buffer to make sure it is the type we expect
- before manipulating it.
-
-2004-01-15 Julien MOUTTE <julien@moutte.net>
-
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
- (gst_videobalance_colorbalance_set_value): Implement passthru if
- settings are in the middle.
- * tools/gst-launch-ext.in: Stop using xvideosink, use ximagesink.
-
-2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/videofilter/Makefile.am:
- * gst/volume/Makefile.am:
- Since we use videofilter symbols, link to it.
-
-2004-01-15 Julien MOUTTE <julien@moutte.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init): Setting
- mixer interface type to HARDWARE.
- * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init): Adding a default
- type to SOFTWARE.
- * gst-libs/gst/mixer/mixer.h: Adding mixer interface type and macro.
- * gst-libs/gst/mixer/mixertrack.h: Adding mixertrack flag SOFTWARE.
- * gst/volume/gstvolume.c: (gst_volume_interface_supported),
- (gst_volume_interface_init), (gst_volume_list_tracks),
- (gst_volume_set_volume), (gst_volume_get_volume),
- (gst_volume_set_mute), (gst_volume_mixer_init),
- (gst_volume_dispose), (gst_volume_get_type), (volume_class_init),
- (volume_init): Implementing mixer interface.
- * gst/volume/gstvolume.h: Adding tracklist for mixer interface.
- * sys/oss/gstosselement.c: (gst_osselement_get_type),
- (gst_osselement_change_state): Removing some trailing commas in
- structures.
- * sys/oss/gstossmixer.c: (gst_ossmixer_interface_init): Setting mixer
- interface type to HARDWARE.
- * sys/v4l/gstv4lcolorbalance.c:
- (gst_v4l_color_balance_interface_init): Setting colorbalance interface
- type to HARDWARE.
- * sys/v4l2/gstv4l2colorbalance.c:
- (gst_v4l2_color_balance_interface_init): Setting colorbalance
- interface type to HARDWARE.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): use exactly the
- same code than ximagesink for event handling.
-
-2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/snapshot/Makefile.am:
- * ext/snapshot/gstsnapshot.c: (gst_snapshot_sinkconnect),
- (gst_snapshot_chain):
- * ext/snapshot/gstsnapshot.h:
- This has to be a joke... Snapshot should be connected to a tee,
- colorspace element before it and EOS after that, where the other
- src of the tee receives normal data.
- The current way is *wrong*.
-
-2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/hermes/gsthermescolorspace.c:
- Fix another compile error. Same as below.
-
-2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/colorspace/gstcolorspace.c:
- * gst/colorspace/yuv2yuv.c: (gst_colorspace_yuy2_to_i420),
- (gst_colorspace_i420_to_yv12):
- Fix compiling... Didn't test if it actually works.
-
-2004-01-15 David Schleef <ds@schleef.org>
-
- * configure.ac:
- * gst/colorspace/Makefile.am:
- * gst/colorspace/gstcolorspace.c:
- * gst/colorspace/gstcolorspace.h:
- * gst/colorspace/yuv2rgb.c:
- * gst/colorspace/yuv2rgb.h:
- Duplicate the ext/hermes colorspace plugin, and remove Hermes
- code and GPL code. Fix for new caps negotiation. Rewrite
- much of the format handling code, and some of the conversion
- code. Basically, rewrote almost everything. This element
- handles I420, YV12 to RGB conversions.
- * ext/hermes/Makefile.am:
- * ext/hermes/gsthermescolorspace.c:
- Rename colorspace to hermescolorspace. Fix negotiation issues.
- Remove non-Hermes related code. This element handles lots of
- RGB to RGB conversions, but no YUV.
- * ext/hermes/gstcolorspace.c:
- * ext/hermes/gstcolorspace.h:
- * ext/hermes/rgb2yuv.c:
- * ext/hermes/yuv2rgb.c:
- * ext/hermes/yuv2rgb.h:
- * ext/hermes/yuv2rgb_mmx16.s:
- * ext/hermes/yuv2yuv.c:
- * ext/hermes/yuv2yuv.h:
- Remove old code.
-
-2004-01-14 Colin Walters <walters@verbum.org>
-
- * ext/mad/gstid3tag.c (gst_id3_tag_chain): Don't nego caps if
- they've already been.
-
-2004-01-15 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
- assume tag mode when pad is not connected
-
-2004-01-15 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- Don't update the time of the clock
- (gst_alsa_sink_loop):
- sync to the clock given to alsasink, not the own clock
- * sys/oss/gstosssink.c: (gst_osssink_chain):
- sync to the clock
- (gst_osssink_change_state):
- activate the clock
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
- remove bogus code that made DISCONT events unhandled
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
- explicitly case to double in _set_simple. (fixes 2nd warning in bug
- #131502)
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_read_object_header),
- (gst_asf_demux_handle_sink_event), (gst_asf_demux_audio_caps),
- (gst_asf_demux_add_audio_stream), (gst_asf_demux_video_caps):
- convert g_warning because of wrong asf data to GST_WARNINGs (fixes
- 2nd warning in bug #131502)
-
-2004-01-14 Julien MOUTTE <julien@moutte.net>
-
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
- (gst_videobalance_colorbalance_set_value),
- (gst_videobalance_colorbalance_get_value): Fixing videobalance ranges
- for colorbalance interface implementation.
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
- (gst_ximagesink_set_property), (gst_ximagesink_get_property),
- (gst_ximagesink_dispose), (gst_ximagesink_init),
- (gst_ximagesink_class_init): Adding DISPLAY property.
- * sys/ximage/ximagesink.h: Adding display_name to store display.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
- (gst_xvimagesink_dispose), (gst_xvimagesink_init),
- (gst_xvimagesink_class_init): Adding DISPLAY property and colorbalance
- properties (they still need polishing though for gst-launch use : no
- xcontext yet, i ll do that tomorrow).
- * sys/xvimage/xvimagesink.h: Adding display_name to store display.
-
-2004-01-14 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
- (gst_play_set_location), (gst_play_set_visualization): Preparing
- switch integration, adding videobalance in the pipeline.
-
-2004-01-14 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/colorbalance/colorbalance.c:
- (gst_color_balance_class_init): Adding a default type.
- * gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access
- the type.
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type),
- (gst_videobalance_dispose), (gst_videobalance_class_init),
- (gst_videobalance_init), (gst_videobalance_interface_supported),
- (gst_videobalance_interface_init),
- (gst_videobalance_colorbalance_list_channels),
- (gst_videobalance_colorbalance_set_value),
- (gst_videobalance_colorbalance_get_value),
- (gst_videobalance_colorbalance_init): Implementing colorbalance
- interface.
- * gst/videofilter/gstvideobalance.h: Adding colorbalance channels
- list.
- * sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a
- bug which was triggering a BadAccess X error when setting an overlay
- before pad was really negotiated.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init):
- Using the colorbalance type macro.
-
-2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
- (gst_flacenc_chain):
- handle tags correctly
- * gst/tags/gstid3tag.c: (gst_tag_list_new_from_id3v1):
- extract ID3v1 tags correctly
-
-2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/typefind/gsttypefindfunctions.c: (matroska_type_find),
- (plugin_init):
- Improve matroska typefinding for odd-typed headers...
-
-2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
- Fix for using incremental number on padnames.
-
-2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c:
- * ext/divx/gstdivxenc.c:
- Set category to divx4linux instead of divx (too generic).
- * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
- (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
- (gst_wavparse_loop), (gst_wavparse_change_state):
- * gst/wavparse/gstwavparse.h:
- fix parsing of WAV files with non-standard fmt-tag size and fix
- skipping of unrecognized chunks... Someone please fix this thing
- to use rifflib so all this is automated.
- * sys/v4l/Makefile.am:
- * sys/v4l2/Makefile.am:
- Add X_CFLAGS because we depend on X (for overlay).
-
-2004-01-14 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Don't issue a timestamp unless we tagged the frame
- with a PTS.
-
-2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback):
- Query the audio element to get the time, not the clock. We're
- interested in the element's time here.
-
-2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/aalib/gstaasink.c: (gst_aasink_chain):
- * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
- * ext/esd/esdsink.c: (gst_esdsink_chain):
- * ext/libcaca/gstcacasink.c: (gst_cacasink_chain):
- * ext/mas/massink.c: (gst_massink_chain):
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_chain):
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_index),
- (gst_matroska_demux_parse_metadata):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop),
- (gst_mpeg_parse_release_locks):
- * gst/tcp/gsttcpsink.c: (gst_tcpsink_chain):
- * gst/udp/gstudpsink.c: (gst_udpsink_chain):
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
- * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
- (gst_osssink_change_state):
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
- * sys/xvideo/xvideosink.c: (gst_xvideosink_chain),
- (gst_xvideosink_release_locks):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
- use element time.
- * ext/alsa/gstalsaclock.c: (gst_alsa_clock_start),
- (gst_alsa_clock_stop):
- * gst-libs/gst/audio/audioclock.c: (gst_audio_clock_set_active),
- (gst_audio_clock_get_internal_time):
- simplify for use with new clocking code.
- * testsuite/alsa/Makefile.am:
- * testsuite/alsa/sinesrc.c: (sinesrc_init), (sinesrc_force_caps):
- fix testsuite for new caps system
-
-2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
- * ext/flac/gstflacenc.c: (add_one_tag):
- length is already host endian, no need to convert. Fixes playback of
- tagged files on PPC. (bug #128384)
-
-2004-01-13 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/colorbalance/colorbalance.h: Adding a type to the
- colorbalance interface stating if it is hardware based or software
- based.
- * gst/videofilter/gstvideobalance.c: (gst_videobalance_planar411):
- Removing a trailing comma.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_colorbalance_init): Integrating a patch from Jon
- Trowbridge <trow@ximian.com> querying Xv adaptor for min/max value as
- the documentation seems to be wrong on the -1000 to 1000 interval.
-
-2004-01-12 David Schleef <ds@schleef.org>
-
- * gst/debug/efence.c: (gst_efence_init), (gst_efence_chain),
- (gst_efence_buffer_alloc), (gst_fenced_buffer_new),
- (gst_fenced_buffer_default_free), (gst_fenced_buffer_default_copy):
- Fix negotiation. Add a bufferalloc function for the sink pad,
- and generally clean up some of the code.
-
-2004-01-12 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/colorbalance/colorbalancechannel.c:
- (gst_color_balance_channel_dispose): Adding safety check in dispose
- method.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_xcontext_clear),
- (gst_xvimagesink_interface_supported),
- (gst_xvimagesink_colorbalance_list_channels),
- (gst_xvimagesink_colorbalance_set_value),
- (gst_xvimagesink_colorbalance_get_value),
- (gst_xvimagesink_colorbalance_init), (gst_xvimagesink_get_type):
- Adding colorbalance interface support to set XV parameters such as
- HUE, BRIGHTNESS, CONTRAST, SATURATION.
- * sys/xvimage/xvimagesink.h: Adding the channels list for colorbalance
- interface.
-
-2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_get_type),
- (gst_audio_convert_class_init), (gst_audioconvert_getcaps),
- (gst_audio_convert_init), (gst_audio_convert_set_property),
- (gst_audio_convert_get_property), (gst_audio_convert_chain),
- (gst_audio_convert_link),
- (gst_audio_convert_buffer_to_default_format),
- (gst_audio_convert_buffer_from_default_format), (plugin_init):
- - implement _getcaps and use it
- - improve linking
- - remove float caps since no float conversion is actually done
- - remove properties and arguments that were to be used for rate
- conversion
-
-2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst-libs/gst/audio/audio.c: (_gst_audio_structure_set_list),
- (gst_audio_structure_set_int):
- * gst-libs/gst/audio/audio.h:
- add helper functions for _getcaps matching the standard audio
- templates
-
-2004-01-12 David Schleef <ds@schleef.org>
-
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
- Test that pad is negotiated before getting its caps.
-
-2004-01-12 Julien MOUTTE <julien@moutte.net>
-
- * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element): When
- analyzing the pads of an element the bin is mostly in READY state so
- no caps were negotiated. This helper function needs to work with
- _get_caps directly then. I was not freeing them though, added that to
- fix the mem leak.
-
-2004-01-12 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Fixing the
- direct put buffers detection. I prefer checking GST_BUFFER_PRIVATE
- than the free_func.
-
-2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * sys/oss/gstossaudio.c: (plugin_init):
- * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
- * sys/oss/gstosselement.h:
- make an oss debugging category
- make failure more descriptive
-
-2004-01-11 David Schleef <ds@schleef.org>
-
- * ext/ffmpeg/gstffmpeg.c:
- * ext/ffmpeg/gstffmpegcodecmap.c:
- * ext/ffmpeg/gstffmpegdec.c:
- * ext/ffmpeg/gstffmpegenc.c:
- * ext/ffmpeg/gstffmpegprotocol.c:
- * ext/gdk_pixbuf/gstgdkanimation.c:
- * ext/jpeg/gstjpeg.c:
- * ext/libpng/gstpng.c:
- * ext/mpeg2dec/perftest.c:
- * ext/speex/gstspeex.c:
- * gst-libs/gst/resample/dtos.c:
- * gst/intfloat/gstintfloatconvert.c:
- * gst/oneton/gstoneton.c:
- * gst/rtjpeg/RTjpeg.c:
- * gst/rtp/gstrtp.c:
- * sys/dxr3/dxr3init.c:
- * sys/glsink/gstgl_nvimage.c:
- * sys/glsink/gstgl_pdrimage.c:
- * sys/glsink/gstglsink.c:
- * testsuite/gst-lint:
- Make sure everybody wraps #include "config.h" in #ifdef HAVE_CONFIG_H
-
-2004-01-11 David Schleef <ds@schleef.org>
-
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_set_caps):
- * ext/faac/gstfaac.c: (gst_faac_sinkconnect):
- * ext/gdk_pixbuf/gstgdkanimation.c:
- (gst_gdk_animation_iter_create_pixbuf):
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
- (gst_gdk_pixbuf_chain):
- * ext/gdk_pixbuf/gstgdkpixbuf.h:
- * ext/jack/gstjack.c: (gst_jack_change_state):
- * ext/xvid/gstxviddec.c: (gst_xviddec_sink_link):
- * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element):
- * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
- * gst/videofilter/gstvideofilter.c:
- (gst_videofilter_set_output_size):
- Remove all usage of gst_pad_get_caps(), and replace it with
- gst_pad_get_allowed_caps() or gst_pad_get_negotiated_cap().
-
-2004-01-11 David Schleef <ds@schleef.org>
-
- * configure.ac:
- * ext/Makefile.am: Fixes to make ext/libcaca compile.
- * ext/divx/gstdivxdec.c:
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
- (gst_gdk_pixbuf_init), (gst_gdk_pixbuf_chain): Make gdkpixbufdec
- handle images that span multiple buffers. Now work with both
- filesrc ! gdkpixbufdec and qtdemux ! gdkpixbufdec.
- * ext/gdk_pixbuf/gstgdkpixbuf.h:
- * ext/libcaca/gstcacasink.h: Fixes needed due to recent
- video/video.h changes
- * ext/xvid/gstxvid.c: (gst_xvid_csp_to_caps): same
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
- (gst_v4lmjpegsrc_buffer_free): Use buffer free function instead
- of GstData free function.
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
- same.
-
-2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/v4l2/gstv4l2element.c: (gst_v4l2element_class_init),
- (gst_v4l2element_dispose), (gst_v4l2element_set_property),
- (gst_v4l2element_get_property):
- * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults), (gst_v4l2_open):
- add norm, channel and frequency properties.
- * sys/v4l2/gstv4l2tuner.c:
- fixes for tuner interface changes
- * sys/v4l2/gstv4l2element.h:
- * sys/v4l2/gstv4l2src.c:
- * sys/v4l2/gstv4l2src.h:
- * sys/v4l2/v4l2src_calls.c:
- * sys/v4l2/v4l2src_calls.h:
- rework v4l2src to work with saa1734 cards and allow mmaped buffers.
-
-2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init),
- (gst_tuner_find_norm_by_name), (gst_v4l2_find_channel_by_name),
- (gst_tuner_channel_changed), (gst_tuner_norm_changed),
- (gst_tuner_frequency_changed), (gst_tuner_signal_changed):
- * gst-libs/gst/tuner/tuner.h:
- GObjects aren't const.
- Add find_by_name functions.
- Add checks to _changed functions.
- * sys/v4l/gstv4ltuner.c: (gst_v4l_tuner_get_channel),
- (gst_v4l_tuner_get_norm):
- Fixes for above.
-
-2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/video/video.h:
- Fix caps template names to be understandable.
- Prefix everything with GST_VIDEO.
- * ext/aalib/gstaasink.c:
- * ext/divx/gstdivxdec.c:
- * ext/divx/gstdivxenc.c:
- * ext/gdk_pixbuf/gstgdkpixbuf.c:
- * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
- * ext/jpeg/gstjpegdec.c: (raw_caps_factory):
- * ext/jpeg/gstjpegenc.c: (raw_caps_factory):
- * ext/libcaca/gstcacasink.c:
- * ext/libpng/gstpngenc.c: (raw_caps_factory):
- * ext/snapshot/gstsnapshot.c:
- * ext/swfdec/gstswfdec.c:
- * ext/xvid/gstxviddec.c:
- * ext/xvid/gstxvidenc.c:
- * gst/chart/gstchart.c:
- * gst/deinterlace/gstdeinterlace.c:
- * gst/effectv/gsteffectv.c:
- * gst/flx/gstflxdec.c: (gst_flxdec_loop):
- * gst/goom/gstgoom.c:
- * gst/median/gstmedian.c:
- * gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
- (gst_monoscope_srcconnect), (gst_monoscope_chain):
- * gst/overlay/gstoverlay.c:
- * gst/smooth/gstsmooth.c:
- * gst/smpte/gstsmpte.c:
- * gst/synaesthesia/gstsynaesthesia.c:
- * gst/videocrop/gstvideocrop.c:
- * gst/videodrop/gstvideodrop.c:
- * gst/y4m/gsty4mencode.c:
- * sys/qcam/gstqcamsrc.c:
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
- Make them work with new video.h file.
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
- (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
- (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
- Make it work with new buffer allocation system.
-
-2004-01-11 Julien MOUTTE <julien@moutte.net>
-
- * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the
- pad_alloc_buffer implementation to use ->srcpad
- * ext/hermes/gstcolorspace.c: (gst_colorspace_chain): Fixing the
- pad_alloc_buffer implementation to use ->srcpad
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Fixing the
- pad_alloc_buffer implementation to use ->srcpad
- * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
- (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
- (gst_ximagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
- a reference to everything we need.
- * sys/ximage/ximagesink.h: adding a reference to the sink in the image.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
- (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
- (gst_xvimagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
- a reference to everything we need.
- * sys/xvimage/xvimagesink.h: adding a reference to the sink in the image
-
-2004-01-11 David Schleef <ds@schleef.org>
-
- * ext/divx/gstdivxenc.c: remove bogus gst_caps_is_fixed() test
- * gst/debug/efence.c: (gst_efence_chain), (gst_fenced_buffer_new),
- (gst_fenced_buffer_default_copy): Fix for rename of buffer private
- structure members.
- * gst/effectv/gstwarp.c: (gst_warptv_setup): Don't reset the time
- value during a resize/renegotiation.
- * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain): use
- gst_pad_alloc_buffer();
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
- (gst_v4lmjpegsrc_buffer_free): Fix for rename of buffer private
- structure members.
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
- Fix for rename of buffer private structure members.
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
- (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
- Fix for rename of buffer private structure members.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
- (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
- Fix for rename of buffer private structure members.
-
-2004-01-11 Arwed v. Merkatz <v.merkatz@gmx.net>
-
- reviewed by: David Schleef <ds@schleef.org>
-
- * gst/videofilter/Makefile.am:
- * gst/videofilter/gstgamma.c: Gamma correction filter. Modified
- from the patch by ds to fit in with recent make_filter changes.
-
-2004-01-11 Julien MOUTTE <julien@moutte.net>
-
- * configure.ac: Adding examples/switch/Makefile
- * examples/Makefile.am: Adding examples/switch
- * examples/switch/Makefile.am: Adding switcher example.
- * examples/switch/switcher.c: (got_eos), (idle_iterate),
- (switch_timer), (main): Adding an example demonstrating switch usage
- with 2 videotestsrc showing different patterns.
- * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
- (gst_switch_init): Fixing switch with the new caps system.
-
-2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/video/video.h:
- Fix 32bit caps. Issue remaining: The macro names are chosen poorly.
- They should probably be like
- GST_VIDEO_PAD_TEMPLATE_CAPS_{RGB,BGR,RGBx,BGRx}.
-
-2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (qtdemux_parse_trak):
- fix audio chunk size/timestamp calculation
-
-2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
- fix SVQ3 caps
-
-2004-01-11 Steve Baker <steve@stevebaker.org>
-
- * gst/effectv/gstaging.c: (gst_agingtv_get_type),
- (gst_agingtv_base_init), (gst_agingtv_class_init),
- (gst_agingtv_init), (gst_agingtv_setup), (gst_agingtv_rgb32),
- (gst_agingtv_set_property), (gst_agingtv_get_property):
- Port agingTV to videofilter
-
-2004-01-09 Julien MOUTTE <julien@moutte.net>
-
- * ext/hermes/gstcolorspace.c: (gst_colorspace_chain):
- Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
-
-2004-01-09 Julien MOUTTE <julien@moutte.net>
-
- * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain):
- Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
- * gst-libs/gst/xoverlay/xoverlay.c:
- (gst_x_overlay_got_desired_size): Updating doc for the xid being 0.
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
- Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
- Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
- * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
- (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc),
- (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init): Implementing
- the bufferalloc_function to replace bufferpools, fixing the XOverlay
- interface implementation to handle xid being 0 and fix some bugs
- triggered by Benjamin's testcase.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
- (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc),
- (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init): Implementing
- the bufferalloc_function to replace bufferpools, fixing the XOverlay
- interface implementation to handle xid being 0 and fix some bugs
- triggered by Benjamin's testcase.
-
-2004-01-09 David Schleef <ds@schleef.org>
-
- * ext/librfb/gstrfbsrc.c: Hacking. Added actual decoding and
- mouse pointer events. It works.
-
-2004-01-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxenc.c: (gst_divxenc_init):
- Use explicit caps - fix capsnego.
- * ext/xvid/gstxviddec.c:
- * ext/xvid/gstxvidenc.c:
- Remove macro-inside-macro which caused compile errors.
- * gst-libs/gst/riff/riff-read.c: (gst_riff_read_header):
- Error out if it's not a RIFF file. Else we error out without
- gst_element_error() which is not good...
-
-2004-01-08 David Schleef <ds@schleef.org>
-
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
- Fix pad_link function to handle formats that ffmpeg returns
- as multiple caps structures.
- * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
- Only complain if source buffer is _smaller_ than expected.
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_init),
- (gst_videoscale_handle_src_event): Resize navigation events
- when passing them upstream.
- * gst/videotestsrc/gstvideotestsrc.c:
- * gst/videotestsrc/gstvideotestsrc.h:
- * gst/videotestsrc/videotestsrc.c:
- * gst/videotestsrc/videotestsrc.h:
- Rewrite many of the buffer painting functions to handle odd
- sizes (for many formats, size%4!=0 or size%8!=0). Most have
- been verified to work with my video card.
- * testsuite/gst-lint: Add check for elements calling
- gst_pad_get_caps() instead of gst_pad_get_allowed_caps().
-
-2004-01-08 David Schleef <ds@schleef.org>
-
- * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
- (gst_videodrop_link), (gst_videodrop_init): Fix negotiation.
-
-2004-01-08 Julien MOUTTE <julien@moutte.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents): A
- configure event is not emiting the desired size signal. That fixes
- aspect ratio issues with gst-player.
-
-2004-01-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/median/gstmedian.c: (gst_median_link), (gst_median_init):
- Fix capsnego.
-
-2004-01-08 Julien MOUTTE <julien@moutte.net>
-
- * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_create): Using XOverlay
- public method to fire size signal.
-
-2004-01-07 Julien MOUTTE <julien@moutte.net>
-
- * examples/gstplay/Makefile.am: Adding the interface library.
- * gst-libs/gst/play/Makefile.am: Adding the interface library.
- * gst-libs/gst/play/gstplay.c: (gst_play_set_video_sink): Connecting to the XOverlay size signal instead of GstVideoSink.
- * gst-libs/gst/play/gstplay.h: Including the XOverlay interface to check
- GST_IS_X_OVERLAY before signal connect.
- * gst-libs/gst/video/gstvideosink.c: (gst_videosink_class_init):
- Removing the have_video_size signal.
- * gst-libs/gst/video/gstvideosink.h: Removing the have_video_size signal
- and associated public method.
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
- (gst_ximagesink_sinkconnect): Using XOverlay public method to fire size
- signal.
- * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
- (gst_xvideosink_xwindow_new): Using XOverlay public method to fire size
- signal.
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sinkconnect):
- Using XOverlay public method to fire size signal.
-
-2004-01-07 David Schleef <ds@schleef.org>
-
- * gst/videofilter/Makefile.am:
- * gst/videofilter/gstvideotemplate.c:
- * gst/videofilter/make_filter:
- Create gstvideoexample.c in a srcdir!=builddir friendly way.
- Convert make_filter to /bin/sh script.
-
-2004-01-07 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * gst/modplug/gstmodplug.cc: fix element description
-
-2004-01-07 Julien MOUTTE <julien@moutte.net>
-
- * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
- (got_video_size): Adding some new lines in g_print calls.
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
- (gst_ximagesink_xwindow_destroy), (gst_ximagesink_xwindow_resize),
- (gst_ximagesink_handle_xevents), (gst_ximagesink_fixate),
- (gst_ximagesink_sinkconnect), (gst_ximagesink_change_state),
- (gst_ximagesink_chain), (gst_ximagesink_buffer_new),
- (gst_ximagesink_set_xwindow_id), (gst_ximagesink_get_desired_size):
- Complete code review, reverting some stuff i disagree with, adding
- some fixes : time synchronization on invalid timestamps, renegotiation
- of private window.
- * sys/ximage/ximagesink.h:
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_destroy),
- (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_handle_xevents),
- (gst_xvimagesink_get_xv_support), (gst_xvimagesink_xcontext_get),
- (gst_xvimagesink_fixate), (gst_xvimagesink_sinkconnect),
- (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
- (gst_xvimagesink_buffer_new),
- (gst_xvimagesink_navigation_send_event),
- (gst_xvimagesink_set_xwindow_id),
- (gst_xvimagesink_get_desired_size),
- (gst_xvimagesink_xoverlay_init): Complete code review, reverting some
- stuff i disagree with, adding some fixes : Renegotiation of private
- window, implementing get_desired_size.
-
-2004-01-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/audiofile/gstafsink.c: (gst_afsink_init), (gst_afsink_chain),
- (gst_afsink_handle_event):
- * ext/jpeg/gstjpegenc.c: (gst_jpegenc_init):
- * gst/avi/gstavimux.c: (gst_avimux_request_new_pad):
- * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_init):
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_init):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_init):
- Fix for instantiate-test (see core). Also remove dead code from
- jpegenc (which still needs fixing, but that's lower on my TODO
- list...).
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
- Never return NULL as caps.
-
-2004-01-07 David Schleef <ds@schleef.org>
-
- * configure.ac:
- * ext/Makefile.am:
- * ext/librfb/Makefile.am:
- * ext/librfb/gstrfbsrc.c:
- New source plugin based on librfb-0.1. RFB (remote framebuffer)
- is the protocol used by VNC.
-
-2004-01-07 David Schleef <ds@schleef.org>
-
- * gst/videofilter/gstvideotemplate.c:
- * gst/videofilter/gstvideotemplate.h:
- * gst/videofilter/make_filter:
- Merge videotemplate header into source file.
- * gst/effectv/Makefile.am:
- * gst/effectv/gsteffectv.c: (plugin_init):
- * gst/effectv/gstwarp.c:
- Make warpTV a subclass of videofilter.
-
-2004-01-07 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
- Add guard against invalid utf-8 conversions in mad. Just in case.
-
-2004-01-07 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
- Fix for bug shown by poisoning
-
-2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
- (gst_v4lmjpegsrc_buffer_free):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
- (gst_v4lsrc_srcconnect), (gst_v4lsrc_getcaps), (gst_v4lsrc_get),
- (gst_v4lsrc_buffer_free):
- Fix for removed bufferpools.
-
-2004-01-07 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/dv/gstdvdec.c: (gst_dvdec_loop):
- Fix caps negotiation.
-
- * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
- (dvdnavsrc_update_buttoninfo), (dvdnavsrc_get),
- (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
- (dvdnavsrc_event):
- * ext/mpeg2dec/gstmpeg2dec.c:
- * gst-libs/gst/navigation/navigation.c:
- (gst_navigation_send_key_event), (gst_navigation_send_mouse_event):
- * gst-libs/gst/navigation/navigation.h:
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_handle_src_event):
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
- Super-simple first version of mouse and keyboard events. Clicking
- on a DVD menu now works, although it may not take you where you
- expected.
-
- * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_src_fixate):
- These fixate functions were broken - they never actually
- fixated :)
-
-2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/shout/gstshout.c: (gst_icecastsend_base_init),
- (gst_icecastsend_init):
- fix for new caps system.
- * gst-libs/gst/mixer/mixertrack.h:
- * sys/oss/gstossmixer.c: (gst_ossmixer_build_list):
- Add 'master track' flag (for tools like ACME that only want to
- change the main volume).
-
-2004-01-07 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/xvid/gstxvid.c: (gst_xvid_structure_to_csp),
- (gst_xvid_csp_to_caps):
- * ext/xvid/gstxviddec.c: (gst_xviddec_src_getcaps):
- * ext/xvid/gstxvidenc.c:
- ifdef out ARGB type when it isn't available
- in xvidcore 1.0.0beta2
-
-2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
- When we have received a new SCR right in the first buffer after
- a seek (so in the same cycle that handles the discont), we should
- handle the buffer instead of unreffing it, else we lose data.
-
-2004-01-06 Iain <iain@prettypeople.org>
-
- * gst/intfloat/gstint2float.c (gst_int2float_link): Set the
- buffer-frames caps too.
-
- * gst/oneton/gstoneton.c (gst_oneton_sink_connect): Only create the new
- caps that we need, don't destroy them all and rebuild them. And when
- creating src pads, use the src pad template rather than the sink...
-
-2004-01-05 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
- Add pad to element *after* setting functions such as event handler.
- Without this, the scheduler (opt) will link pads, set the event
- handler from the default event function (dispatcher in gstpad.c)
- and *after* that, we will set our own event function, which will
- thus never be used (and thus mpegdemux doesn't handle events).
-
-2004-01-04 David Schleef <ds@schleef.org>
-
- Fix the fixate functions to handle new prototype:
- * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
- * gst/videotestsrc/gstvideotestsrc.c:
- (gst_videotestsrc_src_fixate):
- * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
- * sys/ximage/ximagesink.c: (gst_ximagesink_fixate):
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate):
-
-2004-01-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/ximage/ximagesink.h:
- * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
- (gst_ximagesink_xwindow_destroy), (gst_ximagesink_sinkconnect),
- (gst_ximagesink_change_state), (gst_ximagesink_set_xwindow_id),
- (gst_ximagesink_xoverlay_init):
- assorted fixes to make (re)embedding work
- * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect),
- (gst_ximagesink_get_desired_size):
- implement desired size additions to XOverlay
-
-2004-01-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init),
- (gst_x_overlay_got_xwindow_id), (gst_x_overlay_get_desired_size),
- (gst_x_overlay_got_desired_size):
- * gst-libs/gst/xoverlay/xoverlay.h:
- Add optional "desired size" signal and querying.
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_blockgroup):
- Fix EBML-laced block parsing. Diffs are relative to previous
- lace, not the first lace. Thanks to Mosu from the Matroska
- team for detecting this.
- * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
- (gst_wavparse_parse_fmt), (gst_wavparse_getcaps),
- (gst_wavparse_handle_sink_event), (gst_wavparse_loop),
- (gst_wavparse_change_state):
- * gst/wavparse/gstwavparse.h:
- Quickfix for capsnego.
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/wavenc/gstwavenc.c: (set_property), (gst_wavenc_init):
- Fix indenting, fix pad creation.
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/xvid/gstxviddec.c: (gst_xviddec_init),
- (gst_xviddec_src_getcaps), (gst_xviddec_src_link),
- (gst_xviddec_sink_link):
- Implement src_getcaps() so proper size caps is negotiated.
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/flac/gstflacdec.c: (gst_flacdec_loop):
- Finish flac decoder on EOS. See #116178.
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_src_getcaps),
- (gst_matroska_demux_add_stream):
- * gst/matroska/matroska-ids.h:
- Add getcaps() function to fix capsnego...
-
-2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
- (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
- Fix more integer overflows. Again, see #126967.
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mpeg2dec/gstmpeg2dec.c:
- Add support for mpeg2dec-0.4.0 (released two weeks ago). See
- #130416.
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- * ext/xvid/gstxvid.c: (gst_xvid_init), (gst_xvid_error),
- (gst_xvid_structure_to_csp), (gst_xvid_csp_to_caps):
- * ext/xvid/gstxvid.h:
- * ext/xvid/gstxviddec.c: (gst_xviddec_class_init),
- (gst_xviddec_init), (gst_xviddec_setup), (gst_xviddec_chain),
- (gst_xviddec_src_link), (gst_xviddec_sink_link),
- (gst_xviddec_change_state):
- * ext/xvid/gstxviddec.h:
- * ext/xvid/gstxvidenc.c: (gst_xvidenc_profile_get_type),
- (gst_xvidenc_base_init), (gst_xvidenc_class_init),
- (gst_xvidenc_init), (gst_xvidenc_setup), (gst_xvidenc_chain),
- (gst_xvidenc_link), (gst_xvidenc_set_property),
- (gst_xvidenc_get_property), (gst_xvidenc_change_state):
- * ext/xvid/gstxvidenc.h:
- Update xvid plugin to latest xvid (1.0.0-beta3) API.
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/rtp/rtp-packet.c:
- Add sys/types.h include, since OS X doesn't define in_addr_t
- in netinet/in.h, like it does on Linux (see #129600).
-
-2004-01-03 Thomas Canty <tommydal@optushome.com.au>
-
- reviewed by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_dispose):
- Correct logic of dispose function (see #129306).
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
- (gst_mpeg_parse_init):
- * gst/mpegstream/gstmpegparse.h:
- Remove clock (which was never provided, i.e. dead code), and
- also fix integer overflows at high PTS values (see #126967).
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/flac/gstflacdec.c:
- * ext/libpng/gstpngenc.h:
- * ext/mikmod/gstmikmod.h:
- OS X fixes (see #126628).
-
-2004-01-02 David Schleef <ds@schleef.org>
-
- * ext/alsa/gstalsasrc.c: (gst_alsa_src_pad_factory),
- (gst_alsa_src_base_init): Remove bogus "src" request pad.
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_base_init),
- (gst_mpeg_parse_class_init): Move pad template registration
- to class_init, since the derived class (mpegdemux) doesn't
- want them.
-
-2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/Makefile.am:
- * sys/xvideo/Makefile.am:
- * sys/xvimage/Makefile.am:
- Move interface libs from LDFLAGS to LIBADD, fix relocation errors
- after installation (see #127664).
-
-2004-01-02 David Schleef <ds@schleef.org>
-
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_init),
- (gst_ffmpegenc_connect): Negotiation fixes.
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
- Remove inappropriate gst_caps_free().
- * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
- Reenable Ronald's internal resize code, since the core handles
- it correctly now.
-
-2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_init):
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init), (gst_v4lsrc_init):
- Fix pad template stuff.
-
-2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * gst/matroska/ebml-read.c: (gst_ebml_read_sint):
- * gst/matroska/ebml-write.c: (gst_ebml_write_sint):
- fix signed integer reading/writing.
-
-2004-01-02 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/README:
- Remove outdated document
-
-2004-01-03 Jan Schmidt <thaytan@mad.scientist.com>
-
- * gst/cutter/gstcutter.c: (gst_cutter_init):
- src pad was being created twice - oops.
-
-2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
- Comment out internal resize. It doesn't handle the resulting
- XEvent internally, does another try_set_caps() which leads to
- a really nice loop.
- Real fix will come when Julien and Dave are awake. ;).
-
-2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/mpeg2enc/gstmpeg2enc.cc:
- fix const/nonconst compile issue.
-
-2004-01-02 David Schleef <ds@schleef.org>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate),
- (gst_xvimagesink_sinkconnect), (gst_xvimagesink_init):
- Add fixate function and a check for bad formats.
-
-2004-01-01 David Schleef <ds@schleef.org>
-
- Negotiation fixes:
- * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link),
- (gst_audiofilter_init):
- * gst/debug/efence.c: (gst_efence_init):
- * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
- (gst_deinterlace_init):
- * gst/volume/gstvolume.c: (volume_connect):
-
-2004-01-01 David Schleef <ds@schleef.org>
-
- Convert elements to use gst_pad_use_explicit_caps() where
- appropriate:
- * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_reneg):
- * ext/audiofile/gstafparse.c: (gst_afparse_init),
- (gst_afparse_open_file):
- * ext/audiofile/gstafsrc.c: (gst_afsrc_init),
- (gst_afsrc_open_file):
- * ext/esd/esdmon.c: (gst_esdmon_init), (gst_esdmon_get):
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
- (gst_ffmpegdec_chain):
- * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
- * ext/flac/gstflacdec.c: (gst_flacdec_init), (gst_flacdec_write):
- * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_init),
- (gst_gdk_pixbuf_chain):
- * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init), (gst_jpegdec_link),
- (gst_jpegdec_chain):
- * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
- * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
- (gst_mikmod_negotiate):
- * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
- (gst_mpeg2dec_negotiate_format):
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
- * ext/speex/gstspeexdec.c: (gst_speexdec_init),
- (gst_speexdec_sinkconnect):
- * ext/swfdec/gstswfdec.c: (gst_swfdec_loop), (gst_swfdec_init):
- * ext/vorbis/vorbisfile.c: (gst_vorbisfile_init),
- (gst_vorbisfile_new_link):
- * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init),
- (gst_ac3parse_chain):
- * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream),
- (gst_asf_demux_setup_pad):
- * gst/auparse/gstauparse.c: (gst_auparse_init),
- (gst_auparse_chain):
- * gst/id3/gstid3types.c: (gst_id3types_loop):
- * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
- * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
- (mp1videoparse_parse_seq):
- * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
- (bpf_from_header):
- * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
- (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_lpcm_set_caps):
- * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
- (gst_mpeg_parse_send_data):
- * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
- (gst_qtdemux_add_stream):
- * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
- * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
- (gst_wavparse_parse_fmt):
-
-2004-01-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Fix configure check for mpeg2enc. We need 1.6.1.93 instead of
- 1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and
- it therefore uses the wrong include paths. Too bad... Note
- that 1.6.1.93 is not release yet. ;).
- Also add a check for mplex, which is now using the lib'ified
- mplex from mjpegtools, too.
- * ext/ffmpeg/gstffmpegcodecmap.c:
- Add codec_tag for 3ivx/xvid. For xvid, this should fix playback
- issues. I don't think ffmpeg handles 3ivx correctly, so this
- probably won't work. But it won't hurt either.
- * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect),
- (gst_ffmpegdec_chain):
- * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect),
- (gst_ffmpegenc_chain_audio):
- Fix memleak in audio encoding. Close codec if open fails, this
- calls the cleanup routines so we can re-use the context.
- * ext/mpeg2enc/gstmpeg2enc.cc:
- Fix pad template names/types, fix memory issue with getcaps().
- * ext/mpeg2enc/gstmpeg2encoder.cc:
- * ext/mpeg2enc/gstmpeg2encoder.hh:
- Fix compile issue with new caps system (const thingy).
- * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
- * ext/mpeg2enc/gstmpeg2encpicturereader.hh:
- We read a first frame right on initing, so that we have a caps
- when we init the output. This caps is cached in padprivate and
- read as first frame.
- * ext/mplex/Makefile.am:
- * ext/mplex/gstmplex.cc:
- * ext/mplex/gstmplex.h:
- * ext/mplex/gstmplex.hh:
- * ext/mplex/gstmplexibitstream.cc:
- * ext/mplex/gstmplexibitstream.hh:
- * ext/mplex/gstmplexjob.cc:
- * ext/mplex/gstmplexjob.hh:
- * ext/mplex/gstmplexoutputstream.cc:
- * ext/mplex/gstmplexoutputstream.hh:
- We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin
- had issues, didn't do capsnego, supported only a subset of the
- mplex features and required a mplex fork in our local CVS. Plus
- that it worked agaist a very old mplex version. Rewriting was
- faster than updating it.
- * gst-libs/ext/Makefile.am:
- * gst-libs/ext/mplex/INSTRUCT:
- * gst-libs/ext/mplex/Makefile.am:
- * gst-libs/ext/mplex/README:
- * gst-libs/ext/mplex/TODO:
- * gst-libs/ext/mplex/ac3strm_in.cc:
- * gst-libs/ext/mplex/audiostrm.hh:
- * gst-libs/ext/mplex/audiostrm_out.cc:
- * gst-libs/ext/mplex/aunit.hh:
- * gst-libs/ext/mplex/bits.cc:
- * gst-libs/ext/mplex/bits.hh:
- * gst-libs/ext/mplex/buffer.cc:
- * gst-libs/ext/mplex/buffer.hh:
- * gst-libs/ext/mplex/fastintfns.h:
- * gst-libs/ext/mplex/format_codes.h:
- * gst-libs/ext/mplex/inputstrm.cc:
- * gst-libs/ext/mplex/inputstrm.hh:
- * gst-libs/ext/mplex/lpcmstrm_in.cc:
- * gst-libs/ext/mplex/mjpeg_logging.cc:
- * gst-libs/ext/mplex/mjpeg_logging.h:
- * gst-libs/ext/mplex/mjpeg_types.h:
- * gst-libs/ext/mplex/mpastrm_in.cc:
- * gst-libs/ext/mplex/mpegconsts.cc:
- * gst-libs/ext/mplex/mpegconsts.h:
- * gst-libs/ext/mplex/mplexconsts.hh:
- * gst-libs/ext/mplex/multplex.cc:
- * gst-libs/ext/mplex/outputstream.hh:
- * gst-libs/ext/mplex/padstrm.cc:
- * gst-libs/ext/mplex/padstrm.hh:
- * gst-libs/ext/mplex/stillsstream.cc:
- * gst-libs/ext/mplex/stillsstream.hh:
- * gst-libs/ext/mplex/systems.cc:
- * gst-libs/ext/mplex/systems.hh:
- * gst-libs/ext/mplex/vector.cc:
- * gst-libs/ext/mplex/vector.hh:
- * gst-libs/ext/mplex/videostrm.hh:
- * gst-libs/ext/mplex/videostrm_in.cc:
- * gst-libs/ext/mplex/videostrm_out.cc:
- * gst-libs/ext/mplex/yuv4mpeg.cc:
- * gst-libs/ext/mplex/yuv4mpeg.h:
- * gst-libs/ext/mplex/yuv4mpeg_intern.h:
- * gst-libs/ext/mplex/yuv4mpeg_ratio.cc:
- We don't fork mjpegtools' mplex in our CVS anymore.
- * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps),
- (gst_avi_demux_add_stream):
- * gst/avi/gstavidemux.h:
- Add getcaps() function for proper caps nego. This makes some
- parts of AVI playback/reading work.
- * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
- Resize window on new capsnego. This is probably wrong, but
- I'm still committing it because with current capsnego, the
- first successfull capsnego is auto-fixated, therefore rounded
- down to the lowest values in the caps. this results in a 16x16
- XWindow that is not reized when real capsnego finishes.
- Dave, I see more cases of this, do you know a proper solution?
- * tools/gst-launch-ext.in:
- Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
-
-2003-12-31 David Schleef <ds@schleef.org>
-
- * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
- * gst/udp/gstudpsrc.c: (gst_udpsrc_get):
- Change gst_pad_proxy_link() to gst_pad_try_set_caps()
-
-2003-12-30 David Schleef <ds@schleef.org>
-
- * ext/ffmpeg/gstffmpegcolorspace.c:
- (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
- (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_init),
- (gst_ffmpegcsp_chain): Negotiation fixes
- * ext/mad/gstmad.c: (gst_mad_chain): Negotiation fixes
- * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
- (gst_audio_convert_link), (gst_audio_convert_channels):
- * gst/audioscale/gstaudioscale.c: (gst_audioscale_getcaps),
- (gst_audioscale_link), (gst_audioscale_get_buffer),
- (gst_audioscale_chain): Negotiation fixes
- * gst/audioscale/gstaudioscale.h:
- * gst/videofilter/gstvideofilter.c:
- (gst_videofilter_format_get_structure), (gst_videofilter_getcaps),
- (gst_videofilter_link), (gst_videofilter_init),
- (gst_videofilter_set_output_size), (gst_videofilter_setup),
- (gst_videofilter_find_format_by_structure):
- * gst/videofilter/gstvideofilter.h: Negotiation fixes
- * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
- (gst_videoscale_link):
- * gst/videoscale/videoscale.c: (videoscale_get_structure),
- (videoscale_find_by_structure), (gst_videoscale_setup):
- * gst/videoscale/videoscale.h: Negotiation fixes
- * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
- (gst_ximagesink_fixate), (gst_ximagesink_init): Add a fixate
- function, restrict resizing to a multiple of 4 (hack until
- everyone supports odd sizes correctly).
-
-2003-12-29 Colin Walters <walters@verbum.org>
-
- * ext/esd/esdsink.c (gst_esdsink_link): Fix typo; get depth instead of
- signed.
-
-2003-12-30 Jan Schmidt <thaytan@mad.scientist.com>
-
- * ext/sndfile/gstsf.c: (gst_sf_loop):
- Fix warning about discarding const qualifier
-
-2003-12-27 Jeremy Simon <jesimon@libertysurf.fr>
-
- * gst/cutter/gstcutter.c:
- * gst/videoscale/gstvideoscale.c:
- * gst/volenv/gstvolenv.c:
- * gst-libs/gst/audio/audio.c:
- * gst-libs/gst/video/video.c:
- Fix warnings
-
-2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
- Don't send ALSA debugging to stderr.
- * ext/alsa/gstalsa.h:
- Use GST_WARNING instead of g_warning when ALSA functions fail.
-
-2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
- Free XVAdapterInfo correctly.
-
-2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
- (gst_id3_tag_do_caps_nego), (gst_id3_tag_src_link):
- Make id3tag use correct caps nego.
-
-2003-12-27 Amaury Jacquot <sxpert@esitcom.org>
-
- * ext/ivorbis/vorbis.c:
- * ext/ivorbis/vorbisenc.h:
- * ext/ivorbis/vorbisfile.c:
- Modify so that it uses the new caps things
-
-2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * testsuite/spider/spider1.c: (main):
- * testsuite/spider/spider2.c: (main):
- * testsuite/spider/spider3.c: (main):
- Make tests compile again. They probably don't work.
-
-2003-12-24 Colin Walters <walters@verbum.org>
-
- * sys/oss/gstosssink.c (gst_osssink_sink_fixate): Return NULL if
- we can't fixate the caps anymore.
-
-2003-12-23 David Schleef <ds@schleef.org>
-
- * gst/volume/gstvolume.c: (volume_init): Proxy getcaps.
- * sys/oss/gstosssink.c: (gst_osssink_init),
- (gst_osssink_sink_fixate): Add fixate function.
-
-2003-12-24 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/ffmpeg/gstffmpegcodecmap.c:
- * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_getcaps),
- (gst_ffmpegcsp_srcconnect_func), (gst_ffmpegcsp_sinkconnect),
- (gst_ffmpegcsp_srcconnect), (gst_ffmpegcsp_get_type),
- (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
- (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
- (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
- (gst_ffmpegcsp_get_property), (gst_ffmpegcsp_register):
- fix typo in RGB masks, and move back to "old" colorspace
- capsnego code until whoever wrote this new crap has actually
- tested it so that it works.
- And yes, this works, keep it that way please.
-
-2003-12-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * ext/divx/gstdivxdec.c: (gst_divxdec_base_init),
- (gst_divxdec_init), (gst_divxdec_negotiate):
- * ext/divx/gstdivxdec.h:
- * ext/divx/gstdivxenc.c: (gst_divxenc_base_init),
- (gst_divxenc_init):
- * ext/faac/gstfaac.c: (gst_faac_base_init), (gst_faac_init),
- (gst_faac_sinkconnect), (gst_faac_srcconnect):
- * ext/mpeg2enc/gstmpeg2enc.cc:
- * ext/mpeg2enc/gstmpeg2encoder.cc:
- * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
- * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_base_init),
- (dxr3audiosink_init), (dxr3audiosink_pcm_sinklink):
- * sys/dxr3/dxr3spusink.c: (dxr3spusink_base_init),
- (dxr3spusink_init):
- * sys/dxr3/dxr3videosink.c: (dxr3videosink_base_init),
- (dxr3videosink_init):
- Fix caps breakage after Dave's caps branch merge.
-
-2003-12-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
- Fix for 24bpp display.
-
-2003-12-23 Colin Walters <walters@verbum.org>
-
- * ext/gnomevfs/gstgnomevfssink.c: Add ARG_HANDLE property that takes
- a GnomeVFSHandle directly.
-
-2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/volume/Makefile.am:
- * gst/volume/gstvolume.c: (volume_connect), (volume_parse_caps),
- (volume_base_init), (volume_init):
- Reenable volume element and fix to work with new caps stuff.
- Rhythmbox needs this.
-
-2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * gst/qtdemux/qtdemux.c: (plugin_init):
- qtdemux requires bytestream
-
-2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_link):
- Fix remaining caps handling errors due to CAPS merge.
-
-2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
-
- * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_init),
- (gst_faad_sinkconnect), (gst_faad_srcgetcaps),
- (gst_faad_srcconnect):
- Port to new caps system.
-
-2003-12-21 Julien MOUTTE <julien@moutte.net>
-
- * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
- (got_video_size), (main): using g_print instead of g_message.
- * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup): Fixing EOS
- signal which was not emitted because of "switch" element added to the
- bin but not connected. (Removing from the bin temporarily)
-
-2003-12-21 Julien MOUTTE <julien@moutte.net>
-
- * configure.ac: X_DISPLAY_MISSING is set to 1 if AC_PATH_XTRA fails to
- find X development files. I don't understand the previous tests and
- they fail on my debian/ppc unstable. This one works.
- * examples/gstplay/player.c: (main): Set the pipeline to READY before
- exiting.
- * gst-libs/gst/play/gstplay.c: (gst_play_get_length_callback),
- (gst_play_set_video_sink), (gst_play_set_audio_sink),
- (gst_play_set_visualization): Add some safety checks in set_ methods
- and state_change. This was throwing some ugly CRITICAL messages when
- pipeline was getting disposed and casts were failing.
-
-2003-12-21 Ronald Bultje <rbultje@ronald.bitfreak.net>
-
- * configure.ac:
- Improve mpeg2enc detection. This is for distributions that do
- ship mjpegtools, but without mpeg2enc. Also does object check
- for might there ever be ABI incompatibility.
- * ext/mpeg2enc/gstmpeg2enc.cc:
- Add Andrew as second maintainer (he's helping me), and also add
- an error if no caps was set. This happens if I pull before capsnego
- and that's something I should solve sometime else.
- * gst/matroska/matroska-demux.c:
- (gst_matroska_demux_parse_blockgroup):
- Fix time parsing.
- * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link),
- (gst_matroska_mux_track_header):
- Add caps to templates.
- * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory):
- Add mpegversion=1 to prevent confusion with MPEG/AAC.
- * gst/mpegstream/gstmpegdemux.c:
- Remove layer since it causes warnings about unfixed caps.
- * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
- Fix obvious typo (we error out if caps were set, we should of
- course error out if *no* caps were set).
- * sys/oss/gstosselement.c: (gst_osselement_convert):
- Fix format conversion, we confused bits/bytes.
- * sys/oss/gstosselement.h:
- Improve documentation for 'bps'.
- * sys/v4l/TODO:
- Remove stuff about plugins that need removing - this was done
- ages ago.
- * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init),
- (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query):
- * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert),
- (gst_v4lsrc_src_query):
- * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
- (gst_v4l2src_src_convert), (gst_v4l2src_src_query):
- Add get_query_types(), get_formats() and query() functions.
-
-2003-12-21 Thomas Vander Stichele <thomas at apestaart dot org>
-
- * ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins
- * moved CVS to freedesktop.org
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
+++ /dev/null
-When porting a plugin start with 0.8 CVS head, not the old code in this module. There are many bugfixes which have gone into 0.8 which you want to keep.
-
-List of ported plugins (update when you commit a ported plugin):
-effectv (wim)
-mad (wim)
-videofilter (wim)
-aalib (wim)
-libcaca (zeeshan)
-law (wim)
-shout2 (zaheer) - not fully tested
-esdsink (arwed)
-
-osssink is partially done in the threaded branch (wim)
-
-- Remember that some plugins are already ported and now in the gst-plugins-base module.
-
-When you have ported a plugin remember to copy the relevant parts from configure.ac.orig into configure.ac and re-enable it in the Makefile.am files.
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-a52dec
- * @title: a52dec
- *
- * Dolby Digital (AC-3) audio decoder.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 dvdreadsrc title=1 ! mpegpsdemux ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Play audio part of a dvd title.
- * |[
- * gst-launch-1.0 filesrc location=abc.ac3 ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Decode and play a stand alone AC-3 file.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <gst/gst.h>
-
-#include <a52dec/a52.h>
-#if !defined(A52_ACCEL_DETECT)
-# include <a52dec/mm_accel.h>
-#endif
-#include "gsta52dec.h"
-
-#if HAVE_ORC
-#include <orc/orc.h>
-#endif
-
-#ifdef LIBA52_DOUBLE
-#define SAMPLE_WIDTH 64
-#define SAMPLE_FORMAT GST_AUDIO_NE(F64)
-#define SAMPLE_TYPE GST_AUDIO_FORMAT_F64
-#else
-#define SAMPLE_WIDTH 32
-#define SAMPLE_FORMAT GST_AUDIO_NE(F32)
-#define SAMPLE_TYPE GST_AUDIO_FORMAT_F32
-#endif
-
-GST_DEBUG_CATEGORY_STATIC (a52dec_debug);
-#define GST_CAT_DEFAULT (a52dec_debug)
-
-/* A52Dec args */
-enum
-{
- ARG_0,
- ARG_DRC,
- ARG_MODE,
- ARG_LFE,
-};
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-ac3; audio/ac3; audio/x-private1-ac3")
- );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, "
- "format = (string) " SAMPLE_FORMAT ", "
- "layout = (string) interleaved, "
- "rate = (int) [ 4000, 96000 ], " "channels = (int) [ 1, 6 ]")
- );
-
-static gboolean a52_element_init (GstPlugin * plugin);
-
-#define gst_a52dec_parent_class parent_class
-G_DEFINE_TYPE (GstA52Dec, gst_a52dec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (a52dec, a52_element_init);
-
-static gboolean gst_a52dec_start (GstAudioDecoder * dec);
-static gboolean gst_a52dec_stop (GstAudioDecoder * dec);
-static gboolean gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps);
-static GstFlowReturn gst_a52dec_parse (GstAudioDecoder * dec,
- GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_a52dec_handle_frame (GstAudioDecoder * dec,
- GstBuffer * buffer);
-
-static GstFlowReturn gst_a52dec_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-static void gst_a52dec_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_a52dec_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-#define GST_TYPE_A52DEC_MODE (gst_a52dec_mode_get_type())
-static GType
-gst_a52dec_mode_get_type (void)
-{
- static GType a52dec_mode_type = 0;
- static const GEnumValue a52dec_modes[] = {
- {A52_MONO, "Mono", "mono"},
- {A52_STEREO, "Stereo", "stereo"},
- {A52_3F, "3 Front", "3f"},
- {A52_2F1R, "2 Front, 1 Rear", "2f1r"},
- {A52_3F1R, "3 Front, 1 Rear", "3f1r"},
- {A52_2F2R, "2 Front, 2 Rear", "2f2r"},
- {A52_3F2R, "3 Front, 2 Rear", "3f2r"},
- {A52_DOLBY, "Dolby", "dolby"},
- {0, NULL, NULL},
- };
-
- if (!a52dec_mode_type) {
- a52dec_mode_type = g_enum_register_static ("GstA52DecMode", a52dec_modes);
- }
- return a52dec_mode_type;
-}
-
-static void
-gst_a52dec_class_init (GstA52DecClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstAudioDecoderClass *gstbase_class;
- guint cpuflags = 0;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
- gstbase_class = (GstAudioDecoderClass *) klass;
-
- gobject_class->set_property = gst_a52dec_set_property;
- gobject_class->get_property = gst_a52dec_get_property;
-
- gstbase_class->start = GST_DEBUG_FUNCPTR (gst_a52dec_start);
- gstbase_class->stop = GST_DEBUG_FUNCPTR (gst_a52dec_stop);
- gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_a52dec_set_format);
- gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_a52dec_parse);
- gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_a52dec_handle_frame);
-
- /**
- * GstA52Dec::drc
- *
- * Set to true to apply the recommended Dolby Digital dynamic range compression
- * to the audio stream. Dynamic range compression makes loud sounds
- * softer and soft sounds louder, so you can more easily listen
- * to the stream without disturbing other people.
- */
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DRC,
- g_param_spec_boolean ("drc", "Dynamic Range Compression",
- "Use Dynamic Range Compression", FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- /**
- * GstA52Dec::mode
- *
- * Force a particular output channel configuration from the decoder. By default,
- * the channel downmix (if any) is chosen automatically based on the downstream
- * capabilities of the pipeline.
- */
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODE,
- g_param_spec_enum ("mode", "Decoder Mode", "Decoding Mode (default 3f2r)",
- GST_TYPE_A52DEC_MODE, A52_3F2R,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- /**
- * GstA52Dec::lfe
- *
- * Whether to output the LFE (Low Frequency Emitter) channel of the audio stream.
- */
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LFE,
- g_param_spec_boolean ("lfe", "LFE", "LFE", TRUE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
- gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
- gst_element_class_set_static_metadata (gstelement_class,
- "ATSC A/52 audio decoder", "Codec/Decoder/Audio/Converter",
- "Decodes ATSC A/52 encoded audio streams",
- "David I. Lehn <dlehn@users.sourceforge.net>");
-
- GST_DEBUG_CATEGORY_INIT (a52dec_debug, "a52dec", 0,
- "AC3/A52 software decoder");
-
- /* If no CPU instruction based acceleration is available, end up using the
- * generic software djbfft based one when available in the used liba52 */
-#ifdef MM_ACCEL_DJBFFT
- klass->a52_cpuflags = MM_ACCEL_DJBFFT;
-#elif defined(A52_ACCEL_DETECT)
- klass->a52_cpuflags = A52_ACCEL_DETECT;
-#else
- klass->a52_cpuflags = 0;
-#endif
-
-#if HAVE_ORC && !defined(A52_ACCEL_DETECT)
- cpuflags = orc_target_get_default_flags (orc_target_get_by_name ("mmx"));
- if (cpuflags & ORC_TARGET_MMX_MMX)
- klass->a52_cpuflags |= MM_ACCEL_X86_MMX;
- if (cpuflags & ORC_TARGET_MMX_3DNOW)
- klass->a52_cpuflags |= MM_ACCEL_X86_3DNOW;
- if (cpuflags & ORC_TARGET_MMX_MMXEXT)
- klass->a52_cpuflags |= MM_ACCEL_X86_MMXEXT;
-#endif
-
- GST_LOG ("CPU flags: a52=%08x, orc=%08x", klass->a52_cpuflags, cpuflags);
-
- gst_type_mark_as_plugin_api (GST_TYPE_A52DEC_MODE, 0);
-}
-
-static void
-gst_a52dec_init (GstA52Dec * a52dec)
-{
- a52dec->request_channels = A52_CHANNEL;
- a52dec->dynamic_range_compression = FALSE;
-
- a52dec->state = NULL;
- a52dec->samples = NULL;
-
- gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
- (a52dec), TRUE);
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (a52dec));
-
- /* retrieve and intercept base class chain.
- * Quite HACKish, but that's dvd specs/caps for you,
- * since one buffer needs to be split into 2 frames */
- a52dec->base_chain = GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (a52dec));
- gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (a52dec),
- GST_DEBUG_FUNCPTR (gst_a52dec_chain));
-}
-
-static gboolean
-gst_a52dec_start (GstAudioDecoder * dec)
-{
- GstA52Dec *a52dec = GST_A52DEC (dec);
- GstA52DecClass *klass;
- static GMutex init_mutex;
-
- GST_DEBUG_OBJECT (dec, "start");
-
- klass = GST_A52DEC_CLASS (G_OBJECT_GET_CLASS (a52dec));
- g_mutex_lock (&init_mutex);
-#if defined(A52_ACCEL_DETECT)
- a52dec->state = a52_init ();
- /* This line is just to avoid being accused of not using klass */
- a52_accel (klass->a52_cpuflags & A52_ACCEL_DETECT);
-#else
- a52dec->state = a52_init (klass->a52_cpuflags);
-#endif
- g_mutex_unlock (&init_mutex);
-
- if (!a52dec->state) {
- GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), LIBRARY, INIT, (NULL),
- ("failed to initialize a52 state"));
- return FALSE;
- }
-
- a52dec->samples = a52_samples (a52dec->state);
- a52dec->bit_rate = -1;
- a52dec->sample_rate = -1;
- a52dec->stream_channels = A52_CHANNEL;
- a52dec->using_channels = A52_CHANNEL;
- a52dec->level = 1;
- a52dec->bias = 0;
- a52dec->flag_update = TRUE;
-
- /* call upon legacy upstream byte support (e.g. seeking) */
- gst_audio_decoder_set_estimate_rate (dec, TRUE);
-
- return TRUE;
-}
-
-static gboolean
-gst_a52dec_stop (GstAudioDecoder * dec)
-{
- GstA52Dec *a52dec = GST_A52DEC (dec);
-
- GST_DEBUG_OBJECT (dec, "stop");
-
- a52dec->samples = NULL;
- if (a52dec->state) {
- a52_free (a52dec->state);
- a52dec->state = NULL;
- }
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_a52dec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
- gint * _offset, gint * len)
-{
- GstA52Dec *a52dec;
- const guint8 *data;
- gint av, size;
- gint length = 0, flags, sample_rate, bit_rate;
- GstFlowReturn result = GST_FLOW_EOS;
-
- a52dec = GST_A52DEC (bdec);
-
- size = av = gst_adapter_available (adapter);
- data = (const guint8 *) gst_adapter_map (adapter, av);
-
- /* find and read header */
- bit_rate = a52dec->bit_rate;
- sample_rate = a52dec->sample_rate;
- flags = 0;
- while (size >= 7) {
- length = a52_syncinfo ((guint8 *) data, &flags, &sample_rate, &bit_rate);
-
- if (length == 0) {
- /* shift window to re-find sync */
- data++;
- size--;
- } else if (length <= size) {
- GST_LOG_OBJECT (a52dec, "Sync: frame size %d", length);
- result = GST_FLOW_OK;
- break;
- } else {
- GST_LOG_OBJECT (a52dec, "Not enough data available (needed %d had %d)",
- length, size);
- break;
- }
- }
- gst_adapter_unmap (adapter);
-
- *_offset = av - size;
- *len = length;
-
- return result;
-}
-
-static gint
-gst_a52dec_channels (int flags, GstAudioChannelPosition * pos)
-{
- gint chans = 0;
-
- if (flags & A52_LFE) {
- chans += 1;
- if (pos) {
- pos[0] = GST_AUDIO_CHANNEL_POSITION_LFE1;
- }
- }
- flags &= A52_CHANNEL_MASK;
- switch (flags) {
- case A52_3F2R:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
- pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
- pos[4 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
- }
- chans += 5;
- break;
- case A52_2F2R:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
- pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
- }
- chans += 4;
- break;
- case A52_3F1R:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
- pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
- }
- chans += 4;
- break;
- case A52_2F1R:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
- }
- chans += 3;
- break;
- case A52_3F:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
- pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- }
- chans += 3;
- break;
- case A52_CHANNEL: /* Dual mono. Should really be handled as 2 src pads */
- case A52_STEREO:
- case A52_DOLBY:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- }
- chans += 2;
- break;
- case A52_MONO:
- if (pos) {
- pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_MONO;
- }
- chans += 1;
- break;
- default:
- /* error, caller should post error message */
- return 0;
- }
-
- return chans;
-}
-
-static gboolean
-gst_a52dec_reneg (GstA52Dec * a52dec)
-{
- gint channels;
- gboolean result = FALSE;
- GstAudioChannelPosition from[6], to[6];
- GstAudioInfo info;
-
- channels = gst_a52dec_channels (a52dec->using_channels, from);
-
- if (!channels)
- goto done;
-
- GST_INFO_OBJECT (a52dec, "reneg channels:%d rate:%d",
- channels, a52dec->sample_rate);
-
- memcpy (to, from, sizeof (GstAudioChannelPosition) * channels);
- gst_audio_channel_positions_to_valid_order (to, channels);
- gst_audio_get_channel_reorder_map (channels, from, to,
- a52dec->channel_reorder_map);
-
- gst_audio_info_init (&info);
- gst_audio_info_set_format (&info,
- SAMPLE_TYPE, a52dec->sample_rate, channels, (channels > 1 ? to : NULL));
-
- if (!gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (a52dec), &info))
- goto done;
-
- result = TRUE;
-
-done:
- return result;
-}
-
-static void
-gst_a52dec_update_streaminfo (GstA52Dec * a52dec)
-{
- GstTagList *taglist;
-
- taglist = gst_tag_list_new_empty ();
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE,
- (guint) a52dec->bit_rate, NULL);
-
- gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist,
- GST_TAG_MERGE_REPLACE);
- gst_tag_list_unref (taglist);
-}
-
-static GstFlowReturn
-gst_a52dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buffer)
-{
- GstA52Dec *a52dec;
- gint channels, i;
- gboolean need_reneg = FALSE;
- gint chans;
- gint length = 0, flags, sample_rate, bit_rate;
- GstMapInfo map;
- GstFlowReturn result = GST_FLOW_OK;
- GstBuffer *outbuf;
- const gint num_blocks = 6;
-
- a52dec = GST_A52DEC (bdec);
-
- /* no fancy draining */
- if (G_UNLIKELY (!buffer))
- return GST_FLOW_OK;
-
- /* parsed stuff already, so this should work out fine */
- gst_buffer_map (buffer, &map, GST_MAP_READ);
- g_assert (map.size >= 7);
-
- /* re-obtain some sync header info,
- * should be same as during _parse and could also be cached there,
- * but anyway ... */
- bit_rate = a52dec->bit_rate;
- sample_rate = a52dec->sample_rate;
- flags = 0;
- length = a52_syncinfo (map.data, &flags, &sample_rate, &bit_rate);
- g_assert (length == map.size);
-
- /* update stream information, renegotiate or re-streaminfo if needed */
- need_reneg = FALSE;
- if (a52dec->sample_rate != sample_rate) {
- GST_DEBUG_OBJECT (a52dec, "sample rate changed");
- need_reneg = TRUE;
- a52dec->sample_rate = sample_rate;
- }
-
- if (flags) {
- if (a52dec->stream_channels != (flags & (A52_CHANNEL_MASK | A52_LFE))) {
- GST_DEBUG_OBJECT (a52dec, "stream channel flags changed, marking update");
- a52dec->flag_update = TRUE;
- }
- a52dec->stream_channels = flags & (A52_CHANNEL_MASK | A52_LFE);
- }
-
- if (bit_rate != a52dec->bit_rate) {
- a52dec->bit_rate = bit_rate;
- gst_a52dec_update_streaminfo (a52dec);
- }
-
- /* If we haven't had an explicit number of channels chosen through properties
- * at this point, choose what to downmix to now, based on what the peer will
- * accept - this allows a52dec to do downmixing in preference to a
- * downstream element such as audioconvert.
- */
- if (a52dec->request_channels != A52_CHANNEL) {
- flags = a52dec->request_channels;
- } else if (a52dec->flag_update) {
- GstCaps *caps;
-
- a52dec->flag_update = FALSE;
-
- caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (a52dec));
- if (caps && gst_caps_get_size (caps) > 0) {
- GstCaps *copy = gst_caps_copy_nth (caps, 0);
- GstStructure *structure = gst_caps_get_structure (copy, 0);
- gint orig_channels = flags ? gst_a52dec_channels (flags, NULL) : 6;
- gint fixed_channels = 0;
- const int a52_channels[6] = {
- A52_MONO,
- A52_STEREO,
- A52_STEREO | A52_LFE,
- A52_2F2R,
- A52_2F2R | A52_LFE,
- A52_3F2R | A52_LFE,
- };
-
- /* Prefer the original number of channels, but fixate to something
- * preferred (first in the caps) downstream if possible.
- */
- gst_structure_fixate_field_nearest_int (structure, "channels",
- orig_channels);
-
- if (gst_structure_get_int (structure, "channels", &fixed_channels)
- && fixed_channels <= 6) {
- if (fixed_channels < orig_channels)
- flags = a52_channels[fixed_channels - 1];
- } else {
- flags = a52_channels[5];
- }
-
- gst_caps_unref (copy);
- } else if (flags)
- flags = a52dec->stream_channels;
- else
- flags = A52_3F2R | A52_LFE;
-
- if (caps)
- gst_caps_unref (caps);
- } else {
- flags = a52dec->using_channels;
- }
-
- /* process */
- flags |= A52_ADJUST_LEVEL;
- a52dec->level = 1;
- if (a52_frame (a52dec->state, map.data, &flags, &a52dec->level, a52dec->bias)) {
- gst_buffer_unmap (buffer, &map);
- GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
- ("a52_frame error"), result);
- goto exit;
- }
- gst_buffer_unmap (buffer, &map);
-
- channels = flags & (A52_CHANNEL_MASK | A52_LFE);
- if (a52dec->using_channels != channels) {
- need_reneg = TRUE;
- a52dec->using_channels = channels;
- }
-
- /* negotiate if required */
- if (need_reneg) {
- GST_DEBUG_OBJECT (a52dec,
- "a52dec reneg: sample_rate:%d stream_chans:%d using_chans:%d",
- a52dec->sample_rate, a52dec->stream_channels, a52dec->using_channels);
- if (!gst_a52dec_reneg (a52dec))
- goto failed_negotiation;
- }
-
- if (a52dec->dynamic_range_compression == FALSE) {
- a52_dynrng (a52dec->state, NULL, NULL);
- }
-
- flags &= (A52_CHANNEL_MASK | A52_LFE);
- chans = gst_a52dec_channels (flags, NULL);
- if (!chans)
- goto invalid_flags;
-
- /* handle decoded data;
- * each frame has 6 blocks, one block is 256 samples, ea */
- outbuf =
- gst_buffer_new_and_alloc (256 * chans * (SAMPLE_WIDTH / 8) * num_blocks);
-
- gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
- {
- guint8 *ptr = map.data;
- for (i = 0; i < num_blocks; i++) {
- if (a52_block (a52dec->state)) {
- /* also marks discont */
- GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
- ("error decoding block %d", i), result);
- if (result != GST_FLOW_OK) {
- gst_buffer_unmap (outbuf, &map);
- gst_buffer_unref (outbuf);
- goto exit;
- }
- } else {
- gint n, c;
- gint *reorder_map = a52dec->channel_reorder_map;
-
- for (n = 0; n < 256; n++) {
- for (c = 0; c < chans; c++) {
- ((sample_t *) ptr)[n * chans + reorder_map[c]] =
- a52dec->samples[c * 256 + n];
- }
- }
- }
- ptr += 256 * chans * (SAMPLE_WIDTH / 8);
- }
- }
- gst_buffer_unmap (outbuf, &map);
-
- result = gst_audio_decoder_finish_frame (bdec, outbuf, 1);
-
-exit:
- return result;
-
- /* ERRORS */
-failed_negotiation:
- {
- GST_ELEMENT_ERROR (a52dec, CORE, NEGOTIATION, (NULL), (NULL));
- return GST_FLOW_ERROR;
- }
-invalid_flags:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
- ("Invalid channel flags: %d", flags));
- return GST_FLOW_ERROR;
- }
-}
-
-static gboolean
-gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
-{
- GstA52Dec *a52dec = GST_A52DEC (bdec);
- GstStructure *structure;
-
- structure = gst_caps_get_structure (caps, 0);
-
- if (structure && gst_structure_has_name (structure, "audio/x-private1-ac3"))
- a52dec->dvdmode = TRUE;
- else
- a52dec->dvdmode = FALSE;
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_a52dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstA52Dec *a52dec = GST_A52DEC (parent);
- GstFlowReturn ret = GST_FLOW_OK;
- gint first_access;
-
- if (a52dec->dvdmode) {
- gsize size;
- guint8 data[2];
- gint offset;
- gint len;
- GstBuffer *subbuf;
-
- size = gst_buffer_get_size (buf);
- if (size < 2)
- goto not_enough_data;
-
- gst_buffer_extract (buf, 0, data, 2);
- first_access = (data[0] << 8) | data[1];
-
- /* Skip the first_access header */
- offset = 2;
-
- if (first_access > 1) {
- /* Length of data before first_access */
- len = first_access - 1;
-
- if (len <= 0 || offset + len > size)
- goto bad_first_access_parameter;
-
- subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
- ret = a52dec->base_chain (pad, parent, subbuf);
- if (ret != GST_FLOW_OK) {
- gst_buffer_unref (buf);
- goto done;
- }
-
- offset += len;
- len = size - offset;
-
- if (len > 0) {
- subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-
- ret = a52dec->base_chain (pad, parent, subbuf);
- }
- gst_buffer_unref (buf);
- } else {
- /* first_access = 0 or 1, so if there's a timestamp it applies to the first byte */
- subbuf =
- gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset,
- size - offset);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
- gst_buffer_unref (buf);
- ret = a52dec->base_chain (pad, parent, subbuf);
- }
- } else {
- ret = a52dec->base_chain (pad, parent, buf);
- }
-
-done:
- return ret;
-
-/* ERRORS */
-not_enough_data:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
- ("Insufficient data in buffer. Can't determine first_acess"));
- gst_buffer_unref (buf);
- return GST_FLOW_ERROR;
- }
-bad_first_access_parameter:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
- ("Bad first_access parameter (%d) in buffer", first_access));
- gst_buffer_unref (buf);
- return GST_FLOW_ERROR;
- }
-}
-
-static void
-gst_a52dec_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstA52Dec *src = GST_A52DEC (object);
-
- switch (prop_id) {
- case ARG_DRC:
- GST_OBJECT_LOCK (src);
- src->dynamic_range_compression = g_value_get_boolean (value);
- GST_OBJECT_UNLOCK (src);
- break;
- case ARG_MODE:
- GST_OBJECT_LOCK (src);
- src->request_channels &= ~A52_CHANNEL_MASK;
- src->request_channels |= g_value_get_enum (value);
- GST_OBJECT_UNLOCK (src);
- break;
- case ARG_LFE:
- GST_OBJECT_LOCK (src);
- src->request_channels &= ~A52_LFE;
- src->request_channels |= g_value_get_boolean (value) ? A52_LFE : 0;
- GST_OBJECT_UNLOCK (src);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_a52dec_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstA52Dec *src = GST_A52DEC (object);
-
- switch (prop_id) {
- case ARG_DRC:
- GST_OBJECT_LOCK (src);
- g_value_set_boolean (value, src->dynamic_range_compression);
- GST_OBJECT_UNLOCK (src);
- break;
- case ARG_MODE:
- GST_OBJECT_LOCK (src);
- g_value_set_enum (value, src->request_channels & A52_CHANNEL_MASK);
- GST_OBJECT_UNLOCK (src);
- break;
- case ARG_LFE:
- GST_OBJECT_LOCK (src);
- g_value_set_boolean (value, src->request_channels & A52_LFE);
- GST_OBJECT_UNLOCK (src);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-a52_element_init (GstPlugin * plugin)
-{
-#if HAVE_ORC
- orc_init ();
-#endif
-
- return gst_element_register (plugin, "a52dec", GST_RANK_SECONDARY,
- GST_TYPE_A52DEC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (a52dec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- a52dec,
- "Decodes ATSC A/52 encoded audio streams",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_A52DEC_H__
-#define __GST_A52DEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_A52DEC \
- (gst_a52dec_get_type())
-#define GST_A52DEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_A52DEC,GstA52Dec))
-#define GST_A52DEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_A52DEC,GstA52DecClass))
-#define GST_IS_A52DEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_A52DEC))
-#define GST_IS_A52DEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_A52DEC))
-
-typedef struct _GstA52Dec GstA52Dec;
-typedef struct _GstA52DecClass GstA52DecClass;
-
-struct _GstA52Dec {
- GstAudioDecoder element;
-
- GstPadChainFunction base_chain;
-
- gboolean dvdmode;
- gboolean flag_update;
- int prev_flags;
-
- /* stream properties */
- int bit_rate;
- int sample_rate;
- int stream_channels;
- int request_channels;
- int using_channels;
-
- gint channel_reorder_map[6];
-
- sample_t level;
- sample_t bias;
- gboolean dynamic_range_compression;
- sample_t *samples;
- a52_state_t *state;
-};
-
-struct _GstA52DecClass {
- GstAudioDecoderClass parent_class;
-
- guint32 a52_cpuflags;
-};
-
-GType gst_a52dec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (a52dec);
-
-#ifndef A52_MONO
-#define A52_MONO 1
-#endif
-#ifndef A52_STEREO
-#define A52_STEREO 2
-#endif
-#ifndef A52_3F
-#define A52_3F 3
-#endif
-#ifndef A52_2F1R
-#define A52_2F1R 4
-#endif
-#ifndef A52_3F1R
-#define A52_3F1R 5
-#endif
-#ifndef A52_2F2R
-#define A52_2F2R 6
-#endif
-#ifndef A52_3F2R
-#define A52_3F2R 7
-#endif
-#ifndef A52_DOLBY
-#define A52_DOLBY 10
-#endif
-
-G_END_DECLS
-
-#endif /* __GST_A52DEC_H__ */
+++ /dev/null
-if get_option('a52dec').disabled()
- subdir_done()
-endif
-
-a52_dep = cc.find_library('a52', required : get_option('a52dec'))
-have_a52_h = cc.has_header_symbol('a52dec/a52.h', 'a52_init', prefix : '#include <stdint.h>')
-if not have_a52_h and get_option('a52dec').enabled()
- error('a52dec plugin enabled but a52.h not found')
-endif
-
-if a52_dep.found() and have_a52_h
- a52dec = library('gsta52dec',
- 'gsta52dec.c',
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstaudio_dep, orc_dep, a52_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(a52dec, install_dir : plugins_pkgconfig_install_dir)
- plugins += [a52dec]
-endif
+++ /dev/null
-[_presets_]
-version=0.10
-element-name=GstAmrnbEnc
-
-[enhance-size]
-_meta/comment=Maximize compression, lowest bitrate
-band-mode=0
-
-[enhance-quality]
-_meta/comment=Maximize quality, highest bitrate
-band-mode=7
+++ /dev/null
-Compiling AMRNB:
-================
-
-To compile the amrnb plugin, you need the opencore-amrnb development package.
-If your distribution does not provide this package, you can download the
-source code from "http://sourceforge.net/projects/opencore-amr".
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrnbdec.h"
-#include "amrnbenc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gboolean ret = FALSE;
-
- ret |= GST_ELEMENT_REGISTER (amrnbdec, plugin);
- ret |= GST_ELEMENT_REGISTER (amrnbenc, plugin);
-
- return ret;
-}
-
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- amrnb,
- "Adaptive Multi-Rate Narrow-Band",
- plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
- GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrnbdec
- * @title: amrnbdec
- * @see_also: #GstAmrnbEnc, #GstAmrParse
- *
- * AMR narrowband decoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrnbdec ! audioconvert ! audioresample ! autoaudiosink
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrnbdec.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
- );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
- "layout = (string) interleaved, "
- "rate = (int) 8000," "channels = (int) 1")
- );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrnbdec_debug);
-#define GST_CAT_DEFAULT gst_amrnbdec_debug
-
-static const gint block_size_if1[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5,
- 0, 0, 0, 0, 0, 0, 0
-};
-
-static const gint block_size_if2[16] = { 12, 13, 15, 17, 18, 20, 25, 30, 5,
- 0, 0, 0, 0, 0, 0, 0
-};
-
-static GType
-gst_amrnb_variant_get_type (void)
-{
- static GType gst_amrnb_variant_type = 0;
- static const GEnumValue gst_amrnb_variant[] = {
- {GST_AMRNB_VARIANT_IF1, "IF1", "IF1"},
- {GST_AMRNB_VARIANT_IF2, "IF2", "IF2"},
- {0, NULL, NULL},
- };
- if (!gst_amrnb_variant_type) {
- gst_amrnb_variant_type =
- g_enum_register_static ("GstAmrnbVariant", gst_amrnb_variant);
- }
- return gst_amrnb_variant_type;
-}
-
-#define GST_AMRNB_VARIANT_TYPE (gst_amrnb_variant_get_type())
-
-#define VARIANT_DEFAULT GST_AMRNB_VARIANT_IF1
-enum
-{
- PROP_0,
- PROP_VARIANT
-};
-
-static void gst_amrnbdec_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_amrnbdec_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static gboolean gst_amrnbdec_start (GstAudioDecoder * dec);
-static gboolean gst_amrnbdec_stop (GstAudioDecoder * dec);
-static gboolean gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
-static GstFlowReturn gst_amrnbdec_parse (GstAudioDecoder * dec,
- GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_amrnbdec_handle_frame (GstAudioDecoder * dec,
- GstBuffer * buffer);
-
-#define gst_amrnbdec_parent_class parent_class
-G_DEFINE_TYPE (GstAmrnbDec, gst_amrnbdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (amrnbdec, "amrnbdec", GST_RANK_PRIMARY,
- GST_TYPE_AMRNBDEC);
-
-static void
-gst_amrnbdec_class_init (GstAmrnbDecClass * klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
-
- object_class->set_property = gst_amrnbdec_set_property;
- object_class->get_property = gst_amrnbdec_get_property;
-
- gst_element_class_add_static_pad_template (element_class, &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
-
- gst_element_class_set_static_metadata (element_class, "AMR-NB audio decoder",
- "Codec/Decoder/Audio",
- "Adaptive Multi-Rate Narrow-Band audio decoder",
- "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
-
- base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbdec_start);
- base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbdec_stop);
- base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbdec_set_format);
- base_class->parse = GST_DEBUG_FUNCPTR (gst_amrnbdec_parse);
- base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbdec_handle_frame);
-
- g_object_class_install_property (object_class, PROP_VARIANT,
- g_param_spec_enum ("variant", "Variant",
- "The decoder variant", GST_AMRNB_VARIANT_TYPE,
- VARIANT_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
- GST_DEBUG_CATEGORY_INIT (gst_amrnbdec_debug, "amrnbdec", 0,
- "AMR-NB audio decoder");
-
- gst_type_mark_as_plugin_api (GST_AMRNB_VARIANT_TYPE, 0);
-}
-
-static void
-gst_amrnbdec_init (GstAmrnbDec * amrnbdec)
-{
- gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrnbdec), TRUE);
- gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
- (amrnbdec), TRUE);
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrnbdec));
-}
-
-static gboolean
-gst_amrnbdec_start (GstAudioDecoder * dec)
-{
- GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
-
- GST_DEBUG_OBJECT (dec, "start");
- if (!(amrnbdec->handle = Decoder_Interface_init ()))
- return FALSE;
-
- amrnbdec->rate = 0;
- amrnbdec->channels = 0;
-
- return TRUE;
-}
-
-static gboolean
-gst_amrnbdec_stop (GstAudioDecoder * dec)
-{
- GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
-
- GST_DEBUG_OBJECT (dec, "stop");
- Decoder_Interface_exit (amrnbdec->handle);
-
- return TRUE;
-}
-
-static void
-gst_amrnbdec_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstAmrnbDec *self = GST_AMRNBDEC (object);
-
- switch (prop_id) {
- case PROP_VARIANT:
- self->variant = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- return;
-}
-
-static void
-gst_amrnbdec_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstAmrnbDec *self = GST_AMRNBDEC (object);
-
- switch (prop_id) {
- case PROP_VARIANT:
- g_value_set_enum (value, self->variant);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- return;
-}
-
-static gboolean
-gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
-{
- GstStructure *structure;
- GstAmrnbDec *amrnbdec;
- GstAudioInfo info;
-
- amrnbdec = GST_AMRNBDEC (dec);
-
- structure = gst_caps_get_structure (caps, 0);
-
- /* get channel count */
- gst_structure_get_int (structure, "channels", &amrnbdec->channels);
- gst_structure_get_int (structure, "rate", &amrnbdec->rate);
-
- /* create reverse caps */
- gst_audio_info_init (&info);
- gst_audio_info_set_format (&info,
- GST_AUDIO_FORMAT_S16, amrnbdec->rate, amrnbdec->channels, NULL);
-
- return gst_audio_decoder_set_output_format (dec, &info);
-}
-
-static GstFlowReturn
-gst_amrnbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
- gint * offset, gint * length)
-{
- GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
- guint8 head[1];
- guint size;
- gboolean sync, eos;
- gint block, mode;
-
- size = gst_adapter_available (adapter);
- if (size < 1)
- return GST_FLOW_ERROR;
-
- gst_audio_decoder_get_parse_state (dec, &sync, &eos);
-
- /* need to peek data to get the size */
- gst_adapter_copy (adapter, head, 0, 1);
-
- /* get size */
- switch (amrnbdec->variant) {
- case GST_AMRNB_VARIANT_IF1:
- mode = (head[0] >> 3) & 0x0F;
- block = block_size_if1[mode] + 1;
- break;
- case GST_AMRNB_VARIANT_IF2:
- mode = head[0] & 0x0F;
- block = block_size_if2[mode] + 1;
- break;
- default:
- g_assert_not_reached ();
- return GST_FLOW_ERROR;
- break;
- }
-
- GST_DEBUG_OBJECT (amrnbdec, "mode %d, block %d", mode, block);
-
- if (block > size)
- return GST_FLOW_EOS;
-
- *offset = 0;
- *length = block;
-
- return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_amrnbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
-{
- GstAmrnbDec *amrnbdec;
- GstMapInfo inmap, outmap;
- GstBuffer *out;
-
- amrnbdec = GST_AMRNBDEC (dec);
-
- /* no fancy flushing */
- if (!buffer || !gst_buffer_get_size (buffer))
- return GST_FLOW_OK;
-
- gst_buffer_map (buffer, &inmap, GST_MAP_READ);
-
- /* get output */
- out = gst_buffer_new_and_alloc (160 * 2);
- /* decode */
- gst_buffer_map (out, &outmap, GST_MAP_WRITE);
- Decoder_Interface_Decode (amrnbdec->handle, inmap.data,
- (gint16 *) outmap.data, 0);
- gst_buffer_unmap (out, &outmap);
-
- gst_buffer_unmap (buffer, &inmap);
-
- return gst_audio_decoder_finish_frame (dec, out, 1);
-}
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_AMRNBDEC_H__
-#define __GST_AMRNBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-#include <opencore-amrnb/interf_dec.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRNBDEC \
- (gst_amrnbdec_get_type())
-#define GST_AMRNBDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBDEC, GstAmrnbDec))
-#define GST_AMRNBDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBDEC, GstAmrnbDecClass))
-#define GST_IS_AMRNBDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBDEC))
-#define GST_IS_AMRNBDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBDEC))
-
-typedef struct _GstAmrnbDec GstAmrnbDec;
-typedef struct _GstAmrnbDecClass GstAmrnbDecClass;
-
-typedef enum
-{
- GST_AMRNB_VARIANT_IF1,
- GST_AMRNB_VARIANT_IF2
-} GstAmrnbVariant;
-
-struct _GstAmrnbDec {
- GstAudioDecoder element;
-
- GstAmrnbVariant variant;
-
- /* library handle */
- void *handle;
-
- /* output settings */
- gint channels, rate;
-};
-
-struct _GstAmrnbDecClass {
- GstAudioDecoderClass parent_class;
-};
-
-GType gst_amrnbdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrnbdec);
-
-G_END_DECLS
-
-#endif /* __GST_AMRNBDEC_H__ */
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrnbenc
- * @title: amrnbenc
- * @see_also: #GstAmrnbDec, #GstAmrnbParse
- *
- * AMR narrowband encoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.wav ! wavparse ! audioconvert ! audioresample ! amrnbenc ! filesink location=abc.amr
- * ]|
- * Please note that the above stream misses the header, that is needed to play
- * the stream.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrnbenc.h"
-
-static GType
-gst_amrnbenc_bandmode_get_type (void)
-{
- static GType gst_amrnbenc_bandmode_type = 0;
- static const GEnumValue gst_amrnbenc_bandmode[] = {
- {MR475, "MR475", "MR475"},
- {MR515, "MR515", "MR515"},
- {MR59, "MR59", "MR59"},
- {MR67, "MR67", "MR67"},
- {MR74, "MR74", "MR74"},
- {MR795, "MR795", "MR795"},
- {MR102, "MR102", "MR102"},
- {MR122, "MR122", "MR122"},
- {MRDTX, "MRDTX", "MRDTX"},
- {0, NULL, NULL},
- };
- if (!gst_amrnbenc_bandmode_type) {
- gst_amrnbenc_bandmode_type =
- g_enum_register_static ("GstAmrnbEncBandMode", gst_amrnbenc_bandmode);
- }
- return gst_amrnbenc_bandmode_type;
-}
-
-#define GST_AMRNBENC_BANDMODE_TYPE (gst_amrnbenc_bandmode_get_type())
-
-#define BANDMODE_DEFAULT MR122
-enum
-{
- PROP_0,
- PROP_BANDMODE
-};
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
- "layout = (string) interleaved, "
- "rate = (int) 8000," "channels = (int) 1")
- );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
- );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrnbenc_debug);
-#define GST_CAT_DEFAULT gst_amrnbenc_debug
-
-static gboolean gst_amrnbenc_start (GstAudioEncoder * enc);
-static gboolean gst_amrnbenc_stop (GstAudioEncoder * enc);
-static gboolean gst_amrnbenc_set_format (GstAudioEncoder * enc,
- GstAudioInfo * info);
-static GstFlowReturn gst_amrnbenc_handle_frame (GstAudioEncoder * enc,
- GstBuffer * in_buf);
-
-#define gst_amrnbenc_parent_class parent_class
-G_DEFINE_TYPE (GstAmrnbEnc, gst_amrnbenc, GST_TYPE_AUDIO_ENCODER);
-GST_ELEMENT_REGISTER_DEFINE (amrnbenc, "amrnbenc", GST_RANK_SECONDARY,
- GST_TYPE_AMRNBENC);
-
-static void
-gst_amrnbenc_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstAmrnbEnc *self = GST_AMRNBENC (object);
-
- switch (prop_id) {
- case PROP_BANDMODE:
- self->bandmode = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- return;
-}
-
-static void
-gst_amrnbenc_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstAmrnbEnc *self = GST_AMRNBENC (object);
-
- switch (prop_id) {
- case PROP_BANDMODE:
- g_value_set_enum (value, self->bandmode);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- return;
-}
-
-static void
-gst_amrnbenc_class_init (GstAmrnbEncClass * klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
-
- object_class->set_property = gst_amrnbenc_set_property;
- object_class->get_property = gst_amrnbenc_get_property;
-
- base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbenc_start);
- base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbenc_stop);
- base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbenc_set_format);
- base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbenc_handle_frame);
-
- g_object_class_install_property (object_class, PROP_BANDMODE,
- g_param_spec_enum ("band-mode", "Band Mode",
- "Encoding Band Mode (Kbps)", GST_AMRNBENC_BANDMODE_TYPE,
- BANDMODE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
- gst_element_class_add_static_pad_template (element_class, &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
-
- gst_element_class_set_static_metadata (element_class, "AMR-NB audio encoder",
- "Codec/Encoder/Audio",
- "Adaptive Multi-Rate Narrow-Band audio encoder",
- "Wim Taymans <wim.taymans@gmail.com>");
-
- GST_DEBUG_CATEGORY_INIT (gst_amrnbenc_debug, "amrnbenc", 0,
- "AMR-NB audio encoder");
-
- gst_type_mark_as_plugin_api (GST_AMRNBENC_BANDMODE_TYPE, 0);
-}
-
-static void
-gst_amrnbenc_init (GstAmrnbEnc * amrnbenc)
-{
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (amrnbenc));
-}
-
-static gboolean
-gst_amrnbenc_start (GstAudioEncoder * enc)
-{
- GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
-
- GST_DEBUG_OBJECT (amrnbenc, "start");
-
- if (!(amrnbenc->handle = Encoder_Interface_init (0)))
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-gst_amrnbenc_stop (GstAudioEncoder * enc)
-{
- GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
-
- GST_DEBUG_OBJECT (amrnbenc, "stop");
-
- Encoder_Interface_exit (amrnbenc->handle);
-
- return TRUE;
-}
-
-static gboolean
-gst_amrnbenc_set_format (GstAudioEncoder * enc, GstAudioInfo * info)
-{
- GstAmrnbEnc *amrnbenc;
- GstCaps *copy;
-
- amrnbenc = GST_AMRNBENC (enc);
-
- /* parameters already parsed for us */
- amrnbenc->rate = GST_AUDIO_INFO_RATE (info);
- amrnbenc->channels = GST_AUDIO_INFO_CHANNELS (info);
-
- /* we do not really accept other input, but anyway ... */
- /* this is not wrong but will sound bad */
- if (amrnbenc->channels != 1) {
- g_warning ("amrnbdec is only optimized for mono channels");
- }
- if (amrnbenc->rate != 8000) {
- g_warning ("amrnbdec is only optimized for 8000 Hz samplerate");
- }
-
- /* create reverse caps */
- copy = gst_caps_new_simple ("audio/AMR",
- "channels", G_TYPE_INT, amrnbenc->channels,
- "rate", G_TYPE_INT, amrnbenc->rate, NULL);
-
- gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (amrnbenc), copy);
- gst_caps_unref (copy);
-
- /* report needs to base class: hand one frame at a time */
- gst_audio_encoder_set_frame_samples_min (enc, 160);
- gst_audio_encoder_set_frame_samples_max (enc, 160);
- gst_audio_encoder_set_frame_max (enc, 1);
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_amrnbenc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
-{
- GstAmrnbEnc *amrnbenc;
- GstFlowReturn ret;
- GstBuffer *out;
- GstMapInfo in_map, out_map;
- gsize out_size;
-
- amrnbenc = GST_AMRNBENC (enc);
-
- g_return_val_if_fail (amrnbenc->handle, GST_FLOW_FLUSHING);
-
- /* we don't deal with squeezing remnants, so simply discard those */
- if (G_UNLIKELY (buffer == NULL)) {
- GST_DEBUG_OBJECT (amrnbenc, "no data");
- return GST_FLOW_OK;
- }
-
- gst_buffer_map (buffer, &in_map, GST_MAP_READ);
-
- if (G_UNLIKELY (in_map.size < 320)) {
- gst_buffer_unmap (buffer, &in_map);
- GST_DEBUG_OBJECT (amrnbenc, "discarding trailing data of %" G_GSIZE_FORMAT
- " bytes", in_map.size);
- return gst_audio_encoder_finish_frame (enc, NULL, -1);
- }
-
- /* get output, max size is 32 */
- out = gst_buffer_new_and_alloc (32);
- /* AMR encoder actually writes into the source data buffers it gets */
- /* should be able to handle that with what we are given */
-
- gst_buffer_map (out, &out_map, GST_MAP_WRITE);
- /* encode */
- out_size =
- Encoder_Interface_Encode (amrnbenc->handle, amrnbenc->bandmode,
- (short *) in_map.data, out_map.data, 0);
- gst_buffer_unmap (out, &out_map);
- gst_buffer_resize (out, 0, out_size);
- gst_buffer_unmap (buffer, &in_map);
-
- GST_LOG_OBJECT (amrnbenc, "output data size %" G_GSIZE_FORMAT, out_size);
-
- if (out_size) {
- ret = gst_audio_encoder_finish_frame (enc, out, 160);
- } else {
- /* should not happen (without dtx or so at least) */
- GST_WARNING_OBJECT (amrnbenc, "no encoded data; discarding input");
- gst_buffer_unref (out);
- ret = gst_audio_encoder_finish_frame (enc, NULL, -1);
- }
-
- return ret;
-}
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_AMRNBENC_H__
-#define __GST_AMRNBENC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudioencoder.h>
-
-#include <opencore-amrnb/interf_enc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRNBENC \
- (gst_amrnbenc_get_type())
-#define GST_AMRNBENC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBENC, GstAmrnbEnc))
-#define GST_AMRNBENC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBENC, GstAmrnbEncClass))
-#define GST_IS_AMRNBENC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBENC))
-#define GST_IS_AMRNBENC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBENC))
-
-typedef struct _GstAmrnbEnc GstAmrnbEnc;
-typedef struct _GstAmrnbEncClass GstAmrnbEncClass;
-
-struct _GstAmrnbEnc {
- GstAudioEncoder element;
-
- /* library handle */
- void *handle;
-
- /* input settings */
- gint channels, rate;
- gint duration;
-
- /* property */
- enum Mode bandmode;
-};
-
-struct _GstAmrnbEncClass {
- GstAudioEncoderClass parent_class;
-};
-
-GType gst_amrnbenc_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrnbenc);
-
-G_END_DECLS
-
-#endif /* __GST_AMRNBENC_H__ */
+++ /dev/null
-amrnb_dep = dependency('opencore-amrnb', version : '>= 0.1.3', required : get_option('amrnb'))
-
-if amrnb_dep.found()
- amrnb = library('gstamrnb',
- ['amrnb.c', 'amrnbdec.c', 'amrnbenc.c'],
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstaudio_dep, amrnb_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(amrnb, install_dir : plugins_pkgconfig_install_dir)
- plugins += [amrnb]
- install_data(sources: 'GstAmrnbEnc.prs', install_dir: presetdir)
-endif
+++ /dev/null
-Compiling AMRWB decoder:
-========================
-
-To compile the amrwbdec plugin, you need the opencore-amrwb development
-package. If your distribution does not provide this package, you can
-download the source code from "http://sourceforge.net/projects/opencore-amr".
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) Decoder plugin
- * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrwbdec.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (amrwbdec, plugin);
-}
-
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- amrwbdec,
- "Adaptive Multi-Rate Wide-Band Decoder",
- plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
- GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrwbdec
- * @title: amrwbdec
- * @see_also: #GstAmrwbEnc
- *
- * AMR wideband decoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrwbdec ! audioconvert ! audioresample ! autoaudiosink
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/audio/audio.h>
-
-#include "amrwbdec.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/AMR-WB, "
- "rate = (int) 16000, " "channels = (int) 1")
- );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, "
- "format = (string) " GST_AUDIO_NE (S16) ", "
- "layout = (string) interleaved, "
- "rate = (int) 16000, " "channels = (int) 1")
- );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrwbdec_debug);
-#define GST_CAT_DEFAULT gst_amrwbdec_debug
-
-#define L_FRAME16k 320 /* Frame size at 16kHz */
-
-static const unsigned char block_size[16] =
- { 18, 24, 33, 37, 41, 47, 51, 59, 61,
- 6, 0, 0, 0, 0, 1, 1
-};
-
-static gboolean gst_amrwbdec_start (GstAudioDecoder * dec);
-static gboolean gst_amrwbdec_stop (GstAudioDecoder * dec);
-static gboolean gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
-static GstFlowReturn gst_amrwbdec_parse (GstAudioDecoder * dec,
- GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_amrwbdec_handle_frame (GstAudioDecoder * dec,
- GstBuffer * buffer);
-
-#define gst_amrwbdec_parent_class parent_class
-G_DEFINE_TYPE (GstAmrwbDec, gst_amrwbdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (amrwbdec, "amrwbdec",
- GST_RANK_PRIMARY, GST_TYPE_AMRWBDEC);
-
-static void
-gst_amrwbdec_class_init (GstAmrwbDecClass * klass)
-{
- GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class, &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
-
- gst_element_class_set_static_metadata (element_class, "AMR-WB audio decoder",
- "Codec/Decoder/Audio",
- "Adaptive Multi-Rate Wideband audio decoder",
- "Renato Araujo <renato.filho@indt.org.br>");
-
- base_class->start = GST_DEBUG_FUNCPTR (gst_amrwbdec_start);
- base_class->stop = GST_DEBUG_FUNCPTR (gst_amrwbdec_stop);
- base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrwbdec_set_format);
- base_class->parse = GST_DEBUG_FUNCPTR (gst_amrwbdec_parse);
- base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrwbdec_handle_frame);
-
- GST_DEBUG_CATEGORY_INIT (gst_amrwbdec_debug, "amrwbdec", 0,
- "AMR-WB audio decoder");
-}
-
-static void
-gst_amrwbdec_init (GstAmrwbDec * amrwbdec)
-{
- gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrwbdec), TRUE);
- gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
- (amrwbdec), TRUE);
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrwbdec));
-}
-
-static gboolean
-gst_amrwbdec_start (GstAudioDecoder * dec)
-{
- GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
-
- GST_DEBUG_OBJECT (dec, "start");
- if (!(amrwbdec->handle = D_IF_init ()))
- return FALSE;
-
- amrwbdec->rate = 0;
- amrwbdec->channels = 0;
-
- return TRUE;
-}
-
-static gboolean
-gst_amrwbdec_stop (GstAudioDecoder * dec)
-{
- GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
-
- GST_DEBUG_OBJECT (dec, "stop");
- D_IF_exit (amrwbdec->handle);
-
- return TRUE;
-}
-
-static gboolean
-gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
-{
- GstStructure *structure;
- GstAmrwbDec *amrwbdec;
- GstAudioInfo info;
-
- amrwbdec = GST_AMRWBDEC (dec);
-
- structure = gst_caps_get_structure (caps, 0);
-
- /* get channel count */
- gst_structure_get_int (structure, "channels", &amrwbdec->channels);
- gst_structure_get_int (structure, "rate", &amrwbdec->rate);
-
- /* create reverse caps */
- gst_audio_info_init (&info);
- gst_audio_info_set_format (&info,
- GST_AUDIO_FORMAT_S16, amrwbdec->rate, amrwbdec->channels, NULL);
-
- gst_audio_decoder_set_output_format (dec, &info);
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_amrwbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
- gint * offset, gint * length)
-{
- GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
- guint8 header[1];
- guint size;
- gboolean sync, eos;
- gint block, mode;
-
- size = gst_adapter_available (adapter);
- if (size < 1)
- return GST_FLOW_ERROR;
-
- gst_audio_decoder_get_parse_state (dec, &sync, &eos);
-
- /* need to peek data to get the size */
- gst_adapter_copy (adapter, header, 0, 1);
- mode = (header[0] >> 3) & 0x0F;
- block = block_size[mode];
-
- GST_DEBUG_OBJECT (amrwbdec, "mode %d, block %d", mode, block);
-
- if (block) {
- if (block > size)
- return GST_FLOW_EOS;
- *offset = 0;
- *length = block;
- } else {
- /* no frame yet, skip one byte */
- GST_LOG_OBJECT (amrwbdec, "skipping byte");
- *offset = 1;
- return GST_FLOW_EOS;
- }
-
- return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_amrwbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
-{
- GstAmrwbDec *amrwbdec;
- GstBuffer *out;
- GstMapInfo inmap, outmap;
-
- amrwbdec = GST_AMRWBDEC (dec);
-
- /* no fancy flushing */
- if (!buffer || !gst_buffer_get_size (buffer))
- return GST_FLOW_OK;
-
- /* the library seems to write into the source data, hence the copy. */
- /* should be no problem */
- gst_buffer_map (buffer, &inmap, GST_MAP_READ);
-
- /* get output */
- out = gst_buffer_new_and_alloc (sizeof (gint16) * L_FRAME16k);
- gst_buffer_map (out, &outmap, GST_MAP_WRITE);
-
- /* decode */
- D_IF_decode (amrwbdec->handle, (unsigned char *) inmap.data,
- (short int *) outmap.data, _good_frame);
-
- gst_buffer_unmap (out, &outmap);
- gst_buffer_unmap (buffer, &inmap);
-
- /* send out */
- return gst_audio_decoder_finish_frame (dec, out, 1);
-}
+++ /dev/null
-/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) plugin
- * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_AMRWBDEC_H__
-#define __GST_AMRWBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-#include <opencore-amrwb/dec_if.h>
-#include <opencore-amrwb/if_rom.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRWBDEC \
- (gst_amrwbdec_get_type())
-#define GST_AMRWBDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRWBDEC, GstAmrwbDec))
-#define GST_AMRWBDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRWBDEC, GstAmrwbDecClass))
-#define GST_IS_AMRWBDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRWBDEC))
-#define GST_IS_AMRWBDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRWBDEC))
-
-typedef struct _GstAmrwbDec GstAmrwbDec;
-typedef struct _GstAmrwbDecClass GstAmrwbDecClass;
-
-/**
- * GstAmrwbDec:
- *
- * Opaque data structure.
- */
-struct _GstAmrwbDec {
- GstAudioDecoder element;
-
- /* library handle */
- void *handle;
-
- /* output settings */
- gint channels, rate;
-};
-
-struct _GstAmrwbDecClass {
- GstAudioDecoderClass parent_class;
-};
-
-GType gst_amrwbdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrwbdec);
-
-G_END_DECLS
-
-#endif /* __GST_AMRWBDEC_H__ */
+++ /dev/null
-amrwb_dep = dependency('opencore-amrwb', version : '>= 0.1.3', required : get_option('amrwbdec'))
-
-if amrwb_dep.found()
- amrwbdec = library('gstamrwbdec',
- ['amrwb.c', 'amrwbdec.c'],
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstaudio_dep, amrwb_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(amrwbdec, install_dir : plugins_pkgconfig_install_dir)
- plugins += [amrwbdec]
-endif
+++ /dev/null
-/* GStreamer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/tag/tag.h>
-
-GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
-#define GST_CAT_DEFAULT gst_cdio_debug
-
-static gboolean plugin_init (GstPlugin * plugin);
-
-/* cdio headers redefine VERSION etc., so do this here before including them */
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- cdio,
- "Read audio from audio CDs",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
-
-#include "gstcdio.h"
-#include "gstcdiocddasrc.h"
-
-void
-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
- cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
-{
- const gchar *vars[] = { "GST_CDTEXT_TAG_ENCODING", "GST_TAG_ENCODING", NULL };
- const gchar *txt;
- gchar *txt_utf8;
-
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- txt = cdtext_get_const (cdtext, field, track);
-#else
- txt = cdtext_get_const (field, cdtext);
-#endif
- if (txt == NULL || *txt == '\0') {
- GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
- return;
- }
-
- /* The character encoding is not specified, and there is no provision
- * for indicating in the CD-Text data which encoding is in use.. */
- txt_utf8 = gst_tag_freeform_string_to_utf8 (txt, -1, vars);
-
- if (txt_utf8 == NULL) {
- GST_WARNING_OBJECT (src, "CD-TEXT %s could not be converted to UTF-8, "
- "try setting the GST_CDTEXT_TAG_ENCODING or GST_TAG_ENCODING "
- "environment variable", gst_tag);
- return;
- }
-
- /* FIXME: beautify strings (they might be all uppercase for example)? */
-
- if (*p_tags == NULL)
- *p_tags = gst_tag_list_new_empty ();
-
- gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt_utf8, NULL);
-
- GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt_utf8);
- g_free (txt_utf8);
-}
-
-GstTagList *
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
-{
- GstTagList *tags = NULL;
-
-#else
-gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
-{
- GstTagList *tags = NULL;
- cdtext_t *t;
-
- t = cdio_get_cdtext (cdio, track);
- if (t == NULL) {
- GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
- return NULL;
- }
-#endif
-
- gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
- GST_TAG_ARTIST, &tags);
- gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
- &tags);
-
- return tags;
-}
-
-void
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
- GstTagList * tags)
-{
-#else
-gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
-{
- cdtext_t *t;
-
- t = cdio_get_cdtext (cdio, 0);
- if (t == NULL) {
- GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
- return;
- }
-#endif
-
- gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
- GST_TAG_ALBUM_ARTIST, &tags);
- gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
- &tags);
- gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
- &tags);
- GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
-}
-
-void
-gst_cdio_log_handler (cdio_log_level_t level, const char *msg)
-{
- const gchar *level_str[] = { "DEBUG", "INFO", "WARN", "ERROR", "ASSERT" };
- const gchar *s;
-
- s = level_str[CLAMP (level, 1, G_N_ELEMENTS (level_str)) - 1];
- GST_DEBUG ("CDIO-%s: %s", s, GST_STR_NULL (msg));
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (cdiocddasrc, plugin);
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CDIO_H__
-#define __GST_CDIO_H__
-
-#include <gst/gst.h>
-#include <cdio/cdio.h>
-#include <cdio/cdtext.h>
-#include <cdio/logging.h>
-
-#if LIBCDIO_VERSION_NUM <= 83 && LIBCDIO_VERSION_NUM >= 76
- #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
- #define CDTEXT_FIELD_GENRE CDTEXT_GENRE
- #define CDTEXT_FIELD_TITLE CDTEXT_TITLE
-#endif
-
-
-void gst_cdio_add_cdtext_field (GstObject * src,
- cdtext_t * cdtext,
- track_t track,
- cdtext_field_t field,
- const gchar * gst_tag,
- GstTagList ** p_tags);
-
-GstTagList * gst_cdio_get_cdtext (GstObject * src,
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- cdtext_t * t,
-#else
- CdIo * cdio,
-#endif
- track_t track);
-
-void gst_cdio_add_cdtext_album_tags (GstObject * src,
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- cdtext_t * t,
-#else
- CdIo * cdio,
-#endif
- GstTagList * tags);
-void gst_cdio_log_handler (cdio_log_level_t level, const char *msg);
-
-#endif /* __GST_CDIO_H__ */
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-cdiocddasrc
- * @title: cdiocddasrc
- * @see_also: GstCdParanoiaSrc, GstAudioCdSrc
- *
- * cdiocddasrc reads and extracts raw audio from Audio CDs. It can operate
- * in one of two modes:
- *
- * * treat each track as a separate stream, counting time from the start
- * of the track to the end of the track and posting EOS at the end of
- * a track, or
- * * treat the entire disc as one stream, counting time from the start of
- * the first track to the end of the last track, posting EOS only at
- * the end of the last track.
- *
- * With a recent-enough version of libcdio, the element will extract
- * CD-TEXT if this is supported by the CD-drive and CD-TEXT information
- * is available on the CD. The information will be posted on the bus in
- * form of a tag message.
- *
- * When opened, the element will also calculate a CDDB disc ID and a
- * MusicBrainz disc ID, which applications can use to query online
- * databases for artist/title information. These disc IDs will also be
- * posted on the bus as part of the tag messages.
- *
- * cdiocddasrc supports the GstUriHandler interface, so applications can use
- * playbin with cdda://<track-number> URIs for playback (they will have
- * to connect to playbin's notify::source signal and set the device on the
- * cd source in the notify callback if they want to set the device property).
- * Applications should use seeks in "track" format to switch between different
- * tracks of the same CD (passing a new cdda:// URI to playbin involves opening
- * and closing the CD device, which is much slower).
- *
- * ## Example launch line
- *
- * |[
- * gst-launch-1.0 cdiocddasrc track=5 device=/dev/cdrom ! audioconvert ! vorbisenc ! oggmux ! filesink location=track5.ogg
- * ]|
- * This pipeline extracts track 5 of the audio CD and encodes it into an
- * Ogg/Vorbis file.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstcdio.h"
-#include "gstcdiocddasrc.h"
-
-#include <gst/gst.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#define SAMPLES_PER_SECTOR (CDIO_CD_FRAMESIZE_RAW / sizeof (gint16))
-
-#define DEFAULT_READ_SPEED -1
-
-enum
-{
- PROP_0 = 0,
- PROP_READ_SPEED
-};
-
-GST_DEBUG_CATEGORY (gst_cdio_debug);
-
-
-G_DEFINE_TYPE (GstCdioCddaSrc, gst_cdio_cdda_src, GST_TYPE_AUDIO_CD_SRC);
-#define _do_init \
- GST_DEBUG_CATEGORY_INIT (gst_cdio_debug, "cdio", 0, "libcdio elements"); \
- cdio_log_set_handler (gst_cdio_log_handler);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (cdiocddasrc, "cdiocddasrc",
- GST_RANK_SECONDARY - 1, GST_TYPE_CDIO_CDDA_SRC, _do_init);
-
-static void gst_cdio_cdda_src_finalize (GObject * obj);
-static void gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static GstBuffer *gst_cdio_cdda_src_read_sector (GstAudioCdSrc * src,
- gint sector);
-static gboolean gst_cdio_cdda_src_open (GstAudioCdSrc * src,
- const gchar * device);
-static void gst_cdio_cdda_src_close (GstAudioCdSrc * src);
-
-#if 0
-static gchar *
-gst_cdio_cdda_src_get_default_device (GstAudioCdSrc * audiocdsrc)
-{
- GstCdioCddaSrc *src;
- gchar *default_device, *ret;
-
- src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
- /* src->cdio may be NULL here */
- default_device = cdio_get_default_device (src->cdio);
-
- ret = g_strdup (default_device);
- free (default_device);
-
- GST_LOG_OBJECT (src, "returning default device: %s", GST_STR_NULL (ret));
-
- return ret;
-}
-
-static gchar **
-gst_cdio_cdda_src_probe_devices (GstAudioCdSrc * audiocdsrc)
-{
- char **devices, **ret, **d;
-
- /* FIXME: might return the same hardware device twice, e.g.
- * as /dev/cdrom and /dev/dvd - gotta do something more sophisticated */
- devices = cdio_get_devices (DRIVER_DEVICE);
-
- if (devices == NULL)
- goto no_devices;
-
- if (*devices == NULL)
- goto empty_devices;
-
- ret = g_strdupv (devices);
- for (d = devices; *d != NULL; ++d) {
- GST_DEBUG_OBJECT (audiocdsrc, "device: %s", GST_STR_NULL (*d));
- free (*d);
- }
- free (devices);
-
- return ret;
-
- /* ERRORS */
-no_devices:
- {
- GST_DEBUG_OBJECT (audiocdsrc, "no devices found");
- return NULL;
- }
-empty_devices:
- {
- GST_DEBUG_OBJECT (audiocdsrc, "empty device list found");
- free (devices);
- return NULL;
- }
-}
-#endif
-
-static GstBuffer *
-gst_cdio_cdda_src_read_sector (GstAudioCdSrc * audiocdsrc, gint sector)
-{
- GstCdioCddaSrc *src;
- guint8 *data;
-
- src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
- data = g_malloc (CDIO_CD_FRAMESIZE_RAW);
-
- /* can't use pad_alloc because we can't return the GstFlowReturn (FIXME 0.11) */
- if (cdio_read_audio_sector (src->cdio, data, sector) != 0)
- goto read_failed;
-
- if (src->swap_le_be) {
- gint16 *pcm_data = (gint16 *) data;
- gint i;
-
- for (i = 0; i < SAMPLES_PER_SECTOR; ++i)
- pcm_data[i] = GUINT16_SWAP_LE_BE (pcm_data[i]);
- }
-
- return gst_buffer_new_wrapped (data, CDIO_CD_FRAMESIZE_RAW);
-
- /* ERRORS */
-read_failed:
- {
- GST_WARNING_OBJECT (src, "read at sector %d failed!", sector);
- GST_ELEMENT_ERROR (src, RESOURCE, READ,
- (_("Could not read from CD.")),
- ("cdio_read_audio_sector at %d failed: %s", sector,
- g_strerror (errno)));
- g_free (data);
- return NULL;
- }
-}
-
-static gboolean
-gst_cdio_cdda_src_do_detect_drive_endianness (GstCdioCddaSrc * src, gint from,
- gint to)
-{
- gint16 pcm_data[SAMPLES_PER_SECTOR], last_pcm_ne, last_pcm_oe;
- gdouble ne_sumd0, ne_sumd1, ne_factor;
- gdouble oe_sumd0, oe_sumd1, oe_factor;
- gdouble diff;
- gint sector;
- gint i;
-
- ne_sumd0 = ne_sumd1 = 0.0;
- oe_sumd0 = oe_sumd1 = 0.0;
- last_pcm_ne = 0;
- last_pcm_oe = 0;
-
- GST_LOG_OBJECT (src, "checking sector %d to %d", from, to);
-
- for (sector = from; sector < to; ++sector) {
- if (cdio_read_audio_sector (src->cdio, pcm_data, sector) != 0)
- goto read_failed;
-
- /* only evaluate samples for left channel */
- for (i = 0; i < SAMPLES_PER_SECTOR; i += 2) {
- gint16 pcm;
-
- /* Native endianness first */
- pcm = pcm_data[i];
- ne_sumd0 += abs (pcm);
- ne_sumd1 += abs (pcm - last_pcm_ne);
- last_pcm_ne = pcm;
-
- /* other endianness next */
- pcm = GUINT16_SWAP_LE_BE (pcm);
- oe_sumd0 += abs (pcm);
- oe_sumd1 += abs (pcm - last_pcm_oe);
- last_pcm_oe = pcm;
- }
-
- }
-
- ne_factor = (ne_sumd1 / ne_sumd0);
- oe_factor = (oe_sumd1 / oe_sumd0);
- diff = ne_factor - oe_factor;
-
- GST_DEBUG_OBJECT (src, "Native: %.2f, Other: %.2f, diff: %.2f",
- ne_factor, oe_factor, diff);
-
- if (diff > 0.5) {
- GST_INFO_OBJECT (src, "Drive produces samples in other endianness");
- src->swap_le_be = TRUE;
- return TRUE;
- } else if (diff < -0.5) {
- GST_INFO_OBJECT (src, "Drive produces samples in host endianness");
- src->swap_le_be = FALSE;
- return TRUE;
- } else {
- GST_INFO_OBJECT (src, "Inconclusive, assuming host endianness");
- src->swap_le_be = FALSE;
- return FALSE;
- }
-
-/* ERRORS */
-read_failed:
- {
- GST_WARNING_OBJECT (src, "could not read sector %d", sector);
- src->swap_le_be = FALSE;
- return FALSE;
- }
-}
-
-static void
-gst_cdio_cdda_src_detect_drive_endianness (GstCdioCddaSrc * src, gint first,
- gint last)
-{
- gint from, to;
-
- GST_INFO ("Detecting drive endianness");
-
- /* try middle of disc first */
- from = (first + last) / 2;
- to = MIN (from + 10, last);
- if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
- return;
-
- /* if that was inconclusive, try other places */
- from = (first + last) / 4;
- to = MIN (from + 10, last);
- if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
- return;
-
- from = (first + last) * 3 / 4;
- to = MIN (from + 10, last);
- if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
- return;
-
- /* if that's still inconclusive, we give up and assume host endianness */
- return;
-}
-
-static gboolean
-notcdio_track_is_audio_track (const CdIo * p_cdio, track_t i_track)
-{
- return (cdio_get_track_format (p_cdio, i_track) == TRACK_FORMAT_AUDIO);
-}
-
-static gboolean
-gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
-{
- GstCdioCddaSrc *src;
- discmode_t discmode;
- gint first_track, num_tracks, i;
- gint first_audio_sector = 0, last_audio_sector = 0;
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- cdtext_t *cdtext;
-#endif
-
- src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
- g_assert (device != NULL);
- g_assert (src->cdio == NULL);
-
- GST_LOG_OBJECT (src, "trying to open device %s", device);
-
- if (!(src->cdio = cdio_open (device, DRIVER_UNKNOWN)))
- goto open_failed;
-
- discmode = cdio_get_discmode (src->cdio);
- GST_LOG_OBJECT (src, "discmode: %d", (gint) discmode);
-
- if (discmode != CDIO_DISC_MODE_CD_DA && discmode != CDIO_DISC_MODE_CD_MIXED)
- goto not_audio;
-
- first_track = cdio_get_first_track_num (src->cdio);
- num_tracks = cdio_get_num_tracks (src->cdio);
-
- if (num_tracks <= 0 || first_track < 0)
- return TRUE; /* base class will generate 'has no tracks' error */
-
- if (src->read_speed != -1)
- cdio_set_speed (src->cdio, src->read_speed);
-
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- cdtext = cdio_get_cdtext (src->cdio);
-
- if (NULL == cdtext)
- GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
- else
- gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
- audiocdsrc->tags);
-#else
- gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
- audiocdsrc->tags);
-#endif
-
- GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
-
- for (i = 0; i < num_tracks; ++i) {
- GstAudioCdSrcTrack track = { 0, };
- gint len_sectors;
-
- len_sectors = cdio_get_track_sec_count (src->cdio, i + first_track);
-
- track.num = i + first_track;
- track.is_audio = notcdio_track_is_audio_track (src->cdio, i + first_track);
-
- /* Note: LSN/LBA confusion all around us; in any case, this does
- * the right thing here (for cddb id calculations etc. as well) */
- track.start = cdio_get_track_lsn (src->cdio, i + first_track);
- track.end = track.start + len_sectors - 1; /* -1? */
-
- if (track.is_audio) {
- first_audio_sector = MIN (first_audio_sector, track.start);
- last_audio_sector = MAX (last_audio_sector, track.end);
- }
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
- if (NULL != cdtext)
- track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
- i + first_track);
-#else
- track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
- i + first_track);
-#endif
-
- gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
- }
-
- /* Try to detect if we need to byte-order swap the samples coming from the
- * drive, which might be the case if the CD drive operates in a different
- * endianness than the host CPU's endianness (happens on e.g. Powerbook G4) */
- gst_cdio_cdda_src_detect_drive_endianness (src, first_audio_sector,
- last_audio_sector);
-
- return TRUE;
-
- /* ERRORS */
-open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open CD device for reading.")),
- ("cdio_open() failed: %s", g_strerror (errno)));
- return FALSE;
- }
-not_audio:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Disc is not an Audio CD.")), ("discmode: %d", (gint) discmode));
-
- cdio_destroy (src->cdio);
- src->cdio = NULL;
- return FALSE;
- }
-}
-
-static void
-gst_cdio_cdda_src_close (GstAudioCdSrc * audiocdsrc)
-{
- GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
- if (src->cdio) {
- cdio_destroy (src->cdio);
- src->cdio = NULL;
- }
-}
-
-static void
-gst_cdio_cdda_src_init (GstCdioCddaSrc * src)
-{
- src->read_speed = DEFAULT_READ_SPEED; /* don't need atomic access here */
- src->cdio = NULL;
-}
-
-static void
-gst_cdio_cdda_src_finalize (GObject * obj)
-{
- GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (obj);
-
- if (src->cdio) {
- cdio_destroy (src->cdio);
- src->cdio = NULL;
- }
-
- G_OBJECT_CLASS (gst_cdio_cdda_src_parent_class)->finalize (obj);
-}
-
-static void
-gst_cdio_cdda_src_class_init (GstCdioCddaSrcClass * klass)
-{
- GstAudioCdSrcClass *audiocdsrc_class = GST_AUDIO_CD_SRC_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->set_property = gst_cdio_cdda_src_set_property;
- gobject_class->get_property = gst_cdio_cdda_src_get_property;
- gobject_class->finalize = gst_cdio_cdda_src_finalize;
-
- audiocdsrc_class->open = gst_cdio_cdda_src_open;
- audiocdsrc_class->close = gst_cdio_cdda_src_close;
- audiocdsrc_class->read_sector = gst_cdio_cdda_src_read_sector;
-#if 0
- audiocdsrc_class->probe_devices = gst_cdio_cdda_src_probe_devices;
- audiocdsrc_class->get_default_device = gst_cdio_cdda_src_get_default_device;
-#endif
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_READ_SPEED,
- g_param_spec_int ("read-speed", "Read speed",
- "Read from device at the specified speed (-1 = default)", -1, 100,
- DEFAULT_READ_SPEED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gst_element_class_set_static_metadata (element_class,
- "CD audio source (CDDA)", "Source/File",
- "Read audio from CD using libcdio",
- "Tim-Philipp Müller <tim centricular net>");
-}
-
-static void
-gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
-
- switch (prop_id) {
- case PROP_READ_SPEED:{
- gint speed;
-
- speed = g_value_get_int (value);
- g_atomic_int_set (&src->read_speed, speed);
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
-
- switch (prop_id) {
- case PROP_READ_SPEED:{
- gint speed;
-
- speed = g_atomic_int_get (&src->read_speed);
- g_value_set_int (value, speed);
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CDIO_CDDA_SRC_H__
-#define __GST_CDIO_CDDA_SRC_H__
-
-#include <gst/audio/gstaudiocdsrc.h>
-#include <cdio/cdio.h>
-
-#define GST_TYPE_CDIO_CDDA_SRC (gst_cdio_cdda_src_get_type ())
-#define GST_CDIO_CDDA_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrc))
-#define GST_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrcClass))
-#define GST_IS_CDIO_CDDA_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CDIO_CDDA_SRC))
-#define GST_IS_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CDIO_CDDA_SRC))
-
-typedef struct _GstCdioCddaSrc GstCdioCddaSrc;
-typedef struct _GstCdioCddaSrcClass GstCdioCddaSrcClass;
-
-struct _GstCdioCddaSrc
-{
- GstAudioCdSrc audiocdsrc;
-
- gint read_speed; /* ATOMIC */
-
- gboolean swap_le_be; /* Drive produces samples in other endianness */
-
- CdIo *cdio; /* NULL if not open */
-};
-
-struct _GstCdioCddaSrcClass
-{
- GstAudioCdSrcClass audiocdsrc_class;
-};
-
-GType gst_cdio_cdda_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (cdiocddasrc);
-
-#endif /* __GST_CDIO_CDDA_SRC_H__ */
-
+++ /dev/null
-cdio_dep = dependency('libcdio', version : '>= 0.76', required : get_option('cdio'))
-
-if cdio_dep.found()
- cdio = library('gstcdio',
- ['gstcdio.c', 'gstcdiocddasrc.c'],
- c_args : ugly_args,
- include_directories : [configinc, libsinc],
- dependencies : [gstaudio_dep, gsttag_dep, cdio_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(cdio, install_dir : plugins_pkgconfig_install_dir)
- plugins += [cdio]
-endif
+++ /dev/null
-Various Info
-============
-
-http://dvd.sourceforge.net/
+++ /dev/null
-#!/bin/sh
-AUDIOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/audiosink`
-VIDEOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/videosink`
-gst-launch dvdreadsrc ! dvddemux name=demux .video_00 ! \
- { queue ! mpeg2dec ! videoconvert ! videoscale ! $VIDEOSINK } \
- { demux.audio_00 ! queue ! a52dec ! audioconvert ! audioscale ! $AUDIOSINK }
+++ /dev/null
-/* GStreamer DVD title source
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2001 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "dvdreadsrc.h"
-
-#include <gmodule.h>
-
-#include <gst/gst-i18n-plugin.h>
-
-GST_DEBUG_CATEGORY_STATIC (gstgst_dvd_read_src_debug);
-#define GST_CAT_DEFAULT (gstgst_dvd_read_src_debug)
-
-enum
-{
- ARG_0,
- ARG_DEVICE,
- ARG_TITLE,
- ARG_CHAPTER,
- ARG_ANGLE
-};
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/mpeg, mpegversion=2, systemstream=(boolean)true"));
-
-static GstFormat title_format;
-static GstFormat angle_format;
-static GstFormat sector_format;
-static GstFormat chapter_format;
-
-static gboolean gst_dvd_read_src_start (GstBaseSrc * basesrc);
-static gboolean gst_dvd_read_src_stop (GstBaseSrc * basesrc);
-static GstFlowReturn gst_dvd_read_src_create (GstPushSrc * pushsrc,
- GstBuffer ** buf);
-static gboolean gst_dvd_read_src_src_query (GstBaseSrc * basesrc,
- GstQuery * query);
-static gboolean gst_dvd_read_src_src_event (GstBaseSrc * basesrc,
- GstEvent * event);
-static gboolean gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title,
- gint angle);
-static gboolean gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src,
- gint chapter);
-static gboolean gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, gint angle);
-static void gst_dvd_read_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_dvd_read_src_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static GstEvent *gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
- const guint32 * clut);
-static gboolean gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size);
-static gboolean gst_dvd_read_src_do_seek (GstBaseSrc * src, GstSegment * s);
-static gint64 gst_dvd_read_src_convert_timecode (dvd_time_t * time);
-static gint gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src,
- pgc_t * pgc, gint cell);
-static GstClockTime gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src,
- guint sector);
-static gint gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src,
- GstClockTime ts);
-
-static void gst_dvd_read_src_uri_handler_init (gpointer g_iface,
- gpointer iface_data);
-static gboolean dvdread_element_init (GstPlugin * plugin);
-
-#define gst_dvd_read_src_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstDvdReadSrc, gst_dvd_read_src, GST_TYPE_PUSH_SRC,
- G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
- gst_dvd_read_src_uri_handler_init));
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (dvdreadsrc, dvdread_element_init);
-
-static void
-gst_dvd_read_src_finalize (GObject * object)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
-
- g_free (src->location);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_dvd_read_src_init (GstDvdReadSrc * src)
-{
- src->dvd = NULL;
- src->vts_file = NULL;
- src->vmg_file = NULL;
- src->dvd_title = NULL;
-
- src->location = g_strdup ("/dev/dvd");
- src->first_seek = TRUE;
- src->new_seek = TRUE;
- src->new_cell = TRUE;
- src->change_cell = FALSE;
- src->uri_title = 1;
- src->uri_chapter = 1;
- src->uri_angle = 1;
-
- src->title_lang_event_pending = NULL;
- src->pending_clut_event = NULL;
-
- gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
- gst_pad_set_caps (GST_BASE_SRC_PAD (src),
- gst_static_pad_template_get_caps (&srctemplate));
-}
-
-static gboolean
-gst_dvd_read_src_is_seekable (GstBaseSrc * src)
-{
- return TRUE;
-}
-
-static void
-gst_dvd_read_src_class_init (GstDvdReadSrcClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
- GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
- GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
-
- gobject_class->finalize = gst_dvd_read_src_finalize;
- gobject_class->set_property = gst_dvd_read_src_set_property;
- gobject_class->get_property = gst_dvd_read_src_get_property;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE,
- g_param_spec_string ("device", "Device",
- "DVD device location", NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TITLE,
- g_param_spec_int ("title", "title", "title",
- 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CHAPTER,
- g_param_spec_int ("chapter", "chapter", "chapter",
- 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ANGLE,
- g_param_spec_int ("angle", "angle", "angle",
- 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
-
- gst_element_class_set_static_metadata (gstelement_class, "DVD Source",
- "Source/File/DVD",
- "Access a DVD title/chapter/angle using libdvdread",
- "Erik Walthinsen <omega@cse.ogi.edu>");
-
- gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvd_read_src_start);
- gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvd_read_src_stop);
- gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_query);
- gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_event);
- gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_dvd_read_src_do_seek);
- gstbasesrc_class->is_seekable =
- GST_DEBUG_FUNCPTR (gst_dvd_read_src_is_seekable);
-
- gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_dvd_read_src_create);
-
- title_format = gst_format_register ("title", "DVD title");
- angle_format = gst_format_register ("angle", "DVD angle");
- sector_format = gst_format_register ("sector", "DVD sector");
- chapter_format = gst_format_register ("chapter", "DVD chapter");
-}
-
-static gboolean
-gst_dvd_read_src_start (GstBaseSrc * basesrc)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-
- g_return_val_if_fail (src->location != NULL, FALSE);
-
- GST_DEBUG_OBJECT (src, "Opening DVD '%s'", src->location);
-
- if ((src->dvd = DVDOpen (src->location)) == NULL)
- goto open_failed;
-
- /* Load the video manager to find out the information about the titles */
- GST_DEBUG_OBJECT (src, "Loading VMG info");
-
- if (!(src->vmg_file = ifoOpen (src->dvd, 0)))
- goto ifo_open_failed;
-
- src->tt_srpt = src->vmg_file->tt_srpt;
-
- src->title = src->uri_title - 1;
- src->chapter = src->uri_chapter - 1;
- src->angle = src->uri_angle - 1;
-
- if (!gst_dvd_read_src_goto_title (src, src->title, src->angle))
- goto title_open_failed;
-
- if (!gst_dvd_read_src_goto_chapter (src, src->chapter))
- goto chapter_open_failed;
-
- src->new_seek = FALSE;
- src->change_cell = TRUE;
-
- src->first_seek = TRUE;
-
- return TRUE;
-
- /* ERRORS */
-open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD")),
- ("DVDOpen(%s) failed: %s", src->location, g_strerror (errno)));
- return FALSE;
- }
-ifo_open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD")),
- ("ifoOpen() failed: %s", g_strerror (errno)));
- return FALSE;
- }
-title_open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD title %d"), src->uri_title), (NULL));
- return FALSE;
- }
-chapter_open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Failed to go to chapter %d of DVD title %d"),
- src->uri_chapter, src->uri_title), (NULL));
- return FALSE;
- }
-}
-
-static gboolean
-gst_dvd_read_src_stop (GstBaseSrc * basesrc)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-
- if (src->vts_file) {
- ifoClose (src->vts_file);
- src->vts_file = NULL;
- }
- if (src->vmg_file) {
- ifoClose (src->vmg_file);
- src->vmg_file = NULL;
- }
- if (src->dvd_title) {
- DVDCloseFile (src->dvd_title);
- src->dvd_title = NULL;
- }
- if (src->dvd) {
- DVDClose (src->dvd);
- src->dvd = NULL;
- }
- src->new_cell = TRUE;
- src->new_seek = TRUE;
- src->change_cell = FALSE;
- src->chapter = 0;
- src->title = 0;
- src->need_newsegment = TRUE;
- src->vts_tmapt = NULL;
- if (src->title_lang_event_pending) {
- gst_event_unref (src->title_lang_event_pending);
- src->title_lang_event_pending = NULL;
- }
- if (src->pending_clut_event) {
- gst_event_unref (src->pending_clut_event);
- src->pending_clut_event = NULL;
- }
- if (src->chapter_starts) {
- g_free (src->chapter_starts);
- src->chapter_starts = NULL;
- }
-
- GST_LOG_OBJECT (src, "closed DVD");
-
- return TRUE;
-}
-
-static void
-cur_title_get_chapter_pgc (GstDvdReadSrc * src, gint chapter, gint * p_pgn,
- gint * p_pgc_id, pgc_t ** p_pgc)
-{
- pgc_t *pgc;
- gint pgn, pgc_id;
-
- g_assert (chapter >= 0 && chapter < src->num_chapters);
-
- pgc_id = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgcn;
- pgn = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgn;
- pgc = src->vts_file->vts_pgcit->pgci_srp[pgc_id - 1].pgc;
-
- *p_pgn = pgn;
- *p_pgc_id = pgc_id;
- *p_pgc = pgc;
-}
-
-static void
-cur_title_get_chapter_bounds (GstDvdReadSrc * src, gint chapter,
- gint * p_first_cell, gint * p_last_cell)
-{
- pgc_t *pgc;
- gint pgn, pgc_id, pgn_next_ch;
-
- g_assert (chapter >= 0 && chapter < src->num_chapters);
-
- cur_title_get_chapter_pgc (src, chapter, &pgn, &pgc_id, &pgc);
-
- *p_first_cell = pgc->program_map[pgn - 1] - 1;
-
- /* last cell is used as a 'up to boundary', not 'up to and including',
- * i.e. it is the first cell not included in the chapter range */
- if (chapter == (src->num_chapters - 1)) {
- *p_last_cell = pgc->nr_of_cells;
- } else {
- pgn_next_ch = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter + 1].pgn;
- *p_last_cell = pgc->program_map[pgn_next_ch - 1] - 1;
- }
-
- GST_DEBUG_OBJECT (src, "Chapter %d bounds: %d %d (within %d cells)",
- chapter, *p_first_cell, *p_last_cell, pgc->nr_of_cells);
-}
-
-static gboolean
-gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src, gint chapter)
-{
- gint i;
- const guint8 *palette;
-
- /* make sure the chapter number is valid for this title */
- if (chapter < 0 || chapter >= src->num_chapters) {
- GST_WARNING_OBJECT (src, "invalid chapter %d (only %d available)",
- chapter, src->num_chapters);
- chapter = CLAMP (chapter, 0, src->num_chapters - 1);
- }
-
- /* determine which program chain we want to watch. This is
- * based on the chapter number */
- cur_title_get_chapter_pgc (src, chapter, &src->pgn, &src->pgc_id,
- &src->cur_pgc);
- cur_title_get_chapter_bounds (src, chapter, &src->start_cell,
- &src->last_cell);
-
- GST_LOG_OBJECT (src, "Opened chapter %d - cell %d-%d", chapter + 1,
- src->start_cell, src->last_cell);
-
- /* retrieve position */
- src->cur_pack = 0;
- for (i = 0; i < chapter; i++) {
- gint c1, c2;
-
- cur_title_get_chapter_bounds (src, i, &c1, &c2);
-
- while (c1 < c2) {
- src->cur_pack +=
- src->cur_pgc->cell_playback[c1].last_sector -
- src->cur_pgc->cell_playback[c1].first_sector;
- ++c1;
- }
- }
-
- /* prepare reading for new cell */
- src->new_cell = TRUE;
- src->next_cell = src->start_cell;
-
- src->chapter = chapter;
-
- if (src->pending_clut_event)
- gst_event_unref (src->pending_clut_event);
-
- /* Work around GCC 9 compiler warning here about taking address of packed
- * member, which may result in an unaligned pointer access */
- palette = (const guint8 *) src->cur_pgc->palette;
- src->pending_clut_event =
- gst_dvd_read_src_make_clut_change_event (src, (const guint32 *) palette);
-
- return TRUE;
-}
-
-static void
-gst_dvd_read_src_get_chapter_starts (GstDvdReadSrc * src)
-{
- GstClockTime uptohere;
- guint c;
-
- g_free (src->chapter_starts);
- src->chapter_starts = g_new (GstClockTime, src->num_chapters);
-
- uptohere = (GstClockTime) 0;
- for (c = 0; c < src->num_chapters; ++c) {
- GstClockTime chapter_duration = 0;
- gint cell_start, cell_end, cell;
- gint pgn, pgc_id;
- pgc_t *pgc;
-
- cur_title_get_chapter_pgc (src, c, &pgn, &pgc_id, &pgc);
- cur_title_get_chapter_bounds (src, c, &cell_start, &cell_end);
-
- cell = cell_start;
- while (cell < cell_end) {
- dvd_time_t *cell_duration;
-
- cell_duration = &pgc->cell_playback[cell].playback_time;
- chapter_duration += gst_dvd_read_src_convert_timecode (cell_duration);
- cell = gst_dvd_read_src_get_next_cell (src, pgc, cell);
- }
-
- src->chapter_starts[c] = uptohere;
-
- GST_INFO_OBJECT (src, "[%02u] Chapter %02u starts at %" GST_TIME_FORMAT
- ", dur = %" GST_TIME_FORMAT ", cells %d-%d", src->title + 1, c + 1,
- GST_TIME_ARGS (uptohere), GST_TIME_ARGS (chapter_duration),
- cell_start, cell_end);
-
- uptohere += chapter_duration;
- }
-}
-
-static gboolean
-gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title, gint angle)
-{
- GstStructure *s;
- gchar lang_code[3] = { '\0', '\0', '\0' }, *t;
- pgc_t *pgc0;
- gint title_set_nr;
- gint num_titles;
- gint pgn0, pgc0_id;
- gint i;
-
- /* make sure our title number is valid */
- num_titles = src->tt_srpt->nr_of_srpts;
- GST_INFO_OBJECT (src, "There are %d titles on this DVD", num_titles);
- if (title < 0 || title >= num_titles)
- goto invalid_title;
-
- src->num_chapters = src->tt_srpt->title[title].nr_of_ptts;
- GST_INFO_OBJECT (src, "Title %d has %d chapters", title + 1,
- src->num_chapters);
-
- /* make sure the angle number is valid for this title */
- src->num_angles = src->tt_srpt->title[title].nr_of_angles;
- GST_LOG_OBJECT (src, "Title %d has %d angles", title + 1, src->num_angles);
- if (angle < 0 || angle >= src->num_angles) {
- GST_WARNING_OBJECT (src, "Invalid angle %d (only %d available)",
- angle, src->num_angles);
- angle = CLAMP (angle, 0, src->num_angles - 1);
- }
-
- /* load the VTS information for the title set our title is in */
- title_set_nr = src->tt_srpt->title[title].title_set_nr;
- src->vts_file = ifoOpen (src->dvd, title_set_nr);
- if (src->vts_file == NULL)
- goto ifo_open_failed;
-
- src->ttn = src->tt_srpt->title[title].vts_ttn;
- src->vts_ptt_srpt = src->vts_file->vts_ptt_srpt;
-
- /* interactive title? */
- if (src->num_chapters > 0 &&
- src->vts_ptt_srpt->title[src->ttn - 1].ptt[0].pgn == 0) {
- goto commands_only_pgc;
- }
-
- /* we've got enough info, time to open the title set data */
- src->dvd_title = DVDOpenFile (src->dvd, title_set_nr, DVD_READ_TITLE_VOBS);
- if (src->dvd_title == NULL)
- goto title_open_failed;
-
- GST_INFO_OBJECT (src, "Opened title %d, angle %d", title + 1, angle);
- src->title = title;
- src->angle = angle;
-
- /* build event */
-
- if (src->title_lang_event_pending) {
- gst_event_unref (src->title_lang_event_pending);
- src->title_lang_event_pending = NULL;
- }
-
- s = gst_structure_new ("application/x-gst-dvd",
- "event", G_TYPE_STRING, "dvd-lang-codes", NULL);
-
- /* so we can filter out invalid/unused streams (same for all chapters) */
- cur_title_get_chapter_pgc (src, 0, &pgn0, &pgc0_id, &pgc0);
-
- /* audio */
- for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_audio_streams; i++) {
- const audio_attr_t *a;
-
- /* audio stream present? */
- if (pgc0 != NULL && (pgc0->audio_control[i] & 0x8000) == 0)
- continue;
-
- a = &src->vts_file->vtsi_mat->vts_audio_attr[i];
-
- t = g_strdup_printf ("audio-%d-format", i);
- gst_structure_set (s, t, G_TYPE_INT, (int) a->audio_format, NULL);
- g_free (t);
- t = g_strdup_printf ("audio-%d-stream", i);
- gst_structure_set (s, t, G_TYPE_INT, (int) i, NULL);
- g_free (t);
-
- if (a->lang_type) {
- t = g_strdup_printf ("audio-%d-language", i);
- lang_code[0] = (a->lang_code >> 8) & 0xff;
- lang_code[1] = a->lang_code & 0xff;
- gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
- g_free (t);
- } else {
- lang_code[0] = '\0';
- }
-
- GST_INFO_OBJECT (src, "[%02d] Audio %02d: lang='%s', format=%d",
- src->title + 1, i, lang_code, (gint) a->audio_format);
- }
-
- /* subtitle */
- for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_subp_streams; i++) {
- const subp_attr_t *u;
- const video_attr_t *v;
- gint sid;
-
- /* subpicture stream present? */
- if (pgc0 != NULL && (pgc0->subp_control[i] & 0x80000000) == 0)
- continue;
-
- u = &src->vts_file->vtsi_mat->vts_subp_attr[i];
- v = &src->vts_file->vtsi_mat->vts_video_attr;
-
- sid = i;
- if (pgc0 != NULL) {
- if (v->display_aspect_ratio == 0) /* 4:3 */
- sid = (pgc0->subp_control[i] >> 24) & 0x1f;
- else if (v->display_aspect_ratio == 3) /* 16:9 */
- sid = (pgc0->subp_control[i] >> 8) & 0x1f;
- }
-
- if (u->type) {
- t = g_strdup_printf ("subpicture-%d-language", i);
- lang_code[0] = (u->lang_code >> 8) & 0xff;
- lang_code[1] = u->lang_code & 0xff;
- gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
- g_free (t);
- t = g_strdup_printf ("subpicture-%d-stream", i);
- gst_structure_set (s, t, G_TYPE_INT, (int) sid, NULL);
- g_free (t);
- t = g_strdup_printf ("subpicture-%d-format", i);
- gst_structure_set (s, t, G_TYPE_INT, (int) 0, NULL);
- g_free (t);
- } else {
- lang_code[0] = '\0';
- }
-
- GST_INFO_OBJECT (src, "[%02d] Subtitle %02d: lang='%s', type=%d",
- src->title + 1, sid, lang_code, u->type);
- }
-
- src->title_lang_event_pending =
- gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s);
-
- /* dump seek tables */
- src->vts_tmapt = src->vts_file->vts_tmapt;
- if (src->vts_tmapt) {
- gint i, j;
-
- GST_LOG_OBJECT (src, "nr_of_tmaps = %d", src->vts_tmapt->nr_of_tmaps);
- for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
- GST_LOG_OBJECT (src, "======= Table %d ===================", i);
- GST_LOG_OBJECT (src, "Offset relative to VTS_TMAPTI: %d",
- src->vts_tmapt->tmap_offset[i]);
- GST_LOG_OBJECT (src, "Time unit (seconds) : %d",
- src->vts_tmapt->tmap[i].tmu);
- GST_LOG_OBJECT (src, "Number of entries : %d",
- src->vts_tmapt->tmap[i].nr_of_entries);
- for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; j++) {
- guint64 time;
-
- time = (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
- GST_LOG_OBJECT (src, "Time: %" GST_TIME_FORMAT " VOBU "
- "Sector: 0x%08x %s", GST_TIME_ARGS (time),
- src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff,
- (src->vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : "");
- }
- }
- } else {
- GST_WARNING_OBJECT (src, "no vts_tmapt - seeking will suck");
- }
-
- gst_dvd_read_src_get_chapter_starts (src);
-
- return TRUE;
-
- /* ERRORS */
-invalid_title:
- {
- GST_WARNING_OBJECT (src, "Invalid title %d (only %d available)",
- title, num_titles);
- return FALSE;
- }
-ifo_open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD title %d"), title_set_nr),
- ("ifoOpen(%d) failed: %s", title_set_nr, g_strerror (errno)));
- return FALSE;
- }
-title_open_failed:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD title %d"), title_set_nr),
- ("Can't open title VOBS (VTS_%02d_1.VOB)", title_set_nr));
- return FALSE;
- }
-commands_only_pgc:
- {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
- (_("Could not open DVD title %d. Interactive titles are not supported "
- "by this element"), title_set_nr),
- ("Commands-only PGC, not supported, use rsndvdbin"));
- return FALSE;
- }
-}
-
-/* FIXME: double-check this function, compare against original */
-static gint
-gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src, pgc_t * pgc, gint cell)
-{
- /* Check if we're entering an angle block. */
- if (pgc->cell_playback[cell].block_type != BLOCK_TYPE_ANGLE_BLOCK)
- return (cell + 1);
-
- while (pgc->cell_playback[cell].block_mode != BLOCK_MODE_LAST_CELL)
- ++cell;
-
- return cell + 1;
-}
-
-/* Returns true if the pack is a NAV pack */
-static gboolean
-gst_dvd_read_src_is_nav_pack (const guint8 * data, gint lbn, dsi_t * dsi_pack)
-{
- if (GST_READ_UINT32_BE (data + 0x26) != 0x000001BF)
- return FALSE;
-
- /* Check that this is substream 0 (PCI) */
- if (data[0x2c] != 0)
- return FALSE;
-
- if (GST_READ_UINT32_BE (data + 0x400) != 0x000001BF)
- return FALSE;
-
- /* Check that this is substream 1 (DSI) */
- if (data[0x406] != 1)
- return FALSE;
-
- /* Check sizes of PCI and DSI packets */
- if (GST_READ_UINT16_BE (data + 0x2a) != 0x03d4)
- return FALSE;
-
- if (GST_READ_UINT16_BE (data + 0x404) != 0x03fa)
- return FALSE;
-
- /* Read the DSI packet into the provided struct and check it */
- navRead_DSI (dsi_pack, (unsigned char *) data + DSI_START_BYTE);
- if (lbn != dsi_pack->dsi_gi.nv_pck_lbn)
- return FALSE;
-
- return TRUE;
-}
-
-/* find time for sector from index, returns NONE if there is no exact match */
-static GstClockTime
-gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src, guint sector)
-{
- gint i, j;
-
- if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps == 0)
- return GST_CLOCK_TIME_NONE;
-
- for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
- for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; ++j) {
- if ((src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff) == sector)
- return (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
- }
- }
-
- if (sector == 0)
- return (GstClockTime) 0;
-
- return GST_CLOCK_TIME_NONE;
-}
-
-/* returns the sector in the index at (or before) the given time, or -1 */
-static gint
-gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src, GstClockTime ts)
-{
- gint sector, j;
-
- if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps < src->ttn)
- return -1;
-
- sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[0] & 0x7fffffff;
-
- for (j = 0; j < src->vts_tmapt->tmap[src->ttn - 1].nr_of_entries; ++j) {
- GstClockTime entry_time;
-
- entry_time =
- (guint64) src->vts_tmapt->tmap[src->ttn - 1].tmu * (j + 1) * GST_SECOND;
- if (entry_time <= ts) {
- sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[j] & 0x7fffffff;
- }
- if (entry_time >= ts) {
- return sector;
- }
- }
-
- if (ts == 0)
- return 0;
-
- return -1;
-}
-
-typedef enum
-{
- GST_DVD_READ_OK = 0,
- GST_DVD_READ_ERROR = -1,
- GST_DVD_READ_EOS = -2,
- GST_DVD_READ_AGAIN = -3
-} GstDvdReadReturn;
-
-static GstDvdReadReturn
-gst_dvd_read_src_read (GstDvdReadSrc * src, gint angle, gint new_seek,
- GstBuffer ** p_buf)
-{
- GstBuffer *buf;
- GstSegment *seg;
- guint8 oneblock[DVD_VIDEO_LB_LEN];
- dsi_t dsi_pack;
- guint next_vobu, cur_output_size;
- gint len;
- gint retries;
- gint64 next_time;
- GstMapInfo map;
-
- seg = &(GST_BASE_SRC (src)->segment);
-
- /* playback by cell in this pgc, starting at the cell for our chapter */
- if (new_seek)
- src->cur_cell = src->start_cell;
-
-again:
-
- if (src->cur_cell >= src->last_cell) {
- /* advance to next chapter */
- if (src->chapter == (src->num_chapters - 1) ||
- (seg->format == chapter_format && seg->stop != -1 &&
- src->chapter == (seg->stop - 1))) {
- GST_DEBUG_OBJECT (src, "end of chapter segment");
- goto eos;
- }
-
- GST_INFO_OBJECT (src, "end of chapter %d, switch to next",
- src->chapter + 1);
-
- ++src->chapter;
- gst_dvd_read_src_goto_chapter (src, src->chapter);
-
- return GST_DVD_READ_AGAIN;
- }
-
- if (src->new_cell || new_seek) {
- if (!new_seek) {
- src->cur_cell = src->next_cell;
- if (src->cur_cell >= src->last_cell) {
- GST_LOG_OBJECT (src, "last cell in chapter");
- goto again;
- }
- }
-
- /* take angle into account */
- if (src->cur_pgc->cell_playback[src->cur_cell].block_type
- == BLOCK_TYPE_ANGLE_BLOCK)
- src->cur_cell += angle;
-
- /* calculate next cell */
- src->next_cell =
- gst_dvd_read_src_get_next_cell (src, src->cur_pgc, src->cur_cell);
-
- /* we loop until we're out of this cell */
- src->cur_pack = src->cur_pgc->cell_playback[src->cur_cell].first_sector;
- src->new_cell = FALSE;
- GST_DEBUG_OBJECT (src, "Starting new cell %d @ pack %d", src->cur_cell,
- src->cur_pack);
- }
-
- if (src->cur_pack >= src->cur_pgc->cell_playback[src->cur_cell].last_sector) {
- src->new_cell = TRUE;
- GST_LOG_OBJECT (src, "Beyond last sector for cell %d, going to next cell",
- src->cur_cell);
- return GST_DVD_READ_AGAIN;
- }
-
- /* read NAV packet */
- retries = 0;
-nav_retry:
- retries++;
-
- len = DVDReadBlocks (src->dvd_title, src->cur_pack, 1, oneblock);
- if (len != 1)
- goto read_error;
-
- if (!gst_dvd_read_src_is_nav_pack (oneblock, src->cur_pack, &dsi_pack)) {
- GST_LOG_OBJECT (src, "Skipping nav packet @ pack %d", src->cur_pack);
- src->cur_pack++;
-
- if (retries < 2000) {
- goto nav_retry;
- } else {
- GST_LOG_OBJECT (src, "No nav packet @ pack %d after 2000 blocks",
- src->cur_pack);
- goto read_error;
- }
- }
-
- /* determine where we go next. These values are the ones we
- * mostly care about */
- cur_output_size = dsi_pack.dsi_gi.vobu_ea + 1;
-
- /* If we're not at the end of this cell, we can determine the next
- * VOBU to display using the VOBU_SRI information section of the
- * DSI. Using this value correctly follows the current angle,
- * avoiding the doubled scenes in The Matrix, and makes our life
- * really happy.
- *
- * Otherwise, we set our next address past the end of this cell to
- * force the code above to go to the next cell in the program. */
- if (dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL) {
- next_vobu = src->cur_pack + (dsi_pack.vobu_sri.next_vobu & 0x7fffffff);
- } else {
- next_vobu = src->cur_pgc->cell_playback[src->cur_cell].last_sector + 1;
- }
-
- g_assert (cur_output_size < 1024);
-
- /* create the buffer (TODO: use buffer pool?) */
- buf =
- gst_buffer_new_allocate (NULL, cur_output_size * DVD_VIDEO_LB_LEN, NULL);
-
- GST_LOG_OBJECT (src, "Going to read %u sectors @ pack %d", cur_output_size,
- src->cur_pack);
-
- gst_buffer_map (buf, &map, GST_MAP_WRITE);
- /* read in and output cursize packs */
- len =
- DVDReadBlocks (src->dvd_title, src->cur_pack, cur_output_size, map.data);
-
- if (len != cur_output_size)
- goto block_read_error;
-
- gst_buffer_unmap (buf, &map);
- gst_buffer_resize (buf, 0, cur_output_size * DVD_VIDEO_LB_LEN);
- /* GST_BUFFER_OFFSET (buf) = priv->cur_pack * DVD_VIDEO_LB_LEN; */
- GST_BUFFER_TIMESTAMP (buf) =
- gst_dvd_read_src_get_time_for_sector (src, src->cur_pack);
-
- *p_buf = buf;
-
- GST_LOG_OBJECT (src, "Read %u sectors", cur_output_size);
-
- src->cur_pack = next_vobu;
-
- next_time = GST_BUFFER_TIMESTAMP (buf);
- if (GST_CLOCK_TIME_IS_VALID (next_time) && seg->format == GST_FORMAT_TIME &&
- GST_CLOCK_TIME_IS_VALID (seg->stop) &&
- next_time > seg->stop + 5 * GST_SECOND) {
- GST_DEBUG_OBJECT (src, "end of TIME segment");
- goto eos;
- }
-
- return GST_DVD_READ_OK;
-
- /* ERRORS */
-eos:
- {
- GST_INFO_OBJECT (src, "Reached end-of-segment/stream - EOS");
- return GST_DVD_READ_EOS;
- }
-read_error:
- {
- GST_ERROR_OBJECT (src, "Read failed for block %d", src->cur_pack);
- return GST_DVD_READ_ERROR;
- }
-block_read_error:
- {
- GST_ERROR_OBJECT (src, "Read failed for %d blocks at %d",
- cur_output_size, src->cur_pack);
- gst_buffer_unmap (buf, &map);
- gst_buffer_unref (buf);
- return GST_DVD_READ_ERROR;
- }
-}
-
-/* we don't cache the result on purpose */
-static gboolean
-gst_dvd_read_descrambler_available (void)
-{
- GModule *module;
- gpointer sym;
- gsize res;
-
- module = g_module_open ("libdvdcss", 0);
- if (module != NULL) {
- res = g_module_symbol (module, "dvdcss_open", &sym);
- g_module_close (module);
- } else {
- res = FALSE;
- }
-
- return res;
-}
-
-static GstFlowReturn
-gst_dvd_read_src_create (GstPushSrc * pushsrc, GstBuffer ** p_buf)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (pushsrc);
- GstPad *srcpad;
- gint res;
-
- g_return_val_if_fail (src->dvd != NULL, GST_FLOW_ERROR);
-
- srcpad = GST_BASE_SRC (src)->srcpad;
-
- if (src->need_newsegment) {
- GstSegment seg;
-
- gst_segment_init (&seg, GST_FORMAT_BYTES);
- seg.start = src->cur_pack * DVD_VIDEO_LB_LEN;
- seg.stop = -1;
- seg.time = 0;
- gst_pad_push_event (srcpad, gst_event_new_segment (&seg));
- src->need_newsegment = FALSE;
- }
-
- if (src->new_seek) {
- gst_dvd_read_src_goto_title (src, src->title, src->angle);
- gst_dvd_read_src_goto_chapter (src, src->chapter);
-
- src->new_seek = FALSE;
- src->change_cell = TRUE;
- }
-
- if (src->title_lang_event_pending) {
- gst_pad_push_event (srcpad, src->title_lang_event_pending);
- src->title_lang_event_pending = NULL;
- }
-
- if (src->pending_clut_event) {
- gst_pad_push_event (srcpad, src->pending_clut_event);
- src->pending_clut_event = NULL;
- }
-
- /* read it in */
- do {
- res = gst_dvd_read_src_read (src, src->angle, src->change_cell, p_buf);
- } while (res == GST_DVD_READ_AGAIN);
-
- switch (res) {
- case GST_DVD_READ_ERROR:{
- /* FIXME: figure out a way to detect if scrambling is the problem */
- if (!gst_dvd_read_descrambler_available ()) {
- GST_ELEMENT_ERROR (src, RESOURCE, READ,
- (_("Could not read DVD. This may be because the DVD is encrypted "
- "and a DVD decryption library is not installed.")), (NULL));
- } else {
- GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")),
- (NULL));
- }
- return GST_FLOW_ERROR;
- }
- case GST_DVD_READ_EOS:{
- return GST_FLOW_EOS;
- }
- case GST_DVD_READ_OK:{
- src->change_cell = FALSE;
- return GST_FLOW_OK;
- }
- default:
- break;
- }
-
- g_return_val_if_reached (GST_FLOW_EOS);
-}
-
-static void
-gst_dvd_read_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
- gboolean started;
-
- GST_OBJECT_LOCK (src);
- started = GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED);
-
- switch (prop_id) {
- case ARG_DEVICE:{
- if (started) {
- g_warning ("%s: property '%s' needs to be set before the device is "
- "opened", GST_ELEMENT_NAME (src), pspec->name);
- break;
- }
-
- g_free (src->location);
- /* clear the filename if we get a NULL (is that possible?) */
- if (g_value_get_string (value) == NULL) {
- src->location = g_strdup ("/dev/dvd");
- } else {
- src->location = g_value_dup_string (value);
- }
- break;
- }
- case ARG_TITLE:
- src->uri_title = g_value_get_int (value);
- if (started) {
- src->title = src->uri_title - 1;
- src->new_seek = TRUE;
- }
- break;
- case ARG_CHAPTER:
- src->uri_chapter = g_value_get_int (value);
- if (started) {
- src->chapter = src->uri_chapter - 1;
- src->new_seek = TRUE;
- }
- break;
- case ARG_ANGLE:
- src->uri_angle = g_value_get_int (value);
- if (started) {
- src->angle = src->uri_angle - 1;
- }
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-
- GST_OBJECT_UNLOCK (src);
-}
-
-static void
-gst_dvd_read_src_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
-
- GST_OBJECT_LOCK (src);
-
- switch (prop_id) {
- case ARG_DEVICE:
- g_value_set_string (value, src->location);
- break;
- case ARG_TITLE:
- g_value_set_int (value, src->uri_title);
- break;
- case ARG_CHAPTER:
- g_value_set_int (value, src->uri_chapter);
- break;
- case ARG_ANGLE:
- g_value_set_int (value, src->uri_angle);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-
- GST_OBJECT_UNLOCK (src);
-}
-
-static gboolean
-gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size)
-{
- gboolean ret = FALSE;
-
- if (src->dvd_title) {
- gssize blocks;
-
- blocks = DVDFileSize (src->dvd_title);
- if (blocks >= 0) {
- *size = (gint64) blocks *DVD_VIDEO_LB_LEN;
-
- ret = TRUE;
- } else {
- GST_WARNING_OBJECT (src, "DVDFileSize(%p) failed!", src->dvd_title);
- }
- }
-
- return ret;
-}
-
-/*** Querying and seeking ***/
-
-static gboolean
-gst_dvd_read_src_handle_seek_event (GstDvdReadSrc * src, GstEvent * event)
-{
- GstSeekFlags flags;
- GstSeekType cur_type, end_type;
- gint64 new_off, total;
- GstFormat format;
- GstPad *srcpad;
- gboolean query_ok;
- gdouble rate;
-
- gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &new_off,
- &end_type, NULL);
-
- if (rate <= 0.0) {
- GST_DEBUG_OBJECT (src, "cannot do backwards playback yet");
- return FALSE;
- }
-
- if (end_type != GST_SEEK_TYPE_NONE) {
- if ((format != chapter_format && format != GST_FORMAT_TIME) ||
- end_type != GST_SEEK_TYPE_SET) {
- GST_DEBUG_OBJECT (src, "end seek type not supported");
- return FALSE;
- }
- }
-
- if (cur_type != GST_SEEK_TYPE_SET) {
- GST_DEBUG_OBJECT (src, "only SEEK_TYPE_SET is supported");
- return FALSE;
- }
-
- if (format == angle_format) {
- GST_OBJECT_LOCK (src);
- if (new_off < 0 || new_off >= src->num_angles) {
- GST_OBJECT_UNLOCK (src);
- GST_DEBUG_OBJECT (src, "invalid angle %d, only %d available",
- src->num_angles, src->num_angles);
- return FALSE;
- }
- src->angle = (gint) new_off;
- GST_OBJECT_UNLOCK (src);
- GST_DEBUG_OBJECT (src, "switched to angle %d", (gint) new_off + 1);
- return TRUE;
- }
-
- if (format != chapter_format && format != title_format &&
- format != GST_FORMAT_BYTES && format != GST_FORMAT_TIME) {
- GST_DEBUG_OBJECT (src, "unsupported seek format %d (%s)", format,
- gst_format_get_name (format));
- return FALSE;
- }
-
- if (format == GST_FORMAT_BYTES) {
- GST_DEBUG_OBJECT (src, "Requested seek to byte %" G_GUINT64_FORMAT,
- new_off);
- } else if (format == GST_FORMAT_TIME) {
- GST_DEBUG_OBJECT (src, "Requested seek to time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (new_off));
- if (gst_dvd_read_src_get_sector_from_time (src, new_off) < 0) {
- GST_DEBUG_OBJECT (src, "Can't find sector for requested time");
- return FALSE;
- }
- }
-
- srcpad = GST_BASE_SRC_PAD (src);
-
- /* check whether the seek looks reasonable (ie within possible range) */
- if (format == GST_FORMAT_BYTES) {
- GST_OBJECT_LOCK (src);
- query_ok = gst_dvd_read_src_get_size (src, &total);
- GST_OBJECT_UNLOCK (src);
- } else {
- query_ok = gst_pad_query_duration (srcpad, format, &total);
- }
-
- if (!query_ok) {
- GST_DEBUG_OBJECT (src, "Failed to query duration in format %s",
- gst_format_get_name (format));
- return FALSE;
- }
-
- GST_DEBUG_OBJECT (src, "Total %s: %12" G_GINT64_FORMAT,
- gst_format_get_name (format), total);
- GST_DEBUG_OBJECT (src, "Seek to %s: %12" G_GINT64_FORMAT,
- gst_format_get_name (format), new_off);
-
- if (new_off >= total) {
- GST_DEBUG_OBJECT (src, "Seek position out of range");
- return FALSE;
- }
-
- /* set segment to seek format; this allows us to use the do_seek
- * virtual function and let the base source handle all the tricky
- * stuff for us. We don't use the segment internally anyway */
- /* FIXME: can't take the stream lock here - what to do? */
- GST_OBJECT_LOCK (src);
- GST_BASE_SRC (src)->segment.format = format;
- GST_BASE_SRC (src)->segment.start = 0;
- GST_BASE_SRC (src)->segment.stop = total;
- GST_BASE_SRC (src)->segment.duration = total;
- GST_OBJECT_UNLOCK (src);
-
- return GST_BASE_SRC_CLASS (parent_class)->event (GST_BASE_SRC (src), event);
-}
-
-static void
-gst_dvd_read_src_get_sector_bounds (GstDvdReadSrc * src, gint * first,
- gint * last)
-{
- gint c1, c2, tmp;
- cur_title_get_chapter_bounds (src, 0, &c1, &tmp);
- cur_title_get_chapter_bounds (src, src->num_chapters - 1, &tmp, &c2);
- *first = src->cur_pgc->cell_playback[c1].first_sector;
- *last = src->cur_pgc->cell_playback[c2].last_sector;
-}
-
-static gboolean
-gst_dvd_read_src_do_seek (GstBaseSrc * basesrc, GstSegment * s)
-{
- GstDvdReadSrc *src;
-
- src = GST_DVD_READ_SRC (basesrc);
-
- GST_DEBUG_OBJECT (src, "Seeking to %s: %12" G_GINT64_FORMAT,
- gst_format_get_name (s->format), s->position);
-
- /* Ignore the first seek to 0, as it breaks starting playback
- * from another chapter by seeking back to sector 0 */
- if (src->first_seek && s->format == GST_FORMAT_BYTES && s->start == 0) {
- src->first_seek = FALSE;
- return TRUE;
- }
-
- if (s->format == sector_format || s->format == GST_FORMAT_BYTES
- || s->format == GST_FORMAT_TIME) {
- guint old;
-
- old = src->cur_pack;
-
- if (s->format == sector_format) {
- gint first, last;
- gst_dvd_read_src_get_sector_bounds (src, &first, &last);
- GST_DEBUG_OBJECT (src, "Format is sector, seeking to %" G_GINT64_FORMAT,
- s->position);
- src->cur_pack = s->position;
- if (src->cur_pack < first)
- src->cur_pack = first;
- if (src->cur_pack > last)
- src->cur_pack = last;
- } else if (s->format == GST_FORMAT_TIME) {
- gint sector;
- GST_DEBUG_OBJECT (src, "Format is time");
-
- sector = gst_dvd_read_src_get_sector_from_time (src, s->position);
-
- GST_DEBUG_OBJECT (src, "Time %" GST_TIME_FORMAT " => sector %d",
- GST_TIME_ARGS (s->position), sector);
-
- /* really shouldn't happen, we've checked this earlier ... */
- g_return_val_if_fail (sector >= 0, FALSE);
-
- src->cur_pack = sector;
- } else {
- /* byte format */
- gint first, last;
- gst_dvd_read_src_get_sector_bounds (src, &first, &last);
- GST_DEBUG_OBJECT (src, "Format is byte");
- src->cur_pack = s->position / DVD_VIDEO_LB_LEN;
- if (((gint64) src->cur_pack * DVD_VIDEO_LB_LEN) != s->position) {
- GST_LOG_OBJECT (src, "rounded down offset %" G_GINT64_FORMAT " => %"
- G_GINT64_FORMAT, s->position,
- (gint64) src->cur_pack * DVD_VIDEO_LB_LEN);
- }
- src->cur_pack += first;
- }
-
- if (!gst_dvd_read_src_goto_sector (src, src->angle)) {
- GST_DEBUG_OBJECT (src, "seek to sector 0x%08x failed", src->cur_pack);
- src->cur_pack = old;
- return FALSE;
- }
-
- GST_LOG_OBJECT (src, "seek to sector 0x%08x ok", src->cur_pack);
- } else if (s->format == chapter_format) {
- if (!gst_dvd_read_src_goto_chapter (src, (gint) s->position)) {
- GST_DEBUG_OBJECT (src, "seek to chapter %d failed",
- (gint) s->position + 1);
- return FALSE;
- }
- GST_INFO_OBJECT (src, "seek to chapter %d ok", (gint) s->position + 1);
- src->chapter = s->position;
- } else if (s->format == title_format) {
- if (!gst_dvd_read_src_goto_title (src, (gint) s->position, src->angle) ||
- !gst_dvd_read_src_goto_chapter (src, 0)) {
- GST_DEBUG_OBJECT (src, "seek to title %d failed", (gint) s->position);
- return FALSE;
- }
- src->title = (gint) s->position;
- src->chapter = 0;
- GST_INFO_OBJECT (src, "seek to title %d ok", src->title + 1);
- } else {
- g_return_val_if_reached (FALSE);
- }
-
- src->need_newsegment = TRUE;
- return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_src_event (GstBaseSrc * basesrc, GstEvent * event)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
- gboolean res;
-
- GST_LOG_OBJECT (src, "handling %s event", GST_EVENT_TYPE_NAME (event));
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEEK:
- res = gst_dvd_read_src_handle_seek_event (src, event);
- break;
- default:
- res = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
- break;
- }
-
- return res;
-}
-
-static GstEvent *
-gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
- const guint32 * clut)
-{
- GstStructure *structure;
- gchar name[16];
- gint i;
-
- structure = gst_structure_new ("application/x-gst-dvd",
- "event", G_TYPE_STRING, "dvd-spu-clut-change", NULL);
-
- /* Create a separate field for each value in the table. */
- for (i = 0; i < 16; i++) {
- g_snprintf (name, sizeof (name), "clut%02d", i);
- gst_structure_set (structure, name, G_TYPE_INT, (int) clut[i], NULL);
- }
-
- /* Create the DVD event and put the structure into it. */
- return gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, structure);
-}
-
-static gint64
-gst_dvd_read_src_convert_timecode (dvd_time_t * time)
-{
- gint64 ret_time;
- const gint64 one_hour = 3600 * GST_SECOND;
- const gint64 one_min = 60 * GST_SECOND;
-
- g_return_val_if_fail ((time->hour >> 4) < 0xa
- && (time->hour & 0xf) < 0xa, -1);
- g_return_val_if_fail ((time->minute >> 4) < 0x7
- && (time->minute & 0xf) < 0xa, -1);
- g_return_val_if_fail ((time->second >> 4) < 0x7
- && (time->second & 0xf) < 0xa, -1);
-
- ret_time = ((time->hour >> 4) * 10 + (time->hour & 0xf)) * one_hour;
- ret_time += ((time->minute >> 4) * 10 + (time->minute & 0xf)) * one_min;
- ret_time += ((time->second >> 4) * 10 + (time->second & 0xf)) * GST_SECOND;
-
- return ret_time;
-}
-
-static gboolean
-gst_dvd_read_src_do_duration_query (GstDvdReadSrc * src, GstQuery * query)
-{
- GstFormat format;
- gint64 val = 0;
-
- gst_query_parse_duration (query, &format, NULL);
-
- switch (format) {
- case GST_FORMAT_TIME:{
- if (src->cur_pgc == NULL)
- return FALSE;
- val = gst_dvd_read_src_convert_timecode (&src->cur_pgc->playback_time);
- if (val < 0)
- return FALSE;
- break;
- }
- case GST_FORMAT_BYTES:{
- if (!gst_dvd_read_src_get_size (src, &val))
- return FALSE;
- break;
- }
- default:{
- if (format == sector_format) {
- val = DVDFileSize (src->dvd_title);
- } else if (format == title_format) {
- val = src->tt_srpt->nr_of_srpts;
- } else if (format == chapter_format) {
- val = src->num_chapters;
- } else if (format == angle_format) {
- val = src->tt_srpt->title[src->title].nr_of_angles;
- } else {
- GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
- format, gst_format_get_name (format));
- return FALSE;
- }
- break;
- }
- }
-
- GST_LOG_OBJECT (src, "duration = %" G_GINT64_FORMAT " %s", val,
- gst_format_get_name (format));
-
- gst_query_set_duration (query, format, val);
- return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_do_position_query (GstDvdReadSrc * src, GstQuery * query)
-{
- GstFormat format;
- gint64 val;
-
- gst_query_parse_position (query, &format, NULL);
-
- switch (format) {
- case GST_FORMAT_BYTES:{
- val = (gint64) src->cur_pack * DVD_VIDEO_LB_LEN;
- break;
- }
- default:{
- if (format == sector_format) {
- val = src->cur_pack;
- } else if (format == title_format) {
- val = src->title;
- } else if (format == chapter_format) {
- val = src->chapter;
- } else if (format == angle_format) {
- val = src->angle;
- } else {
- GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
- format, gst_format_get_name (format));
- return FALSE;
- }
- break;
- }
- }
-
- GST_LOG_OBJECT (src, "position = %" G_GINT64_FORMAT " %s", val,
- gst_format_get_name (format));
-
- gst_query_set_position (query, format, val);
- return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_do_convert_query (GstDvdReadSrc * src, GstQuery * query)
-{
- GstFormat src_format, dest_format;
- gboolean ret = FALSE;
- gint64 src_val, dest_val = -1;
-
- gst_query_parse_convert (query, &src_format, &src_val, &dest_format, NULL);
-
- if (src_format == dest_format) {
- dest_val = src_val;
- ret = TRUE;
- goto done;
- }
-
- /* Formats to consider: TIME, DEFAULT, BYTES, title, chapter, sector.
- * Note: title and chapter are counted as starting from 0 here, just like
- * in the context of seek events. Another note: DEFAULT format is undefined */
-
- if (src_format == GST_FORMAT_BYTES) {
- src_format = sector_format;
- src_val /= DVD_VIDEO_LB_LEN;
- }
-
- if (src_format == sector_format) {
- /* SECTOR => xyz */
- if (dest_format == GST_FORMAT_TIME && src_val < G_MAXUINT) {
- dest_val = gst_dvd_read_src_get_time_for_sector (src, (guint) src_val);
- ret = (dest_val >= 0);
- } else if (dest_format == GST_FORMAT_BYTES) {
- dest_val = src_val * DVD_VIDEO_LB_LEN;
- ret = TRUE;
- } else {
- ret = FALSE;
- }
- } else if (src_format == title_format) {
- /* TITLE => xyz */
- if (dest_format == GST_FORMAT_TIME) {
- /* not really true, but we use this to trick the base source into
- * handling seeks in title-format for us (the source won't know that
- * we changed the title in this case) (changing titles should really
- * be done with an interface rather than a seek, but for now we're
- * stuck with this mechanism. Fix in 0.11) */
- dest_val = (GstClockTime) 0;
- ret = TRUE;
- } else {
- ret = FALSE;
- }
- } else if (src_format == chapter_format) {
- /* CHAPTER => xyz */
- if (dest_format == GST_FORMAT_TIME) {
- if (src->num_chapters >= 0 && src_val < src->num_chapters) {
- dest_val = src->chapter_starts[src_val];
- ret = TRUE;
- }
- } else if (dest_format == sector_format) {
- } else {
- ret = FALSE;
- }
- } else if (src_format == GST_FORMAT_TIME) {
- /* TIME => xyz */
- if (dest_format == sector_format || dest_format == GST_FORMAT_BYTES) {
- dest_val = gst_dvd_read_src_get_sector_from_time (src, src_val);
- ret = (dest_val >= 0);
- if (dest_format == GST_FORMAT_BYTES)
- dest_val *= DVD_VIDEO_LB_LEN;
- } else if (dest_format == chapter_format) {
- if (src->chapter_starts != NULL) {
- gint i;
-
- for (i = src->num_chapters - 1; i >= 0; --i) {
- if (src->chapter_starts && src->chapter_starts[i] >= src_val) {
- dest_val = i;
- ret = TRUE;
- break;
- }
- }
- } else {
- ret = FALSE;
- }
- } else {
- ret = FALSE;
- }
- } else {
- ret = FALSE;
- }
-
-done:
-
- if (ret) {
- gst_query_set_convert (query, src_format, src_val, dest_format, dest_val);
- }
-
- return ret;
-}
-
-static gboolean
-gst_dvd_read_src_src_query (GstBaseSrc * basesrc, GstQuery * query)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
- gboolean res = TRUE;
-
- GST_LOG_OBJECT (src, "handling %s query", GST_QUERY_TYPE_NAME (query));
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_DURATION:
- GST_OBJECT_LOCK (src);
- if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
- res = gst_dvd_read_src_do_duration_query (src, query);
- } else {
- GST_DEBUG_OBJECT (src, "query failed: not started");
- res = FALSE;
- }
- GST_OBJECT_UNLOCK (src);
- break;
- case GST_QUERY_POSITION:
- GST_OBJECT_LOCK (src);
- if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
- res = gst_dvd_read_src_do_position_query (src, query);
- } else {
- GST_DEBUG_OBJECT (src, "query failed: not started");
- res = FALSE;
- }
- GST_OBJECT_UNLOCK (src);
- break;
- case GST_QUERY_CONVERT:
- GST_OBJECT_LOCK (src);
- if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
- res = gst_dvd_read_src_do_convert_query (src, query);
- } else {
- GST_DEBUG_OBJECT (src, "query failed: not started");
- res = FALSE;
- }
- GST_OBJECT_UNLOCK (src);
- break;
- default:
- res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
- break;
- }
-
- return res;
-}
-
-static gboolean
-gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, int angle)
-{
- gint seek_to = src->cur_pack;
- gint chapter, next, cur, i;
-
- /* retrieve position */
- src->cur_pack = 0;
- GST_DEBUG_OBJECT (src, "Goto sector %d, angle %d, within %d chapters",
- seek_to, angle, src->num_chapters);
-
- for (i = 0; i < src->num_chapters; i++) {
- gint c1, c2;
-
- cur_title_get_chapter_bounds (src, i, &c1, &c2);
- GST_DEBUG_OBJECT (src, " Looking in chapter %d, bounds: %d %d", i, c1, c2);
-
- for (next = cur = c1; cur < c2;) {
- gint first = src->cur_pgc->cell_playback[cur].first_sector;
- gint last = src->cur_pgc->cell_playback[cur].last_sector;
- GST_DEBUG_OBJECT (src, "Cell %d sector bounds: %d %d", cur, first, last);
- cur = next;
- if (src->cur_pgc->cell_playback[cur].block_type == BLOCK_TYPE_ANGLE_BLOCK)
- cur += angle;
- next = gst_dvd_read_src_get_next_cell (src, src->cur_pgc, cur);
- /* seeking to 0 should end up at first chapter in any case */
- if ((seek_to >= first && seek_to <= last) || (seek_to == 0 && i == 0)) {
- GST_DEBUG_OBJECT (src, "Seek target found in chapter %d", i);
- chapter = i;
- goto done;
- }
- }
- }
-
- GST_DEBUG_OBJECT (src, "Seek to sector %u failed", seek_to);
-
- return FALSE;
-
-done:
- {
- /* so chapter $chapter and cell $cur contain our sector
- * of interest. Let's go there! */
- GST_INFO_OBJECT (src, "Seek succeeded, going to chapter %u, cell %u",
- chapter + 1, cur);
-
- gst_dvd_read_src_goto_chapter (src, chapter);
- src->cur_cell = cur;
- src->next_cell = next;
- src->new_cell = FALSE;
- src->cur_pack = seek_to;
-
- return TRUE;
- }
-}
-
-
-/*** URI interface ***/
-
-static GstURIType
-gst_dvd_read_src_uri_get_type (GType type)
-{
- return GST_URI_SRC;
-}
-
-static const gchar *const *
-gst_dvd_read_src_uri_get_protocols (GType type)
-{
- static const gchar *protocols[] = { "dvd", NULL };
-
- return protocols;
-}
-
-static gchar *
-gst_dvd_read_src_uri_get_uri (GstURIHandler * handler)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
- gchar *uri;
-
- GST_OBJECT_LOCK (src);
- uri = g_strdup_printf ("dvd://%d,%d,%d", src->uri_title, src->uri_chapter,
- src->uri_angle);
- GST_OBJECT_UNLOCK (src);
-
- return uri;
-}
-
-static gboolean
-gst_dvd_read_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
- GError ** error)
-{
- GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
-
- /* parse out the new t/c/a and seek to them */
- {
- gchar *location = NULL;
- gchar **strs;
- gchar **strcur;
- gint pos = 0;
-
- location = gst_uri_get_location (uri);
-
- GST_OBJECT_LOCK (src);
-
- src->uri_title = 1;
- src->uri_chapter = 1;
- src->uri_angle = 1;
-
- if (!location)
- goto empty_location;
-
- strcur = strs = g_strsplit (location, ",", 0);
- while (strcur && *strcur) {
- gint val;
-
- if (!sscanf (*strcur, "%d", &val))
- break;
-
- if (val <= 0) {
- g_warning ("Invalid value %d in URI '%s'. Must be 1 or greater",
- val, location);
- break;
- }
-
- switch (pos) {
- case 0:
- src->uri_title = val;
- break;
- case 1:
- src->uri_chapter = val;
- break;
- case 2:
- src->uri_angle = val;
- break;
- }
-
- strcur++;
- pos++;
- }
-
- if (pos > 0 && GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
- src->title = src->uri_title - 1;
- src->chapter = src->uri_chapter - 1;
- src->angle = src->uri_angle - 1;
- src->new_seek = TRUE;
- }
-
- g_strfreev (strs);
- g_free (location);
-
- empty_location:
-
- GST_OBJECT_UNLOCK (src);
- }
-
- return TRUE;
-}
-
-static void
-gst_dvd_read_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
-{
- GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
- iface->get_type = gst_dvd_read_src_uri_get_type;
- iface->get_protocols = gst_dvd_read_src_uri_get_protocols;
- iface->get_uri = gst_dvd_read_src_uri_get_uri;
- iface->set_uri = gst_dvd_read_src_uri_set_uri;
-}
-
-static gboolean
-dvdread_element_init (GstPlugin * plugin)
-{
- GST_DEBUG_CATEGORY_INIT (gstgst_dvd_read_src_debug, "dvdreadsrc", 0,
- "DVD reader element based on dvdreadsrc");
-
-#ifdef ENABLE_NLS
- GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
- LOCALEDIR);
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
- return gst_element_register (plugin, "dvdreadsrc", GST_RANK_NONE,
- GST_TYPE_DVD_READ_SRC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (dvdreadsrc, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- dvdread,
- "Access a DVD with dvdread",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer DVD title source
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2001> Billy Biggs <vektor@dumbterm.net>.
- * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DVD_READ_SRC_H__
-#define __GST_DVD_READ_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-
-#include <dvdread/dvd_reader.h>
-#include <dvdread/ifo_types.h>
-#include <dvdread/ifo_read.h>
-#include <dvdread/nav_read.h>
-#include <dvdread/nav_print.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_READ_SRC (gst_dvd_read_src_get_type())
-#define GST_DVD_READ_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_READ_SRC,GstDvdReadSrc))
-#define GST_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_READ_SRC,GstDvdReadSrcClass))
-#define GST_IS_DVD_READ_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_READ_SRC))
-#define GST_IS_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_READ_SRC))
-
-typedef struct _GstDvdReadSrc GstDvdReadSrc;
-typedef struct _GstDvdReadSrcClass GstDvdReadSrcClass;
-
-struct _GstDvdReadSrc {
- GstPushSrc pushsrc;
-
- /* location */
- gchar *location;
-
- gboolean first_seek;
- gboolean new_seek;
- gboolean change_cell;
-
- gboolean new_cell;
-
- gint uri_title; /* set via the URI handler or properties, */
- gint uri_chapter; /* otherwise not touched; these values */
- gint uri_angle; /* start from 1 */
-
- gint title; /* current position while open, set to the */
- gint chapter; /* URI-set values in ::start(). these */
- gint angle; /* values start from 0 */
-
- gint start_cell, last_cell, cur_cell;
- gint cur_pack;
- gint next_cell;
- dvd_reader_t *dvd;
- ifo_handle_t *vmg_file;
-
- /* title stuff */
- gint ttn;
- tt_srpt_t *tt_srpt;
- ifo_handle_t *vts_file;
- vts_ptt_srpt_t *vts_ptt_srpt;
- vts_tmapt_t *vts_tmapt;
- dvd_file_t *dvd_title;
- gint num_chapters;
- gint num_angles;
-
- GstClockTime *chapter_starts; /* start time of chapters within title */
-
- /* which program chain to watch (based on title and chapter number) */
- pgc_t *cur_pgc;
- gint pgc_id;
- gint pgn;
-
- gboolean need_newsegment;
- GstEvent *title_lang_event_pending;
- GstEvent *pending_clut_event;
-};
-
-struct _GstDvdReadSrcClass {
- GstPushSrcClass parent_class;
-};
-
-GType gst_dvd_read_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdreadsrc);
-
-G_END_DECLS
-
-#endif /* __GST_DVD_READ_SRC_H__ */
-
+++ /dev/null
-dvdread_dep = dependency('dvdread', version : '>= 0.5.0', required : get_option('dvdread'))
-
-if gmodule_dep.found() and dvdread_dep.found()
- dvdread = library('gstdvdread',
- ['dvdreadsrc.c'],
- c_args : ugly_args,
- include_directories : [configinc, libsinc],
- dependencies : [gstbase_dep, gmodule_dep, dvdread_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(dvdread, install_dir : plugins_pkgconfig_install_dir)
- plugins += [dvdread]
-endif
+++ /dev/null
-subdir('a52dec')
-subdir('amrnb')
-subdir('amrwbdec')
-subdir('cdio')
-subdir('dvdread')
-subdir('mpeg2dec')
-subdir('sidplay')
-subdir('x264')
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <string.h>
-
-#include <inttypes.h>
-
-#include "gstmpeg2dec.h"
-
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-/* 16byte-aligns a buffer for libmpeg2 */
-#define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15)))
-
-GST_DEBUG_CATEGORY_STATIC (mpeg2dec_debug);
-#define GST_CAT_DEFAULT mpeg2dec_debug
-GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
-
-/* Send a warning message about decoding errors after receiving this many
- * STATE_INVALID return values from mpeg2_parse. -1 means never.
- */
-#define WARN_THRESHOLD (5)
-
-static GstStaticPadTemplate sink_template_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/mpeg, "
- "mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) false")
- );
-
-static GstStaticPadTemplate src_template_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw, "
- "format = (string) { YV12, I420, Y42B, Y444 }, "
- "width = (int) [ 16, 4096 ], "
- "height = (int) [ 16, 4096 ], "
- "framerate = (fraction) [ 0/1, 2147483647/1 ]")
- );
-
-#define gst_mpeg2dec_parent_class parent_class
-G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_VIDEO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (mpeg2dec, "mpeg2dec", GST_RANK_SECONDARY,
- GST_TYPE_MPEG2DEC);
-
-static void gst_mpeg2dec_finalize (GObject * object);
-
-/* GstVideoDecoder base class method */
-static gboolean gst_mpeg2dec_open (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_close (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder,
- GstVideoCodecState * state);
-static gboolean gst_mpeg2dec_flush (GstVideoDecoder * decoder);
-static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder);
-static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
- GstVideoCodecFrame * frame);
-static gboolean gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder,
- GstQuery * query);
-
-static void gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec);
-static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec,
- GstVideoCodecFrame * in_frame, GstVideoFrame * in_vframe);
-
-static void
-gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass);
-
- gobject_class->finalize = gst_mpeg2dec_finalize;
-
- gst_element_class_add_static_pad_template (element_class,
- &src_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
- gst_element_class_set_static_metadata (element_class,
- "mpeg1 and mpeg2 video decoder", "Codec/Decoder/Video",
- "Uses libmpeg2 to decode MPEG video streams",
- "Wim Taymans <wim.taymans@chello.be>");
-
- video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_mpeg2dec_open);
- video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close);
- video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start);
- video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop);
- video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_mpeg2dec_flush);
- video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format);
- video_decoder_class->handle_frame =
- GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame);
- video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_mpeg2dec_finish);
- video_decoder_class->decide_allocation =
- GST_DEBUG_FUNCPTR (gst_mpeg2dec_decide_allocation);
-
- GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0,
- "MPEG-2 Video Decoder");
- GST_DEBUG_CATEGORY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
-}
-
-static void
-gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec)
-{
- gst_video_decoder_set_packetized (GST_VIDEO_DECODER (mpeg2dec), TRUE);
- gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (mpeg2dec), TRUE);
- gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
- (mpeg2dec), TRUE);
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (mpeg2dec));
-
- /* initialize the mpeg2dec acceleration */
-}
-
-static void
-gst_mpeg2dec_finalize (GObject * object)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (object);
-
- if (mpeg2dec->decoder) {
- GST_DEBUG_OBJECT (mpeg2dec, "closing decoder");
- mpeg2_close (mpeg2dec->decoder);
- mpeg2dec->decoder = NULL;
- }
-
- gst_mpeg2dec_clear_buffers (mpeg2dec);
- g_free (mpeg2dec->dummybuf[3]);
- mpeg2dec->dummybuf[3] = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_mpeg2dec_open (GstVideoDecoder * decoder)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- mpeg2_accel (MPEG2_ACCEL_DETECT);
- if ((mpeg2dec->decoder = mpeg2_init ()) == NULL)
- return FALSE;
- mpeg2dec->info = mpeg2_info (mpeg2dec->decoder);
-
- return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_close (GstVideoDecoder * decoder)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- if (mpeg2dec->decoder) {
- mpeg2_close (mpeg2dec->decoder);
- mpeg2dec->decoder = NULL;
- mpeg2dec->info = NULL;
- }
- gst_mpeg2dec_clear_buffers (mpeg2dec);
-
- return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- /* Save input state to be used as reference for output state */
- if (mpeg2dec->input_state)
- gst_video_codec_state_unref (mpeg2dec->input_state);
- mpeg2dec->input_state = gst_video_codec_state_ref (state);
-
- return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_start (GstVideoDecoder * decoder)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
-
- return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_stop (GstVideoDecoder * decoder)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- mpeg2_reset (mpeg2dec->decoder, 0);
- mpeg2_skip (mpeg2dec->decoder, 1);
-
- gst_mpeg2dec_clear_buffers (mpeg2dec);
-
- if (mpeg2dec->input_state)
- gst_video_codec_state_unref (mpeg2dec->input_state);
- mpeg2dec->input_state = NULL;
-
- if (mpeg2dec->downstream_pool) {
- gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
- gst_object_unref (mpeg2dec->downstream_pool);
- }
-
- return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_flush (GstVideoDecoder * decoder)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
- /* reset the initial video state */
- mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
- mpeg2_reset (mpeg2dec->decoder, 1);
- mpeg2_skip (mpeg2dec->decoder, 1);
-
- gst_mpeg2dec_clear_buffers (mpeg2dec);
-
- if (mpeg2dec->downstream_pool)
- gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_mpeg2dec_finish (GstVideoDecoder * decoder)
-{
- return GST_FLOW_OK;
-}
-
-static GstBufferPool *
-gst_mpeg2dec_create_generic_pool (GstAllocator * allocator,
- GstAllocationParams * params, GstCaps * caps, guint size, guint min,
- guint max, GstStructure ** out_config)
-{
- GstBufferPool *pool;
- GstStructure *config;
-
- pool = gst_video_buffer_pool_new ();
- config = gst_buffer_pool_get_config (pool);
-
- gst_buffer_pool_config_set_allocator (config, allocator, params);
- gst_buffer_pool_config_set_params (config, caps, size, min, max);
- gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
-
- *out_config = config;
- return pool;
-}
-
-static gboolean
-gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
-{
- GstMpeg2dec *dec = GST_MPEG2DEC (decoder);
- GstBufferPool *pool;
- guint size, min, max;
- GstStructure *config, *down_config = NULL;
- GstAllocator *allocator;
- GstAllocationParams params;
- gboolean update_allocator;
- gboolean has_videometa = FALSE;
- GstCaps *caps;
-
- /* Get rid of ancient pool */
- if (dec->downstream_pool) {
- gst_buffer_pool_set_active (dec->downstream_pool, FALSE);
- gst_object_unref (dec->downstream_pool);
- dec->downstream_pool = NULL;
- }
-
- /* Get negotiated allocation caps */
- gst_query_parse_allocation (query, &caps, NULL);
-
- /* Set allocation parameters to guarantee 16-byte aligned output buffers */
- if (gst_query_get_n_allocation_params (query) > 0) {
- gst_query_parse_nth_allocation_param (query, 0, &allocator, ¶ms);
- update_allocator = TRUE;
- } else {
- allocator = NULL;
- gst_allocation_params_init (¶ms);
- update_allocator = FALSE;
- }
-
- params.align = MAX (params.align, 15);
-
- if (update_allocator)
- gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms);
- else
- gst_query_add_allocation_param (query, allocator, ¶ms);
-
- /* Now chain up to the parent class to guarantee that we can
- * get a buffer pool from the query */
- if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
- query)) {
- if (allocator)
- gst_object_unref (allocator);
- return FALSE;
- }
-
- gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
-
- config = gst_buffer_pool_get_config (pool);
- if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
- gst_buffer_pool_config_add_option (config,
- GST_BUFFER_POOL_OPTION_VIDEO_META);
- has_videometa = TRUE;
- }
-
- if (dec->need_alignment) {
- /* If downstream does not support video meta, we will have to copy, keep
- * the downstream pool to avoid double copying */
- if (!has_videometa) {
- dec->downstream_pool = pool;
- pool = NULL;
- down_config = config;
- config = NULL;
- min = 2;
- max = 0;
- }
-
- /* In case downstream support video meta, but the downstream pool does not
- * have alignment support, discard downstream pool and use video pool */
- else if (!gst_buffer_pool_has_option (pool,
- GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
- gst_object_unref (pool);
- pool = NULL;
- gst_structure_free (config);
- config = NULL;
- }
-
- if (!pool)
- pool = gst_mpeg2dec_create_generic_pool (allocator, ¶ms, caps, size,
- min, max, &config);
-
- gst_buffer_pool_config_add_option (config,
- GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
- gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
- }
-
- if (allocator)
- gst_object_unref (allocator);
-
- /* If we are copying out, we'll need to setup and activate the other pool */
- if (dec->downstream_pool) {
- if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config)) {
- down_config = gst_buffer_pool_get_config (dec->downstream_pool);
- if (!gst_buffer_pool_config_validate_params (down_config, caps, size, min,
- max)) {
- gst_structure_free (down_config);
- goto config_failed;
- }
-
- if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config))
- goto config_failed;
- }
-
- if (!gst_buffer_pool_set_active (dec->downstream_pool, TRUE))
- goto activate_failed;
- }
-
- /* Now configure the pool, if the pool had made some changes, it will
- * return FALSE. Validate the changes ...*/
- if (!gst_buffer_pool_set_config (pool, config)) {
- config = gst_buffer_pool_get_config (pool);
-
- /* Check basic params */
- if (!gst_buffer_pool_config_validate_params (config, caps, size, min, max)) {
- gst_structure_free (config);
- goto config_failed;
- }
-
- /* If needed, check that resulting alignment is still valid */
- if (dec->need_alignment) {
- GstVideoAlignment valign;
-
- if (!gst_buffer_pool_config_get_video_alignment (config, &valign)) {
- gst_structure_free (config);
- goto config_failed;
- }
-
- if (valign.padding_left != 0 || valign.padding_top != 0
- || valign.padding_right < dec->valign.padding_right
- || valign.padding_bottom < dec->valign.padding_bottom) {
- gst_structure_free (config);
- goto config_failed;
- }
- }
-
- if (!gst_buffer_pool_set_config (pool, config))
- goto config_failed;
- }
-
- /* For external pools, we need to check strides */
- if (!GST_IS_VIDEO_BUFFER_POOL (pool) && has_videometa) {
- GstBuffer *buffer;
- const GstVideoFormatInfo *finfo;
- GstVideoMeta *vmeta;
- gint uv_stride;
-
- if (!gst_buffer_pool_set_active (pool, TRUE))
- goto activate_failed;
-
- if (gst_buffer_pool_acquire_buffer (pool, &buffer, NULL) != GST_FLOW_OK) {
- gst_buffer_pool_set_active (pool, FALSE);
- goto acquire_failed;
- }
-
- vmeta = gst_buffer_get_video_meta (buffer);
- finfo = gst_video_format_get_info (vmeta->format);
-
- /* Check that strides are compatible. In this case, we can scale the
- * stride directly since all the pixel strides for the formats we support
- * is 1 */
- uv_stride = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, 1, vmeta->stride[0]);
- if (uv_stride != vmeta->stride[1] || uv_stride != vmeta->stride[2]) {
- gst_buffer_pool_set_active (pool, FALSE);
- gst_object_unref (pool);
-
- pool = gst_mpeg2dec_create_generic_pool (allocator, ¶ms, caps, size,
- min, max, &config);
-
- if (dec->need_alignment) {
- gst_buffer_pool_config_add_option (config,
- GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
- gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
- }
-
- /* Generic pool don't fail on _set_config() */
- gst_buffer_pool_set_config (pool, config);
- }
-
- gst_buffer_unref (buffer);
- }
-
- gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
- gst_object_unref (pool);
-
- return TRUE;
-
-config_failed:
- gst_object_unref (pool);
- GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
- ("Failed to configure buffer pool"),
- ("Configuration is most likely invalid, please report this issue."));
- return FALSE;
-
-activate_failed:
- gst_object_unref (pool);
- GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
- ("Failed to activate buffer pool"), (NULL));
- return FALSE;
-
-acquire_failed:
- gst_object_unref (pool);
- GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
- ("Failed to acquire a buffer"), (NULL));
- return FALSE;
-}
-
-static GstFlowReturn
-gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstVideoCodecFrame * in_frame,
- GstVideoFrame * input_vframe)
-{
- GstVideoCodecState *state;
- GstVideoInfo *info;
- GstVideoInfo *dinfo;
- GstVideoFrame output_frame;
- GstFlowReturn ret;
- GstBuffer *buffer = NULL;
-
- state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (dec));
- info = &state->info;
- dinfo = &dec->decoded_info;
-
- GST_CAT_LOG_OBJECT (CAT_PERFORMANCE, dec,
- "Copying input buffer %ux%u (%" G_GSIZE_FORMAT ") to output buffer "
- "%ux%u (%" G_GSIZE_FORMAT ")", dinfo->width, dinfo->height,
- dinfo->size, info->width, info->height, info->size);
-
- ret = gst_buffer_pool_acquire_buffer (dec->downstream_pool, &buffer, NULL);
- if (ret != GST_FLOW_OK)
- goto beach;
-
- if (!gst_video_frame_map (&output_frame, info, buffer, GST_MAP_WRITE))
- goto map_fail;
-
- if (in_frame->output_buffer)
- gst_buffer_unref (in_frame->output_buffer);
- in_frame->output_buffer = buffer;
-
- if (!gst_video_frame_copy (&output_frame, input_vframe))
- goto copy_failed;
-
- gst_video_frame_unmap (&output_frame);
-
- GST_BUFFER_FLAGS (in_frame->output_buffer) =
- GST_BUFFER_FLAGS (input_vframe->buffer);
-
-beach:
- gst_video_codec_state_unref (state);
-
- return ret;
-
-map_fail:
- {
- GST_ERROR_OBJECT (dec, "Failed to map output frame");
- gst_video_codec_state_unref (state);
- return GST_FLOW_ERROR;
- }
-
-copy_failed:
- {
- GST_ERROR_OBJECT (dec, "Failed to copy output frame");
- gst_video_frame_unmap (&output_frame);
- gst_video_codec_state_unref (state);
- return GST_FLOW_ERROR;
- }
-}
-
-typedef struct
-{
- gint id;
- GstVideoFrame frame;
-} GstMpeg2DecBuffer;
-
-static void
-gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec)
-{
- GList *l;
- while ((l = g_list_first (mpeg2dec->buffers))) {
- GstMpeg2DecBuffer *mbuf = l->data;
- gst_video_frame_unmap (&mbuf->frame);
- g_slice_free (GstMpeg2DecBuffer, mbuf);
- mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
- }
-}
-
-static void
-gst_mpeg2dec_save_buffer (GstMpeg2dec * mpeg2dec, gint id,
- GstVideoFrame * frame)
-{
- GstMpeg2DecBuffer *mbuf;
-
- GST_LOG_OBJECT (mpeg2dec, "Saving local info for frame %d", id);
-
- mbuf = g_slice_new0 (GstMpeg2DecBuffer);
- mbuf->id = id;
- mbuf->frame = *frame;
-
- mpeg2dec->buffers = g_list_prepend (mpeg2dec->buffers, mbuf);
-}
-
-static gint
-gst_mpeg2dec_buffer_compare (GstMpeg2DecBuffer * mbuf, gconstpointer id)
-{
- if (mbuf->id == GPOINTER_TO_INT (id))
- return 0;
- return -1;
-}
-
-static void
-gst_mpeg2dec_discard_buffer (GstMpeg2dec * mpeg2dec, gint id)
-{
- GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
- (GCompareFunc) gst_mpeg2dec_buffer_compare);
-
- if (l) {
- GstMpeg2DecBuffer *mbuf = l->data;
- gst_video_frame_unmap (&mbuf->frame);
- g_slice_free (GstMpeg2DecBuffer, mbuf);
- mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
- GST_LOG_OBJECT (mpeg2dec, "Discarded local info for frame %d", id);
- } else {
- GST_WARNING ("Could not find buffer %d, will be leaked until next reset",
- id);
- }
-}
-
-static GstVideoFrame *
-gst_mpeg2dec_get_buffer (GstMpeg2dec * mpeg2dec, gint id)
-{
- GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
- (GCompareFunc) gst_mpeg2dec_buffer_compare);
-
- if (l) {
- GstMpeg2DecBuffer *mbuf = l->data;
- return &mbuf->frame;
- }
-
- return NULL;
-}
-
-static void
-init_dummybuf (GstMpeg2dec * mpeg2dec)
-{
- g_free (mpeg2dec->dummybuf[3]);
-
- /* libmpeg2 needs 16 byte aligned buffers... care for this here */
- mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->decoded_info.size + 15);
- mpeg2dec->dummybuf[0] = ALIGN_16 (mpeg2dec->dummybuf[3]);
- mpeg2dec->dummybuf[1] =
- mpeg2dec->dummybuf[0] +
- GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 1);
- mpeg2dec->dummybuf[2] =
- mpeg2dec->dummybuf[0] +
- GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 2);
-}
-
-static GstFlowReturn
-handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- GstClockTime latency;
- const mpeg2_sequence_t *sequence;
- GstVideoCodecState *state;
- GstVideoInfo *vinfo;
- GstVideoFormat format;
-
- sequence = info->sequence;
-
- if (sequence->frame_period == 0)
- goto invalid_frame_period;
-
- /* mpeg2 video can only be from 16x16 to 4096x4096. Everything
- * else is a corrupted file */
- if (sequence->width > 4096 || sequence->width < 16 ||
- sequence->height > 4096 || sequence->height < 16)
- goto invalid_size;
-
- GST_DEBUG_OBJECT (mpeg2dec,
- "widthxheight: %dx%d , decoded_widthxheight: %dx%d",
- sequence->picture_width, sequence->picture_height, sequence->width,
- sequence->height);
-
- gst_video_alignment_reset (&mpeg2dec->valign);
-
- if (sequence->picture_width < sequence->width ||
- sequence->picture_height < sequence->height) {
- GST_DEBUG_OBJECT (mpeg2dec, "we need to crop");
- mpeg2dec->valign.padding_right = sequence->width - sequence->picture_width;
- mpeg2dec->valign.padding_bottom =
- sequence->height - sequence->picture_height;
- mpeg2dec->need_alignment = TRUE;
- } else if (sequence->picture_width == sequence->width ||
- sequence->picture_height == sequence->height) {
- GST_DEBUG_OBJECT (mpeg2dec, "no cropping needed");
- mpeg2dec->need_alignment = FALSE;
- } else {
- goto invalid_picture;
- }
-
- /* get subsampling */
- if (sequence->chroma_width < sequence->width) {
- /* horizontally subsampled */
- if (sequence->chroma_height < sequence->height) {
- /* and vertically subsamples */
- format = GST_VIDEO_FORMAT_I420;
- } else {
- format = GST_VIDEO_FORMAT_Y42B;
- }
- } else {
- /* not subsampled */
- format = GST_VIDEO_FORMAT_Y444;
- }
-
- state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (mpeg2dec),
- format, sequence->picture_width, sequence->picture_height,
- mpeg2dec->input_state);
- vinfo = &state->info;
-
- /* If we don't have a valid upstream PAR override it */
- if (GST_VIDEO_INFO_PAR_N (vinfo) == 1 &&
- GST_VIDEO_INFO_PAR_D (vinfo) == 1 &&
- sequence->pixel_width != 0 && sequence->pixel_height != 0) {
- guint pixel_width, pixel_height;
-
- if (mpeg2_guess_aspect (sequence, &pixel_width, &pixel_height)) {
- vinfo->par_n = pixel_width;
- vinfo->par_d = pixel_height;
- }
- GST_DEBUG_OBJECT (mpeg2dec, "Setting PAR %d x %d",
- vinfo->par_n, vinfo->par_d);
- }
- vinfo->fps_n = 27000000;
- vinfo->fps_d = sequence->frame_period;
-
- if (!(sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE))
- vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
- else
- vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-
- vinfo->chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2;
- vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
-
- if (sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION) {
- /* do color description */
- switch (sequence->colour_primaries) {
- case 1:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
- break;
- case 4:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
- break;
- case 5:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
- break;
- case 6:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
- break;
- case 7:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
- break;
- /* 0 forbidden */
- /* 2 unspecified */
- /* 3 reserved */
- /* 8-255 reserved */
- default:
- vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
- break;
- }
- /* matrix coefficients */
- switch (sequence->matrix_coefficients) {
- case 1:
- vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709;
- break;
- case 4:
- vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC;
- break;
- case 5:
- case 6:
- vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
- break;
- case 7:
- vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M;
- break;
- /* 0 forbidden */
- /* 2 unspecified */
- /* 3 reserved */
- /* 8-255 reserved */
- default:
- vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN;
- break;
- }
- /* transfer characteristics */
- switch (sequence->transfer_characteristics) {
- case 1:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
- break;
- case 4:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22;
- break;
- case 5:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28;
- break;
- case 6:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
- break;
- case 7:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M;
- break;
- case 8:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10;
- break;
- /* 0 forbidden */
- /* 2 unspecified */
- /* 3 reserved */
- /* 9-255 reserved */
- default:
- vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN;
- break;
- }
- }
-
- GST_DEBUG_OBJECT (mpeg2dec,
- "sequence flags: %d, frame period: %d, frame rate: %d/%d",
- sequence->flags, sequence->frame_period, vinfo->fps_n, vinfo->fps_d);
- GST_DEBUG_OBJECT (mpeg2dec, "profile: %02x, colour_primaries: %d",
- sequence->profile_level_id, sequence->colour_primaries);
- GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d",
- sequence->transfer_characteristics, sequence->matrix_coefficients);
- GST_DEBUG_OBJECT (mpeg2dec,
- "FLAGS: CONSTRAINED_PARAMETERS:%d, PROGRESSIVE_SEQUENCE:%d",
- sequence->flags & SEQ_FLAG_CONSTRAINED_PARAMETERS,
- sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
- GST_DEBUG_OBJECT (mpeg2dec, "FLAGS: LOW_DELAY:%d, COLOUR_DESCRIPTION:%d",
- sequence->flags & SEQ_FLAG_LOW_DELAY,
- sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION);
-
- /* Save the padded video information */
- mpeg2dec->decoded_info = *vinfo;
- gst_video_info_align (&mpeg2dec->decoded_info, &mpeg2dec->valign);
-
- /* Mpeg2dec has 2 frame latency to produce a picture and 1 frame latency in
- * it's parser */
- latency = gst_util_uint64_scale (3 * GST_SECOND, vinfo->fps_d, vinfo->fps_n);
- gst_video_decoder_set_latency (GST_VIDEO_DECODER (mpeg2dec), latency,
- latency);
-
- if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (mpeg2dec)))
- goto negotiation_fail;
-
- gst_video_codec_state_unref (state);
-
- mpeg2_custom_fbuf (mpeg2dec->decoder, 1);
-
- init_dummybuf (mpeg2dec);
-
- /* Pump in some null buffers, because otherwise libmpeg2 doesn't
- * initialise the discard_fbuf->id */
- mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
- mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
- mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
- gst_mpeg2dec_clear_buffers (mpeg2dec);
-
- return ret;
-
-invalid_frame_period:
- {
- GST_WARNING_OBJECT (mpeg2dec, "Frame period is 0!");
- return GST_FLOW_ERROR;
- }
-invalid_size:
- {
- GST_ERROR_OBJECT (mpeg2dec, "Invalid frame dimensions: %d x %d",
- sequence->width, sequence->height);
- return GST_FLOW_ERROR;
- }
-
-invalid_picture:
- {
- GST_ERROR_OBJECT (mpeg2dec, "Picture dimension bigger then frame: "
- "%d x %d is bigger then %d x %d", sequence->picture_width,
- sequence->picture_height, sequence->width, sequence->height);
- return GST_FLOW_ERROR;
- }
-
-
-negotiation_fail:
- {
- GST_WARNING_OBJECT (mpeg2dec, "Failed to negotiate with downstream");
- gst_video_codec_state_unref (state);
- return GST_FLOW_ERROR;
- }
-}
-
-static GstFlowReturn
-handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info,
- GstVideoCodecFrame * frame)
-{
- GstVideoDecoder *decoder = (GstVideoDecoder *) mpeg2dec;
- GstFlowReturn ret;
- gint type;
- const gchar *type_str = NULL;
- gboolean key_frame = FALSE;
- const mpeg2_picture_t *picture = info->current_picture;
- GstVideoFrame vframe;
- guint8 *buf[3];
-
- ret = gst_video_decoder_allocate_output_frame (decoder, frame);
- if (ret != GST_FLOW_OK)
- return ret;
-
- type = picture->flags & PIC_MASK_CODING_TYPE;
- switch (type) {
- case PIC_FLAG_CODING_TYPE_I:
- key_frame = TRUE;
- mpeg2_skip (mpeg2dec->decoder, 0);
- type_str = "I";
- break;
- case PIC_FLAG_CODING_TYPE_P:
- type_str = "P";
- break;
- case PIC_FLAG_CODING_TYPE_B:
- type_str = "B";
- break;
- default:
- gst_video_codec_frame_ref (frame);
- ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
- GST_VIDEO_DECODER_ERROR (mpeg2dec, 1, STREAM, DECODE,
- ("decoding error"), ("Invalid picture type"), ret);
- return ret;
- }
-
- GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %s", type_str);
- GST_DEBUG_OBJECT (mpeg2dec, "picture %s, frame %i",
- key_frame ? ", kf," : " ", frame->system_frame_number);
-
- if (GST_VIDEO_INFO_IS_INTERLACED (&mpeg2dec->decoded_info)) {
- /* This implies SEQ_FLAG_PROGRESSIVE_SEQUENCE is not set */
- if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) {
- GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
- }
- if (!(picture->flags & PIC_FLAG_PROGRESSIVE_FRAME)) {
- GST_BUFFER_FLAG_SET (frame->output_buffer,
- GST_VIDEO_BUFFER_FLAG_INTERLACED);
- }
- if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) {
- GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
- }
- }
-
- if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) {
- mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_KEYFRAME;
- }
-
- GST_DEBUG_OBJECT (mpeg2dec,
- "picture: %s %s %s %s %s fields:%d ts:%"
- GST_TIME_FORMAT,
- (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : " "),
- (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : " "),
- (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : " "),
- (picture->flags & PIC_FLAG_SKIP ? "skip" : " "),
- (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : " "),
- picture->nb_fields, GST_TIME_ARGS (frame->pts));
-
- if (!gst_video_frame_map (&vframe, &mpeg2dec->decoded_info,
- frame->output_buffer, GST_MAP_READ | GST_MAP_WRITE))
- goto map_fail;
-
- buf[0] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0);
- buf[1] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1);
- buf[2] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 2);
-
- GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, frame %i",
- buf[0], buf[1], buf[2], frame->system_frame_number);
-
- /* Note: We use a non-null 'id' value to make the distinction
- * between the dummy buffers (which have an id of NULL) and the
- * ones we did */
- mpeg2_stride (mpeg2dec->decoder, vframe.info.stride[0]);
- mpeg2_set_buf (mpeg2dec->decoder, buf,
- GINT_TO_POINTER (frame->system_frame_number + 1));
- gst_mpeg2dec_save_buffer (mpeg2dec, frame->system_frame_number, &vframe);
-
- return ret;
-
-map_fail:
- {
- GST_ELEMENT_ERROR (mpeg2dec, RESOURCE, WRITE, ("Failed to map frame"),
- (NULL));
- return GST_FLOW_ERROR;
- }
-}
-
-static GstFlowReturn
-handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- GstVideoCodecFrame *frame;
- const mpeg2_picture_t *picture;
- gboolean key_frame = FALSE;
- gboolean bidirect_frame = FALSE;
- gboolean closed_gop = FALSE;
-
- GST_DEBUG_OBJECT (mpeg2dec,
- "fbuf:%p display_picture:%p current_picture:%p fbuf->id:%d",
- info->display_fbuf, info->display_picture, info->current_picture,
- GPOINTER_TO_INT (info->display_fbuf->id) - 1);
-
- /* Note, the fbuf-id is shifted by 1 to make the difference between
- * NULL values (used by dummy buffers) and 'real' values */
- frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (mpeg2dec),
- GPOINTER_TO_INT (info->display_fbuf->id) - 1);
- if (!frame)
- goto no_frame;
- picture = info->display_picture;
- key_frame = (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_I;
- bidirect_frame =
- (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_B;
- closed_gop = (info->gop->flags & GOP_FLAG_CLOSED_GOP);
-
- GST_DEBUG_OBJECT (mpeg2dec, "picture flags: %d, type: %d, keyframe: %d",
- picture->flags, picture->flags & PIC_MASK_CODING_TYPE, key_frame);
-
- if (key_frame) {
- mpeg2_skip (mpeg2dec->decoder, 0);
- }
-
- if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_KEYFRAME && key_frame)
- mpeg2dec->discont_state = MPEG2DEC_DISC_NONE;
-
- if (picture->flags & PIC_FLAG_SKIP) {
- GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag");
- ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
- mpeg2_skip (mpeg2dec->decoder, 1);
- return ret;
- }
-
- /* Skip B-frames if GOP is not closed and waiting for the first keyframe. */
- if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) {
- if (bidirect_frame && !closed_gop) {
- GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d",
- mpeg2dec->discont_state);
- ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
- return ret;
- }
- }
-
- /* do cropping if the target region is smaller than the input one */
- if (mpeg2dec->downstream_pool) {
- GstVideoFrame *vframe;
-
- if (gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (mpeg2dec),
- frame) < 0) {
- GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer crop, too late");
- return gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
- }
-
- GST_DEBUG_OBJECT (mpeg2dec, "Doing a crop copy of the decoded buffer");
-
- vframe = gst_mpeg2dec_get_buffer (mpeg2dec, frame->system_frame_number);
- g_assert (vframe != NULL);
- ret = gst_mpeg2dec_crop_buffer (mpeg2dec, frame, vframe);
-
- if (ret != GST_FLOW_OK) {
- gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
- return ret;
- }
- }
-
- ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-
- return ret;
-
-no_frame:
- {
- GST_DEBUG ("display buffer does not have a valid frame");
- return GST_FLOW_OK;
- }
-}
-
-static GstFlowReturn
-gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
- GstVideoCodecFrame * frame)
-{
- GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
- GstBuffer *buf = frame->input_buffer;
- GstMapInfo minfo;
- const mpeg2_info_t *info;
- mpeg2_state_t state;
- gboolean done = FALSE;
- GstFlowReturn ret = GST_FLOW_OK;
-
- GST_LOG_OBJECT (mpeg2dec, "received frame %d, timestamp %"
- GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
- frame->system_frame_number,
- GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration));
-
- gst_buffer_ref (buf);
- if (!gst_buffer_map (buf, &minfo, GST_MAP_READ)) {
- GST_ERROR_OBJECT (mpeg2dec, "Failed to map input buffer");
- gst_buffer_unref (buf);
- return GST_FLOW_ERROR;
- }
-
- info = mpeg2dec->info;
-
- GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer");
- mpeg2_buffer (mpeg2dec->decoder, minfo.data, minfo.data + minfo.size);
- GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer done");
-
- while (!done) {
- GST_LOG_OBJECT (mpeg2dec, "calling parse");
- state = mpeg2_parse (mpeg2dec->decoder);
- GST_DEBUG_OBJECT (mpeg2dec, "parse state %d", state);
-
- switch (state) {
- case STATE_SEQUENCE_MODIFIED:
- GST_DEBUG_OBJECT (mpeg2dec, "sequence modified");
- mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
- gst_mpeg2dec_clear_buffers (mpeg2dec);
- /* fall through */
- case STATE_SEQUENCE:
- ret = handle_sequence (mpeg2dec, info);
- /* if there is an error handling the sequence
- * reset the decoder, maybe something more elegant
- * could be done.
- */
- if (ret == GST_FLOW_ERROR) {
- GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
- ("decoding error"), ("Bad sequence header"), ret);
- gst_video_decoder_drop_frame (decoder, frame);
- gst_mpeg2dec_flush (decoder);
- goto done;
- }
- break;
- case STATE_SEQUENCE_REPEATED:
- GST_DEBUG_OBJECT (mpeg2dec, "sequence repeated");
- break;
- case STATE_GOP:
- GST_DEBUG_OBJECT (mpeg2dec, "gop");
- break;
- case STATE_PICTURE:
- ret = handle_picture (mpeg2dec, info, frame);
- break;
- case STATE_SLICE_1ST:
- GST_LOG_OBJECT (mpeg2dec, "1st slice of frame encountered");
- break;
- case STATE_PICTURE_2ND:
- GST_LOG_OBJECT (mpeg2dec,
- "Second picture header encountered. Decoding 2nd field");
- break;
- case STATE_INVALID_END:
- GST_DEBUG_OBJECT (mpeg2dec, "invalid end");
- case STATE_END:
- GST_DEBUG_OBJECT (mpeg2dec, "end");
- case STATE_SLICE:
- GST_DEBUG_OBJECT (mpeg2dec, "display_fbuf:%p, discard_fbuf:%p",
- info->display_fbuf, info->discard_fbuf);
- if (info->display_fbuf && info->display_fbuf->id) {
- ret = handle_slice (mpeg2dec, info);
- } else {
- GST_DEBUG_OBJECT (mpeg2dec, "no picture to display");
- }
- if (info->discard_fbuf && info->discard_fbuf->id)
- gst_mpeg2dec_discard_buffer (mpeg2dec,
- GPOINTER_TO_INT (info->discard_fbuf->id) - 1);
- if (state != STATE_SLICE) {
- gst_mpeg2dec_clear_buffers (mpeg2dec);
- }
- break;
- case STATE_BUFFER:
- done = TRUE;
- break;
- /* error */
- case STATE_INVALID:
- GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
- ("decoding error"), ("Reached libmpeg2 invalid state"), ret);
- continue;
- default:
- GST_ERROR_OBJECT (mpeg2dec, "Unknown libmpeg2 state %d, FIXME", state);
- ret = GST_FLOW_OK;
- gst_video_codec_frame_unref (frame);
- goto done;
- }
-
- if (ret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (mpeg2dec, "exit loop, reason %s",
- gst_flow_get_name (ret));
- break;
- }
- }
-
- gst_video_codec_frame_unref (frame);
-
-done:
- gst_buffer_unmap (buf, &minfo);
- gst_buffer_unref (buf);
- return ret;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (mpeg2dec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- mpeg2dec,
- "LibMpeg2 decoder", plugin_init, VERSION, "GPL", GST_PACKAGE_NAME,
- GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_MPEG2DEC_H__
-#define __GST_MPEG2DEC_H__
-
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideodecoder.h>
-#include <mpeg2.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MPEG2DEC \
- (gst_mpeg2dec_get_type())
-#define GST_MPEG2DEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG2DEC,GstMpeg2dec))
-#define GST_MPEG2DEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG2DEC,GstMpeg2decClass))
-#define GST_IS_MPEG2DEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG2DEC))
-#define GST_IS_MPEG2DEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG2DEC))
-
-#define MPEG_TIME_TO_GST_TIME(time) ((time) == -1 ? -1 : ((time) * (GST_MSECOND/10)) / G_GINT64_CONSTANT(9))
-#define GST_TIME_TO_MPEG_TIME(time) ((time) == -1 ? -1 : ((time) * G_GINT64_CONSTANT(9)) / (GST_MSECOND/10))
-
-typedef struct _GstMpeg2dec GstMpeg2dec;
-typedef struct _GstMpeg2decClass GstMpeg2decClass;
-
-typedef enum
-{
- MPEG2DEC_DISC_NONE = 0,
- MPEG2DEC_DISC_NEW_PICTURE,
- MPEG2DEC_DISC_NEW_KEYFRAME
-} DiscontState;
-
-struct _GstMpeg2dec {
- GstVideoDecoder element;
-
- mpeg2dec_t *decoder;
- const mpeg2_info_t *info;
-
- /* Buffer lifetime management */
- GList *buffers;
-
- /* FIXME This should not be necessary. It is used to prevent image
- * corruption when the parser does not behave the way it should.
- * See https://bugzilla.gnome.org/show_bug.cgi?id=674238
- */
- DiscontState discont_state;
-
- /* video state */
- GstVideoCodecState *input_state;
- GstVideoInfo decoded_info;
- GstVideoAlignment valign;
- GstBufferPool * downstream_pool;
- gboolean need_alignment;
-
- guint8 *dummybuf[4];
-};
-
-struct _GstMpeg2decClass {
- GstVideoDecoderClass parent_class;
-};
-
-GType gst_mpeg2dec_get_type(void);
-GST_ELEMENT_REGISTER_DECLARE (mpeg2dec);
-
-G_END_DECLS
-
-#endif /* __GST_MPEG2DEC_H__ */
+++ /dev/null
-mpeg2_dep = dependency('libmpeg2', version : '>= 0.4.0', required : get_option('mpeg2dec'))
-
-if mpeg2_dep.found()
- mpeg2dec = library('gstmpeg2dec',
- ['gstmpeg2dec.c'],
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstvideo_dep, mpeg2_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(mpeg2dec, install_dir : plugins_pkgconfig_install_dir)
- plugins += [mpeg2dec]
-endif
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * (C) <2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-siddec
- *
- * This element decodes .sid files to raw audio. .sid files are in fact
- * small Commodore 64 programs that are executed on an emulated 6502 CPU and a
- * MOS 6581 sound chip.
- *
- * This plugin will first load the complete program into memory before starting
- * the emulator and producing output.
- *
- * Seeking is not (and cannot be) implemented.
- *
- * ## Example pipelines
- *
- * |[
- * gst-launch-1.0 -v filesrc location=Hawkeye.sid ! siddec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Decode a sid file and play it back.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gst/audio/audio.h>
-#include "gstsiddec.h"
-
-#define DEFAULT_TUNE 0
-#define DEFAULT_CLOCK SIDTUNE_CLOCK_PAL
-#define DEFAULT_MEMORY MPU_BANK_SWITCHING
-#define DEFAULT_FILTER TRUE
-#define DEFAULT_MEASURED_VOLUME TRUE
-#define DEFAULT_MOS8580 FALSE
-#define DEFAULT_FORCE_SPEED FALSE
-#define DEFAULT_BLOCKSIZE 4096
-
-enum
-{
- PROP_0,
- PROP_TUNE,
- PROP_CLOCK,
- PROP_MEMORY,
- PROP_FILTER,
- PROP_MEASURED_VOLUME,
- PROP_MOS8580,
- PROP_FORCE_SPEED,
- PROP_BLOCKSIZE,
- PROP_METADATA
-};
-
-static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-sid")
- );
-
-#define FORMATS "{ " GST_AUDIO_NE(S16) "," GST_AUDIO_NE(U16) ", S8, U8 }"
-
-static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, "
- "format = (string) " FORMATS ", "
- "layout = (string) interleaved, "
- "rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
- );
-
-GST_DEBUG_CATEGORY_STATIC (gst_siddec_debug);
-#define GST_CAT_DEFAULT gst_siddec_debug
-
-#define GST_TYPE_SID_CLOCK (gst_sid_clock_get_type())
-static GType
-gst_sid_clock_get_type (void)
-{
- static GType sid_clock_type = 0;
- static const GEnumValue sid_clock[] = {
- {SIDTUNE_CLOCK_PAL, "PAL", "pal"},
- {SIDTUNE_CLOCK_NTSC, "NTSC", "ntsc"},
- {0, NULL, NULL},
- };
-
- if (!sid_clock_type) {
- sid_clock_type = g_enum_register_static ("GstSidClock", sid_clock);
- }
- return sid_clock_type;
-}
-
-#define GST_TYPE_SID_MEMORY (gst_sid_memory_get_type())
-static GType
-gst_sid_memory_get_type (void)
-{
- static GType sid_memory_type = 0;
- static const GEnumValue sid_memory[] = {
- {MPU_BANK_SWITCHING, "Bank Switching", "bank-switching"},
- {MPU_TRANSPARENT_ROM, "Transparent ROM", "transparent-rom"},
- {MPU_PLAYSID_ENVIRONMENT, "Playsid Environment", "playsid-environment"},
- {0, NULL, NULL},
- };
-
- if (!sid_memory_type) {
- sid_memory_type = g_enum_register_static ("GstSidMemory", sid_memory);
- }
- return sid_memory_type;
-}
-
-static void gst_siddec_finalize (GObject * object);
-
-static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-
-static gboolean gst_siddec_src_convert (GstPad * pad, GstFormat src_format,
- gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
-static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent,
- GstQuery * query);
-
-static void gst_siddec_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static void gst_siddec_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-
-#define gst_siddec_parent_class parent_class
-G_DEFINE_TYPE (GstSidDec, gst_siddec, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (siddec, "siddec", GST_RANK_PRIMARY,
- GST_TYPE_SIDDEC);
-
-static void
-gst_siddec_class_init (GstSidDecClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_siddec_finalize;
- gobject_class->set_property = gst_siddec_set_property;
- gobject_class->get_property = gst_siddec_get_property;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TUNE,
- g_param_spec_int ("tune", "tune", "tune",
- 0, 100, DEFAULT_TUNE,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOCK,
- g_param_spec_enum ("clock", "clock", "clock",
- GST_TYPE_SID_CLOCK, DEFAULT_CLOCK,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEMORY,
- g_param_spec_enum ("memory", "memory", "memory", GST_TYPE_SID_MEMORY,
- DEFAULT_MEMORY,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTER,
- g_param_spec_boolean ("filter", "filter", "filter", DEFAULT_FILTER,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEASURED_VOLUME,
- g_param_spec_boolean ("measured-volume", "measured_volume",
- "measured_volume", DEFAULT_MEASURED_VOLUME,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MOS8580,
- g_param_spec_boolean ("mos8580", "mos8580", "mos8580", DEFAULT_MOS8580,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FORCE_SPEED,
- g_param_spec_boolean ("force-speed", "force_speed", "force_speed",
- DEFAULT_FORCE_SPEED,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLOCKSIZE,
- g_param_spec_uint ("blocksize", "Block size",
- "Size in bytes to output per buffer", 1, G_MAXUINT,
- DEFAULT_BLOCKSIZE,
- (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (gobject_class, PROP_METADATA,
- g_param_spec_boxed ("metadata", "Metadata", "Metadata", GST_TYPE_CAPS,
- (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
-
- gst_element_class_set_static_metadata (gstelement_class, "Sid decoder",
- "Codec/Decoder/Audio", "Use libsidplay to decode SID audio tunes",
- "Wim Taymans <wim.taymans@gmail.com>");
-
- gst_element_class_add_static_pad_template (gstelement_class, &src_templ);
- gst_element_class_add_static_pad_template (gstelement_class, &sink_templ);
-
- GST_DEBUG_CATEGORY_INIT (gst_siddec_debug, "siddec", 0,
- "C64 sid song player");
-
- gst_type_mark_as_plugin_api (GST_TYPE_SID_CLOCK, static_cast<GstPluginAPIFlags>(0));
- gst_type_mark_as_plugin_api (GST_TYPE_SID_MEMORY, static_cast<GstPluginAPIFlags>(0));
-}
-
-static void
-gst_siddec_init (GstSidDec * siddec)
-{
- siddec->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
- gst_pad_set_event_function (siddec->sinkpad, gst_siddec_sink_event);
- gst_pad_set_chain_function (siddec->sinkpad, gst_siddec_chain);
- gst_element_add_pad (GST_ELEMENT (siddec), siddec->sinkpad);
-
- siddec->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
- gst_pad_set_event_function (siddec->srcpad, gst_siddec_src_event);
- gst_pad_set_query_function (siddec->srcpad, gst_siddec_src_query);
- gst_pad_use_fixed_caps (siddec->srcpad);
- gst_element_add_pad (GST_ELEMENT (siddec), siddec->srcpad);
-
- siddec->engine = new emuEngine ();
- siddec->tune = new sidTune (0);
- siddec->config = (emuConfig *) g_malloc (sizeof (emuConfig));
-
- /* get default config parameters */
- siddec->engine->getConfig (*siddec->config);
-
- siddec->config->mos8580 = DEFAULT_MOS8580; // mos8580
- siddec->config->memoryMode = DEFAULT_MEMORY; // memory mode
- siddec->config->clockSpeed = DEFAULT_CLOCK; // clock speed
- siddec->config->forceSongSpeed = DEFAULT_FORCE_SPEED; // force song speed
-
- siddec->engine->setConfig (*siddec->config);
-
- siddec->tune_buffer = (guchar *) g_malloc (maxSidtuneFileLen);
- siddec->tune_len = 0;
- siddec->tune_number = 0;
- siddec->total_bytes = 0;
- siddec->blocksize = DEFAULT_BLOCKSIZE;
-
- siddec->have_group_id = FALSE;
- siddec->group_id = G_MAXUINT;
-}
-
-static void
-gst_siddec_finalize (GObject * object)
-{
- GstSidDec *siddec = GST_SIDDEC (object);
-
- g_free (siddec->config);
- g_free (siddec->tune_buffer);
-
- delete (siddec->tune);
- delete (siddec->engine);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-update_tags (GstSidDec * siddec)
-{
- sidTuneInfo info;
- GstTagList *list;
-
- if (siddec->tune->getInfo (info)) {
- list = gst_tag_list_new_empty ();
-
- if (info.nameString) {
- gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
- GST_TAG_TITLE, info.nameString, (void *) NULL);
- }
- if (info.authorString) {
- gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
- GST_TAG_ARTIST, info.authorString, (void *) NULL);
- }
- if (info.copyrightString) {
- gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
- GST_TAG_COPYRIGHT, info.copyrightString, (void *) NULL);
- }
- gst_pad_push_event (siddec->srcpad, gst_event_new_tag (list));
- }
-}
-
-static gboolean
-siddec_negotiate (GstSidDec * siddec)
-{
- GstCaps *allowed;
- GstStructure *structure;
- int rate = 44100;
- int channels = 1;
- GstCaps *caps;
- const gchar *str;
- GstAudioFormat format;
- GstEvent *event;
- gchar *stream_id;
-
- allowed = gst_pad_get_allowed_caps (siddec->srcpad);
- if (!allowed)
- goto nothing_allowed;
-
- GST_DEBUG_OBJECT (siddec, "allowed caps: %" GST_PTR_FORMAT, allowed);
-
- allowed = gst_caps_normalize (allowed);
-
- structure = gst_caps_get_structure (allowed, 0);
-
- str = gst_structure_get_string (structure, "format");
- if (str == NULL)
- goto invalid_format;
-
- format = gst_audio_format_from_string (str);
- switch (format) {
- case GST_AUDIO_FORMAT_S8:
- siddec->config->bitsPerSample = 8;
- siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
- break;
- case GST_AUDIO_FORMAT_U8:
- siddec->config->bitsPerSample = 8;
- siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
- break;
- case GST_AUDIO_FORMAT_S16:
- siddec->config->bitsPerSample = 16;
- siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
- break;
- case GST_AUDIO_FORMAT_U16:
- siddec->config->bitsPerSample = 16;
- siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
- break;
- default:
- goto invalid_format;
- }
-
- gst_structure_get_int (structure, "rate", &rate);
- siddec->config->frequency = rate;
- gst_structure_get_int (structure, "channels", &channels);
- siddec->config->channels = channels;
-
- stream_id =
- gst_pad_create_stream_id (siddec->srcpad, GST_ELEMENT_CAST (siddec),
- NULL);
-
- event = gst_pad_get_sticky_event (siddec->sinkpad, GST_EVENT_STREAM_START, 0);
- if (event) {
- if (gst_event_parse_group_id (event, &siddec->group_id))
- siddec->have_group_id = TRUE;
- else
- siddec->have_group_id = FALSE;
- gst_event_unref (event);
- } else if (!siddec->have_group_id) {
- siddec->have_group_id = TRUE;
- siddec->group_id = gst_util_group_id_next ();
- }
-
- event = gst_event_new_stream_start (stream_id);
- if (siddec->have_group_id)
- gst_event_set_group_id (event, siddec->group_id);
-
- gst_pad_push_event (siddec->srcpad, event);
- g_free (stream_id);
-
- caps = gst_caps_new_simple ("audio/x-raw",
- "format", G_TYPE_STRING, gst_audio_format_to_string (format),
- "layout", G_TYPE_STRING, "interleaved",
- "rate", G_TYPE_INT, siddec->config->frequency,
- "channels", G_TYPE_INT, siddec->config->channels, NULL);
- gst_pad_set_caps (siddec->srcpad, caps);
- gst_caps_unref (caps);
-
- gst_caps_unref (allowed);
-
- siddec->engine->setConfig (*siddec->config);
-
- return TRUE;
-
- /* ERRORS */
-nothing_allowed:
- {
- GST_DEBUG_OBJECT (siddec, "could not get allowed caps");
- return FALSE;
- }
-invalid_format:
- {
- GST_DEBUG_OBJECT (siddec, "invalid audio caps");
- gst_caps_unref (allowed);
- return FALSE;
- }
-}
-
-static void
-play_loop (GstPad * pad)
-{
- GstFlowReturn ret;
- GstSidDec *siddec;
- GstBuffer *out;
- GstMapInfo outmap;
- gint64 value, offset, time = 0;
- GstFormat format;
-
- siddec = GST_SIDDEC (gst_pad_get_parent (pad));
-
- out = gst_buffer_new_and_alloc (siddec->blocksize);
-
- gst_buffer_map (out, &outmap, GST_MAP_WRITE);
- sidEmuFillBuffer (*siddec->engine, *siddec->tune,
- outmap.data, siddec->blocksize);
- gst_buffer_unmap (out, &outmap);
-
- /* get offset in samples */
- format = GST_FORMAT_DEFAULT;
- if (gst_siddec_src_convert (siddec->srcpad,
- GST_FORMAT_BYTES, siddec->total_bytes, &format, &offset))
- GST_BUFFER_OFFSET (out) = offset;
-
- /* get current timestamp */
- format = GST_FORMAT_TIME;
- if (gst_siddec_src_convert (siddec->srcpad,
- GST_FORMAT_BYTES, siddec->total_bytes, &format, &time))
- GST_BUFFER_TIMESTAMP (out) = time;
-
- /* update position and get new timestamp to calculate duration */
- siddec->total_bytes += siddec->blocksize;
-
- /* get offset in samples */
- format = GST_FORMAT_DEFAULT;
- if (gst_siddec_src_convert (siddec->srcpad,
- GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
- GST_BUFFER_OFFSET_END (out) = value;
-
- format = GST_FORMAT_TIME;
- if (gst_siddec_src_convert (siddec->srcpad,
- GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
- GST_BUFFER_DURATION (out) = value - time;
-
- if ((ret = gst_pad_push (siddec->srcpad, out)) != GST_FLOW_OK)
- goto pause;
-
-done:
- gst_object_unref (siddec);
-
- return;
-
- /* ERRORS */
-pause:
- {
- if (ret == GST_FLOW_EOS) {
- /* perform EOS logic, FIXME, segment seek? */
- gst_pad_push_event (pad, gst_event_new_eos ());
- } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
- /* for fatal errors we post an error message */
- GST_ELEMENT_FLOW_ERROR (siddec, ret);
- gst_pad_push_event (pad, gst_event_new_eos ());
- }
-
- GST_INFO_OBJECT (siddec, "pausing task, reason: %s",
- gst_flow_get_name (ret));
- gst_pad_pause_task (pad);
- goto done;
- }
-}
-
-static gboolean
-start_play_tune (GstSidDec * siddec)
-{
- gboolean res;
- GstSegment segment;
-
- if (!siddec->tune->load (siddec->tune_buffer, siddec->tune_len))
- goto could_not_load;
-
- update_tags (siddec);
-
- if (!siddec_negotiate (siddec))
- goto could_not_negotiate;
-
- if (!sidEmuInitializeSong (*siddec->engine, *siddec->tune,
- siddec->tune_number))
- goto could_not_init;
-
- gst_segment_init (&segment, GST_FORMAT_TIME);
- gst_pad_push_event (siddec->srcpad, gst_event_new_segment (&segment));
- siddec->total_bytes = 0;
- siddec->have_group_id = FALSE;
- siddec->group_id = G_MAXUINT;
-
- res = gst_pad_start_task (siddec->srcpad,
- (GstTaskFunction) play_loop, siddec->srcpad, NULL);
- return res;
-
- /* ERRORS */
-could_not_load:
- {
- GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
- ("Could not load tune"), ("Could not load tune"));
- return FALSE;
- }
-could_not_negotiate:
- {
- GST_ELEMENT_ERROR (siddec, CORE, NEGOTIATION,
- ("Could not negotiate format"), ("Could not negotiate format"));
- return FALSE;
- }
-could_not_init:
- {
- GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
- ("Could not initialize song"), ("Could not initialize song"));
- return FALSE;
- }
-}
-
-static gboolean
-gst_siddec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstSidDec *siddec;
- gboolean res;
-
- siddec = GST_SIDDEC (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_EOS:
- res = start_play_tune (siddec);
- break;
- case GST_EVENT_SEGMENT:
- res = TRUE;
- break;
- default:
- res = TRUE;
- break;
- }
- gst_event_unref (event);
-
- return res;
-}
-
-static GstFlowReturn
-gst_siddec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
- GstSidDec *siddec;
- guint64 size;
-
- siddec = GST_SIDDEC (parent);
-
- size = gst_buffer_get_size (buffer);
- if (siddec->tune_len + size > maxSidtuneFileLen)
- goto overflow;
-
- gst_buffer_extract (buffer, 0, siddec->tune_buffer + siddec->tune_len, size);
-
- siddec->tune_len += size;
-
- gst_buffer_unref (buffer);
-
- return GST_FLOW_OK;
-
- /* ERRORS */
-overflow:
- {
- GST_ELEMENT_ERROR (siddec, STREAM, DECODE,
- (NULL), ("Input data bigger than allowed buffer size"));
- return GST_FLOW_ERROR;
- }
-}
-
-static gboolean
-gst_siddec_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
- GstFormat * dest_format, gint64 * dest_value)
-{
- gboolean res = TRUE;
- guint scale = 1;
- GstSidDec *siddec;
- gint bytes_per_sample;
-
- siddec = GST_SIDDEC (gst_pad_get_parent (pad));
-
- if (src_format == *dest_format) {
- *dest_value = src_value;
- return TRUE;
- }
-
- bytes_per_sample =
- (siddec->config->bitsPerSample >> 3) * siddec->config->channels;
-
- switch (src_format) {
- case GST_FORMAT_BYTES:
- switch (*dest_format) {
- case GST_FORMAT_DEFAULT:
- if (bytes_per_sample == 0)
- return FALSE;
- *dest_value = src_value / bytes_per_sample;
- break;
- case GST_FORMAT_TIME:
- {
- gint byterate = bytes_per_sample * siddec->config->frequency;
-
- if (byterate == 0)
- return FALSE;
- *dest_value =
- gst_util_uint64_scale_int (src_value, GST_SECOND, byterate);
- break;
- }
- default:
- res = FALSE;
- }
- break;
- case GST_FORMAT_DEFAULT:
- switch (*dest_format) {
- case GST_FORMAT_BYTES:
- *dest_value = src_value * bytes_per_sample;
- break;
- case GST_FORMAT_TIME:
- if (siddec->config->frequency == 0)
- return FALSE;
- *dest_value =
- gst_util_uint64_scale_int (src_value, GST_SECOND,
- siddec->config->frequency);
- break;
- default:
- res = FALSE;
- }
- break;
- case GST_FORMAT_TIME:
- switch (*dest_format) {
- case GST_FORMAT_BYTES:
- scale = bytes_per_sample;
- /* fallthrough */
- case GST_FORMAT_DEFAULT:
- *dest_value =
- gst_util_uint64_scale_int (src_value,
- scale * siddec->config->frequency, GST_SECOND);
- break;
- default:
- res = FALSE;
- }
- break;
- default:
- res = FALSE;
- }
-
- return res;
-}
-
-static gboolean
-gst_siddec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- gboolean res = FALSE;
-
- switch (GST_EVENT_TYPE (event)) {
- default:
- break;
- }
- gst_event_unref (event);
-
- return res;
-}
-
-static gboolean
-gst_siddec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
- gboolean res = TRUE;
- GstSidDec *siddec;
-
- siddec = GST_SIDDEC (parent);
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_POSITION:
- {
- GstFormat format;
- gint64 current;
-
- gst_query_parse_position (query, &format, NULL);
-
- /* we only know about our bytes, convert to requested format */
- res &= gst_siddec_src_convert (pad,
- GST_FORMAT_BYTES, siddec->total_bytes, &format, ¤t);
- if (res) {
- gst_query_set_position (query, format, current);
- }
- break;
- }
- default:
- res = gst_pad_query_default (pad, parent, query);
- break;
- }
-
- return res;
-}
-
-static void
-gst_siddec_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstSidDec *siddec = GST_SIDDEC (object);
-
- switch (prop_id) {
- case PROP_TUNE:
- siddec->tune_number = g_value_get_int (value);
- break;
- case PROP_CLOCK:
- siddec->config->clockSpeed = g_value_get_enum (value);
- break;
- case PROP_MEMORY:
- siddec->config->memoryMode = g_value_get_enum (value);
- break;
- case PROP_FILTER:
- siddec->config->emulateFilter = g_value_get_boolean (value);
- break;
- case PROP_MEASURED_VOLUME:
- siddec->config->measuredVolume = g_value_get_boolean (value);
- break;
- case PROP_MOS8580:
- siddec->config->mos8580 = g_value_get_boolean (value);
- break;
- case PROP_BLOCKSIZE:
- siddec->blocksize = g_value_get_uint (value);
- break;
- case PROP_FORCE_SPEED:
- siddec->config->forceSongSpeed = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- return;
- }
- siddec->engine->setConfig (*siddec->config);
-}
-
-static void
-gst_siddec_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstSidDec *siddec = GST_SIDDEC (object);
-
- switch (prop_id) {
- case PROP_TUNE:
- g_value_set_int (value, siddec->tune_number);
- break;
- case PROP_CLOCK:
- g_value_set_enum (value, siddec->config->clockSpeed);
- break;
- case PROP_MEMORY:
- g_value_set_enum (value, siddec->config->memoryMode);
- break;
- case PROP_FILTER:
- g_value_set_boolean (value, siddec->config->emulateFilter);
- break;
- case PROP_MEASURED_VOLUME:
- g_value_set_boolean (value, siddec->config->measuredVolume);
- break;
- case PROP_MOS8580:
- g_value_set_boolean (value, siddec->config->mos8580);
- break;
- case PROP_FORCE_SPEED:
- g_value_set_boolean (value, siddec->config->forceSongSpeed);
- break;
- case PROP_BLOCKSIZE:
- g_value_set_uint (value, siddec->blocksize);
- break;
- case PROP_METADATA:
- g_value_set_boxed (value, NULL);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (siddec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- sid,
- "Uses libsidplay to decode .sid files",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_SIDDEC_H__
-#define __GST_SIDDEC_H__
-
-#include <stdlib.h>
-#include <sidplay/player.h>
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SIDDEC \
- (gst_siddec_get_type())
-#define GST_SIDDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIDDEC,GstSidDec))
-#define GST_SIDDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIDDEC,GstSidDecClass))
-#define GST_IS_SIDDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIDDEC))
-#define GST_IS_SIDDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIDDEC))
-
-typedef struct _GstSidDec GstSidDec;
-typedef struct _GstSidDecClass GstSidDecClass;
-
-struct _GstSidDec {
- GstElement element;
-
- /* pads */
- GstPad *sinkpad,
- *srcpad;
-
- gboolean have_group_id;
- guint group_id;
-
- guchar *tune_buffer;
- gint tune_len;
- gint tune_number;
- guint64 total_bytes;
-
- emuEngine *engine;
- sidTune *tune;
- emuConfig *config;
-
- guint blocksize;
-};
-
-struct _GstSidDecClass {
- GstElementClass parent_class;
-};
-
-GType gst_siddec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (siddec);
-
-G_END_DECLS
-
-#endif /* __GST_SIDDEC_H__ */
+++ /dev/null
-sidplay_option = get_option('sidplay')
-if sidplay_option.disabled()
- subdir_done()
-endif
-
-if not add_languages('cpp', native: false, required: sidplay_option)
- subdir_done()
-endif
-
-if not cxx.has_header('sidplay/player.h', required: sidplay_option)
- subdir_done()
-endif
-
-sidplay_dep = cxx.find_library('sidplay', required: sidplay_option)
-if not sidplay_dep.found()
- subdir_done()
-endif
-
-# sidplay plugin works with libsidplay 1.36.x (not 2.x.x)
-sid_code = '''#include <sidplay/player.h>
- void somefunc (void) {
- sidTune tune = sidTune(0);
- }'''
-if not cxx.compiles(sid_code, dependencies: sidplay_dep, name : 'sidplay usage')
- if sidplay_option.enabled()
- error('sidplay headers and libraries were found, but were not usable')
- endif
- subdir_done()
-endif
-
-gstsid = library('gstsid', 'gstsiddec.cc',
- cpp_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstaudio_dep, sidplay_dep],
- install : true,
- install_dir : plugins_install_dir)
-pkgconfig.generate(gstsid, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstsid]
+++ /dev/null
-[_presets_]
-version=0.10
-element-name=GstX264Enc
-
-[Profile Baseline]
-_meta/comment=Baseline Profile
-bframes=0
-cabac=false
-dct8x8=false
-
-[Profile Main]
-_meta/comment=Main Profile
-cabac=true
-dct8x8=false
-
-[Profile High]
-_meta/comment=High Profile
-cabac=true
-dct8x8=true
-
-[Quality Low]
-_meta/comment=Low quality
-pass=qual
-quantizer=27
-subme=4
-threads=0
-
-[Quality Normal]
-_meta/comment=Normal quality
-pass=qual
-quantizer=21
-me=umh
-subme=6
-ref=3
-threads=0
-
-[Quality High]
-_meta/comment=High quality
-pass=qual
-quantizer=18
-me=umh
-subme=6
-ref=3
-threads=0
-
-[Profile YouTube]
-_meta/comment=YouTube recommended settings (https://support.google.com/youtube/answer/1722171)
-pass=qual
-cabac=true
-dct8x8=true
-bframes=2
-
-[Zero Latency]
-tune=zerolatency
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
- *
- * gstencoderbitrateprofilemanager.c
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstencoderbitrateprofilemanager.h"
-
-GST_DEBUG_CATEGORY_STATIC (encoderbitratemanager_debug);
-#define GST_CAT_DEFAULT encoderbitratemanager_debug
-
-typedef struct
-{
- gchar *name;
- gsize n_vals;
- GstEncoderBitrateTargetForPixelsMap *map;
-} GstEncoderBitrateProfile;
-
-struct _GstEncoderBitrateProfileManager
-{
- GList *profiles;
- gchar *preset;
- guint bitrate;
-
- gboolean setting_preset;
- gboolean user_bitrate;
-};
-
-/* *INDENT-OFF* */
-/* Copied from https://support.google.com/youtube/answer/1722171?hl=en */
-static const GstEncoderBitrateTargetForPixelsMap youtube_bitrate_profiles[] = {
- {
- .n_pixels = 3840 * 2160,
- .low_framerate_bitrate = 40000,
- .high_framerate_bitrate = 60000,
- },
- {
- .n_pixels = 2560 * 1440,
- .low_framerate_bitrate = 16000,
- .high_framerate_bitrate = 24000,
- },
- {
- .n_pixels = 1920 * 1080,
- .low_framerate_bitrate = 8000,
- .high_framerate_bitrate = 12000,
- },
- {
- .n_pixels = 1080 * 720,
- .low_framerate_bitrate = 5000,
- .high_framerate_bitrate = 7500,
- },
- {
- .n_pixels = 640 * 480,
- .low_framerate_bitrate = 2500,
- .high_framerate_bitrate = 4000,
- },
- {
- .n_pixels = 0,
- .low_framerate_bitrate = 2500,
- .high_framerate_bitrate = 4000,
- },
- {
- .n_pixels = 0,
- .low_framerate_bitrate = 0,
- .high_framerate_bitrate = 0,
- },
-};
-/* *INDENT-ON* */
-
-static void
-gst_encoder_bitrate_profile_free (GstEncoderBitrateProfile * profile)
-{
- g_free (profile->name);
- g_free (profile->map);
- g_free (profile);
-}
-
-void
-gst_encoder_bitrate_profile_manager_add_profile (GstEncoderBitrateProfileManager
- * self, const gchar * profile_name,
- const GstEncoderBitrateTargetForPixelsMap * map)
-{
- guint n_vals;
- GstEncoderBitrateProfile *profile;
-
- for (n_vals = 0;
- map[n_vals].low_framerate_bitrate != 0
- && map[n_vals].high_framerate_bitrate != 0; n_vals++);
- n_vals++;
-
- profile = g_new0 (GstEncoderBitrateProfile, 1);
- profile->name = g_strdup (profile_name);
- profile->n_vals = n_vals;
- profile->map
- = g_memdup2 (map, sizeof (GstEncoderBitrateTargetForPixelsMap) * n_vals);
- self->profiles = g_list_prepend (self->profiles, profile);
-}
-
-guint
-gst_encoder_bitrate_profile_manager_get_bitrate (GstEncoderBitrateProfileManager
- * self, GstVideoInfo * info)
-{
- gint i;
- gboolean high_fps;
- guint num_pix;
- GList *tmp;
-
- GstEncoderBitrateProfile *profile = NULL;
-
- g_return_val_if_fail (self != NULL, -1);
-
- if (!info || info->finfo == NULL
- || info->finfo->format == GST_VIDEO_FORMAT_UNKNOWN) {
- GST_INFO ("Video info %p not usable, returning current bitrate", info);
- return self->bitrate;
- }
-
- if (!self->preset) {
- GST_INFO ("No preset used, returning current bitrate");
- return self->bitrate;
-
- }
-
- for (tmp = self->profiles; tmp; tmp = tmp->next) {
- GstEncoderBitrateProfile *tmpprof = tmp->data;
- if (!g_strcmp0 (tmpprof->name, self->preset)) {
- profile = tmpprof;
- break;
- }
- }
-
- if (!profile) {
- GST_INFO ("Could not find map for profile: %s", self->preset);
-
- return self->bitrate;
- }
-
- high_fps = GST_VIDEO_INFO_FPS_N (info) / GST_VIDEO_INFO_FPS_D (info) > 30.0;
- num_pix = GST_VIDEO_INFO_WIDTH (info) * GST_VIDEO_INFO_HEIGHT (info);
- for (i = 0; i < profile->n_vals; i++) {
- GstEncoderBitrateTargetForPixelsMap *bitrate_values = &profile->map[i];
-
- if (num_pix < bitrate_values->n_pixels)
- continue;
-
- self->bitrate =
- high_fps ? bitrate_values->
- high_framerate_bitrate : bitrate_values->low_framerate_bitrate;
- GST_INFO ("Using %s bitrate! %d", self->preset, self->bitrate);
- return self->bitrate;
- }
-
- return -1;
-}
-
-void gst_encoder_bitrate_profile_manager_start_loading_preset
- (GstEncoderBitrateProfileManager * self)
-{
- self->setting_preset = TRUE;
-}
-
-void gst_encoder_bitrate_profile_manager_end_loading_preset
- (GstEncoderBitrateProfileManager * self, const gchar * preset)
-{
- self->setting_preset = FALSE;
- g_free (self->preset);
- self->preset = g_strdup (preset);
-}
-
-void
-gst_encoder_bitrate_profile_manager_set_bitrate (GstEncoderBitrateProfileManager
- * self, guint bitrate)
-{
- self->bitrate = bitrate;
- self->user_bitrate = !self->setting_preset;
-}
-
-void
-gst_encoder_bitrate_profile_manager_free (GstEncoderBitrateProfileManager *
- self)
-{
- g_free (self->preset);
- g_list_free_full (self->profiles,
- (GDestroyNotify) gst_encoder_bitrate_profile_free);
- g_free (self);
-}
-
-GstEncoderBitrateProfileManager *
-gst_encoder_bitrate_profile_manager_new (guint default_bitrate)
-{
- GstEncoderBitrateProfileManager *self =
- g_new0 (GstEncoderBitrateProfileManager, 1);
- static gsize _init = 0;
-
- if (g_once_init_enter (&_init)) {
- GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "encoderbitratemanager", 0,
- "Encoder bitrate manager");
- g_once_init_leave (&_init, 1);
- }
-
- self->bitrate = default_bitrate;
- gst_encoder_bitrate_profile_manager_add_profile (self,
- "Profile YouTube", youtube_bitrate_profiles);
-
- return self;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
- *
- * gstencoderbitrateprofilemanager.h
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#pragma once
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-typedef struct _GstEncoderBitrateProfileManager GstEncoderBitrateProfileManager;
-
-typedef struct _GstEncoderBitrateTargetForPixelsMap
-{
- guint n_pixels;
- guint low_framerate_bitrate;
- guint high_framerate_bitrate;
-
- gpointer _gst_reserved[GST_PADDING_LARGE];
-} GstEncoderBitrateTargetForPixelsMap;
-
-void
-gst_encoder_bitrate_profile_manager_add_profile(GstEncoderBitrateProfileManager* self,
- const gchar* profile_name, const GstEncoderBitrateTargetForPixelsMap* map);
-guint gst_encoder_bitrate_profile_manager_get_bitrate(GstEncoderBitrateProfileManager* self, GstVideoInfo* info);
-void gst_encoder_bitrate_profile_manager_start_loading_preset (GstEncoderBitrateProfileManager* self);
-void gst_encoder_bitrate_profile_manager_end_loading_preset(GstEncoderBitrateProfileManager* self, const gchar* preset);
-void gst_encoder_bitrate_profile_manager_set_bitrate(GstEncoderBitrateProfileManager* self, guint bitrate);
-GstEncoderBitrateProfileManager* gst_encoder_bitrate_profile_manager_new(guint default_bitrate);
-void gst_encoder_bitrate_profile_manager_free(GstEncoderBitrateProfileManager* self);
\ No newline at end of file
+++ /dev/null
-/* GStreamer H264 encoder plugin
- * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
- * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
- * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
- * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-x264enc
- * @title: x264enc
- * @see_also: faac
- *
- * This element encodes raw video into H264 compressed data,
- * also otherwise known as MPEG-4 AVC (Advanced Video Codec).
- *
- * The #GstX264Enc:pass property controls the type of encoding. In case of Constant
- * Bitrate Encoding (actually ABR), the #GstX264Enc:bitrate will determine the quality
- * of the encoding. This will similarly be the case if this target bitrate
- * is to obtained in multiple (2 or 3) pass encoding.
- * Alternatively, one may choose to perform Constant Quantizer or Quality encoding,
- * in which case the #GstX264Enc:quantizer property controls much of the outcome, in that case #GstX264Enc:bitrate is the maximum bitrate.
- *
- * The H264 profile that is eventually used depends on a few settings.
- * If #GstX264Enc:dct8x8 is enabled, then High profile is used.
- * Otherwise, if #GstX264Enc:cabac entropy coding is enabled or #GstX264Enc:bframes
- * are allowed, then Main Profile is in effect, and otherwise Baseline profile
- * applies. The high profile is imposed by default,
- * which is fine for most software players and settings,
- * but in some cases (e.g. hardware platforms) a more restricted profile/level
- * may be necessary. The recommended way to set a profile is to set it in the
- * downstream caps.
- *
- * 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.
- *
- * > Some settings, including the default settings, may lead to quite
- * > some latency (i.e. frame buffering) in the encoder. This may cause problems
- * > with pipeline stalling in non-trivial pipelines, because the encoder latency
- * > is often considerably higher than the default size of a simple queue
- * > element. Such problems are caused by one of the queues in the other
- * > non-x264enc streams/branches filling up and blocking upstream. They can
- * > be fixed by relaxing the default time/size/buffer limits on the queue
- * > elements in the non-x264 branches, or using a (single) multiqueue element
- * > for all branches. Also see the last example below. You can also work around
- * > this problem by setting the tune=zerolatency property, but this will affect
- * > overall encoding quality so may not be appropriate for your use case.
- *
- * ## Example pipeline
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc qp-min=18 ! \
- * avimux ! filesink location=videotestsrc.avi
- * ]| This example pipeline will encode a test video source to H264 muxed in an
- * AVI container, while ensuring a sane minimum quantization factor to avoid
- * some (excessive) waste. You should ideally never put H264 into an AVI
- * container (or really anything else, for that matter) - use Matroska or
- * MP4/QuickTime or MPEG-TS instead.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=quant ! \
- * matroskamux ! filesink location=videotestsrc.mkv
- * ]| This example pipeline will encode a test video source to H264 using fixed
- * quantization, and muxes it in a Matroska container.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=5 quantizer=25 speed-preset=6 ! video/x-h264, profile=baseline ! \
- * qtmux ! filesink location=videotestsrc.mov
- * ]| This example pipeline will encode a test video source to H264 using
- * constant quality at around Q25 using the 'medium' speed/quality preset and
- * restricting the options used so that the output is H.264 Baseline Profile
- * compliant and finally multiplexing the output in Quicktime mov format.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! tee name=t ! queue ! videoconvert ! autovideosink \
- * t. ! queue ! x264enc rc-lookahead=5 ! fakesink
- * ]| This example pipeline will encode a test video source to H264 while
- * displaying the input material at the same time. As mentioned above,
- * specific settings are needed in this case to avoid pipeline stalling.
- * Depending on goals and context, other approaches are possible, e.g.
- * tune=zerolatency might be configured, or queue sizes increased.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gstx264enc.h"
-
-#include <gst/pbutils/pbutils.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <gmodule.h>
-
-GST_DEBUG_CATEGORY_STATIC (x264_enc_debug);
-#define GST_CAT_DEFAULT x264_enc_debug
-
-struct _GstX264EncVTable
-{
- GModule *module;
-
-#if X264_BUILD < 153
- const int *x264_bit_depth;
-#endif
- const int *x264_chroma_format;
- void (*x264_encoder_close) (x264_t *);
- int (*x264_encoder_delayed_frames) (x264_t *);
- int (*x264_encoder_encode) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal,
- x264_picture_t * pic_in, x264_picture_t * pic_out);
- int (*x264_encoder_headers) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal);
- void (*x264_encoder_intra_refresh) (x264_t *);
- int (*x264_encoder_maximum_delayed_frames) (x264_t *);
- x264_t *(*x264_encoder_open) (x264_param_t *);
- int (*x264_encoder_reconfig) (x264_t *, x264_param_t *);
- const x264_level_t (*x264_levels)[];
- void (*x264_param_apply_fastfirstpass) (x264_param_t *);
- int (*x264_param_apply_profile) (x264_param_t *, const char *);
- int (*x264_param_default_preset) (x264_param_t *, const char *preset,
- const char *tune);
- int (*x264_param_parse) (x264_param_t *, const char *name, const char *value);
-};
-
-static GstX264EncVTable default_vtable;
-
-static GstX264EncVTable *vtable_8bit = NULL, *vtable_10bit = NULL;
-
-#if X264_BUILD < 153
-#define LOAD_SYMBOL(name) G_STMT_START { \
- if (!g_module_symbol (module, #name, (gpointer *) &vtable->name)) { \
- GST_ERROR ("Failed to load '" #name "' from '%s'", filename); \
- goto error; \
- } \
-} G_STMT_END;
-
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
-static GstX264EncVTable *
-load_x264 (const gchar * filename)
-{
- GModule *module;
- GstX264EncVTable *vtable;
-
- module = g_module_open (filename, G_MODULE_BIND_LOCAL);
- if (!module) {
- GST_ERROR ("Failed to load '%s'", filename);
- return NULL;
- }
-
- vtable = g_new0 (GstX264EncVTable, 1);
- vtable->module = module;
-
- if (!g_module_symbol (module, G_STRINGIFY (x264_encoder_open),
- (gpointer *) & vtable->x264_encoder_open)) {
- GST_ERROR ("Failed to load '" G_STRINGIFY (x264_encoder_open)
- "' from '%s'. Incompatible version?", filename);
- goto error;
- }
- LOAD_SYMBOL (x264_bit_depth);
- LOAD_SYMBOL (x264_chroma_format);
- LOAD_SYMBOL (x264_encoder_close);
- LOAD_SYMBOL (x264_encoder_delayed_frames);
- LOAD_SYMBOL (x264_encoder_encode);
- LOAD_SYMBOL (x264_encoder_headers);
- LOAD_SYMBOL (x264_encoder_intra_refresh);
- LOAD_SYMBOL (x264_encoder_maximum_delayed_frames);
- LOAD_SYMBOL (x264_encoder_reconfig);
- LOAD_SYMBOL (x264_levels);
- LOAD_SYMBOL (x264_param_apply_fastfirstpass);
- LOAD_SYMBOL (x264_param_apply_profile);
- LOAD_SYMBOL (x264_param_default_preset);
- LOAD_SYMBOL (x264_param_parse);
-
- return vtable;
-
-error:
- g_module_close (vtable->module);
- g_free (vtable);
- return NULL;
-}
-
-static void
-unload_x264 (GstX264EncVTable * vtable)
-{
- if (vtable->module) {
- g_module_close (vtable->module);
- g_free (vtable);
- }
-}
-#endif
-
-#undef LOAD_SYMBOL
-#endif
-
-static gboolean
-gst_x264_enc_add_x264_chroma_format (GstStructure * s,
- gboolean allow_420_8, gboolean allow_420_10, gboolean allow_422,
- gboolean allow_444)
-{
- GValue fmts = G_VALUE_INIT;
- GValue fmt = G_VALUE_INIT;
- gboolean ret = FALSE;
-
- g_value_init (&fmts, GST_TYPE_LIST);
- g_value_init (&fmt, G_TYPE_STRING);
-
- if (vtable_8bit) {
- gint chroma_format = *vtable_8bit->x264_chroma_format;
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
- g_value_set_string (&fmt, "Y444");
- gst_value_list_append_value (&fmts, &fmt);
- }
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
- g_value_set_string (&fmt, "Y42B");
- gst_value_list_append_value (&fmts, &fmt);
- }
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_8) {
- g_value_set_string (&fmt, "I420");
- gst_value_list_append_value (&fmts, &fmt);
- g_value_set_string (&fmt, "YV12");
- gst_value_list_append_value (&fmts, &fmt);
- g_value_set_string (&fmt, "NV12");
- gst_value_list_append_value (&fmts, &fmt);
- }
- }
-
- if (vtable_10bit) {
- gint chroma_format = *vtable_10bit->x264_chroma_format;
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
- if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
- g_value_set_string (&fmt, "Y444_10LE");
- else
- g_value_set_string (&fmt, "Y444_10BE");
-
- gst_value_list_append_value (&fmts, &fmt);
- }
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
- if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
- g_value_set_string (&fmt, "I422_10LE");
- else
- g_value_set_string (&fmt, "I422_10BE");
-
- gst_value_list_append_value (&fmts, &fmt);
- }
-
- if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_10) {
- if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
- g_value_set_string (&fmt, "I420_10LE");
- else
- g_value_set_string (&fmt, "I420_10BE");
-
- gst_value_list_append_value (&fmts, &fmt);
- }
- }
-
- if (gst_value_list_get_size (&fmts) != 0) {
- gst_structure_take_value (s, "format", &fmts);
- ret = TRUE;
- } else {
- g_value_unset (&fmts);
- }
-
- g_value_unset (&fmt);
-
- return ret;
-}
-
-#if X264_BUILD < 153
-static gboolean
-load_x264_libraries (void)
-{
- if (*default_vtable.x264_bit_depth == 8) {
- vtable_8bit = &default_vtable;
- GST_INFO ("8-bit depth supported");
- } else if (*default_vtable.x264_bit_depth == 10) {
- vtable_10bit = &default_vtable;
- GST_INFO ("10-bit depth supported");
- }
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
- {
- gchar **libraries = g_strsplit (HAVE_X264_ADDITIONAL_LIBRARIES, ":", -1);
- gchar **p = libraries;
-
- while (*p && (!vtable_8bit || !vtable_10bit)) {
- GstX264EncVTable *vtable = load_x264 (*p);
-
- if (vtable) {
- if (!vtable_8bit && *vtable->x264_bit_depth == 8) {
- GST_INFO ("8-bit depth support loaded from %s", *p);
- vtable_8bit = vtable;
- } else if (!vtable_10bit && *vtable->x264_bit_depth == 10) {
- GST_INFO ("10-bit depth support loaded from %s", *p);
- vtable_10bit = vtable;
- } else {
- unload_x264 (vtable);
- }
- }
-
- p++;
- }
- g_strfreev (libraries);
- }
-#endif
-
- if (!vtable_8bit && !vtable_10bit)
- return FALSE;
-
- return TRUE;
-}
-
-#else /* X264_BUILD >= 153 */
-
-static gboolean
-load_x264_libraries (void)
-{
-#if X264_BIT_DEPTH == 0 /* all */
- GST_INFO ("8-bit depth and 10-bit depth supported");
- vtable_8bit = &default_vtable;
- vtable_10bit = &default_vtable;
-#elif X264_BIT_DEPTH == 8
- GST_INFO ("Only 8-bit depth supported");
- vtable_8bit = &default_vtable;
-#elif X264_BIT_DEPTH == 10
- GST_INFO ("Only 10-bit depth supported");
- vtable_10bit = &default_vtable;
-#else
-#error "unexpected X264_BIT_DEPTH value"
-#endif
-
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
- GST_WARNING ("Ignoring configured additional libraries %s, using libx264 "
- "version enabled for multiple bit depths",
- HAVE_X264_ADDITIONAL_LIBRARIES);
-#endif
-
- return TRUE;
-}
-
-#endif
-
-enum
-{
- ARG_0,
- ARG_THREADS,
- ARG_SLICED_THREADS,
- ARG_SYNC_LOOKAHEAD,
- ARG_PASS,
- ARG_QUANTIZER,
- ARG_MULTIPASS_CACHE_FILE,
- ARG_BYTE_STREAM,
- ARG_BITRATE,
- ARG_INTRA_REFRESH,
- ARG_VBV_BUF_CAPACITY,
- ARG_ME,
- ARG_SUBME,
- ARG_ANALYSE,
- ARG_DCT8x8,
- ARG_REF,
- ARG_BFRAMES,
- ARG_B_ADAPT,
- ARG_B_PYRAMID,
- ARG_WEIGHTB,
- ARG_SPS_ID,
- ARG_AU_NALU,
- ARG_TRELLIS,
- ARG_KEYINT_MAX,
- ARG_CABAC,
- ARG_QP_MIN,
- ARG_QP_MAX,
- ARG_QP_STEP,
- ARG_IP_FACTOR,
- ARG_PB_FACTOR,
- ARG_RC_MB_TREE,
- ARG_RC_LOOKAHEAD,
- ARG_NR,
- ARG_INTERLACED,
- ARG_OPTION_STRING,
- ARG_SPEED_PRESET,
- ARG_PSY_TUNE,
- ARG_TUNE,
- ARG_FRAME_PACKING,
- ARG_INSERT_VUI,
-};
-
-#define ARG_THREADS_DEFAULT 0 /* 0 means 'auto' which is 1.5x number of CPU cores */
-#define ARG_PASS_DEFAULT 0
-#define ARG_QUANTIZER_DEFAULT 21
-#define ARG_MULTIPASS_CACHE_FILE_DEFAULT "x264.log"
-#define ARG_BYTE_STREAM_DEFAULT FALSE
-#define ARG_BITRATE_DEFAULT (2 * 1024)
-#define ARG_VBV_BUF_CAPACITY_DEFAULT 600
-#define ARG_ME_DEFAULT X264_ME_HEX
-#define ARG_SUBME_DEFAULT 1
-#define ARG_ANALYSE_DEFAULT 0
-#define ARG_DCT8x8_DEFAULT FALSE
-#define ARG_REF_DEFAULT 3
-#define ARG_BFRAMES_DEFAULT 0
-#define ARG_B_ADAPT_DEFAULT TRUE
-#define ARG_B_PYRAMID_DEFAULT FALSE
-#define ARG_WEIGHTB_DEFAULT FALSE
-#define ARG_SPS_ID_DEFAULT 0
-#define ARG_AU_NALU_DEFAULT TRUE
-#define ARG_TRELLIS_DEFAULT TRUE
-#define ARG_KEYINT_MAX_DEFAULT 0
-#define ARG_CABAC_DEFAULT TRUE
-#define ARG_QP_MIN_DEFAULT 10
-#define ARG_QP_MAX_DEFAULT 51
-#define ARG_QP_STEP_DEFAULT 4
-#define ARG_IP_FACTOR_DEFAULT 1.4
-#define ARG_PB_FACTOR_DEFAULT 1.3
-#define ARG_NR_DEFAULT 0
-#define ARG_INTERLACED_DEFAULT FALSE
-#define ARG_SLICED_THREADS_DEFAULT FALSE
-#define ARG_SYNC_LOOKAHEAD_DEFAULT -1
-#define ARG_RC_MB_TREE_DEFAULT TRUE
-#define ARG_RC_LOOKAHEAD_DEFAULT 40
-#define ARG_INTRA_REFRESH_DEFAULT FALSE
-#define ARG_OPTION_STRING_DEFAULT ""
-static GString *x264enc_defaults;
-#define ARG_SPEED_PRESET_DEFAULT 6 /* 'medium' preset - matches x264 CLI default */
-#define ARG_PSY_TUNE_DEFAULT 0 /* no psy tuning */
-#define ARG_TUNE_DEFAULT 0 /* no tuning */
-#define ARG_FRAME_PACKING_DEFAULT -1 /* automatic (none, or from input caps) */
-#define ARG_INSERT_VUI_DEFAULT TRUE
-
-enum
-{
- GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY,
- GST_X264_ENC_STREAM_FORMAT_AVC,
- GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM
-};
-
-enum
-{
- GST_X264_ENC_PASS_CBR = 0,
- GST_X264_ENC_PASS_QUANT = 0x04,
- GST_X264_ENC_PASS_QUAL,
- GST_X264_ENC_PASS_PASS1 = 0x11,
- GST_X264_ENC_PASS_PASS2,
- GST_X264_ENC_PASS_PASS3
-};
-
-#define GST_X264_ENC_PASS_TYPE (gst_x264_enc_pass_get_type())
-static GType
-gst_x264_enc_pass_get_type (void)
-{
- static GType pass_type = 0;
-
- static const GEnumValue pass_types[] = {
- {GST_X264_ENC_PASS_CBR, "Constant Bitrate Encoding", "cbr"},
- {GST_X264_ENC_PASS_QUANT, "Constant Quantizer", "quant"},
- {GST_X264_ENC_PASS_QUAL, "Constant Quality", "qual"},
- {GST_X264_ENC_PASS_PASS1, "VBR Encoding - Pass 1", "pass1"},
- {GST_X264_ENC_PASS_PASS2, "VBR Encoding - Pass 2", "pass2"},
- {GST_X264_ENC_PASS_PASS3, "VBR Encoding - Pass 3", "pass3"},
- {0, NULL, NULL}
- };
-
- if (!pass_type) {
- pass_type = g_enum_register_static ("GstX264EncPass", pass_types);
- }
- return pass_type;
-}
-
-#define GST_X264_ENC_ME_TYPE (gst_x264_enc_me_get_type())
-static GType
-gst_x264_enc_me_get_type (void)
-{
- static GType me_type = 0;
- static GEnumValue *me_types;
- int n, i;
-
- if (me_type != 0)
- return me_type;
-
- n = 0;
- while (x264_motion_est_names[n] != NULL)
- n++;
-
- me_types = g_new0 (GEnumValue, n + 1);
-
- for (i = 0; i < n; i++) {
- me_types[i].value = i;
- me_types[i].value_name = x264_motion_est_names[i];
- me_types[i].value_nick = x264_motion_est_names[i];
- }
-
- me_type = g_enum_register_static ("GstX264EncMe", me_types);
-
- return me_type;
-}
-
-#define GST_X264_ENC_ANALYSE_TYPE (gst_x264_enc_analyse_get_type())
-static GType
-gst_x264_enc_analyse_get_type (void)
-{
- static GType analyse_type = 0;
- static const GFlagsValue analyse_types[] = {
- {X264_ANALYSE_I4x4, "i4x4", "i4x4"},
- {X264_ANALYSE_I8x8, "i8x8", "i8x8"},
- {X264_ANALYSE_PSUB16x16, "p8x8", "p8x8"},
- {X264_ANALYSE_PSUB8x8, "p4x4", "p4x4"},
- {X264_ANALYSE_BSUB16x16, "b8x8", "b8x8"},
- {0, NULL, NULL},
- };
-
- if (!analyse_type) {
- analyse_type = g_flags_register_static ("GstX264EncAnalyse", analyse_types);
- }
- return analyse_type;
-}
-
-#define GST_X264_ENC_SPEED_PRESET_TYPE (gst_x264_enc_speed_preset_get_type())
-static GType
-gst_x264_enc_speed_preset_get_type (void)
-{
- static GType speed_preset_type = 0;
- static GEnumValue *speed_preset_types;
- int n, i;
-
- if (speed_preset_type != 0)
- return speed_preset_type;
-
- n = 0;
- while (x264_preset_names[n] != NULL)
- n++;
-
- speed_preset_types = g_new0 (GEnumValue, n + 2);
-
- speed_preset_types[0].value = 0;
- speed_preset_types[0].value_name = "No preset";
- speed_preset_types[0].value_nick = "None";
-
- for (i = 1; i <= n; i++) {
- speed_preset_types[i].value = i;
- speed_preset_types[i].value_name = x264_preset_names[i - 1];
- speed_preset_types[i].value_nick = x264_preset_names[i - 1];
- }
-
- speed_preset_type =
- g_enum_register_static ("GstX264EncPreset", speed_preset_types);
-
- return speed_preset_type;
-}
-
-static const GFlagsValue tune_types[] = {
- {0x0, "No tuning", "none"},
- {0x1, "Still image", "stillimage"},
- {0x2, "Fast decode", "fastdecode"},
- {0x4, "Zero latency", "zerolatency"},
- {0, NULL, NULL},
-};
-
-#define GST_X264_ENC_TUNE_TYPE (gst_x264_enc_tune_get_type())
-static GType
-gst_x264_enc_tune_get_type (void)
-{
- static GType tune_type = 0;
-
- if (!tune_type) {
- tune_type = g_flags_register_static ("GstX264EncTune", tune_types + 1);
- }
- return tune_type;
-}
-
-enum
-{
- GST_X264_ENC_TUNE_NONE,
- GST_X264_ENC_TUNE_FILM,
- GST_X264_ENC_TUNE_ANIMATION,
- GST_X264_ENC_TUNE_GRAIN,
- GST_X264_ENC_TUNE_PSNR,
- GST_X264_ENC_TUNE_SSIM,
- GST_X264_ENC_TUNE_LAST
-};
-
-static const GEnumValue psy_tune_types[] = {
- {GST_X264_ENC_TUNE_NONE, "No tuning", "none"},
- {GST_X264_ENC_TUNE_FILM, "Film", "film"},
- {GST_X264_ENC_TUNE_ANIMATION, "Animation", "animation"},
- {GST_X264_ENC_TUNE_GRAIN, "Grain", "grain"},
- {GST_X264_ENC_TUNE_PSNR, "PSNR", "psnr"},
- {GST_X264_ENC_TUNE_SSIM, "SSIM", "ssim"},
- {0, NULL, NULL},
-};
-
-#define GST_X264_ENC_PSY_TUNE_TYPE (gst_x264_enc_psy_tune_get_type())
-static GType
-gst_x264_enc_psy_tune_get_type (void)
-{
- static GType psy_tune_type = 0;
-
- if (!psy_tune_type) {
- psy_tune_type =
- g_enum_register_static ("GstX264EncPsyTune", psy_tune_types);
- }
- return psy_tune_type;
-}
-
-static void
-gst_x264_enc_build_tunings_string (GstX264Enc * x264enc)
-{
- int i = 1;
-
- if (x264enc->tunings)
- g_string_free (x264enc->tunings, TRUE);
-
- if (x264enc->psy_tune) {
- x264enc->tunings =
- g_string_new (psy_tune_types[x264enc->psy_tune].value_nick);
- } else {
- x264enc->tunings = g_string_new (NULL);
- }
-
- while (tune_types[i].value_name) {
- if (x264enc->tune & (1 << (i - 1)))
- g_string_append_printf (x264enc->tunings, "%s%s",
- x264enc->tunings->len ? "," : "", tune_types[i].value_nick);
- i++;
- }
-
- if (x264enc->tunings->len)
- GST_DEBUG_OBJECT (x264enc, "Constructed tunings string: %s",
- x264enc->tunings->str);
-}
-
-#define GST_X264_ENC_FRAME_PACKING_TYPE (gst_x264_enc_frame_packing_get_type())
-static GType
-gst_x264_enc_frame_packing_get_type (void)
-{
- static GType fpa_type = 0;
-
- static const GEnumValue fpa_types[] = {
- {-1, "Automatic (use incoming video information)", "auto"},
- {0, "checkerboard - Left and Right pixels alternate in a checkerboard pattern", "checkerboard"},
- {1, "column interleaved - Alternating pixel columns represent Left and Right views", "column-interleaved"},
- {2, "row interleaved - Alternating pixel rows represent Left and Right views", "row-interleaved"},
- {3, "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view", "side-by-side"},
- {4, "top bottom - L is on top, R on bottom", "top-bottom"},
- {5, "frame interleaved - Each frame contains either Left or Right view alternately", "frame-interleaved"},
- {0, NULL, NULL}
- };
-
- if (!fpa_type) {
- fpa_type = g_enum_register_static ("GstX264EncFramePacking", fpa_types);
- }
- return fpa_type;
-}
-
-static gint
-gst_x264_enc_mview_mode_to_frame_packing (GstVideoMultiviewMode mode)
-{
- switch (mode) {
- case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
- return 0;
- case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
- return 1;
- case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
- return 2;
- case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
- return 3;
- case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
- return 4;
- case GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME:
- return 5;
- default:
- break;
- }
-
- return -1;
-}
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-h264, "
- "framerate = (fraction) [0/1, MAX], "
- "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], "
- "stream-format = (string) { avc, byte-stream }, "
- "alignment = (string) au, "
- "profile = (string) { high-4:4:4, high-4:2:2, high-10, high, main,"
- " baseline, constrained-baseline, high-4:4:4-intra, high-4:2:2-intra,"
- " high-10-intra }")
- );
-
-static void gst_x264_enc_finalize (GObject * object);
-static gboolean gst_x264_enc_start (GstVideoEncoder * encoder);
-static gboolean gst_x264_enc_stop (GstVideoEncoder * encoder);
-static gboolean gst_x264_enc_flush (GstVideoEncoder * encoder);
-
-static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder);
-static void gst_x264_enc_close_encoder (GstX264Enc * encoder);
-
-static GstFlowReturn gst_x264_enc_finish (GstVideoEncoder * encoder);
-static GstFlowReturn gst_x264_enc_handle_frame (GstVideoEncoder * encoder,
- GstVideoCodecFrame * frame);
-static void gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send);
-static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder,
- x264_picture_t * pic_in, GstVideoCodecFrame * input_frame, int *i_nal,
- gboolean send);
-static gboolean gst_x264_enc_set_format (GstVideoEncoder * video_enc,
- GstVideoCodecState * state);
-static gboolean gst_x264_enc_propose_allocation (GstVideoEncoder * encoder,
- GstQuery * query);
-
-static void gst_x264_enc_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_x264_enc_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static gboolean x264_element_init (GstPlugin * plugin);
-
-typedef gboolean (*LoadPresetFunc) (GstPreset * preset, const gchar * name);
-
-LoadPresetFunc parent_load_preset = NULL;
-
-static gboolean
-gst_x264_enc_load_preset (GstPreset * preset, const gchar * name)
-{
- GstX264Enc *enc = GST_X264_ENC (preset);
- gboolean res;
-
- gst_encoder_bitrate_profile_manager_start_loading_preset
- (enc->bitrate_manager);
- res = parent_load_preset (preset, name);
- gst_encoder_bitrate_profile_manager_end_loading_preset (enc->bitrate_manager,
- res ? name : NULL);
-
- return res;
-}
-
-static void
-gst_x264_enc_preset_interface_init (GstPresetInterface * iface)
-{
- parent_load_preset = iface->load_preset;
- iface->load_preset = gst_x264_enc_load_preset;
-}
-
-#define gst_x264_enc_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_VIDEO_ENCODER,
- G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET,
- gst_x264_enc_preset_interface_init));
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (x264enc, x264_element_init)
-/* don't forget to free the string after use */
- static const gchar *gst_x264_enc_build_partitions (gint analyse)
-{
- GString *string;
-
- if (!analyse)
- return NULL;
-
- string = g_string_new (NULL);
- if (analyse & X264_ANALYSE_I4x4)
- g_string_append (string, "i4x4");
- if (analyse & X264_ANALYSE_I8x8)
- g_string_append (string, ",i8x8");
- if (analyse & X264_ANALYSE_PSUB16x16)
- g_string_append (string, ",p8x8");
- if (analyse & X264_ANALYSE_PSUB8x8)
- g_string_append (string, ",p4x4");
- if (analyse & X264_ANALYSE_BSUB16x16)
- g_string_append (string, ",b8x8");
-
- return (const gchar *) g_string_free (string, FALSE);
-}
-
-static void
-check_formats (const gchar * str, gboolean * has_420_8, gboolean * has_420_10,
- gboolean * has_422, gboolean * has_444)
-{
- if (g_str_has_prefix (str, "high-4:4:4"))
- *has_444 = TRUE;
- else if (g_str_has_prefix (str, "high-4:2:2"))
- *has_422 = TRUE;
- else if (g_str_has_prefix (str, "high-10"))
- *has_420_10 = TRUE;
- else
- *has_420_8 = TRUE;
-}
-
-
-/* allowed input caps depending on whether libx264 was built for 8 or 10 bits */
-static GstCaps *
-gst_x264_enc_sink_getcaps (GstVideoEncoder * enc, GstCaps * filter)
-{
- GstCaps *supported_incaps;
- GstCaps *allowed;
- GstCaps *filter_caps, *fcaps;
- gint i, j, k;
-
- supported_incaps =
- gst_pad_get_pad_template_caps (GST_VIDEO_ENCODER_SINK_PAD (enc));
-
- /* Allow downstream to specify width/height/framerate/PAR constraints
- * and forward them upstream for video converters to handle
- */
- allowed = gst_pad_get_allowed_caps (enc->srcpad);
-
- if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
- fcaps = supported_incaps;
- goto done;
- }
-
- GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, supported_incaps);
- GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
-
- filter_caps = gst_caps_new_empty ();
-
- for (i = 0; i < gst_caps_get_size (supported_incaps); i++) {
- GQuark q_name =
- gst_structure_get_name_id (gst_caps_get_structure (supported_incaps,
- i));
-
- for (j = 0; j < gst_caps_get_size (allowed); j++) {
- const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
- const GValue *val;
- GstStructure *s;
-
- /* FIXME Find a way to reuse gst_video_encoder_proxy_getcaps so that
- * we do not need to copy that logic */
- s = gst_structure_new_id_empty (q_name);
- if ((val = gst_structure_get_value (allowed_s, "width")))
- gst_structure_set_value (s, "width", val);
- if ((val = gst_structure_get_value (allowed_s, "height")))
- gst_structure_set_value (s, "height", val);
- if ((val = gst_structure_get_value (allowed_s, "framerate")))
- gst_structure_set_value (s, "framerate", val);
- if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio")))
- gst_structure_set_value (s, "pixel-aspect-ratio", val);
- if ((val = gst_structure_get_value (allowed_s, "colorimetry")))
- gst_structure_set_value (s, "colorimetry", val);
- if ((val = gst_structure_get_value (allowed_s, "chroma-site")))
- gst_structure_set_value (s, "chroma-site", val);
-
- if ((val = gst_structure_get_value (allowed_s, "profile"))) {
- gboolean has_420_8 = FALSE;
- gboolean has_420_10 = FALSE;
- gboolean has_422 = FALSE;
- gboolean has_444 = FALSE;
-
- if (G_VALUE_HOLDS_STRING (val)) {
- check_formats (g_value_get_string (val), &has_420_8, &has_420_10,
- &has_422, &has_444);
- } else if (GST_VALUE_HOLDS_LIST (val)) {
- for (k = 0; k < gst_value_list_get_size (val); k++) {
- const GValue *vlist = gst_value_list_get_value (val, k);
-
- if (G_VALUE_HOLDS_STRING (vlist))
- check_formats (g_value_get_string (vlist), &has_420_8,
- &has_420_10, &has_422, &has_444);
- }
- }
-
- gst_x264_enc_add_x264_chroma_format (s, has_420_8, has_420_10, has_422,
- has_444);
- }
-
- filter_caps = gst_caps_merge_structure (filter_caps, s);
- }
- }
-
- fcaps = gst_caps_intersect (filter_caps, supported_incaps);
- gst_caps_unref (filter_caps);
- gst_caps_unref (supported_incaps);
-
- if (filter) {
- GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter);
- filter_caps = gst_caps_intersect (fcaps, filter);
- gst_caps_unref (fcaps);
- fcaps = filter_caps;
- }
-
-done:
- gst_caps_replace (&allowed, NULL);
-
- GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
-
- return fcaps;
-}
-
-static gboolean
-gst_x264_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
-{
- GstPad *pad = GST_VIDEO_ENCODER_SINK_PAD (enc);
- gboolean ret = FALSE;
-
- GST_DEBUG ("Received %s query on sinkpad, %" GST_PTR_FORMAT,
- GST_QUERY_TYPE_NAME (query), query);
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_ACCEPT_CAPS:{
- GstCaps *acceptable, *caps;
-
- acceptable = gst_pad_get_pad_template_caps (pad);
-
- gst_query_parse_accept_caps (query, &caps);
-
- gst_query_set_accept_caps_result (query,
- gst_caps_is_subset (caps, acceptable));
- gst_caps_unref (acceptable);
- ret = TRUE;
- }
- break;
- default:
- ret = GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
- break;
- }
-
- return ret;
-}
-
-static void
-gst_x264_enc_class_init (GstX264EncClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *element_class;
- GstVideoEncoderClass *gstencoder_class;
- const gchar *partitions = NULL;
- GstPadTemplate *sink_templ;
- GstCaps *supported_sinkcaps;
-
- x264enc_defaults = g_string_new ("");
-
- gobject_class = G_OBJECT_CLASS (klass);
- element_class = GST_ELEMENT_CLASS (klass);
- gstencoder_class = GST_VIDEO_ENCODER_CLASS (klass);
-
- gobject_class->set_property = gst_x264_enc_set_property;
- gobject_class->get_property = gst_x264_enc_get_property;
- gobject_class->finalize = gst_x264_enc_finalize;
-
- gstencoder_class->set_format = GST_DEBUG_FUNCPTR (gst_x264_enc_set_format);
- gstencoder_class->handle_frame =
- GST_DEBUG_FUNCPTR (gst_x264_enc_handle_frame);
- gstencoder_class->start = GST_DEBUG_FUNCPTR (gst_x264_enc_start);
- gstencoder_class->stop = GST_DEBUG_FUNCPTR (gst_x264_enc_stop);
- gstencoder_class->flush = GST_DEBUG_FUNCPTR (gst_x264_enc_flush);
- gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x264_enc_finish);
- gstencoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_getcaps);
- gstencoder_class->propose_allocation =
- GST_DEBUG_FUNCPTR (gst_x264_enc_propose_allocation);
- gstencoder_class->sink_query = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_query);
-
- /* options for which we don't use string equivalents */
- g_object_class_install_property (gobject_class, ARG_PASS,
- g_param_spec_enum ("pass", "Encoding pass/type",
- "Encoding pass/type", GST_X264_ENC_PASS_TYPE,
- ARG_PASS_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, ARG_QUANTIZER,
- g_param_spec_uint ("quantizer", "Constant Quantizer",
- "Constant quantizer or quality to apply",
- 0, 50, ARG_QUANTIZER_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, ARG_BITRATE,
- g_param_spec_uint ("bitrate", "Bitrate", "Bitrate in kbit/sec", 1,
- 2000 * 1024, ARG_BITRATE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- GST_PARAM_MUTABLE_PLAYING));
- g_object_class_install_property (gobject_class, ARG_VBV_BUF_CAPACITY,
- g_param_spec_uint ("vbv-buf-capacity", "VBV buffer capacity",
- "Size of the VBV buffer in milliseconds",
- 0, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- GST_PARAM_MUTABLE_PLAYING));
- g_object_class_install_property (gobject_class, ARG_SPEED_PRESET,
- g_param_spec_enum ("speed-preset", "Speed/quality preset",
- "Preset name for speed/quality tradeoff options (can affect decode "
- "compatibility - impose restrictions separately for your target decoder)",
- GST_X264_ENC_SPEED_PRESET_TYPE, ARG_SPEED_PRESET_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, ARG_PSY_TUNE,
- g_param_spec_enum ("psy-tune", "Psychovisual tuning preset",
- "Preset name for psychovisual tuning options",
- GST_X264_ENC_PSY_TUNE_TYPE, ARG_PSY_TUNE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, ARG_TUNE,
- g_param_spec_flags ("tune", "Content tuning preset",
- "Preset name for non-psychovisual tuning options",
- GST_X264_ENC_TUNE_TYPE, ARG_TUNE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, ARG_OPTION_STRING,
- g_param_spec_string ("option-string", "Option string",
- "String of x264 options (overridden by element properties)"
- " in the format \"key1=value1:key2=value2\".",
- ARG_OPTION_STRING_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, ARG_FRAME_PACKING,
- g_param_spec_enum ("frame-packing", "Frame Packing",
- "Set frame packing mode for Stereoscopic content",
- GST_X264_ENC_FRAME_PACKING_TYPE, ARG_FRAME_PACKING_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, ARG_INSERT_VUI,
- g_param_spec_boolean ("insert-vui", "Insert VUI",
- "Insert VUI NAL in stream",
- ARG_INSERT_VUI_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /* options for which we _do_ use string equivalents */
- g_object_class_install_property (gobject_class, ARG_THREADS,
- g_param_spec_uint ("threads", "Threads",
- "Number of threads used by the codec (0 for automatic)",
- 0, G_MAXINT, ARG_THREADS_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- /* NOTE: this first string append doesn't require the ':' delimiter but the
- * rest do */
- g_string_append_printf (x264enc_defaults, "threads=%d", ARG_THREADS_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_SLICED_THREADS,
- g_param_spec_boolean ("sliced-threads", "Sliced Threads",
- "Low latency but lower efficiency threading",
- ARG_SLICED_THREADS_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":sliced-threads=%d",
- ARG_SLICED_THREADS_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_SYNC_LOOKAHEAD,
- g_param_spec_int ("sync-lookahead", "Sync Lookahead",
- "Number of buffer frames for threaded lookahead (-1 for automatic)",
- -1, 250, ARG_SYNC_LOOKAHEAD_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":sync-lookahead=%d",
- ARG_SYNC_LOOKAHEAD_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_MULTIPASS_CACHE_FILE,
- g_param_spec_string ("multipass-cache-file", "Multipass Cache File",
- "Filename for multipass cache file",
- ARG_MULTIPASS_CACHE_FILE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":stats=%s",
- ARG_MULTIPASS_CACHE_FILE_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_BYTE_STREAM,
- g_param_spec_boolean ("byte-stream", "Byte Stream",
- "Generate byte stream format of NALU", ARG_BYTE_STREAM_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":annexb=%d",
- ARG_BYTE_STREAM_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_INTRA_REFRESH,
- g_param_spec_boolean ("intra-refresh", "Intra Refresh",
- "Use Periodic Intra Refresh instead of IDR frames",
- ARG_INTRA_REFRESH_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":intra-refresh=%d",
- ARG_INTRA_REFRESH_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_ME,
- g_param_spec_enum ("me", "Motion Estimation",
- "Integer pixel motion estimation method", GST_X264_ENC_ME_TYPE,
- ARG_ME_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":me=%s",
- x264_motion_est_names[ARG_ME_DEFAULT]);
- g_object_class_install_property (gobject_class, ARG_SUBME,
- g_param_spec_uint ("subme", "Subpixel Motion Estimation",
- "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
- 1, 10, ARG_SUBME_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":subme=%d", ARG_SUBME_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_ANALYSE,
- g_param_spec_flags ("analyse", "Analyse", "Partitions to consider",
- GST_X264_ENC_ANALYSE_TYPE, ARG_ANALYSE_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- partitions = gst_x264_enc_build_partitions (ARG_ANALYSE_DEFAULT);
- if (partitions) {
- g_string_append_printf (x264enc_defaults, ":partitions=%s", partitions);
- g_free ((gpointer) partitions);
- }
- g_object_class_install_property (gobject_class, ARG_DCT8x8,
- g_param_spec_boolean ("dct8x8", "DCT8x8",
- "Adaptive spatial transform size", ARG_DCT8x8_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":8x8dct=%d", ARG_DCT8x8_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_REF,
- g_param_spec_uint ("ref", "Reference Frames",
- "Number of reference frames",
- 1, 16, ARG_REF_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":ref=%d", ARG_REF_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_BFRAMES,
- g_param_spec_uint ("bframes", "B-Frames",
- "Number of B-frames between I and P",
- 0, 16, ARG_BFRAMES_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":bframes=%d", ARG_BFRAMES_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_B_ADAPT,
- g_param_spec_boolean ("b-adapt", "B-Adapt",
- "Automatically decide how many B-frames to use",
- ARG_B_ADAPT_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":b-adapt=%d", ARG_B_ADAPT_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_B_PYRAMID,
- g_param_spec_boolean ("b-pyramid", "B-Pyramid",
- "Keep some B-frames as references", ARG_B_PYRAMID_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":b-pyramid=%s",
- x264_b_pyramid_names[ARG_B_PYRAMID_DEFAULT]);
- g_object_class_install_property (gobject_class, ARG_WEIGHTB,
- g_param_spec_boolean ("weightb", "Weighted B-Frames",
- "Weighted prediction for B-frames", ARG_WEIGHTB_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":weightb=%d", ARG_WEIGHTB_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_SPS_ID,
- g_param_spec_uint ("sps-id", "SPS ID",
- "SPS and PPS ID number",
- 0, 31, ARG_SPS_ID_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":sps-id=%d", ARG_SPS_ID_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_AU_NALU,
- g_param_spec_boolean ("aud", "AUD",
- "Use AU (Access Unit) delimiter", ARG_AU_NALU_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":aud=%d", ARG_AU_NALU_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_TRELLIS,
- g_param_spec_boolean ("trellis", "Trellis quantization",
- "Enable trellis searched quantization", ARG_TRELLIS_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":trellis=%d", ARG_TRELLIS_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_KEYINT_MAX,
- g_param_spec_uint ("key-int-max", "Key-frame maximal interval",
- "Maximal distance between two key-frames (0 for automatic)",
- 0, G_MAXINT, ARG_KEYINT_MAX_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":keyint=%d",
- ARG_KEYINT_MAX_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_CABAC,
- g_param_spec_boolean ("cabac", "Use CABAC", "Enable CABAC entropy coding",
- ARG_CABAC_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":cabac=%d", ARG_CABAC_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_QP_MIN,
- g_param_spec_uint ("qp-min", "Minimum Quantizer",
- "Minimum quantizer", 0, 63, ARG_QP_MIN_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":qpmin=%d", ARG_QP_MIN_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_QP_MAX,
- g_param_spec_uint ("qp-max", "Maximum Quantizer",
- "Maximum quantizer", 0, 63, ARG_QP_MAX_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":qpmax=%d", ARG_QP_MAX_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_QP_STEP,
- g_param_spec_uint ("qp-step", "Maximum Quantizer Difference",
- "Maximum quantizer difference between frames",
- 0, 63, ARG_QP_STEP_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":qpstep=%d", ARG_QP_STEP_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_IP_FACTOR,
- g_param_spec_float ("ip-factor", "IP-Factor",
- "Quantizer factor between I- and P-frames",
- 0, 2, ARG_IP_FACTOR_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":ip-factor=%f",
- ARG_IP_FACTOR_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_PB_FACTOR,
- g_param_spec_float ("pb-factor", "PB-Factor",
- "Quantizer factor between P- and B-frames", 0, 2,
- ARG_PB_FACTOR_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":pb-factor=%f",
- ARG_PB_FACTOR_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_RC_MB_TREE,
- g_param_spec_boolean ("mb-tree", "Macroblock Tree",
- "Macroblock-Tree ratecontrol",
- ARG_RC_MB_TREE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":mbtree=%d",
- ARG_RC_MB_TREE_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_RC_LOOKAHEAD,
- g_param_spec_int ("rc-lookahead", "Rate Control Lookahead",
- "Number of frames for frametype lookahead", 0, 250,
- ARG_RC_LOOKAHEAD_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":rc-lookahead=%d",
- ARG_RC_LOOKAHEAD_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_NR,
- g_param_spec_uint ("noise-reduction", "Noise Reduction",
- "Noise reduction strength",
- 0, 100000, ARG_NR_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":nr=%d", ARG_NR_DEFAULT);
- g_object_class_install_property (gobject_class, ARG_INTERLACED,
- g_param_spec_boolean ("interlaced", "Interlaced",
- "Interlaced material", ARG_INTERLACED_DEFAULT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_string_append_printf (x264enc_defaults, ":interlaced=%d",
- ARG_INTERLACED_DEFAULT);
-
- /* append deblock parameters */
- g_string_append_printf (x264enc_defaults, ":deblock=0,0");
- /* append weighted prediction parameter */
- g_string_append_printf (x264enc_defaults, ":weightp=0");
-
- gst_element_class_set_static_metadata (element_class,
- "x264enc", "Codec/Encoder/Video", "H264 Encoder",
- "Josef Zlomek <josef.zlomek@itonis.tv>, "
- "Mark Nauwelaerts <mnauw@users.sf.net>");
-
- supported_sinkcaps = gst_caps_new_simple ("video/x-raw",
- "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1,
- "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
- "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
-
- gst_x264_enc_add_x264_chroma_format (gst_caps_get_structure
- (supported_sinkcaps, 0), TRUE, TRUE, TRUE, TRUE);
-
- sink_templ = gst_pad_template_new ("sink",
- GST_PAD_SINK, GST_PAD_ALWAYS, supported_sinkcaps);
-
- gst_caps_unref (supported_sinkcaps);
-
- gst_element_class_add_pad_template (element_class, sink_templ);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
-
- gst_type_mark_as_plugin_api (GST_X264_ENC_ANALYSE_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_FRAME_PACKING_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_ME_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_PASS_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_PSY_TUNE_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_SPEED_PRESET_TYPE, 0);
- gst_type_mark_as_plugin_api (GST_X264_ENC_TUNE_TYPE, 0);
-}
-
-/* *INDENT-OFF* */
-G_GNUC_PRINTF (3, 0)
-/* *INDENT-ON* */
-
-static void
-gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
- va_list args)
-{
-#ifndef GST_DISABLE_GST_DEBUG
- GstDebugLevel gst_level;
- GObject *object = (GObject *) private;
- gchar *formatted;
-
- switch (level) {
- case X264_LOG_NONE:
- gst_level = GST_LEVEL_NONE;
- break;
- case X264_LOG_ERROR:
- gst_level = GST_LEVEL_ERROR;
- break;
- case X264_LOG_WARNING:
- gst_level = GST_LEVEL_WARNING;
- break;
- case X264_LOG_INFO:
- gst_level = GST_LEVEL_INFO;
- break;
- default:
- /* push x264enc debug down to our lower levels to avoid some clutter */
- gst_level = GST_LEVEL_LOG;
- break;
- }
-
- if (G_LIKELY (gst_level > _gst_debug_min))
- return;
-
- if (G_LIKELY (gst_level > gst_debug_category_get_threshold (GST_CAT_DEFAULT)))
- return;
-
- formatted = g_strdup_vprintf (format, args);
- g_strchomp (formatted);
-
- GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, gst_level, object, "%s", formatted);
-
- g_free (formatted);
-#endif /* GST_DISABLE_GST_DEBUG */
-}
-
-/* initialize the new element
- * instantiate pads and add them to element
- * set functions
- * initialize structure
- */
-static void
-gst_x264_enc_init (GstX264Enc * encoder)
-{
- /* properties */
- encoder->threads = ARG_THREADS_DEFAULT;
- encoder->sliced_threads = ARG_SLICED_THREADS_DEFAULT;
- encoder->sync_lookahead = ARG_SYNC_LOOKAHEAD_DEFAULT;
- encoder->pass = ARG_PASS_DEFAULT;
- encoder->quantizer = ARG_QUANTIZER_DEFAULT;
- encoder->mp_cache_file = g_strdup (ARG_MULTIPASS_CACHE_FILE_DEFAULT);
- encoder->byte_stream = ARG_BYTE_STREAM_DEFAULT;
- encoder->intra_refresh = ARG_INTRA_REFRESH_DEFAULT;
- encoder->vbv_buf_capacity = ARG_VBV_BUF_CAPACITY_DEFAULT;
- encoder->me = ARG_ME_DEFAULT;
- encoder->subme = ARG_SUBME_DEFAULT;
- encoder->analyse = ARG_ANALYSE_DEFAULT;
- encoder->dct8x8 = ARG_DCT8x8_DEFAULT;
- encoder->ref = ARG_REF_DEFAULT;
- encoder->bframes = ARG_BFRAMES_DEFAULT;
- encoder->b_adapt = ARG_B_ADAPT_DEFAULT;
- encoder->b_pyramid = ARG_B_PYRAMID_DEFAULT;
- encoder->weightb = ARG_WEIGHTB_DEFAULT;
- encoder->sps_id = ARG_SPS_ID_DEFAULT;
- encoder->au_nalu = ARG_AU_NALU_DEFAULT;
- encoder->trellis = ARG_TRELLIS_DEFAULT;
- encoder->keyint_max = ARG_KEYINT_MAX_DEFAULT;
- encoder->cabac = ARG_CABAC_DEFAULT;
- encoder->qp_min = ARG_QP_MIN_DEFAULT;
- encoder->qp_max = ARG_QP_MAX_DEFAULT;
- encoder->qp_step = ARG_QP_STEP_DEFAULT;
- encoder->ip_factor = ARG_IP_FACTOR_DEFAULT;
- encoder->pb_factor = ARG_PB_FACTOR_DEFAULT;
- encoder->mb_tree = ARG_RC_MB_TREE_DEFAULT;
- encoder->rc_lookahead = ARG_RC_LOOKAHEAD_DEFAULT;
- encoder->noise_reduction = ARG_NR_DEFAULT;
- encoder->interlaced = ARG_INTERLACED_DEFAULT;
- encoder->option_string = g_string_new (NULL);
- encoder->option_string_prop = g_string_new (ARG_OPTION_STRING_DEFAULT);
- encoder->speed_preset = ARG_SPEED_PRESET_DEFAULT;
- encoder->psy_tune = ARG_PSY_TUNE_DEFAULT;
- encoder->tune = ARG_TUNE_DEFAULT;
- encoder->frame_packing = ARG_FRAME_PACKING_DEFAULT;
- encoder->insert_vui = ARG_INSERT_VUI_DEFAULT;
-
- encoder->bitrate_manager =
- gst_encoder_bitrate_profile_manager_new (ARG_BITRATE_DEFAULT);
-}
-
-typedef struct
-{
- GstVideoCodecFrame *frame;
- GstVideoFrame vframe;
-} FrameData;
-
-static FrameData *
-gst_x264_enc_queue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame,
- GstVideoInfo * info)
-{
- GstVideoFrame vframe;
- FrameData *fdata;
-
- if (!gst_video_frame_map (&vframe, info, frame->input_buffer, GST_MAP_READ))
- return NULL;
-
- fdata = g_slice_new (FrameData);
- fdata->frame = gst_video_codec_frame_ref (frame);
- fdata->vframe = vframe;
-
- enc->pending_frames = g_list_prepend (enc->pending_frames, fdata);
-
- return fdata;
-}
-
-static void
-gst_x264_enc_dequeue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame)
-{
- GList *l;
-
- for (l = enc->pending_frames; l; l = l->next) {
- FrameData *fdata = l->data;
-
- if (fdata->frame != frame)
- continue;
-
- gst_video_frame_unmap (&fdata->vframe);
- gst_video_codec_frame_unref (fdata->frame);
- g_slice_free (FrameData, fdata);
-
- enc->pending_frames = g_list_delete_link (enc->pending_frames, l);
- return;
- }
-}
-
-static void
-gst_x264_enc_dequeue_all_frames (GstX264Enc * enc)
-{
- GList *l;
-
- for (l = enc->pending_frames; l; l = l->next) {
- FrameData *fdata = l->data;
-
- gst_video_frame_unmap (&fdata->vframe);
- gst_video_codec_frame_unref (fdata->frame);
- g_slice_free (FrameData, fdata);
- }
- g_list_free (enc->pending_frames);
- enc->pending_frames = NULL;
-}
-
-static gboolean
-gst_x264_enc_start (GstVideoEncoder * encoder)
-{
- GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
- x264enc->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
-
- /* make sure that we have enough time for first DTS,
- this is probably overkill for most streams */
- gst_video_encoder_set_min_pts (encoder, GST_SECOND * 60 * 60 * 1000);
-
- return TRUE;
-}
-
-static gboolean
-gst_x264_enc_stop (GstVideoEncoder * encoder)
-{
- GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
- gst_x264_enc_flush_frames (x264enc, FALSE);
- gst_x264_enc_close_encoder (x264enc);
- gst_x264_enc_dequeue_all_frames (x264enc);
-
- if (x264enc->input_state)
- gst_video_codec_state_unref (x264enc->input_state);
- x264enc->input_state = NULL;
-
- return TRUE;
-}
-
-
-static gboolean
-gst_x264_enc_flush (GstVideoEncoder * encoder)
-{
- GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
- gst_x264_enc_flush_frames (x264enc, FALSE);
- gst_x264_enc_close_encoder (x264enc);
- gst_x264_enc_dequeue_all_frames (x264enc);
-
- gst_x264_enc_init_encoder (x264enc);
-
- return TRUE;
-}
-
-static void
-gst_x264_enc_finalize (GObject * object)
-{
- GstX264Enc *encoder = GST_X264_ENC (object);
-
- if (encoder->input_state)
- gst_video_codec_state_unref (encoder->input_state);
- encoder->input_state = NULL;
-
-#define FREE_STRING(ptr) \
- if (ptr) \
- g_string_free (ptr, TRUE);
-
- FREE_STRING (encoder->tunings);
- FREE_STRING (encoder->option_string);
- FREE_STRING (encoder->option_string_prop);
- gst_encoder_bitrate_profile_manager_free (encoder->bitrate_manager);
-
-#undef FREE_STRING
-
- g_free (encoder->mp_cache_file);
- encoder->mp_cache_file = NULL;
-
- gst_x264_enc_close_encoder (encoder);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/*
- * gst_x264_enc_parse_options
- * @encoder: Encoder to which options are assigned
- * @str: Option string
- *
- * Parse option string and assign to x264 parameters
- *
- */
-static gboolean
-gst_x264_enc_parse_options (GstX264Enc * encoder, const gchar * str)
-{
- GStrv kvpairs;
- guint npairs, i;
- gint parse_result = 0, ret = 0;
- gchar *options = (gchar *) str;
-
- while (*options == ':')
- options++;
-
- kvpairs = g_strsplit (options, ":", 0);
- npairs = g_strv_length (kvpairs);
-
- for (i = 0; i < npairs; i++) {
- GStrv key_val = g_strsplit (kvpairs[i], "=", 2);
-
- parse_result =
- encoder->vtable->x264_param_parse (&encoder->x264param, key_val[0],
- key_val[1]);
-
- if (parse_result == X264_PARAM_BAD_NAME) {
- GST_ERROR_OBJECT (encoder, "Bad name for option %s=%s",
- key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
- }
- if (parse_result == X264_PARAM_BAD_VALUE) {
- GST_ERROR_OBJECT (encoder,
- "Bad value for option %s=%s (Note: a NULL value for a non-boolean triggers this)",
- key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
- }
-
- g_strfreev (key_val);
-
- if (parse_result)
- ret++;
- }
-
- g_strfreev (kvpairs);
- return !ret;
-}
-
-static gint
-gst_x264_enc_gst_to_x264_video_format (GstVideoFormat format, gint * nplanes)
-{
- switch (format) {
- case GST_VIDEO_FORMAT_I420:
- case GST_VIDEO_FORMAT_YV12:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I420;
- case GST_VIDEO_FORMAT_I420_10BE:
- case GST_VIDEO_FORMAT_I420_10LE:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I420 | X264_CSP_HIGH_DEPTH;
- case GST_VIDEO_FORMAT_Y42B:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I422;
- case GST_VIDEO_FORMAT_I422_10BE:
- case GST_VIDEO_FORMAT_I422_10LE:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I422 | X264_CSP_HIGH_DEPTH;
- case GST_VIDEO_FORMAT_Y444:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I444;
- case GST_VIDEO_FORMAT_Y444_10BE:
- case GST_VIDEO_FORMAT_Y444_10LE:
- if (nplanes)
- *nplanes = 3;
- return X264_CSP_I444 | X264_CSP_HIGH_DEPTH;
- case GST_VIDEO_FORMAT_NV12:
- if (nplanes)
- *nplanes = 2;
- return X264_CSP_NV12;
- default:
- g_return_val_if_reached (GST_VIDEO_FORMAT_UNKNOWN);
- }
-}
-
-/*
- * gst_x264_enc_init_encoder
- * @encoder: Encoder which should be initialized.
- *
- * Initialize x264 encoder.
- *
- */
-static gboolean
-gst_x264_enc_init_encoder (GstX264Enc * encoder)
-{
- guint pass = 0;
- GstVideoInfo *info;
- guint bitrate;
-
- if (!encoder->input_state) {
- GST_DEBUG_OBJECT (encoder, "Have no input state yet");
- return FALSE;
- }
-
- info = &encoder->input_state->info;
-
- /* make sure that the encoder is closed */
- gst_x264_enc_close_encoder (encoder);
-
- GST_OBJECT_LOCK (encoder);
-
- if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 8)
- encoder->vtable = vtable_8bit;
- else if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 10)
- encoder->vtable = vtable_10bit;
-
- g_assert (encoder->vtable != NULL);
-
- gst_x264_enc_build_tunings_string (encoder);
-
- /* set x264 parameters and use preset/tuning if present */
- GST_DEBUG_OBJECT (encoder, "Applying defaults with preset %s, tunings %s",
- encoder->speed_preset ? x264_preset_names[encoder->speed_preset - 1] : "",
- encoder->tunings && encoder->tunings->len ? encoder->tunings->str : "");
- encoder->vtable->x264_param_default_preset (&encoder->x264param,
- encoder->speed_preset ? x264_preset_names[encoder->speed_preset -
- 1] : NULL, encoder->tunings
- && encoder->tunings->len ? encoder->tunings->str : NULL);
-
- /* log callback setup; part of parameters
- * this needs to be done again after every *param_default* () call */
- encoder->x264param.pf_log = gst_x264_enc_log_callback;
- encoder->x264param.p_log_private = encoder;
- encoder->x264param.i_log_level = X264_LOG_DEBUG;
-
- /* if no preset nor tuning, use property defaults */
- if (!encoder->speed_preset && !encoder->tunings->len) {
- GST_DEBUG_OBJECT (encoder, "Applying x264enc_defaults");
- if (x264enc_defaults->len
- && gst_x264_enc_parse_options (encoder,
- x264enc_defaults->str) == FALSE) {
- GST_DEBUG_OBJECT (encoder,
- "x264enc_defaults string contains errors. This is a bug.");
- goto unlock_and_return;
- }
- } else {
- /* When using presets we need to respect the default output format */
- encoder->x264param.b_aud = encoder->au_nalu;
- encoder->x264param.b_annexb = encoder->byte_stream;
- }
-
- /* setup appropriate timebase for gstreamer */
- encoder->x264param.i_timebase_num = 1;
- encoder->x264param.i_timebase_den = 1000000000;
-
- /* apply option-string property */
- if (encoder->option_string_prop && encoder->option_string_prop->len) {
- GST_DEBUG_OBJECT (encoder, "Applying option-string: %s",
- encoder->option_string_prop->str);
- if (gst_x264_enc_parse_options (encoder,
- encoder->option_string_prop->str) == FALSE) {
- GST_DEBUG_OBJECT (encoder, "Your option-string contains errors.");
- goto unlock_and_return;
- }
- }
- /* apply user-set options */
- if (encoder->option_string && encoder->option_string->len) {
- GST_DEBUG_OBJECT (encoder, "Applying user-set options: %s",
- encoder->option_string->str);
- if (gst_x264_enc_parse_options (encoder,
- encoder->option_string->str) == FALSE) {
- GST_DEBUG_OBJECT (encoder, "Failed to parse internal option string. "
- "This could be due to use of an old libx264 version. Option string "
- "was: %s", encoder->option_string->str);
- }
- }
-
- /* set up encoder parameters */
-#if X264_BUILD >= 153
- encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
-#endif
- encoder->x264param.i_csp =
- gst_x264_enc_gst_to_x264_video_format (info->finfo->format,
- &encoder->x264_nplanes);
- if (info->fps_d == 0 || info->fps_n == 0) {
- /* No FPS so must use VFR
- * This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
- encoder->x264param.b_vfr_input = TRUE;
- if (encoder->keyint_max) { /* NB the default is 250 setup by x264 itself */
- encoder->x264param.i_keyint_max = encoder->keyint_max;
- }
- } else {
- /* FPS available so set it up */
- encoder->x264param.b_vfr_input = FALSE;
- encoder->x264param.i_fps_num = info->fps_n;
- encoder->x264param.i_fps_den = info->fps_d;
- encoder->x264param.i_keyint_max =
- encoder->keyint_max ? encoder->keyint_max : (10 * info->fps_n /
- info->fps_d);
- }
- encoder->x264param.i_width = info->width;
- encoder->x264param.i_height = info->height;
- if (info->par_d > 0) {
- encoder->x264param.vui.i_sar_width = info->par_n;
- encoder->x264param.vui.i_sar_height = info->par_d;
- }
-
- if ((((info->height == 576) && ((info->width == 720)
- || (info->width == 704) || (info->width == 352)))
- || ((info->height == 288) && (info->width == 352)))
- && (info->fps_d == 1) && (info->fps_n == 25)) {
- encoder->x264param.vui.i_vidformat = 1; /* PAL */
- } else if ((((info->height == 480) && ((info->width == 720)
- || (info->width == 704) || (info->width == 352)))
- || ((info->height == 240) && (info->width == 352)))
- && (info->fps_d == 1001) && ((info->fps_n == 30000)
- || (info->fps_n == 24000))) {
- encoder->x264param.vui.i_vidformat = 2; /* NTSC */
- } else {
- encoder->x264param.vui.i_vidformat = 5; /* unspecified */
- }
-
- if (!encoder->insert_vui)
- goto skip_vui_parameters;
-
- encoder->x264param.vui.i_colorprim =
- gst_video_color_primaries_to_iso (info->colorimetry.primaries);
-
- encoder->x264param.vui.i_transfer =
- gst_video_transfer_function_to_iso (info->colorimetry.transfer);
-
- encoder->x264param.vui.i_colmatrix =
- gst_video_color_matrix_to_iso (info->colorimetry.matrix);
-
- if (info->colorimetry.range == GST_VIDEO_COLOR_RANGE_0_255) {
- encoder->x264param.vui.b_fullrange = 1;
- } else {
- encoder->x264param.vui.b_fullrange = 0;
- }
-
- switch (info->chroma_site) {
- case GST_VIDEO_CHROMA_SITE_MPEG2:
- encoder->x264param.vui.i_chroma_loc = 0;
- break;
- case GST_VIDEO_CHROMA_SITE_JPEG:
- encoder->x264param.vui.i_chroma_loc = 1;
- break;
- case GST_VIDEO_CHROMA_SITE_V_COSITED:
- encoder->x264param.vui.i_chroma_loc = 3;
- break;
- case GST_VIDEO_CHROMA_SITE_DV:
- encoder->x264param.vui.i_chroma_loc = 2;
- break;
- default:
- encoder->x264param.vui.i_chroma_loc = 0;
- break;
- }
-
-skip_vui_parameters:
-
- encoder->x264param.analyse.b_psnr = 0;
-
- bitrate =
- gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
- encoder->input_state ? &encoder->input_state->info : NULL);
-
- /* FIXME 2.0 make configuration more sane and consistent with x264 cmdline:
- * + split pass property into a pass property (pass1/2/3 enum) and rc-method
- * + bitrate property should only be used in case of CBR method
- * + vbv bitrate/buffer should have separate configuration that is then
- * applied independently of the mode:
- * + either using properties (new) vbv-maxrate and (renamed) vbv-bufsize
- * + or dropping vbv-buf-capacity altogether and simply using option-string
- */
- switch (encoder->pass) {
- case GST_X264_ENC_PASS_QUANT:
- encoder->x264param.rc.i_rc_method = X264_RC_CQP;
- encoder->x264param.rc.i_qp_constant = encoder->quantizer;
- break;
- case GST_X264_ENC_PASS_QUAL:
- encoder->x264param.rc.i_rc_method = X264_RC_CRF;
- encoder->x264param.rc.f_rf_constant = encoder->quantizer;
- encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_buffer_size
- = encoder->x264param.rc.i_vbv_max_bitrate
- * encoder->vbv_buf_capacity / 1000;
- break;
- case GST_X264_ENC_PASS_CBR:
- case GST_X264_ENC_PASS_PASS1:
- case GST_X264_ENC_PASS_PASS2:
- case GST_X264_ENC_PASS_PASS3:
- default:
- encoder->x264param.rc.i_rc_method = X264_RC_ABR;
- encoder->x264param.rc.i_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_buffer_size =
- encoder->x264param.rc.i_vbv_max_bitrate
- * encoder->vbv_buf_capacity / 1000;
- pass = encoder->pass & 0xF;
- break;
- }
-
- switch (pass) {
- case 0:
- encoder->x264param.rc.b_stat_read = 0;
- encoder->x264param.rc.b_stat_write = 0;
- break;
- case 1:
- encoder->x264param.rc.b_stat_read = 0;
- encoder->x264param.rc.b_stat_write = 1;
- encoder->vtable->x264_param_apply_fastfirstpass (&encoder->x264param);
- encoder->x264param.i_frame_reference = 1;
- encoder->x264param.analyse.b_transform_8x8 = 0;
- encoder->x264param.analyse.inter = 0;
- encoder->x264param.analyse.i_me_method = X264_ME_DIA;
- encoder->x264param.analyse.i_subpel_refine =
- MIN (2, encoder->x264param.analyse.i_subpel_refine);
- encoder->x264param.analyse.i_trellis = 0;
- encoder->x264param.analyse.b_fast_pskip = 1;
- break;
- case 2:
- encoder->x264param.rc.b_stat_read = 1;
- encoder->x264param.rc.b_stat_write = 0;
- break;
- case 3:
- encoder->x264param.rc.b_stat_read = 1;
- encoder->x264param.rc.b_stat_write = 1;
- break;
- }
-
- if (encoder->peer_profile) {
- if (encoder->vtable->x264_param_apply_profile (&encoder->x264param,
- encoder->peer_profile))
- GST_WARNING_OBJECT (encoder, "Bad downstream profile name: %s",
- encoder->peer_profile);
- }
-
- /* If using an intra profile, all frames are intra frames */
- if (encoder->peer_intra_profile)
- encoder->x264param.i_keyint_max = encoder->x264param.i_keyint_min = 1;
-
- /* Enforce level limits if they were in the caps */
- if (encoder->peer_level_idc != -1) {
- gint i;
- const x264_level_t *peer_level = NULL;
-
- for (i = 0; (*encoder->vtable->x264_levels)[i].level_idc; i++) {
- if (encoder->peer_level_idc ==
- (*encoder->vtable->x264_levels)[i].level_idc) {
- int mb_width = (info->width + 15) / 16;
- int mb_height = (info->height + 15) / 16;
- int mbs = mb_width * mb_height;
-
- if ((*encoder->vtable->x264_levels)[i].frame_size < mbs ||
- (*encoder->vtable->x264_levels)[i].frame_size * 8 <
- mb_width * mb_width
- || (*encoder->vtable->x264_levels)[i].frame_size * 8 <
- mb_height * mb_height) {
- GST_WARNING_OBJECT (encoder,
- "Frame size larger than level %d allows",
- encoder->peer_level_idc);
- break;
- }
-
- if (info->fps_d && (*encoder->vtable->x264_levels)[i].mbps
- < (gint64) mbs * info->fps_n / info->fps_d) {
- GST_WARNING_OBJECT (encoder,
- "Macroblock rate higher than level %d allows",
- encoder->peer_level_idc);
- break;
- }
-
- peer_level = &(*encoder->vtable->x264_levels)[i];
- break;
- }
- }
-
- if (!peer_level)
- goto unlock_and_return;
-
- encoder->x264param.i_level_idc = peer_level->level_idc;
-
- encoder->x264param.rc.i_bitrate = MIN (encoder->x264param.rc.i_bitrate,
- peer_level->bitrate);
- encoder->x264param.rc.i_vbv_max_bitrate =
- MIN (encoder->x264param.rc.i_vbv_max_bitrate, peer_level->bitrate);
- encoder->x264param.rc.i_vbv_buffer_size =
- MIN (encoder->x264param.rc.i_vbv_buffer_size, peer_level->cpb);
- encoder->x264param.analyse.i_mv_range =
- MIN (encoder->x264param.analyse.i_mv_range, peer_level->mv_range);
-
- if (peer_level->frame_only) {
- encoder->x264param.b_interlaced = FALSE;
- encoder->x264param.b_fake_interlaced = FALSE;
- }
- }
-
- if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
- encoder->x264param.b_interlaced = TRUE;
- if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
- encoder->x264param.b_pic_struct = TRUE;
- }
- if (GST_VIDEO_INFO_FIELD_ORDER (info) ==
- GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
- encoder->x264param.b_tff = TRUE;
- } else {
- encoder->x264param.b_tff = FALSE;
- }
- } else {
- encoder->x264param.b_interlaced = FALSE;
- }
-
- /* Set 3D frame packing */
- if (encoder->frame_packing != GST_VIDEO_MULTIVIEW_MODE_NONE)
- encoder->x264param.i_frame_packing = encoder->frame_packing;
- else
- encoder->x264param.i_frame_packing =
- gst_x264_enc_mview_mode_to_frame_packing (GST_VIDEO_INFO_MULTIVIEW_MODE
- (info));
-
- GST_DEBUG_OBJECT (encoder, "Stereo frame packing = %d",
- encoder->x264param.i_frame_packing);
-
- encoder->reconfig = FALSE;
-
- GST_OBJECT_UNLOCK (encoder);
-
- encoder->x264enc = encoder->vtable->x264_encoder_open (&encoder->x264param);
- if (!encoder->x264enc) {
- GST_ELEMENT_ERROR (encoder, STREAM, ENCODE,
- ("Can not initialize x264 encoder."), (NULL));
- return FALSE;
- }
-
- return TRUE;
-
-unlock_and_return:
- GST_OBJECT_UNLOCK (encoder);
- return FALSE;
-}
-
-/* gst_x264_enc_close_encoder
- * @encoder: Encoder which should close.
- *
- * Close x264 encoder.
- */
-static void
-gst_x264_enc_close_encoder (GstX264Enc * encoder)
-{
- if (encoder->x264enc != NULL) {
- encoder->vtable->x264_encoder_close (encoder->x264enc);
- encoder->x264enc = NULL;
- }
- encoder->vtable = NULL;
-}
-
-static gboolean
-gst_x264_enc_set_profile_and_level (GstX264Enc * encoder, GstCaps * caps)
-{
- x264_nal_t *nal;
- int i_nal;
- int header_return;
- gint sps_ni = 0;
- guint8 *sps;
- GstStructure *s;
- const gchar *profile;
- GstCaps *allowed_caps;
- GstStructure *s2;
- const gchar *allowed_profile;
-
- header_return =
- encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
- if (header_return < 0) {
- GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
- ("x264_encoder_headers return code=%d", header_return));
- return FALSE;
- }
-
- /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
- if (i_nal == 3 && nal[sps_ni].i_type != 7)
- sps_ni = 1;
-
- sps = nal[sps_ni].p_payload + 4;
- /* skip NAL unit type */
- sps++;
-
- gst_codec_utils_h264_caps_set_level_and_profile (caps, sps, 3);
-
- /* Constrained baseline is a strict subset of baseline. If downstream
- * wanted baseline and we produced constrained baseline, we can just
- * set the profile to baseline in the caps to make negotiation happy.
- * Same goes for baseline as subset of main profile and main as a subset
- * of high profile.
- */
- s = gst_caps_get_structure (caps, 0);
- profile = gst_structure_get_string (s, "profile");
-
- allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
-
- if (allowed_caps == NULL)
- goto no_peer;
-
- if (!gst_caps_can_intersect (allowed_caps, caps)) {
- allowed_caps = gst_caps_make_writable (allowed_caps);
- allowed_caps = gst_caps_truncate (allowed_caps);
- s2 = gst_caps_get_structure (allowed_caps, 0);
- gst_structure_fixate_field_string (s2, "profile", profile);
- allowed_profile = gst_structure_get_string (s2, "profile");
- if (!strcmp (allowed_profile, "high")) {
- if (!strcmp (profile, "constrained-baseline")
- || !strcmp (profile, "baseline") || !strcmp (profile, "main")) {
- gst_structure_set (s, "profile", G_TYPE_STRING, "high", NULL);
- GST_INFO_OBJECT (encoder, "downstream requested high profile, but "
- "encoder will now output %s profile (which is a subset), due "
- "to how it's been configured", profile);
- }
- } else if (!strcmp (allowed_profile, "main")) {
- if (!strcmp (profile, "constrained-baseline")
- || !strcmp (profile, "baseline")) {
- gst_structure_set (s, "profile", G_TYPE_STRING, "main", NULL);
- GST_INFO_OBJECT (encoder, "downstream requested main profile, but "
- "encoder will now output %s profile (which is a subset), due "
- "to how it's been configured", profile);
- }
- } else if (!strcmp (allowed_profile, "baseline")) {
- if (!strcmp (profile, "constrained-baseline"))
- gst_structure_set (s, "profile", G_TYPE_STRING, "baseline", NULL);
- }
- }
- gst_caps_unref (allowed_caps);
-
-no_peer:
-
- return TRUE;
-}
-
-/*
- * Returns: Buffer with the stream headers.
- */
-static GstBuffer *
-gst_x264_enc_header_buf (GstX264Enc * encoder)
-{
- GstBuffer *buf;
- x264_nal_t *nal;
- int i_nal;
- int header_return;
- int i_size;
- int nal_size;
- guint8 *buffer, *sps;
- gulong buffer_size;
- gint sei_ni = 2, sps_ni = 0, pps_ni = 1;
-
- if (G_UNLIKELY (encoder->x264enc == NULL))
- return NULL;
-
- /* Create avcC header. */
-
- header_return =
- encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
- if (header_return < 0) {
- GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
- ("x264_encoder_headers return code=%d", header_return));
- return NULL;
- }
-
- /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
- if (i_nal == 3 && nal[sps_ni].i_type != 7) {
- sei_ni = 0;
- sps_ni = 1;
- pps_ni = 2;
- }
-
- /* x264 is expected to return an SEI (some identification info),
- * and SPS and PPS */
- if (i_nal != 3 || nal[sps_ni].i_type != 7 || nal[pps_ni].i_type != 8 ||
- nal[sps_ni].i_payload < 4 || nal[pps_ni].i_payload < 1) {
- GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, (NULL),
- ("Unexpected x264 header."));
- return NULL;
- }
-
- GST_MEMDUMP ("SEI", nal[sei_ni].p_payload, nal[sei_ni].i_payload);
- GST_MEMDUMP ("SPS", nal[sps_ni].p_payload, nal[sps_ni].i_payload);
- GST_MEMDUMP ("PPS", nal[pps_ni].p_payload, nal[pps_ni].i_payload);
-
- /* nal payloads with emulation_prevention_three_byte, and some header data */
- buffer_size = (nal[sps_ni].i_payload + nal[pps_ni].i_payload) * 4 + 100;
- buffer = g_malloc (buffer_size);
-
- sps = nal[sps_ni].p_payload + 4;
- /* skip NAL unit type */
- sps++;
-
- buffer[0] = 1; /* AVC Decoder Configuration Record ver. 1 */
- buffer[1] = sps[0]; /* profile_idc */
- buffer[2] = sps[1]; /* profile_compability */
- buffer[3] = sps[2]; /* level_idc */
- buffer[4] = 0xfc | (4 - 1); /* nal_length_size_minus1 */
-
- i_size = 5;
-
- buffer[i_size++] = 0xe0 | 1; /* number of SPSs */
-
- nal_size = nal[sps_ni].i_payload - 4;
- memcpy (buffer + i_size + 2, nal[sps_ni].p_payload + 4, nal_size);
-
- GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
- i_size += nal_size + 2;
-
- buffer[i_size++] = 1; /* number of PPSs */
-
- nal_size = nal[pps_ni].i_payload - 4;
- memcpy (buffer + i_size + 2, nal[pps_ni].p_payload + 4, nal_size);
-
- GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
- i_size += nal_size + 2;
-
- buf = gst_buffer_new_and_alloc (i_size);
- gst_buffer_fill (buf, 0, buffer, i_size);
-
- GST_MEMDUMP ("header", buffer, i_size);
- g_free (buffer);
-
- return buf;
-}
-
-/* gst_x264_enc_set_src_caps
- * Returns: TRUE on success.
- */
-static gboolean
-gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstCaps * caps)
-{
- GstCaps *outcaps;
- GstStructure *structure;
- GstVideoCodecState *state;
- GstTagList *tags;
- guint bitrate =
- gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
- encoder->input_state ? &encoder->input_state->info : NULL);
-
- outcaps = gst_caps_new_empty_simple ("video/x-h264");
- structure = gst_caps_get_structure (outcaps, 0);
-
- if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY) {
- if (encoder->byte_stream) {
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
- } else {
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
- }
- }
- if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_AVC) {
- GstBuffer *buf = gst_x264_enc_header_buf (encoder);
- if (buf != NULL) {
- gst_caps_set_simple (outcaps, "codec_data", GST_TYPE_BUFFER, buf, NULL);
- gst_buffer_unref (buf);
- }
- gst_structure_set (structure, "stream-format", G_TYPE_STRING, "avc", NULL);
- } else {
- gst_structure_set (structure, "stream-format", G_TYPE_STRING, "byte-stream",
- NULL);
- }
- gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL);
-
- if (!gst_x264_enc_set_profile_and_level (encoder, outcaps)) {
- gst_caps_unref (outcaps);
- return FALSE;
- }
-
- state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder),
- outcaps, encoder->input_state);
- GST_DEBUG_OBJECT (encoder, "output caps: %" GST_PTR_FORMAT, state->caps);
-
- /* If set, local frame packing setting overrides any upstream config */
- switch (encoder->frame_packing) {
- case 0:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD;
- break;
- case 1:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED;
- break;
- case 2:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED;
- break;
- case 3:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
- break;
- case 4:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
- break;
- case 5:
- GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
- GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME;
- break;
- default:
- break;
- }
-
- gst_video_codec_state_unref (state);
-
- tags = gst_tag_list_new_empty ();
- gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
- GST_TAG_ENCODER_VERSION, X264_BUILD,
- GST_TAG_MAXIMUM_BITRATE, bitrate * 1024,
- GST_TAG_NOMINAL_BITRATE, bitrate * 1024, NULL);
- gst_video_encoder_merge_tags (GST_VIDEO_ENCODER (encoder), tags,
- GST_TAG_MERGE_REPLACE);
- gst_tag_list_unref (tags);
-
- return TRUE;
-}
-
-static void
-gst_x264_enc_set_latency (GstX264Enc * encoder)
-{
- GstVideoInfo *info = &encoder->input_state->info;
- gint max_delayed_frames;
- GstClockTime latency;
-
- max_delayed_frames =
- encoder->vtable->x264_encoder_maximum_delayed_frames (encoder->x264enc);
-
- if (info->fps_n) {
- latency = gst_util_uint64_scale_ceil (GST_SECOND * info->fps_d,
- max_delayed_frames, info->fps_n);
- } else {
- /* FIXME: Assume 25fps. This is better than reporting no latency at
- * all and then later failing in live pipelines
- */
- latency = gst_util_uint64_scale_ceil (GST_SECOND * 1,
- max_delayed_frames, 25);
- }
-
- GST_INFO_OBJECT (encoder,
- "Updating latency to %" GST_TIME_FORMAT " (%d frames)",
- GST_TIME_ARGS (latency), max_delayed_frames);
-
- gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), latency, latency);
-}
-
-static gboolean
-gst_x264_enc_set_format (GstVideoEncoder * video_enc,
- GstVideoCodecState * state)
-{
- GstX264Enc *encoder = GST_X264_ENC (video_enc);
- GstVideoInfo *info = &state->info;
- GstCaps *template_caps;
- GstCaps *allowed_caps = NULL;
-
- /* If the encoder is initialized, do not reinitialize it again if not
- * necessary */
- if (encoder->x264enc) {
- GstVideoInfo *old = &encoder->input_state->info;
-
- if (info->finfo->format == old->finfo->format
- && info->width == old->width && info->height == old->height
- && info->fps_n == old->fps_n && info->fps_d == old->fps_d
- && info->par_n == old->par_n && info->par_d == old->par_d) {
- gst_video_codec_state_unref (encoder->input_state);
- encoder->input_state = gst_video_codec_state_ref (state);
- return TRUE;
- }
-
- /* clear out pending frames */
- gst_x264_enc_flush_frames (encoder, TRUE);
-
- encoder->sps_id++;
- }
-
- if (encoder->input_state)
- gst_video_codec_state_unref (encoder->input_state);
- encoder->input_state = gst_video_codec_state_ref (state);
-
- encoder->peer_profile = NULL;
- encoder->peer_intra_profile = FALSE;
- encoder->peer_level_idc = -1;
-
- template_caps = gst_static_pad_template_get_caps (&src_factory);
- allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
-
- /* Output byte-stream if downstream has ANY caps, it's what people expect,
- * and it makes more sense too */
- if (allowed_caps == template_caps) {
- GST_INFO_OBJECT (encoder,
- "downstream has ANY caps, outputting byte-stream");
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
- g_string_append_printf (encoder->option_string, ":annexb=1");
- gst_caps_unref (allowed_caps);
- } else if (allowed_caps) {
- GstStructure *s;
- const gchar *profile;
- const gchar *level;
- const gchar *stream_format;
-
- if (gst_caps_is_empty (allowed_caps)) {
- gst_caps_unref (allowed_caps);
- gst_caps_unref (template_caps);
- return FALSE;
- }
-
- allowed_caps = gst_caps_make_writable (allowed_caps);
- allowed_caps = gst_caps_fixate (allowed_caps);
- s = gst_caps_get_structure (allowed_caps, 0);
-
- profile = gst_structure_get_string (s, "profile");
- if (profile) {
- /* FIXME - if libx264 ever adds support for FMO, ASO or redundant slices
- * make sure constrained profile has a separate case which disables
- * those */
- if (g_str_has_suffix (profile, "-intra")) {
- encoder->peer_intra_profile = TRUE;
- }
- if (!strcmp (profile, "constrained-baseline") ||
- !strcmp (profile, "baseline")) {
- encoder->peer_profile = "baseline";
- } else if (g_str_has_prefix (profile, "high-10")) {
- encoder->peer_profile = "high10";
- } else if (g_str_has_prefix (profile, "high-4:2:2")) {
- encoder->peer_profile = "high422";
- } else if (g_str_has_prefix (profile, "high-4:4:4")) {
- encoder->peer_profile = "high444";
- } else if (g_str_has_prefix (profile, "high")) {
- encoder->peer_profile = "high";
- } else if (!strcmp (profile, "main")) {
- encoder->peer_profile = "main";
- } else {
- g_assert_not_reached ();
- }
- }
-
- level = gst_structure_get_string (s, "level");
- if (level) {
- encoder->peer_level_idc = gst_codec_utils_h264_get_level_idc (level);
- }
-
- stream_format = gst_structure_get_string (s, "stream-format");
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
- if (stream_format) {
- if (!strcmp (stream_format, "avc")) {
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
- g_string_append_printf (encoder->option_string, ":annexb=0");
- } else if (!strcmp (stream_format, "byte-stream")) {
- encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
- g_string_append_printf (encoder->option_string, ":annexb=1");
- } else {
- /* means we have both in caps and _FROM_PROPERTY should be the option */
- }
- }
-
- gst_caps_unref (allowed_caps);
- }
-
- gst_caps_unref (template_caps);
-
- if (!gst_x264_enc_init_encoder (encoder))
- return FALSE;
-
- if (!gst_x264_enc_set_src_caps (encoder, state->caps)) {
- gst_x264_enc_close_encoder (encoder);
- return FALSE;
- }
-
- gst_x264_enc_set_latency (encoder);
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_x264_enc_finish (GstVideoEncoder * encoder)
-{
- gst_x264_enc_flush_frames (GST_X264_ENC (encoder), TRUE);
- return GST_FLOW_OK;
-}
-
-static gboolean
-gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
-{
- GstX264Enc *self = GST_X264_ENC (encoder);
- GstVideoInfo *info;
- guint num_buffers;
-
- gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
-
- if (!self->input_state)
- return FALSE;
-
- if (self->vtable == NULL)
- return FALSE;
-
- info = &self->input_state->info;
- num_buffers =
- self->vtable->x264_encoder_maximum_delayed_frames (self->x264enc) + 1;
-
- gst_query_add_allocation_pool (query, NULL, info->size, num_buffers, 0);
-
- return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
- query);
-}
-
-static void
-gst_x264_enc_add_cc (GstBuffer * buffer, x264_picture_t * pic_in)
-{
- GstVideoCaptionMeta *cc_meta;
- gpointer iter = NULL;
-
- while ((cc_meta =
- (GstVideoCaptionMeta *) gst_buffer_iterate_meta_filtered (buffer,
- &iter, GST_VIDEO_CAPTION_META_API_TYPE))) {
- guint i = pic_in->extra_sei.num_payloads;
-
- if (cc_meta->caption_type != GST_VIDEO_CAPTION_TYPE_CEA708_RAW)
- continue;
-
- pic_in->extra_sei.num_payloads += 1;
-
- if (!pic_in->extra_sei.payloads)
- pic_in->extra_sei.payloads = g_new0 (x264_sei_payload_t, 1);
- else
- pic_in->extra_sei.payloads =
- g_renew (x264_sei_payload_t, pic_in->extra_sei.payloads,
- pic_in->extra_sei.num_payloads);
-
- pic_in->extra_sei.sei_free = g_free;
-
- pic_in->extra_sei.payloads[i].payload_size = cc_meta->size + 11;
- pic_in->extra_sei.payloads[i].payload =
- g_malloc0 (pic_in->extra_sei.payloads[i].payload_size);
- pic_in->extra_sei.payloads[i].payload_type = 4; /* Registered user data */
- memcpy (pic_in->extra_sei.payloads[i].payload + 10, cc_meta->data,
- cc_meta->size);
- pic_in->extra_sei.payloads[i].payload[0] = 181; /* 8-bits itu_t_t35_country_code */
- pic_in->extra_sei.payloads[i].payload[1] = 0; /* 16-bits itu_t_t35_provider_code */
- pic_in->extra_sei.payloads[i].payload[2] = 49;
- pic_in->extra_sei.payloads[i].payload[3] = 'G'; /* 32-bits ATSC_user_identifier */
- pic_in->extra_sei.payloads[i].payload[4] = 'A';
- pic_in->extra_sei.payloads[i].payload[5] = '9';
- pic_in->extra_sei.payloads[i].payload[6] = '4';
- pic_in->extra_sei.payloads[i].payload[7] = 3; /* 8-bits ATSC1_data_user_data_type_code */
- /* 8-bits:
- * 1 bit process_em_data_flag (0)
- * 1 bit process_cc_data_flag (1)
- * 1 bit additional_data_flag (0)
- * 5-bits cc_count
- */
- pic_in->extra_sei.payloads[i].payload[8] =
- ((cc_meta->size / 3) & 0x1f) | 0x40;
- pic_in->extra_sei.payloads[i].payload[9] = 255; /* 8 bits em_data, unused */
- pic_in->extra_sei.payloads[i].payload[cc_meta->size + 10] = 255; /* 8 marker bits */
- }
-}
-
-/* chain function
- * this function does the actual processing
- */
-static GstFlowReturn
-gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
- GstVideoCodecFrame * frame)
-{
- GstX264Enc *encoder = GST_X264_ENC (video_enc);
- GstVideoInfo *info = &encoder->input_state->info;
- GstFlowReturn ret;
- x264_picture_t pic_in;
- gint i_nal, i;
- FrameData *fdata;
- gint nplanes = encoder->x264_nplanes;
-
- if (G_UNLIKELY (encoder->x264enc == NULL))
- goto not_inited;
-
- /* create x264_picture_t from the buffer */
- /* mostly taken from mplayer (file ve_x264.c) */
-
- /* set up input picture */
- memset (&pic_in, 0, sizeof (pic_in));
-
- fdata = gst_x264_enc_queue_frame (encoder, frame, info);
- if (!fdata)
- goto invalid_frame;
-
- pic_in.img.i_csp = encoder->x264param.i_csp;
- pic_in.img.i_plane = nplanes;
- for (i = 0; i < nplanes; i++) {
- pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
- pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&fdata->vframe, i);
- }
-
- pic_in.i_type = X264_TYPE_AUTO;
- pic_in.i_pts = frame->pts;
- pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number);
-
- if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
- if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_INTERLACED) == 0) {
- pic_in.i_pic_struct = PIC_STRUCT_PROGRESSIVE;
- } else if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_RFF) != 0) {
- if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
- pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM_TOP;
- } else {
- pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP_BOTTOM;
- }
- } else {
- if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
- pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM;
- } else {
- pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP;
- }
- }
- }
-
- gst_x264_enc_add_cc (frame->input_buffer, &pic_in);
-
- ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE);
-
- /* input buffer is released later on */
- return ret;
-
-/* ERRORS */
-not_inited:
- {
- GST_WARNING_OBJECT (encoder, "Got buffer before set_caps was called");
- return GST_FLOW_NOT_NEGOTIATED;
- }
-invalid_frame:
- {
- GST_ERROR_OBJECT (encoder, "Failed to map frame");
- return GST_FLOW_ERROR;
- }
-}
-
-static GstFlowReturn
-gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
- GstVideoCodecFrame * input_frame, int *i_nal, gboolean send)
-{
- GstVideoCodecFrame *frame = NULL;
- GstBuffer *out_buf = NULL;
- x264_picture_t pic_out;
- x264_nal_t *nal;
- int i_size;
- int encoder_return;
- GstFlowReturn ret = GST_FLOW_OK;
- guint8 *data;
- gboolean update_latency = FALSE;
-
- if (G_UNLIKELY (encoder->x264enc == NULL)) {
- if (input_frame)
- gst_video_codec_frame_unref (input_frame);
- return GST_FLOW_NOT_NEGOTIATED;
- }
-
- GST_OBJECT_LOCK (encoder);
- if (encoder->reconfig) {
- encoder->reconfig = FALSE;
- if (encoder->vtable->x264_encoder_reconfig (encoder->x264enc,
- &encoder->x264param) < 0)
- GST_WARNING_OBJECT (encoder, "Could not reconfigure");
- update_latency = TRUE;
- }
-
- if (pic_in && input_frame) {
- if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (input_frame)) {
- GST_INFO_OBJECT (encoder, "Forcing key frame");
- if (encoder->intra_refresh)
- encoder->vtable->x264_encoder_intra_refresh (encoder->x264enc);
- else
- pic_in->i_type = X264_TYPE_IDR;
- }
- }
- GST_OBJECT_UNLOCK (encoder);
-
- if (G_UNLIKELY (update_latency))
- gst_x264_enc_set_latency (encoder);
-
- encoder_return = encoder->vtable->x264_encoder_encode (encoder->x264enc,
- &nal, i_nal, pic_in, &pic_out);
-
- if (encoder_return < 0) {
- GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."),
- ("x264_encoder_encode return code=%d", encoder_return));
- ret = GST_FLOW_ERROR;
- /* Make sure we finish this frame */
- frame = input_frame;
- goto out;
- }
-
- /* Input frame is now queued */
- if (input_frame)
- gst_video_codec_frame_unref (input_frame);
-
- if (!*i_nal) {
- ret = GST_FLOW_OK;
- goto out;
- }
-
- i_size = encoder_return;
- data = nal[0].p_payload;
-
- frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER (encoder),
- GPOINTER_TO_INT (pic_out.opaque));
- g_assert (frame || !send);
-
- if (!send || !frame) {
- ret = GST_FLOW_OK;
- goto out;
- }
-
- out_buf = gst_buffer_new_allocate (NULL, i_size, NULL);
- gst_buffer_fill (out_buf, 0, data, i_size);
- frame->output_buffer = out_buf;
-
- GST_LOG_OBJECT (encoder,
- "output: dts %" G_GINT64_FORMAT " pts %" G_GINT64_FORMAT,
- (gint64) pic_out.i_dts, (gint64) pic_out.i_pts);
-
- /* we want to know if x264 is messing around with this */
- g_assert (frame->pts == pic_out.i_pts);
-
- frame->dts = pic_out.i_dts;
- frame->pts = pic_out.i_pts;
-
- if (pic_out.b_keyframe) {
- GST_DEBUG_OBJECT (encoder, "Output keyframe");
- GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
- }
-
-out:
- if (frame) {
- gst_x264_enc_dequeue_frame (encoder, frame);
- ret = gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (encoder), frame);
- }
-
- return ret;
-}
-
-static void
-gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send)
-{
- GstFlowReturn flow_ret;
- gint i_nal;
-
- /* first send the remaining frames */
- if (encoder->x264enc)
- do {
- flow_ret = gst_x264_enc_encode_frame (encoder, NULL, NULL, &i_nal, send);
- } while (flow_ret == GST_FLOW_OK
- && encoder->vtable->x264_encoder_delayed_frames (encoder->x264enc) > 0);
-}
-
-static void
-gst_x264_enc_reconfig (GstX264Enc * encoder)
-{
- guint bitrate;
-
- if (!encoder->vtable)
- return;
-
- bitrate =
- gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
- encoder->input_state ? &encoder->input_state->info : NULL);
- switch (encoder->pass) {
- case GST_X264_ENC_PASS_QUAL:
- encoder->x264param.rc.f_rf_constant = encoder->quantizer;
- encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_buffer_size
- = encoder->x264param.rc.i_vbv_max_bitrate
- * encoder->vbv_buf_capacity / 1000;
- break;
- case GST_X264_ENC_PASS_CBR:
- case GST_X264_ENC_PASS_PASS1:
- case GST_X264_ENC_PASS_PASS2:
- case GST_X264_ENC_PASS_PASS3:
- default:
- encoder->x264param.rc.i_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
- encoder->x264param.rc.i_vbv_buffer_size
- = encoder->x264param.rc.i_vbv_max_bitrate
- * encoder->vbv_buf_capacity / 1000;
- break;
- }
-
- encoder->reconfig = TRUE;
-}
-
-static void
-gst_x264_enc_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstX264Enc *encoder;
- GstState state;
-
- const gchar *partitions = NULL;
-
- encoder = GST_X264_ENC (object);
-
- GST_OBJECT_LOCK (encoder);
- /* state at least matters for sps, bytestream, pass,
- * and so by extension ... */
-
- state = GST_STATE (encoder);
- if ((state != GST_STATE_READY && state != GST_STATE_NULL) &&
- !(pspec->flags & GST_PARAM_MUTABLE_PLAYING))
- goto wrong_state;
-
- switch (prop_id) {
- case ARG_PASS:
- encoder->pass = g_value_get_enum (value);
- break;
- case ARG_QUANTIZER:
- encoder->quantizer = g_value_get_uint (value);
- gst_x264_enc_reconfig (encoder);
- break;
- case ARG_BITRATE:
- gst_encoder_bitrate_profile_manager_set_bitrate (encoder->bitrate_manager,
- g_value_get_uint (value));
- gst_x264_enc_reconfig (encoder);
- break;
- case ARG_VBV_BUF_CAPACITY:
- encoder->vbv_buf_capacity = g_value_get_uint (value);
- gst_x264_enc_reconfig (encoder);
- break;
- case ARG_SPEED_PRESET:
- encoder->speed_preset = g_value_get_enum (value);
- break;
- case ARG_PSY_TUNE:
- encoder->psy_tune = g_value_get_enum (value);
- break;
- case ARG_TUNE:
- encoder->tune = g_value_get_flags (value);
- break;
- case ARG_OPTION_STRING:
- g_string_assign (encoder->option_string_prop, g_value_get_string (value));
- break;
- case ARG_THREADS:
- encoder->threads = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":threads=%d",
- encoder->threads);
- break;
- case ARG_SLICED_THREADS:
- encoder->sliced_threads = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":sliced-threads=%d",
- encoder->sliced_threads);
- break;
- case ARG_SYNC_LOOKAHEAD:
- encoder->sync_lookahead = g_value_get_int (value);
- g_string_append_printf (encoder->option_string, ":sync-lookahead=%d",
- encoder->sync_lookahead);
- break;
- case ARG_MULTIPASS_CACHE_FILE:
- g_free (encoder->mp_cache_file);
- encoder->mp_cache_file = g_value_dup_string (value);
- g_string_append_printf (encoder->option_string, ":stats=%s",
- encoder->mp_cache_file);
- break;
- case ARG_BYTE_STREAM:
- encoder->byte_stream = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":annexb=%d",
- encoder->byte_stream);
- break;
- case ARG_INTRA_REFRESH:
- encoder->intra_refresh = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":intra-refresh=%d",
- encoder->intra_refresh);
- break;
- case ARG_ME:
- encoder->me = g_value_get_enum (value);
- g_string_append_printf (encoder->option_string, ":me=%s",
- x264_motion_est_names[encoder->me]);
- break;
- case ARG_SUBME:
- encoder->subme = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":subme=%d",
- encoder->subme);
- break;
- case ARG_ANALYSE:
- encoder->analyse = g_value_get_flags (value);
- partitions = gst_x264_enc_build_partitions (encoder->analyse);
- if (partitions) {
- g_string_append_printf (encoder->option_string, ":partitions=%s",
- partitions);
- g_free ((gpointer) partitions);
- }
- break;
- case ARG_DCT8x8:
- encoder->dct8x8 = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":8x8dct=%d",
- encoder->dct8x8);
- break;
- case ARG_REF:
- encoder->ref = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":ref=%d", encoder->ref);
- break;
- case ARG_BFRAMES:
- encoder->bframes = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":bframes=%d",
- encoder->bframes);
- break;
- case ARG_B_ADAPT:
- encoder->b_adapt = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":b-adapt=%d",
- encoder->b_adapt);
- break;
- case ARG_B_PYRAMID:
- encoder->b_pyramid = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":b-pyramid=%s",
- x264_b_pyramid_names[encoder->b_pyramid]);
- break;
- case ARG_WEIGHTB:
- encoder->weightb = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":weightb=%d",
- encoder->weightb);
- break;
- case ARG_SPS_ID:
- encoder->sps_id = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":sps-id=%d",
- encoder->sps_id);
- break;
- case ARG_AU_NALU:
- encoder->au_nalu = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":aud=%d",
- encoder->au_nalu);
- break;
- case ARG_TRELLIS:
- encoder->trellis = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":trellis=%d",
- encoder->trellis);
- break;
- case ARG_KEYINT_MAX:
- encoder->keyint_max = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":keyint=%d",
- encoder->keyint_max);
- break;
- case ARG_CABAC:
- encoder->cabac = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":cabac=%d",
- encoder->cabac);
- break;
- case ARG_QP_MIN:
- encoder->qp_min = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":qpmin=%d",
- encoder->qp_min);
- break;
- case ARG_QP_MAX:
- encoder->qp_max = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":qpmax=%d",
- encoder->qp_max);
- break;
- case ARG_QP_STEP:
- encoder->qp_step = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":qpstep=%d",
- encoder->qp_step);
- break;
- case ARG_IP_FACTOR:
- encoder->ip_factor = g_value_get_float (value);
- g_string_append_printf (encoder->option_string, ":ip-factor=%f",
- encoder->ip_factor);
- break;
- case ARG_PB_FACTOR:
- encoder->pb_factor = g_value_get_float (value);
- g_string_append_printf (encoder->option_string, ":pb-factor=%f",
- encoder->pb_factor);
- break;
- case ARG_RC_MB_TREE:
- encoder->mb_tree = g_value_get_boolean (value);
- g_string_append_printf (encoder->option_string, ":mbtree=%d",
- encoder->mb_tree);
- break;
- case ARG_RC_LOOKAHEAD:
- encoder->rc_lookahead = g_value_get_int (value);
- g_string_append_printf (encoder->option_string, ":rc-lookahead=%d",
- encoder->rc_lookahead);
- break;
- case ARG_NR:
- encoder->noise_reduction = g_value_get_uint (value);
- g_string_append_printf (encoder->option_string, ":nr=%d",
- encoder->noise_reduction);
- break;
- case ARG_INTERLACED:
- encoder->interlaced = g_value_get_boolean (value);
- break;
- case ARG_FRAME_PACKING:
- encoder->frame_packing = g_value_get_enum (value);
- break;
- case ARG_INSERT_VUI:
- encoder->insert_vui = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- GST_OBJECT_UNLOCK (encoder);
- return;
-
- /* ERROR */
-wrong_state:
- {
- GST_WARNING_OBJECT (encoder, "setting property in wrong state");
- GST_OBJECT_UNLOCK (encoder);
- }
-}
-
-static void
-gst_x264_enc_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstX264Enc *encoder;
-
- encoder = GST_X264_ENC (object);
-
- GST_OBJECT_LOCK (encoder);
- switch (prop_id) {
- case ARG_THREADS:
- g_value_set_uint (value, encoder->threads);
- break;
- case ARG_SLICED_THREADS:
- g_value_set_boolean (value, encoder->sliced_threads);
- break;
- case ARG_SYNC_LOOKAHEAD:
- g_value_set_int (value, encoder->sync_lookahead);
- break;
- case ARG_PASS:
- g_value_set_enum (value, encoder->pass);
- break;
- case ARG_QUANTIZER:
- g_value_set_uint (value, encoder->quantizer);
- break;
- case ARG_MULTIPASS_CACHE_FILE:
- g_value_set_string (value, encoder->mp_cache_file);
- break;
- case ARG_BYTE_STREAM:
- g_value_set_boolean (value, encoder->byte_stream);
- break;
- case ARG_BITRATE:
- g_value_set_uint (value,
- gst_encoder_bitrate_profile_manager_get_bitrate
- (encoder->bitrate_manager, NULL));
- break;
- case ARG_INTRA_REFRESH:
- g_value_set_boolean (value, encoder->intra_refresh);
- break;
- case ARG_VBV_BUF_CAPACITY:
- g_value_set_uint (value, encoder->vbv_buf_capacity);
- break;
- case ARG_ME:
- g_value_set_enum (value, encoder->me);
- break;
- case ARG_SUBME:
- g_value_set_uint (value, encoder->subme);
- break;
- case ARG_ANALYSE:
- g_value_set_flags (value, encoder->analyse);
- break;
- case ARG_DCT8x8:
- g_value_set_boolean (value, encoder->dct8x8);
- break;
- case ARG_REF:
- g_value_set_uint (value, encoder->ref);
- break;
- case ARG_BFRAMES:
- g_value_set_uint (value, encoder->bframes);
- break;
- case ARG_B_ADAPT:
- g_value_set_boolean (value, encoder->b_adapt);
- break;
- case ARG_B_PYRAMID:
- g_value_set_boolean (value, encoder->b_pyramid);
- break;
- case ARG_WEIGHTB:
- g_value_set_boolean (value, encoder->weightb);
- break;
- case ARG_SPS_ID:
- g_value_set_uint (value, encoder->sps_id);
- break;
- case ARG_AU_NALU:
- g_value_set_boolean (value, encoder->au_nalu);
- break;
- case ARG_TRELLIS:
- g_value_set_boolean (value, encoder->trellis);
- break;
- case ARG_KEYINT_MAX:
- g_value_set_uint (value, encoder->keyint_max);
- break;
- case ARG_QP_MIN:
- g_value_set_uint (value, encoder->qp_min);
- break;
- case ARG_QP_MAX:
- g_value_set_uint (value, encoder->qp_max);
- break;
- case ARG_QP_STEP:
- g_value_set_uint (value, encoder->qp_step);
- break;
- case ARG_CABAC:
- g_value_set_boolean (value, encoder->cabac);
- break;
- case ARG_IP_FACTOR:
- g_value_set_float (value, encoder->ip_factor);
- break;
- case ARG_PB_FACTOR:
- g_value_set_float (value, encoder->pb_factor);
- break;
- case ARG_RC_MB_TREE:
- g_value_set_boolean (value, encoder->mb_tree);
- break;
- case ARG_RC_LOOKAHEAD:
- g_value_set_int (value, encoder->rc_lookahead);
- break;
- case ARG_NR:
- g_value_set_uint (value, encoder->noise_reduction);
- break;
- case ARG_INTERLACED:
- g_value_set_boolean (value, encoder->interlaced);
- break;
- case ARG_SPEED_PRESET:
- g_value_set_enum (value, encoder->speed_preset);
- break;
- case ARG_PSY_TUNE:
- g_value_set_enum (value, encoder->psy_tune);
- break;
- case ARG_TUNE:
- g_value_set_flags (value, encoder->tune);
- break;
- case ARG_OPTION_STRING:
- g_value_set_string (value, encoder->option_string_prop->str);
- break;
- case ARG_FRAME_PACKING:
- g_value_set_enum (value, encoder->frame_packing);
- break;
- case ARG_INSERT_VUI:
- g_value_set_boolean (value, encoder->insert_vui);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
- GST_OBJECT_UNLOCK (encoder);
-}
-
-static gboolean
-x264_element_init (GstPlugin * plugin)
-{
- GST_DEBUG_CATEGORY_INIT (x264_enc_debug, "x264enc", 0,
- "h264 encoding element");
-
- GST_INFO ("linked against x264 build: %u", X264_BUILD);
-
- /* Initialize the static GstX264EncVTable which is overridden in load_x264()
- * if needed. We can't initialize statically because these values are not
- * constant on Windows. */
- default_vtable.module = NULL;
-#if X264_BUILD < 153
- default_vtable.x264_bit_depth = &x264_bit_depth;
-#endif
- default_vtable.x264_chroma_format = &x264_chroma_format;
- default_vtable.x264_encoder_close = x264_encoder_close;
- default_vtable.x264_encoder_delayed_frames = x264_encoder_delayed_frames;
- default_vtable.x264_encoder_encode = x264_encoder_encode;
- default_vtable.x264_encoder_headers = x264_encoder_headers;
- default_vtable.x264_encoder_intra_refresh = x264_encoder_intra_refresh;
- default_vtable.x264_encoder_maximum_delayed_frames =
- x264_encoder_maximum_delayed_frames;
- default_vtable.x264_encoder_open = x264_encoder_open;
- default_vtable.x264_encoder_reconfig = x264_encoder_reconfig;
- default_vtable.x264_levels = &x264_levels;
- default_vtable.x264_param_apply_fastfirstpass =
- x264_param_apply_fastfirstpass;
- default_vtable.x264_param_apply_profile = x264_param_apply_profile;
- default_vtable.x264_param_default_preset = x264_param_default_preset;
- default_vtable.x264_param_parse = x264_param_parse;
-
- if (!load_x264_libraries ())
- return FALSE;
-
- return gst_element_register (plugin, "x264enc",
- GST_RANK_PRIMARY, GST_TYPE_X264_ENC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (x264enc, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- x264,
- "libx264-based H264 plugins",
- plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+++ /dev/null
-/* GStreamer H264 encoder plugin
- * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
- * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
- * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_X264_ENC_H__
-#define __GST_X264_ENC_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideoencoder.h>
-#include "gstencoderbitrateprofilemanager.h"
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-/* The x264.h header says this isn't needed with MinGW, but sometimes the
- * compiler is unable to correctly do the pointer indirection for us, which
- * leads to a segfault when you try to dereference any const values provided
- * by x264.dll. See: https://bugzilla.gnome.org/show_bug.cgi?id=779249 */
-#if defined(_WIN32) && !defined(X264_API_IMPORTS)
-# define X264_API_IMPORTS
-#endif
-#include <x264.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_X264_ENC \
- (gst_x264_enc_get_type())
-#define GST_X264_ENC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_X264_ENC,GstX264Enc))
-#define GST_X264_ENC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_X264_ENC,GstX264EncClass))
-#define GST_IS_X264_ENC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_X264_ENC))
-#define GST_IS_X264_ENC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_X264_ENC))
-
-typedef struct _GstX264Enc GstX264Enc;
-typedef struct _GstX264EncClass GstX264EncClass;
-typedef struct _GstX264EncVTable GstX264EncVTable;
-
-struct _GstX264Enc
-{
- GstVideoEncoder element;
-
- /*< private >*/
- GstX264EncVTable *vtable;
- x264_t *x264enc;
- x264_param_t x264param;
- gint current_byte_stream;
-
- /* List of frame/buffer mapping structs for
- * pending frames */
- GList *pending_frames;
-
- /* properties */
- guint threads;
- gboolean sliced_threads;
- gint sync_lookahead;
- gint pass;
- guint quantizer;
- gchar *mp_cache_file;
- gboolean byte_stream;
- guint bitrate;
- gboolean intra_refresh;
- gint me;
- guint subme;
- guint analyse;
- gboolean dct8x8;
- guint ref;
- guint bframes;
- gboolean b_adapt;
- gboolean b_pyramid;
- gboolean weightb;
- guint sps_id;
- gboolean au_nalu;
- gboolean trellis;
- guint vbv_buf_capacity;
- guint keyint_max;
- gboolean cabac;
- gfloat ip_factor;
- gfloat pb_factor;
- guint qp_min;
- guint qp_max;
- guint qp_step;
- gboolean mb_tree;
- gint rc_lookahead;
- guint noise_reduction;
- gboolean interlaced;
- gint speed_preset;
- gint psy_tune;
- guint tune;
- GString *tunings;
- GString *option_string_prop; /* option-string property */
- GString *option_string; /* used by set prop */
- gint frame_packing;
- gboolean insert_vui;
-
- /* input description */
- GstVideoCodecState *input_state;
-
- /* configuration changed while playing */
- gboolean reconfig;
-
- /* from the downstream caps */
- const gchar *peer_profile;
- gboolean peer_intra_profile;
- gint peer_level_idc;
-
- /* cached values to set x264_picture_t */
- gint x264_nplanes;
-
- GstEncoderBitrateProfileManager *bitrate_manager;
-};
-
-struct _GstX264EncClass
-{
- GstVideoEncoderClass parent_class;
-};
-
-GType gst_x264_enc_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (x264enc);
-
-G_END_DECLS
-
-#endif /* __GST_X264_ENC_H__ */
+++ /dev/null
-x264_sources = [
- 'gstx264enc.c',
- 'gstencoderbitrateprofilemanager.c',
-]
-
-x264_dep = dependency('x264', required : get_option('x264'),
- fallback: ['x264', 'libx264_dep'])
-
-if x264_dep.found()
- x264_libraries = get_option('x264_libraries')
- x264_args = []
- if x264_libraries != ''
- x264_args += ['-DHAVE_X264_ADDITIONAL_LIBRARIES="@0@"'.format(x264_libraries)]
- extra_gmodule_dep = [gmodule_dep]
- else
- extra_gmodule_dep = []
- endif
-
- gstx264 = library('gstx264',
- x264_sources,
- c_args : ugly_args + x264_args,
- include_directories : [configinc],
- dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, x264_dep] + extra_gmodule_dep,
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(gstx264, install_dir : plugins_pkgconfig_install_dir)
- plugins += [gstx264]
-
- install_data(sources: 'GstX264Enc.prs', install_dir: presetdir)
-endif
+++ /dev/null
-/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option. */
-#ifdef ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions. */
-# include <libintl.h>
-
-#else
-
-/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
- chokes if dcgettext is defined as a macro. So include it now, to make
- later inclusions of <locale.h> a NOP. We don't include <libintl.h>
- as well because people using "gettext.h" will not include <libintl.h>,
- and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
- is OK. */
-#if defined(__sun)
-# include <locale.h>
-#endif
-
-/* Disabled NLS.
- The casts to 'const char *' serve the purpose of producing warnings
- for invalid uses of the value returned from these functions.
- On pre-ANSI systems without 'const', the config.h file is supposed to
- contain "#define const". */
-# define gettext(Msgid) ((const char *) (Msgid))
-# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
-# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
-# define ngettext(Msgid1, Msgid2, N) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
-
-#endif
-
-/* A pseudo function call that serves as a marker for the automated
- extraction of messages, but does not call gettext(). The run-time
- translation is done at a different place in the code.
- The argument, String, should be a literal string. Concatenated strings
- and other string expressions won't work.
- The macro's expansion is not parenthesized, so that it is suitable as
- initializer for static 'char[]' or 'const char[]' variables. */
-#define gettext_noop(String) String
-
-#endif /* _LIBGETTEXT_H */
+++ /dev/null
-/*
- * glib-compat.c
- * Functions copied from glib 2.10
- *
- * Copyright 2005 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GLIB_COMPAT_PRIVATE_H__
-#define __GLIB_COMPAT_PRIVATE_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-/* copies */
-
-/* adaptations */
-
-G_END_DECLS
-
-#endif
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
- *
- * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_I18N_PLUGIN_H__
-#define __GST_I18N_PLUGIN_H__
-
-#include <locale.h> /* some people need it and some people don't */
-#include "gettext.h" /* included with gettext distribution and copied */
-
-#ifndef GETTEXT_PACKAGE
-#error You must define GETTEXT_PACKAGE before including this header.
-#endif
-
-/* we want to use shorthand _() for translating and N_() for marking */
-#define _(String) dgettext (GETTEXT_PACKAGE, String)
-#define N_(String) gettext_noop (String)
-/* FIXME: if we need it, we can add Q_ as well, like in glib */
-
-#endif /* __GST_I18N_PLUGIN_H__ */
+++ /dev/null
-<Project
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
- xmlns="http://usefulinc.com/ns/doap#"
- xmlns:foaf="http://xmlns.com/foaf/0.1/"
- xmlns:admin="http://webns.net/mvcb/">
-
- <name>GStreamer Ugly Plug-ins</name>
- <shortname>gst-plugins-ugly</shortname>
- <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-ugly.html" />
- <created>2005-09-06</created>
- <shortdesc xml:lang="en">
-a set of good-quality plug-ins with license or patent problems.
-</shortdesc>
- <description xml:lang="en">
-GStreamer Ugly Plug-ins is a set of plug-ins that have good quality and correct
-functionality, but distributing them might pose problems. The license on either
-the plug-ins or the supporting libraries might not be how we'd like. The code
-might be widely known to present patent problems.
- </description>
- <category></category>
- <bug-database rdf:resource="https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/" />
- <screenshots></screenshots>
- <mailing-list rdf:resource="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" />
- <programming-language>C</programming-language>
- <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
- <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
-
- <repository>
- <GitRepository>
- <location rdf:resource="git://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
- <browse rdf:resource="http://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
- </GitRepository>
- </repository>
-
- <release>
- <Version>
- <revision>1.19.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2021-09-23</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.19.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2021-06-01</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.18.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2020-09-08</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.17.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2020-08-20</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.17.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2020-07-03</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.17.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2020-06-19</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.16.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2019-04-19</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.16.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.15.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2019-04-11</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.15.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2019-02-26</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.15.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2019-01-17</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.14.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2018-03-19</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.14.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.13.91</revision>
- <branch>master</branch>
- <name></name>
- <created>2018-03-13</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.13.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2018-03-03</created>
- <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.13.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2018-02-15</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.12.4</revision>
- <branch>1.12</branch>
- <name></name>
- <created>2017-12-07</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.4.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.12.3</revision>
- <branch>1.12</branch>
- <name></name>
- <created>2017-09-18</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.3.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.12.2</revision>
- <branch>1.12</branch>
- <name></name>
- <created>2017-07-14</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.12.1</revision>
- <branch>1.12</branch>
- <name></name>
- <created>2017-06-20</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.12.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2017-05-04</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.11.91</revision>
- <branch>master</branch>
- <name></name>
- <created>2017-04-27</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.11.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2017-04-07</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.11.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2017-02-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.11.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2017-01-12</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.10.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-11-01</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.10.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.9.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-09-30</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.9.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-09-01</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.9.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-06-06</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.8.0</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-03-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.8.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.7.91</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-03-15</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.7.90</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-03-01</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.7.2</revision>
- <branch>master</branch>
- <name></name>
- <created>2016-02-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.7.1</revision>
- <branch>master</branch>
- <name></name>
- <created>2015-12-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.6.2</revision>
- <branch>1.6</branch>
- <name></name>
- <created>2015-12-14</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.6.1</revision>
- <branch>1.6</branch>
- <name></name>
- <created>2015-10-30</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.6.0</revision>
- <branch>1.6</branch>
- <name></name>
- <created>2015-09-25</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.5.91</revision>
- <branch>1.5</branch>
- <name></name>
- <created>2015-09-18</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.5.90</revision>
- <branch>1.5</branch>
- <name></name>
- <created>2015-08-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.5.2</revision>
- <branch>1.5</branch>
- <name></name>
- <created>2015-06-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.5.1</revision>
- <branch>1.5</branch>
- <name></name>
- <created>2015-06-07</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.4.0</revision>
- <branch>1.4</branch>
- <name></name>
- <created>2014-07-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.4.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.3.91</revision>
- <branch>1.3</branch>
- <name></name>
- <created>2014-07-11</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.3.90</revision>
- <branch>1.3</branch>
- <name></name>
- <created>2014-06-28</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.3.3</revision>
- <branch>1.3</branch>
- <name></name>
- <created>2014-06-22</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.3.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.3.2</revision>
- <branch>1.3</branch>
- <name></name>
- <created>2014-05-21</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.3.1</revision>
- <branch>1.3</branch>
- <name></name>
- <created>2014-05-03</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.2.0</revision>
- <branch>1.2</branch>
- <name></name>
- <created>2013-09-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.2.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.1.90</revision>
- <branch>1.1</branch>
- <name></name>
- <created>2013-09-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.90.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.1.4</revision>
- <branch>1.1</branch>
- <name></name>
- <created>2013-08-28</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.4.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.1.3</revision>
- <branch>1.1</branch>
- <name></name>
- <created>2013-07-29</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.3.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.1.2</revision>
- <branch>1.1</branch>
- <name></name>
- <created>2013-07-11</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.1.1</revision>
- <branch>1.1</branch>
- <name></name>
- <created>2013-06-05</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.0.2</revision>
- <branch>1.0</branch>
- <name></name>
- <created>2012-10-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.2.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.0.1</revision>
- <branch>1.0</branch>
- <name></name>
- <created>2012-10-07</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.1.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>1.0.0</revision>
- <branch>1.0</branch>
- <name></name>
- <created>2012-09-24</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.0.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.99</revision>
- <branch>0.11</branch>
- <name>Stole Many a Mans Soul and Faith</name>
- <created>2012-09-17</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.99.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.94</revision>
- <branch>0.11</branch>
- <name>Rag Hummin'</name>
- <created>2012-09-14</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.94.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.93</revision>
- <branch>0.11</branch>
- <name>Rag Doll Physics</name>
- <created>2012-08-08</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.93.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.92</revision>
- <branch>0.11</branch>
- <name>Hey You</name>
- <created>2012-06-07</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.92.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.91</revision>
- <branch>0.11</branch>
- <name>I’ll grind his bones to make my bread!</name>
- <created>2012-05-13</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.91.tar.xz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.90</revision>
- <branch>0.11</branch>
- <name>Is all that we see or seem but a dream within a dream?</name>
- <created>2012-04-12</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.2</revision>
- <branch>0.11</branch>
- <name>Savior from Anger</name>
- <created>2012-03-22</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.11.1</revision>
- <branch>0.11</branch>
- <name>Moonlapse Vertigo</name>
- <created>2012-02-16</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.18</revision>
- <branch>0.10</branch>
- <name>Extra Life</name>
- <created>2011-05-10</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.17</revision>
- <branch>0.10</branch>
- <name>Raised by Wolves</name>
- <created>2011-01-21</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.16</revision>
- <branch>0.10</branch>
- <name>Because He Knows the Time is Short</name>
- <created>2010-09-02</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.15</revision>
- <branch>0.10</branch>
- <name>Englishman in a Baseball Cap</name>
- <created>2010-05-30</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.14</revision>
- <branch>0.10</branch>
- <name>Run Rabbit</name>
- <created>2010-03-06</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.13</revision>
- <branch>0.10</branch>
- <name>Appointed Point</name>
- <created>2009-10-21</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.12</revision>
- <branch>0.10</branch>
- <name>Moving Along The Highway</name>
- <created>2009-06-18</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.11</revision>
- <branch>0.10</branch>
- <name>Their swords and their knives</name>
- <created>2009-03-20</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.10</revision>
- <branch>0.10</branch>
- <name>Under the House</name>
- <created>2008-11-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.9</revision>
- <branch>0.10</branch>
- <name>Back The Way It Was</name>
- <created>2008-08-26</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.8</revision>
- <branch>0.10</branch>
- <name>And yet</name>
- <created>2008-05-21</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.7</revision>
- <branch>0.10</branch>
- <name>I Cheated Time</name>
- <created>2008-01-20</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.6</revision>
- <branch>0.10</branch>
- <name>The Sacrifice</name>
- <created>2007-06-19</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.5</revision>
- <branch>0.10</branch>
- <name>She said</name>
- <created>2006-12-13</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.4</revision>
- <branch>0.10</branch>
- <name>Metal Molly</name>
- <created>2006-08-14</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.3</revision>
- <branch>0.10</branch>
- <name>Late Plane</name>
- <created>2006-03-31</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.2</revision>
- <branch>0.10</branch>
- <name>Season to Taste</name>
- <created>2006-02-20</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.1</revision>
- <branch>0.10</branch>
- <name>Peng</name>
- <created>2006-01-13</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.gz" />
- </Version>
- </release>
-
- <release>
- <Version>
- <revision>0.10.0</revision>
- <branch>0.10</branch>
- <name>Brie</name>
- <created>2005-12-05</created>
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.bz2" />
- <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.gz" />
- </Version>
- </release>
-
- <maintainer>
- <foaf:Person>
- <foaf:name>Wim Taymans</foaf:name>
- <foaf:mbox_sha1sum>0d93fde052812d51a05fd86de9bdbf674423daa2</foaf:mbox_sha1sum>
- </foaf:Person>
- </maintainer>
-
-</Project>
+++ /dev/null
-ASF Demuxer Plugin
-==================
-
-Overview
---------
-
-This plugin is a demuxer for Microsoft's ASF Advanced Streaming Format
-or ASF [1]. This demuxer only supports ASF v1.0 since the vast
-majority of existing ASF files use that version. The specification
-has been derived from a third party source [2] without reference to
-the original.
-
-Design
-------
-
-The ASF format can carry any combination of audio, video or
-'ASF_Command_Media' streams. For simplicity it is assumed that each
-file can carry up to 16 audio streams and 16 video streams. These are
-implemented as dynamic pads and appear as appropriate once the file
-headers have been parsed.
-
- (-------------------------)
- ! asfdemux !
- ! (video/raw0)---
- ! (video/raw1)---
- ! (video/raw...
- --- src !
- ! (audio/raw0)---
- ! (audio/raw1)---
- ! (audio/raw...
- ! !
- (-------------------------)
-
-
-Known stream fourccs are:
-
-Type Tags MIME type
-------------------------------------------
-H263 H263 I263 video/x-h263
-MJPEG MJPG image/jpeg
-MPEG4 DIVX divx DX50 video/mpeg
- XVID xvid mp4s
- MP4S M4S2 m4s2
- 0x04000000
-MSMPEG4V1 MPG4 video/mpeg
-MSMPEG4V2 MP42 video/mpeg
-MSMPEG4V3 MP43 DIV3 video/mpeg
-WMV1 WMV1 video/x-wmv, wmvversion = (int) 1
-WMV2 WMV2 video/x-wmv, wmvversion = (int) 2
-WMV3 WMV3 video/x-wmv, wmvversion = (int) 3
-WMA1 WMA1 audio/x-wma, wmaversion = (int) 1
-WMA2 WMA2 audio/x-wma, wmaversion = (int) 2
- audio/x-wma, wmaversion = (int) 3
-
-These video stream headers is very similar to that used in the AVI
-format as are the audio stream headers. In addition the content types
-are basically the same also so, for compatibility with existing
-plugins the src pads are set up as video/x-msvideo. This enables
-compatibility with the ffmpeg plugin.
-
-The demuxing process begins with the loop function gst_asf_demux_loop
-and parses the file in a recursive tree as follows:
-
- gst_asf_demux_loop()
- +-> gst_asf_demux_process_object() <----
- +-> gst_asf_demux_process_stream() \
- |-> gst_asf_demux_process_file() |
- |-> gst_asf_demux_process_header() --+
- |-> gst_asf_demux_process_data()
- +-> gst_asf_demux_process_segment()
- +-> gst_asf_demux_process_chunk()
-
-Todo
-----
-
-- Support for ASF v2.0
-- Support for command media streams
-
-
-
-References
-----------
-
-[1] Microsoft. ASF Specification - Windows Media Technologies.
-http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx (v01.20.01e, September 2003)
-
-[2] divx at euro.ru. ASF format version 1.0,
-reconstruction. http://avifile.sourceforge.net/asf-1.0.htm
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-
-#include "asfheaders.h"
-
-const ASFGuidHash asf_payload_ext_guids[] = {
- {ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
- {0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
- },
- {ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT, "ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT",
- {0xD590DC20, 0x436C07BC, 0xBBF3f79C, 0xDCA4F1FB}},
- {ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
- "ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO",
- {0x1b1ee554, 0x4bc8f9ea, 0x6b371a82, 0xb8c4e474}},
- {ASF_PAYLOAD_EXTENSION_TIMING, "ASF_PAYLOAD_EXTENSION_TIMING",
- {0XFD3CC02A, 0X4CFA06DB, 0X12721C80, 0XE44587D3}},
- {ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
- {0, 0, 0, 0}
- }
-};
-
-const ASFGuidHash asf_correction_guids[] = {
- {ASF_CORRECTION_ON, "ASF_CORRECTION_ON",
- {0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
- },
- {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
- {0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F}
- },
- /* CHECKME: where does this 49F1A440... GUID come from? (tpm) */
- {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
- {0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
- },
- {ASF_CORRECTION_UNDEFINED, "ASF_CORRECTION_UNDEFINED",
- {0, 0, 0, 0}
- }
-};
-
-const ASFGuidHash asf_stream_guids[] = {
- {ASF_STREAM_VIDEO, "ASF_STREAM_VIDEO",
- {0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
- },
- {ASF_STREAM_AUDIO, "ASF_STREAM_AUDIO",
- {0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
- },
- {ASF_STREAM_EXT_EMBED_HEADER, "ASF_STREAM_EXT_EMBED_HEADER",
- {0X3AFB65E2, 0X40F247EF, 0XA9702CAC, 0X43D3710D}},
- {ASF_STREAM_UNDEFINED, "ASF_STREAM_UNDEFINED",
- {0, 0, 0, 0}
- }
-};
-
-const ASFGuidHash asf_ext_stream_guids[] = {
- {ASF_EXT_STREAM_AUDIO, "ASF_EXT_STREAM_AUDIO",
- {0X31178C9D, 0X452803E1, 0XF93D82B5, 0X03F522DB}
- },
- {ASF_EXT_STREAM_UNDEFINED, "ASF_EXT_STREAM_UNDEFINED",
- {0, 0, 0, 0}
- }
-};
-
-const ASFGuidHash asf_object_guids[] = {
- {ASF_OBJ_STREAM, "ASF_OBJ_STREAM",
- {0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
- },
- {ASF_OBJ_DATA, "ASF_OBJ_DATA",
- {0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
- },
- {ASF_OBJ_FILE, "ASF_OBJ_FILE",
- {0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
- },
- {ASF_OBJ_HEADER, "ASF_OBJ_HEADER",
- {0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
- },
- {ASF_OBJ_CONCEAL_NONE, "ASF_OBJ_CONCEAL_NONE",
- {0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
- },
- {ASF_OBJ_COMMENT, "ASF_OBJ_COMMENT",
- {0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
- },
- {ASF_OBJ_CODEC_COMMENT, "ASF_OBJ_CODEC_COMMENT",
- {0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
- },
- {ASF_OBJ_CODEC_COMMENT1, "ASF_OBJ_CODEC_COMMENT1",
- {0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
- },
- {ASF_OBJ_SIMPLE_INDEX, "ASF_OBJ_SIMPLE_INDEX",
- {0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
- },
- {ASF_OBJ_INDEX, "ASF_OBJ_INDEX",
- {0xd6e229d3, 0x11d135da, 0xa0003490, 0xbe4903c9}
- },
- {ASF_OBJ_HEAD1, "ASF_OBJ_HEAD1",
- {0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
- },
- {ASF_OBJ_HEAD2, "ASF_OBJ_HEAD2",
- {0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
- },
- {ASF_OBJ_PADDING, "ASF_OBJ_PADDING",
- {0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
- },
- {ASF_OBJ_BITRATE_PROPS, "ASF_OBJ_BITRATE_PROPS",
- {0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
- },
- {ASF_OBJ_EXT_CONTENT_DESC, "ASF_OBJ_EXT_CONTENT_DESC",
- {0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
- },
- {ASF_OBJ_BITRATE_MUTEX, "ASF_OBJ_BITRATE_MUTEX",
- {0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
- },
- {ASF_OBJ_LANGUAGE_LIST, "ASF_OBJ_LANGUAGE_LIST",
- {0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
- },
- {ASF_OBJ_METADATA_OBJECT, "ASF_OBJ_METADATA_OBJECT",
- {0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
- },
- {ASF_OBJ_EXTENDED_STREAM_PROPS, "ASF_OBJ_EXTENDED_STREAM_PROPS",
- {0x14e6a5cb, 0x4332c672, 0x69a99983, 0x5a5b0652}
- },
- {ASF_OBJ_COMPATIBILITY, "ASF_OBJ_COMPATIBILITY",
- {0x26f18b5d, 0x47ec4584, 0x650e5f9f, 0xc952041f}
- },
- {ASF_OBJ_INDEX_PLACEHOLDER, "ASF_OBJ_INDEX_PLACEHOLDER",
- {0xd9aade20, 0x4f9c7c17, 0x558528bc, 0xa2e298dd}
- },
- {ASF_OBJ_INDEX_PARAMETERS, "ASF_OBJ_INDEX_PARAMETERS",
- {0xd6e229df, 0x11d135da, 0xa0003490, 0xbe4903c9}
- },
- {ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION, "ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION",
- {0xa08649cf, 0x46704775, 0x356e168a, 0xcd667535}
- },
- {ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
- {0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
- },
- {ASF_OBJ_CONTENT_ENCRYPTION, "ASF_OBJ_CONTENT_ENCRYPTION",
- {0x2211b3fb, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
- },
- {ASF_OBJ_EXT_CONTENT_ENCRYPTION, "ASF_OBJ_EXT_CONTENT_ENCRYPTION",
- {0x298ae614, 0x4c172622, 0xe0da35b9, 0x9c28e97e}
- },
- {ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, "ASF_OBJ_DIGITAL_SIGNATURE_OBJECT",
- {0x2211b3fc, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
- },
- {ASF_OBJ_SCRIPT_COMMAND, "ASF_OBJ_SCRIPT_COMMAND",
- {0x1efb1a30, 0x11d00b62, 0xa0009ba3, 0xf64803c9}
- },
- {ASF_OBJ_MARKER, "ASF_OBJ_MARKER",
- {0xf487cd01, 0x11cfa951, 0xc000e68e, 0x6553200c}
- },
- /* This guid is definitely used for encryption (mentioned in MS smooth
- * streaming docs) in new PlayReady (c) (tm) (wtf) system, but I haven't
- * found a proper name for it.
- * (Edward Jan 11 2011).*/
- {ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT, "ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT",
- {0x9a04f079, 0x42869840, 0x5be692ab, 0x955f88e0}
- },
- {ASF_OBJ_METADATA_LIBRARY_OBJECT, "ASF_OBJ_METADATA_LIBRARY_OBJECT",
- {0x44231c94, 0x49d19498, 0x131d41a1, 0x5470454e}
- },
- {ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
- {0, 0, 0, 0}
- }
-};
-
-guint32
-gst_asf_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
-{
- gint i;
-
- for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
- if (guids[i].guid.v1 == guid->v1 &&
- guids[i].guid.v2 == guid->v2 &&
- guids[i].guid.v3 == guid->v3 && guids[i].guid.v4 == guid->v4) {
- return guids[i].obj_id;
- }
- }
-
- /* The base case if none is found */
- return ASF_OBJ_UNDEFINED;
-}
-
-const gchar *
-gst_asf_get_guid_nick (const ASFGuidHash * guids, guint32 obj_id)
-{
- gint i;
-
- for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
- if (guids[i].obj_id == obj_id) {
- return guids[i].obj_id_str;
- }
- }
-
- /* The base case if none is found */
- return "ASF_OBJ_UNDEFINED";
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __ASFHEADERS_H__
-#define __ASFHEADERS_H__
-
-G_BEGIN_DECLS
-
-typedef struct {
- guint32 v1;
- guint32 v2;
- guint32 v3;
- guint32 v4;
-} ASFGuid;
-
-
-
-typedef struct {
- guint8 obj_id;
- const gchar *obj_id_str;
- ASFGuid guid;
-} ASFGuidHash;
-
-typedef enum {
- ASF_OBJ_UNDEFINED = 0,
- ASF_OBJ_STREAM,
- ASF_OBJ_DATA,
- ASF_OBJ_FILE,
- ASF_OBJ_HEADER,
- ASF_OBJ_CONCEAL_NONE,
- ASF_OBJ_COMMENT,
- ASF_OBJ_CODEC_COMMENT,
- ASF_OBJ_CODEC_COMMENT1,
- ASF_OBJ_SIMPLE_INDEX,
- ASF_OBJ_INDEX,
- ASF_OBJ_HEAD1,
- ASF_OBJ_HEAD2,
- ASF_OBJ_PADDING,
- ASF_OBJ_BITRATE_PROPS,
- ASF_OBJ_EXT_CONTENT_DESC,
- ASF_OBJ_BITRATE_MUTEX,
- ASF_OBJ_LANGUAGE_LIST,
- ASF_OBJ_METADATA_OBJECT,
- ASF_OBJ_EXTENDED_STREAM_PROPS,
- ASF_OBJ_COMPATIBILITY,
- ASF_OBJ_INDEX_PLACEHOLDER,
- ASF_OBJ_INDEX_PARAMETERS,
- ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
- ASF_OBJ_STREAM_PRIORITIZATION,
- ASF_OBJ_CONTENT_ENCRYPTION,
- ASF_OBJ_EXT_CONTENT_ENCRYPTION,
- ASF_OBJ_DIGITAL_SIGNATURE_OBJECT,
- ASF_OBJ_SCRIPT_COMMAND,
- ASF_OBJ_MARKER,
- ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT,
- ASF_OBJ_METADATA_LIBRARY_OBJECT,
-} AsfObjectID;
-
-typedef enum {
- ASF_STREAM_UNDEFINED = 0,
- ASF_STREAM_VIDEO,
- ASF_STREAM_AUDIO,
- ASF_STREAM_EXT_EMBED_HEADER
-} AsfStreamType;
-
-typedef enum {
- ASF_EXT_STREAM_UNDEFINED = 0,
- ASF_EXT_STREAM_AUDIO
-} AsfExtStreamType;
-
-typedef enum {
- ASF_CORRECTION_UNDEFINED = 0,
- ASF_CORRECTION_ON,
- ASF_CORRECTION_OFF
-} AsfCorrectionType;
-
-typedef enum {
- ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
- ASF_PAYLOAD_EXTENSION_DURATION,
- ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT,
- ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
- ASF_PAYLOAD_EXTENSION_TIMING
-} AsfPayloadExtensionID;
-
-extern const ASFGuidHash asf_payload_ext_guids[];
-
-extern const ASFGuidHash asf_correction_guids[];
-
-extern const ASFGuidHash asf_stream_guids[];
-
-extern const ASFGuidHash asf_ext_stream_guids[];
-
-extern const ASFGuidHash asf_object_guids[];
-
-/* GUID utilities */
-guint32 gst_asf_identify_guid (const ASFGuidHash * guids,
- ASFGuid * guid);
-
-const gchar *gst_asf_get_guid_nick (const ASFGuidHash * guids,
- guint32 obj_id);
-
-struct _asf_stream_audio {
- guint16 codec_tag;
- guint16 channels;
- guint32 sample_rate;
- guint32 byte_rate;
- guint16 block_align;
- guint16 word_size;
- guint16 size;
-};
-
-typedef struct _asf_stream_audio asf_stream_audio;
-
-struct _asf_stream_video {
- guint32 width;
- guint32 height;
- guint8 unknown;
- guint16 size;
-};
-
-typedef struct _asf_stream_video asf_stream_video;
-
-struct _asf_stream_video_format {
- guint32 size;
- guint32 width;
- guint32 height;
- guint16 planes;
- guint16 depth;
- guint32 tag;
- guint32 image_size;
- guint32 xpels_meter;
- guint32 ypels_meter;
- guint32 num_colors;
- guint32 imp_colors;
-};
-
-typedef struct _asf_stream_video_format asf_stream_video_format;
-
-G_END_DECLS
-
-#endif /* __ASFHEADERS_H__ */
+++ /dev/null
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* FIXME:
- * file:///home/tpm/samples/video/asf//336370-regis-velo862.wmv
- * file:///home/tpm/samples/video/asf//336370-eichhoer.wmv
- * throw errors (not always necessarily) in this code path
- * (looks like they carry broken payloads/packets though) */
-
-#include "asfpacket.h"
-
-#include <gst/gstutils.h>
-#include <gst/gstinfo.h>
-#include <string.h>
-
-#define GST_ASF_PAYLOAD_KF_COMPLETE(stream, payload) (stream->is_video && payload->keyframe && payload->buf_filled >= payload->mo_size)
-
-/* we are unlikely to deal with lengths > 2GB here any time soon, so just
- * return a signed int and use that for error reporting */
-static inline gint
-asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset,
- const guint8 ** p_data, guint * p_size)
-{
- static const guint lens[4] = { 0, 1, 2, 4 };
- guint len, val;
-
- len = lens[(lentype_flags >> lentype_bit_offset) & 0x03];
-
- /* will make caller bail out with a short read if there's not enough data */
- if (G_UNLIKELY (*p_size < len)) {
- GST_WARNING ("need %u bytes, but only %u bytes available", len, *p_size);
- return -1;
- }
-
- switch (len) {
- case 0:
- val = 0;
- break;
- case 1:
- val = GST_READ_UINT8 (*p_data);
- break;
- case 2:
- val = GST_READ_UINT16_LE (*p_data);
- break;
- case 4:
- val = GST_READ_UINT32_LE (*p_data);
- break;
- default:
- val = 0;
- g_assert_not_reached ();
- }
-
- *p_data += len;
- *p_size -= len;
-
- return (gint) val;
-}
-
-static GstBuffer *
-asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
- guint * p_size, guint payload_len)
-{
- guint off;
-
- g_assert (payload_len <= *p_size);
-
- off = (guint) (*p_data - packet->bdata);
- g_assert (off < gst_buffer_get_size (packet->buf));
-
- *p_data += payload_len;
- *p_size -= payload_len;
-
- return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off,
- payload_len);
-}
-
-static AsfPayload *
-asf_payload_search_payloads_queue (AsfPayload * payload, GArray * payload_list)
-{
- AsfPayload *ret = NULL;
- gint idx;
- for (idx = payload_list->len - 1; idx >= 0; idx--) {
- ret = &g_array_index (payload_list, AsfPayload, idx);
-
- if (G_UNLIKELY (ret->mo_size == payload->mo_size &&
- ret->mo_number == payload->mo_number)) {
- return ret;
- }
- }
- return NULL;
-}
-
-static AsfPayload *
-asf_payload_find_previous_fragment (GstASFDemux * demux, AsfPayload * payload,
- AsfStream * stream)
-{
- AsfPayload *ret = NULL;
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-
- /* Search in queued payloads list */
- ret = asf_payload_search_payloads_queue (payload, stream->payloads);
- if (ret) {
- GST_DEBUG
- ("previous fragments found in payloads queue for reverse playback : object ID %d",
- ret->mo_number);
- return ret;
- }
-
- /* Search in payloads 'to be queued' list */
- ret = asf_payload_search_payloads_queue (payload, stream->payloads_rev);
- if (ret) {
- GST_DEBUG
- ("previous fragments found in temp payload queue for reverse playback : object ID %d",
- ret->mo_number);
- return ret;
- }
- } else {
- if (G_UNLIKELY (stream->payloads->len == 0)) {
- GST_DEBUG ("No previous fragments to merge with for stream %u",
- stream->id);
- return NULL;
- }
-
- ret =
- &g_array_index (stream->payloads, AsfPayload,
- stream->payloads->len - 1);
-
- if (G_UNLIKELY (ret->mo_size != payload->mo_size ||
- ret->mo_number != payload->mo_number || ret->mo_offset != 0)) {
- if (payload->mo_size != 0) {
- GST_WARNING ("Previous fragment does not match continued fragment");
- return NULL;
- } else {
- /* Warn about this case, but accept it anyway: files in the wild sometimes
- * have continued packets where the subsequent fragments say that they're
- * zero-sized. */
- GST_WARNING ("Previous fragment found, but current fragment has "
- "zero size, accepting anyway");
- }
- }
- }
-
-#if 0
- if (this_fragment->mo_offset + this_payload_len > first_fragment->mo_size) {
- GST_WARNING ("Merged fragments would be bigger than the media object");
- return FALSE;
- }
-#endif
-
- return ret;
-}
-
-/* TODO: if we have another payload already queued for this stream and that
- * payload doesn't have a duration, maybe we can calculate a duration for it
- * (if the previous timestamp is smaller etc. etc.) */
-static void
-gst_asf_payload_queue_for_stream_forward (GstASFDemux * demux,
- AsfPayload * payload, AsfStream * stream)
-{
- GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
- stream->id, GST_TIME_ARGS (payload->ts));
-
- /* make timestamps start from 0; first_ts will be determined during activation (once we have enough data),
- which will also update ts of all packets queued before we knew first_ts; */
- if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (demux->first_ts)
- && GST_CLOCK_TIME_IS_VALID (payload->ts))) {
- if (payload->ts > demux->first_ts)
- payload->ts -= demux->first_ts;
- else
- payload->ts = 0;
- }
-
- /* remove any incomplete payloads that will never be completed */
- while (stream->payloads->len > 0) {
- AsfPayload *prev;
- guint idx_last;
-
- idx_last = stream->payloads->len - 1;
- prev = &g_array_index (stream->payloads, AsfPayload, idx_last);
-
- if (G_UNLIKELY (gst_asf_payload_is_complete (prev)))
- break;
-
- GST_DEBUG_OBJECT (demux, "Dropping incomplete fragmented media object "
- "queued for stream %u", stream->id);
-
- gst_buffer_replace (&prev->buf, NULL);
- g_array_remove_index (stream->payloads, idx_last);
-
- /* there's data missing, so there's a discontinuity now */
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
- }
-
- /* If we're about to queue a key frame that is before the segment start, we
- * can ditch any previously queued payloads (which would also be before the
- * segment start). This makes sure the decoder doesn't decode more than
- * absolutely necessary after a seek (we don't push out payloads that are
- * before the segment start until we have at least one that falls within the
- * segment) */
- if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
- payload->ts < demux->segment.start && payload->keyframe)) {
- GST_DEBUG_OBJECT (demux, "Queueing keyframe before segment start, removing"
- " %u previously-queued payloads, which would be out of segment too and"
- " hence don't have to be decoded", stream->payloads->len);
- while (stream->payloads->len > 0) {
- AsfPayload *last;
- guint idx_last;
-
- idx_last = stream->payloads->len - 1;
- last = &g_array_index (stream->payloads, AsfPayload, idx_last);
- gst_buffer_replace (&last->buf, NULL);
- g_array_remove_index (stream->payloads, idx_last);
- }
-
- /* Mark discontinuity (should be done via stream->discont anyway though) */
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
- }
-
- g_array_append_vals (stream->payloads, payload, 1);
-}
-
-static void
-gst_asf_payload_queue_for_stream_reverse (GstASFDemux * demux,
- AsfPayload * payload, AsfStream * stream)
-{
- GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
- stream->id, GST_TIME_ARGS (payload->ts));
-
- if (demux->multiple_payloads) {
- /* store the payload in temporary buffer, until we parse all payloads in this packet */
- g_array_append_vals (stream->payloads_rev, payload, 1);
- } else {
- if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts))) {
- g_array_append_vals (stream->payloads, payload, 1);
- if (GST_ASF_PAYLOAD_KF_COMPLETE (stream, payload)) {
- stream->kf_pos = stream->payloads->len - 1;
- }
- } else {
- gst_buffer_unref (payload->buf);
- }
- }
-}
-
-
-static void
-gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload,
- AsfStream * stream)
-{
- GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
- stream->id, GST_TIME_ARGS (payload->ts));
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- gst_asf_payload_queue_for_stream_reverse (demux, payload, stream);
- } else {
- gst_asf_payload_queue_for_stream_forward (demux, payload, stream);
- }
-
-}
-
-static void
-asf_payload_parse_replicated_data_extensions (AsfStream * stream,
- AsfPayload * payload)
-{
- AsfPayloadExtension *ext;
- guint off;
- guint16 ext_len;
-
- if (!stream->ext_props.valid || stream->ext_props.payload_extensions == NULL)
- return;
-
- off = 8;
- for (ext = stream->ext_props.payload_extensions; ext->len > 0; ++ext) {
- ext_len = ext->len;
- if (ext_len == 0xFFFF) { /* extension length is determined by first two bytes in replicated data */
- ext_len = GST_READ_UINT16_LE (payload->rep_data + off);
- off += 2;
- }
- if (G_UNLIKELY (off + ext_len > payload->rep_data_len)) {
- GST_WARNING ("not enough replicated data for defined extensions");
- return;
- }
- switch (ext->id) {
- case ASF_PAYLOAD_EXTENSION_DURATION:
- if (G_LIKELY (ext_len == 2)) {
- guint16 tdur = GST_READ_UINT16_LE (payload->rep_data + off);
- /* packet durations of 1ms are mostly invalid */
- if (tdur != 1)
- payload->duration = tdur * GST_MSECOND;
- } else {
- GST_WARNING ("unexpected DURATION extensions len %u", ext_len);
- }
- break;
- case ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT:
- if (G_LIKELY (ext_len == 1)) {
- guint8 data = payload->rep_data[off];
-
- payload->interlaced = data & 0x1;
- payload->rff = data & 0x8;
- payload->tff = (data & 0x2) || !(data & 0x4);
- GST_DEBUG ("SYSTEM_CONTENT: interlaced:%d, rff:%d, tff:%d",
- payload->interlaced, payload->rff, payload->tff);
- } else {
- GST_WARNING ("unexpected SYSTEM_CONTE extensions len %u", ext_len);
- }
- break;
- case ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO:
- if (G_LIKELY (ext_len == 2)) {
- payload->par_x = payload->rep_data[off];
- payload->par_y = payload->rep_data[off + 1];
- GST_DEBUG ("PAR %d / %d", payload->par_x, payload->par_y);
- } else {
- GST_WARNING ("unexpected SYSTEM_PIXEL_ASPECT_RATIO extensions len %u",
- ext_len);
- }
- break;
- case ASF_PAYLOAD_EXTENSION_TIMING:
- {
- /* dvr-ms timing - this will override packet timestamp */
- guint64 time = GST_READ_UINT64_LE (payload->rep_data + off + 8);
- if (time != 0xFFFFFFFFFFFFFFFF)
- payload->ts = time * 100;
- else
- payload->ts = GST_CLOCK_TIME_NONE;
- }
- break;
- default:
- GST_LOG ("UNKNOWN PAYLOAD EXTENSION!");
- break;
- }
- off += ext_len;
- }
-}
-
-static gboolean
-gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
- gint lentype, const guint8 ** p_data, guint * p_size)
-{
- AsfPayload payload = { 0, };
- AsfStream *stream;
- gboolean is_compressed;
- guint payload_len;
- guint stream_num;
-
- if (G_UNLIKELY (*p_size < 1)) {
- GST_WARNING_OBJECT (demux, "Short packet!");
- return FALSE;
- }
-
- stream_num = GST_READ_UINT8 (*p_data) & 0x7f;
- payload.keyframe = ((GST_READ_UINT8 (*p_data) & 0x80) != 0);
-
- *p_data += 1;
- *p_size -= 1;
-
- payload.ts = GST_CLOCK_TIME_NONE;
- payload.duration = GST_CLOCK_TIME_NONE;
- payload.par_x = 0;
- payload.par_y = 0;
- payload.interlaced = FALSE;
- payload.tff = FALSE;
- payload.rff = FALSE;
-
- payload.mo_number =
- asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
- payload.mo_offset =
- asf_packet_read_varlen_int (packet->prop_flags, 2, p_data, p_size);
- payload.rep_data_len =
- asf_packet_read_varlen_int (packet->prop_flags, 0, p_data, p_size);
-
- is_compressed = (payload.rep_data_len == 1);
-
- GST_LOG_OBJECT (demux, "payload for stream %u", stream_num);
- GST_LOG_OBJECT (demux, "keyframe : %s", (payload.keyframe) ? "yes" : "no");
- GST_LOG_OBJECT (demux, "compressed : %s", (is_compressed) ? "yes" : "no");
-
- if (G_UNLIKELY (*p_size < payload.rep_data_len)) {
- GST_WARNING_OBJECT (demux, "Short packet! rep_data_len=%u, size=%u",
- payload.rep_data_len, *p_size);
- return FALSE;
- }
-
- memcpy (payload.rep_data, *p_data,
- MIN (sizeof (payload.rep_data), payload.rep_data_len));
-
- *p_data += payload.rep_data_len;
- *p_size -= payload.rep_data_len;
-
- if (G_UNLIKELY (*p_size == 0)) {
- GST_WARNING_OBJECT (demux, "payload without data!?");
- return FALSE;
- }
-
- /* we use -1 as lentype for a single payload that's the size of the packet */
- if (G_UNLIKELY ((lentype >= 0 && lentype <= 3))) {
- payload_len = asf_packet_read_varlen_int (lentype, 0, p_data, p_size);
- if (*p_size < payload_len) {
- GST_WARNING_OBJECT (demux, "Short packet! payload_len=%u, size=%u",
- payload_len, *p_size);
- return FALSE;
- }
- } else {
- payload_len = *p_size;
- }
-
- GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
-
- stream = gst_asf_demux_get_stream (demux, stream_num);
-
- if (G_UNLIKELY (stream == NULL)) {
- if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
- GST_WARNING_OBJECT (demux, "Payload for unknown stream %u, skipping",
- stream_num);
- }
- if (*p_size < payload_len) {
- *p_data += *p_size;
- *p_size = 0;
- } else {
- *p_data += payload_len;
- *p_size -= payload_len;
- }
- return TRUE;
- }
-
- if (!stream->is_video)
- stream->kf_pos = 0;
-
- if (G_UNLIKELY (!is_compressed)) {
- GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len);
-
- if (payload.rep_data_len >= 8) {
- payload.mo_size = GST_READ_UINT32_LE (payload.rep_data);
- payload.ts = GST_READ_UINT32_LE (payload.rep_data + 4) * GST_MSECOND;
- if (G_UNLIKELY (payload.ts < demux->preroll))
- payload.ts = 0;
- else
- payload.ts -= demux->preroll;
- asf_payload_parse_replicated_data_extensions (stream, &payload);
-
- GST_LOG_OBJECT (demux, "media object size : %u", payload.mo_size);
- GST_LOG_OBJECT (demux, "media object ts : %" GST_TIME_FORMAT,
- GST_TIME_ARGS (payload.ts));
- GST_LOG_OBJECT (demux, "media object dur : %" GST_TIME_FORMAT,
- GST_TIME_ARGS (payload.duration));
- } else if (payload.rep_data_len == 0) {
- payload.mo_size = 0;
- } else if (payload.rep_data_len != 0) {
- GST_WARNING_OBJECT (demux, "invalid replicated data length, very bad");
- *p_data += payload_len;
- *p_size -= payload_len;
- return FALSE;
- }
-
- GST_LOG_OBJECT (demux, "media object offset : %u", payload.mo_offset);
-
- GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
-
- if (payload_len == 0) {
- GST_DEBUG_OBJECT (demux, "skipping empty payload");
- } else if (payload.mo_offset == 0 && payload.mo_size == payload_len) {
- /* if the media object is not fragmented, just create a sub-buffer */
- GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len);
- payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size,
- payload_len);
- payload.buf_filled = payload_len;
- gst_asf_payload_queue_for_stream (demux, &payload, stream);
- } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- /* Handle fragmented payloads for reverse playback */
- AsfPayload *prev;
- const guint8 *payload_data = *p_data;
- prev = asf_payload_find_previous_fragment (demux, &payload, stream);
-
- if (prev) {
- gint idx;
- AsfPayload *p;
- gst_buffer_fill (prev->buf, payload.mo_offset,
- payload_data, payload_len);
- prev->buf_filled += payload_len;
- if (payload.keyframe && payload.mo_offset == 0) {
- stream->reverse_kf_ready = TRUE;
-
- for (idx = stream->payloads->len - 1; idx >= 0; idx--) {
- p = &g_array_index (stream->payloads, AsfPayload, idx);
- if (p->mo_number == payload.mo_number) {
- /* Mark position of KF for reverse play */
- stream->kf_pos = idx;
- }
- }
- }
- } else {
- payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL); /* can we use (mo_size - offset) for size? */
- gst_buffer_fill (payload.buf, payload.mo_offset,
- payload_data, payload_len);
- payload.buf_filled = payload.mo_size - (payload.mo_offset);
- gst_asf_payload_queue_for_stream (demux, &payload, stream);
- }
- *p_data += payload_len;
- *p_size -= payload_len;
- } else {
- const guint8 *payload_data = *p_data;
-
- g_assert (payload_len <= *p_size);
-
- *p_data += payload_len;
- *p_size -= payload_len;
-
- /* n-th fragment of a fragmented media object? */
- if (payload.mo_offset != 0) {
- AsfPayload *prev;
-
- if ((prev =
- asf_payload_find_previous_fragment (demux, &payload, stream))) {
- if (prev->buf == NULL || (payload.mo_size > 0
- && payload.mo_size != prev->mo_size)
- || payload.mo_offset >= gst_buffer_get_size (prev->buf)
- || payload.mo_offset + payload_len >
- gst_buffer_get_size (prev->buf)) {
- GST_WARNING_OBJECT (demux, "Offset doesn't match previous data?!");
- } else {
- /* we assume fragments are payloaded with increasing mo_offset */
- if (payload.mo_offset != prev->buf_filled) {
- GST_WARNING_OBJECT (demux, "media object payload discontinuity: "
- "offset=%u vs buf_filled=%u", payload.mo_offset,
- prev->buf_filled);
- }
- gst_buffer_fill (prev->buf, payload.mo_offset,
- payload_data, payload_len);
- prev->buf_filled =
- MAX (prev->buf_filled, payload.mo_offset + payload_len);
- GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u",
- prev->buf_filled);
- }
- } else {
- GST_DEBUG_OBJECT (demux, "n-th payload fragment, but don't have "
- "any previous fragment, ignoring payload");
- }
- } else {
- GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented "
- "media object", payload.mo_size);
- payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
- gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
- payload.buf_filled = payload_len;
-
- gst_asf_payload_queue_for_stream (demux, &payload, stream);
- }
- }
- } else {
- const guint8 *payload_data;
- GstClockTime ts, ts_delta;
- guint num;
-
- GST_LOG_OBJECT (demux, "Compressed payload, length=%u", payload_len);
-
- payload_data = *p_data;
-
- *p_data += payload_len;
- *p_size -= payload_len;
-
- ts = payload.mo_offset * GST_MSECOND;
- if (G_UNLIKELY (ts < demux->preroll))
- ts = 0;
- else
- ts -= demux->preroll;
- ts_delta = payload.rep_data[0] * GST_MSECOND;
-
- for (num = 0; payload_len > 0; ++num) {
- guint sub_payload_len;
-
- sub_payload_len = GST_READ_UINT8 (payload_data);
-
- GST_LOG_OBJECT (demux, "subpayload #%u: len=%u, ts=%" GST_TIME_FORMAT,
- num, sub_payload_len, GST_TIME_ARGS (ts));
-
- ++payload_data;
- --payload_len;
-
- if (G_UNLIKELY (payload_len < sub_payload_len)) {
- GST_WARNING_OBJECT (demux, "Short payload! %u bytes left", payload_len);
- return FALSE;
- }
-
- if (G_LIKELY (sub_payload_len > 0)) {
- payload.buf = asf_packet_create_payload_buffer (packet,
- &payload_data, &payload_len, sub_payload_len);
- payload.buf_filled = sub_payload_len;
-
- payload.ts = ts;
- if (G_LIKELY (ts_delta))
- payload.duration = ts_delta;
- else
- payload.duration = GST_CLOCK_TIME_NONE;
-
- gst_asf_payload_queue_for_stream (demux, &payload, stream);
- }
-
- ts += ts_delta;
- }
- }
-
- return TRUE;
-}
-
-GstAsfDemuxParsePacketError
-gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf)
-{
- AsfPacket packet = { 0, };
- GstMapInfo map;
- const guint8 *data;
- gboolean has_multiple_payloads;
- GstAsfDemuxParsePacketError ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
- guint8 ec_flags, flags1;
- guint size;
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- data = map.data;
- size = map.size;
- GST_LOG_OBJECT (demux, "Buffer size: %u", size);
-
- /* need at least two payload flag bytes, send time, and duration */
- if (G_UNLIKELY (size < 2 + 4 + 2)) {
- GST_WARNING_OBJECT (demux, "Packet size is < 8");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
- goto done;
- }
-
- packet.buf = buf;
- /* evidently transient */
- packet.bdata = data;
-
- ec_flags = GST_READ_UINT8 (data);
-
- /* skip optional error correction stuff */
- if ((ec_flags & 0x80) != 0) {
- guint ec_len_type, ec_len;
-
- ec_len_type = (ec_flags & 0x60) >> 5;
- if (ec_len_type == 0) {
- ec_len = ec_flags & 0x0f;
- } else {
- GST_WARNING_OBJECT (demux, "unexpected error correction length type %u",
- ec_len_type);
- ec_len = 2;
- }
- GST_LOG_OBJECT (demux, "packet has error correction (%u bytes)", ec_len);
-
- /* still need at least two payload flag bytes, send time, and duration */
- if (size <= (1 + ec_len) + 2 + 4 + 2) {
- GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
- goto done;
- }
-
- data += 1 + ec_len;
- size -= 1 + ec_len;
- }
-
- /* parse payload info */
- flags1 = GST_READ_UINT8 (data);
- packet.prop_flags = GST_READ_UINT8 (data + 1);
-
- data += 2;
- size -= 2;
-
- has_multiple_payloads = (flags1 & 0x01) != 0;
-
- packet.length = asf_packet_read_varlen_int (flags1, 5, &data, &size);
-
- packet.sequence = asf_packet_read_varlen_int (flags1, 1, &data, &size);
-
- packet.padding = asf_packet_read_varlen_int (flags1, 3, &data, &size);
-
- if (G_UNLIKELY (size < 6)) {
- GST_WARNING_OBJECT (demux, "Packet size is < 6");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
- goto done;
- }
-
- packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND;
- packet.duration = GST_READ_UINT16_LE (data + 4) * GST_MSECOND;
-
- data += 4 + 2;
- size -= 4 + 2;
-
- GST_LOG_OBJECT (demux, "flags : 0x%x", flags1);
- GST_LOG_OBJECT (demux, "multiple payloads: %u", has_multiple_payloads);
- GST_LOG_OBJECT (demux, "packet length : %u", packet.length);
- GST_LOG_OBJECT (demux, "sequence : %u", packet.sequence);
- GST_LOG_OBJECT (demux, "padding : %u", packet.padding);
- GST_LOG_OBJECT (demux, "send time : %" GST_TIME_FORMAT,
- GST_TIME_ARGS (packet.send_time));
-
- GST_LOG_OBJECT (demux, "duration : %" GST_TIME_FORMAT,
- GST_TIME_ARGS (packet.duration));
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
- && demux->seek_to_cur_pos == TRUE) {
- /* For reverse playback, initially parse packets forward until we reach packet with 'seek' timestamp */
- if (packet.send_time - demux->preroll > demux->segment.stop) {
- demux->seek_to_cur_pos = FALSE;
- }
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
- goto done;
- }
-
- if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) {
- GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
- goto done;
- }
-
- size -= packet.padding;
-
- /* adjust available size for parsing if there's less actual packet data for
- * parsing than there is data in bytes (for sample see bug 431318) */
- if (G_UNLIKELY (packet.length != 0 && packet.padding == 0
- && packet.length < demux->packet_size)) {
- GST_LOG_OBJECT (demux, "shortened packet with implicit padding, "
- "adjusting available data size");
- if (size < demux->packet_size - packet.length) {
- /* the buffer is smaller than the implicit padding */
- GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
- goto done;
- } else {
- /* subtract the implicit padding */
- size -= (demux->packet_size - packet.length);
- }
- }
-
- if (has_multiple_payloads) {
- guint i, num, lentype;
- demux->multiple_payloads = TRUE;
-
- if (G_UNLIKELY (size < 1)) {
- GST_WARNING_OBJECT (demux, "No room more in buffer");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
- goto done;
- }
-
- num = (GST_READ_UINT8 (data) & 0x3F) >> 0;
- lentype = (GST_READ_UINT8 (data) & 0xC0) >> 6;
-
- ++data;
- --size;
-
- GST_LOG_OBJECT (demux, "num payloads : %u", num);
-
- for (i = 0; i < num; ++i) {
- GST_LOG_OBJECT (demux, "Parsing payload %u/%u, size left: %u", i + 1, num,
- size);
-
- if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, lentype,
- &data, &size))) {
- GST_WARNING_OBJECT (demux, "Failed to parse payload %u/%u", i + 1, num);
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
- break;
- }
- }
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- /* In reverse playback, we parsed the packet (with multiple payloads) and stored the payloads in temporary queue.
- Now, add them to the stream's payload queue */
- for (i = 0; i < demux->num_streams; i++) {
- AsfStream *s = &demux->stream[i];
- while (s->payloads_rev->len > 0) {
- AsfPayload *p;
- p = &g_array_index (s->payloads_rev, AsfPayload,
- s->payloads_rev->len - 1);
- g_array_append_vals (s->payloads, p, 1);
- if (GST_ASF_PAYLOAD_KF_COMPLETE (s, p)) {
- /* Mark position of KF for reverse play */
- s->kf_pos = s->payloads->len - 1;
- }
- g_array_remove_index (s->payloads_rev, (s->payloads_rev->len - 1));
- }
- }
- }
-
- } else {
- GST_LOG_OBJECT (demux, "Parsing single payload");
- demux->multiple_payloads = FALSE;
- if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, -1, &data,
- &size))) {
- GST_WARNING_OBJECT (demux, "Failed to parse payload");
- ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
- }
- }
-
-done:
- gst_buffer_unmap (buf, &map);
- return ret;
-}
+++ /dev/null
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __ASF_PACKET_H__
-#define __ASF_PACKET_H__
-
-#include <gst/gstbuffer.h>
-#include <gst/gstclock.h>
-
-#include "gstasfdemux.h"
-
-G_BEGIN_DECLS
-
-typedef struct {
- gboolean keyframe; /* buffer flags might not survive merge.. */
- guint mo_number; /* media object number (unused) */
- guint mo_offset; /* offset (timestamp for compressed data) */
- guint mo_size; /* size of media-object-to-be, or 0 */
- guint buf_filled; /* how much of the mo data we got so far */
- GstBuffer *buf; /* buffer to assemble media-object or NULL*/
- guint rep_data_len; /* should never be more than 256, since */
- guint8 rep_data[256]; /* the length should be stored in a byte */
- GstClockTime ts;
- GstClockTime duration; /* is not always available */
- guint8 par_x; /* not always available (0:deactivated) */
- guint8 par_y; /* not always available (0:deactivated) */
- gboolean interlaced; /* default: FALSE */
- gboolean tff;
- gboolean rff;
-} AsfPayload;
-
-typedef struct {
- GstBuffer *buf;
- const guint8 *bdata;
- guint length; /* packet length (unused) */
- guint padding; /* length of padding at end of packet */
- guint sequence; /* sequence (unused) */
- GstClockTime send_time;
- GstClockTime duration;
-
- guint8 prop_flags; /* payload length types */
-} AsfPacket;
-
-typedef enum {
- GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE,
- GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE,
- GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL
-} GstAsfDemuxParsePacketError;
-
-GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf);
-
-#define gst_asf_payload_is_complete(payload) \
- ((payload)->buf_filled >= (payload)->mo_size)
-
-G_END_DECLS
-
-#endif /* __ASF_PACKET_H__ */
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/riff/riff-read.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include "gstasfelements.h"
-
-
-/* #include "gstasfmux.h" */
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gboolean ret = FALSE;
-
- ret |= GST_ELEMENT_REGISTER (asfdemux, plugin);
- ret |= GST_ELEMENT_REGISTER (rtspwms, plugin);
- ret |= GST_ELEMENT_REGISTER (rtpasfdepay, plugin);
-/*
- if (!gst_element_register (plugin, "asfmux", GST_RANK_NONE, GST_TYPE_ASFMUX))
- return FALSE;
-*/
- return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- asf,
- "Demuxes and muxes audio and video in Microsofts ASF format",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+++ /dev/null
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006-2009 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* TODO:
- *
- * - _loop():
- * stop if at end of segment if != end of file, ie. demux->segment.stop
- *
- * - fix packet parsing:
- * there's something wrong with timestamps for packets with keyframes,
- * and durations too.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gstutils.h>
-#include <gst/base/gstbytereader.h>
-#include <gst/base/gsttypefindhelper.h>
-#include <gst/riff/riff-media.h>
-#include <gst/tag/tag.h>
-#include <gst/gst-i18n-plugin.h>
-#include <gst/video/video.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gstasfelements.h"
-#include "gstasfdemux.h"
-#include "asfheaders.h"
-#include "asfpacket.h"
-
-GST_DEBUG_CATEGORY (asfdemux_dbg);
-#define GST_CAT_DEFAULT asfdemux_dbg
-
-static GstStaticPadTemplate gst_asf_demux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-ms-asf")
- );
-
-static GstStaticPadTemplate audio_src_template =
-GST_STATIC_PAD_TEMPLATE ("audio_%u",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate video_src_template =
-GST_STATIC_PAD_TEMPLATE ("video_%u",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS_ANY);
-
-/* size of an ASF object header, ie. GUID (16 bytes) + object size (8 bytes) */
-#define ASF_OBJECT_HEADER_SIZE (16+8)
-
-/* FIXME: get rid of this */
-/* abuse this GstFlowReturn enum for internal usage */
-#define ASF_FLOW_NEED_MORE_DATA 99
-
-#define gst_asf_get_flow_name(flow) \
- (flow == ASF_FLOW_NEED_MORE_DATA) ? \
- "need-more-data" : gst_flow_get_name (flow)
-
-static void gst_asf_demux_finalize (GObject * object);
-static GstStateChangeReturn gst_asf_demux_change_state (GstElement * element,
- GstStateChange transition);
-static gboolean gst_asf_demux_element_send_event (GstElement * element,
- GstEvent * event);
-static gboolean gst_asf_demux_send_event_unlocked (GstASFDemux * demux,
- GstEvent * event);
-static gboolean gst_asf_demux_handle_src_query (GstPad * pad,
- GstObject * parent, GstQuery * query);
-static GstFlowReturn gst_asf_demux_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buf);
-static gboolean gst_asf_demux_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static GstFlowReturn gst_asf_demux_process_object (GstASFDemux * demux,
- guint8 ** p_data, guint64 * p_size);
-static gboolean gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent);
-static gboolean gst_asf_demux_activate_mode (GstPad * sinkpad,
- GstObject * parent, GstPadMode mode, gboolean active);
-static void gst_asf_demux_loop (GstASFDemux * demux);
-static void
-gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux);
-static gboolean gst_asf_demux_pull_headers (GstASFDemux * demux,
- GstFlowReturn * pflow);
-static GstFlowReturn gst_asf_demux_pull_indices (GstASFDemux * demux);
-static void gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * asf);
-static gboolean
-gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data);
-static void gst_asf_demux_descramble_buffer (GstASFDemux * demux,
- AsfStream * stream, GstBuffer ** p_buffer);
-static void gst_asf_demux_activate_stream (GstASFDemux * demux,
- AsfStream * stream);
-static GstStructure *gst_asf_demux_get_metadata_for_stream (GstASFDemux * d,
- guint stream_num);
-static GstFlowReturn gst_asf_demux_push_complete_payloads (GstASFDemux * demux,
- gboolean force);
-
-#define gst_asf_demux_parent_class parent_class
-G_DEFINE_TYPE (GstASFDemux, gst_asf_demux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (asfdemux, "asfdemux", GST_RANK_SECONDARY,
- GST_TYPE_ASF_DEMUX, asf_element_init (plugin));
-
-static void
-gst_asf_demux_class_init (GstASFDemuxClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = G_OBJECT_CLASS (klass);
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_asf_demux_finalize;
-
- gst_element_class_set_static_metadata (gstelement_class, "ASF Demuxer",
- "Codec/Demuxer",
- "Demultiplexes ASF Streams", "Owen Fraser-Green <owen@discobabe.net>");
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &audio_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &video_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_asf_demux_sink_template);
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_asf_demux_change_state);
- gstelement_class->send_event =
- GST_DEBUG_FUNCPTR (gst_asf_demux_element_send_event);
-}
-
-static void
-gst_asf_demux_free_stream (GstASFDemux * demux, AsfStream * stream)
-{
- gst_caps_replace (&stream->caps, NULL);
- if (stream->pending_tags) {
- gst_tag_list_unref (stream->pending_tags);
- stream->pending_tags = NULL;
- }
- if (stream->streamheader) {
- gst_buffer_unref (stream->streamheader);
- stream->streamheader = NULL;
- }
- if (stream->pad) {
- if (stream->active) {
- gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
- gst_flow_combiner_remove_pad (demux->flowcombiner, stream->pad);
- } else
- gst_object_unref (stream->pad);
- stream->pad = NULL;
- }
-
- if (stream->payloads) {
- while (stream->payloads->len > 0) {
- AsfPayload *payload;
- guint last;
-
- last = stream->payloads->len - 1;
- payload = &g_array_index (stream->payloads, AsfPayload, last);
- gst_buffer_replace (&payload->buf, NULL);
- g_array_remove_index (stream->payloads, last);
- }
- g_array_free (stream->payloads, TRUE);
- stream->payloads = NULL;
- }
-
- if (stream->payloads_rev) {
- while (stream->payloads_rev->len > 0) {
- AsfPayload *payload;
- guint last;
-
- last = stream->payloads_rev->len - 1;
- payload = &g_array_index (stream->payloads_rev, AsfPayload, last);
- gst_buffer_replace (&payload->buf, NULL);
- g_array_remove_index (stream->payloads_rev, last);
- }
- g_array_free (stream->payloads_rev, TRUE);
- stream->payloads_rev = NULL;
- }
-
- if (stream->ext_props.valid) {
- g_free (stream->ext_props.payload_extensions);
- stream->ext_props.payload_extensions = NULL;
- }
-}
-
-static void
-gst_asf_demux_reset (GstASFDemux * demux, gboolean chain_reset)
-{
- GST_LOG_OBJECT (demux, "resetting");
-
- gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
- demux->segment_running = FALSE;
- if (demux->adapter && !chain_reset) {
- gst_adapter_clear (demux->adapter);
- g_object_unref (demux->adapter);
- demux->adapter = NULL;
- }
- if (demux->taglist) {
- gst_tag_list_unref (demux->taglist);
- demux->taglist = NULL;
- }
- if (demux->metadata) {
- gst_caps_unref (demux->metadata);
- demux->metadata = NULL;
- }
- demux->metadata = gst_caps_new_empty ();
- if (demux->global_metadata) {
- gst_structure_free (demux->global_metadata);
- demux->global_metadata = NULL;
- }
- demux->global_metadata = gst_structure_new_empty ("metadata");
- if (demux->mut_ex_streams) {
- g_slist_free (demux->mut_ex_streams);
- demux->mut_ex_streams = NULL;
- }
-
- demux->state = GST_ASF_DEMUX_STATE_HEADER;
- g_free (demux->objpath);
- demux->objpath = NULL;
- g_strfreev (demux->languages);
- demux->languages = NULL;
- demux->num_languages = 0;
- g_slist_foreach (demux->ext_stream_props, (GFunc) gst_mini_object_unref,
- NULL);
- g_slist_free (demux->ext_stream_props);
- demux->ext_stream_props = NULL;
-
- while (demux->old_num_streams > 0) {
- gst_asf_demux_free_stream (demux,
- &demux->old_stream[demux->old_num_streams - 1]);
- --demux->old_num_streams;
- }
- memset (demux->old_stream, 0, sizeof (demux->old_stream));
- demux->old_num_streams = 0;
-
- /* when resetting for a new chained asf, we don't want to remove the pads
- * before adding the new ones */
- if (chain_reset) {
- memcpy (demux->old_stream, demux->stream, sizeof (demux->stream));
- demux->old_num_streams = demux->num_streams;
- demux->num_streams = 0;
- }
-
- while (demux->num_streams > 0) {
- gst_asf_demux_free_stream (demux, &demux->stream[demux->num_streams - 1]);
- --demux->num_streams;
- }
- memset (demux->stream, 0, sizeof (demux->stream));
- if (!chain_reset) {
- /* do not remove those for not adding pads with same name */
- demux->num_audio_streams = 0;
- demux->num_video_streams = 0;
- demux->have_group_id = FALSE;
- demux->group_id = G_MAXUINT;
- }
- demux->num_streams = 0;
- demux->activated_streams = FALSE;
- demux->first_ts = GST_CLOCK_TIME_NONE;
- demux->segment_ts = GST_CLOCK_TIME_NONE;
- demux->in_gap = 0;
- if (!chain_reset)
- gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
- demux->state = GST_ASF_DEMUX_STATE_HEADER;
- demux->seekable = FALSE;
- demux->broadcast = FALSE;
- demux->sidx_interval = 0;
- demux->sidx_num_entries = 0;
- g_free (demux->sidx_entries);
- demux->sidx_entries = NULL;
-
- demux->speed_packets = 1;
-
- demux->asf_3D_mode = GST_ASF_3D_NONE;
-
- if (chain_reset) {
- GST_LOG_OBJECT (demux, "Restarting");
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
- demux->need_newsegment = TRUE;
- demux->segment_seqnum = 0;
- demux->segment_running = FALSE;
- demux->keyunit_sync = FALSE;
- demux->accurate = FALSE;
- demux->data_size = 0;
- demux->data_offset = 0;
- demux->index_offset = 0;
- } else {
- demux->base_offset = 0;
- }
-
- g_slist_free (demux->other_streams);
- demux->other_streams = NULL;
-}
-
-static void
-gst_asf_demux_init (GstASFDemux * demux)
-{
- demux->sinkpad =
- gst_pad_new_from_static_template (&gst_asf_demux_sink_template, "sink");
- gst_pad_set_chain_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_chain));
- gst_pad_set_event_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_sink_event));
- gst_pad_set_activate_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_activate));
- gst_pad_set_activatemode_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
- gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
-
- /* set initial state */
- gst_asf_demux_reset (demux, FALSE);
-}
-
-static gboolean
-gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent)
-{
- GstQuery *query;
- gboolean pull_mode;
-
- query = gst_query_new_scheduling ();
-
- if (!gst_pad_peer_query (sinkpad, query)) {
- gst_query_unref (query);
- goto activate_push;
- }
-
- pull_mode = gst_query_has_scheduling_mode_with_flags (query,
- GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
- gst_query_unref (query);
-
- if (!pull_mode)
- goto activate_push;
-
- GST_DEBUG_OBJECT (sinkpad, "activating pull");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
- {
- GST_DEBUG_OBJECT (sinkpad, "activating push");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
- }
-}
-
-static gboolean
-gst_asf_demux_activate_mode (GstPad * sinkpad, GstObject * parent,
- GstPadMode mode, gboolean active)
-{
- gboolean res;
- GstASFDemux *demux;
-
- demux = GST_ASF_DEMUX (parent);
-
- switch (mode) {
- case GST_PAD_MODE_PUSH:
- demux->state = GST_ASF_DEMUX_STATE_HEADER;
- demux->streaming = TRUE;
- res = TRUE;
- break;
- case GST_PAD_MODE_PULL:
- if (active) {
- demux->state = GST_ASF_DEMUX_STATE_HEADER;
- demux->streaming = FALSE;
-
- res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_asf_demux_loop,
- demux, NULL);
- } else {
- res = gst_pad_stop_task (sinkpad);
- }
- break;
- default:
- res = FALSE;
- break;
- }
- return res;
-}
-
-static gboolean
-gst_asf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstASFDemux *demux;
- gboolean ret = TRUE;
-
- demux = GST_ASF_DEMUX (parent);
-
- GST_LOG_OBJECT (demux, "handling %s event", GST_EVENT_TYPE_NAME (event));
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEGMENT:{
- const GstSegment *segment;
-
- gst_event_parse_segment (event, &segment);
-
- if (segment->format == GST_FORMAT_BYTES) {
- if (demux->packet_size && segment->start > demux->data_offset)
- demux->packet = (segment->start - demux->data_offset) /
- demux->packet_size;
- else
- demux->packet = 0;
- } else if (segment->format == GST_FORMAT_TIME) {
- /* do not know packet position, not really a problem */
- demux->packet = -1;
- } else {
- GST_WARNING_OBJECT (demux, "unsupported newsegment format, ignoring");
- gst_event_unref (event);
- break;
- }
-
- /* record upstream segment for interpolation */
- if (segment->format != demux->in_segment.format)
- gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
- gst_segment_copy_into (segment, &demux->in_segment);
-
- /* in either case, clear some state and generate newsegment later on */
- GST_OBJECT_LOCK (demux);
- demux->segment_ts = GST_CLOCK_TIME_NONE;
- demux->in_gap = GST_CLOCK_TIME_NONE;
- demux->need_newsegment = TRUE;
- demux->segment_seqnum = gst_event_get_seqnum (event);
- gst_asf_demux_reset_stream_state_after_discont (demux);
- /* if we seek back after reaching EOS, go back to packet reading state */
- if (demux->data_offset > 0 && segment->start >= demux->data_offset
- && demux->state == GST_ASF_DEMUX_STATE_INDEX) {
- demux->state = GST_ASF_DEMUX_STATE_DATA;
- }
- GST_OBJECT_UNLOCK (demux);
-
- gst_event_unref (event);
- break;
- }
- case GST_EVENT_EOS:{
- GstFlowReturn flow;
-
- if (demux->state == GST_ASF_DEMUX_STATE_HEADER) {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
- (_("This stream contains no data.")),
- ("got eos and didn't receive a complete header object"));
- break;
- }
- flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
- if (!demux->activated_streams) {
- /* If we still haven't got activated streams, the file is most likely corrupt */
- GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
- (_("This stream contains no data.")),
- ("got eos and didn't receive a complete header object"));
- break;
- }
- if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_FLOW_ERROR (demux, flow);
- break;
- }
-
- GST_OBJECT_LOCK (demux);
- gst_adapter_clear (demux->adapter);
- GST_OBJECT_UNLOCK (demux);
- gst_asf_demux_send_event_unlocked (demux, event);
- break;
- }
-
- case GST_EVENT_FLUSH_STOP:
- GST_OBJECT_LOCK (demux);
- gst_asf_demux_reset_stream_state_after_discont (demux);
- GST_OBJECT_UNLOCK (demux);
- gst_asf_demux_send_event_unlocked (demux, event);
- /* upon activation, latency is no longer introduced, e.g. after seek */
- if (demux->activated_streams)
- demux->latency = 0;
- break;
-
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-static gboolean
-gst_asf_demux_seek_index_lookup (GstASFDemux * demux, guint * packet,
- GstClockTime seek_time, GstClockTime * p_idx_time, guint * speed,
- gboolean next, gboolean * eos)
-{
- GstClockTime idx_time;
- guint idx;
-
- if (eos)
- *eos = FALSE;
-
- if (G_UNLIKELY (demux->sidx_num_entries == 0 || demux->sidx_interval == 0))
- return FALSE;
-
- idx = (guint) ((seek_time + demux->preroll) / demux->sidx_interval);
-
- if (next) {
- /* if we want the next keyframe, we have to go forward till we find
- a different packet number */
- guint idx2;
- if (idx >= demux->sidx_num_entries - 1) {
- /* If we get here, we're asking for next keyframe after the last one. There isn't one. */
- if (eos)
- *eos = TRUE;
- return FALSE;
- }
- for (idx2 = idx + 1; idx2 < demux->sidx_num_entries; ++idx2) {
- if (demux->sidx_entries[idx].packet != demux->sidx_entries[idx2].packet) {
- idx = idx2;
- break;
- }
- }
- }
-
- if (G_UNLIKELY (idx >= demux->sidx_num_entries)) {
- if (eos)
- *eos = TRUE;
- return FALSE;
- }
-
- *packet = demux->sidx_entries[idx].packet;
- if (speed)
- *speed = demux->sidx_entries[idx].count;
-
- /* so we get closer to the actual time of the packet ... actually, let's not
- * do this, since we throw away superfluous payloads before the seek position
- * anyway; this way, our key unit seek 'snap resolution' is a bit better
- * (ie. same as index resolution) */
- /*
- while (idx > 0 && demux->sidx_entries[idx-1] == demux->sidx_entries[idx])
- --idx;
- */
-
- idx_time = demux->sidx_interval * idx;
- if (G_LIKELY (idx_time >= demux->preroll))
- idx_time -= demux->preroll;
-
- GST_DEBUG_OBJECT (demux, "%" GST_TIME_FORMAT " => packet %u at %"
- GST_TIME_FORMAT, GST_TIME_ARGS (seek_time), *packet,
- GST_TIME_ARGS (idx_time));
-
- if (G_LIKELY (p_idx_time))
- *p_idx_time = idx_time;
-
- return TRUE;
-}
-
-static void
-gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * demux)
-{
- guint n;
-
- gst_adapter_clear (demux->adapter);
-
- GST_DEBUG_OBJECT (demux, "reset stream state");
-
- gst_flow_combiner_reset (demux->flowcombiner);
- for (n = 0; n < demux->num_streams; n++) {
- demux->stream[n].discont = TRUE;
- demux->stream[n].first_buffer = TRUE;
-
- while (demux->stream[n].payloads->len > 0) {
- AsfPayload *payload;
- guint last;
-
- last = demux->stream[n].payloads->len - 1;
- payload = &g_array_index (demux->stream[n].payloads, AsfPayload, last);
- gst_buffer_replace (&payload->buf, NULL);
- g_array_remove_index (demux->stream[n].payloads, last);
- }
- }
-}
-
-static void
-gst_asf_demux_mark_discont (GstASFDemux * demux)
-{
- guint n;
-
- GST_DEBUG_OBJECT (demux, "Mark stream discont");
-
- for (n = 0; n < demux->num_streams; n++)
- demux->stream[n].discont = TRUE;
-}
-
-/* do a seek in push based mode */
-static gboolean
-gst_asf_demux_handle_seek_push (GstASFDemux * demux, GstEvent * event)
-{
- gdouble rate;
- GstFormat format;
- GstSeekFlags flags;
- GstSeekType cur_type, stop_type;
- gint64 cur, stop;
- guint packet;
- gboolean res;
- GstEvent *byte_event;
-
- gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
- &stop_type, &stop);
-
- stop_type = GST_SEEK_TYPE_NONE;
- stop = -1;
-
- GST_DEBUG_OBJECT (demux, "seeking to %" GST_TIME_FORMAT, GST_TIME_ARGS (cur));
-
- /* determine packet, by index or by estimation */
- if (!gst_asf_demux_seek_index_lookup (demux, &packet, cur, NULL, NULL, FALSE,
- NULL)) {
- packet =
- (guint) gst_util_uint64_scale (demux->num_packets, cur,
- demux->play_time);
- }
-
- if (packet > demux->num_packets) {
- GST_DEBUG_OBJECT (demux, "could not determine packet to seek to, "
- "seek aborted.");
- return FALSE;
- }
-
- GST_DEBUG_OBJECT (demux, "seeking to packet %d", packet);
-
- cur = demux->data_offset + ((guint64) packet * demux->packet_size);
-
- GST_DEBUG_OBJECT (demux, "Pushing BYTE seek rate %g, "
- "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT, rate, cur, stop);
- /* BYTE seek event */
- byte_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type,
- cur, stop_type, stop);
- gst_event_set_seqnum (byte_event, gst_event_get_seqnum (event));
- res = gst_pad_push_event (demux->sinkpad, byte_event);
-
- return res;
-}
-
-static gboolean
-gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event)
-{
- gboolean ret = TRUE;
- GstClockTime idx_time;
- GstSegment segment;
- GstSeekFlags flags;
- GstSeekType cur_type, stop_type;
- GstFormat format;
- gboolean only_need_update;
- gboolean after, before, next;
- gboolean flush;
- gdouble rate;
- gint64 cur, stop;
- gint64 seek_time;
- guint packet, speed_count = 1;
- gboolean eos;
- guint32 seqnum;
- GstEvent *fevent;
- gint i;
-
- gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
- &stop_type, &stop);
-
- if (G_UNLIKELY (format != GST_FORMAT_TIME)) {
- GST_LOG_OBJECT (demux, "seeking is only supported in TIME format");
- return FALSE;
- }
-
- if (G_UNLIKELY (demux->seekable == FALSE || demux->packet_size == 0 ||
- demux->num_packets == 0 || demux->play_time == 0)) {
- GST_LOG_OBJECT (demux, "stream is not seekable");
- return FALSE;
- }
-
- if (G_UNLIKELY (!demux->activated_streams)) {
- GST_LOG_OBJECT (demux, "streams not yet activated, ignoring seek");
- return FALSE;
- }
-
- if (G_UNLIKELY (rate <= 0.0)) {
- GST_LOG_OBJECT (demux, "backward playback");
- demux->seek_to_cur_pos = TRUE;
- for (i = 0; i < demux->num_streams; i++) {
- demux->stream[i].reverse_kf_ready = FALSE;
- }
- }
-
- seqnum = gst_event_get_seqnum (event);
- flush = ((flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH);
- demux->accurate =
- ((flags & GST_SEEK_FLAG_ACCURATE) == GST_SEEK_FLAG_ACCURATE);
- demux->keyunit_sync =
- ((flags & GST_SEEK_FLAG_KEY_UNIT) == GST_SEEK_FLAG_KEY_UNIT);
- after = ((flags & GST_SEEK_FLAG_SNAP_AFTER) == GST_SEEK_FLAG_SNAP_AFTER);
- before = ((flags & GST_SEEK_FLAG_SNAP_BEFORE) == GST_SEEK_FLAG_SNAP_BEFORE);
- next = after && !before;
-
- if (G_UNLIKELY (demux->streaming)) {
- /* upstream might handle TIME seek, e.g. mms or rtsp, or not, e.g. http,
- * so first try to let it handle the seek event. */
- if (gst_pad_push_event (demux->sinkpad, gst_event_ref (event)))
- return TRUE;
-
- /* support it safely needs more segment handling, e.g. closing etc */
- if (!flush) {
- GST_LOG_OBJECT (demux, "streaming; non-flushing seek not supported");
- return FALSE;
- }
- /* we can (re)construct the start later on, but not the end */
- if (stop_type != GST_SEEK_TYPE_NONE &&
- (stop_type != GST_SEEK_TYPE_SET || GST_CLOCK_TIME_IS_VALID (stop))) {
- GST_LOG_OBJECT (demux, "streaming; end position must be NONE");
- return FALSE;
- }
- return gst_asf_demux_handle_seek_push (demux, event);
- }
-
- /* unlock the streaming thread */
- if (G_LIKELY (flush)) {
- fevent = gst_event_new_flush_start ();
-
- gst_event_set_seqnum (fevent, seqnum);
- gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
- gst_asf_demux_send_event_unlocked (demux, fevent);
- } else {
- gst_pad_pause_task (demux->sinkpad);
- }
-
- /* grab the stream lock so that streaming cannot continue, for
- * non flushing seeks when the element is in PAUSED this could block
- * forever */
- GST_PAD_STREAM_LOCK (demux->sinkpad);
-
- if (G_LIKELY (flush)) {
- /* we now can stop flushing, since we have the stream lock now */
- fevent = gst_event_new_flush_stop (TRUE);
- gst_event_set_seqnum (fevent, seqnum);
- gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
- gst_asf_demux_send_event_unlocked (demux, fevent);
- }
-
- /* operating on copy of segment until we know the seek worked */
- segment = demux->segment;
-
- if (!gst_segment_do_seek (&segment, rate, format, flags, cur_type,
- cur, stop_type, stop, &only_need_update)) {
- ret = FALSE;
- goto skip;
- }
-
- GST_DEBUG_OBJECT (demux, "seeking to time %" GST_TIME_FORMAT ", segment: "
- "%" GST_SEGMENT_FORMAT, GST_TIME_ARGS (segment.start), &segment);
-
- if (cur_type != GST_SEEK_TYPE_SET)
- seek_time = segment.start;
- else
- seek_time = cur;
-
- /* FIXME: should check the KEY_UNIT flag; need to adjust position to
- * real start of data and segment_start to indexed time for key unit seek*/
- if (G_UNLIKELY (!gst_asf_demux_seek_index_lookup (demux, &packet, seek_time,
- &idx_time, &speed_count, next, &eos))) {
- gint64 offset;
-
- if (eos) {
- demux->packet = demux->num_packets;
- goto skip;
- }
-
- /* First try to query our source to see if it can convert for us. This is
- the case when our source is an mms stream, notice that in this case
- gstmms will do a time based seek to get the byte offset, this is not a
- problem as the seek to this offset needs to happen anyway. */
- if (gst_pad_peer_query_convert (demux->sinkpad, GST_FORMAT_TIME, seek_time,
- GST_FORMAT_BYTES, &offset)) {
- packet = (offset - demux->data_offset) / demux->packet_size;
- GST_LOG_OBJECT (demux, "convert %" GST_TIME_FORMAT
- " to bytes query result: %" G_GINT64_FORMAT ", data_ofset: %"
- G_GINT64_FORMAT ", packet_size: %u," " resulting packet: %u\n",
- GST_TIME_ARGS (seek_time), offset, demux->data_offset,
- demux->packet_size, packet);
- } else {
- /* FIXME: For streams containing video, seek to an earlier position in
- * the hope of hitting a keyframe and let the sinks throw away the stuff
- * before the segment start. For audio-only this is unnecessary as every
- * frame is 'key'. */
- if (flush && (demux->accurate || (demux->keyunit_sync && !next))
- && demux->num_video_streams > 0) {
- seek_time -= 5 * GST_SECOND;
- if (seek_time < 0)
- seek_time = 0;
- }
-
- packet = (guint) gst_util_uint64_scale (demux->num_packets,
- seek_time, demux->play_time);
-
- if (packet > demux->num_packets)
- packet = demux->num_packets;
- }
- } else {
- if (G_LIKELY (demux->keyunit_sync && !demux->accurate)) {
- GST_DEBUG_OBJECT (demux, "key unit seek, adjust seek_time = %"
- GST_TIME_FORMAT " to index_time = %" GST_TIME_FORMAT,
- GST_TIME_ARGS (seek_time), GST_TIME_ARGS (idx_time));
- segment.start = idx_time;
- segment.position = idx_time;
- segment.time = idx_time;
- }
- }
-
- GST_DEBUG_OBJECT (demux, "seeking to packet %u (%d)", packet, speed_count);
-
- GST_OBJECT_LOCK (demux);
- demux->segment = segment;
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- demux->packet = (gint64) gst_util_uint64_scale (demux->num_packets,
- stop, demux->play_time);
- } else {
- demux->packet = packet;
- }
-
- demux->need_newsegment = TRUE;
- demux->segment_seqnum = seqnum;
- demux->speed_packets =
- GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) ? 1 : speed_count;
- gst_asf_demux_reset_stream_state_after_discont (demux);
- GST_OBJECT_UNLOCK (demux);
-
-skip:
- /* restart our task since it might have been stopped when we did the flush */
- gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_asf_demux_loop,
- demux, NULL);
-
- /* streaming can continue now */
- GST_PAD_STREAM_UNLOCK (demux->sinkpad);
-
- return ret;
-}
-
-static gboolean
-gst_asf_demux_handle_src_event (GstPad * pad, GstObject * parent,
- GstEvent * event)
-{
- GstASFDemux *demux;
- gboolean ret;
- guint32 seqnum;
-
- demux = GST_ASF_DEMUX (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEEK:
- GST_LOG_OBJECT (pad, "seek event");
- seqnum = gst_event_get_seqnum (event);
- if (demux->segment_seqnum == seqnum) {
- GST_LOG_OBJECT (pad,
- "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
- gst_event_unref (event);
- ret = TRUE;
- break;
- }
- ret = gst_asf_demux_handle_seek_event (demux, event);
- gst_event_unref (event);
- break;
- case GST_EVENT_QOS:
- case GST_EVENT_NAVIGATION:
- /* just drop these two silently */
- gst_event_unref (event);
- ret = FALSE;
- break;
- default:
- GST_LOG_OBJECT (pad, "%s event", GST_EVENT_TYPE_NAME (event));
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-static inline guint32
-gst_asf_demux_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
-{
- guint32 ret;
-
- ret = gst_asf_identify_guid (guids, guid);
-
- GST_LOG ("%s 0x%08x-0x%08x-0x%08x-0x%08x",
- gst_asf_get_guid_nick (guids, ret),
- guid->v1, guid->v2, guid->v3, guid->v4);
-
- return ret;
-}
-
-typedef struct
-{
- AsfObjectID id;
- guint64 size;
-} AsfObject;
-
-
-/* Peek for an object.
- *
- * Returns FALSE is the object is corrupted (such as the reported
- * object size being greater than 2**32bits.
- */
-static gboolean
-asf_demux_peek_object (GstASFDemux * demux, const guint8 * data,
- guint data_len, AsfObject * object, gboolean expect)
-{
- ASFGuid guid;
-
- /* Callers should have made sure that data_len is big enough */
- g_assert (data_len >= ASF_OBJECT_HEADER_SIZE);
-
- if (data_len < ASF_OBJECT_HEADER_SIZE)
- return FALSE;
-
- guid.v1 = GST_READ_UINT32_LE (data + 0);
- guid.v2 = GST_READ_UINT32_LE (data + 4);
- guid.v3 = GST_READ_UINT32_LE (data + 8);
- guid.v4 = GST_READ_UINT32_LE (data + 12);
-
- /* FIXME: make asf_demux_identify_object_guid() */
- object->id = gst_asf_demux_identify_guid (asf_object_guids, &guid);
- if (object->id == ASF_OBJ_UNDEFINED && expect) {
- GST_WARNING_OBJECT (demux, "Unknown object %08x-%08x-%08x-%08x",
- guid.v1, guid.v2, guid.v3, guid.v4);
- }
-
- object->size = GST_READ_UINT64_LE (data + 16);
- if (object->id != ASF_OBJ_DATA && object->size >= G_MAXUINT) {
- GST_WARNING_OBJECT (demux,
- "ASF Object size corrupted (greater than 32bit)");
- return FALSE;
- }
-
-
- return TRUE;
-}
-
-static void
-gst_asf_demux_release_old_pads (GstASFDemux * demux)
-{
- GST_DEBUG_OBJECT (demux, "Releasing old pads");
-
- while (demux->old_num_streams > 0) {
- gst_pad_push_event (demux->old_stream[demux->old_num_streams - 1].pad,
- gst_event_new_eos ());
- gst_asf_demux_free_stream (demux,
- &demux->old_stream[demux->old_num_streams - 1]);
- --demux->old_num_streams;
- }
- memset (demux->old_stream, 0, sizeof (demux->old_stream));
- demux->old_num_streams = 0;
-}
-
-static GstFlowReturn
-gst_asf_demux_chain_headers (GstASFDemux * demux)
-{
- AsfObject obj;
- guint8 *header_data, *data = NULL;
- const guint8 *cdata = NULL;
- guint64 header_size;
- GstFlowReturn flow = GST_FLOW_OK;
-
- cdata = (guint8 *) gst_adapter_map (demux->adapter, ASF_OBJECT_HEADER_SIZE);
- if (cdata == NULL)
- goto need_more_data;
-
- if (!asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, TRUE))
- goto parse_failed;
- if (obj.id != ASF_OBJ_HEADER)
- goto wrong_type;
-
- GST_LOG_OBJECT (demux, "header size = %u", (guint) obj.size);
-
- /* + 50 for non-packet data at beginning of ASF_OBJ_DATA */
- if (gst_adapter_available (demux->adapter) < obj.size + 50)
- goto need_more_data;
-
- data = gst_adapter_take (demux->adapter, obj.size + 50);
-
- header_data = data;
- header_size = obj.size;
- flow = gst_asf_demux_process_object (demux, &header_data, &header_size);
- if (flow != GST_FLOW_OK)
- goto parse_failed;
-
- /* calculate where the packet data starts */
- demux->data_offset = obj.size + 50;
-
- /* now parse the beginning of the ASF_OBJ_DATA object */
- if (!gst_asf_demux_parse_data_object_start (demux, data + obj.size))
- goto wrong_type;
-
- if (demux->num_streams == 0)
- goto no_streams;
-
- g_free (data);
- return GST_FLOW_OK;
-
-/* NON-FATAL */
-need_more_data:
- {
- GST_LOG_OBJECT (demux, "not enough data in adapter yet");
- return GST_FLOW_OK;
- }
-
-/* ERRORS */
-wrong_type:
- {
- GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
- ("This doesn't seem to be an ASF file"));
- g_free (data);
- return GST_FLOW_ERROR;
- }
-no_streams:
-parse_failed:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("header parsing failed, or no streams found, flow = %s",
- gst_flow_get_name (flow)));
- g_free (data);
- return GST_FLOW_ERROR;
- }
-}
-
-static gboolean
-gst_asf_demux_pull_data (GstASFDemux * demux, guint64 offset, guint size,
- GstBuffer ** p_buf, GstFlowReturn * p_flow)
-{
- gsize buffer_size;
- GstFlowReturn flow;
-
- GST_LOG_OBJECT (demux, "pulling buffer at %" G_GUINT64_FORMAT "+%u",
- offset, size);
-
- flow = gst_pad_pull_range (demux->sinkpad, offset, size, p_buf);
-
- if (G_LIKELY (p_flow))
- *p_flow = flow;
-
- if (G_UNLIKELY (flow != GST_FLOW_OK)) {
- GST_DEBUG_OBJECT (demux, "flow %s pulling buffer at %" G_GUINT64_FORMAT
- "+%u", gst_flow_get_name (flow), offset, size);
- *p_buf = NULL;
- return FALSE;
- }
-
- g_assert (*p_buf != NULL);
-
- buffer_size = gst_buffer_get_size (*p_buf);
- if (G_UNLIKELY (buffer_size < size)) {
- GST_DEBUG_OBJECT (demux, "short read pulling buffer at %" G_GUINT64_FORMAT
- "+%u (got only %" G_GSIZE_FORMAT " bytes)", offset, size, buffer_size);
- gst_buffer_unref (*p_buf);
- if (G_LIKELY (p_flow))
- *p_flow = GST_FLOW_EOS;
- *p_buf = NULL;
- return FALSE;
- }
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_asf_demux_pull_indices (GstASFDemux * demux)
-{
- GstBuffer *buf = NULL;
- guint64 offset;
- guint num_read = 0;
- GstFlowReturn ret = GST_FLOW_OK;
-
- offset = demux->index_offset;
-
- if (G_UNLIKELY (offset == 0)) {
- GST_DEBUG_OBJECT (demux, "can't read indices, don't know index offset");
- /* non-fatal */
- return GST_FLOW_OK;
- }
-
- while (gst_asf_demux_pull_data (demux, offset, 16 + 8, &buf, NULL)) {
- AsfObject obj;
- GstMapInfo map;
- guint8 *bufdata;
- guint64 obj_size;
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- g_assert (map.size >= 16 + 8);
- if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
- GST_DEBUG_OBJECT (demux, "No valid object, corrupted index, ignoring");
- GST_MEMDUMP_OBJECT (demux, "Corrupted index ?", map.data, MIN (map.size,
- 64));
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
- /* Non-fatal, return */
- break;
- }
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
-
- /* check for sanity */
- if (G_UNLIKELY (obj.size > (5 * 1024 * 1024))) {
- GST_DEBUG_OBJECT (demux, "implausible index object size, bailing out");
- break;
- }
-
- if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, offset, obj.size, &buf,
- NULL)))
- break;
-
- GST_LOG_OBJECT (demux, "index object at offset 0x%" G_GINT64_MODIFIER "X"
- ", size %u", offset, (guint) obj.size);
-
- offset += obj.size; /* increase before _process_object changes it */
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- g_assert (map.size >= obj.size);
- bufdata = (guint8 *) map.data;
- obj_size = obj.size;
- ret = gst_asf_demux_process_object (demux, &bufdata, &obj_size);
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
-
- if (ret == ASF_FLOW_NEED_MORE_DATA) {
- /* Since indices are at the end of the file, if we need more data,
- * we consider it as a non-fatal corrupted index */
- ret = GST_FLOW_OK;
- break;
- }
-
- if (G_UNLIKELY (ret != GST_FLOW_OK))
- break;
-
- ++num_read;
- }
-
- GST_DEBUG_OBJECT (demux, "read %u index objects , returning %s", num_read,
- gst_flow_get_name (ret));
- return ret;
-}
-
-static gboolean
-gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data)
-{
- AsfObject obj;
-
- if (!asf_demux_peek_object (demux, data, 50, &obj, TRUE)) {
- GST_WARNING_OBJECT (demux, "Corrupted data");
- return FALSE;
- }
- if (obj.id != ASF_OBJ_DATA) {
- GST_WARNING_OBJECT (demux, "headers not followed by a DATA object");
- return FALSE;
- }
-
- demux->state = GST_ASF_DEMUX_STATE_DATA;
-
- if (!demux->broadcast && obj.size > 50) {
- demux->data_size = obj.size - 50;
- /* CHECKME: for at least one file this is off by +158 bytes?! */
- demux->index_offset = demux->data_offset + demux->data_size;
- } else {
- demux->data_size = 0;
- demux->index_offset = 0;
- }
-
- demux->packet = 0;
-
- if (!demux->broadcast) {
- /* skip object header (24 bytes) and file GUID (16 bytes) */
- demux->num_packets = GST_READ_UINT64_LE (data + (16 + 8) + 16);
- } else {
- demux->num_packets = 0;
- }
-
- if (demux->num_packets == 0)
- demux->seekable = FALSE;
-
- /* fallback in the unlikely case that headers are inconsistent, can't hurt */
- if (demux->data_size == 0 && demux->num_packets > 0) {
- demux->data_size = demux->num_packets * demux->packet_size;
- demux->index_offset = demux->data_offset + demux->data_size;
- }
-
- /* process pending stream objects and create pads for those */
- gst_asf_demux_process_queued_extended_stream_objects (demux);
-
- GST_INFO_OBJECT (demux, "Stream has %" G_GUINT64_FORMAT " packets, "
- "data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
- ", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
- demux->data_offset, demux->data_size, demux->index_offset);
-
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_pull_headers (GstASFDemux * demux, GstFlowReturn * pflow)
-{
- GstFlowReturn flow = GST_FLOW_OK;
- AsfObject obj;
- GstBuffer *buf = NULL;
- guint64 size;
- GstMapInfo map;
- guint8 *bufdata;
-
- GST_LOG_OBJECT (demux, "reading headers");
-
- /* pull HEADER object header, so we know its size */
- if (!gst_asf_demux_pull_data (demux, demux->base_offset, 16 + 8, &buf, &flow))
- goto read_failed;
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- g_assert (map.size >= 16 + 8);
- if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
- flow = GST_FLOW_ERROR;
- goto read_failed;
- }
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
-
- if (obj.id != ASF_OBJ_HEADER)
- goto wrong_type;
-
- GST_LOG_OBJECT (demux, "header size = %" G_GUINT64_FORMAT, obj.size);
-
- /* pull HEADER object */
- if (!gst_asf_demux_pull_data (demux, demux->base_offset, obj.size, &buf,
- &flow))
- goto read_failed;
-
- size = obj.size; /* don't want obj.size changed */
- gst_buffer_map (buf, &map, GST_MAP_READ);
- g_assert (map.size >= size);
- bufdata = (guint8 *) map.data;
- flow = gst_asf_demux_process_object (demux, &bufdata, &size);
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
-
- if (flow != GST_FLOW_OK) {
- GST_WARNING_OBJECT (demux, "process_object: %s", gst_flow_get_name (flow));
- goto parse_failed;
- }
-
- /* calculate where the packet data starts */
- demux->data_offset = demux->base_offset + obj.size + 50;
-
- /* now pull beginning of DATA object before packet data */
- if (!gst_asf_demux_pull_data (demux, demux->base_offset + obj.size, 50, &buf,
- &flow))
- goto read_failed;
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- g_assert (map.size >= size);
- bufdata = (guint8 *) map.data;
- if (!gst_asf_demux_parse_data_object_start (demux, bufdata))
- goto wrong_type;
-
- if (demux->num_streams == 0)
- goto no_streams;
-
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
-
- return TRUE;
-
-/* ERRORS */
-wrong_type:
- {
- if (buf != NULL) {
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
- }
- GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
- ("This doesn't seem to be an ASF file"));
- *pflow = GST_FLOW_ERROR;
- return FALSE;
- }
-
-no_streams:
- flow = GST_FLOW_ERROR;
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("header parsing failed, or no streams found, flow = %s",
- gst_flow_get_name (flow)));
-read_failed:
-parse_failed:
- {
- if (buf)
- gst_buffer_unmap (buf, &map);
- gst_buffer_replace (&buf, NULL);
- if (flow == ASF_FLOW_NEED_MORE_DATA)
- flow = GST_FLOW_ERROR;
- *pflow = flow;
- return FALSE;
- }
-}
-
-static gboolean
-all_streams_prerolled (GstASFDemux * demux)
-{
- GstClockTime preroll_time;
- guint i, num_no_data = 0;
- AsfStreamType prerolled_types = 0, all_types = 0;
-
- /* Allow at least 500ms of preroll_time */
- preroll_time = MAX (demux->preroll, 500 * GST_MSECOND);
-
- /* returns TRUE as long as there isn't a stream which (a) has data queued
- * and (b) the timestamp of last piece of data queued is < demux->preroll
- * AND there is at least one other stream with data queued */
- for (i = 0; i < demux->num_streams; ++i) {
- AsfPayload *last_payload = NULL;
- AsfStream *stream;
- gint last_idx;
-
- stream = &demux->stream[i];
-
- all_types |= stream->type;
-
- if (G_UNLIKELY (stream->payloads->len == 0)) {
- ++num_no_data;
- GST_LOG_OBJECT (stream->pad, "no data queued");
- continue;
- }
-
- prerolled_types |= stream->type;
-
- /* find last payload with timestamp */
- for (last_idx = stream->payloads->len - 1;
- last_idx >= 0 && (last_payload == NULL
- || !GST_CLOCK_TIME_IS_VALID (last_payload->ts)); --last_idx) {
- last_payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
- }
-
- GST_LOG_OBJECT (stream->pad, "checking if %" GST_TIME_FORMAT " > %"
- GST_TIME_FORMAT, GST_TIME_ARGS (last_payload->ts),
- GST_TIME_ARGS (preroll_time));
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (last_payload->ts)
- || last_payload->ts <= preroll_time)) {
- GST_LOG_OBJECT (stream->pad, "not beyond preroll point yet");
- return FALSE;
- }
- }
-
- GST_LOG_OBJECT (demux, "all_types:%d prerolled_types:%d",
- all_types, prerolled_types);
-
- /* If streams of each present type have prerolled, we are good to go */
- if (all_types != 0 && prerolled_types == all_types)
- return TRUE;
-
- if (G_UNLIKELY (num_no_data > 0))
- return FALSE;
-
- return TRUE;
-}
-
-#if 0
-static gboolean
-gst_asf_demux_have_mutually_exclusive_active_stream (GstASFDemux * demux,
- AsfStream * stream)
-{
- GSList *l;
-
- for (l = demux->mut_ex_streams; l != NULL; l = l->next) {
- guint8 *mes;
-
- /* check for each mutual exclusion group whether it affects this stream */
- for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
- if (*mes == stream->id) {
- /* we are in this group; let's check if we've already activated streams
- * that are in the same group (and hence mutually exclusive to this
- * one) */
- for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
- guint i;
-
- for (i = 0; i < demux->num_streams; ++i) {
- if (demux->stream[i].id == *mes && demux->stream[i].active) {
- GST_LOG_OBJECT (demux, "stream with ID %d is mutually exclusive "
- "to already active stream with ID %d", stream->id,
- demux->stream[i].id);
- return TRUE;
- }
- }
- }
- /* we can only be in this group once, let's break out and move on to
- * the next mutual exclusion group */
- break;
- }
- }
- }
-
- return FALSE;
-}
-#endif
-
-static void
-gst_asf_demux_check_segment_ts (GstASFDemux * demux, GstClockTime payload_ts)
-{
- /* remember the first queued timestamp for the segment */
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->segment_ts) &&
- GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
- GST_DEBUG_OBJECT (demux, "segment ts: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->first_ts));
- demux->segment_ts = payload_ts;
- /* always note, but only determines segment when streaming */
- if (demux->streaming)
- if (!gst_segment_do_seek (&demux->segment, demux->in_segment.rate,
- GST_FORMAT_TIME, (GstSeekFlags) demux->segment.flags,
- GST_SEEK_TYPE_SET, demux->segment_ts, GST_SEEK_TYPE_NONE, 0,
- NULL)) {
- GST_WARNING_OBJECT (demux, "Initial segment seek failed");
- }
- }
-}
-
-static gboolean
-gst_asf_demux_get_first_ts (GstASFDemux * demux)
-{
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
- GstClockTime first_ts = GST_CLOCK_TIME_NONE;
- int i;
-
- /* go trhough each stream, find smallest timestamp */
- for (i = 0; i < demux->num_streams; ++i) {
- AsfStream *stream;
- int j;
- GstClockTime stream_min_ts = GST_CLOCK_TIME_NONE;
- GstClockTime stream_min_ts2 = GST_CLOCK_TIME_NONE; /* second smallest timestamp */
- stream = &demux->stream[i];
-
- for (j = 0; j < stream->payloads->len; ++j) {
- AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
- if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
- (!GST_CLOCK_TIME_IS_VALID (stream_min_ts)
- || stream_min_ts > payload->ts)) {
- stream_min_ts = payload->ts;
- }
- if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
- payload->ts > stream_min_ts &&
- (!GST_CLOCK_TIME_IS_VALID (stream_min_ts2)
- || stream_min_ts2 > payload->ts)) {
- stream_min_ts2 = payload->ts;
- }
- }
-
- /* there are some DVR ms files where first packet has TS of 0 (instead of -1) while subsequent packets have
- regular (singificantly larger) timestamps. If we don't deal with it, we may end up with huge gap in timestamps
- which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues
- from it. I haven't found a better way to distinguish between these two, except to set an arbitrary boundary
- and disregard the first 0 timestamp if the second timestamp is bigger than the boundary) */
-
- GST_DEBUG_OBJECT (demux,
- "stream #%u stream_min_ts %" GST_TIME_FORMAT " stream_min_ts2 %"
- GST_TIME_FORMAT, stream->id, GST_TIME_ARGS (stream_min_ts),
- GST_TIME_ARGS (stream_min_ts2));
-
- if (stream_min_ts == 0 && stream_min_ts2 > GST_SECOND) /* first timestamp is 0 and second is significantly larger, disregard the 0 */
- stream_min_ts = stream_min_ts2;
-
- if (GST_CLOCK_TIME_IS_VALID (stream_min_ts) &&
- (!GST_CLOCK_TIME_IS_VALID (first_ts) || first_ts > stream_min_ts))
- first_ts = stream_min_ts;
- }
-
- if (!GST_CLOCK_TIME_IS_VALID (first_ts)) /* can happen */
- first_ts = 0;
-
- demux->first_ts = first_ts;
-
- /* update packets queued before we knew first timestamp */
- for (i = 0; i < demux->num_streams; ++i) {
- AsfStream *stream;
- int j;
- stream = &demux->stream[i];
-
- for (j = 0; j < stream->payloads->len; ++j) {
- AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
- if (GST_CLOCK_TIME_IS_VALID (payload->ts)) {
- if (payload->ts > first_ts)
- payload->ts -= first_ts;
- else
- payload->ts = 0;
- }
- }
- }
- }
-
- gst_asf_demux_check_segment_ts (demux, 0);
-
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_update_caps_from_payload (GstASFDemux * demux, AsfStream * stream)
-{
- /* try to determine whether the stream is AC-3 or MPEG; In dvr-ms the codecTag is unreliable
- and often set wrong, inspecting the data is the only way that seem to be working */
- GstTypeFindProbability prob = GST_TYPE_FIND_NONE;
- GstCaps *caps = NULL;
- int i;
- GstAdapter *adapter = gst_adapter_new ();
-
- for (i = 0; i < stream->payloads->len && prob < GST_TYPE_FIND_LIKELY; ++i) {
- const guint8 *data;
- AsfPayload *payload;
- int len;
-
- payload = &g_array_index (stream->payloads, AsfPayload, i);
- gst_adapter_push (adapter, gst_buffer_ref (payload->buf));
- len = gst_adapter_available (adapter);
- data = gst_adapter_map (adapter, len);
-
- again:
-
-#define MIN_LENGTH 128
-
- /* look for the sync points */
- while (TRUE) {
- if (len < MIN_LENGTH || /* give typefind something to work on */
- (data[0] == 0x0b && data[1] == 0x77) || /* AC-3 sync point */
- (data[0] == 0xFF && ((data[1] & 0xF0) >> 4) == 0xF)) /* MPEG sync point */
- break;
- ++data;
- --len;
- }
-
- gst_caps_take (&caps, gst_type_find_helper_for_data (GST_OBJECT (demux),
- data, len, &prob));
-
- if (prob < GST_TYPE_FIND_LIKELY) {
- ++data;
- --len;
- if (len > MIN_LENGTH)
- /* this wasn't it, look for another sync point */
- goto again;
- }
-
- gst_adapter_unmap (adapter);
- }
-
- gst_object_unref (adapter);
-
- if (caps) {
- gst_caps_take (&stream->caps, caps);
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-static gboolean
-gst_asf_demux_check_activate_streams (GstASFDemux * demux, gboolean force)
-{
- guint i, actual_streams = 0;
-
- if (demux->activated_streams)
- return TRUE;
-
- if (!all_streams_prerolled (demux) && !force) {
- GST_DEBUG_OBJECT (demux, "not all streams with data beyond preroll yet");
- return FALSE;
- }
-
- if (G_UNLIKELY (!gst_asf_demux_get_first_ts (demux)))
- return FALSE;
-
- for (i = 0; i < demux->num_streams; ++i) {
- AsfStream *stream = &demux->stream[i];
-
- if (stream->payloads->len > 0) {
-
- if (stream->inspect_payload && /* dvr-ms required payload inspection */
- !stream->active && /* do not inspect active streams (caps were already set) */
- !gst_asf_demux_update_caps_from_payload (demux, stream) && /* failed to determine caps */
- stream->payloads->len < 20) { /* if we couldn't determine the caps from 20 packets then just give up and use whatever was in codecTag */
- /* try to gather some more data */
- return FALSE;
- }
- /* we don't check mutual exclusion stuff here; either we have data for
- * a stream, then we active it, or we don't, then we'll ignore it */
- GST_LOG_OBJECT (stream->pad, "is prerolled - activate!");
- gst_asf_demux_activate_stream (demux, stream);
- actual_streams += 1;
- } else {
- GST_LOG_OBJECT (stream->pad, "no data, ignoring stream");
- }
- }
-
- if (actual_streams == 0) {
- /* We don't have any streams activated ! */
- GST_ERROR_OBJECT (demux, "No streams activated!");
- return FALSE;
- }
-
- gst_asf_demux_release_old_pads (demux);
-
- demux->activated_streams = TRUE;
- GST_LOG_OBJECT (demux, "signalling no more pads");
- gst_element_no_more_pads (GST_ELEMENT (demux));
- return TRUE;
-}
-
-/* returns the stream that has a complete payload with the lowest timestamp
- * queued, or NULL (we push things by timestamp because during the internal
- * prerolling we might accumulate more data then the external queues can take,
- * so we'd lock up if we pushed all accumulated data for stream N in one go) */
-static AsfStream *
-gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
-{
- AsfPayload *best_payload = NULL;
- AsfStream *best_stream = NULL;
- guint i;
-
- for (i = 0; i < demux->num_streams; ++i) {
- AsfStream *stream;
- int j;
-
- stream = &demux->stream[i];
-
- /* Don't push any data until we have at least one payload that falls within
- * the current segment. This way we can remove out-of-segment payloads that
- * don't need to be decoded after a seek, sending only data from the
- * keyframe directly before our segment start */
- if (stream->payloads->len > 0) {
- AsfPayload *payload = NULL;
- gint last_idx;
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- /* Reverse playback */
-
- if (stream->is_video) {
- /* We have to push payloads from KF to the first frame we accumulated (reverse order) */
- if (stream->reverse_kf_ready) {
- payload =
- &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (payload->ts))) {
- /* TODO : remove payload from the list? */
- continue;
- }
- } else {
- continue;
- }
- } else {
- /* find first complete payload with timestamp */
- for (j = stream->payloads->len - 1;
- j >= 0 && (payload == NULL
- || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --j) {
- payload = &g_array_index (stream->payloads, AsfPayload, j);
- }
-
- /* If there's a complete payload queued for this stream */
- if (!gst_asf_payload_is_complete (payload))
- continue;
-
- }
- } else {
-
- /* find last payload with timestamp */
- for (last_idx = stream->payloads->len - 1;
- last_idx >= 0 && (payload == NULL
- || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --last_idx) {
- payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
- }
-
- /* if this is first payload after seek we might need to update the segment */
- if (GST_CLOCK_TIME_IS_VALID (payload->ts))
- gst_asf_demux_check_segment_ts (demux, payload->ts);
-
- if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
- (payload->ts < demux->segment.start))) {
- if (G_UNLIKELY ((demux->keyunit_sync) && (!demux->accurate)
- && payload->keyframe)) {
- GST_DEBUG_OBJECT (stream->pad,
- "Found keyframe, updating segment start to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (payload->ts));
- demux->segment.start = payload->ts;
- demux->segment.time = payload->ts;
- } else {
- GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
- GST_TIME_FORMAT " which is before our segment start %"
- GST_TIME_FORMAT ", not pushing yet",
- GST_TIME_ARGS (payload->ts),
- GST_TIME_ARGS (demux->segment.start));
- continue;
- }
- }
- payload = NULL;
- /* find first complete payload with timestamp */
- for (j = 0;
- j < stream->payloads->len && (payload == NULL
- || !GST_CLOCK_TIME_IS_VALID (payload->ts)); ++j) {
- payload = &g_array_index (stream->payloads, AsfPayload, j);
- }
-
- /* Now see if there's a complete payload queued for this stream */
- if (!gst_asf_payload_is_complete (payload))
- continue;
- }
-
- /* ... and whether its timestamp is lower than the current best */
- if (best_stream == NULL || best_payload->ts > payload->ts) {
- best_stream = stream;
- best_payload = payload;
- }
- }
- }
-
- return best_stream;
-}
-
-static GstFlowReturn
-gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force)
-{
- AsfStream *stream;
- GstFlowReturn ret = GST_FLOW_OK;
-
- if (G_UNLIKELY (!demux->activated_streams)) {
- if (!gst_asf_demux_check_activate_streams (demux, force))
- return GST_FLOW_OK;
- /* streams are now activated */
- }
-
- while ((stream = gst_asf_demux_find_stream_with_complete_payload (demux))) {
- AsfPayload *payload;
- GstClockTime timestamp = GST_CLOCK_TIME_NONE;
- GstClockTime duration = GST_CLOCK_TIME_NONE;
-
- /* wait until we had a chance to "lock on" some payload's timestamp */
- if (G_UNLIKELY (demux->need_newsegment
- && !GST_CLOCK_TIME_IS_VALID (demux->segment_ts)))
- return GST_FLOW_OK;
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
- && stream->payloads->len) {
- payload = &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
- } else {
- payload = &g_array_index (stream->payloads, AsfPayload, 0);
- }
-
- /* do we need to send a newsegment event */
- if ((G_UNLIKELY (demux->need_newsegment))) {
- GstEvent *segment_event;
-
- /* safe default if insufficient upstream info */
- if (!GST_CLOCK_TIME_IS_VALID (demux->in_gap))
- demux->in_gap = 0;
-
- if (demux->segment.stop == GST_CLOCK_TIME_NONE &&
- demux->segment.duration > 0) {
- /* slight HACK; prevent clipping of last bit */
- demux->segment.stop = demux->segment.duration + demux->in_gap;
- }
-
- /* FIXME : only if ACCURATE ! */
- if (G_LIKELY (demux->keyunit_sync && !demux->accurate
- && (GST_CLOCK_TIME_IS_VALID (payload->ts)))
- && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- GST_DEBUG ("Adjusting newsegment start to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (payload->ts));
- demux->segment.start = payload->ts;
- demux->segment.time = payload->ts;
- }
-
- GST_DEBUG_OBJECT (demux, "sending new-segment event %" GST_SEGMENT_FORMAT,
- &demux->segment);
-
- /* note: we fix up all timestamps to start from 0, so this should be ok */
- segment_event = gst_event_new_segment (&demux->segment);
- if (demux->segment_seqnum)
- gst_event_set_seqnum (segment_event, demux->segment_seqnum);
- gst_asf_demux_send_event_unlocked (demux, segment_event);
-
- /* now post any global tags we may have found */
- if (demux->taglist == NULL) {
- demux->taglist = gst_tag_list_new_empty ();
- gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
- }
-
- gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
- GST_TAG_CONTAINER_FORMAT, "ASF", NULL);
-
- GST_DEBUG_OBJECT (demux, "global tags: %" GST_PTR_FORMAT, demux->taglist);
- gst_asf_demux_send_event_unlocked (demux,
- gst_event_new_tag (demux->taglist));
- demux->taglist = NULL;
-
- demux->need_newsegment = FALSE;
- demux->segment_running = TRUE;
- }
-
- /* Do we have tags pending for this stream? */
- if (G_UNLIKELY (stream->pending_tags)) {
- GST_LOG_OBJECT (stream->pad, "%" GST_PTR_FORMAT, stream->pending_tags);
- gst_pad_push_event (stream->pad,
- gst_event_new_tag (stream->pending_tags));
- stream->pending_tags = NULL;
- }
-
- /* We have the whole packet now so we should push the packet to
- * the src pad now. First though we should check if we need to do
- * descrambling */
- if (G_UNLIKELY (stream->span > 1)) {
- gst_asf_demux_descramble_buffer (demux, stream, &payload->buf);
- }
-
- payload->buf = gst_buffer_make_writable (payload->buf);
-
- if (G_LIKELY (!payload->keyframe)) {
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DELTA_UNIT);
- }
-
- if (G_UNLIKELY (stream->discont)) {
- GST_DEBUG_OBJECT (stream->pad, "marking DISCONT on stream");
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
-
- if (G_UNLIKELY (stream->is_video && payload->par_x && payload->par_y &&
- (payload->par_x != stream->par_x) &&
- (payload->par_y != stream->par_y))) {
- GST_DEBUG ("Updating PAR (%d/%d => %d/%d)",
- stream->par_x, stream->par_y, payload->par_x, payload->par_y);
- stream->par_x = payload->par_x;
- stream->par_y = payload->par_y;
- stream->caps = gst_caps_make_writable (stream->caps);
- gst_caps_set_simple (stream->caps, "pixel-aspect-ratio",
- GST_TYPE_FRACTION, stream->par_x, stream->par_y, NULL);
- gst_pad_set_caps (stream->pad, stream->caps);
- }
-
- if (G_UNLIKELY (stream->interlaced != payload->interlaced)) {
- GST_DEBUG ("Updating interlaced status (%d => %d)", stream->interlaced,
- payload->interlaced);
- stream->interlaced = payload->interlaced;
- stream->caps = gst_caps_make_writable (stream->caps);
- gst_caps_set_simple (stream->caps, "interlace-mode", G_TYPE_BOOLEAN,
- (stream->interlaced ? "mixed" : "progressive"), NULL);
- gst_pad_set_caps (stream->pad, stream->caps);
- }
-
- /* (sort of) interpolate timestamps using upstream "frame of reference",
- * typically useful for live src, but might (unavoidably) mess with
- * position reporting if a live src is playing not so live content
- * (e.g. rtspsrc taking some time to fall back to tcp) */
- timestamp = payload->ts;
- if (GST_CLOCK_TIME_IS_VALID (timestamp)
- && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- timestamp += demux->in_gap;
-
- /* Check if we're after the segment already, if so no need to push
- * anything here */
- if (demux->segment.stop != -1 && timestamp > demux->segment.stop) {
- GST_DEBUG_OBJECT (stream->pad,
- "Payload after segment stop %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->segment.stop));
- ret =
- gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
- GST_FLOW_EOS);
- gst_buffer_unref (payload->buf);
- payload->buf = NULL;
- g_array_remove_index (stream->payloads, 0);
- /* Break out as soon as we have an issue */
- if (G_UNLIKELY (ret != GST_FLOW_OK))
- break;
-
- continue;
- }
- }
-
- GST_BUFFER_PTS (payload->buf) = timestamp;
-
- if (payload->duration == GST_CLOCK_TIME_NONE
- && stream->ext_props.avg_time_per_frame != 0) {
- duration = stream->ext_props.avg_time_per_frame * 100;
- } else {
- duration = payload->duration;
- }
- GST_BUFFER_DURATION (payload->buf) = duration;
-
- /* FIXME: we should really set durations on buffers if we can */
-
- GST_LOG_OBJECT (stream->pad, "pushing buffer, %" GST_PTR_FORMAT,
- payload->buf);
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video) {
- if (stream->reverse_kf_ready == TRUE && stream->kf_pos == 0) {
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
- }
- } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
- GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
- }
-
-
- if (stream->active) {
- if (G_UNLIKELY (stream->first_buffer)) {
- if (stream->streamheader != NULL) {
- GST_DEBUG_OBJECT (stream->pad,
- "Pushing streamheader before first buffer");
- gst_pad_push (stream->pad, gst_buffer_ref (stream->streamheader));
- }
- stream->first_buffer = FALSE;
- }
-
- if (GST_CLOCK_TIME_IS_VALID (timestamp)
- && timestamp > demux->segment.position) {
- demux->segment.position = timestamp;
- if (GST_CLOCK_TIME_IS_VALID (duration))
- demux->segment.position += timestamp;
- }
-
- ret = gst_pad_push (stream->pad, payload->buf);
- ret =
- gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
- ret);
- } else {
- gst_buffer_unref (payload->buf);
- ret = GST_FLOW_OK;
- }
- payload->buf = NULL;
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
- && stream->reverse_kf_ready) {
- g_array_remove_index (stream->payloads, stream->kf_pos);
- stream->kf_pos--;
-
- if (stream->reverse_kf_ready == TRUE && stream->kf_pos < 0) {
- stream->kf_pos = 0;
- stream->reverse_kf_ready = FALSE;
- }
- } else {
- g_array_remove_index (stream->payloads, 0);
- }
-
- /* Break out as soon as we have an issue */
- if (G_UNLIKELY (ret != GST_FLOW_OK))
- break;
- }
-
- return ret;
-}
-
-static gboolean
-gst_asf_demux_check_buffer_is_header (GstASFDemux * demux, GstBuffer * buf)
-{
- AsfObject obj;
- GstMapInfo map;
- gboolean valid;
- g_assert (buf != NULL);
-
- GST_LOG_OBJECT (demux, "Checking if buffer is a header");
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
-
- /* we return false on buffer too small */
- if (map.size < ASF_OBJECT_HEADER_SIZE) {
- gst_buffer_unmap (buf, &map);
- return FALSE;
- }
-
- /* check if it is a header */
- valid =
- asf_demux_peek_object (demux, map.data, ASF_OBJECT_HEADER_SIZE, &obj,
- TRUE);
- gst_buffer_unmap (buf, &map);
- if (valid && obj.id == ASF_OBJ_HEADER) {
- return TRUE;
- }
- return FALSE;
-}
-
-static gboolean
-gst_asf_demux_check_chained_asf (GstASFDemux * demux)
-{
- guint64 off = demux->data_offset + (demux->packet * demux->packet_size);
- GstFlowReturn ret = GST_FLOW_OK;
- GstBuffer *buf = NULL;
- gboolean header = FALSE;
-
- /* TODO maybe we should skip index objects after the data and look
- * further for a new header */
- if (gst_asf_demux_pull_data (demux, off, ASF_OBJECT_HEADER_SIZE, &buf, &ret)) {
- g_assert (buf != NULL);
- /* check if it is a header */
- if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
- GST_DEBUG_OBJECT (demux, "new base offset: %" G_GUINT64_FORMAT, off);
- demux->base_offset = off;
- header = TRUE;
- }
-
- gst_buffer_unref (buf);
- }
-
- return header;
-}
-
-static void
-gst_asf_demux_loop (GstASFDemux * demux)
-{
- GstFlowReturn flow = GST_FLOW_OK;
- GstBuffer *buf = NULL;
- guint64 off;
-
- if (G_UNLIKELY (demux->state == GST_ASF_DEMUX_STATE_HEADER)) {
- if (!gst_asf_demux_pull_headers (demux, &flow)) {
- goto pause;
- }
-
- flow = gst_asf_demux_pull_indices (demux);
- if (flow != GST_FLOW_OK)
- goto pause;
- }
-
- g_assert (demux->state == GST_ASF_DEMUX_STATE_DATA);
-
- if (G_UNLIKELY (demux->num_packets != 0
- && demux->packet >= demux->num_packets))
- goto eos;
-
- GST_LOG_OBJECT (demux, "packet %u/%u", (guint) demux->packet + 1,
- (guint) demux->num_packets);
-
- off = demux->data_offset + (demux->packet * demux->packet_size);
-
- if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, off,
- demux->packet_size * demux->speed_packets, &buf, &flow))) {
- GST_DEBUG_OBJECT (demux, "got flow %s", gst_flow_get_name (flow));
- if (flow == GST_FLOW_EOS) {
- goto eos;
- } else if (flow == GST_FLOW_FLUSHING) {
- GST_DEBUG_OBJECT (demux, "Not fatal");
- goto pause;
- } else {
- goto read_failed;
- }
- }
-
- if (G_LIKELY (demux->speed_packets == 1)) {
- GstAsfDemuxParsePacketError err;
- err = gst_asf_demux_parse_packet (demux, buf);
- if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
- /* when we don't know when the data object ends, we should check
- * for a chained asf */
- if (demux->num_packets == 0) {
- if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
- GST_INFO_OBJECT (demux, "Chained asf found");
- demux->base_offset = off;
- gst_asf_demux_reset (demux, TRUE);
- gst_buffer_unref (buf);
- return;
- }
- }
- /* FIXME: We should tally up fatal errors and error out only
- * after a few broken packets in a row? */
-
- GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
- gst_buffer_unref (buf);
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
- && !demux->seek_to_cur_pos) {
- --demux->packet;
- if (demux->packet < 0) {
- goto eos;
- }
- } else {
- ++demux->packet;
- }
-
- return;
- }
-
- flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
-
- if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
- && !demux->seek_to_cur_pos) {
- --demux->packet;
- if (demux->packet < 0) {
- goto eos;
- }
- } else {
- ++demux->packet;
- }
-
- } else {
- guint n;
- for (n = 0; n < demux->speed_packets; n++) {
- GstBuffer *sub;
- GstAsfDemuxParsePacketError err;
-
- sub =
- gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
- n * demux->packet_size, demux->packet_size);
- err = gst_asf_demux_parse_packet (demux, sub);
- if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
- /* when we don't know when the data object ends, we should check
- * for a chained asf */
- if (demux->num_packets == 0) {
- if (gst_asf_demux_check_buffer_is_header (demux, sub)) {
- GST_INFO_OBJECT (demux, "Chained asf found");
- demux->base_offset = off + n * demux->packet_size;
- gst_asf_demux_reset (demux, TRUE);
- gst_buffer_unref (sub);
- gst_buffer_unref (buf);
- return;
- }
- }
- /* FIXME: We should tally up fatal errors and error out only
- * after a few broken packets in a row? */
-
- GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
- flow = GST_FLOW_OK;
- }
-
- gst_buffer_unref (sub);
-
- if (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)
- flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
-
- ++demux->packet;
-
- }
-
- /* reset speed pull */
- demux->speed_packets = 1;
- }
-
- gst_buffer_unref (buf);
-
- if (G_UNLIKELY ((demux->num_packets > 0
- && demux->packet >= demux->num_packets)
- || flow == GST_FLOW_EOS)) {
- GST_LOG_OBJECT (demux, "reached EOS");
- goto eos;
- }
-
- if (G_UNLIKELY (flow != GST_FLOW_OK)) {
- GST_DEBUG_OBJECT (demux, "pushing complete payloads failed");
- goto pause;
- }
-
- /* check if we're at the end of the configured segment */
- /* FIXME: check if segment end reached etc. */
-
- return;
-
-eos:
- {
- /* if we haven't activated our streams yet, this might be because we have
- * less data queued than required for preroll; force stream activation and
- * send any pending payloads before sending EOS */
- if (!demux->activated_streams)
- flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
-
- /* we want to push an eos or post a segment-done in any case */
- if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- gint64 stop;
-
- /* for segment playback we need to post when (in stream time)
- * we stopped, this is either stop (when set) or the duration. */
- if ((stop = demux->segment.stop) == -1)
- stop = demux->segment.duration;
-
- GST_INFO_OBJECT (demux, "Posting segment-done, at end of segment");
- gst_element_post_message (GST_ELEMENT_CAST (demux),
- gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
- stop));
- gst_asf_demux_send_event_unlocked (demux,
- gst_event_new_segment_done (GST_FORMAT_TIME, stop));
- } else if (flow != GST_FLOW_EOS) {
- /* check if we have a chained asf, in case, we don't eos yet */
- if (gst_asf_demux_check_chained_asf (demux)) {
- GST_INFO_OBJECT (demux, "Chained ASF starting");
- gst_asf_demux_reset (demux, TRUE);
- return;
- }
- }
-
- if (!(demux->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
- if (demux->activated_streams) {
- /* normal playback, send EOS to all linked pads */
- GST_INFO_OBJECT (demux, "Sending EOS, at end of stream");
- gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
- } else {
- GST_WARNING_OBJECT (demux, "EOS without exposed streams");
- flow = GST_FLOW_EOS;
- }
- }
- /* ... and fall through to pause */
- }
-pause:
- {
- GST_DEBUG_OBJECT (demux, "pausing task, flow return: %s",
- gst_flow_get_name (flow));
- demux->segment_running = FALSE;
- gst_pad_pause_task (demux->sinkpad);
-
- /* For the error cases */
- if (flow == GST_FLOW_EOS && !demux->activated_streams) {
- GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
- ("This doesn't seem to be an ASF file"));
- } else if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
- /* Post an error. Hopefully something else already has, but if not... */
- GST_ELEMENT_FLOW_ERROR (demux, flow);
- gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
- }
-
- return;
- }
-
-/* ERRORS */
-read_failed:
- {
- GST_DEBUG_OBJECT (demux, "Read failed, doh");
- flow = GST_FLOW_EOS;
- goto pause;
- }
-#if 0
- /* See FIXMEs above */
-parse_error:
- {
- gst_buffer_unref (buf);
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("Error parsing ASF packet %u", (guint) demux->packet));
- gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
- flow = GST_FLOW_ERROR;
- goto pause;
- }
-#endif
-}
-
-#define GST_ASF_DEMUX_CHECK_HEADER_YES 0
-#define GST_ASF_DEMUX_CHECK_HEADER_NO 1
-#define GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA 2
-
-static gint
-gst_asf_demux_check_header (GstASFDemux * demux)
-{
- AsfObject obj;
- guint8 *cdata = (guint8 *) gst_adapter_map (demux->adapter,
- ASF_OBJECT_HEADER_SIZE);
- if (cdata == NULL) /* need more data */
- return GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA;
-
- if (asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, FALSE)
- && obj.id == ASF_OBJ_HEADER) {
- return GST_ASF_DEMUX_CHECK_HEADER_YES;
- }
-
- return GST_ASF_DEMUX_CHECK_HEADER_NO;
-}
-
-static GstFlowReturn
-gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- GstASFDemux *demux;
-
- demux = GST_ASF_DEMUX (parent);
-
- GST_LOG_OBJECT (demux,
- "buffer: size=%" G_GSIZE_FORMAT ", offset=%" G_GINT64_FORMAT ", time=%"
- GST_TIME_FORMAT, gst_buffer_get_size (buf), GST_BUFFER_OFFSET (buf),
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
- if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buf))) {
- GST_DEBUG_OBJECT (demux, "received DISCONT");
- gst_asf_demux_mark_discont (demux);
- }
-
- if (G_UNLIKELY ((!GST_CLOCK_TIME_IS_VALID (demux->in_gap) &&
- GST_BUFFER_TIMESTAMP_IS_VALID (buf)))) {
- demux->in_gap = GST_BUFFER_TIMESTAMP (buf) - demux->in_segment.start;
- GST_DEBUG_OBJECT (demux, "upstream segment start %" GST_TIME_FORMAT
- ", interpolation gap: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->in_segment.start), GST_TIME_ARGS (demux->in_gap));
- }
-
- gst_adapter_push (demux->adapter, buf);
-
- switch (demux->state) {
- case GST_ASF_DEMUX_STATE_INDEX:{
- gint result = gst_asf_demux_check_header (demux);
- if (result == GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA) /* need more data */
- break;
-
- if (result == GST_ASF_DEMUX_CHECK_HEADER_NO) {
- /* we don't care about this, probably an index */
- /* TODO maybe would be smarter to skip all the indices
- * until we got a new header or EOS to decide */
- GST_LOG_OBJECT (demux, "Received index object, its EOS");
- goto eos;
- } else {
- GST_INFO_OBJECT (demux, "Chained asf starting");
- /* cleanup and get ready for a chained asf */
- gst_asf_demux_reset (demux, TRUE);
- /* fall through */
- }
- }
- case GST_ASF_DEMUX_STATE_HEADER:{
- ret = gst_asf_demux_chain_headers (demux);
- if (demux->state != GST_ASF_DEMUX_STATE_DATA)
- break;
- /* otherwise fall through */
- }
- case GST_ASF_DEMUX_STATE_DATA:
- {
- guint64 data_size;
-
- data_size = demux->packet_size;
-
- while (gst_adapter_available (demux->adapter) >= data_size) {
- GstBuffer *buf;
- GstAsfDemuxParsePacketError err;
-
- /* we don't know the length of the stream
- * check for a chained asf every time */
- if (demux->num_packets == 0) {
- gint result = gst_asf_demux_check_header (demux);
-
- if (result == GST_ASF_DEMUX_CHECK_HEADER_YES) {
- GST_INFO_OBJECT (demux, "Chained asf starting");
- /* cleanup and get ready for a chained asf */
- gst_asf_demux_reset (demux, TRUE);
- break;
- }
- } else if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
- && demux->packet >= demux->num_packets)) {
- /* do not overshoot data section when streaming */
- break;
- }
-
- buf = gst_adapter_take_buffer (demux->adapter, data_size);
-
- /* FIXME: We should tally up fatal errors and error out only
- * after a few broken packets in a row? */
- err = gst_asf_demux_parse_packet (demux, buf);
-
- gst_buffer_unref (buf);
-
- if (G_LIKELY (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE))
- ret = gst_asf_demux_push_complete_payloads (demux, FALSE);
- else
- GST_WARNING_OBJECT (demux, "Parse error");
-
- if (demux->packet >= 0)
- ++demux->packet;
- }
- if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
- && demux->packet >= demux->num_packets)) {
- demux->state = GST_ASF_DEMUX_STATE_INDEX;
- }
- break;
- }
- default:
- g_assert_not_reached ();
- }
-
-done:
- if (ret != GST_FLOW_OK)
- GST_DEBUG_OBJECT (demux, "flow: %s", gst_flow_get_name (ret));
-
- return ret;
-
-eos:
- {
- GST_DEBUG_OBJECT (demux, "Handled last packet, setting EOS");
- ret = GST_FLOW_EOS;
- goto done;
- }
-}
-
-static inline gboolean
-gst_asf_demux_skip_bytes (guint num_bytes, guint8 ** p_data, guint64 * p_size)
-{
- if (*p_size < num_bytes)
- return FALSE;
-
- *p_data += num_bytes;
- *p_size -= num_bytes;
- return TRUE;
-}
-
-static inline guint8
-gst_asf_demux_get_uint8 (guint8 ** p_data, guint64 * p_size)
-{
- guint8 ret;
-
- g_assert (*p_size >= 1);
- ret = GST_READ_UINT8 (*p_data);
- *p_data += sizeof (guint8);
- *p_size -= sizeof (guint8);
- return ret;
-}
-
-static inline guint16
-gst_asf_demux_get_uint16 (guint8 ** p_data, guint64 * p_size)
-{
- guint16 ret;
-
- g_assert (*p_size >= 2);
- ret = GST_READ_UINT16_LE (*p_data);
- *p_data += sizeof (guint16);
- *p_size -= sizeof (guint16);
- return ret;
-}
-
-static inline guint32
-gst_asf_demux_get_uint32 (guint8 ** p_data, guint64 * p_size)
-{
- guint32 ret;
-
- g_assert (*p_size >= 4);
- ret = GST_READ_UINT32_LE (*p_data);
- *p_data += sizeof (guint32);
- *p_size -= sizeof (guint32);
- return ret;
-}
-
-static inline guint64
-gst_asf_demux_get_uint64 (guint8 ** p_data, guint64 * p_size)
-{
- guint64 ret;
-
- g_assert (*p_size >= 8);
- ret = GST_READ_UINT64_LE (*p_data);
- *p_data += sizeof (guint64);
- *p_size -= sizeof (guint64);
- return ret;
-}
-
-static gboolean
-gst_asf_demux_get_buffer (GstBuffer ** p_buf, guint num_bytes_to_read,
- guint8 ** p_data, guint64 * p_size)
-{
- *p_buf = NULL;
-
- if (*p_size < num_bytes_to_read)
- return FALSE;
-
- *p_buf = gst_buffer_new_and_alloc (num_bytes_to_read);
- gst_buffer_fill (*p_buf, 0, *p_data, num_bytes_to_read);
-
- *p_data += num_bytes_to_read;
- *p_size -= num_bytes_to_read;
-
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_bytes (guint8 ** p_buf, guint64 num_bytes_to_read,
- guint8 ** p_data, guint64 * p_size)
-{
- *p_buf = NULL;
-
- if (num_bytes_to_read >= G_MAXUINT)
- return FALSE;
-
- if (*p_size < num_bytes_to_read)
- return FALSE;
-
- *p_buf = g_memdup2 (*p_data, num_bytes_to_read);
- *p_data += num_bytes_to_read;
- *p_size -= num_bytes_to_read;
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_string (gchar ** p_str, guint16 * p_strlen,
- guint8 ** p_data, guint64 * p_size)
-{
- guint16 s_length;
- guint8 *s;
-
- *p_str = NULL;
-
- if (*p_size < 2)
- return FALSE;
-
- s_length = gst_asf_demux_get_uint16 (p_data, p_size);
-
- if (p_strlen)
- *p_strlen = s_length;
-
- if (s_length == 0) {
- GST_WARNING ("zero-length string");
- *p_str = g_strdup ("");
- return TRUE;
- }
-
- if (!gst_asf_demux_get_bytes (&s, s_length, p_data, p_size))
- return FALSE;
-
- g_assert (s != NULL);
-
- /* just because They don't exist doesn't
- * mean They are not out to get you ... */
- if (s[s_length - 1] != '\0') {
- s = g_realloc (s, s_length + 1);
- s[s_length] = '\0';
- }
-
- *p_str = (gchar *) s;
- return TRUE;
-}
-
-
-static void
-gst_asf_demux_get_guid (ASFGuid * guid, guint8 ** p_data, guint64 * p_size)
-{
- g_assert (*p_size >= 4 * sizeof (guint32));
-
- guid->v1 = gst_asf_demux_get_uint32 (p_data, p_size);
- guid->v2 = gst_asf_demux_get_uint32 (p_data, p_size);
- guid->v3 = gst_asf_demux_get_uint32 (p_data, p_size);
- guid->v4 = gst_asf_demux_get_uint32 (p_data, p_size);
-}
-
-static gboolean
-gst_asf_demux_get_stream_audio (asf_stream_audio * audio, guint8 ** p_data,
- guint64 * p_size)
-{
- if (*p_size < (2 + 2 + 4 + 4 + 2 + 2 + 2))
- return FALSE;
-
- /* WAVEFORMATEX Structure */
- audio->codec_tag = gst_asf_demux_get_uint16 (p_data, p_size);
- audio->channels = gst_asf_demux_get_uint16 (p_data, p_size);
- audio->sample_rate = gst_asf_demux_get_uint32 (p_data, p_size);
- audio->byte_rate = gst_asf_demux_get_uint32 (p_data, p_size);
- audio->block_align = gst_asf_demux_get_uint16 (p_data, p_size);
- audio->word_size = gst_asf_demux_get_uint16 (p_data, p_size);
- /* Codec specific data size */
- audio->size = gst_asf_demux_get_uint16 (p_data, p_size);
- if (audio->size > *p_size) {
- GST_WARNING ("Corrupted audio codec_data (should be at least %u bytes, is %"
- G_GUINT64_FORMAT " long)", audio->size, *p_size);
- return FALSE;
- }
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_stream_video (asf_stream_video * video, guint8 ** p_data,
- guint64 * p_size)
-{
- if (*p_size < (4 + 4 + 1 + 2))
- return FALSE;
-
- video->width = gst_asf_demux_get_uint32 (p_data, p_size);
- video->height = gst_asf_demux_get_uint32 (p_data, p_size);
- video->unknown = gst_asf_demux_get_uint8 (p_data, p_size);
- video->size = gst_asf_demux_get_uint16 (p_data, p_size);
- return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_stream_video_format (asf_stream_video_format * fmt,
- guint8 ** p_data, guint64 * p_size)
-{
- if (*p_size < (4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4))
- return FALSE;
-
- fmt->size = gst_asf_demux_get_uint32 (p_data, p_size);
- /* Sanity checks */
- if (fmt->size < 40) {
- GST_WARNING ("Corrupted asf_stream_video_format (size < 40)");
- return FALSE;
- }
- if ((guint64) fmt->size - 4 > *p_size) {
- GST_WARNING ("Corrupted asf_stream_video_format (codec_data is too small)");
- return FALSE;
- }
- fmt->width = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->height = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->planes = gst_asf_demux_get_uint16 (p_data, p_size);
- fmt->depth = gst_asf_demux_get_uint16 (p_data, p_size);
- fmt->tag = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->image_size = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->xpels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->ypels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->num_colors = gst_asf_demux_get_uint32 (p_data, p_size);
- fmt->imp_colors = gst_asf_demux_get_uint32 (p_data, p_size);
- return TRUE;
-}
-
-AsfStream *
-gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id)
-{
- guint i;
-
- for (i = 0; i < demux->num_streams; i++) {
- if (demux->stream[i].id == id)
- return &demux->stream[i];
- }
-
- if (gst_asf_demux_is_unknown_stream (demux, id))
- GST_WARNING ("Segment found for undefined stream: (%d)", id);
- return NULL;
-}
-
-static AsfStream *
-gst_asf_demux_setup_pad (GstASFDemux * demux, GstPad * src_pad,
- GstCaps * caps, guint16 id, gboolean is_video, GstBuffer * streamheader,
- GstTagList * tags)
-{
- AsfStream *stream;
-
- gst_pad_use_fixed_caps (src_pad);
- gst_pad_set_caps (src_pad, caps);
-
- gst_pad_set_event_function (src_pad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_event));
- gst_pad_set_query_function (src_pad,
- GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_query));
-
- stream = &demux->stream[demux->num_streams];
- stream->caps = caps;
- stream->pad = src_pad;
- stream->id = id;
- stream->fps_known = !is_video; /* bit hacky for audio */
- stream->is_video = is_video;
- stream->pending_tags = tags;
- stream->discont = TRUE;
- stream->first_buffer = TRUE;
- stream->streamheader = streamheader;
- if (stream->streamheader) {
- stream->streamheader = gst_buffer_make_writable (streamheader);
- GST_BUFFER_FLAG_SET (stream->streamheader, GST_BUFFER_FLAG_HEADER);
- }
- if (is_video) {
- GstStructure *st;
- gint par_x, par_y;
- st = gst_caps_get_structure (caps, 0);
- if (gst_structure_get_fraction (st, "pixel-aspect-ratio", &par_x, &par_y) &&
- par_x > 0 && par_y > 0) {
- GST_DEBUG ("PAR %d/%d", par_x, par_y);
- stream->par_x = par_x;
- stream->par_y = par_y;
- }
- }
-
- stream->payloads = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
-
- /* TODO: create this array during reverse play? */
- stream->payloads_rev = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
-
- GST_INFO ("Created pad %s for stream %u with caps %" GST_PTR_FORMAT,
- GST_PAD_NAME (src_pad), demux->num_streams, caps);
-
- ++demux->num_streams;
-
- stream->active = FALSE;
-
- return stream;
-}
-
-static void
-gst_asf_demux_add_stream_headers_to_caps (GstASFDemux * demux,
- GstBuffer * buffer, GstStructure * structure)
-{
- GValue arr_val = G_VALUE_INIT;
- GValue buf_val = G_VALUE_INIT;
-
- g_value_init (&arr_val, GST_TYPE_ARRAY);
- g_value_init (&buf_val, GST_TYPE_BUFFER);
-
- gst_value_set_buffer (&buf_val, buffer);
- gst_value_array_append_and_take_value (&arr_val, &buf_val);
-
- gst_structure_take_value (structure, "streamheader", &arr_val);
-}
-
-static AsfStream *
-gst_asf_demux_add_audio_stream (GstASFDemux * demux,
- asf_stream_audio * audio, guint16 id, guint8 ** p_data, guint64 * p_size)
-{
- GstTagList *tags = NULL;
- GstBuffer *extradata = NULL;
- GstPad *src_pad;
- GstCaps *caps;
- guint16 size_left = 0;
- gchar *codec_name = NULL;
- gchar *name = NULL;
-
- size_left = audio->size;
-
- /* Create the audio pad */
- name = g_strdup_printf ("audio_%u", demux->num_audio_streams);
-
- src_pad = gst_pad_new_from_static_template (&audio_src_template, name);
- g_free (name);
-
- /* Swallow up any left over data and set up the
- * standard properties from the header info */
- if (size_left) {
- GST_INFO_OBJECT (demux, "Audio header contains %d bytes of "
- "codec specific data", size_left);
-
- g_assert (size_left <= *p_size);
- gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
- }
-
- /* asf_stream_audio is the same as gst_riff_strf_auds, but with an
- * additional two bytes indicating extradata. */
- /* FIXME: Handle the channel reorder map here */
- caps = gst_riff_create_audio_caps (audio->codec_tag, NULL,
- (gst_riff_strf_auds *) audio, extradata, NULL, &codec_name, NULL);
-
- if (caps == NULL) {
- caps = gst_caps_new_simple ("audio/x-asf-unknown", "codec_id",
- G_TYPE_INT, (gint) audio->codec_tag, NULL);
- }
-
- /* Informing about that audio format we just added */
- if (codec_name) {
- tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, codec_name, NULL);
- g_free (codec_name);
- }
-
- if (audio->byte_rate > 0) {
- /* Some ASF files have no bitrate props object (often seen with
- * ASF files that contain raw audio data). Example files can
- * be generated with FFmpeg (tested with v2.8.6), like this:
- *
- * ffmpeg -i sine-wave.wav -c:a pcm_alaw file.asf
- *
- * In this case, if audio->byte_rate is nonzero, use that as
- * the bitrate. */
-
- guint bitrate = audio->byte_rate * 8;
-
- if (tags == NULL)
- tags = gst_tag_list_new_empty ();
-
- /* Add bitrate, but only if there is none set already, since
- * this is just a fallback in case there is no bitrate tag
- * already present */
- gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_BITRATE, bitrate, NULL);
- }
-
- if (extradata)
- gst_buffer_unref (extradata);
-
- GST_INFO ("Adding audio stream #%u, id %u codec %u (0x%04x), tags=%"
- GST_PTR_FORMAT, demux->num_audio_streams, id, audio->codec_tag,
- audio->codec_tag, tags);
-
- ++demux->num_audio_streams;
-
- return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
-}
-
-static AsfStream *
-gst_asf_demux_add_video_stream (GstASFDemux * demux,
- asf_stream_video_format * video, guint16 id,
- guint8 ** p_data, guint64 * p_size)
-{
- GstTagList *tags = NULL;
- GstStructure *caps_s;
- GstBuffer *extradata = NULL;
- GstPad *src_pad;
- GstCaps *caps;
- gchar *str;
- gchar *name = NULL;
- gchar *codec_name = NULL;
- guint64 size_left = video->size - 40;
- GstBuffer *streamheader = NULL;
- guint par_w = 1, par_h = 1;
-
- /* Create the video pad */
- name = g_strdup_printf ("video_%u", demux->num_video_streams);
- src_pad = gst_pad_new_from_static_template (&video_src_template, name);
- g_free (name);
-
- /* Now try some gstreamer formatted MIME types (from gst_avi_demux_strf_vids) */
- if (size_left) {
- GST_LOG ("Video header has %" G_GUINT64_FORMAT
- " bytes of codec specific data (vs %" G_GUINT64_FORMAT ")", size_left,
- *p_size);
- g_assert (size_left <= *p_size);
- gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
- }
-
- GST_DEBUG ("video codec %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
-
- /* yes, asf_stream_video_format and gst_riff_strf_vids are the same */
- caps = gst_riff_create_video_caps (video->tag, NULL,
- (gst_riff_strf_vids *) video, extradata, NULL, &codec_name);
-
- if (caps == NULL) {
- caps = gst_caps_new_simple ("video/x-asf-unknown", "fourcc",
- G_TYPE_UINT, video->tag, NULL);
- } else {
- GstStructure *s;
- gint ax, ay;
-
- s = gst_asf_demux_get_metadata_for_stream (demux, id);
- if (gst_structure_get_int (s, "AspectRatioX", &ax) &&
- gst_structure_get_int (s, "AspectRatioY", &ay) && (ax > 0 && ay > 0)) {
- par_w = ax;
- par_h = ay;
- gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
- ax, ay, NULL);
- } else {
- guint ax, ay;
- /* retry with the global metadata */
- GST_DEBUG ("Retrying with global metadata %" GST_PTR_FORMAT,
- demux->global_metadata);
- s = demux->global_metadata;
- if (gst_structure_get_uint (s, "AspectRatioX", &ax) &&
- gst_structure_get_uint (s, "AspectRatioY", &ay)) {
- GST_DEBUG ("ax:%d, ay:%d", ax, ay);
- if (ax > 0 && ay > 0) {
- par_w = ax;
- par_h = ay;
- gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
- ax, ay, NULL);
- }
- }
- }
- s = gst_caps_get_structure (caps, 0);
- gst_structure_remove_field (s, "framerate");
- }
-
- caps_s = gst_caps_get_structure (caps, 0);
-
- /* add format field with fourcc to WMV/VC1 caps to differentiate variants */
- if (gst_structure_has_name (caps_s, "video/x-wmv")) {
- str = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
- gst_caps_set_simple (caps, "format", G_TYPE_STRING, str, NULL);
- g_free (str);
-
- /* check if h264 has codec_data (avc) or streamheaders (bytestream) */
- } else if (gst_structure_has_name (caps_s, "video/x-h264")) {
- const GValue *value = gst_structure_get_value (caps_s, "codec_data");
- if (value) {
- GstBuffer *buf = gst_value_get_buffer (value);
- GstMapInfo mapinfo;
-
- if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
- if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
- /* this looks like a bytestream start */
- streamheader = gst_buffer_ref (buf);
- gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
- gst_structure_remove_field (caps_s, "codec_data");
- gst_structure_set (caps_s, "stream-format", G_TYPE_STRING,
- "byte-stream", NULL);
- } else {
- gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "avc",
- NULL);
- }
-
- gst_buffer_unmap (buf, &mapinfo);
- }
- } else {
- gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "byte-stream",
- NULL);
- }
- }
-
- /* For a 3D video, set multiview information into the caps based on
- * what was detected during object parsing */
- if (demux->asf_3D_mode != GST_ASF_3D_NONE) {
- GstVideoMultiviewMode mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE;
- GstVideoMultiviewFlags mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
- const gchar *mview_mode_str;
-
- switch (demux->asf_3D_mode) {
- case GST_ASF_3D_SIDE_BY_SIDE_HALF_LR:
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
- break;
- case GST_ASF_3D_SIDE_BY_SIDE_HALF_RL:
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
- mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
- break;
- case GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR:
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
- break;
- case GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL:
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
- mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
- break;
- case GST_ASF_3D_DUAL_STREAM:{
- gboolean is_right_view = FALSE;
- /* if Advanced_Mutual_Exclusion object exists, use it
- * to figure out which is the left view (lower ID) */
- if (demux->mut_ex_streams != NULL) {
- guint length;
- gint i;
-
- length = g_slist_length (demux->mut_ex_streams);
-
- for (i = 0; i < length; i++) {
- gpointer v_s_id;
-
- v_s_id = g_slist_nth_data (demux->mut_ex_streams, i);
-
- GST_DEBUG_OBJECT (demux,
- "has Mutual_Exclusion object. stream id in object is %d",
- GPOINTER_TO_INT (v_s_id));
-
- if (id > GPOINTER_TO_INT (v_s_id))
- is_right_view = TRUE;
- }
- } else {
- /* if the Advaced_Mutual_Exclusion object doesn't exist, assume the
- * first video stream encountered has the lower ID */
- if (demux->num_video_streams > 0) {
- /* This is not the first video stream, assuming right eye view */
- is_right_view = TRUE;
- }
- }
- if (is_right_view)
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_RIGHT;
- else
- mv_mode = GST_VIDEO_MULTIVIEW_MODE_LEFT;
- break;
- }
- default:
- break;
- }
-
- GST_INFO_OBJECT (demux,
- "stream_id %d, has multiview-mode %d flags 0x%x", id, mv_mode,
- (guint) mv_flags);
-
- mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode);
- if (mview_mode_str != NULL) {
- if (gst_video_multiview_guess_half_aspect (mv_mode, video->width,
- video->height, par_w, par_h))
- mv_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
-
- gst_caps_set_simple (caps,
- "multiview-mode", G_TYPE_STRING, mview_mode_str,
- "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags,
- GST_FLAG_SET_MASK_EXACT, NULL);
- }
- }
-
- if (codec_name) {
- tags = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec_name, NULL);
- g_free (codec_name);
- }
-
- if (extradata)
- gst_buffer_unref (extradata);
-
- GST_INFO ("Adding video stream #%u, id %u, codec %"
- GST_FOURCC_FORMAT " (0x%08x)", demux->num_video_streams, id,
- GST_FOURCC_ARGS (video->tag), video->tag);
-
- ++demux->num_video_streams;
-
- return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
- streamheader, tags);
-}
-
-static void
-gst_asf_demux_activate_stream (GstASFDemux * demux, AsfStream * stream)
-{
- if (!stream->active) {
- GstEvent *event;
- gchar *stream_id;
-
- GST_INFO_OBJECT (demux, "Activating stream %2u, pad %s, caps %"
- GST_PTR_FORMAT, stream->id, GST_PAD_NAME (stream->pad), stream->caps);
- gst_pad_set_active (stream->pad, TRUE);
-
- stream_id =
- gst_pad_create_stream_id_printf (stream->pad, GST_ELEMENT_CAST (demux),
- "%03u", stream->id);
-
- event =
- gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
- if (event) {
- if (gst_event_parse_group_id (event, &demux->group_id))
- demux->have_group_id = TRUE;
- else
- demux->have_group_id = FALSE;
- gst_event_unref (event);
- } else if (!demux->have_group_id) {
- demux->have_group_id = TRUE;
- demux->group_id = gst_util_group_id_next ();
- }
-
- event = gst_event_new_stream_start (stream_id);
- if (demux->have_group_id)
- gst_event_set_group_id (event, demux->group_id);
-
- gst_pad_push_event (stream->pad, event);
- g_free (stream_id);
- gst_pad_set_caps (stream->pad, stream->caps);
-
- gst_element_add_pad (GST_ELEMENT_CAST (demux), stream->pad);
- gst_flow_combiner_add_pad (demux->flowcombiner, stream->pad);
- stream->active = TRUE;
- }
-}
-
-static AsfStream *
-gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- AsfCorrectionType correction_type;
- AsfStreamType stream_type;
- GstClockTime time_offset;
- gboolean is_encrypted G_GNUC_UNUSED;
- guint16 stream_id;
- guint16 flags;
- ASFGuid guid;
- guint stream_specific_size;
- guint type_specific_size G_GNUC_UNUSED;
- guint unknown G_GNUC_UNUSED;
- gboolean inspect_payload = FALSE;
- AsfStream *stream = NULL;
-
- /* Get the rest of the header's header */
- if (size < (16 + 16 + 8 + 4 + 4 + 2 + 4))
- goto not_enough_data;
-
- gst_asf_demux_get_guid (&guid, &data, &size);
- stream_type = gst_asf_demux_identify_guid (asf_stream_guids, &guid);
-
- gst_asf_demux_get_guid (&guid, &data, &size);
- correction_type = gst_asf_demux_identify_guid (asf_correction_guids, &guid);
-
- time_offset = gst_asf_demux_get_uint64 (&data, &size) * 100;
-
- type_specific_size = gst_asf_demux_get_uint32 (&data, &size);
- stream_specific_size = gst_asf_demux_get_uint32 (&data, &size);
-
- flags = gst_asf_demux_get_uint16 (&data, &size);
- stream_id = flags & 0x7f;
- is_encrypted = ! !(flags & 0x8000);
- unknown = gst_asf_demux_get_uint32 (&data, &size);
-
- GST_DEBUG_OBJECT (demux, "Found stream %u, time_offset=%" GST_TIME_FORMAT,
- stream_id, GST_TIME_ARGS (time_offset));
-
- /* dvr-ms has audio stream declared in stream specific data */
- if (stream_type == ASF_STREAM_EXT_EMBED_HEADER) {
- AsfExtStreamType ext_stream_type;
- gst_asf_demux_get_guid (&guid, &data, &size);
- ext_stream_type = gst_asf_demux_identify_guid (asf_ext_stream_guids, &guid);
-
- if (ext_stream_type == ASF_EXT_STREAM_AUDIO) {
- inspect_payload = TRUE;
-
- gst_asf_demux_get_guid (&guid, &data, &size);
- gst_asf_demux_get_uint32 (&data, &size);
- gst_asf_demux_get_uint32 (&data, &size);
- gst_asf_demux_get_uint32 (&data, &size);
- gst_asf_demux_get_guid (&guid, &data, &size);
- gst_asf_demux_get_uint32 (&data, &size);
- stream_type = ASF_STREAM_AUDIO;
- }
- }
-
- switch (stream_type) {
- case ASF_STREAM_AUDIO:{
- asf_stream_audio audio_object;
-
- if (!gst_asf_demux_get_stream_audio (&audio_object, &data, &size))
- goto not_enough_data;
-
- GST_INFO ("Object is an audio stream with %u bytes of additional data",
- audio_object.size);
-
- stream = gst_asf_demux_add_audio_stream (demux, &audio_object, stream_id,
- &data, &size);
-
- switch (correction_type) {
- case ASF_CORRECTION_ON:{
- guint span, packet_size, chunk_size, data_size, silence_data;
-
- GST_INFO ("Using error correction");
-
- if (size < (1 + 2 + 2 + 2 + 1))
- goto not_enough_data;
-
- span = gst_asf_demux_get_uint8 (&data, &size);
- packet_size = gst_asf_demux_get_uint16 (&data, &size);
- chunk_size = gst_asf_demux_get_uint16 (&data, &size);
- data_size = gst_asf_demux_get_uint16 (&data, &size);
- silence_data = gst_asf_demux_get_uint8 (&data, &size);
-
- stream->span = span;
-
- GST_DEBUG_OBJECT (demux, "Descrambling ps:%u cs:%u ds:%u s:%u sd:%u",
- packet_size, chunk_size, data_size, span, silence_data);
-
- if (stream->span > 1) {
- if (chunk_size == 0 || ((packet_size / chunk_size) <= 1)) {
- /* Disable descrambling */
- stream->span = 0;
- } else {
- /* FIXME: this else branch was added for
- * weird_al_yankovic - the saga begins.asf */
- stream->ds_packet_size = packet_size;
- stream->ds_chunk_size = chunk_size;
- }
- } else {
- /* Descambling is enabled */
- stream->ds_packet_size = packet_size;
- stream->ds_chunk_size = chunk_size;
- }
-#if 0
- /* Now skip the rest of the silence data */
- if (data_size > 1)
- gst_bytestream_flush (demux->bs, data_size - 1);
-#else
- /* FIXME: CHECKME. And why -1? */
- if (data_size > 1) {
- if (!gst_asf_demux_skip_bytes (data_size - 1, &data, &size)) {
- goto not_enough_data;
- }
- }
-#endif
- break;
- }
- case ASF_CORRECTION_OFF:{
- GST_INFO ("Error correction off");
- if (!gst_asf_demux_skip_bytes (stream_specific_size, &data, &size))
- goto not_enough_data;
- break;
- }
- default:
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("Audio stream using unknown error correction"));
- return NULL;
- }
-
- break;
- }
-
- case ASF_STREAM_VIDEO:{
- asf_stream_video_format video_format_object;
- asf_stream_video video_object;
- guint16 vsize;
-
- if (!gst_asf_demux_get_stream_video (&video_object, &data, &size))
- goto not_enough_data;
-
- vsize = video_object.size - 40; /* Byte order gets offset by single byte */
-
- GST_INFO ("object is a video stream with %u bytes of "
- "additional data", vsize);
-
- if (!gst_asf_demux_get_stream_video_format (&video_format_object,
- &data, &size)) {
- goto not_enough_data;
- }
-
- stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
- stream_id, &data, &size);
-
- break;
- }
-
- default:
- GST_WARNING_OBJECT (demux, "Unknown stream type for stream %u",
- stream_id);
- demux->other_streams =
- g_slist_append (demux->other_streams, GINT_TO_POINTER (stream_id));
- break;
- }
-
- if (stream) {
- stream->inspect_payload = inspect_payload;
- stream->type = stream_type;
- }
- return stream;
-
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "Unexpected end of data parsing stream object");
- /* we'll error out later if we found no streams */
- return NULL;
- }
-}
-
-static const gchar *
-gst_asf_demux_get_gst_tag_from_tag_name (const gchar * name_utf8)
-{
- /* *INDENT-OFF* */
- const struct
- {
- const gchar *asf_name;
- const gchar *gst_name;
- } tags[] = {
- {
- "WM/Genre", GST_TAG_GENRE}, {
- "WM/AlbumTitle", GST_TAG_ALBUM}, {
- "WM/AlbumArtist", GST_TAG_ARTIST}, {
- "WM/PartOfSet", GST_TAG_ALBUM_VOLUME_COUNT}, {
- "WM/Picture", GST_TAG_IMAGE}, {
- "WM/Track", GST_TAG_TRACK_NUMBER}, {
- "WM/TrackNumber", GST_TAG_TRACK_NUMBER}, {
- "WM/Year", GST_TAG_DATE_TIME}
- /* { "WM/Composer", GST_TAG_COMPOSER } */
- };
- /* *INDENT-ON* */
- gsize out;
- guint i;
-
- if (name_utf8 == NULL) {
- GST_WARNING ("Failed to convert name to UTF8, skipping");
- return NULL;
- }
-
- out = strlen (name_utf8);
-
- for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
- if (strncmp (tags[i].asf_name, name_utf8, out) == 0) {
- GST_LOG ("map tagname '%s' -> '%s'", name_utf8, tags[i].gst_name);
- return tags[i].gst_name;
- }
- }
-
- return NULL;
-}
-
-/* gst_asf_demux_add_global_tags() takes ownership of taglist! */
-static void
-gst_asf_demux_add_global_tags (GstASFDemux * demux, GstTagList * taglist)
-{
- GstTagList *t;
-
- GST_DEBUG_OBJECT (demux, "adding global tags: %" GST_PTR_FORMAT, taglist);
-
- if (taglist == NULL)
- return;
-
- if (gst_tag_list_is_empty (taglist)) {
- gst_tag_list_unref (taglist);
- return;
- }
-
- t = gst_tag_list_merge (demux->taglist, taglist, GST_TAG_MERGE_APPEND);
- gst_tag_list_set_scope (t, GST_TAG_SCOPE_GLOBAL);
- if (demux->taglist)
- gst_tag_list_unref (demux->taglist);
- gst_tag_list_unref (taglist);
- demux->taglist = t;
- GST_LOG_OBJECT (demux, "global tags now: %" GST_PTR_FORMAT, demux->taglist);
-}
-
-#define ASF_DEMUX_DATA_TYPE_UTF16LE_STRING 0
-#define ASF_DEMUX_DATA_TYPE_BYTE_ARRAY 1
-#define ASF_DEMUX_DATA_TYPE_BOOL 2
-#define ASF_DEMUX_DATA_TYPE_DWORD 3
-
-static void
-asf_demux_parse_picture_tag (GstTagList * tags, const guint8 * tag_data,
- guint tag_data_len)
-{
- GstByteReader r;
- const guint8 *img_data = NULL;
- guint32 img_data_len = 0;
- guint8 pic_type = 0;
-
- gst_byte_reader_init (&r, tag_data, tag_data_len);
-
- /* skip mime type string (we don't trust it and do our own typefinding),
- * and also skip the description string, since we don't use it */
- if (!gst_byte_reader_get_uint8 (&r, &pic_type) ||
- !gst_byte_reader_get_uint32_le (&r, &img_data_len) ||
- !gst_byte_reader_skip_string_utf16 (&r) ||
- !gst_byte_reader_skip_string_utf16 (&r) ||
- !gst_byte_reader_get_data (&r, img_data_len, &img_data)) {
- goto not_enough_data;
- }
-
-
- if (!gst_tag_list_add_id3_image (tags, img_data, img_data_len, pic_type))
- GST_DEBUG ("failed to add image extracted from WM/Picture tag to taglist");
-
- return;
-
-not_enough_data:
- {
- GST_DEBUG ("Failed to read WM/Picture tag: not enough data");
- GST_MEMDUMP ("WM/Picture data", tag_data, tag_data_len);
- return;
- }
-}
-
-/* Extended Content Description Object */
-static GstFlowReturn
-gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- /* Other known (and unused) 'text/unicode' metadata available :
- *
- * WM/Lyrics =
- * WM/MediaPrimaryClassID = {D1607DBC-E323-4BE2-86A1-48A42A28441E}
- * WMFSDKVersion = 9.00.00.2980
- * WMFSDKNeeded = 0.0.0.0000
- * WM/UniqueFileIdentifier = AMGa_id=R 15334;AMGp_id=P 5149;AMGt_id=T 2324984
- * WM/Publisher = 4AD
- * WM/Provider = AMG
- * WM/ProviderRating = 8
- * WM/ProviderStyle = Rock (similar to WM/Genre)
- * WM/GenreID (similar to WM/Genre)
- * WM/TrackNumber (same as WM/Track but as a string)
- *
- * Other known (and unused) 'non-text' metadata available :
- *
- * WM/EncodingTime
- * WM/MCDI
- * IsVBR
- *
- * We might want to read WM/TrackNumber and use atoi() if we don't have
- * WM/Track
- */
-
- GstTagList *taglist;
- guint16 blockcount, i;
- gboolean content3D = FALSE;
-
- /* *INDENT-OFF* */
- struct
- {
- const gchar *interleave_name;
- GstASF3DMode interleaving_type;
- } stereoscopic_layout_map[] = {
- {
- "SideBySideRF", GST_ASF_3D_SIDE_BY_SIDE_HALF_RL}, {
- "SideBySideLF", GST_ASF_3D_SIDE_BY_SIDE_HALF_LR}, {
- "OverUnderRT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL}, {
- "OverUnderLT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR}, {
- "DualStream", GST_ASF_3D_DUAL_STREAM}
- };
- /* *INDENT-ON* */
-
- GST_INFO_OBJECT (demux, "object is an extended content description");
-
- taglist = gst_tag_list_new_empty ();
-
- /* Content Descriptor Count */
- if (size < 2)
- goto not_enough_data;
-
- blockcount = gst_asf_demux_get_uint16 (&data, &size);
-
- for (i = 1; i <= blockcount; ++i) {
- const gchar *gst_tag_name;
- guint16 datatype;
- guint16 value_len;
- guint16 name_len;
- GValue tag_value = { 0, };
- gsize in, out;
- gchar *name;
- gchar *name_utf8 = NULL;
- gchar *value;
-
- /* Descriptor */
- if (!gst_asf_demux_get_string (&name, &name_len, &data, &size))
- goto not_enough_data;
-
- if (size < 2) {
- g_free (name);
- goto not_enough_data;
- }
- /* Descriptor Value Data Type */
- datatype = gst_asf_demux_get_uint16 (&data, &size);
-
- /* Descriptor Value (not really a string, but same thing reading-wise) */
- if (!gst_asf_demux_get_string (&value, &value_len, &data, &size)) {
- g_free (name);
- goto not_enough_data;
- }
-
- name_utf8 =
- g_convert (name, name_len, "UTF-8", "UTF-16LE", &in, &out, NULL);
-
- if (name_utf8 != NULL) {
- GST_DEBUG ("Found tag/metadata %s", name_utf8);
-
- gst_tag_name = gst_asf_demux_get_gst_tag_from_tag_name (name_utf8);
- GST_DEBUG ("gst_tag_name %s", GST_STR_NULL (gst_tag_name));
-
- switch (datatype) {
- case ASF_DEMUX_DATA_TYPE_UTF16LE_STRING:{
- gchar *value_utf8;
-
- value_utf8 = g_convert (value, value_len, "UTF-8", "UTF-16LE",
- &in, &out, NULL);
-
- /* get rid of tags with empty value */
- if (value_utf8 != NULL && *value_utf8 != '\0') {
- GST_DEBUG ("string value %s", value_utf8);
-
- value_utf8[out] = '\0';
-
- if (gst_tag_name != NULL) {
- if (strcmp (gst_tag_name, GST_TAG_DATE_TIME) == 0) {
- guint year = atoi (value_utf8);
-
- if (year > 0) {
- g_value_init (&tag_value, GST_TYPE_DATE_TIME);
- g_value_take_boxed (&tag_value, gst_date_time_new_y (year));
- }
- } else if (strcmp (gst_tag_name, GST_TAG_GENRE) == 0) {
- guint id3v1_genre_id;
- const gchar *genre_str;
-
- if (sscanf (value_utf8, "(%u)", &id3v1_genre_id) == 1 &&
- ((genre_str = gst_tag_id3_genre_get (id3v1_genre_id)))) {
- GST_DEBUG ("Genre: %s -> %s", value_utf8, genre_str);
- g_free (value_utf8);
- value_utf8 = g_strdup (genre_str);
- }
- } else if (!strcmp (gst_tag_name, GST_TAG_ALBUM_VOLUME_COUNT)) {
- guint num = 0, count = 0;
-
- if (sscanf (value_utf8, "%u/%u", &num, &count) == 2
- && num > 0 && num <= 99999 && count > 0 && count <= 99999) {
- GST_DEBUG ("Disc %u of %u (%s)", num, count, value_utf8);
- g_value_init (&tag_value, G_TYPE_UINT);
- /* disc number */
- g_value_set_uint (&tag_value, num);
- gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
- GST_TAG_ALBUM_VOLUME_NUMBER, &tag_value, NULL);
- /* disc count (will be added to the taglist below) */
- g_value_set_uint (&tag_value, count);
- } else {
- GST_DEBUG ("Couldn't parse PartOfSet value %s", value_utf8);
- }
- } else {
- GType tag_type;
-
- /* convert tag from string to other type if required */
- tag_type = gst_tag_get_type (gst_tag_name);
- g_value_init (&tag_value, tag_type);
- if (!gst_value_deserialize (&tag_value, value_utf8)) {
- GValue from_val = { 0, };
-
- g_value_init (&from_val, G_TYPE_STRING);
- g_value_set_string (&from_val, value_utf8);
- if (!g_value_transform (&from_val, &tag_value)) {
- GST_WARNING_OBJECT (demux,
- "Could not transform string tag to " "%s tag type %s",
- gst_tag_name, g_type_name (tag_type));
- g_value_unset (&tag_value);
- }
- g_value_unset (&from_val);
- }
- }
- } else {
- /* metadata ! */
- GST_DEBUG ("Setting metadata");
- g_value_init (&tag_value, G_TYPE_STRING);
- g_value_set_string (&tag_value, value_utf8);
- /* If we found a stereoscopic marker, look for StereoscopicLayout
- * metadata */
- if (content3D) {
- guint i;
- if (strncmp ("StereoscopicLayout", name_utf8,
- strlen (name_utf8)) == 0) {
- for (i = 0; i < G_N_ELEMENTS (stereoscopic_layout_map); i++) {
- if (g_str_equal (stereoscopic_layout_map[i].interleave_name,
- value_utf8)) {
- demux->asf_3D_mode =
- stereoscopic_layout_map[i].interleaving_type;
- GST_INFO ("find interleave type %u", demux->asf_3D_mode);
- }
- }
- }
- GST_INFO_OBJECT (demux, "3d type is %u", demux->asf_3D_mode);
- } else {
- demux->asf_3D_mode = GST_ASF_3D_NONE;
- GST_INFO_OBJECT (demux, "None 3d type");
- }
- }
- } else if (value_utf8 == NULL) {
- GST_WARNING ("Failed to convert string value to UTF8, skipping");
- } else {
- GST_DEBUG ("Skipping empty string value for %s",
- GST_STR_NULL (gst_tag_name));
- }
- g_free (value_utf8);
- break;
- }
- case ASF_DEMUX_DATA_TYPE_BYTE_ARRAY:{
- if (gst_tag_name) {
- if (!g_str_equal (gst_tag_name, GST_TAG_IMAGE)) {
- GST_FIXME ("Unhandled byte array tag %s",
- GST_STR_NULL (gst_tag_name));
- break;
- } else {
- asf_demux_parse_picture_tag (taglist, (guint8 *) value,
- value_len);
- }
- }
- break;
- }
- case ASF_DEMUX_DATA_TYPE_DWORD:{
- guint uint_val;
-
- if (value_len < 4)
- break;
-
- uint_val = GST_READ_UINT32_LE (value);
-
- /* this is the track number */
- g_value_init (&tag_value, G_TYPE_UINT);
-
- /* WM/Track counts from 0 */
- if (!strcmp (name_utf8, "WM/Track"))
- ++uint_val;
-
- g_value_set_uint (&tag_value, uint_val);
- break;
- }
- /* Detect 3D */
- case ASF_DEMUX_DATA_TYPE_BOOL:{
- gboolean bool_val;
-
- if (value_len < 4)
- break;
-
- bool_val = GST_READ_UINT32_LE (value);
-
- if (strncmp ("Stereoscopic", name_utf8, strlen (name_utf8)) == 0) {
- if (bool_val) {
- GST_INFO_OBJECT (demux, "This is 3D contents");
- content3D = TRUE;
- } else {
- GST_INFO_OBJECT (demux, "This is not 3D contenst");
- content3D = FALSE;
- }
- }
-
- break;
- }
- default:{
- GST_DEBUG ("Skipping tag %s of type %d", gst_tag_name, datatype);
- break;
- }
- }
-
- if (G_IS_VALUE (&tag_value)) {
- if (gst_tag_name) {
- GstTagMergeMode merge_mode = GST_TAG_MERGE_APPEND;
-
- /* WM/TrackNumber is more reliable than WM/Track, since the latter
- * is supposed to have a 0 base but is often wrongly written to start
- * from 1 as well, so prefer WM/TrackNumber when we have it: either
- * replace the value added earlier from WM/Track or put it first in
- * the list, so that it will get picked up by _get_uint() */
- if (strcmp (name_utf8, "WM/TrackNumber") == 0)
- merge_mode = GST_TAG_MERGE_REPLACE;
-
- gst_tag_list_add_values (taglist, merge_mode, gst_tag_name,
- &tag_value, NULL);
- } else {
- GST_DEBUG ("Setting global metadata %s", name_utf8);
- gst_structure_set_value (demux->global_metadata, name_utf8,
- &tag_value);
- }
-
- g_value_unset (&tag_value);
- }
- }
-
- g_free (name);
- g_free (value);
- g_free (name_utf8);
- }
-
- gst_asf_demux_add_global_tags (demux, taglist);
-
- return GST_FLOW_OK;
-
- /* Errors */
-not_enough_data:
- {
- GST_WARNING ("Unexpected end of data parsing ext content desc object");
- gst_tag_list_unref (taglist);
- return GST_FLOW_OK; /* not really fatal */
- }
-}
-
-static GstStructure *
-gst_asf_demux_get_metadata_for_stream (GstASFDemux * demux, guint stream_num)
-{
- gchar sname[32];
- guint i;
-
- g_snprintf (sname, sizeof (sname), "stream-%u", stream_num);
-
- for (i = 0; i < gst_caps_get_size (demux->metadata); ++i) {
- GstStructure *s;
-
- s = gst_caps_get_structure (demux->metadata, i);
- if (gst_structure_has_name (s, sname))
- return s;
- }
-
- gst_caps_append_structure (demux->metadata, gst_structure_new_empty (sname));
-
- /* try lookup again; demux->metadata took ownership of the structure, so we
- * can't really make any assumptions about what happened to it, so we can't
- * just return it directly after appending it */
- return gst_asf_demux_get_metadata_for_stream (demux, stream_num);
-}
-
-static GstFlowReturn
-gst_asf_demux_process_metadata (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- guint16 blockcount, i;
-
- GST_INFO_OBJECT (demux, "object is a metadata object");
-
- /* Content Descriptor Count */
- if (size < 2)
- goto not_enough_data;
-
- blockcount = gst_asf_demux_get_uint16 (&data, &size);
-
- for (i = 0; i < blockcount; ++i) {
- GstStructure *s;
- guint16 stream_num, name_len, data_type, lang_idx G_GNUC_UNUSED;
- guint32 data_len, ival;
- gchar *name_utf8;
-
- if (size < (2 + 2 + 2 + 2 + 4))
- goto not_enough_data;
-
- lang_idx = gst_asf_demux_get_uint16 (&data, &size);
- stream_num = gst_asf_demux_get_uint16 (&data, &size);
- name_len = gst_asf_demux_get_uint16 (&data, &size);
- data_type = gst_asf_demux_get_uint16 (&data, &size);
- data_len = gst_asf_demux_get_uint32 (&data, &size);
-
- if (size < name_len + data_len)
- goto not_enough_data;
-
- /* convert name to UTF-8 */
- name_utf8 = g_convert ((gchar *) data, name_len, "UTF-8", "UTF-16LE",
- NULL, NULL, NULL);
- gst_asf_demux_skip_bytes (name_len, &data, &size);
-
- if (name_utf8 == NULL) {
- GST_WARNING ("Failed to convert value name to UTF8, skipping");
- gst_asf_demux_skip_bytes (data_len, &data, &size);
- continue;
- }
-
- if (data_type != ASF_DEMUX_DATA_TYPE_DWORD) {
- gst_asf_demux_skip_bytes (data_len, &data, &size);
- g_free (name_utf8);
- continue;
- }
-
- /* read DWORD */
- if (size < 4) {
- g_free (name_utf8);
- goto not_enough_data;
- }
-
- ival = gst_asf_demux_get_uint32 (&data, &size);
-
- /* skip anything else there may be, just in case */
- gst_asf_demux_skip_bytes (data_len - 4, &data, &size);
-
- s = gst_asf_demux_get_metadata_for_stream (demux, stream_num);
- gst_structure_set (s, name_utf8, G_TYPE_INT, ival, NULL);
- g_free (name_utf8);
- }
-
- GST_INFO_OBJECT (demux, "metadata = %" GST_PTR_FORMAT, demux->metadata);
- return GST_FLOW_OK;
-
- /* Errors */
-not_enough_data:
- {
- GST_WARNING ("Unexpected end of data parsing metadata object");
- return GST_FLOW_OK; /* not really fatal */
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_header (GstASFDemux * demux, guint8 * data, guint64 size)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- guint32 i, num_objects;
- guint8 unknown G_GNUC_UNUSED;
-
- /* Get the rest of the header's header */
- if (size < (4 + 1 + 1))
- goto not_enough_data;
-
- num_objects = gst_asf_demux_get_uint32 (&data, &size);
- unknown = gst_asf_demux_get_uint8 (&data, &size);
- unknown = gst_asf_demux_get_uint8 (&data, &size);
-
- GST_INFO_OBJECT (demux, "object is a header with %u parts", num_objects);
- demux->saw_file_header = FALSE;
- /* Loop through the header's objects, processing those */
- for (i = 0; i < num_objects; ++i) {
- GST_INFO_OBJECT (demux, "reading header part %u", i);
- ret = gst_asf_demux_process_object (demux, &data, &size);
- if (ret != GST_FLOW_OK) {
- GST_WARNING ("process_object returned %s", gst_asf_get_flow_name (ret));
- break;
- }
- }
- if (!demux->saw_file_header) {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("Header does not have mandatory FILE section"));
- return GST_FLOW_ERROR;
- }
-
- return ret;
-
-not_enough_data:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("short read parsing HEADER object"));
- return GST_FLOW_ERROR;
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_file (GstASFDemux * demux, guint8 * data, guint64 size)
-{
- guint64 creation_time G_GNUC_UNUSED;
- guint64 file_size G_GNUC_UNUSED;
- guint64 send_time G_GNUC_UNUSED;
- guint64 packets_count, play_time, preroll;
- guint32 flags, min_pktsize, max_pktsize, min_bitrate G_GNUC_UNUSED;
-
- if (size < (16 + 8 + 8 + 8 + 8 + 8 + 8 + 4 + 4 + 4 + 4))
- goto not_enough_data;
-
- gst_asf_demux_skip_bytes (16, &data, &size); /* skip GUID */
- file_size = gst_asf_demux_get_uint64 (&data, &size);
- creation_time = gst_asf_demux_get_uint64 (&data, &size);
- packets_count = gst_asf_demux_get_uint64 (&data, &size);
- play_time = gst_asf_demux_get_uint64 (&data, &size);
- send_time = gst_asf_demux_get_uint64 (&data, &size);
- preroll = gst_asf_demux_get_uint64 (&data, &size);
- flags = gst_asf_demux_get_uint32 (&data, &size);
- min_pktsize = gst_asf_demux_get_uint32 (&data, &size);
- max_pktsize = gst_asf_demux_get_uint32 (&data, &size);
- min_bitrate = gst_asf_demux_get_uint32 (&data, &size);
-
- demux->broadcast = ! !(flags & 0x01);
- demux->seekable = ! !(flags & 0x02);
-
- GST_DEBUG_OBJECT (demux, "min_pktsize = %u", min_pktsize);
- GST_DEBUG_OBJECT (demux, "flags::broadcast = %d", demux->broadcast);
- GST_DEBUG_OBJECT (demux, "flags::seekable = %d", demux->seekable);
-
- if (demux->broadcast) {
- /* these fields are invalid if the broadcast flag is set */
- play_time = 0;
- file_size = 0;
- }
-
- if (min_pktsize != max_pktsize)
- goto non_fixed_packet_size;
-
- demux->packet_size = max_pktsize;
-
- /* FIXME: do we need send_time as well? what is it? */
- if ((play_time * 100) >= (preroll * GST_MSECOND))
- demux->play_time = (play_time * 100) - (preroll * GST_MSECOND);
- else
- demux->play_time = 0;
-
- demux->preroll = preroll * GST_MSECOND;
-
- /* initial latency */
- demux->latency = demux->preroll;
-
- if (demux->play_time == 0)
- demux->seekable = FALSE;
-
- GST_DEBUG_OBJECT (demux, "play_time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->play_time));
- GST_DEBUG_OBJECT (demux, "preroll %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->preroll));
-
- if (demux->play_time > 0) {
- demux->segment.duration = demux->play_time;
- }
-
- GST_INFO ("object is a file with %" G_GUINT64_FORMAT " data packets",
- packets_count);
- GST_INFO ("preroll = %" G_GUINT64_FORMAT, demux->preroll);
-
- demux->saw_file_header = TRUE;
-
- return GST_FLOW_OK;
-
-/* ERRORS */
-non_fixed_packet_size:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("packet size must be fixed"));
- return GST_FLOW_ERROR;
- }
-not_enough_data:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("short read parsing FILE object"));
- return GST_FLOW_ERROR;
- }
-}
-
-/* Content Description Object */
-static GstFlowReturn
-gst_asf_demux_process_comment (GstASFDemux * demux, guint8 * data, guint64 size)
-{
- /* *INDENT-OFF* */
- struct
- {
- const gchar *gst_tag;
- guint16 val_length;
- gchar *val_utf8;
- } tags[5] = {
- {
- GST_TAG_TITLE, 0, NULL}, {
- GST_TAG_ARTIST, 0, NULL}, {
- GST_TAG_COPYRIGHT, 0, NULL}, {
- GST_TAG_DESCRIPTION, 0, NULL}, {
- GST_TAG_COMMENT, 0, NULL}
- };
- /* *INDENT-ON* */
- GstTagList *taglist;
- GValue value = { 0 };
- gsize in, out;
- gint i = -1;
-
- GST_INFO_OBJECT (demux, "object is a comment");
-
- if (size < (2 + 2 + 2 + 2 + 2))
- goto not_enough_data;
-
- tags[0].val_length = gst_asf_demux_get_uint16 (&data, &size);
- tags[1].val_length = gst_asf_demux_get_uint16 (&data, &size);
- tags[2].val_length = gst_asf_demux_get_uint16 (&data, &size);
- tags[3].val_length = gst_asf_demux_get_uint16 (&data, &size);
- tags[4].val_length = gst_asf_demux_get_uint16 (&data, &size);
-
- GST_DEBUG_OBJECT (demux, "Comment lengths: title=%d author=%d copyright=%d "
- "description=%d rating=%d", tags[0].val_length, tags[1].val_length,
- tags[2].val_length, tags[3].val_length, tags[4].val_length);
-
- for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
- if (size < tags[i].val_length)
- goto not_enough_data;
-
- /* might be just '/0', '/0'... */
- if (tags[i].val_length > 2 && tags[i].val_length % 2 == 0) {
- /* convert to UTF-8 */
- tags[i].val_utf8 = g_convert ((gchar *) data, tags[i].val_length,
- "UTF-8", "UTF-16LE", &in, &out, NULL);
- }
- gst_asf_demux_skip_bytes (tags[i].val_length, &data, &size);
- }
-
- /* parse metadata into taglist */
- taglist = gst_tag_list_new_empty ();
- g_value_init (&value, G_TYPE_STRING);
- for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
- if (tags[i].val_utf8 && strlen (tags[i].val_utf8) > 0 && tags[i].gst_tag) {
- g_value_set_string (&value, tags[i].val_utf8);
- gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
- tags[i].gst_tag, &value, NULL);
- }
- }
- g_value_unset (&value);
-
- gst_asf_demux_add_global_tags (demux, taglist);
-
- for (i = 0; i < G_N_ELEMENTS (tags); ++i)
- g_free (tags[i].val_utf8);
-
- return GST_FLOW_OK;
-
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "unexpectedly short of data while processing "
- "comment tag section %d, skipping comment object", i);
- for (i = 0; i < G_N_ELEMENTS (tags); i++)
- g_free (tags[i].val_utf8);
- return GST_FLOW_OK; /* not really fatal */
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_bitrate_props_object (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- guint16 num_streams, i;
- AsfStream *stream;
-
- if (size < 2)
- goto not_enough_data;
-
- num_streams = gst_asf_demux_get_uint16 (&data, &size);
-
- GST_INFO ("object is a bitrate properties object with %u streams",
- num_streams);
-
- if (size < (num_streams * (2 + 4)))
- goto not_enough_data;
-
- for (i = 0; i < num_streams; ++i) {
- guint32 bitrate;
- guint16 stream_id;
-
- stream_id = gst_asf_demux_get_uint16 (&data, &size);
- bitrate = gst_asf_demux_get_uint32 (&data, &size);
-
- if (stream_id < GST_ASF_DEMUX_NUM_STREAM_IDS) {
- GST_DEBUG_OBJECT (demux, "bitrate of stream %u = %u", stream_id, bitrate);
- stream = gst_asf_demux_get_stream (demux, stream_id);
- if (stream) {
- if (stream->pending_tags == NULL)
- stream->pending_tags = gst_tag_list_new_empty ();
- gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
- GST_TAG_BITRATE, bitrate, NULL);
- } else {
- GST_WARNING_OBJECT (demux, "Stream id %u wasn't found", stream_id);
- }
- } else {
- GST_WARNING ("stream id %u is too large", stream_id);
- }
- }
-
- return GST_FLOW_OK;
-
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "short read parsing bitrate props object!");
- return GST_FLOW_OK; /* not really fatal */
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_header_ext (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- guint64 hdr_size;
-
- /* Get the rest of the header's header */
- if (size < (16 + 2 + 4))
- goto not_enough_data;
-
- /* skip GUID and two other bytes */
- gst_asf_demux_skip_bytes (16 + 2, &data, &size);
- hdr_size = gst_asf_demux_get_uint32 (&data, &size);
-
- GST_INFO ("extended header object with a size of %u bytes", (guint) size);
-
- /* FIXME: does data_size include the rest of the header that we have read? */
- if (hdr_size > size)
- goto not_enough_data;
-
- while (hdr_size > 0) {
- ret = gst_asf_demux_process_object (demux, &data, &hdr_size);
- if (ret != GST_FLOW_OK)
- break;
- }
-
- return ret;
-
-not_enough_data:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("short read parsing extended header object"));
- return GST_FLOW_ERROR;
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_language_list (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- guint i;
-
- if (size < 2)
- goto not_enough_data;
-
- if (demux->languages) {
- GST_WARNING ("More than one LANGUAGE_LIST object in stream");
- g_strfreev (demux->languages);
- demux->languages = NULL;
- demux->num_languages = 0;
- }
-
- demux->num_languages = gst_asf_demux_get_uint16 (&data, &size);
- GST_LOG ("%u languages:", demux->num_languages);
-
- demux->languages = g_new0 (gchar *, demux->num_languages + 1);
- for (i = 0; i < demux->num_languages; ++i) {
- guint8 len, *lang_data = NULL;
-
- if (size < 1)
- goto not_enough_data;
- len = gst_asf_demux_get_uint8 (&data, &size);
- if (gst_asf_demux_get_bytes (&lang_data, len, &data, &size)) {
- gchar *utf8;
-
- utf8 = g_convert ((gchar *) lang_data, len, "UTF-8", "UTF-16LE", NULL,
- NULL, NULL);
-
- /* truncate "en-us" etc. to just "en" */
- if (utf8 && strlen (utf8) >= 5 && (utf8[2] == '-' || utf8[2] == '_')) {
- utf8[2] = '\0';
- }
- GST_DEBUG ("[%u] %s", i, GST_STR_NULL (utf8));
- demux->languages[i] = utf8;
- g_free (lang_data);
- } else {
- goto not_enough_data;
- }
- }
-
- return GST_FLOW_OK;
-
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "short read parsing language list object!");
- g_free (demux->languages);
- demux->languages = NULL;
- demux->num_languages = 0;
- return GST_FLOW_OK; /* not fatal */
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_simple_index (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- GstClockTime interval;
- guint32 count, i;
-
- if (size < (16 + 8 + 4 + 4))
- goto not_enough_data;
-
- /* skip file id */
- gst_asf_demux_skip_bytes (16, &data, &size);
- interval = gst_asf_demux_get_uint64 (&data, &size) * (GstClockTime) 100;
- gst_asf_demux_skip_bytes (4, &data, &size);
- count = gst_asf_demux_get_uint32 (&data, &size);
- if (count > 0) {
- demux->sidx_interval = interval;
- demux->sidx_num_entries = count;
- g_free (demux->sidx_entries);
- demux->sidx_entries = g_new0 (AsfSimpleIndexEntry, count);
-
- for (i = 0; i < count; ++i) {
- if (G_UNLIKELY (size < 6)) {
- /* adjust for broken files, to avoid having entries at the end
- * of the parsed index that point to time=0. Resulting in seeking to
- * the end of the file leading back to the beginning */
- demux->sidx_num_entries -= (count - i);
- break;
- }
- demux->sidx_entries[i].packet = gst_asf_demux_get_uint32 (&data, &size);
- demux->sidx_entries[i].count = gst_asf_demux_get_uint16 (&data, &size);
- GST_LOG_OBJECT (demux, "%" GST_TIME_FORMAT " = packet %4u count : %2d",
- GST_TIME_ARGS (i * interval), demux->sidx_entries[i].packet,
- demux->sidx_entries[i].count);
- }
- } else {
- GST_DEBUG_OBJECT (demux, "simple index object with 0 entries");
- }
-
- return GST_FLOW_OK;
-
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "short read parsing simple index object!");
- return GST_FLOW_OK; /* not fatal */
- }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_advanced_mutual_exclusion (GstASFDemux * demux,
- guint8 * data, guint64 size)
-{
- ASFGuid guid;
- guint16 num, i;
-
- if (size < 16 + 2 + (2 * 2))
- goto not_enough_data;
-
- gst_asf_demux_get_guid (&guid, &data, &size);
- num = gst_asf_demux_get_uint16 (&data, &size);
-
- if (num < 2) {
- GST_WARNING_OBJECT (demux, "nonsensical mutually exclusive streams count");
- return GST_FLOW_OK;
- }
-
- if (size < (num * sizeof (guint16)))
- goto not_enough_data;
-
- /* read mutually exclusive stream numbers */
- for (i = 0; i < num; ++i) {
- guint8 mes;
- mes = gst_asf_demux_get_uint16 (&data, &size) & 0x7f;
- GST_LOG_OBJECT (demux, "mutually exclusive: stream %d", mes);
-
- demux->mut_ex_streams =
- g_slist_append (demux->mut_ex_streams, GINT_TO_POINTER (mes));
- }
-
-
- return GST_FLOW_OK;
-
- /* Errors */
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "short read parsing advanced mutual exclusion");
- return GST_FLOW_OK; /* not absolutely fatal */
- }
-}
-
-gboolean
-gst_asf_demux_is_unknown_stream (GstASFDemux * demux, guint stream_num)
-{
- return g_slist_find (demux->other_streams,
- GINT_TO_POINTER (stream_num)) == NULL;
-}
-
-static GstFlowReturn
-gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
- guint64 size)
-{
- AsfStreamExtProps esp;
- AsfStream *stream = NULL;
- AsfObject stream_obj;
- guint16 stream_name_count;
- guint16 num_payload_ext;
- guint64 len;
- guint8 *stream_obj_data = NULL;
- guint8 *data_start;
- guint obj_size;
- guint i, stream_num;
-
- data_start = data;
- obj_size = (guint) size;
-
- esp.payload_extensions = NULL;
-
- if (size < 64)
- goto not_enough_data;
-
- esp.valid = TRUE;
- esp.start_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
- esp.end_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
- esp.data_bitrate = gst_asf_demux_get_uint32 (&data, &size);
- esp.buffer_size = gst_asf_demux_get_uint32 (&data, &size);
- esp.intial_buf_fullness = gst_asf_demux_get_uint32 (&data, &size);
- esp.data_bitrate2 = gst_asf_demux_get_uint32 (&data, &size);
- esp.buffer_size2 = gst_asf_demux_get_uint32 (&data, &size);
- esp.intial_buf_fullness2 = gst_asf_demux_get_uint32 (&data, &size);
- esp.max_obj_size = gst_asf_demux_get_uint32 (&data, &size);
- esp.flags = gst_asf_demux_get_uint32 (&data, &size);
- stream_num = gst_asf_demux_get_uint16 (&data, &size);
- esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
- esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size);
- stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
- num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
-
- GST_INFO ("start_time = %" GST_TIME_FORMAT,
- GST_TIME_ARGS (esp.start_time));
- GST_INFO ("end_time = %" GST_TIME_FORMAT,
- GST_TIME_ARGS (esp.end_time));
- GST_INFO ("flags = %08x", esp.flags);
- GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
- GST_TIME_ARGS (esp.avg_time_per_frame * 100));
- GST_INFO ("stream number = %u", stream_num);
- GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
- (esp.lang_idx < demux->num_languages) ?
- GST_STR_NULL (demux->languages[esp.lang_idx]) : "??");
- GST_INFO ("stream name count = %u", stream_name_count);
-
- /* read stream names */
- for (i = 0; i < stream_name_count; ++i) {
- guint16 stream_lang_idx G_GNUC_UNUSED;
- gchar *stream_name = NULL;
-
- if (size < 2)
- goto not_enough_data;
- stream_lang_idx = gst_asf_demux_get_uint16 (&data, &size);
- if (!gst_asf_demux_get_string (&stream_name, NULL, &data, &size))
- goto not_enough_data;
- GST_INFO ("stream name %d: %s", i, GST_STR_NULL (stream_name));
- g_free (stream_name); /* TODO: store names in struct */
- }
-
- /* read payload extension systems stuff */
- GST_LOG ("payload extension systems count = %u", num_payload_ext);
-
- if (num_payload_ext > 0)
- esp.payload_extensions = g_new0 (AsfPayloadExtension, num_payload_ext + 1);
-
- for (i = 0; i < num_payload_ext; ++i) {
- AsfPayloadExtension ext;
- ASFGuid ext_guid;
- guint32 sys_info_len;
-
- if (size < 16 + 2 + 4)
- goto not_enough_data;
-
- gst_asf_demux_get_guid (&ext_guid, &data, &size);
- ext.id = gst_asf_demux_identify_guid (asf_payload_ext_guids, &ext_guid);
- ext.len = gst_asf_demux_get_uint16 (&data, &size);
-
- sys_info_len = gst_asf_demux_get_uint32 (&data, &size);
- GST_LOG ("payload systems info len = %u", sys_info_len);
- if (!gst_asf_demux_skip_bytes (sys_info_len, &data, &size))
- goto not_enough_data;
-
- esp.payload_extensions[i] = ext;
- }
-
- GST_LOG ("bytes read: %u/%u", (guint) (data - data_start), obj_size);
-
- /* there might be an optional STREAM_INFO object here now; if not, we
- * should have parsed the corresponding stream info object already (since
- * we are parsing the extended stream properties objects delayed) */
- if (size == 0) {
- stream = gst_asf_demux_get_stream (demux, stream_num);
- goto done;
- }
-
- if (size < ASF_OBJECT_HEADER_SIZE)
- goto not_enough_data;
-
- /* get size of the stream object */
- if (!asf_demux_peek_object (demux, data, size, &stream_obj, TRUE))
- goto corrupted_stream;
-
- if (stream_obj.id != ASF_OBJ_STREAM)
- goto expected_stream_object;
-
- if (stream_obj.size < ASF_OBJECT_HEADER_SIZE ||
- stream_obj.size > (10 * 1024 * 1024))
- goto not_enough_data;
-
- gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, &data, &size);
-
- /* process this stream object later after all the other 'normal' ones
- * have been processed (since the others are more important/non-hidden) */
- len = stream_obj.size - ASF_OBJECT_HEADER_SIZE;
- if (!gst_asf_demux_get_bytes (&stream_obj_data, len, &data, &size))
- goto not_enough_data;
-
- /* parse stream object */
- stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
- g_free (stream_obj_data);
-
-done:
-
- if (stream) {
- stream->ext_props = esp;
-
- /* try to set the framerate */
- if (stream->is_video && stream->caps) {
- GValue framerate = { 0 };
- GstStructure *s;
- gint num, denom;
-
- g_value_init (&framerate, GST_TYPE_FRACTION);
-
- num = GST_SECOND / 100;
- denom = esp.avg_time_per_frame;
- if (denom == 0) {
- /* avoid division by 0, assume 25/1 framerate */
- denom = GST_SECOND / 2500;
- }
-
- gst_value_set_fraction (&framerate, num, denom);
-
- stream->caps = gst_caps_make_writable (stream->caps);
- s = gst_caps_get_structure (stream->caps, 0);
- gst_structure_set_value (s, "framerate", &framerate);
- g_value_unset (&framerate);
- GST_DEBUG_OBJECT (demux, "setting framerate of %d/%d = %f",
- num, denom, ((gdouble) num) / denom);
- }
-
- /* add language info now if we have it */
- if (stream->ext_props.lang_idx < demux->num_languages) {
- if (stream->pending_tags == NULL)
- stream->pending_tags = gst_tag_list_new_empty ();
- GST_LOG_OBJECT (demux, "stream %u has language '%s'", stream->id,
- demux->languages[stream->ext_props.lang_idx]);
- gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_APPEND,
- GST_TAG_LANGUAGE_CODE, demux->languages[stream->ext_props.lang_idx],
- NULL);
- }
- } else if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
- GST_WARNING_OBJECT (demux, "Ext. stream properties for unknown stream");
- }
-
- if (!stream)
- g_free (esp.payload_extensions);
-
- return GST_FLOW_OK;
-
- /* Errors */
-not_enough_data:
- {
- GST_WARNING_OBJECT (demux, "short read parsing ext stream props object!");
- g_free (esp.payload_extensions);
- return GST_FLOW_OK; /* not absolutely fatal */
- }
-expected_stream_object:
- {
- GST_WARNING_OBJECT (demux, "error parsing extended stream properties "
- "object: expected embedded stream object, but got %s object instead!",
- gst_asf_get_guid_nick (asf_object_guids, stream_obj.id));
- g_free (esp.payload_extensions);
- return GST_FLOW_OK; /* not absolutely fatal */
- }
-corrupted_stream:
- {
- GST_WARNING_OBJECT (demux, "Corrupted stream");
- g_free (esp.payload_extensions);
- return GST_FLOW_ERROR;
- }
-}
-
-static const gchar *
-gst_asf_demux_push_obj (GstASFDemux * demux, guint32 obj_id)
-{
- const gchar *nick;
-
- nick = gst_asf_get_guid_nick (asf_object_guids, obj_id);
- if (g_str_has_prefix (nick, "ASF_OBJ_"))
- nick += strlen ("ASF_OBJ_");
-
- if (demux->objpath == NULL) {
- demux->objpath = g_strdup (nick);
- } else {
- gchar *newpath;
-
- newpath = g_strdup_printf ("%s/%s", demux->objpath, nick);
- g_free (demux->objpath);
- demux->objpath = newpath;
- }
-
- return (const gchar *) demux->objpath;
-}
-
-static void
-gst_asf_demux_pop_obj (GstASFDemux * demux)
-{
- gchar *s;
-
- if ((s = g_strrstr (demux->objpath, "/"))) {
- *s = '\0';
- } else {
- g_free (demux->objpath);
- demux->objpath = NULL;
- }
-}
-
-static void
-gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux)
-{
- GSList *l;
- guint i;
-
- /* Parse the queued extended stream property objects and add the info
- * to the existing streams or add the new embedded streams, but without
- * activating them yet */
- GST_LOG_OBJECT (demux, "%u queued extended stream properties objects",
- g_slist_length (demux->ext_stream_props));
-
- for (l = demux->ext_stream_props, i = 0; l != NULL; l = l->next, ++i) {
- GstBuffer *buf = GST_BUFFER (l->data);
- GstMapInfo map;
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
-
- GST_LOG_OBJECT (demux, "parsing ext. stream properties object #%u", i);
- gst_asf_demux_process_ext_stream_props (demux, map.data, map.size);
- gst_buffer_unmap (buf, &map);
- gst_buffer_unref (buf);
- }
- g_slist_free (demux->ext_stream_props);
- demux->ext_stream_props = NULL;
-}
-
-#if 0
-static void
-gst_asf_demux_activate_ext_props_streams (GstASFDemux * demux)
-{
- guint i, j;
-
- for (i = 0; i < demux->num_streams; ++i) {
- AsfStream *stream;
- gboolean is_hidden;
- GSList *x;
-
- stream = &demux->stream[i];
-
- GST_LOG_OBJECT (demux, "checking stream %2u", stream->id);
-
- if (stream->active) {
- GST_LOG_OBJECT (demux, "stream %2u is already activated", stream->id);
- continue;
- }
-
- is_hidden = FALSE;
- for (x = demux->mut_ex_streams; x != NULL; x = x->next) {
- guint8 *mes;
-
- /* check for each mutual exclusion whether it affects this stream */
- for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
- if (*mes == stream->id) {
- /* if yes, check if we've already added streams that are mutually
- * exclusive with the stream we're about to add */
- for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
- for (j = 0; j < demux->num_streams; ++j) {
- /* if the broadcast flag is set, assume the hidden streams aren't
- * actually streamed and hide them (or playbin won't work right),
- * otherwise assume their data is available */
- if (demux->stream[j].id == *mes && demux->broadcast) {
- is_hidden = TRUE;
- GST_LOG_OBJECT (demux, "broadcast stream ID %d to be added is "
- "mutually exclusive with already existing stream ID %d, "
- "hiding stream", stream->id, demux->stream[j].id);
- goto next;
- }
- }
- }
- break;
- }
- }
- }
-
- next:
-
- /* FIXME: we should do stream activation based on preroll data in
- * streaming mode too */
- if (demux->streaming && !is_hidden)
- gst_asf_demux_activate_stream (demux, stream);
- }
-}
-#endif
-
-static GstFlowReturn
-gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
- guint64 * p_size)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- AsfObject obj;
- guint64 obj_data_size;
-
- if (*p_size < ASF_OBJECT_HEADER_SIZE)
- return ASF_FLOW_NEED_MORE_DATA;
-
- if (!asf_demux_peek_object (demux, *p_data, ASF_OBJECT_HEADER_SIZE, &obj,
- TRUE))
- return GST_FLOW_ERROR;
- gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, p_data, p_size);
-
- obj_data_size = obj.size - ASF_OBJECT_HEADER_SIZE;
-
- if (*p_size < obj_data_size)
- return ASF_FLOW_NEED_MORE_DATA;
-
- gst_asf_demux_push_obj (demux, obj.id);
-
- GST_INFO ("%s: size %" G_GUINT64_FORMAT, demux->objpath, obj.size);
-
- switch (obj.id) {
- case ASF_OBJ_STREAM:
- gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
- ret = GST_FLOW_OK;
- break;
- case ASF_OBJ_FILE:
- ret = gst_asf_demux_process_file (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_HEADER:
- ret = gst_asf_demux_process_header (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_COMMENT:
- ret = gst_asf_demux_process_comment (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_HEAD1:
- ret = gst_asf_demux_process_header_ext (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_BITRATE_PROPS:
- ret =
- gst_asf_demux_process_bitrate_props_object (demux, *p_data,
- obj_data_size);
- break;
- case ASF_OBJ_EXT_CONTENT_DESC:
- ret =
- gst_asf_demux_process_ext_content_desc (demux, *p_data,
- obj_data_size);
- break;
- case ASF_OBJ_METADATA_OBJECT:
- ret = gst_asf_demux_process_metadata (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_EXTENDED_STREAM_PROPS:{
- GstBuffer *buf;
-
- /* process these later, we might not have parsed the corresponding
- * stream object yet */
- GST_LOG ("%s: queued for later parsing", demux->objpath);
- buf = gst_buffer_new_and_alloc (obj_data_size);
- gst_buffer_fill (buf, 0, *p_data, obj_data_size);
- demux->ext_stream_props = g_slist_append (demux->ext_stream_props, buf);
- ret = GST_FLOW_OK;
- break;
- }
- case ASF_OBJ_LANGUAGE_LIST:
- ret = gst_asf_demux_process_language_list (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
- ret = gst_asf_demux_process_advanced_mutual_exclusion (demux, *p_data,
- obj_data_size);
- break;
- case ASF_OBJ_SIMPLE_INDEX:
- ret = gst_asf_demux_process_simple_index (demux, *p_data, obj_data_size);
- break;
- case ASF_OBJ_CONTENT_ENCRYPTION:
- case ASF_OBJ_EXT_CONTENT_ENCRYPTION:
- case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT:
- case ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT:
- goto error_encrypted;
- case ASF_OBJ_CONCEAL_NONE:
- case ASF_OBJ_HEAD2:
- case ASF_OBJ_UNDEFINED:
- case ASF_OBJ_CODEC_COMMENT:
- case ASF_OBJ_INDEX:
- case ASF_OBJ_PADDING:
- case ASF_OBJ_BITRATE_MUTEX:
- case ASF_OBJ_COMPATIBILITY:
- case ASF_OBJ_INDEX_PLACEHOLDER:
- case ASF_OBJ_INDEX_PARAMETERS:
- case ASF_OBJ_STREAM_PRIORITIZATION:
- case ASF_OBJ_SCRIPT_COMMAND:
- case ASF_OBJ_METADATA_LIBRARY_OBJECT:
- default:
- /* Unknown/unhandled object, skip it and hope for the best */
- GST_INFO ("%s: skipping object", demux->objpath);
- ret = GST_FLOW_OK;
- break;
- }
-
- /* this can't fail, we checked the number of bytes available before */
- gst_asf_demux_skip_bytes (obj_data_size, p_data, p_size);
-
- GST_LOG ("%s: ret = %s", demux->objpath, gst_asf_get_flow_name (ret));
-
- gst_asf_demux_pop_obj (demux);
-
- return ret;
-
-/* ERRORS */
-error_encrypted:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DECRYPT, (NULL), (NULL));
- return GST_FLOW_ERROR;
- }
-}
-
-static void
-gst_asf_demux_descramble_buffer (GstASFDemux * demux, AsfStream * stream,
- GstBuffer ** p_buffer)
-{
- GstBuffer *descrambled_buffer;
- GstBuffer *scrambled_buffer;
- GstBuffer *sub_buffer;
- guint offset;
- guint off;
- guint row;
- guint col;
- guint idx;
-
- /* descrambled_buffer is initialised in the first iteration */
- descrambled_buffer = NULL;
- scrambled_buffer = *p_buffer;
-
- if (gst_buffer_get_size (scrambled_buffer) <
- stream->ds_packet_size * stream->span)
- return;
-
- for (offset = 0; offset < gst_buffer_get_size (scrambled_buffer);
- offset += stream->ds_chunk_size) {
- off = offset / stream->ds_chunk_size;
- row = off / stream->span;
- col = off % stream->span;
- idx = row + col * stream->ds_packet_size / stream->ds_chunk_size;
- GST_DEBUG ("idx=%u, row=%u, col=%u, off=%u, ds_chunk_size=%u", idx, row,
- col, off, stream->ds_chunk_size);
- GST_DEBUG ("scrambled buffer size=%" G_GSIZE_FORMAT
- ", span=%u, packet_size=%u", gst_buffer_get_size (scrambled_buffer),
- stream->span, stream->ds_packet_size);
- GST_DEBUG ("gst_buffer_get_size (scrambled_buffer) = %" G_GSIZE_FORMAT,
- gst_buffer_get_size (scrambled_buffer));
- sub_buffer =
- gst_buffer_copy_region (scrambled_buffer, GST_BUFFER_COPY_MEMORY,
- idx * stream->ds_chunk_size, stream->ds_chunk_size);
- if (!offset) {
- descrambled_buffer = sub_buffer;
- } else {
- descrambled_buffer = gst_buffer_append (descrambled_buffer, sub_buffer);
- }
- }
-
- GST_BUFFER_TIMESTAMP (descrambled_buffer) =
- GST_BUFFER_TIMESTAMP (scrambled_buffer);
- GST_BUFFER_DURATION (descrambled_buffer) =
- GST_BUFFER_DURATION (scrambled_buffer);
- GST_BUFFER_OFFSET (descrambled_buffer) = GST_BUFFER_OFFSET (scrambled_buffer);
- GST_BUFFER_OFFSET_END (descrambled_buffer) =
- GST_BUFFER_OFFSET_END (scrambled_buffer);
-
- /* FIXME/CHECK: do we need to transfer buffer flags here too? */
-
- gst_buffer_unref (scrambled_buffer);
- *p_buffer = descrambled_buffer;
-}
-
-static gboolean
-gst_asf_demux_element_send_event (GstElement * element, GstEvent * event)
-{
- GstASFDemux *demux = GST_ASF_DEMUX (element);
- gint i;
-
- GST_DEBUG ("handling element event of type %s", GST_EVENT_TYPE_NAME (event));
-
- for (i = 0; i < demux->num_streams; ++i) {
- gst_event_ref (event);
- if (gst_asf_demux_handle_src_event (demux->stream[i].pad,
- GST_OBJECT_CAST (element), event)) {
- gst_event_unref (event);
- return TRUE;
- }
- }
-
- gst_event_unref (event);
- return FALSE;
-}
-
-/* takes ownership of the passed event */
-static gboolean
-gst_asf_demux_send_event_unlocked (GstASFDemux * demux, GstEvent * event)
-{
- gboolean ret = TRUE;
- gint i;
-
- GST_DEBUG_OBJECT (demux, "sending %s event to all source pads",
- GST_EVENT_TYPE_NAME (event));
-
- for (i = 0; i < demux->num_streams; ++i) {
- gst_event_ref (event);
- ret &= gst_pad_push_event (demux->stream[i].pad, event);
- }
- gst_event_unref (event);
- return ret;
-}
-
-static gboolean
-gst_asf_demux_handle_src_query (GstPad * pad, GstObject * parent,
- GstQuery * query)
-{
- GstASFDemux *demux;
- gboolean res = FALSE;
-
- demux = GST_ASF_DEMUX (parent);
-
- GST_DEBUG ("handling %s query",
- gst_query_type_get_name (GST_QUERY_TYPE (query)));
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_DURATION:
- {
- GstFormat format;
-
- gst_query_parse_duration (query, &format, NULL);
-
- if (format != GST_FORMAT_TIME) {
- GST_LOG ("only support duration queries in TIME format");
- break;
- }
-
- res = gst_pad_query_default (pad, parent, query);
- if (!res) {
- GST_OBJECT_LOCK (demux);
-
- if (demux->segment.duration != GST_CLOCK_TIME_NONE) {
- GST_LOG ("returning duration: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->segment.duration));
-
- gst_query_set_duration (query, GST_FORMAT_TIME,
- demux->segment.duration);
-
- res = TRUE;
- } else {
- GST_LOG ("duration not known yet");
- }
-
- GST_OBJECT_UNLOCK (demux);
- }
- break;
- }
-
- case GST_QUERY_POSITION:{
- GstFormat format;
-
- gst_query_parse_position (query, &format, NULL);
-
- if (format != GST_FORMAT_TIME) {
- GST_LOG ("only support position queries in TIME format");
- break;
- }
-
- GST_OBJECT_LOCK (demux);
-
- if (demux->segment.position != GST_CLOCK_TIME_NONE) {
- GST_LOG ("returning position: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->segment.position));
-
- gst_query_set_position (query, GST_FORMAT_TIME,
- demux->segment.position);
-
- res = TRUE;
- } else {
- GST_LOG ("position not known yet");
- }
-
- GST_OBJECT_UNLOCK (demux);
- break;
- }
-
- case GST_QUERY_SEEKING:{
- GstFormat format;
-
- gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
- if (format == GST_FORMAT_TIME) {
- gint64 duration;
-
- GST_OBJECT_LOCK (demux);
- duration = demux->segment.duration;
- GST_OBJECT_UNLOCK (demux);
-
- if (!demux->streaming || !demux->seekable) {
- gst_query_set_seeking (query, GST_FORMAT_TIME, demux->seekable, 0,
- duration);
- res = TRUE;
- } else {
- GstFormat fmt;
- gboolean seekable;
-
- /* try upstream first in TIME */
- res = gst_pad_query_default (pad, parent, query);
-
- gst_query_parse_seeking (query, &fmt, &seekable, NULL, NULL);
- GST_LOG_OBJECT (demux, "upstream %s seekable %d",
- GST_STR_NULL (gst_format_get_name (fmt)), seekable);
- /* if no luck, maybe in BYTES */
- if (!seekable || fmt != GST_FORMAT_TIME) {
- GstQuery *q;
-
- q = gst_query_new_seeking (GST_FORMAT_BYTES);
- if ((res = gst_pad_peer_query (demux->sinkpad, q))) {
- gst_query_parse_seeking (q, &fmt, &seekable, NULL, NULL);
- GST_LOG_OBJECT (demux, "upstream %s seekable %d",
- GST_STR_NULL (gst_format_get_name (fmt)), seekable);
- if (fmt != GST_FORMAT_BYTES)
- seekable = FALSE;
- }
- gst_query_unref (q);
- gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, 0,
- duration);
- res = TRUE;
- }
- }
- } else
- GST_LOG_OBJECT (demux, "only support seeking in TIME format");
- break;
- }
-
- case GST_QUERY_LATENCY:
- {
- gboolean live;
- GstClockTime min, max;
-
- /* preroll delay does not matter in non-live pipeline,
- * but we might end up in a live (rtsp) one ... */
-
- /* first forward */
- res = gst_pad_query_default (pad, parent, query);
- if (!res)
- break;
-
- gst_query_parse_latency (query, &live, &min, &max);
-
- GST_DEBUG_OBJECT (demux, "Peer latency: live %d, min %"
- GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
- GST_TIME_ARGS (min), GST_TIME_ARGS (max));
-
- GST_OBJECT_LOCK (demux);
- min += demux->latency;
- if (max != -1)
- max += demux->latency;
- GST_OBJECT_UNLOCK (demux);
-
- gst_query_set_latency (query, live, min, max);
- break;
- }
- case GST_QUERY_SEGMENT:
- {
- GstFormat format;
- gint64 start, stop;
-
- format = demux->segment.format;
-
- start =
- gst_segment_to_stream_time (&demux->segment, format,
- demux->segment.start);
- if ((stop = demux->segment.stop) == -1)
- stop = demux->segment.duration;
- else
- stop = gst_segment_to_stream_time (&demux->segment, format, stop);
-
- gst_query_set_segment (query, demux->segment.rate, format, start, stop);
- res = TRUE;
- break;
- }
- default:
- res = gst_pad_query_default (pad, parent, query);
- break;
- }
-
- return res;
-}
-
-static void
-gst_asf_demux_finalize (GObject * object)
-{
- GstASFDemux *demux = GST_ASF_DEMUX (object);
-
- if (demux->metadata)
- gst_caps_unref (demux->metadata);
- demux->metadata = NULL;
-
- if (demux->global_metadata)
- gst_structure_free (demux->global_metadata);
- demux->global_metadata = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstStateChangeReturn
-gst_asf_demux_change_state (GstElement * element, GstStateChange transition)
-{
- GstASFDemux *demux = GST_ASF_DEMUX (element);
- GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:{
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
- demux->need_newsegment = TRUE;
- demux->segment_running = FALSE;
- demux->keyunit_sync = FALSE;
- demux->accurate = FALSE;
- demux->adapter = gst_adapter_new ();
- demux->data_size = 0;
- demux->data_offset = 0;
- demux->index_offset = 0;
- demux->base_offset = 0;
- demux->flowcombiner = gst_flow_combiner_new ();
-
- break;
- }
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
- if (ret == GST_STATE_CHANGE_FAILURE)
- return ret;
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_asf_demux_reset (demux, FALSE);
- break;
-
- case GST_STATE_CHANGE_READY_TO_NULL:
- gst_asf_demux_reset (demux, FALSE);
- gst_flow_combiner_free (demux->flowcombiner);
- demux->flowcombiner = NULL;
- break;
- default:
- break;
- }
-
- return ret;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __ASF_DEMUX_H__
-#define __ASF_DEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/base/gstflowcombiner.h>
-
-#include "asfheaders.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_ASF_DEMUX \
- (gst_asf_demux_get_type())
-#define GST_ASF_DEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ASF_DEMUX,GstASFDemux))
-#define GST_ASF_DEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ASF_DEMUX,GstASFDemuxClass))
-#define GST_IS_ASF_DEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ASF_DEMUX))
-#define GST_IS_ASF_DEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX))
-
-typedef struct _GstASFDemux GstASFDemux;
-typedef struct _GstASFDemuxClass GstASFDemuxClass;
-typedef enum _GstASF3DMode GstASF3DMode;
-
-typedef struct {
- guint32 packet;
- guint16 count;
-} AsfSimpleIndexEntry;
-
-typedef struct {
- AsfPayloadExtensionID id : 16; /* extension ID; the :16 makes sure the
- * struct gets packed into 4 bytes */
- guint16 len; /* save this so we can skip unknown IDs */
-} AsfPayloadExtension;
-
-/*
- * 3D Types for Media play
- */
-enum _GstASF3DMode
-{
- GST_ASF_3D_NONE = 0x00,
-
- //added, interim format - half
- GST_ASF_3D_SIDE_BY_SIDE_HALF_LR = 0x01,
- GST_ASF_3D_SIDE_BY_SIDE_HALF_RL = 0x02,
- GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR = 0x03,
- GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL = 0x04,
- GST_ASF_3D_DUAL_STREAM = 0x0D, /*< Full format*/
-};
-
-typedef struct
-{
- gboolean valid; /* TRUE if structure is valid/filled */
-
- GstClockTime start_time;
- GstClockTime end_time;
- GstClockTime avg_time_per_frame;
- guint32 data_bitrate;
- guint32 buffer_size;
- guint32 intial_buf_fullness;
- guint32 data_bitrate2;
- guint32 buffer_size2;
- guint32 intial_buf_fullness2;
- guint32 max_obj_size;
- guint32 flags;
- guint16 lang_idx;
-
- /* may be NULL if there are no extensions; otherwise, terminated by
- * an AsfPayloadExtension record with len 0 */
- AsfPayloadExtension *payload_extensions;
-
- /* missing: stream names */
-} AsfStreamExtProps;
-
-typedef struct
-{
- AsfStreamType type;
-
- gboolean active; /* if the stream has been activated (pad added) */
-
- GstPad *pad;
- guint16 id;
-
- /* video-only */
- gboolean is_video;
- gboolean fps_known;
-
- GstCaps *caps;
-
- GstBuffer *streamheader;
-
- GstTagList *pending_tags;
-
- gboolean discont;
- gboolean first_buffer;
-
- /* Descrambler settings */
- guint8 span;
- guint16 ds_packet_size;
- guint16 ds_chunk_size;
- guint16 ds_data_size;
-
- /* for new parsing code */
- GArray *payloads; /* pending payloads */
-
- /* Video stream PAR & interlacing */
- guint8 par_x;
- guint8 par_y;
- gboolean interlaced;
-
- /* For reverse playback */
- gboolean reverse_kf_ready; /* Found complete KF payload*/
- GArray *payloads_rev; /* Temp queue for storing multiple payloads of packet*/
- gint kf_pos; /* KF position in payload queue. Payloads from this pos will be pushed */
-
- /* extended stream properties (optional) */
- AsfStreamExtProps ext_props;
-
- gboolean inspect_payload;
-} AsfStream;
-
-typedef enum {
- GST_ASF_DEMUX_STATE_HEADER,
- GST_ASF_DEMUX_STATE_DATA,
- GST_ASF_DEMUX_STATE_INDEX
-} GstASFDemuxState;
-
-#define GST_ASF_DEMUX_IS_REVERSE_PLAYBACK(seg) (seg.rate < 0.0? TRUE:FALSE)
-
-#define GST_ASF_DEMUX_NUM_VIDEO_PADS 16
-#define GST_ASF_DEMUX_NUM_AUDIO_PADS 32
-#define GST_ASF_DEMUX_NUM_STREAMS 32
-#define GST_ASF_DEMUX_NUM_STREAM_IDS 127
-
-struct _GstASFDemux {
- GstElement element;
-
- GstPad *sinkpad;
-
- gboolean have_group_id;
- guint group_id;
-
- GstAdapter *adapter;
- GstTagList *taglist;
- GstASFDemuxState state;
-
- /* byte offset where the asf starts, which might not be zero on chained
- * asfs, index_offset and data_offset already are 'offseted' by base_offset */
- guint64 base_offset;
-
- guint64 index_offset; /* byte offset where index might be, or 0 */
- guint64 data_offset; /* byte offset where packets start */
- guint64 data_size; /* total size of packet data in bytes, or 0 */
- guint64 num_packets; /* total number of data packets, or 0 */
- gint64 packet; /* current packet */
- guint speed_packets; /* Known number of packets to get in one go*/
-
- gchar **languages;
- guint num_languages;
-
- GstCaps *metadata; /* metadata, for delayed parsing; one
- * structure ('stream-N') per stream */
- GstStructure *global_metadata; /* metadata which isn't specific to one stream */
- GSList *ext_stream_props; /* for delayed processing (buffers) */
- GSList *mut_ex_streams; /* mutually exclusive streams */
-
- guint32 num_audio_streams;
- guint32 num_video_streams;
- guint32 num_streams;
- AsfStream stream[GST_ASF_DEMUX_NUM_STREAMS];
- gboolean activated_streams;
- GstFlowCombiner *flowcombiner;
-
- /* for chained asf handling, we need to hold the old asf streams until
- * we detect the new ones */
- AsfStream old_stream[GST_ASF_DEMUX_NUM_STREAMS];
- gboolean old_num_streams;
-
- GstClockTime first_ts; /* smallest timestamp found */
-
- guint32 packet_size;
- guint64 play_time;
-
- guint64 preroll;
-
- gboolean seekable;
- gboolean broadcast;
-
- GstSegment segment; /* configured play segment */
- gboolean keyunit_sync;
- gboolean accurate;
-
- gboolean need_newsegment; /* do we need to send a new-segment event? */
- guint32 segment_seqnum; /* if the new segment must have this seqnum */
- GstClockTime segment_ts; /* streaming; timestamp for segment start */
- GstSegment in_segment; /* streaming; upstream segment info */
- GstClockTime in_gap; /* streaming; upstream initial segment gap for interpolation */
- gboolean segment_running; /* if we've started the current segment */
- gboolean streaming; /* TRUE if we are operating chain-based */
- GstClockTime latency;
-
- /* for debugging only */
- gchar *objpath;
-
- /* simple index, if available */
- GstClockTime sidx_interval; /* interval between entries in ns */
- guint sidx_num_entries; /* number of index entries */
- AsfSimpleIndexEntry *sidx_entries; /* packet number for each entry */
-
- GSList *other_streams; /* remember streams that are in header but have unknown type */
-
- /* For reverse playback */
- gboolean seek_to_cur_pos; /* Search packets till we reach 'seek' time */
- gboolean multiple_payloads; /* Whether packet has multiple payloads */
-
- /* parsing 3D */
- GstASF3DMode asf_3D_mode;
-
- gboolean saw_file_header;
-};
-
-struct _GstASFDemuxClass {
- GstElementClass parent_class;
-};
-
-GType gst_asf_demux_get_type (void);
-
-AsfStream * gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id);
-
-gboolean gst_asf_demux_is_unknown_stream(GstASFDemux *demux, guint stream_num);
-
-G_END_DECLS
-
-#endif /* __ASF_DEMUX_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/riff/riff-read.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include "gstasfelements.h"
-
-/* #include "gstasfmux.h" */
-GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg);
-#define GST_CAT_DEFAULT asfdemux_dbg
-
-void
-asf_element_init (GstPlugin * plugin)
-{
- static gsize res = FALSE;
- if (g_once_init_enter (&res)) {
- GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0,
- "asf demuxer element");
-
-#ifdef ENABLE_NLS
- GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
- LOCALEDIR);
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
- gst_riff_init ();
- g_once_init_leave (&res, TRUE);
- }
-
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_ASF_ELEMENTS_H__
-#define __GST_ASF_ELEMENTS_H__
-
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-
-G_BEGIN_DECLS
-
-void asf_element_init (GstPlugin * plugin);
-
-GST_ELEMENT_REGISTER_DECLARE (asfdemux);
-GST_ELEMENT_REGISTER_DECLARE (rtspwms);
-GST_ELEMENT_REGISTER_DECLARE (rtpasfdepay);
-
-G_END_DECLS
-
-#endif /* __GST_ASF_ELEMENTS_H__ */
+++ /dev/null
-/* GStreamer RTP ASF depayloader
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- * 2009 Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gstasfelements.h"
-#include "gstrtpasfdepay.h"
-#include <gst/rtp/gstrtpbuffer.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-GST_DEBUG_CATEGORY_STATIC (rtpasfdepayload_debug);
-#define GST_CAT_DEFAULT rtpasfdepayload_debug
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-ms-asf")
- );
-
-/* Other parameters: config, maxps */
-#define SINK_CAPS \
- "application/x-rtp, " \
- "media = (string) { \"application\", \"video\", \"audio\" }, " \
- "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", " \
- "clock-rate = (int) [1, MAX ], " \
- "encoding-name = (string) \"X-ASF-PF\""
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (SINK_CAPS)
- );
-
-#define gst_rtp_asf_depay_parent_class parent_class
-G_DEFINE_TYPE (GstRtpAsfDepay, gst_rtp_asf_depay, GST_TYPE_RTP_BASE_DEPAYLOAD);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtpasfdepay, "rtpasfdepay",
- GST_RANK_MARGINAL, GST_TYPE_RTP_ASF_DEPAY, asf_element_init (plugin));
-
-static void gst_rtp_asf_depay_finalize (GObject * object);
-
-static GstStateChangeReturn gst_rtp_asf_depay_change_state (GstElement *
- element, GstStateChange transition);
-
-static gboolean gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depay,
- GstCaps * caps);
-static GstBuffer *gst_rtp_asf_depay_process (GstRTPBaseDepayload * basedepay,
- GstBuffer * buf);
-
-static void
-gst_rtp_asf_depay_class_init (GstRtpAsfDepayClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
- gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
-
- gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
- gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
-
- gst_element_class_set_static_metadata (gstelement_class,
- "RTP ASF packet depayloader", "Codec/Depayloader/Network",
- "Extracts ASF streams from RTP",
- "Tim-Philipp Müller <tim centricular net>, "
- "Wim Taymans <wim.taymans@gmail.com>");
-
- gobject_class->finalize = gst_rtp_asf_depay_finalize;
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_change_state);
-
- gstrtpbasedepayload_class->set_caps =
- GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_setcaps);
- gstrtpbasedepayload_class->process =
- GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_process);
-
- GST_DEBUG_CATEGORY_INIT (rtpasfdepayload_debug, "rtpasfdepayload", 0,
- "RTP asf depayloader element");
-}
-
-static void
-gst_rtp_asf_depay_init (GstRtpAsfDepay * depay)
-{
- depay->adapter = gst_adapter_new ();
-}
-
-static void
-gst_rtp_asf_depay_finalize (GObject * object)
-{
- GstRtpAsfDepay *depay;
-
- depay = GST_RTP_ASF_DEPAY (object);
-
- g_object_unref (depay->adapter);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static const guint8 asf_marker[16] = { 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
- 0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
-};
-
-static gboolean
-gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
-{
- GstRtpAsfDepay *depay;
- GstStructure *s;
- const gchar *config_str, *ps_string;
- GstBuffer *buf;
- GstCaps *src_caps;
- guint8 *headers;
- gsize headers_len;
- gint clock_rate;
-
- depay = GST_RTP_ASF_DEPAY (depayload);
-
- s = gst_caps_get_structure (caps, 0);
-
- if (!gst_structure_get_int (s, "clock-rate", &clock_rate) || clock_rate < 0)
- clock_rate = 1000;
- depayload->clock_rate = clock_rate;
-
- /* config contains the asf headers in base64 coding */
- config_str = gst_structure_get_string (s, "config");
- if (config_str == NULL || *config_str == '\0')
- goto no_config;
-
- ps_string = gst_structure_get_string (s, "maxps");
- if (ps_string == NULL || *ps_string == '\0')
- goto no_packetsize;
-
- if (depay->packet_size) {
- /* header sent again following seek;
- * discard to avoid confusing upstream */
- if (depay->packet_size == atoi (ps_string)) {
- goto duplicate_header;
- } else {
- /* since we should fiddle with downstream state to handle this */
- goto refuse_renegotiation;
- }
- } else
- depay->packet_size = atoi (ps_string);
- if (depay->packet_size <= 16)
- goto invalid_packetsize;
-
- headers = (guint8 *) g_base64_decode (config_str, &headers_len);
-
- if (headers == NULL || headers_len < 16
- || memcmp (headers, asf_marker, 16) != 0)
- goto invalid_headers;
-
- src_caps = gst_caps_new_empty_simple ("video/x-ms-asf");
- gst_pad_set_caps (depayload->srcpad, src_caps);
- gst_caps_unref (src_caps);
-
- buf = gst_buffer_new ();
- gst_buffer_append_memory (buf,
- gst_memory_new_wrapped (0, headers, headers_len, 0, headers_len, headers,
- g_free));
-
- gst_rtp_base_depayload_push (depayload, buf);
-
- return TRUE;
-
- /* ERRORS */
-no_config:
- {
- GST_WARNING_OBJECT (depay, "caps without 'config' field with asf headers");
- return FALSE;
- }
-no_packetsize:
- {
- GST_WARNING_OBJECT (depay, "caps without 'maxps' (packet size) field");
- return FALSE;
- }
-invalid_packetsize:
- {
- GST_WARNING_OBJECT (depay, "packet size %u invalid", depay->packet_size);
- return FALSE;
- }
-invalid_headers:
- {
- GST_WARNING_OBJECT (depay, "headers don't look like valid ASF headers");
- g_free (headers);
- return FALSE;
- }
-duplicate_header:
- {
- GST_DEBUG_OBJECT (depayload, "discarding duplicate header");
- return TRUE;
- }
-refuse_renegotiation:
- {
- GST_WARNING_OBJECT (depayload, "cannot renegotiate to different header");
- return FALSE;
- }
-}
-
-static gint
-field_size (guint8 field)
-{
- switch (field) {
- /* DWORD - 32 bits */
- case 3:
- return 4;
-
- /* WORD - 16 bits */
- case 2:
- return 2;
-
- /* BYTE - 8 bits */
- case 1:
- return 1;
-
- /* non-exitent */
- case 0:
- default:
- return 0;
- }
-}
-
-/* Set the padding field to te correct value as the spec
- * says it should be se to 0 in the rtp packets
- */
-static GstBuffer *
-gst_rtp_asf_depay_update_padding (GstRtpAsfDepay * depayload, GstBuffer * buf)
-{
- GstBuffer *result;
- GstMapInfo map;
- guint8 *data;
- gint offset = 0;
- guint8 aux;
- guint8 seq_type;
- guint8 pad_type;
- guint8 pkt_type;
- gsize plen, padding;
-
- plen = gst_buffer_get_size (buf);
- if (plen == depayload->packet_size)
- return buf;
-
- padding = depayload->packet_size - plen;
-
- GST_LOG_OBJECT (depayload,
- "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen,
- depayload->packet_size);
-
- result = gst_buffer_new_and_alloc (depayload->packet_size);
-
- gst_buffer_map (result, &map, GST_MAP_READ);
- data = map.data;
- memset (data + plen, 0, padding);
-
- gst_buffer_extract (buf, 0, data, plen);
- gst_buffer_unref (buf);
-
- aux = data[offset++];
- if (aux & 0x80) {
- guint8 err_len = 0;
- if (aux & 0x60) {
- GST_WARNING_OBJECT (depayload, "Error correction length type should be "
- "set to 0");
- /* this packet doesn't follow the spec */
- gst_buffer_unmap (result, &map);
- return result;
- }
- err_len = aux & 0x0F;
- offset += err_len;
-
- aux = data[offset++];
- }
- seq_type = (aux >> 1) & 0x3;
- pad_type = (aux >> 3) & 0x3;
- pkt_type = (aux >> 5) & 0x3;
-
- offset += 1; /* skip property flags */
- offset += field_size (pkt_type); /* skip packet length */
- offset += field_size (seq_type); /* skip sequence field */
-
- /* write padding */
- switch (pad_type) {
- /* DWORD */
- case 3:
- GST_WRITE_UINT32_LE (&(data[offset]), padding);
- break;
-
- /* WORD */
- case 2:
- GST_WRITE_UINT16_LE (&(data[offset]), padding);
- break;
-
- /* BYTE */
- case 1:
- data[offset] = (guint8) padding;
- break;
-
- /* non-existent */
- case 0:
- default:
- break;
- }
- gst_buffer_unmap (result, &map);
-
- return result;
-}
-
-/* Docs: 'RTSP Protocol PDF' document from http://sdp.ppona.com/ (page 8) */
-
-static GstBuffer *
-gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
-{
- GstRtpAsfDepay *depay;
- const guint8 *payload;
- GstBuffer *outbuf;
- gboolean S, L, R, D, I;
- guint payload_len, hdr_len, offset;
- guint len_offs;
- GstClockTime timestamp;
- GstRTPBuffer rtpbuf = { NULL };
-
- depay = GST_RTP_ASF_DEPAY (depayload);
-
- /* flush remaining data on discont */
- if (GST_BUFFER_IS_DISCONT (buf)) {
- GST_LOG_OBJECT (depay, "got DISCONT");
- gst_adapter_clear (depay->adapter);
- depay->discont = TRUE;
- }
-
- gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
- timestamp = GST_BUFFER_TIMESTAMP (buf);
-
- payload_len = gst_rtp_buffer_get_payload_len (&rtpbuf);
- payload = gst_rtp_buffer_get_payload (&rtpbuf);
- offset = 0;
-
- GST_LOG_OBJECT (depay, "got payload len of %u", payload_len);
-
- do {
- guint packet_len;
-
- /* packet header is at least 4 bytes */
- if (payload_len < 4)
- goto too_small;
-
- /* 1 2 3
- * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |S|L|R|D|I|RES | Length/Offset |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | Relative Timestamp (optional) |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | Duration (optional) |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | LocationId (optional) |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *
- * S: packet contains a keyframe.
- * L: If 1, Length/Offset contains length, else contains the byte offset
- * of the fragment's first byte counted from the beginning of the
- * complete ASF data packet.
- * R: relative timestamp present
- * D: duration present
- * I: locationid present
- */
-
- S = ((payload[0] & 0x80) != 0);
- L = ((payload[0] & 0x40) != 0);
- R = ((payload[0] & 0x20) != 0);
- D = ((payload[0] & 0x10) != 0);
- I = ((payload[0] & 0x08) != 0);
-
- hdr_len = 4;
-
- len_offs = (payload[1] << 16) | (payload[2] << 8) | payload[3];
-
- if (R) {
- GST_DEBUG ("Relative timestamp field present : %u",
- GST_READ_UINT32_BE (payload + hdr_len));
- hdr_len += 4;
- }
- if (D) {
- GST_DEBUG ("Duration field present : %u",
- GST_READ_UINT32_BE (payload + hdr_len));
- hdr_len += 4;
- }
- if (I) {
- GST_DEBUG ("LocationId field present : %u",
- GST_READ_UINT32_BE (payload + hdr_len));
- hdr_len += 4;
- }
-
- GST_LOG_OBJECT (depay, "S %d, L %d, R %d, D %d, I %d", S, L, R, D, I);
- GST_LOG_OBJECT (depay, "payload_len:%d, hdr_len:%d, len_offs:%d",
- payload_len, hdr_len, len_offs);
-
- if (payload_len < hdr_len)
- goto too_small;
-
- /* skip headers */
- payload_len -= hdr_len;
- payload += hdr_len;
- offset += hdr_len;
-
- if (L) {
- /* L bit set, len contains the length of the packet */
- packet_len = len_offs;
- } else {
- /* else it contains an offset which we don't handle yet */
- GST_LOG_OBJECT (depay, "We have a fragmented packet");
- packet_len = payload_len;
- }
-
- if (packet_len > payload_len)
- packet_len = payload_len;
-
- GST_LOG_OBJECT (depay, "packet len %u, payload len %u, packet_size:%u",
- packet_len, payload_len, depay->packet_size);
-
- if (!L) {
- guint available;
- GstBuffer *sub;
-
- /* Fragmented packet handling */
- outbuf = NULL;
-
- if (len_offs == (available = gst_adapter_available (depay->adapter))) {
- /* fragment aligns with what we have, add it */
- GST_LOG_OBJECT (depay, "collecting fragment");
- sub =
- gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
- gst_adapter_push (depay->adapter, sub);
- /* RTP marker bit M is set if this is last fragment */
- if (gst_rtp_buffer_get_marker (&rtpbuf)) {
- GST_LOG_OBJECT (depay, "last fragment, assembling packet");
- outbuf =
- gst_adapter_take_buffer (depay->adapter, available + packet_len);
- }
- } else {
- if (available) {
- GST_WARNING_OBJECT (depay, "Offset doesn't match previous data?!");
- GST_DEBUG_OBJECT (depay, "clearing for re-sync");
- gst_adapter_clear (depay->adapter);
- } else
- GST_DEBUG_OBJECT (depay, "waiting for start of packet");
- }
- } else {
- GST_LOG_OBJECT (depay, "collecting packet");
- outbuf =
- gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
- }
-
- /* If we haven't completed a full ASF packet, return */
- if (!outbuf)
- return NULL;
-
- outbuf = gst_rtp_asf_depay_update_padding (depay, outbuf);
-
- if (!S)
- GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
-
- if (depay->discont) {
- GST_LOG_OBJECT (depay, "setting DISCONT");
- GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
- depay->discont = FALSE;
- }
-
- GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
-
- gst_rtp_base_depayload_push (depayload, outbuf);
-
- /* only apply the timestamp to the first buffer of this packet */
- timestamp = -1;
-
- /* skip packet data */
- payload += packet_len;
- offset += packet_len;
- payload_len -= packet_len;
- } while (payload_len > 0);
-
- gst_rtp_buffer_unmap (&rtpbuf);
-
- return NULL;
-
-/* ERRORS */
-too_small:
- {
- gst_rtp_buffer_unmap (&rtpbuf);
- GST_WARNING_OBJECT (depayload, "Payload too small, expected at least 4 "
- "bytes for header, but got only %d bytes", payload_len);
- return NULL;
- }
-}
-
-static GstStateChangeReturn
-gst_rtp_asf_depay_change_state (GstElement * element, GstStateChange trans)
-{
- GstStateChangeReturn ret;
- GstRtpAsfDepay *depay;
-
- depay = GST_RTP_ASF_DEPAY (element);
-
- switch (trans) {
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- gst_adapter_clear (depay->adapter);
- depay->discont = TRUE;
- break;
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans);
-
- switch (trans) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_adapter_clear (depay->adapter);
- break;
- default:
- break;
- }
-
- return ret;
-}
+++ /dev/null
-/* GStreamer RTP ASF depayloader
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- * 2009 Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTP_ASF_DEPAY_H__
-#define __GST_RTP_ASF_DEPAY_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-#include <gst/rtp/gstrtpbasedepayload.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTP_ASF_DEPAY \
- (gst_rtp_asf_depay_get_type())
-#define GST_RTP_ASF_DEPAY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepay))
-#define GST_RTP_ASF_DEPAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepayClass))
-#define GST_IS_RTP_ASF_DEPAY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_ASF_DEPAY))
-#define GST_IS_RTP_ASF_DEPAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_ASF_DEPAY))
-
-typedef struct _GstRtpAsfDepay GstRtpAsfDepay;
-typedef struct _GstRtpAsfDepayClass GstRtpAsfDepayClass;
-
-struct _GstRtpAsfDepay
-{
- GstRTPBaseDepayload depayload;
-
- guint packet_size;
-
- GstAdapter *adapter;
- gboolean discont;
-};
-
-struct _GstRtpAsfDepayClass
-{
- GstRTPBaseDepayloadClass depayload_class;
-};
-
-GType gst_rtp_asf_depay_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_RTP_ASF_DEPAY_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rtspwms
- * @title: rtspwms
- *
- * A WMS RTSP extension
- */
-
-#include <string.h>
-
-#include <gst/rtsp/gstrtspextension.h>
-
-#include "gstasfelements.h"
-#include "gstrtspwms.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtspwms_debug);
-#define GST_CAT_DEFAULT (rtspwms_debug)
-
-#define SERVER_PREFIX "WMServer/"
-#define HEADER_PREFIX "data:application/vnd.ms.wms-hdr.asfv1;base64,"
-#define EXTENSION_CMD "application/x-wms-extension-cmd"
-
-static GstRTSPResult
-gst_rtsp_wms_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
- GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
- GST_DEBUG_OBJECT (ext, "before send");
-
- switch (request->type_data.request.method) {
- case GST_RTSP_OPTIONS:
- {
- /* activate ourselves with the first request */
- ctx->active = TRUE;
- break;
- }
- default:
- break;
- }
- return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-gst_rtsp_wms_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
- GstRTSPMessage * resp)
-{
- GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
- GST_DEBUG_OBJECT (ext, "after send");
-
- switch (req->type_data.request.method) {
- case GST_RTSP_OPTIONS:
- {
- gchar *server = NULL;
-
- gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
- if (server && g_str_has_prefix (server, SERVER_PREFIX))
- ctx->active = TRUE;
- else
- ctx->active = FALSE;
- break;
- }
- default:
- break;
- }
- return GST_RTSP_OK;
-}
-
-
-static GstRTSPResult
-gst_rtsp_wms_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
- GstStructure * props)
-{
- const gchar *config, *maxps;
- gint i;
- GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
- if (!ctx->active)
- return GST_RTSP_OK;
-
- for (i = 0; (config = gst_sdp_message_get_attribute_val_n (sdp, "pgmpu", i));
- i++) {
- if (g_str_has_prefix (config, HEADER_PREFIX)) {
- config += strlen (HEADER_PREFIX);
- gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
- break;
- }
- }
- if (config == NULL)
- goto no_config;
-
- gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
-
- maxps = gst_sdp_message_get_attribute_val (sdp, "maxps");
- if (maxps)
- gst_structure_set (props, "maxps", G_TYPE_STRING, maxps, NULL);
-
- gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-ASF-PF", NULL);
- gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
-
- return GST_RTSP_OK;
-
- /* ERRORS */
-no_config:
- {
- GST_DEBUG_OBJECT (ctx, "Could not find config SDP field, deactivating.");
- ctx->active = FALSE;
- return GST_RTSP_OK;
- }
-}
-
-static gboolean
-gst_rtsp_wms_configure_stream (GstRTSPExtension * ext, GstCaps * caps)
-{
- GstRTSPWMS *ctx;
- GstStructure *s;
- const gchar *encoding;
-
- ctx = (GstRTSPWMS *) ext;
- s = gst_caps_get_structure (caps, 0);
- encoding = gst_structure_get_string (s, "encoding-name");
-
- if (!encoding)
- return TRUE;
-
- GST_DEBUG_OBJECT (ctx, "%" GST_PTR_FORMAT " encoding-name: %s", caps,
- encoding);
-
- /* rtx streams do not need to be configured */
- if (!strcmp (encoding, "X-WMS-RTX"))
- return FALSE;
-
- return TRUE;
-}
-
-static GstRTSPResult
-gst_rtsp_wms_receive_request (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
- GstRTSPWMS *ctx;
- GstRTSPResult res = GST_RTSP_ENOTIMPL;
- GstRTSPMessage response = { 0 };
-
- ctx = (GstRTSPWMS *) ext;
-
- GST_DEBUG_OBJECT (ext, "before send");
-
- switch (request->type_data.request.method) {
- case GST_RTSP_SET_PARAMETER:
- {
- gchar *content_type = NULL;
-
- gst_rtsp_message_get_header (request, GST_RTSP_HDR_CONTENT_TYPE,
- &content_type, 0);
-
- if (content_type && !g_ascii_strcasecmp (content_type, EXTENSION_CMD)) {
- /* parse the command */
-
- /* default implementation, send OK */
- res = gst_rtsp_message_init_response (&response, GST_RTSP_STS_OK, "OK",
- request);
- if (res < 0)
- goto send_error;
-
- GST_DEBUG_OBJECT (ctx, "replying with OK");
-
- /* send reply */
- if ((res = gst_rtsp_extension_send (ext, request, &response)) < 0)
- goto send_error;
-
- res = GST_RTSP_EEOF;
- }
- break;
- }
- default:
- break;
- }
- return res;
-
-send_error:
- {
- return res;
- }
-}
-
-static void gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data);
-
-G_DEFINE_TYPE_WITH_CODE (GstRTSPWMS, gst_rtsp_wms, GST_TYPE_ELEMENT,
- G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
- gst_rtsp_wms_extension_init));
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtspwms, "rtspwms", GST_RANK_SECONDARY,
- GST_TYPE_RTSP_WMS, asf_element_init (plugin));
-
-static void
-gst_rtsp_wms_class_init (GstRTSPWMSClass * g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- GST_DEBUG_CATEGORY_INIT (rtspwms_debug, "rtspwms", 0, "WMS RTSP extension");
-
- gst_element_class_set_static_metadata (element_class, "WMS RTSP Extension",
- "Network/Extension/Protocol",
- "Extends RTSP so that it can handle WMS setup",
- "Wim Taymans <wim.taymans@gmail.com>");
-}
-
-static void
-gst_rtsp_wms_init (GstRTSPWMS * rtspwms)
-{
-}
-
-static void
-gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data)
-{
- GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
-
- iface->parse_sdp = gst_rtsp_wms_parse_sdp;
- iface->before_send = gst_rtsp_wms_before_send;
- iface->after_send = gst_rtsp_wms_after_send;
- iface->configure_stream = gst_rtsp_wms_configure_stream;
- iface->receive_request = gst_rtsp_wms_receive_request;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTSP_WMS_H__
-#define __GST_RTSP_WMS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTSP_WMS (gst_rtsp_wms_get_type())
-#define GST_IS_RTSP_WMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_WMS))
-#define GST_IS_RTSP_WMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_WMS))
-#define GST_RTSP_WMS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_WMS, GstRTSPWMS))
-#define GST_RTSP_WMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_WMS, GstRTSPWMSClass))
-
-typedef struct _GstRTSPWMS GstRTSPWMS;
-typedef struct _GstRTSPWMSClass GstRTSPWMSClass;
-
-struct _GstRTSPWMS {
- GstElement element;
-
- gboolean active;
-};
-
-struct _GstRTSPWMSClass {
- GstElementClass parent_class;
-};
-
-GType gst_rtsp_wms_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_WMS_H__ */
+++ /dev/null
-asf_sources = [
- 'gstasfdemux.c',
- 'gstasf.c',
- 'gstasfelement.c',
- 'asfheaders.c',
- 'asfpacket.c',
- 'gstrtpasfdepay.c',
- 'gstrtspwms.c',
-]
-
-gstasf = library('gstasf',
- asf_sources,
- c_args : ugly_args,
- include_directories : [configinc, libsinc],
- dependencies : [gstbase_dep, gstrtp_dep, gstvideo_dep,
- gstaudio_dep, gsttag_dep, gstriff_dep,
- gstrtsp_dep, gstsdp_dep],
- install : true,
- install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstasf, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstasf]
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/* Element-Checklist-Version: TODO */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include "gstdvdlpcmdec.h"
-#include <gst/audio/audio.h>
-
-GST_DEBUG_CATEGORY_STATIC (dvdlpcm_debug);
-#define GST_CAT_DEFAULT dvdlpcm_debug
-
-static GstStaticPadTemplate gst_dvdlpcmdec_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-private1-lpcm; "
- "audio/x-private2-lpcm; "
- "audio/x-private-ts-lpcm; "
- "audio/x-lpcm, "
- "width = (int) { 16, 20, 24 }, "
- "rate = (int) { 32000, 44100, 48000, 96000 }, "
- "channels = (int) [ 1, 8 ], "
- "dynamic_range = (int) [ 0, 255 ], "
- "emphasis = (boolean) { TRUE, FALSE }, "
- "mute = (boolean) { TRUE, FALSE } ")
- );
-
-static GstStaticPadTemplate gst_dvdlpcmdec_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw, "
- "format = (string) { S16BE, S24BE }, "
- "layout = (string) interleaved, "
- "rate = (int) { 32000, 44100, 48000, 96000 }, "
- "channels = (int) [ 1, 8 ]")
- );
-
-#define gst_dvdlpcmdec_parent_class parent_class
-G_DEFINE_TYPE (GstDvdLpcmDec, gst_dvdlpcmdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (dvdlpcmdec, "dvdlpcmdec", GST_RANK_PRIMARY,
- GST_TYPE_DVDLPCMDEC);
-
-static gboolean gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec,
- GstCaps * caps);
-static GstFlowReturn gst_dvdlpcmdec_parse (GstAudioDecoder * bdec,
- GstAdapter * adapter, gint * offset, gint * len);
-static GstFlowReturn gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec,
- GstBuffer * buffer);
-static GstFlowReturn gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-
-
-static void
-gst_dvdlpcmdec_class_init (GstDvdLpcmDecClass * klass)
-{
- GstElementClass *element_class;
- GstAudioDecoderClass *gstbase_class;
-
- element_class = (GstElementClass *) klass;
- gstbase_class = (GstAudioDecoderClass *) klass;
-
- gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_set_format);
- gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_parse);
- gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_handle_frame);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_dvdlpcmdec_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_dvdlpcmdec_src_template);
- gst_element_class_set_static_metadata (element_class,
- "DVD LPCM Audio decoder", "Codec/Decoder/Audio",
- "Decode DVD LPCM frames into standard PCM audio",
- "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>");
-
- GST_DEBUG_CATEGORY_INIT (dvdlpcm_debug, "dvdlpcmdec", 0, "DVD LPCM Decoder");
-}
-
-static void
-gst_dvdlpcm_reset (GstDvdLpcmDec * dvdlpcmdec)
-{
- gst_audio_info_init (&dvdlpcmdec->info);
- dvdlpcmdec->dynamic_range = 0;
- dvdlpcmdec->emphasis = FALSE;
- dvdlpcmdec->mute = FALSE;
-
- dvdlpcmdec->header = 0;
-
- dvdlpcmdec->mode = GST_LPCM_UNKNOWN;
-}
-
-static void
-gst_dvdlpcmdec_init (GstDvdLpcmDec * dvdlpcmdec)
-{
- gst_dvdlpcm_reset (dvdlpcmdec);
-
- gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
- (dvdlpcmdec), TRUE);
- GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
-
- /* retrieve and intercept base class chain.
- * Quite HACKish, but that's dvd specs/caps for you,
- * since one buffer needs to be split into 2 frames */
- dvdlpcmdec->base_chain =
- GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
- gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec),
- GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_chain));
-}
-
-static const GstAudioChannelPosition channel_positions[][8] = {
- {GST_AUDIO_CHANNEL_POSITION_MONO},
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
- {GST_AUDIO_CHANNEL_POSITION_INVALID}
-};
-
-static const GstAudioChannelPosition bluray_channel_positions[][8] = {
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- /* mono */
- {GST_AUDIO_CHANNEL_POSITION_MONO},
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- /* stereo */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
- /* surround */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER},
- /* 2.1 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
- /* 4.0 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
- /* 2.2 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
- /* 5.0 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
- /* 5.1 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE1},
- /* 7.0 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
- /* 7.1 */
- {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
- GST_AUDIO_CHANNEL_POSITION_LFE1},
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID},
- /* invalid */
- {GST_AUDIO_CHANNEL_POSITION_INVALID}
-};
-
-static void
-gst_dvdlpcmdec_send_tags (GstDvdLpcmDec * dvdlpcmdec)
-{
- GstTagList *taglist;
- guint bitrate;
- gint bpf, rate;
-
- bpf = GST_AUDIO_INFO_BPF (&dvdlpcmdec->info);
- rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
-
- bitrate = bpf * 8 * rate;
-
- taglist = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "LPCM Audio",
- GST_TAG_BITRATE, bitrate, NULL);
-
- gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dvdlpcmdec), taglist,
- GST_TAG_MERGE_REPLACE);
- gst_tag_list_unref (taglist);
-}
-
-static gboolean
-gst_dvdlpcmdec_set_output_format (GstDvdLpcmDec * dvdlpcmdec)
-{
- gboolean res = TRUE;
-
- res = gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dvdlpcmdec),
- &dvdlpcmdec->info);
- if (res) {
- GST_DEBUG_OBJECT (dvdlpcmdec, "Successfully set output format");
-
- gst_dvdlpcmdec_send_tags (dvdlpcmdec);
- } else {
- GST_DEBUG_OBJECT (dvdlpcmdec, "Failed to set output format");
- }
-
- return res;
-}
-
-static void
-gst_dvdlpcmdec_update_audio_formats (GstDvdLpcmDec * dec, gint channels,
- gint rate, GstAudioFormat format, guint8 channel_indicator,
- const GstAudioChannelPosition positions[][8])
-{
- GST_DEBUG_OBJECT (dec, "got channels = %d, rate = %d, format = %d", channels,
- rate, format);
-
- /* Reorder the channel positions and set the default into for the audio */
- if (channels < 9
- && positions[channel_indicator][0] !=
- GST_AUDIO_CHANNEL_POSITION_INVALID) {
- const GstAudioChannelPosition *position;
- GstAudioChannelPosition sorted_position[8];
- guint c;
-
- position = positions[channel_indicator];
- for (c = 0; c < channels; ++c)
- sorted_position[c] = position[c];
- gst_audio_channel_positions_to_valid_order (sorted_position, channels);
- gst_audio_info_set_format (&dec->info, format, rate, channels,
- sorted_position);
- if (memcmp (position, sorted_position,
- channels * sizeof (position[0])) != 0)
- dec->lpcm_layout = position;
- else
- dec->lpcm_layout = NULL;
- } else {
- gst_audio_info_set_format (&dec->info, format, rate, channels, NULL);
- }
-}
-
-static gboolean
-gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
-{
- GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
- GstStructure *structure;
- gboolean res = TRUE;
- GstAudioFormat format;
- gint rate, channels, width;
-
- gst_dvdlpcm_reset (dvdlpcmdec);
-
- structure = gst_caps_get_structure (caps, 0);
-
- /* If we have the DVD structured LPCM (including header) then we wait
- * for incoming data before creating the output pad caps */
- if (gst_structure_has_name (structure, "audio/x-private1-lpcm")) {
- dvdlpcmdec->mode = GST_LPCM_DVD;
- goto done;
- }
- if (gst_structure_has_name (structure, "audio/x-private2-lpcm")) {
- dvdlpcmdec->mode = GST_LPCM_1394;
- goto done;
- }
- if (gst_structure_has_name (structure, "audio/x-private-ts-lpcm")) {
- dvdlpcmdec->mode = GST_LPCM_BLURAY;
- goto done;
- }
-
- dvdlpcmdec->mode = GST_LPCM_RAW;
-
- res &= gst_structure_get_int (structure, "rate", &rate);
- res &= gst_structure_get_int (structure, "channels", &channels);
- res &= gst_structure_get_int (structure, "width", &width);
- res &= gst_structure_get_int (structure, "dynamic_range",
- &dvdlpcmdec->dynamic_range);
- res &= gst_structure_get_boolean (structure, "emphasis",
- &dvdlpcmdec->emphasis);
- res &= gst_structure_get_boolean (structure, "mute", &dvdlpcmdec->mute);
-
- if (!res)
- goto caps_parse_error;
-
- switch (width) {
- case 24:
- case 20:
- format = GST_AUDIO_FORMAT_S24BE;
- break;
- case 16:
- format = GST_AUDIO_FORMAT_S16BE;
- break;
- default:
- format = GST_AUDIO_FORMAT_UNKNOWN;
- break;
- }
-
- gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
- channels - 1, channel_positions);
-
- dvdlpcmdec->width = width;
-
- res = gst_dvdlpcmdec_set_output_format (dvdlpcmdec);
-
-done:
- return res;
-
- /* ERRORS */
-caps_parse_error:
- {
- GST_DEBUG_OBJECT (dvdlpcmdec, "Couldn't get parameters; missing caps?");
- return FALSE;
- }
-}
-
-static void
-parse_header (GstDvdLpcmDec * dec, guint32 header)
-{
- GstAudioFormat format;
- gint rate, channels, width;
-
- /* We don't actually use 'dynamic range', 'mute', or 'emphasis' currently,
- * but parse them out */
- dec->dynamic_range = header & 0xff;
-
- dec->mute = (header & 0x400000) != 0;
- dec->emphasis = (header & 0x800000) != 0;
-
- /* These two bits tell us the bit depth */
- switch (header & 0xC000) {
- case 0x8000:
- /* 24 bits in 3 bytes */
- format = GST_AUDIO_FORMAT_S24BE;
- width = 24;
- break;
- case 0x4000:
- /* 20 bits in 3 bytes */
- format = GST_AUDIO_FORMAT_S24BE;
- width = 20;
- break;
- default:
- format = GST_AUDIO_FORMAT_S16BE;
- width = 16;
- break;
- }
-
- dec->width = width;
-
- /* Only four sample rates supported */
- switch (header & 0x3000) {
- case 0x0000:
- rate = 48000;
- break;
- case 0x1000:
- rate = 96000;
- break;
- case 0x2000:
- rate = 44100;
- break;
- case 0x3000:
- rate = 32000;
- break;
- default:
- rate = 0;
- break;
- }
-
- /* And, of course, the number of channels (up to 8) */
- channels = ((header >> 8) & 0x7) + 1;
-
- gst_dvdlpcmdec_update_audio_formats (dec, channels, rate, format,
- channels - 1, channel_positions);
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (parent);
- guint8 data[2];
- gsize size;
- guint first_access;
- GstBuffer *subbuf;
- GstFlowReturn ret = GST_FLOW_OK;
- gint off, len;
-
- if (dvdlpcmdec->mode != GST_LPCM_DVD)
- return dvdlpcmdec->base_chain (pad, parent, buf);
-
- size = gst_buffer_get_size (buf);
- if (size < 5)
- goto too_small;
-
- gst_buffer_extract (buf, 0, data, 2);
- first_access = (data[0] << 8) | data[1];
- if (first_access > size)
- goto invalid_data;
-
- /* After first_access, we have an additional 3 bytes of header data; this
- * is included within the value of first_access.
- * So a first_access value of between 1 and 3 is just broken, we treat that
- * the same as zero. first_access == 4 means we only need to create a single
- * sub-buffer, greater than that we need to create two. */
-
- /* skip access unit bytes */
- off = 2;
-
- if (first_access > 4) {
- /* length of first buffer */
- len = first_access - 1;
-
- GST_LOG_OBJECT (dvdlpcmdec, "Creating first sub-buffer off %d, len %d",
- off, len);
-
- /* see if we need a subbuffer without timestamp */
- if (off + len > size)
- goto bad_first_access;
-
- subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
- ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
- if (ret != GST_FLOW_OK)
- goto done;
-
- /* then the buffer with new timestamp */
- off += len;
- len = size - off;
-
- GST_LOG_OBJECT (dvdlpcmdec, "Creating next sub-buffer off %d, len %d", off,
- len);
-
- if (len > 0) {
- GstMemory *header, *tmp;
- subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
- tmp = gst_buffer_peek_memory (buf, 0);
- header = gst_memory_copy (tmp, 2, 3);
- gst_buffer_prepend_memory (subbuf, header);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-
- ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
- }
- } else {
- GST_LOG_OBJECT (dvdlpcmdec,
- "Creating single sub-buffer off %d, len %" G_GSIZE_FORMAT, off,
- size - off);
- subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, size - off);
- GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
- ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
- }
-
-done:
- gst_buffer_unref (buf);
-
- return ret;
-
- /* ERRORS */
-too_small:
- {
- /* Buffer is too small */
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet was too small. Dropping"));
- ret = GST_FLOW_OK;
- goto done;
- }
-invalid_data:
- {
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet contained invalid first access. Dropping"));
- ret = GST_FLOW_OK;
- goto done;
- }
-bad_first_access:
- {
- GST_WARNING_OBJECT (pad, "Bad first_access parameter in buffer");
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, DECODE,
- (NULL),
- ("first_access parameter out of range: bad buffer from demuxer"));
- ret = GST_FLOW_ERROR;
- goto done;
- }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_dvd (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
- gint * offset, gint * len)
-{
- guint32 header;
- const guint8 *data;
-
- data = (const guint8 *) gst_adapter_map (adapter, 3);
- if (!data)
- goto too_small;
-
- /* Don't keep the 'frame number' low 5 bits of the first byte */
- header = ((data[0] & 0xC0) << 16) | (data[1] << 8) | data[2];
-
- gst_adapter_unmap (adapter);
-
- /* see if we have a new header */
- if (header != dvdlpcmdec->header) {
- parse_header (dvdlpcmdec, header);
-
- if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
- goto negotiation_failed;
-
- dvdlpcmdec->header = header;
- }
-
- *offset = 3;
- *len = gst_adapter_available (adapter) - 3;
-
- return GST_FLOW_OK;
-
- /* ERRORS */
-too_small:
- {
- /* Buffer is too small */
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet was too small. Dropping"));
- *offset = gst_adapter_available (adapter);
- return GST_FLOW_EOS;
- }
-negotiation_failed:
- {
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
- ("Failed to configure output format"));
- return GST_FLOW_NOT_NEGOTIATED;
- }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_bluray (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
- gint * offset, gint * len)
-{
- guint32 header;
- const guint8 *data;
- guint8 channel_indicator;
-
- data = (const guint8 *) gst_adapter_map (adapter, 4);
- if (!data)
- goto too_small;
-
- header = GST_READ_UINT32_BE (data);
-
- gst_adapter_unmap (adapter);
-
- /* see if we have a new header */
- if (header != dvdlpcmdec->header) {
- GstAudioFormat format;
- gint rate, channels;
-
- switch ((header >> 6) & 0x3) {
- case 0x1:
- format = GST_AUDIO_FORMAT_S16BE;
- dvdlpcmdec->width = 16;
- break;
- case 0x2:
- format = GST_AUDIO_FORMAT_S24BE;
- dvdlpcmdec->width = 20;
- break;
- case 0x3:
- format = GST_AUDIO_FORMAT_S24BE;
- dvdlpcmdec->width = 24;
- break;
- default:
- format = GST_AUDIO_FORMAT_UNKNOWN;
- dvdlpcmdec->width = 0;
- GST_WARNING ("Invalid sample depth!");
- break;
- }
-
- switch ((header >> 8) & 0xf) {
- case 0x1:
- rate = 48000;
- break;
- case 0x4:
- rate = 96000;
- break;
- case 0x5:
- rate = 192000;
- break;
- default:
- rate = 0;
- GST_WARNING ("Invalid audio sampling frequency!");
- break;
- }
- channel_indicator = (header >> 12) & 0xf;
- switch (channel_indicator) {
- case 0x1:
- channels = 1;
- break;
- case 0x3:
- channels = 2;
- break;
- case 0x4:
- case 0x5:
- channels = 3;
- break;
- case 0x6:
- case 0x7:
- channels = 4;
- break;
- case 0x8:
- channels = 5;
- break;
- case 0x9:
- channels = 6;
- break;
- case 0xa:
- channels = 7;
- break;
- case 0xb:
- channels = 8;
- break;
- default:
- channels = 0;
- GST_WARNING ("Invalid number of audio channels!");
- goto negotiation_failed;
- }
- GST_DEBUG_OBJECT (dvdlpcmdec, "got channels %d rate %d format %s",
- channels, rate, gst_audio_format_to_string (format));
-
- gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
- channel_indicator, bluray_channel_positions);
-
- if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
- goto negotiation_failed;
-
- dvdlpcmdec->header = header;
- }
-
- *offset = 4;
- *len = gst_adapter_available (adapter) - 4;
-
- return GST_FLOW_OK;
-
- /* ERRORS */
-too_small:
- {
- /* Buffer is too small */
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet was too small. Dropping"));
- *offset = gst_adapter_available (adapter);
- return GST_FLOW_EOS;
- }
-negotiation_failed:
- {
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
- ("Failed to configure output format"));
- return GST_FLOW_NOT_NEGOTIATED;
- }
-
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_1394 (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
- gint * offset, gint * len)
-{
- guint32 header;
- const guint8 *data;
-
- data = (const guint8 *) gst_adapter_map (adapter, 4);
- if (!data)
- goto too_small;
-
- header = GST_READ_UINT32_BE (data);
-
- gst_adapter_unmap (adapter);
-
- /* see if we have a new header */
- if (header != dvdlpcmdec->header) {
- GstAudioFormat format;
- gint rate, channels;
-
- if (header >> 24 != 0xa0)
- goto invalid_data;
-
- switch ((header >> 6) & 0x3) {
- case 0x0:
- format = GST_AUDIO_FORMAT_S16BE;
- dvdlpcmdec->width = 16;
- break;
- default:
- format = GST_AUDIO_FORMAT_UNKNOWN;
- dvdlpcmdec->width = 0;
- GST_WARNING ("Invalid quantization word length!");
- break;
- }
-
- switch ((header >> 3) & 0x7) {
- case 0x1:
- rate = 44100;
- break;
- case 0x2:
- rate = 48000;
- break;
- default:
- rate = 0;
- GST_WARNING ("Invalid audio sampling frequency!");
- break;
- }
- switch (header & 0x7) {
- case 0x0: /* 2 channels dual-mono */
- case 0x1: /* 2 channels stereo */
- channels = 2;
- break;
- default:
- channels = 0;
- GST_WARNING ("Invalid number of audio channels!");
- goto negotiation_failed;
- }
-
- gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
- channels - 1, channel_positions);
-
- if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
- goto negotiation_failed;
-
- dvdlpcmdec->header = header;
- }
-
- *offset = 4;
- *len = gst_adapter_available (adapter) - 4;
-
- return GST_FLOW_OK;
-
- /* ERRORS */
-too_small:
- {
- /* Buffer is too small */
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet was too small. Dropping"));
- *offset = gst_adapter_available (adapter);
- return GST_FLOW_EOS;
- }
-invalid_data:
- {
- GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
- ("Invalid data found parsing LPCM packet"),
- ("LPCM packet contains invalid sub_stream_id."));
- return GST_FLOW_ERROR;
- }
-negotiation_failed:
- {
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
- ("Failed to configure output format"));
- return GST_FLOW_NOT_NEGOTIATED;
- }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
- gint * offset, gint * len)
-{
- GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
-
- switch (dvdlpcmdec->mode) {
- case GST_LPCM_UNKNOWN:
- return GST_FLOW_NOT_NEGOTIATED;
-
- case GST_LPCM_RAW:
- *offset = 0;
- *len = gst_adapter_available (adapter);
- return GST_FLOW_OK;
-
- case GST_LPCM_DVD:
- return gst_dvdlpcmdec_parse_dvd (dvdlpcmdec, adapter, offset, len);
-
- case GST_LPCM_1394:
- return gst_dvdlpcmdec_parse_1394 (dvdlpcmdec, adapter, offset, len);
-
- case GST_LPCM_BLURAY:
- return gst_dvdlpcmdec_parse_bluray (dvdlpcmdec, adapter, offset, len);
- }
- return GST_FLOW_ERROR;
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
-{
- GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
- gsize size;
- GstFlowReturn ret;
- guint samples = 0;
- gint rate, channels;
-
- /* no fancy draining */
- if (G_UNLIKELY (!buf))
- return GST_FLOW_OK;
-
- size = gst_buffer_get_size (buf);
-
- GST_LOG_OBJECT (dvdlpcmdec,
- "got buffer %p of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT,
- buf, size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
- rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
- channels = GST_AUDIO_INFO_CHANNELS (&dvdlpcmdec->info);
-
- if (rate == 0)
- goto not_negotiated;
-
- /* We don't currently do anything at all regarding emphasis, mute or
- * dynamic_range - I'm not sure what they're for */
- switch (dvdlpcmdec->width) {
- case 16:
- {
- /* We can just pass 16-bits straight through intact, once we set
- * appropriate things on the buffer */
- samples = size / channels / 2;
- if (samples < 1)
- goto drop;
-
- gst_buffer_ref (buf);
- break;
- }
- case 20:
- {
- /* Allocate a new buffer and copy 20-bit width to 24-bit */
- gint64 samples = size * 8 / 20;
- gint64 count = size / 10;
- gint64 i;
- GstMapInfo srcmap, destmap;
- guint8 *src;
- guint8 *dest;
- GstBuffer *outbuf;
-
- if (samples < 1)
- goto drop;
-
- outbuf = gst_buffer_new_allocate (NULL, samples * 3, NULL);
- gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-
- /* adjust samples so we can calc the new timestamp */
- samples = samples / channels;
-
- gst_buffer_map (buf, &srcmap, GST_MAP_READ);
- gst_buffer_map (outbuf, &destmap, GST_MAP_WRITE);
- src = srcmap.data;
- dest = destmap.data;
-
- /* Copy 20-bit LPCM format to 24-bit buffers, with 0x00 in the lowest
- * nibble. Note that the first 2 bytes are already correct */
- for (i = 0; i < count; i++) {
- dest[0] = src[0];
- dest[1] = src[1];
- dest[2] = src[8] & 0xf0;
- dest[3] = src[2];
- dest[4] = src[3];
- dest[5] = (src[8] & 0x0f) << 4;
- dest[6] = src[4];
- dest[7] = src[5];
- dest[8] = src[9] & 0x0f;
- dest[9] = src[6];
- dest[10] = src[7];
- dest[11] = (src[9] & 0x0f) << 4;
-
- src += 10;
- dest += 12;
- }
- gst_buffer_unmap (outbuf, &destmap);
- gst_buffer_unmap (buf, &srcmap);
- buf = outbuf;
- break;
- }
- case 24:
- {
- /* Rearrange 24-bit LPCM format in-place. Note that the first 2
- * and last byte are already correct */
- guint count = size / 12;
- gint i;
- GstMapInfo srcmap, destmap;
- guint8 *src, *dest;
- GstBuffer *outbuf;
-
- samples = size / channels / 3;
-
- if (samples < 1)
- goto drop;
-
- outbuf = gst_buffer_new_allocate (NULL, size, NULL);
- gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-
- gst_buffer_map (buf, &srcmap, GST_MAP_READ);
- gst_buffer_map (outbuf, &destmap, GST_MAP_READWRITE);
- src = srcmap.data;
- dest = destmap.data;
-
- for (i = 0; i < count; i++) {
- dest[0] = src[0];
- dest[1] = src[1];
- dest[11] = src[11];
- dest[10] = src[7];
- dest[7] = src[5];
- dest[5] = src[9];
- dest[9] = src[6];
- dest[6] = src[4];
- dest[4] = src[3];
- dest[3] = src[2];
- dest[2] = src[8];
- dest[8] = src[10];
-
- src += 12;
- dest += 12;
- }
- gst_buffer_unmap (outbuf, &destmap);
- gst_buffer_unmap (buf, &srcmap);
- buf = outbuf;
- break;
- }
- default:
- goto invalid_width;
- }
-
- if (dvdlpcmdec->lpcm_layout) {
- buf = gst_buffer_make_writable (buf);
- gst_audio_buffer_reorder_channels (buf, dvdlpcmdec->info.finfo->format,
- dvdlpcmdec->info.channels, dvdlpcmdec->lpcm_layout,
- dvdlpcmdec->info.position);
- }
-
- ret = gst_audio_decoder_finish_frame (bdec, buf, 1);
-
-done:
- return ret;
-
- /* ERRORS */
-drop:
- {
- GST_DEBUG_OBJECT (dvdlpcmdec,
- "Buffer of size %" G_GSIZE_FORMAT " is too small. Dropping", size);
- ret = GST_FLOW_OK;
- goto done;
- }
-not_negotiated:
- {
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
- ("Buffer pushed before negotiation"));
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto done;
- }
-invalid_width:
- {
- GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, WRONG_TYPE, (NULL),
- ("Invalid sample width configured"));
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto done;
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (dvdlpcmdec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- dvdlpcmdec,
- "Decode DVD LPCM frames into standard PCM",
- plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DVDLPCMDEC_H__
-#define __GST_DVDLPCMDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVDLPCMDEC \
- (gst_dvdlpcmdec_get_type())
-#define GST_DVDLPCMDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDec))
-#define GST_DVDLPCMDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDecClass))
-#define GST_IS_DVDLPCMDEC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVDLPCMDEC))
-#define GST_IS_DVDLPCMDEC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDLPCMDEC))
-
-typedef struct _GstDvdLpcmDec GstDvdLpcmDec;
-typedef struct _GstDvdLpcmDecClass GstDvdLpcmDecClass;
-
-typedef enum {
- GST_LPCM_UNKNOWN,
- GST_LPCM_RAW,
- GST_LPCM_DVD,
- GST_LPCM_1394,
- GST_LPCM_BLURAY
-} GstDvdLpcmMode;
-
-struct _GstDvdLpcmDec {
- GstAudioDecoder element;
-
- GstPadChainFunction base_chain;
-
- GstDvdLpcmMode mode;
- guint32 header;
-
- GstAudioInfo info;
- const GstAudioChannelPosition *lpcm_layout;
- gint width;
- gint dynamic_range;
- gint emphasis;
- gint mute;
-
- GstClockTime timestamp;
-};
-
-struct _GstDvdLpcmDecClass {
- GstAudioDecoderClass parent_class;
-};
-
-GType gst_dvdlpcmdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdlpcmdec);
-
-G_END_DECLS
-
-#endif /* __GST_DVDLPCMDEC_H__ */
+++ /dev/null
-dvdpl_sources = [
- 'gstdvdlpcmdec.c'
-]
-
-gstdvdlpcmdec = library('gstdvdlpcmdec',
- dvdpl_sources,
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstbase_dep, gstaudio_dep],
- install : true,
- install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstdvdlpcmdec, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstdvdlpcmdec]
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
- * Copyright (C) <2002> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdvdsubdec.h"
-#include "gstdvdsubparse.h"
-#include <string.h>
-
-GST_DEBUG_CATEGORY_STATIC (gst_dvd_sub_dec_debug);
-#define GST_CAT_DEFAULT (gst_dvd_sub_dec_debug)
-
-#define gst_dvd_sub_dec_parent_class parent_class
-G_DEFINE_TYPE (GstDvdSubDec, gst_dvd_sub_dec, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (dvdsubdec, "dvdsubdec", GST_RANK_NONE,
- GST_TYPE_DVD_SUB_DEC, GST_DEBUG_CATEGORY_INIT (gst_dvd_sub_dec_debug,
- "dvdsubdec", 0, "DVD subtitle decoder"));
-
-static gboolean gst_dvd_sub_dec_src_event (GstPad * srcpad, GstObject * parent,
- GstEvent * event);
-static GstFlowReturn gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buf);
-
-static gboolean gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec,
- GstEvent * event);
-static void gst_dvd_sub_dec_finalize (GObject * gobject);
-static void gst_setup_palette (GstDvdSubDec * dec);
-static void gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec,
- GstVideoFrame * frame);
-static GstClockTime gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec);
-static gboolean gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static gboolean gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps);
-
-static GstFlowReturn gst_send_subtitle_frame (GstDvdSubDec * dec,
- GstClockTime end_ts);
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw, format = (string) { AYUV, ARGB },"
- "width = (int) 720, height = (int) 576, framerate = (fraction) 0/1")
- );
-
-static GstStaticPadTemplate subtitle_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("subpicture/x-dvd")
- );
-
-
-enum
-{
- SPU_FORCE_DISPLAY = 0x00,
- SPU_SHOW = 0x01,
- SPU_HIDE = 0x02,
- SPU_SET_PALETTE = 0x03,
- SPU_SET_ALPHA = 0x04,
- SPU_SET_SIZE = 0x05,
- SPU_SET_OFFSETS = 0x06,
- SPU_WIPE = 0x07,
- SPU_END = 0xff
-};
-
-static const guint32 default_clut[16] = {
- 0xb48080, 0x248080, 0x628080, 0xd78080,
- 0x808080, 0x808080, 0x808080, 0x808080,
- 0x808080, 0x808080, 0x808080, 0x808080,
- 0x808080, 0x808080, 0x808080, 0x808080
-};
-
-typedef struct RLE_state
-{
- gint id;
- gint aligned;
- gint offset[2];
- gint hl_left;
- gint hl_right;
-
- guchar *target;
-
- guchar next;
-}
-RLE_state;
-
-static void
-gst_dvd_sub_dec_class_init (GstDvdSubDecClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_dvd_sub_dec_finalize;
-
- gst_element_class_add_static_pad_template (gstelement_class, &src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &subtitle_template);
-
- gst_element_class_set_static_metadata (gstelement_class,
- "DVD subtitle decoder", "Codec/Decoder/Video",
- "Decodes DVD subtitles into AYUV video frames",
- "Wim Taymans <wim.taymans@gmail.com>, "
- "Jan Schmidt <thaytan@mad.scientist.com>");
-}
-
-static void
-gst_dvd_sub_dec_init (GstDvdSubDec * dec)
-{
- GstPadTemplate *tmpl;
-
- dec->sinkpad = gst_pad_new_from_static_template (&subtitle_template, "sink");
- gst_pad_set_chain_function (dec->sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_chain));
- gst_pad_set_event_function (dec->sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_sink_event));
- gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
-
- tmpl = gst_static_pad_template_get (&src_template);
- dec->srcpad = gst_pad_new_from_template (tmpl, "src");
- gst_pad_set_event_function (dec->srcpad,
- GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_src_event));
- gst_pad_use_fixed_caps (dec->srcpad);
- gst_object_unref (tmpl);
- gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
-
- /* FIXME: aren't there more possible sizes? (tpm) */
- dec->in_width = 720;
- dec->in_height = 576;
-
- dec->partialbuf = NULL;
- dec->have_title = FALSE;
- dec->parse_pos = NULL;
- dec->forced_display = FALSE;
- dec->visible = FALSE;
-
- memcpy (dec->current_clut, default_clut, sizeof (guint32) * 16);
-
- gst_setup_palette (dec);
-
- dec->next_ts = 0;
- dec->next_event_ts = GST_CLOCK_TIME_NONE;
-
- dec->buf_dirty = TRUE;
- dec->use_ARGB = FALSE;
-}
-
-static void
-gst_dvd_sub_dec_finalize (GObject * gobject)
-{
- GstDvdSubDec *dec = GST_DVD_SUB_DEC (gobject);
-
- if (dec->partialbuf) {
- gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
- gst_buffer_unref (dec->partialbuf);
- dec->partialbuf = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-static gboolean
-gst_dvd_sub_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- gboolean res = FALSE;
-
- switch (GST_EVENT_TYPE (event)) {
- default:
- res = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return res;
-}
-
-static GstClockTime
-gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec)
-{
- guchar *buf;
- guint16 ticks;
- GstClockTime event_delay;
-
- /* If starting a new buffer, follow the first DCSQ ptr */
- if (dec->parse_pos == dec->partialmap.data) {
- buf = dec->parse_pos + dec->data_size;
- } else {
- buf = dec->parse_pos;
- }
-
- ticks = GST_READ_UINT16_BE (buf);
- event_delay = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
-
- GST_DEBUG_OBJECT (dec, "returning delay %" GST_TIME_FORMAT " from offset %u",
- GST_TIME_ARGS (event_delay), (guint) (buf - dec->parse_pos));
-
- return event_delay;
-}
-
-/*
- * Parse the next event time in the current subpicture buffer, stopping
- * when time advances to the next state.
- */
-static void
-gst_dvd_sub_dec_parse_subpic (GstDvdSubDec * dec)
-{
-#define PARSE_BYTES_NEEDED(x) if ((buf+(x)) >= end) \
- { GST_WARNING("Subtitle stream broken parsing %c", *buf); \
- broken = TRUE; break; }
-
- guchar *start = dec->partialmap.data;
- guchar *buf;
- guchar *end;
- gboolean broken = FALSE;
- gboolean last_seq = FALSE;
- guchar *next_seq = NULL;
- GstClockTime event_time;
-
- /* nothing to do if we finished this buffer already */
- if (dec->parse_pos == NULL)
- return;
-
- g_return_if_fail (dec->packet_size >= 4);
-
- end = start + dec->packet_size;
- if (dec->parse_pos == start) {
- buf = dec->parse_pos + dec->data_size;
- } else {
- buf = dec->parse_pos;
- }
-
- g_assert (buf >= start && buf < end);
-
- /* If the next control sequence is at the current offset, this is
- * the last one */
- next_seq = start + GST_READ_UINT16_BE (buf + 2);
- last_seq = (next_seq == buf);
- buf += 4;
-
- while ((buf < end) && (!broken)) {
- switch (*buf) {
- case SPU_FORCE_DISPLAY: /* Forced display menu subtitle */
- dec->forced_display = TRUE;
- dec->buf_dirty = TRUE;
- GST_DEBUG_OBJECT (dec, "SPU FORCE_DISPLAY");
- buf++;
- break;
- case SPU_SHOW: /* Show the subtitle in this packet */
- dec->visible = TRUE;
- dec->buf_dirty = TRUE;
- GST_DEBUG_OBJECT (dec, "SPU SHOW at %" GST_TIME_FORMAT,
- GST_TIME_ARGS (dec->next_event_ts));
- buf++;
- break;
- case SPU_HIDE:
- /* 02 ff (ff) is the end of the packet, hide the subpicture */
- dec->visible = FALSE;
- dec->buf_dirty = TRUE;
-
- GST_DEBUG_OBJECT (dec, "SPU HIDE at %" GST_TIME_FORMAT,
- GST_TIME_ARGS (dec->next_event_ts));
- buf++;
- break;
- case SPU_SET_PALETTE: /* palette */
- PARSE_BYTES_NEEDED (3);
-
- GST_DEBUG_OBJECT (dec, "SPU SET_PALETTE");
-
- dec->subtitle_index[3] = buf[1] >> 4;
- dec->subtitle_index[2] = buf[1] & 0xf;
- dec->subtitle_index[1] = buf[2] >> 4;
- dec->subtitle_index[0] = buf[2] & 0xf;
- gst_setup_palette (dec);
-
- dec->buf_dirty = TRUE;
- buf += 3;
- break;
- case SPU_SET_ALPHA: /* transparency palette */
- PARSE_BYTES_NEEDED (3);
-
- GST_DEBUG_OBJECT (dec, "SPU SET_ALPHA");
-
- dec->subtitle_alpha[3] = buf[1] >> 4;
- dec->subtitle_alpha[2] = buf[1] & 0xf;
- dec->subtitle_alpha[1] = buf[2] >> 4;
- dec->subtitle_alpha[0] = buf[2] & 0xf;
- gst_setup_palette (dec);
-
- dec->buf_dirty = TRUE;
- buf += 3;
- break;
- case SPU_SET_SIZE: /* image coordinates */
- PARSE_BYTES_NEEDED (7);
-
- dec->top = ((buf[4] & 0x3f) << 4) | ((buf[5] & 0xe0) >> 4);
- dec->left = ((buf[1] & 0x3f) << 4) | ((buf[2] & 0xf0) >> 4);
- dec->right = ((buf[2] & 0x03) << 8) | buf[3];
- dec->bottom = ((buf[5] & 0x03) << 8) | buf[6];
-
- GST_DEBUG_OBJECT (dec, "SPU SET_SIZE left %d, top %d, right %d, "
- "bottom %d", dec->left, dec->top, dec->right, dec->bottom);
-
- dec->buf_dirty = TRUE;
- buf += 7;
- break;
- case SPU_SET_OFFSETS: /* image 1 / image 2 offsets */
- PARSE_BYTES_NEEDED (5);
-
- dec->offset[0] = (((guint) buf[1]) << 8) | buf[2];
- dec->offset[1] = (((guint) buf[3]) << 8) | buf[4];
- GST_DEBUG_OBJECT (dec, "Offset1 %d, Offset2 %d",
- dec->offset[0], dec->offset[1]);
-
- dec->buf_dirty = TRUE;
- buf += 5;
- break;
- case SPU_WIPE:
- {
- guint length;
-
- PARSE_BYTES_NEEDED (3);
-
- GST_WARNING_OBJECT (dec, "SPU_WIPE not yet implemented");
-
- length = (buf[1] << 8) | (buf[2]);
- buf += 1 + length;
-
- dec->buf_dirty = TRUE;
- break;
- }
- case SPU_END:
- buf = (last_seq) ? end : next_seq;
-
- /* Start a new control sequence */
- if (buf + 4 < end) {
- guint16 ticks = GST_READ_UINT16_BE (buf);
-
- event_time = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
-
- GST_DEBUG_OBJECT (dec,
- "Next DCSQ at offset %u, delay %g secs (%d ticks)",
- (guint) (buf - start),
- gst_util_guint64_to_gdouble (event_time / GST_SECOND), ticks);
-
- dec->parse_pos = buf;
- if (event_time > 0) {
- dec->next_event_ts += event_time;
-
- GST_LOG_OBJECT (dec, "Exiting parse loop with time %g",
- gst_guint64_to_gdouble (dec->next_event_ts) /
- gst_guint64_to_gdouble (GST_SECOND));
- return;
- }
- break;
- } else {
- dec->parse_pos = NULL;
- dec->next_event_ts = GST_CLOCK_TIME_NONE;
- GST_LOG_OBJECT (dec, "Finished all cmds. Exiting parse loop");
- return;
- }
- default:
- GST_ERROR
- ("Invalid sequence in subtitle packet header (%.2x). Skipping",
- *buf);
- broken = TRUE;
- dec->parse_pos = NULL;
- break;
- }
- }
-}
-
-static inline int
-gst_get_nibble (guchar * buffer, RLE_state * state)
-{
- if (state->aligned) {
- state->next = buffer[state->offset[state->id]++];
- state->aligned = 0;
- return state->next >> 4;
- } else {
- state->aligned = 1;
- return state->next & 0xf;
- }
-}
-
-/* Premultiply the current lookup table into the "target" cache */
-static void
-gst_setup_palette (GstDvdSubDec * dec)
-{
- gint i;
- guint32 col;
- Color_val *target_yuv = dec->palette_cache_yuv;
- Color_val *target2_yuv = dec->hl_palette_cache_yuv;
- Color_val *target_rgb = dec->palette_cache_rgb;
- Color_val *target2_rgb = dec->hl_palette_cache_rgb;
-
- for (i = 0; i < 4; i++, target2_yuv++, target_yuv++) {
- col = dec->current_clut[dec->subtitle_index[i]];
- target_yuv->Y_R = (col >> 16) & 0xff;
- target_yuv->V_B = (col >> 8) & 0xff;
- target_yuv->U_G = col & 0xff;
- target_yuv->A = dec->subtitle_alpha[i] * 0xff / 0xf;
-
- col = dec->current_clut[dec->menu_index[i]];
- target2_yuv->Y_R = (col >> 16) & 0xff;
- target2_yuv->V_B = (col >> 8) & 0xff;
- target2_yuv->U_G = col & 0xff;
- target2_yuv->A = dec->menu_alpha[i] * 0xff / 0xf;
-
- /* If ARGB flag set, then convert YUV palette to RGB */
- /* Using integer arithmetic */
- if (dec->use_ARGB) {
- guchar C = target_yuv->Y_R - 16;
- guchar D = target_yuv->U_G - 128;
- guchar E = target_yuv->V_B - 128;
-
- target_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
- target_rgb->U_G =
- CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
- target_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
- target_rgb->A = target_yuv->A;
-
- C = target2_yuv->Y_R - 16;
- D = target2_yuv->U_G - 128;
- E = target2_yuv->V_B - 128;
-
- target2_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
- target2_rgb->U_G =
- CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
- target2_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
- target2_rgb->A = target2_yuv->A;
- }
- target_rgb++;
- target2_rgb++;
- }
-}
-
-static inline guint
-gst_get_rle_code (guchar * buffer, RLE_state * state)
-{
- gint code;
-
- code = gst_get_nibble (buffer, state);
- if (code < 0x4) { /* 4 .. f */
- code = (code << 4) | gst_get_nibble (buffer, state);
- if (code < 0x10) { /* 1x .. 3x */
- code = (code << 4) | gst_get_nibble (buffer, state);
- if (code < 0x40) { /* 04x .. 0fx */
- code = (code << 4) | gst_get_nibble (buffer, state);
- }
- }
- }
- return code;
-}
-
-#define DRAW_RUN(target,len,c) \
-G_STMT_START { \
- gint i = 0; \
- if ((c)->A) { \
- for (i = 0; i < (len); i++) { \
- *(target)++ = (c)->A; \
- *(target)++ = (c)->Y_R; \
- *(target)++ = (c)->U_G; \
- *(target)++ = (c)->V_B; \
- } \
- } else { \
- (target) += 4 * (len); \
- } \
-} G_STMT_END
-
-/*
- * This function steps over each run-length segment, drawing
- * into the YUVA/ARGB buffers as it goes. UV are composited and then output
- * at half width/height
- */
-static void
-gst_draw_rle_line (GstDvdSubDec * dec, guchar * buffer, RLE_state * state)
-{
- gint length, colourid;
- guint code;
- gint x, right;
- guchar *target;
-
- target = state->target;
-
- x = dec->left;
- right = dec->right + 1;
-
- while (x < right) {
- gboolean in_hl;
- const Color_val *colour_entry;
-
- code = gst_get_rle_code (buffer, state);
- length = code >> 2;
- colourid = code & 3;
- if (dec->use_ARGB)
- colour_entry = dec->palette_cache_rgb + colourid;
- else
- colour_entry = dec->palette_cache_yuv + colourid;
-
- /* Length = 0 implies fill to the end of the line */
- /* Restrict the colour run to the end of the line */
- if (length == 0 || x + length > right)
- length = right - x;
-
- /* Check if this run of colour touches the highlight region */
- in_hl = ((x <= state->hl_right) && (x + length) >= state->hl_left);
- if (in_hl) {
- gint run;
-
- /* Draw to the left of the highlight */
- if (x <= state->hl_left) {
- run = MIN (length, state->hl_left - x + 1);
-
- DRAW_RUN (target, run, colour_entry);
- length -= run;
- x += run;
- }
-
- /* Draw across the highlight region */
- if (x <= state->hl_right) {
- const Color_val *hl_colour;
- if (dec->use_ARGB)
- hl_colour = dec->hl_palette_cache_rgb + colourid;
- else
- hl_colour = dec->hl_palette_cache_yuv + colourid;
-
- run = MIN (length, state->hl_right - x + 1);
-
- DRAW_RUN (target, run, hl_colour);
- length -= run;
- x += run;
- }
- }
-
- /* Draw the rest of the run */
- if (length > 0) {
- DRAW_RUN (target, length, colour_entry);
- x += length;
- }
- }
-}
-
-/*
- * Decode the RLE subtitle image and blend with the current
- * frame buffer.
- */
-static void
-gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec, GstVideoFrame * frame)
-{
- gint y;
- gint Y_stride;
- guchar *buffer = dec->partialmap.data;
- gint hl_top, hl_bottom;
- gint last_y;
- RLE_state state;
- guint8 *Y_data;
-
- GST_DEBUG_OBJECT (dec, "Merging subtitle on frame");
-
- Y_data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
- Y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
-
- state.id = 0;
- state.aligned = 1;
- state.next = 0;
- state.offset[0] = dec->offset[0];
- state.offset[1] = dec->offset[1];
-
- /* center the image when display rectangle exceeds the video width */
- if (dec->in_width <= dec->right) {
- gint left, disp_width;
-
- disp_width = dec->right - dec->left + 1;
- left = (dec->in_width - disp_width) / 2;
- dec->left = left;
- dec->right = left + disp_width - 1;
-
- /* if it clips to the right, shift it left, but only till zero */
- if (dec->right >= dec->in_width) {
- gint shift = dec->right - dec->in_width - 1;
- if (shift > dec->left)
- shift = dec->left;
- dec->left -= shift;
- dec->right -= shift;
- }
-
- GST_DEBUG_OBJECT (dec, "clipping width to %d,%d",
- dec->left, dec->in_width - 1);
- }
-
- /* for the height, bring it up till it fits as well as it can. We
- * assume the picture is in the lower part. We should better check where it
- * is and do something more clever. */
- if (dec->in_height <= dec->bottom) {
-
- /* shift it up, but only till zero */
- gint shift = dec->bottom - dec->in_height - 1;
- if (shift > dec->top)
- shift = dec->top;
- dec->top -= shift;
- dec->bottom -= shift;
-
- /* start on even line */
- if (dec->top & 1) {
- dec->top--;
- dec->bottom--;
- }
-
- GST_DEBUG_OBJECT (dec, "clipping height to %d,%d",
- dec->top, dec->in_height - 1);
- }
-
- if (dec->current_button) {
- hl_top = dec->hl_top;
- hl_bottom = dec->hl_bottom;
- } else {
- hl_top = -1;
- hl_bottom = -1;
- }
- last_y = MIN (dec->bottom, dec->in_height);
-
- y = dec->top;
- state.target = Y_data + 4 * dec->left + (y * Y_stride);
-
- /* Now draw scanlines until we hit last_y or end of RLE data */
- for (; ((state.offset[1] < dec->data_size + 2) && (y <= last_y)); y++) {
- /* Set up to draw the highlight if we're in the right scanlines */
- if (y > hl_bottom || y < hl_top) {
- state.hl_left = -1;
- state.hl_right = -1;
- } else {
- state.hl_left = dec->hl_left;
- state.hl_right = dec->hl_right;
- }
- gst_draw_rle_line (dec, buffer, &state);
-
- state.target += Y_stride;
-
- /* Realign the RLE state for the next line */
- if (!state.aligned)
- gst_get_nibble (buffer, &state);
- state.id = !state.id;
- }
-}
-
-static void
-gst_send_empty_fill (GstDvdSubDec * dec, GstClockTime ts)
-{
- if (dec->next_ts < ts) {
- GST_LOG_OBJECT (dec, "Sending GAP event update to advance time to %"
- GST_TIME_FORMAT, GST_TIME_ARGS (ts));
-
- gst_pad_push_event (dec->srcpad,
- gst_event_new_gap (dec->next_ts, ts - dec->next_ts));
- }
- dec->next_ts = ts;
-}
-
-static GstFlowReturn
-gst_send_subtitle_frame (GstDvdSubDec * dec, GstClockTime end_ts)
-{
- GstFlowReturn flow;
- GstBuffer *out_buf;
- GstVideoFrame frame;
- guint8 *data;
- gint x, y;
- static GstAllocationParams params = { 0, 3, 0, 0, };
-
- g_assert (dec->have_title);
- g_assert (dec->next_ts <= end_ts);
-
- /* Check if we need to redraw the output buffer */
- if (!dec->buf_dirty) {
- flow = GST_FLOW_OK;
- goto out;
- }
-
- out_buf =
- gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&dec->info), ¶ms);
- gst_video_frame_map (&frame, &dec->info, out_buf, GST_MAP_READWRITE);
-
- data = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
-
- /* Clear the buffer */
- /* FIXME - move this into the buffer rendering code */
- for (y = 0; y < dec->in_height; y++) {
- guchar *line = data + 4 * dec->in_width * y;
-
- for (x = 0; x < dec->in_width; x++) {
- line[0] = 0; /* A */
- if (!dec->use_ARGB) {
- line[1] = 16; /* Y */
- line[2] = 128; /* U */
- line[3] = 128; /* V */
- } else {
- line[1] = 0; /* R */
- line[2] = 0; /* G */
- line[3] = 0; /* B */
- }
-
- line += 4;
- }
- }
-
- /* FIXME: do we really want to honour the forced_display flag
- * for subtitles streans? */
- if (dec->visible || dec->forced_display) {
- gst_dvd_sub_dec_merge_title (dec, &frame);
- }
-
- gst_video_frame_unmap (&frame);
-
- dec->buf_dirty = FALSE;
-
- GST_BUFFER_TIMESTAMP (out_buf) = dec->next_ts;
- if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts)) {
- GST_BUFFER_DURATION (out_buf) = GST_CLOCK_DIFF (dec->next_ts,
- dec->next_event_ts);
- } else {
- GST_BUFFER_DURATION (out_buf) = GST_CLOCK_TIME_NONE;
- }
-
- GST_DEBUG_OBJECT (dec, "Sending subtitle buffer with ts %"
- GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (out_buf)),
- GST_BUFFER_DURATION (out_buf));
-
- flow = gst_pad_push (dec->srcpad, out_buf);
-
-out:
- dec->next_ts = end_ts;
- return flow;
-}
-
-/* Walk time forward, processing any subtitle events as needed. */
-static GstFlowReturn
-gst_dvd_sub_dec_advance_time (GstDvdSubDec * dec, GstClockTime new_ts)
-{
- GstFlowReturn ret = GST_FLOW_OK;
-
- GST_LOG_OBJECT (dec, "Advancing time to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (new_ts));
-
- if (!dec->have_title) {
- gst_send_empty_fill (dec, new_ts);
- return ret;
- }
-
- while (dec->next_ts < new_ts) {
- GstClockTime next_ts = new_ts;
-
- if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts) &&
- dec->next_event_ts < next_ts) {
- /* We might need to process the subtitle cmd queue */
- next_ts = dec->next_event_ts;
- }
-
- /*
- * Now, either output a filler or a frame spanning
- * dec->next_ts to next_ts
- */
- if (dec->visible || dec->forced_display) {
- ret = gst_send_subtitle_frame (dec, next_ts);
- } else {
- gst_send_empty_fill (dec, next_ts);
- }
-
- /*
- * and then process some subtitle cmds if we need
- */
- if (next_ts == dec->next_event_ts)
- gst_dvd_sub_dec_parse_subpic (dec);
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- GstDvdSubDec *dec;
- guint8 *data;
- glong size = 0;
-
- dec = GST_DVD_SUB_DEC (parent);
-
- GST_DEBUG_OBJECT (dec, "Have buffer of size %" G_GSIZE_FORMAT ", ts %"
- GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT, gst_buffer_get_size (buf),
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_DURATION (buf));
-
- if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- if (!GST_CLOCK_TIME_IS_VALID (dec->next_ts)) {
- dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
- }
-
- /* Move time forward to the start of the new buffer */
- ret = gst_dvd_sub_dec_advance_time (dec, GST_BUFFER_TIMESTAMP (buf));
- }
-
- if (dec->have_title) {
- gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
- gst_buffer_unref (dec->partialbuf);
- dec->partialbuf = NULL;
- dec->have_title = FALSE;
- }
-
- GST_DEBUG_OBJECT (dec, "Got subtitle buffer, pts %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
- /* deal with partial frame from previous buffer */
- if (dec->partialbuf) {
- gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
- dec->partialbuf = gst_buffer_append (dec->partialbuf, buf);
- } else {
- dec->partialbuf = buf;
- }
-
- gst_buffer_map (dec->partialbuf, &dec->partialmap, GST_MAP_READ);
-
- data = dec->partialmap.data;
- size = dec->partialmap.size;
-
- if (size > 4) {
- dec->packet_size = GST_READ_UINT16_BE (data);
-
- if (dec->packet_size == size) {
- GST_LOG_OBJECT (dec, "Subtitle packet size %d, current size %ld",
- dec->packet_size, size);
-
- dec->data_size = GST_READ_UINT16_BE (data + 2);
-
- /* Reset parameters for a new subtitle buffer */
- dec->parse_pos = data;
- dec->forced_display = FALSE;
- dec->visible = FALSE;
-
- dec->have_title = TRUE;
- dec->next_event_ts = GST_BUFFER_TIMESTAMP (dec->partialbuf);
-
- if (!GST_CLOCK_TIME_IS_VALID (dec->next_event_ts))
- dec->next_event_ts = dec->next_ts;
-
- dec->next_event_ts += gst_dvd_sub_dec_get_event_delay (dec);
- }
- }
-
- return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps)
-{
- GstDvdSubDec *dec = GST_DVD_SUB_DEC (gst_pad_get_parent (pad));
- gboolean ret = FALSE;
- GstCaps *out_caps = NULL, *peer_caps = NULL;
-
- GST_DEBUG_OBJECT (dec, "setcaps called with %" GST_PTR_FORMAT, caps);
-
- out_caps = gst_caps_new_simple ("video/x-raw",
- "format", G_TYPE_STRING, "AYUV",
- "width", G_TYPE_INT, dec->in_width,
- "height", G_TYPE_INT, dec->in_height,
- "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
-
- peer_caps = gst_pad_get_allowed_caps (dec->srcpad);
- if (G_LIKELY (peer_caps)) {
- guint i = 0, n = 0;
-
- n = gst_caps_get_size (peer_caps);
- GST_DEBUG_OBJECT (dec, "peer allowed caps (%u structure(s)) are %"
- GST_PTR_FORMAT, n, peer_caps);
-
- for (i = 0; i < n; i++) {
- GstStructure *s = gst_caps_get_structure (peer_caps, i);
- /* Check if the peer pad support ARGB format, if yes change caps */
- if (gst_structure_has_name (s, "video/x-raw")) {
- GstCaps *downstream_caps;
- gst_caps_unref (out_caps);
- GST_DEBUG_OBJECT (dec, "trying with ARGB");
-
- out_caps = gst_caps_new_simple ("video/x-raw",
- "format", G_TYPE_STRING, "ARGB",
- "width", G_TYPE_INT, dec->in_width,
- "height", G_TYPE_INT, dec->in_height,
- "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
-
- downstream_caps = gst_pad_peer_query_caps (dec->srcpad, NULL);
- if (gst_caps_can_intersect (downstream_caps, out_caps)) {
- gst_caps_unref (downstream_caps);
- GST_DEBUG_OBJECT (dec, "peer accepted ARGB");
- /* If ARGB format then set the flag */
- dec->use_ARGB = TRUE;
- break;
- }
- gst_caps_unref (downstream_caps);
- }
- }
- gst_caps_unref (peer_caps);
- }
- GST_DEBUG_OBJECT (dec, "setting caps downstream to %" GST_PTR_FORMAT,
- out_caps);
- if (gst_pad_set_caps (dec->srcpad, out_caps)) {
- gst_video_info_from_caps (&dec->info, out_caps);
- } else {
- GST_WARNING_OBJECT (dec, "failed setting downstream caps");
- gst_caps_unref (out_caps);
- goto beach;
- }
-
- gst_caps_unref (out_caps);
- ret = TRUE;
-
-beach:
- gst_object_unref (dec);
- return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstDvdSubDec *dec = GST_DVD_SUB_DEC (parent);
- gboolean ret = FALSE;
-
- GST_LOG_OBJECT (dec, "%s event", GST_EVENT_TYPE_NAME (event));
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_CAPS:
- {
- GstCaps *caps;
-
- gst_event_parse_caps (event, &caps);
- ret = gst_dvd_sub_dec_sink_setcaps (pad, caps);
- gst_event_unref (event);
- break;
- }
- case GST_EVENT_CUSTOM_DOWNSTREAM:{
-
- if (gst_event_has_name (event, "application/x-gst-dvd")) {
- const GstStructure *s = gst_event_get_structure (event);
- GstClockTime ts = GST_CLOCK_TIME_NONE;
-
- if (gst_structure_get_clock_time (s, "ts", &ts)
- && GST_CLOCK_TIME_IS_VALID (ts))
- gst_dvd_sub_dec_advance_time (dec, ts);
-
- if (gst_dvd_sub_dec_handle_dvd_event (dec, event)) {
- /* gst_dvd_sub_dec_advance_time (dec, dec->next_ts + GST_SECOND / 30.0); */
- gst_event_unref (event);
- ret = TRUE;
- break;
- }
- }
-
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
- case GST_EVENT_GAP:
- {
- GstClockTime start, duration;
-
- gst_event_parse_gap (event, &start, &duration);
- if (GST_CLOCK_TIME_IS_VALID (start)) {
- if (GST_CLOCK_TIME_IS_VALID (duration))
- start += duration;
- /* we do not expect another buffer until after gap,
- * so that is our position now */
- GST_DEBUG_OBJECT (dec, "Got GAP event, advancing time from %"
- GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (dec->next_ts), GST_TIME_ARGS (start));
-
- gst_dvd_sub_dec_advance_time (dec, start);
- } else {
- GST_WARNING_OBJECT (dec, "Got GAP event with invalid position");
- }
-
- gst_event_unref (event);
- ret = TRUE;
- break;
- }
- case GST_EVENT_SEGMENT:
- {
- GstSegment seg;
-
- gst_event_copy_segment (event, &seg);
-
- {
-#if 0
- /* Turn off forced highlight display */
- dec->forced_display = 0;
- dec->current_button = 0;
-#endif
- if (dec->partialbuf) {
- gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
- gst_buffer_unref (dec->partialbuf);
- dec->partialbuf = NULL;
- dec->have_title = FALSE;
- }
-
- if (GST_CLOCK_TIME_IS_VALID (seg.time))
- dec->next_ts = seg.time;
- else
- dec->next_ts = GST_CLOCK_TIME_NONE;
-
- GST_DEBUG_OBJECT (dec, "Got newsegment, new time = %"
- GST_TIME_FORMAT, GST_TIME_ARGS (dec->next_ts));
-
- ret = gst_pad_event_default (pad, parent, event);
- }
- break;
- }
- case GST_EVENT_FLUSH_STOP:{
- /* Turn off forced highlight display */
- dec->forced_display = 0;
- dec->current_button = 0;
-
- if (dec->partialbuf) {
- gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
- gst_buffer_unref (dec->partialbuf);
- dec->partialbuf = NULL;
- dec->have_title = FALSE;
- }
-
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
- default:{
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
- }
- return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec, GstEvent * event)
-{
- GstStructure *structure;
- const gchar *event_name;
-
- structure = (GstStructure *) gst_event_get_structure (event);
-
- if (structure == NULL)
- goto not_handled;
-
- event_name = gst_structure_get_string (structure, "event");
-
- GST_LOG_OBJECT (dec,
- "DVD event %s with timestamp %" G_GINT64_FORMAT " on sub pad",
- GST_STR_NULL (event_name), GST_EVENT_TIMESTAMP (event));
-
- if (event_name == NULL)
- goto not_handled;
-
- if (strcmp (event_name, "dvd-spu-highlight") == 0) {
- gint button;
- gint palette, sx, sy, ex, ey;
- gint i;
-
- /* Details for the highlight region to display */
- if (!gst_structure_get_int (structure, "button", &button) ||
- !gst_structure_get_int (structure, "palette", &palette) ||
- !gst_structure_get_int (structure, "sx", &sx) ||
- !gst_structure_get_int (structure, "sy", &sy) ||
- !gst_structure_get_int (structure, "ex", &ex) ||
- !gst_structure_get_int (structure, "ey", &ey)) {
- GST_ERROR_OBJECT (dec, "Invalid dvd-spu-highlight event received");
- return TRUE;
- }
- dec->current_button = button;
- dec->hl_left = sx;
- dec->hl_top = sy;
- dec->hl_right = ex;
- dec->hl_bottom = ey;
- for (i = 0; i < 4; i++) {
- dec->menu_alpha[i] = ((guint32) (palette) >> (i * 4)) & 0x0f;
- dec->menu_index[i] = ((guint32) (palette) >> (16 + (i * 4))) & 0x0f;
- }
-
- GST_DEBUG_OBJECT (dec, "New button activated highlight=(%d,%d) to (%d,%d) "
- "palette 0x%x", sx, sy, ex, ey, palette);
- gst_setup_palette (dec);
-
- dec->buf_dirty = TRUE;
- } else if (strcmp (event_name, "dvd-spu-clut-change") == 0) {
- /* Take a copy of the colour table */
- gchar name[16];
- int i;
- gint value;
-
- GST_LOG_OBJECT (dec, "New colour table received");
- for (i = 0; i < 16; i++) {
- g_snprintf (name, sizeof (name), "clut%02d", i);
- if (!gst_structure_get_int (structure, name, &value)) {
- GST_ERROR_OBJECT (dec, "dvd-spu-clut-change event did not "
- "contain %s field", name);
- break;
- }
- dec->current_clut[i] = (guint32) (value);
- }
-
- gst_setup_palette (dec);
-
- dec->buf_dirty = TRUE;
- } else if (strcmp (event_name, "dvd-spu-stream-change") == 0
- || strcmp (event_name, "dvd-spu-reset-highlight") == 0) {
- /* Turn off forced highlight display */
- dec->current_button = 0;
-
- GST_LOG_OBJECT (dec, "Clearing button state");
- dec->buf_dirty = TRUE;
- } else if (strcmp (event_name, "dvd-spu-still-frame") == 0) {
- /* Handle a still frame */
- GST_LOG_OBJECT (dec, "Received still frame notification");
- } else {
- goto not_handled;
- }
-
- return TRUE;
-
-not_handled:
- {
- /* Ignore all other unknown events */
- GST_LOG_OBJECT (dec, "Ignoring other custom event %" GST_PTR_FORMAT,
- structure);
- return FALSE;
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gboolean ret = FALSE;
-
- ret |= GST_ELEMENT_REGISTER (dvdsubdec, plugin);
- ret |= GST_ELEMENT_REGISTER (dvdsubparse, plugin);
-
- return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- dvdsub,
- "DVD subtitle parser and decoder", plugin_init,
- VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
- * Copyright (C) <2002> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#ifndef __GST_DVDSUBDEC_H__
-#define __GST_DVDSUBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_SUB_DEC (gst_dvd_sub_dec_get_type())
-#define GST_DVD_SUB_DEC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_SUB_DEC,GstDvdSubDec))
-#define GST_DVD_SUB_DEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_SUB_DEC,GstDvdSubDecClass))
-#define GST_IS_DVD_SUB_DEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_SUB_DEC))
-#define GST_IS_DVD_SUB_DEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SUB_DEC))
-
-typedef struct _GstDvdSubDec GstDvdSubDec;
-typedef struct _GstDvdSubDecClass GstDvdSubDecClass;
-
-/* Hold premultimplied colour values */
-typedef struct Color_val
-{
- guchar Y_R;
- guchar U_G;
- guchar V_B;
- guchar A;
-
-} Color_val;
-
-struct _GstDvdSubDec
-{
- GstElement element;
-
- GstPad *sinkpad;
- GstPad *srcpad;
-
- gint in_width, in_height;
-
- /* Collect together subtitle buffers until we have a full control sequence */
- GstBuffer *partialbuf;
- GstMapInfo partialmap;
- gboolean have_title;
-
- guchar subtitle_index[4];
- guchar menu_index[4];
- guchar subtitle_alpha[4];
- guchar menu_alpha[4];
-
- guint32 current_clut[16];
- Color_val palette_cache_yuv[4];
- Color_val hl_palette_cache_yuv[4];
-
- Color_val palette_cache_rgb[4];
- Color_val hl_palette_cache_rgb[4];
-
- GstVideoInfo info;
- gboolean use_ARGB;
- GstClockTime next_ts;
-
- /*
- * State info for the current subpicture
- * buffer
- */
- guchar *parse_pos;
-
- guint16 packet_size;
- guint16 data_size;
-
- gint offset[2];
-
- gboolean forced_display;
- gboolean visible;
-
- gint left, top, right, bottom;
- gint hl_left, hl_top, hl_right, hl_bottom;
-
- gint current_button;
-
- GstClockTime next_event_ts;
-
- gboolean buf_dirty;
-};
-
-struct _GstDvdSubDecClass
-{
- GstElementClass parent_class;
-};
-
-GType gst_dvd_sub_dec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdsubdec);
-
-G_END_DECLS
-
-#endif /* __GST_DVDSUBDEC_H__ */
+++ /dev/null
-/* GStreamer DVD subtitle parser
- * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gst/gst.h>
-#include "gstdvdsubparse.h"
-
-GST_DEBUG_CATEGORY_STATIC (dvdsubparse_debug);
-#define GST_CAT_DEFAULT dvdsubparse_debug
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("subpicture/x-dvd, parsed=(boolean)true")
- );
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("subpicture/x-dvd")
- );
-
-static void gst_dvd_sub_parse_finalize (GObject * object);
-
-static void gst_dvd_sub_parse_reset (GstDvdSubParse * parse);
-
-static gboolean gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static GstFlowReturn gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buf);
-
-static GstStateChangeReturn gst_dvd_sub_parse_change_state (GstElement *
- element, GstStateChange transition);
-
-#define gst_dvd_sub_parse_parent_class parent_class
-G_DEFINE_TYPE (GstDvdSubParse, gst_dvd_sub_parse, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (dvdsubparse, "dvdsubparse", GST_RANK_NONE,
- GST_TYPE_DVD_SUB_PARSE);
-
-static void
-gst_dvd_sub_parse_class_init (GstDvdSubParseClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_dvd_sub_parse_finalize;
-
- GST_DEBUG_CATEGORY_INIT (dvdsubparse_debug, "dvdsubparse", 0,
- "DVD subtitle parser");
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_change_state);
-
- gst_element_class_add_static_pad_template (gstelement_class, &src_template);
- gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
-
- gst_element_class_set_static_metadata (gstelement_class,
- "DVD subtitle parser", "Codec/Parser/Subtitle",
- "Parses and packetizes DVD subtitle streams",
- "Mark Nauwelaerts <mnauw@users.sourceforge.net>");
-}
-
-static void
-gst_dvd_sub_parse_finalize (GObject * object)
-{
- GstDvdSubParse *parse = GST_DVD_SUB_PARSE (object);
-
- g_object_unref (parse->adapter);
- parse->adapter = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_dvd_sub_parse_init (GstDvdSubParse * parse)
-{
- parse->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
- gst_pad_set_chain_function (parse->sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_chain));
- gst_pad_set_event_function (parse->sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_event));
- gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
-
- parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
- gst_pad_use_fixed_caps (parse->srcpad);
- gst_pad_set_caps (parse->srcpad,
- gst_static_pad_template_get_caps (&src_template));
- gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
-
- /* remainder */
- parse->adapter = gst_adapter_new ();
- gst_dvd_sub_parse_reset (parse);
-}
-
-static void
-gst_dvd_sub_parse_reset (GstDvdSubParse * parse)
-{
- parse->needed = 0;
- parse->stamp = GST_CLOCK_TIME_NONE;
- gst_adapter_clear (parse->adapter);
-}
-
-static gboolean
-gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstDvdSubParse *parse;
- gboolean ret;
-
- parse = GST_DVD_SUB_PARSE (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_CAPS:
- {
- GstCaps *caps;
-
- gst_event_unref (event);
- caps = gst_static_pad_template_get_caps (&src_template);
- gst_pad_push_event (parse->srcpad, gst_event_new_caps (caps));
- gst_caps_unref (caps);
- ret = TRUE;
- break;
- }
- case GST_EVENT_FLUSH_STOP:
- gst_dvd_sub_parse_reset (parse);
- /* fall-through */
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-
-static GstFlowReturn
-gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstDvdSubParse *parse = GST_DVD_SUB_PARSE (parent);
- GstAdapter *adapter;
- GstBuffer *outbuf = NULL;
- GstFlowReturn ret = GST_FLOW_OK;
-
- adapter = parse->adapter;
-
- GST_LOG_OBJECT (parse, "%" G_GSIZE_FORMAT " bytes, ts: %" GST_TIME_FORMAT,
- gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
- gst_adapter_push (adapter, buf);
-
- if (!parse->needed) {
- guint8 data[2];
-
- gst_adapter_copy (adapter, data, 0, 2);
- parse->needed = GST_READ_UINT16_BE (data);
- }
-
- if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- if (GST_CLOCK_TIME_IS_VALID (parse->stamp))
- /* normally, we expect only the first fragment to carry a timestamp */
- GST_WARNING_OBJECT (parse, "Received more timestamps than expected.");
- else
- parse->stamp = GST_BUFFER_TIMESTAMP (buf);
- }
-
- if (parse->needed) {
- guint av;
-
- av = gst_adapter_available (adapter);
- if (av >= parse->needed) {
- if (av > parse->needed) {
- /* normally, we expect several fragment, boundary aligned */
- GST_WARNING_OBJECT (parse, "Unexpected: needed %d, "
- "but more (%d) is available.", parse->needed, av);
- }
- outbuf = gst_adapter_take_buffer (adapter, parse->needed);
- /* decorate buffer */
- GST_BUFFER_TIMESTAMP (outbuf) = parse->stamp;
- /* reset state */
- parse->stamp = GST_CLOCK_TIME_NONE;
- parse->needed = 0;
- /* and send along */
- ret = gst_pad_push (parse->srcpad, outbuf);
- }
- }
-
- return ret;
-}
-
-static GstStateChangeReturn
-gst_dvd_sub_parse_change_state (GstElement * element, GstStateChange transition)
-{
- GstDvdSubParse *parse = GST_DVD_SUB_PARSE (element);
- GstStateChangeReturn ret;
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- break;
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- break;
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
- if (ret != GST_STATE_CHANGE_SUCCESS)
- return ret;
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_dvd_sub_parse_reset (parse);
- break;
- default:
- break;
- }
-
- return GST_STATE_CHANGE_SUCCESS;
-}
+++ /dev/null
-/* GStreamer DVD subtitle parser
- * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DVDSUBPARSE_H__
-#define __GST_DVDSUBPARSE_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_SUB_PARSE \
- (gst_dvd_sub_parse_get_type())
-#define GST_DVD_SUB_PARSE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParse))
-#define GST_DVD_SUB_PARSE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
-#define GST_DVD_SUB_PARSE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
-#define GST_IS_DVD_SUB_PARSE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_DVD_SUB_PARSE))
-#define GST_IS_DVD_SUB_PARSE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_DVD_SUB_PARSE))
-
-typedef struct _GstDvdSubParse GstDvdSubParse;
-typedef struct _GstDvdSubParseClass GstDvdSubParseClass;
-
-struct _GstDvdSubParse {
- GstElement element;
-
- /*< private >*/
- GstPad *srcpad;
- GstPad *sinkpad;
-
- GstAdapter *adapter; /* buffer incoming data */
- GstClockTime stamp; /* timestamp of current packet */
- guint needed; /* size of current packet to be assembled */
-};
-
-struct _GstDvdSubParseClass {
- GstElementClass parent_class;
-};
-
-GType gst_dvd_sub_parse_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdsubparse);
-
-G_END_DECLS
-
-#endif /* __GST_DVDSUBPARSE_H__ */
-
+++ /dev/null
-dvdsub_sources = [
- 'gstdvdsubdec.c',
- 'gstdvdsubparse.c',
-]
-
-gstdvdsub = library('gstdvdsub',
- dvdsub_sources,
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstbase_dep, gstvideo_dep],
- install : true,
- install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstdvdsub, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstdvdsub]
+++ /dev/null
-foreach plugin : ['asfdemux', 'dvdlpcmdec', 'dvdsub', 'realmedia', 'xingmux']
- if not get_option(plugin).disabled()
- subdir(plugin)
- endif
-endforeach
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <string.h>
-#include <stdlib.h>
-
-#include "asmrules.h"
-
-#define MAX_RULE_LENGTH 2048
-
-/* define to enable some more debug */
-#undef DEBUG
-
-static GstASMNode *
-gst_asm_node_new (void)
-{
- GstASMNode *node;
-
- node = g_new0 (GstASMNode, 1);
- node->type = GST_ASM_NODE_UNKNOWN;
-
- return node;
-}
-
-static void
-gst_asm_node_free (GstASMNode * node)
-{
- if (node->left)
- gst_asm_node_free (node->left);
- if (node->right)
- gst_asm_node_free (node->right);
- if (node->type == GST_ASM_NODE_VARIABLE && node->data.varname)
- g_free (node->data.varname);
- g_free (node);
-}
-
-static gfloat
-gst_asm_operator_eval (GstASMOp optype, gfloat left, gfloat right)
-{
- gfloat result = 0.0;
-
- switch (optype) {
- case GST_ASM_OP_GREATER:
- result = (gfloat) (left > right);
- break;
- case GST_ASM_OP_LESS:
- result = (gfloat) (left < right);
- break;
- case GST_ASM_OP_GREATEREQUAL:
- result = (gfloat) (left >= right);
- break;
- case GST_ASM_OP_LESSEQUAL:
- result = (gfloat) (left <= right);
- break;
- case GST_ASM_OP_EQUAL:
- result = (gfloat) (left == right);
- break;
- case GST_ASM_OP_NOTEQUAL:
- result = (gfloat) (left != right);
- break;
- case GST_ASM_OP_AND:
- result = (gfloat) (left && right);
- break;
- case GST_ASM_OP_OR:
- result = (gfloat) (left || right);
- break;
- default:
- break;
- }
- return result;
-}
-
-static gfloat
-gst_asm_node_evaluate (GstASMNode * node, GHashTable * vars)
-{
- gfloat result = 0.0;
-
- if (node == NULL)
- return 0.0;
-
- switch (node->type) {
- case GST_ASM_NODE_VARIABLE:
- {
- gchar *val;
-
- val = g_hash_table_lookup (vars, node->data.varname);
- if (val)
- result = (gfloat) atof (val);
- break;
- }
- case GST_ASM_NODE_INTEGER:
- result = (gfloat) node->data.intval;
- break;
- case GST_ASM_NODE_FLOAT:
- result = node->data.floatval;
- break;
- case GST_ASM_NODE_OPERATOR:
- {
- gfloat left, right;
-
- left = gst_asm_node_evaluate (node->left, vars);
- right = gst_asm_node_evaluate (node->right, vars);
-
- result = gst_asm_operator_eval (node->data.optype, left, right);
- break;
- }
- default:
- break;
- }
- return result;
-}
-
-#define IS_SPACE(p) (((p) == ' ') || ((p) == '\n') || \
- ((p) == '\r') || ((p) == '\t'))
-#define IS_RULE_DELIM(p) (((p) == ',') || ((p) == ';') || ((p) == ')'))
-#define IS_OPERATOR(p) (((p) == '>') || ((p) == '<') || \
- ((p) == '=') || ((p) == '!') || \
- ((p) == '&') || ((p) == '|'))
-#define IS_NUMBER(p) ((((p) >= '0') && ((p) <= '9')) || ((p) == '.'))
-#define IS_CHAR(p) (!IS_OPERATOR(ch) && !IS_RULE_DELIM(ch) && (ch != '\0'))
-
-#define IS_OP_TOKEN(t) (((t) == GST_ASM_TOKEN_AND) || ((t) == GST_ASM_TOKEN_OR))
-#define IS_COND_TOKEN(t) (((t) == GST_ASM_TOKEN_LESS) || ((t) == GST_ASM_TOKEN_LESSEQUAL) || \
- ((t) == GST_ASM_TOKEN_GREATER) || ((t) == GST_ASM_TOKEN_GREATEREQUAL) || \
- ((t) == GST_ASM_TOKEN_EQUAL) || ((t) == GST_ASM_TOKEN_NOTEQUAL))
-
-typedef struct
-{
- const gchar *buffer;
- gint pos;
- gchar ch;
-
- GstASMToken token;
- gchar val[MAX_RULE_LENGTH];
-} GstASMScan;
-
-#define NEXT_CHAR(scan) ((scan)->ch = (scan)->buffer[(scan)->pos++])
-#define THIS_CHAR(scan) ((scan)->ch)
-
-static GstASMScan *
-gst_asm_scan_new (const gchar * buffer)
-{
- GstASMScan *scan;
-
- scan = g_new0 (GstASMScan, 1);
- scan->buffer = buffer;
- NEXT_CHAR (scan);
-
- return scan;
-}
-
-static void
-gst_asm_scan_free (GstASMScan * scan)
-{
- g_free (scan);
-}
-
-static void
-gst_asm_scan_string (GstASMScan * scan, gchar delim)
-{
- gchar ch;
- gint i = 0;
-
- ch = THIS_CHAR (scan);
- while ((ch != delim) && (ch != '\0')) {
- if (i < MAX_RULE_LENGTH - 1)
- scan->val[i++] = ch;
- ch = NEXT_CHAR (scan);
- if (ch == '\\')
- ch = NEXT_CHAR (scan);
- }
- scan->val[i] = '\0';
-
- if (ch == delim)
- NEXT_CHAR (scan);
-
- scan->token = GST_ASM_TOKEN_STRING;
-}
-
-static void
-gst_asm_scan_number (GstASMScan * scan)
-{
- gchar ch;
- gint i = 0;
- gboolean have_float = FALSE;
-
- ch = THIS_CHAR (scan);
- /* real strips all spaces that are not inside quotes for numbers */
- while ((IS_NUMBER (ch) || IS_SPACE (ch))) {
- if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
- scan->val[i++] = ch;
- if (ch == '.')
- have_float = TRUE;
- ch = NEXT_CHAR (scan);
- }
- scan->val[i] = '\0';
-
- if (have_float)
- scan->token = GST_ASM_TOKEN_FLOAT;
- else
- scan->token = GST_ASM_TOKEN_INT;
-}
-
-static void
-gst_asm_scan_identifier (GstASMScan * scan)
-{
- gchar ch;
- gint i = 0;
-
- ch = THIS_CHAR (scan);
- /* real strips all spaces that are not inside quotes for identifiers */
- while ((IS_CHAR (ch) || IS_SPACE (ch))) {
- if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
- scan->val[i++] = ch;
- ch = NEXT_CHAR (scan);
- }
- scan->val[i] = '\0';
-
- scan->token = GST_ASM_TOKEN_IDENTIFIER;
-}
-
-static void
-gst_asm_scan_print_token (GstASMScan * scan)
-{
-#ifdef DEBUG
- switch (scan->token) {
- case GST_ASM_TOKEN_NONE:
- g_print ("none\n");
- break;
- case GST_ASM_TOKEN_EOF:
- g_print ("EOF\n");
- break;
-
- case GST_ASM_TOKEN_INT:
- g_print ("INT %d\n", atoi (scan->val));
- break;
- case GST_ASM_TOKEN_FLOAT:
- g_print ("FLOAT %f\n", atof (scan->val));
- break;
- case GST_ASM_TOKEN_IDENTIFIER:
- g_print ("ID %s\n", scan->val);
- break;
- case GST_ASM_TOKEN_STRING:
- g_print ("STRING %s\n", scan->val);
- break;
-
- case GST_ASM_TOKEN_HASH:
- g_print ("HASH\n");
- break;
- case GST_ASM_TOKEN_SEMICOLON:
- g_print ("SEMICOLON\n");
- break;
- case GST_ASM_TOKEN_COMMA:
- g_print ("COMMA\n");
- break;
- case GST_ASM_TOKEN_EQUAL:
- g_print ("==\n");
- break;
- case GST_ASM_TOKEN_NOTEQUAL:
- g_print ("!=\n");
- break;
- case GST_ASM_TOKEN_AND:
- g_print ("&&\n");
- break;
- case GST_ASM_TOKEN_OR:
- g_print ("||\n");
- break;
- case GST_ASM_TOKEN_LESS:
- g_print ("<\n");
- break;
- case GST_ASM_TOKEN_LESSEQUAL:
- g_print ("<=\n");
- break;
- case GST_ASM_TOKEN_GREATER:
- g_print (">\n");
- break;
- case GST_ASM_TOKEN_GREATEREQUAL:
- g_print (">=\n");
- break;
- case GST_ASM_TOKEN_DOLLAR:
- g_print ("$\n");
- break;
- case GST_ASM_TOKEN_LPAREN:
- g_print ("(\n");
- break;
- case GST_ASM_TOKEN_RPAREN:
- g_print (")\n");
- break;
- default:
- break;
- }
-#endif
-}
-
-static GstASMToken
-gst_asm_scan_next_token (GstASMScan * scan)
-{
- gchar ch;
-
- ch = THIS_CHAR (scan);
-
- /* skip spaces */
- while (IS_SPACE (ch))
- ch = NEXT_CHAR (scan);
-
- /* remove \ which is common in front of " */
- while (ch == '\\')
- ch = NEXT_CHAR (scan);
-
- switch (ch) {
- case '#':
- scan->token = GST_ASM_TOKEN_HASH;
- NEXT_CHAR (scan);
- break;
- case ';':
- scan->token = GST_ASM_TOKEN_SEMICOLON;
- NEXT_CHAR (scan);
- break;
- case ',':
- scan->token = GST_ASM_TOKEN_COMMA;
- NEXT_CHAR (scan);
- break;
- case '=':
- scan->token = GST_ASM_TOKEN_EQUAL;
- if (NEXT_CHAR (scan) == '=')
- NEXT_CHAR (scan);
- break;
- case '!':
- if (NEXT_CHAR (scan) == '=') {
- scan->token = GST_ASM_TOKEN_NOTEQUAL;
- NEXT_CHAR (scan);
- }
- break;
- case '&':
- scan->token = GST_ASM_TOKEN_AND;
- if (NEXT_CHAR (scan) == '&')
- NEXT_CHAR (scan);
- break;
- case '|':
- scan->token = GST_ASM_TOKEN_OR;
- if (NEXT_CHAR (scan) == '|')
- NEXT_CHAR (scan);
- break;
- case '<':
- scan->token = GST_ASM_TOKEN_LESS;
- if (NEXT_CHAR (scan) == '=') {
- scan->token = GST_ASM_TOKEN_LESSEQUAL;
- NEXT_CHAR (scan);
- }
- break;
- case '>':
- scan->token = GST_ASM_TOKEN_GREATER;
- if (NEXT_CHAR (scan) == '=') {
- scan->token = GST_ASM_TOKEN_GREATEREQUAL;
- NEXT_CHAR (scan);
- }
- break;
- case '$':
- scan->token = GST_ASM_TOKEN_DOLLAR;
- NEXT_CHAR (scan);
- break;
- case '(':
- scan->token = GST_ASM_TOKEN_LPAREN;
- NEXT_CHAR (scan);
- break;
- case ')':
- scan->token = GST_ASM_TOKEN_RPAREN;
- NEXT_CHAR (scan);
- break;
- case '"':
- NEXT_CHAR (scan);
- gst_asm_scan_string (scan, '"');
- break;
- case '\'':
- NEXT_CHAR (scan);
- gst_asm_scan_string (scan, '\'');
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- gst_asm_scan_number (scan);
- break;
- case '\0':
- scan->token = GST_ASM_TOKEN_EOF;
- break;
- default:
- gst_asm_scan_identifier (scan);
- break;
- }
- gst_asm_scan_print_token (scan);
- return scan->token;
-}
-
-static GstASMRule *
-gst_asm_rule_new (void)
-{
- GstASMRule *rule;
-
- rule = g_new (GstASMRule, 1);
- rule->root = NULL;
- rule->props = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-
- return rule;
-}
-
-static void
-gst_asm_rule_free (GstASMRule * rule)
-{
- g_hash_table_destroy (rule->props);
- if (rule->root)
- gst_asm_node_free (rule->root);
- g_free (rule);
-}
-
-static void
-gst_asm_rule_add_property (GstASMRule * rule, gchar * key, gchar * val)
-{
- g_hash_table_insert (rule->props, key, val);
-}
-
-static GstASMNode *gst_asm_scan_parse_condition (GstASMScan * scan);
-
-static GstASMNode *
-gst_asm_scan_parse_operand (GstASMScan * scan)
-{
- GstASMNode *node;
-
- switch (scan->token) {
- case GST_ASM_TOKEN_DOLLAR:
- gst_asm_scan_next_token (scan);
-
- if (scan->token != GST_ASM_TOKEN_IDENTIFIER)
- g_warning ("identifier expected");
-
- node = gst_asm_node_new ();
- node->type = GST_ASM_NODE_VARIABLE;
- node->data.varname = g_strdup (scan->val);
- break;
- case GST_ASM_TOKEN_INT:
- node = gst_asm_node_new ();
- node->type = GST_ASM_NODE_INTEGER;
- node->data.intval = (gfloat) atof (scan->val);
- break;
- case GST_ASM_TOKEN_FLOAT:
- node = gst_asm_node_new ();
- node->type = GST_ASM_NODE_FLOAT;
- node->data.floatval = atoi (scan->val);
- break;
- case GST_ASM_TOKEN_LPAREN:
- gst_asm_scan_next_token (scan);
- node = gst_asm_scan_parse_condition (scan);
- if (scan->token != GST_ASM_TOKEN_RPAREN)
- g_warning (") expected");
- break;
- default:
- g_warning ("$ <number> or ) expected");
- node = NULL;
- break;
- }
- gst_asm_scan_next_token (scan);
-
- return node;
-}
-
-static GstASMNode *
-gst_asm_scan_parse_expression (GstASMScan * scan)
-{
- GstASMNode *node, *left;
-
- node = gst_asm_scan_parse_operand (scan);
-
- while (IS_COND_TOKEN (scan->token)) {
- left = node;
-
- node = gst_asm_node_new ();
- node->type = GST_ASM_NODE_OPERATOR;
- node->data.optype = (GstASMOp) scan->token;
-
- gst_asm_scan_next_token (scan);
-
- node->right = gst_asm_scan_parse_operand (scan);
- node->left = left;
- }
- return node;
-}
-
-static GstASMNode *
-gst_asm_scan_parse_condition (GstASMScan * scan)
-{
- GstASMNode *node, *left;
-
- node = gst_asm_scan_parse_expression (scan);
-
- while (IS_OP_TOKEN (scan->token)) {
- left = node;
-
- node = gst_asm_node_new ();
- node->type = GST_ASM_NODE_OPERATOR;
- node->data.optype = (GstASMOp) scan->token;
-
- gst_asm_scan_next_token (scan);
-
- node->right = gst_asm_scan_parse_expression (scan);
- node->left = left;
- }
- return node;
-}
-
-static void
-gst_asm_scan_parse_property (GstASMRule * rule, GstASMScan * scan)
-{
- gchar *key, *val;
-
- if (scan->token != GST_ASM_TOKEN_IDENTIFIER) {
- g_warning ("identifier expected");
- return;
- }
- key = g_strdup (scan->val);
-
- gst_asm_scan_next_token (scan);
- if (scan->token != GST_ASM_TOKEN_EQUAL) {
- g_warning ("= expected");
- g_free (key);
- return;
- }
- gst_asm_scan_next_token (scan);
- val = g_strdup (scan->val);
-
- gst_asm_rule_add_property (rule, key, val);
- gst_asm_scan_next_token (scan);
-}
-
-static GstASMRule *
-gst_asm_scan_parse_rule (GstASMScan * scan)
-{
- GstASMRule *rule;
-
- rule = gst_asm_rule_new ();
-
- if (scan->token == GST_ASM_TOKEN_HASH) {
- gst_asm_scan_next_token (scan);
- rule->root = gst_asm_scan_parse_condition (scan);
- if (scan->token == GST_ASM_TOKEN_COMMA)
- gst_asm_scan_next_token (scan);
- }
-
- if (scan->token != GST_ASM_TOKEN_SEMICOLON) {
- gst_asm_scan_parse_property (rule, scan);
- while (scan->token == GST_ASM_TOKEN_COMMA) {
- gst_asm_scan_next_token (scan);
- gst_asm_scan_parse_property (rule, scan);
- }
- gst_asm_scan_next_token (scan);
- }
- return rule;
-}
-
-static gboolean
-gst_asm_rule_evaluate (GstASMRule * rule, GHashTable * vars)
-{
- gboolean res;
-
- if (rule->root) {
- res = (gboolean) gst_asm_node_evaluate (rule->root, vars);
- } else
- res = TRUE;
-
- return res;
-}
-
-GstASMRuleBook *
-gst_asm_rule_book_new (const gchar * rulebook)
-{
- GstASMRuleBook *book;
- GstASMRule *rule = NULL;
- GstASMScan *scan;
- GstASMToken token;
-
- book = g_new0 (GstASMRuleBook, 1);
- book->rulebook = rulebook;
-
- scan = gst_asm_scan_new (book->rulebook);
- gst_asm_scan_next_token (scan);
-
- do {
- rule = gst_asm_scan_parse_rule (scan);
- if (rule) {
- book->rules = g_list_append (book->rules, rule);
- book->n_rules++;
- }
- token = scan->token;
- } while (token != GST_ASM_TOKEN_EOF);
-
- gst_asm_scan_free (scan);
-
- return book;
-}
-
-void
-gst_asm_rule_book_free (GstASMRuleBook * book)
-{
- GList *walk;
-
- for (walk = book->rules; walk; walk = g_list_next (walk)) {
- GstASMRule *rule = (GstASMRule *) walk->data;
-
- gst_asm_rule_free (rule);
- }
- g_list_free (book->rules);
- g_free (book);
-}
-
-gint
-gst_asm_rule_book_match (GstASMRuleBook * book, GHashTable * vars,
- gint * rulematches)
-{
- GList *walk;
- gint i, n = 0;
-
- for (walk = book->rules, i = 0; walk; walk = g_list_next (walk), i++) {
- GstASMRule *rule = (GstASMRule *) walk->data;
-
- if (gst_asm_rule_evaluate (rule, vars)) {
- rulematches[n++] = i;
- }
- }
- return n;
-}
-
-#ifdef TEST
-gint
-main (gint argc, gchar * argv[])
-{
- GstASMRuleBook *book;
- gint rulematch[MAX_RULEMATCHES];
- GHashTable *vars;
- gint i, n;
-
- static const gchar rules1[] =
- "#($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,"
- "priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),"
- "AverageBandwidth=67959,Priority=9;#($Bandwidth >= 67959) && ($Bandwidth"
- " < 167959),AverageBandwidth=0,Priority=5,OnDepend=\\\"1\\\";#($Bandwidth >= 167959)"
- " && ($Bandwidth < 267959),AverageBandwidth=167959,Priority=9;#($Bandwidth >= 167959)"
- " && ($Bandwidth < 267959),AverageBandwidth=0,Priority=5,OnDepend=\\\"3\\\";"
- "#($Bandwidth >= 267959),AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959)"
- ",AverageBandwidth=0,Priority=5,OnDepend=\\\"5\\\";";
- static const gchar rules2[] =
- "AverageBandwidth=32041,Priority=5;AverageBandwidth=0,"
- "Priority=5,OnDepend=\\\"0\\\", OffDepend=\\\"0\\\";";
- static const gchar rules3[] =
- "#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=27500,priority=9,PNMKeyframeRule=T;#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=0,priority=5,PNMNonKeyframeRule=T;#(($Bandwidth < 27500) && ($OldPNMPlayer)),TimestampDelivery=T,DropByN=T,priority=9,PNMThinningRule=T;#($Bandwidth < 13899),TimestampDelivery=T,DropByN=T,priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=13899,Priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=0,Priority=5,OnDepend=\\\"4\\\";#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=19000,Priority=9;#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=0,Priority=5,OnDepend=\\\"6\\\";#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=27500,Priority=9;#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=0,Priority=5,OnDepend=\\\"8\\\";#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=132958,Priority=9;#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"10\\\";#($Bandwidth >= 187958),AverageBandwidth=187958,Priority=9;#($Bandwidth >= 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"12\\\";";
-
- vars = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (vars, (gchar *) "Bandwidth", (gchar *) "300000");
-
- book = gst_asm_rule_book_new (rules1);
- n = gst_asm_rule_book_match (book, vars, rulematch);
- gst_asm_rule_book_free (book);
-
- g_print ("%d rules matched\n", n);
- for (i = 0; i < n; i++) {
- g_print ("rule %d matched\n", rulematch[i]);
- }
-
- book = gst_asm_rule_book_new (rules2);
- n = gst_asm_rule_book_match (book, vars, rulematch);
- gst_asm_rule_book_free (book);
-
- g_print ("%d rules matched\n", n);
- for (i = 0; i < n; i++) {
- g_print ("rule %d matched\n", rulematch[i]);
- }
-
- book = gst_asm_rule_book_new (rules3);
- n = gst_asm_rule_book_match (book, vars, rulematch);
- gst_asm_rule_book_free (book);
-
-
- g_print ("%d rules matched\n", n);
- for (i = 0; i < n; i++) {
- g_print ("rule %d matched\n", rulematch[i]);
- }
-
- g_hash_table_destroy (vars);
-
- return 0;
-}
-#endif
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_ASM_RULES_H__
-#define __GST_ASM_RULES_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define MAX_RULEMATCHES 16
-
-typedef struct _GstASMNode GstASMNode;
-typedef struct _GstASMRule GstASMRule;
-typedef struct _GstASMRuleBook GstASMRuleBook;
-
-typedef enum {
- GST_ASM_TOKEN_NONE,
- GST_ASM_TOKEN_EOF,
-
- GST_ASM_TOKEN_INT,
- GST_ASM_TOKEN_FLOAT,
- GST_ASM_TOKEN_IDENTIFIER,
- GST_ASM_TOKEN_STRING,
-
- GST_ASM_TOKEN_HASH,
- GST_ASM_TOKEN_SEMICOLON,
- GST_ASM_TOKEN_COMMA,
- GST_ASM_TOKEN_DOLLAR,
-
- GST_ASM_TOKEN_LPAREN,
- GST_ASM_TOKEN_RPAREN,
-
- GST_ASM_TOKEN_GREATER,
- GST_ASM_TOKEN_LESS,
- GST_ASM_TOKEN_GREATEREQUAL,
- GST_ASM_TOKEN_LESSEQUAL,
- GST_ASM_TOKEN_EQUAL,
- GST_ASM_TOKEN_NOTEQUAL,
-
- GST_ASM_TOKEN_AND,
- GST_ASM_TOKEN_OR
-} GstASMToken;
-
-typedef enum {
- GST_ASM_NODE_UNKNOWN,
- GST_ASM_NODE_VARIABLE,
- GST_ASM_NODE_INTEGER,
- GST_ASM_NODE_FLOAT,
- GST_ASM_NODE_OPERATOR
-} GstASMNodeType;
-
-typedef enum {
- GST_ASM_OP_GREATER = GST_ASM_TOKEN_GREATER,
- GST_ASM_OP_LESS = GST_ASM_TOKEN_LESS,
- GST_ASM_OP_GREATEREQUAL = GST_ASM_TOKEN_GREATEREQUAL,
- GST_ASM_OP_LESSEQUAL = GST_ASM_TOKEN_LESSEQUAL,
- GST_ASM_OP_EQUAL = GST_ASM_TOKEN_EQUAL,
- GST_ASM_OP_NOTEQUAL = GST_ASM_TOKEN_NOTEQUAL,
-
- GST_ASM_OP_AND = GST_ASM_TOKEN_AND,
- GST_ASM_OP_OR = GST_ASM_TOKEN_OR
-} GstASMOp;
-
-struct _GstASMNode {
- GstASMNodeType type;
-
- union {
- gchar *varname;
- gint intval;
- gfloat floatval;
- GstASMOp optype;
- } data;
-
- GstASMNode *left;
- GstASMNode *right;
-};
-
-struct _GstASMRule {
- GstASMNode *root;
- GHashTable *props;
-};
-
-struct _GstASMRuleBook {
- const gchar *rulebook;
-
- guint n_rules;
- GList *rules;
-};
-
-G_END_DECLS
-
-GstASMRuleBook* gst_asm_rule_book_new (const gchar *rulebook);
-void gst_asm_rule_book_free (GstASMRuleBook *book);
-
-gint gst_asm_rule_book_match (GstASMRuleBook *book, GHashTable *vars,
- gint *rulematches);
-
-#endif /* __GST_ASM_RULES_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#include <string.h>
-
-#include "gstrdtbuffer.h"
-
-gboolean
-gst_rdt_buffer_validate_data (guint8 * data, guint len)
-{
- return TRUE;
-}
-
-gboolean
-gst_rdt_buffer_validate (GstBuffer * buffer)
-{
- return TRUE;
-}
-
-guint
-gst_rdt_buffer_get_packet_count (GstBuffer * buffer)
-{
- GstRDTPacket packet;
- guint count;
-
- g_return_val_if_fail (GST_IS_BUFFER (buffer), 0);
-
- count = 0;
- if (gst_rdt_buffer_get_first_packet (buffer, &packet)) {
- do {
- count++;
- } while (gst_rdt_packet_move_to_next (&packet));
- }
- return count;
-}
-
-static gboolean
-read_packet_header (GstRDTPacket * packet)
-{
- GstMapInfo map;
- guint8 *data;
- gsize size;
- guint offset;
- guint length;
- guint length_offset;
-
- g_return_val_if_fail (packet != NULL, FALSE);
- g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
- data = map.data;
- size = map.size;
-
- offset = packet->offset;
-
- /* check if we are at the end of the buffer, we add 3 because we also want to
- * ensure we can read the type, which is always at offset 1 and 2 bytes long. */
- if (offset + 3 > size)
- goto packet_end;
-
- /* read type */
- packet->type = GST_READ_UINT16_BE (&data[offset + 1]);
-
- length = -1;
- length_offset = -1;
-
- /* figure out the length of the packet, this depends on the type */
- if (GST_RDT_IS_DATA_TYPE (packet->type)) {
- if (data[offset] & 0x80)
- /* length is present */
- length_offset = 3;
- } else {
- switch (packet->type) {
- case GST_RDT_TYPE_ASMACTION:
- if (data[offset] & 0x80)
- length_offset = 5;
- break;
- case GST_RDT_TYPE_BWREPORT:
- if (data[offset] & 0x80)
- length_offset = 3;
- break;
- case GST_RDT_TYPE_ACK:
- if (data[offset] & 0x80)
- length_offset = 3;
- break;
- case GST_RDT_TYPE_RTTREQ:
- length = 3;
- break;
- case GST_RDT_TYPE_RTTRESP:
- length = 11;
- break;
- case GST_RDT_TYPE_CONGESTION:
- length = 11;
- break;
- case GST_RDT_TYPE_STREAMEND:
- length = 9;
- /* total_reliable */
- if (data[offset] & 0x80)
- length += 2;
- /* stream_id_expansion */
- if ((data[offset] & 0x7c) == 0x7c)
- length += 2;
- /* ext_flag, FIXME, get string length */
- if ((data[offset] & 0x1) == 0x1)
- length += 7;
- break;
- case GST_RDT_TYPE_REPORT:
- if (data[offset] & 0x80)
- length_offset = 3;
- break;
- case GST_RDT_TYPE_LATENCY:
- if (data[offset] & 0x80)
- length_offset = 3;
- break;
- case GST_RDT_TYPE_INFOREQ:
- length = 3;
- /* request_time_ms */
- if (data[offset] & 0x2)
- length += 2;
- break;
- case GST_RDT_TYPE_INFORESP:
- length = 3;
- /* has_rtt_info */
- if (data[offset] & 0x4) {
- length += 4;
- /* is_delayed */
- if (data[offset] & 0x2) {
- length += 4;
- }
- }
- if (data[offset] & 0x1) {
- /* buffer_info_count, FIXME read and skip */
- length += 2;
- }
- break;
- case GST_RDT_TYPE_AUTOBW:
- if (data[offset] & 0x80)
- length_offset = 3;
- break;
- case GST_RDT_TYPE_INVALID:
- default:
- goto unknown_packet;
- }
- }
-
- if (length != -1) {
- /* we have a fixed length */
- packet->length = length;
- } else if (length_offset != -1) {
- /* we can read the length from an offset */
- packet->length = GST_READ_UINT16_BE (&data[length_offset]);
- } else {
- /* length is remainder of packet */
- packet->length = size - offset;
- }
- gst_buffer_unmap (packet->buffer, &map);
-
- /* the length should be smaller than the remaining size */
- if (packet->length + offset > size)
- goto invalid_length;
-
- return TRUE;
-
- /* ERRORS */
-packet_end:
- {
- gst_buffer_unmap (packet->buffer, &map);
- return FALSE;
- }
-unknown_packet:
- {
- packet->type = GST_RDT_TYPE_INVALID;
- gst_buffer_unmap (packet->buffer, &map);
- return FALSE;
- }
-invalid_length:
- {
- packet->type = GST_RDT_TYPE_INVALID;
- packet->length = 0;
- return FALSE;
- }
-}
-
-gboolean
-gst_rdt_buffer_get_first_packet (GstBuffer * buffer, GstRDTPacket * packet)
-{
- g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
- g_return_val_if_fail (packet != NULL, FALSE);
-
- /* init to 0 */
- packet->buffer = buffer;
- packet->offset = 0;
- packet->type = GST_RDT_TYPE_INVALID;
- memset (&packet->map, 0, sizeof (GstMapInfo));
-
- if (!read_packet_header (packet))
- return FALSE;
-
- return TRUE;
-}
-
-gboolean
-gst_rdt_packet_move_to_next (GstRDTPacket * packet)
-{
- g_return_val_if_fail (packet != NULL, FALSE);
- g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, FALSE);
- g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
-
- /* if we have an invalid packet, it must be the last,
- * return FALSE */
- if (packet->type == GST_RDT_TYPE_INVALID)
- goto end;
-
- /* move to next packet */
- packet->offset += packet->length;
-
- /* try to read new header */
- if (!read_packet_header (packet))
- goto end;
-
- return TRUE;
-
- /* ERRORS */
-end:
- {
- packet->type = GST_RDT_TYPE_INVALID;
- return FALSE;
- }
-}
-
-GstRDTType
-gst_rdt_packet_get_type (GstRDTPacket * packet)
-{
- g_return_val_if_fail (packet != NULL, GST_RDT_TYPE_INVALID);
- g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID,
- GST_RDT_TYPE_INVALID);
-
- return packet->type;
-}
-
-guint16
-gst_rdt_packet_get_length (GstRDTPacket * packet)
-{
- g_return_val_if_fail (packet != NULL, 0);
- g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, 0);
-
- return packet->length;
-}
-
-GstBuffer *
-gst_rdt_packet_to_buffer (GstRDTPacket * packet)
-{
- GstBuffer *result;
-
- g_return_val_if_fail (packet != NULL, NULL);
- g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, NULL);
-
- result =
- gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
- packet->offset, packet->length);
- /* timestamp applies to all packets in this buffer */
- GST_BUFFER_TIMESTAMP (result) = GST_BUFFER_TIMESTAMP (packet->buffer);
-
- return result;
-}
-
-gint
-gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
-{
- return (gint16) (seqnum2 - seqnum1);
-}
-
-guint16
-gst_rdt_packet_data_get_seq (GstRDTPacket * packet)
-{
- GstMapInfo map;
- guint header;
- guint16 result;
-
- g_return_val_if_fail (packet != NULL, FALSE);
- g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), FALSE);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
- /* skip header bits */
- header = packet->offset + 1;
-
- /* read seq_no */
- result = GST_READ_UINT16_BE (&map.data[header]);
-
- gst_buffer_unmap (packet->buffer, &map);
-
- return result;
-}
-
-guint8 *
-gst_rdt_packet_data_map (GstRDTPacket * packet, guint * size)
-{
- GstMapInfo map;
- guint header;
- gboolean length_included_flag;
- gboolean need_reliable_flag;
- guint8 stream_id;
- guint8 asm_rule_number;
-
- g_return_val_if_fail (packet != NULL, NULL);
- g_return_val_if_fail (packet->map.data == NULL, NULL);
- g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), NULL);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
- header = packet->offset;
-
- length_included_flag = (map.data[header] & 0x80) == 0x80;
- need_reliable_flag = (map.data[header] & 0x40) == 0x40;
- stream_id = (map.data[header] & 0x3e) >> 1;
-
- /* skip seq_no and header bits */
- header += 3;
-
- if (length_included_flag) {
- /* skip length */
- header += 2;
- }
- asm_rule_number = (map.data[header] & 0x3f);
-
- /* skip timestamp and asm_rule_number */
- header += 5;
-
- if (stream_id == 0x1f) {
- /* skip stream_id_expansion */
- header += 2;
- }
- if (need_reliable_flag) {
- /* skip total_reliable */
- header += 2;
- }
- if (asm_rule_number == 63) {
- /* skip asm_rule_number_expansion */
- header += 2;
- }
-
- if (size)
- *size = packet->length - (header - packet->offset);
-
- packet->map = map;
-
- return &map.data[header];
-}
-
-gboolean
-gst_rdt_packet_data_unmap (GstRDTPacket * packet)
-{
- g_return_val_if_fail (packet != NULL, FALSE);
- g_return_val_if_fail (packet->map.data != NULL, FALSE);
-
- gst_buffer_unmap (packet->buffer, &packet->map);
- packet->map.data = NULL;
-
- return TRUE;
-}
-
-guint16
-gst_rdt_packet_data_get_stream_id (GstRDTPacket * packet)
-{
- GstMapInfo map;
- guint16 result;
- guint header;
- gboolean length_included_flag;
-
- g_return_val_if_fail (packet != NULL, 0);
- g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
- header = packet->offset;
-
- length_included_flag = (map.data[header] & 0x80) == 0x80;
- result = (map.data[header] & 0x3e) >> 1;
- if (result == 31) {
- /* skip seq_no and header bits */
- header += 3;
-
- if (length_included_flag) {
- /* skip length */
- header += 2;
- }
- /* skip asm_rule_number and timestamp */
- header += 5;
-
- /* stream_id_expansion */
- result = GST_READ_UINT16_BE (&map.data[header]);
- }
- gst_buffer_unmap (packet->buffer, &map);
-
- return result;
-}
-
-guint32
-gst_rdt_packet_data_get_timestamp (GstRDTPacket * packet)
-{
- GstMapInfo map;
- guint header;
- gboolean length_included_flag;
- guint32 result;
-
- g_return_val_if_fail (packet != NULL, 0);
- g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
- header = packet->offset;
-
- length_included_flag = (map.data[header] & 0x80) == 0x80;
-
- /* skip seq_no and header bits */
- header += 3;
-
- if (length_included_flag) {
- /* skip length */
- header += 2;
- }
- /* skip asm_rule_number */
- header += 1;
-
- /* get timestamp */
- result = GST_READ_UINT32_BE (&map.data[header]);
- gst_buffer_unmap (packet->buffer, &map);
-
- return result;
-}
-
-guint8
-gst_rdt_packet_data_get_flags (GstRDTPacket * packet)
-{
- GstMapInfo map;
- guint8 result;
- guint header;
- gboolean length_included_flag;
-
- g_return_val_if_fail (packet != NULL, 0);
- g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
- gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
- header = packet->offset;
-
- length_included_flag = (map.data[header] & 0x80) == 0x80;
-
- /* skip seq_no and header bits */
- header += 3;
-
- if (length_included_flag) {
- /* skip length */
- header += 2;
- }
- /* get flags */
- result = map.data[header];
- gst_buffer_unmap (packet->buffer, &map);
-
- return result;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
- *
- * gstrdtbuffer.h: various helper functions to manipulate buffers
- * with RDT payload.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RDTBUFFER_H__
-#define __GST_RDTBUFFER_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-/**
- * GstRDTType:
- * @GST_RDT_TYPE_INVALID:
- * @GST_RDT_TYPE_ASMACTION:
- * @GST_RDT_TYPE_ACK:
- * @GST_RDT_TYPE_RTTREQ:
- * @GST_RDT_TYPE_RTTRESP:
- * @GST_RDT_TYPE_CONGESTION:
- * @GST_RDT_TYPE_STREAMEND:
- * @GST_RDT_TYPE_LATENCY:
- * @GST_RDT_TYPE_INFOREQ:
- * @GST_RDT_TYPE_INFORESP:
- * @GST_RDT_TYPE_AUTOBW:
- *
- * Different RDT packet types.
- */
-typedef enum
-{
- GST_RDT_TYPE_INVALID = 0xffff,
- GST_RDT_TYPE_ASMACTION = 0xff00,
- GST_RDT_TYPE_BWREPORT = 0xff01,
- GST_RDT_TYPE_ACK = 0xff02,
- GST_RDT_TYPE_RTTREQ = 0xff03,
- GST_RDT_TYPE_RTTRESP = 0xff04,
- GST_RDT_TYPE_CONGESTION = 0xff05,
- GST_RDT_TYPE_STREAMEND = 0xff06,
- GST_RDT_TYPE_REPORT = 0xff07,
- GST_RDT_TYPE_LATENCY = 0xff08,
- GST_RDT_TYPE_INFOREQ = 0xff09,
- GST_RDT_TYPE_INFORESP = 0xff0a,
- GST_RDT_TYPE_AUTOBW = 0xff0b
-} GstRDTType;
-
-/**
- * GST_RDT_IS_DATA_TYPE:
- * @t: the #GstRDTType to check
- *
- * Check if @t is a data packet type.
- */
-#define GST_RDT_IS_DATA_TYPE(t) ((t) < 0xff00)
-
-typedef struct _GstRDTPacket GstRDTPacket;
-
-/**
- * GstRDTPacket:
- * @buffer: pointer to RDT buffer
- * @offset: offset of packet in buffer data
- *
- * Data structure that points to a packet at @offset in @buffer.
- * The size of the structure is made public to allow stack allocations.
- */
-struct _GstRDTPacket
-{
- GstBuffer *buffer;
- guint offset;
-
- /*< private >*/
- GstRDTType type; /* type of current packet */
- guint16 length; /* length of current packet in bytes */
- GstMapInfo map; /* last mapped data */
-};
-
-/* validate buffers */
-gboolean gst_rdt_buffer_validate_data (guint8 *data, guint len);
-gboolean gst_rdt_buffer_validate (GstBuffer *buffer);
-
-/* retrieving packets */
-guint gst_rdt_buffer_get_packet_count (GstBuffer *buffer);
-gboolean gst_rdt_buffer_get_first_packet (GstBuffer *buffer, GstRDTPacket *packet);
-gboolean gst_rdt_packet_move_to_next (GstRDTPacket *packet);
-
-/* working with packets */
-GstRDTType gst_rdt_packet_get_type (GstRDTPacket *packet);
-guint16 gst_rdt_packet_get_length (GstRDTPacket *packet);
-GstBuffer* gst_rdt_packet_to_buffer (GstRDTPacket *packet);
-
-
-/* data packets */
-guint16 gst_rdt_packet_data_get_seq (GstRDTPacket *packet);
-guint8 * gst_rdt_packet_data_map (GstRDTPacket *packet, guint *size);
-gboolean gst_rdt_packet_data_unmap (GstRDTPacket *packet);
-guint16 gst_rdt_packet_data_get_stream_id (GstRDTPacket *packet);
-guint32 gst_rdt_packet_data_get_timestamp (GstRDTPacket *packet);
-
-guint8 gst_rdt_packet_data_get_flags (GstRDTPacket * packet);
-
-/* utils */
-gint gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2);
-
-G_END_DECLS
-
-#endif /* __GST_RDTBUFFER_H__ */
-
+++ /dev/null
-real_sources = [
- 'rademux.c',
- 'rmdemux.c',
- 'rmutils.c',
- 'rdtdepay.c',
- 'rdtmanager.c',
- 'rtspreal.c',
- 'realhash.c',
- 'asmrules.c',
- 'rdtjitterbuffer.c',
- 'gstrdtbuffer.c',
- 'pnmsrc.c',
- 'realmedia.c'
-]
-
-gstrmdemux = library('gstrealmedia',
- real_sources,
- c_args : ugly_args,
- include_directories : [configinc, libsinc],
- dependencies : [gstbase_dep, gstrtsp_dep, gstsdp_dep, gstpbutils_dep],
- install : true,
- install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstrmdemux, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstrmdemux]
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "pnmsrc.h"
-
-GST_DEBUG_CATEGORY_STATIC (pnmsrc_debug);
-#define GST_CAT_DEFAULT pnmsrc_debug
-
-/* PNMSrc signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-#define DEFAULT_LOCATION NULL
-
-enum
-{
- PROP_0,
- PROP_LOCATION
-};
-
-static GstStaticPadTemplate gst_pnm_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/vnd.rn-realmedia")
- );
-
-static GstFlowReturn gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf);
-
-static void gst_pnm_src_uri_handler_init (gpointer g_iface,
- gpointer iface_data);
-
-#define gst_pnm_src_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstPNMSrc, gst_pnm_src, GST_TYPE_PUSH_SRC,
- G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_pnm_src_uri_handler_init));
-GST_ELEMENT_REGISTER_DEFINE (pnmsrc, "pnmsrc",
- GST_RANK_MARGINAL, GST_TYPE_PNM_SRC);
-
-static void gst_pnm_src_finalize (GObject * object);
-
-static void gst_pnm_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_pnm_src_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static void
-gst_pnm_src_class_init (GstPNMSrcClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstPushSrcClass *gstpushsrc_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
- gstpushsrc_class = (GstPushSrcClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->set_property = gst_pnm_src_set_property;
- gobject_class->get_property = gst_pnm_src_get_property;
-
- gobject_class->finalize = gst_pnm_src_finalize;
-
- g_object_class_install_property (gobject_class, PROP_LOCATION,
- g_param_spec_string ("location", "PNM Location",
- "Location of the PNM url to read",
- DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_pnm_src_template);
-
- gst_element_class_set_static_metadata (gstelement_class,
- "PNM packet receiver", "Source/Network",
- "Receive data over the network via PNM",
- "Wim Taymans <wim.taymans@gmail.com>");
-
- gstpushsrc_class->create = gst_pnm_src_create;
-
- GST_DEBUG_CATEGORY_INIT (pnmsrc_debug, "pnmsrc",
- 0, "Source for the pnm:// uri");
-}
-
-static void
-gst_pnm_src_init (GstPNMSrc * pnmsrc)
-{
- pnmsrc->location = g_strdup (DEFAULT_LOCATION);
-}
-
-static void
-gst_pnm_src_finalize (GObject * object)
-{
- GstPNMSrc *pnmsrc;
-
- pnmsrc = GST_PNM_SRC (object);
-
- g_free (pnmsrc->location);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_pnm_src_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstPNMSrc *src;
-
- src = GST_PNM_SRC (object);
-
- switch (prop_id) {
- case PROP_LOCATION:
- g_free (src->location);
- src->location = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_pnm_src_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstPNMSrc *src;
-
- src = GST_PNM_SRC (object);
-
- switch (prop_id) {
- case PROP_LOCATION:
- g_value_set_string (value, src->location);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstFlowReturn
-gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf)
-{
- GstPNMSrc *src;
- GstMessage *m;
- gchar *url;
-
- src = GST_PNM_SRC (psrc);
-
- if (src->location == NULL)
- return GST_FLOW_ERROR;
- url = g_strdup_printf ("rtsp%s", &src->location[3]);
-
- /* the only thing we do is redirect to an RTSP url */
- m = gst_message_new_element (GST_OBJECT_CAST (src),
- gst_structure_new ("redirect", "new-location", G_TYPE_STRING, url, NULL));
- g_free (url);
-
- gst_element_post_message (GST_ELEMENT_CAST (src), m);
-
-
- return GST_FLOW_EOS;
-}
-
-/*** GSTURIHANDLER INTERFACE *************************************************/
-
-static GstURIType
-gst_pnm_src_uri_get_type (GType type)
-{
- return GST_URI_SRC;
-}
-
-static const gchar *const *
-gst_pnm_src_uri_get_protocols (GType type)
-{
- static const gchar *protocols[] = { "pnm", NULL };
-
- return protocols;
-}
-
-static gchar *
-gst_pnm_src_uri_get_uri (GstURIHandler * handler)
-{
- GstPNMSrc *src = GST_PNM_SRC (handler);
-
- /* FIXME: make thread-safe */
- return g_strdup (src->location);
-}
-
-static gboolean
-gst_pnm_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
- GError ** error)
-{
- GstPNMSrc *src = GST_PNM_SRC (handler);
-
- g_free (src->location);
- src->location = g_strdup (uri);
-
- return TRUE;
-}
-
-static void
-gst_pnm_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
-{
- GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
- iface->get_type = gst_pnm_src_uri_get_type;
- iface->get_protocols = gst_pnm_src_uri_get_protocols;
- iface->get_uri = gst_pnm_src_uri_get_uri;
- iface->set_uri = gst_pnm_src_uri_set_uri;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_PNM_SRC_H__
-#define __GST_PNM_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PNM_SRC \
- (gst_pnm_src_get_type())
-#define GST_PNM_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PNM_SRC,GstPNMSrc))
-#define GST_PNM_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PNM_SRC,GstPNMSrcClass))
-#define GST_IS_PNM_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PNM_SRC))
-#define GST_IS_PNM_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PNM_SRC))
-
-typedef struct _GstPNMSrc GstPNMSrc;
-typedef struct _GstPNMSrcClass GstPNMSrcClass;
-
-struct _GstPNMSrc
-{
- GstPushSrc parent;
-
- gchar *location;
-};
-
-struct _GstPNMSrcClass
-{
- GstPushSrcClass parent_class;
-};
-
-GType gst_pnm_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (pnmsrc);
-
-G_END_DECLS
-
-#endif /* __GST_PNM_SRC_H__ */
+++ /dev/null
-/* GStreamer RealAudio demuxer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-rademux
- * @title: rademux
- *
- * Demuxes/parses a RealAudio (.ra) file or stream into compressed audio.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=interview.ra ! rademux ! avdec_real_288 ! audioconvert ! audioresample ! autoaudiosink
- * ]| Read a RealAudio file and decode it and output it to the soundcard using
- * the ALSA element. The .ra file is assumed to contain RealAudio version 2.
- * |[
- * gst-launch-1.0 souphttpsrc location=http://www.example.org/interview.ra ! rademux ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Stream RealAudio data containing AC3 (dnet) compressed audio and decode it
- * and output it to the soundcard.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "rademux.h"
-#include "rmdemux.h"
-#include "rmutils.h"
-
-#include <string.h>
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/x-pn-realaudio")
- );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (real_audio_demux_debug);
-#define GST_CAT_DEFAULT real_audio_demux_debug
-
-#define gst_real_audio_demux_parent_class parent_class
-G_DEFINE_TYPE (GstRealAudioDemux, gst_real_audio_demux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rademux, "rademux",
- GST_RANK_SECONDARY, GST_TYPE_REAL_AUDIO_DEMUX);
-
-static GstStateChangeReturn gst_real_audio_demux_change_state (GstElement * e,
- GstStateChange transition);
-static GstFlowReturn gst_real_audio_demux_chain (GstPad * pad,
- GstObject * parent, GstBuffer * buf);
-static gboolean gst_real_audio_demux_sink_event (GstPad * pad,
- GstObject * parent, GstEvent * ev);
-static gboolean gst_real_audio_demux_src_event (GstPad * pad,
- GstObject * parent, GstEvent * ev);
-static gboolean gst_real_audio_demux_src_query (GstPad * pad,
- GstObject * parent, GstQuery * query);
-static void gst_real_audio_demux_loop (GstRealAudioDemux * demux);
-static gboolean gst_real_audio_demux_sink_activate (GstPad * sinkpad,
- GstObject * parent);
-static gboolean gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad,
- GstObject * parent, GstPadMode mode, gboolean active);
-
-static void
-gst_real_audio_demux_finalize (GObject * obj)
-{
- GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (obj);
-
- g_object_unref (demux->adapter);
-
- G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gst_real_audio_demux_class_init (GstRealAudioDemuxClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
- GstElementClass *gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_real_audio_demux_finalize;
-
- gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
- gst_element_class_add_static_pad_template (gstelement_class, &src_template);
-
- gst_element_class_set_static_metadata (gstelement_class, "RealAudio Demuxer",
- "Codec/Demuxer",
- "Demultiplex a RealAudio file",
- "Tim-Philipp Müller <tim centricular net>");
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_change_state);
-
- GST_DEBUG_CATEGORY_INIT (real_audio_demux_debug, "rademux",
- 0, "Demuxer for RealAudio streams");
-}
-
-static void
-gst_real_audio_demux_reset (GstRealAudioDemux * demux)
-{
- gst_adapter_clear (demux->adapter);
-
- if (demux->srcpad) {
- GST_DEBUG_OBJECT (demux, "Removing source pad");
- gst_element_remove_pad (GST_ELEMENT (demux), demux->srcpad);
- demux->srcpad = NULL;
- }
-
- if (demux->pending_tags) {
- gst_tag_list_unref (demux->pending_tags);
- demux->pending_tags = NULL;
- }
-
- demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
- demux->ra_version = 0;
- demux->data_offset = 0;
- demux->packet_size = 0;
-
- demux->sample_rate = 0;
- demux->sample_width = 0;
- demux->channels = 0;
- demux->fourcc = 0;
-
- demux->need_newsegment = TRUE;
-
- demux->segment_running = FALSE;
-
- demux->byterate_num = 0;
- demux->byterate_denom = 0;
-
- demux->duration = 0;
- demux->upstream_size = 0;
-
- demux->offset = 0;
-
- demux->have_group_id = FALSE;
- demux->group_id = G_MAXUINT;
-
- gst_adapter_clear (demux->adapter);
-}
-
-static void
-gst_real_audio_demux_init (GstRealAudioDemux * demux)
-{
- demux->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-
- gst_pad_set_chain_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_chain));
- gst_pad_set_event_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_event));
- gst_pad_set_activate_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate));
- gst_pad_set_activatemode_function (demux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate_mode));
-
- gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
-
- demux->adapter = gst_adapter_new ();
- gst_real_audio_demux_reset (demux);
-}
-
-static gboolean
-gst_real_audio_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
-{
- GstQuery *query;
- gboolean pull_mode;
-
- query = gst_query_new_scheduling ();
-
- if (!gst_pad_peer_query (sinkpad, query)) {
- gst_query_unref (query);
- goto activate_push;
- }
-
- pull_mode = gst_query_has_scheduling_mode_with_flags (query,
- GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
- gst_query_unref (query);
-
- if (!pull_mode)
- goto activate_push;
-
- GST_DEBUG_OBJECT (sinkpad, "activating pull");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
- {
- GST_DEBUG_OBJECT (sinkpad, "activating push");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
- }
-}
-
-static gboolean
-gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
- GstPadMode mode, gboolean active)
-{
- gboolean res;
- GstRealAudioDemux *demux;
-
- demux = GST_REAL_AUDIO_DEMUX (parent);
-
- switch (mode) {
- case GST_PAD_MODE_PUSH:
- demux->seekable = FALSE;
- res = TRUE;
- break;
- case GST_PAD_MODE_PULL:
- if (active) {
- demux->seekable = TRUE;
-
- res = gst_pad_start_task (sinkpad,
- (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
- } else {
- demux->seekable = FALSE;
- res = gst_pad_stop_task (sinkpad);
- }
- break;
- default:
- res = FALSE;
- break;
- }
- return res;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_marker (GstRealAudioDemux * demux)
-{
- guint8 data[6];
-
- if (gst_adapter_available (demux->adapter) < 6) {
- GST_LOG_OBJECT (demux, "need at least 6 bytes, waiting for more data");
- return GST_FLOW_OK;
- }
-
- gst_adapter_copy (demux->adapter, data, 0, 6);
- if (memcmp (data, ".ra\375", 4) != 0)
- goto wrong_format;
-
- demux->ra_version = GST_READ_UINT16_BE (data + 4);
- GST_DEBUG_OBJECT (demux, "ra_version = %u", demux->ra_version);
- if (demux->ra_version != 4 && demux->ra_version != 3)
- goto unsupported_ra_version;
-
- gst_adapter_flush (demux->adapter, 6);
- demux->state = REAL_AUDIO_DEMUX_STATE_HEADER;
- return GST_FLOW_OK;
-
-/* ERRORS */
-wrong_format:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, WRONG_TYPE, (NULL), (NULL));
- return GST_FLOW_ERROR;
- }
-
-unsupported_ra_version:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE,
- ("Cannot decode this RealAudio file, please file a bug"),
- ("ra_version = %u", demux->ra_version));
- return GST_FLOW_ERROR;
- }
-}
-
-static GstClockTime
-gst_real_demux_get_timestamp_from_offset (GstRealAudioDemux * demux,
- guint64 offset)
-{
- if (offset >= demux->data_offset && demux->byterate_num > 0 &&
- demux->byterate_denom > 0) {
- return gst_util_uint64_scale (offset - demux->data_offset,
- demux->byterate_denom * GST_SECOND, demux->byterate_num);
- } else if (offset == demux->data_offset) {
- return (GstClockTime) 0;
- } else {
- return GST_CLOCK_TIME_NONE;
- }
-}
-
-static gboolean
-gst_real_audio_demux_get_data_offset_from_header (GstRealAudioDemux * demux)
-{
- guint8 data[16];
-
- gst_adapter_copy (demux->adapter, data, 0, 16);
-
- switch (demux->ra_version) {
- case 3:
- demux->data_offset = GST_READ_UINT16_BE (data) + 8;
- break;
- case 4:
- demux->data_offset = GST_READ_UINT32_BE (data + 12) + 16;
- break;
- default:
- demux->data_offset = 0;
- g_return_val_if_reached (FALSE);
- }
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_header (GstRealAudioDemux * demux)
-{
- const guint8 *data;
- gchar *codec_name = NULL;
- GstCaps *caps = NULL;
- GstEvent *event;
- gchar *stream_id;
- guint avail;
-
- g_assert (demux->ra_version == 4 || demux->ra_version == 3);
-
- avail = gst_adapter_available (demux->adapter);
- if (avail < 16)
- return GST_FLOW_OK;
-
- if (!gst_real_audio_demux_get_data_offset_from_header (demux))
- return GST_FLOW_ERROR; /* shouldn't happen */
-
- GST_DEBUG_OBJECT (demux, "data_offset = %u", demux->data_offset);
-
- if (avail + 6 < demux->data_offset) {
- GST_DEBUG_OBJECT (demux, "Need %u bytes, but only %u available now",
- demux->data_offset - 6, avail);
- return GST_FLOW_OK;
- }
-
- data = gst_adapter_map (demux->adapter, demux->data_offset - 6);
- g_assert (data);
-
- switch (demux->ra_version) {
- case 3:
- demux->fourcc = GST_RM_AUD_14_4;
- demux->packet_size = 20;
- demux->sample_rate = 8000;
- demux->channels = 1;
- demux->sample_width = 16;
- demux->flavour = 1;
- demux->leaf_size = 0;
- demux->height = 0;
- break;
- case 4:
- demux->flavour = GST_READ_UINT16_BE (data + 16);
- /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
- demux->leaf_size = GST_READ_UINT16_BE (data + 38);
- demux->height = GST_READ_UINT16_BE (data + 34);
- demux->packet_size = GST_READ_UINT32_BE (data + 18);
- demux->sample_rate = GST_READ_UINT16_BE (data + 42);
- demux->sample_width = GST_READ_UINT16_BE (data + 46);
- demux->channels = GST_READ_UINT16_BE (data + 48);
- demux->fourcc = GST_READ_UINT32_LE (data + 56);
- demux->pending_tags = gst_rm_utils_read_tags (data + 63,
- demux->data_offset - 63, gst_rm_utils_read_string8);
- if (demux->pending_tags)
- gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
- break;
- default:
- g_assert_not_reached ();
-#if 0
- case 5:
- demux->flavour = GST_READ_UINT16_BE (data + 16);
- /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
- demux->leaf_size = GST_READ_UINT16_BE (data + 38);
- demux->height = GST_READ_UINT16_BE (data + 34);
-
- demux->sample_rate = GST_READ_UINT16_BE (data + 48);
- demux->sample_width = GST_READ_UINT16_BE (data + 52);
- demux->n_channels = GST_READ_UINT16_BE (data + 54);
- demux->fourcc = RMDEMUX_FOURCC_GET (data + 60);
- break;
-#endif
- }
-
- GST_INFO_OBJECT (demux, "packet_size = %u", demux->packet_size);
- GST_INFO_OBJECT (demux, "sample_rate = %u", demux->sample_rate);
- GST_INFO_OBJECT (demux, "sample_width = %u", demux->sample_width);
- GST_INFO_OBJECT (demux, "channels = %u", demux->channels);
- GST_INFO_OBJECT (demux, "fourcc = '%" GST_FOURCC_FORMAT "' (%08X)",
- GST_FOURCC_ARGS (demux->fourcc), demux->fourcc);
-
- switch (demux->fourcc) {
- case GST_RM_AUD_14_4:
- caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
- G_TYPE_INT, 1, NULL);
- demux->byterate_num = 1000;
- demux->byterate_denom = 1;
- break;
-
- case GST_RM_AUD_28_8:
- /* FIXME: needs descrambling */
- caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
- G_TYPE_INT, 2, NULL);
- break;
-
- case GST_RM_AUD_DNET:
- caps = gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
- demux->sample_rate, NULL);
- if (demux->packet_size == 0 || demux->sample_rate == 0)
- goto broken_file;
- demux->byterate_num = demux->packet_size * demux->sample_rate;
- demux->byterate_denom = 1536;
- break;
-
- /* Sipro/ACELP.NET Voice Codec (MIME unknown) */
- case GST_RM_AUD_SIPR:
- caps = gst_caps_new_empty_simple ("audio/x-sipro");
- break;
-
- default:
- GST_WARNING_OBJECT (demux, "unknown fourcc %08X", demux->fourcc);
- break;
- }
-
- if (caps == NULL)
- goto unknown_fourcc;
-
- gst_caps_set_simple (caps,
- "flavor", G_TYPE_INT, demux->flavour,
- "rate", G_TYPE_INT, demux->sample_rate,
- "channels", G_TYPE_INT, demux->channels,
- "width", G_TYPE_INT, demux->sample_width,
- "leaf_size", G_TYPE_INT, demux->leaf_size,
- "packet_size", G_TYPE_INT, demux->packet_size,
- "height", G_TYPE_INT, demux->height, NULL);
-
- GST_INFO_OBJECT (demux, "Adding source pad, caps %" GST_PTR_FORMAT, caps);
- demux->srcpad = gst_pad_new_from_static_template (&src_template, "src");
- gst_pad_set_event_function (demux->srcpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_event));
- gst_pad_set_query_function (demux->srcpad,
- GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_query));
- gst_pad_set_active (demux->srcpad, TRUE);
- gst_pad_use_fixed_caps (demux->srcpad);
-
- stream_id =
- gst_pad_create_stream_id (demux->srcpad, GST_ELEMENT_CAST (demux), NULL);
-
- event = gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
- if (event) {
- if (gst_event_parse_group_id (event, &demux->group_id))
- demux->have_group_id = TRUE;
- else
- demux->have_group_id = FALSE;
- gst_event_unref (event);
- } else if (!demux->have_group_id) {
- demux->have_group_id = TRUE;
- demux->group_id = gst_util_group_id_next ();
- }
-
- event = gst_event_new_stream_start (stream_id);
- if (demux->have_group_id)
- gst_event_set_group_id (event, demux->group_id);
-
- gst_pad_push_event (demux->srcpad, event);
- g_free (stream_id);
-
- gst_pad_set_caps (demux->srcpad, caps);
- codec_name = gst_pb_utils_get_codec_description (caps);
- gst_caps_unref (caps);
-
- gst_element_add_pad (GST_ELEMENT (demux), demux->srcpad);
-
- if (demux->byterate_num > 0 && demux->byterate_denom > 0) {
- GstFormat bformat = GST_FORMAT_BYTES;
- gint64 size_bytes = 0;
-
- GST_INFO_OBJECT (demux, "byte rate = %u/%u = %u bytes/sec",
- demux->byterate_num, demux->byterate_denom,
- demux->byterate_num / demux->byterate_denom);
-
- if (gst_pad_peer_query_duration (demux->sinkpad, bformat, &size_bytes)) {
- demux->duration =
- gst_real_demux_get_timestamp_from_offset (demux, size_bytes);
- demux->upstream_size = size_bytes;
- GST_INFO_OBJECT (demux, "upstream_size = %" G_GUINT64_FORMAT,
- demux->upstream_size);
- GST_INFO_OBJECT (demux, "duration = %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->duration));
- }
- }
-
- demux->need_newsegment = TRUE;
-
- if (codec_name) {
- if (demux->pending_tags == NULL) {
- demux->pending_tags = gst_tag_list_new_empty ();
- gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
- }
-
- gst_tag_list_add (demux->pending_tags, GST_TAG_MERGE_REPLACE,
- GST_TAG_AUDIO_CODEC, codec_name, NULL);
- g_free (codec_name);
- }
-
- gst_adapter_unmap (demux->adapter);
- gst_adapter_flush (demux->adapter, demux->data_offset - 6);
-
- demux->state = REAL_AUDIO_DEMUX_STATE_DATA;
- demux->need_newsegment = TRUE;
-
- return GST_FLOW_OK;
-
-/* ERRORS */
-unknown_fourcc:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
- ("Unknown fourcc '0x%" G_GINT32_MODIFIER "x'", demux->fourcc));
- return GST_FLOW_ERROR;
- }
-broken_file:
- {
- GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
- ("Broken file - invalid sample_rate or other header value"));
- return GST_FLOW_ERROR;
- }
-
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_data (GstRealAudioDemux * demux)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- guint avail, unit_size;
-
- avail = gst_adapter_available (demux->adapter);
-
- if (demux->packet_size > 0)
- unit_size = demux->packet_size;
- else
- unit_size = avail & 0xfffffff0; /* round down to next multiple of 16 */
-
- GST_LOG_OBJECT (demux, "available = %u, unit_size = %u", avail, unit_size);
-
- while (ret == GST_FLOW_OK && unit_size > 0 && avail >= unit_size) {
- GstClockTime ts;
- GstBuffer *buf;
-
- buf = gst_adapter_take_buffer (demux->adapter, unit_size);
- avail -= unit_size;
-
- if (demux->need_newsegment) {
- gst_pad_push_event (demux->srcpad,
- gst_event_new_segment (&demux->segment));
- demux->need_newsegment = FALSE;
- }
-
- if (demux->pending_tags) {
- gst_pad_push_event (demux->srcpad,
- gst_event_new_tag (demux->pending_tags));
- demux->pending_tags = NULL;
- }
-
- if (demux->fourcc == GST_RM_AUD_DNET) {
- buf = gst_rm_utils_descramble_dnet_buffer (buf);
- }
-
- ts = gst_real_demux_get_timestamp_from_offset (demux, demux->offset);
- GST_BUFFER_TIMESTAMP (buf) = ts;
-
- demux->segment.position = ts;
-
- ret = gst_pad_push (demux->srcpad, buf);
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_handle_buffer (GstRealAudioDemux * demux, GstBuffer * buf)
-{
- GstFlowReturn ret;
-
- gst_adapter_push (demux->adapter, buf);
- buf = NULL;
-
- switch (demux->state) {
- case REAL_AUDIO_DEMUX_STATE_MARKER:{
- ret = gst_real_audio_demux_parse_marker (demux);
- if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_HEADER)
- break;
- /* otherwise fall through */
- }
- case REAL_AUDIO_DEMUX_STATE_HEADER:{
- ret = gst_real_audio_demux_parse_header (demux);
- if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_DATA)
- break;
- /* otherwise fall through */
- }
- case REAL_AUDIO_DEMUX_STATE_DATA:{
- ret = gst_real_audio_demux_parse_data (demux);
- break;
- }
- default:
- g_return_val_if_reached (GST_FLOW_ERROR);
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstRealAudioDemux *demux;
-
- demux = GST_REAL_AUDIO_DEMUX (parent);
-
- return gst_real_audio_demux_handle_buffer (demux, buf);
-}
-
-static void
-gst_real_audio_demux_loop (GstRealAudioDemux * demux)
-{
- GstFlowReturn ret;
- GstBuffer *buf;
- guint bytes_needed;
-
- /* check how much data we need */
- switch (demux->state) {
- case REAL_AUDIO_DEMUX_STATE_MARKER:
- bytes_needed = 6 + 16; /* 16 are beginning of header */
- break;
- case REAL_AUDIO_DEMUX_STATE_HEADER:
- if (!gst_real_audio_demux_get_data_offset_from_header (demux))
- goto parse_header_error;
- bytes_needed = demux->data_offset - (6 + 16);
- break;
- case REAL_AUDIO_DEMUX_STATE_DATA:
- if (demux->packet_size > 0) {
- /* TODO: should probably take into account width/height as well? */
- bytes_needed = demux->packet_size;
- } else {
- bytes_needed = 1024;
- }
- break;
- default:
- g_return_if_reached ();
- }
-
- /* now get the data */
- GST_LOG_OBJECT (demux, "getting data: %5u bytes @ %8" G_GINT64_MODIFIER "u",
- bytes_needed, demux->offset);
-
- if (demux->upstream_size > 0 && demux->offset >= demux->upstream_size)
- goto eos;
-
- buf = NULL;
- ret = gst_pad_pull_range (demux->sinkpad, demux->offset, bytes_needed, &buf);
-
- if (ret != GST_FLOW_OK)
- goto pull_range_error;
-
- if (gst_buffer_get_size (buf) != bytes_needed)
- goto pull_range_short_read;
-
- ret = gst_real_audio_demux_handle_buffer (demux, buf);
- if (ret != GST_FLOW_OK)
- goto handle_flow_error;
-
- /* TODO: increase this in chain function too (for timestamps)? */
- demux->offset += bytes_needed;
-
- /* check for the end of the segment */
- if (demux->segment.stop != -1 && demux->segment.position != -1 &&
- demux->segment.position > demux->segment.stop) {
- GST_DEBUG_OBJECT (demux, "reached end of segment");
- goto eos;
- }
-
- return;
-
-/* ERRORS */
-parse_header_error:
- {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL), (NULL));
- goto pause_task;
- }
-handle_flow_error:
- {
- GST_WARNING_OBJECT (demux, "handle_buf flow: %s", gst_flow_get_name (ret));
- goto pause_task;
- }
-pull_range_error:
- {
- GST_WARNING_OBJECT (demux, "pull range flow: %s", gst_flow_get_name (ret));
- goto pause_task;
- }
-pull_range_short_read:
- {
- GST_WARNING_OBJECT (demux, "pull range short read: wanted %u bytes, but "
- "got only %" G_GSIZE_FORMAT " bytes", bytes_needed,
- gst_buffer_get_size (buf));
- gst_buffer_unref (buf);
- goto eos;
- }
-eos:
- {
- if (demux->state != REAL_AUDIO_DEMUX_STATE_DATA) {
- GST_WARNING_OBJECT (demux, "reached EOS before finished parsing header");
- goto parse_header_error;
- }
- GST_INFO_OBJECT (demux, "EOS");
- if ((demux->segment.flags & GST_SEEK_FLAG_SEGMENT) != 0) {
- gint64 stop;
-
- /* for segment playback we need to post when (in stream time)
- * we stopped, this is either stop (when set) or the duration. */
- if ((stop = demux->segment.stop) == -1)
- stop = demux->segment.duration;
-
- GST_DEBUG_OBJECT (demux, "sending segment done, at end of segment");
- gst_element_post_message (GST_ELEMENT (demux),
- gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
- stop));
- gst_pad_push_event (demux->srcpad,
- gst_event_new_segment_done (GST_FORMAT_TIME, stop));
- } else {
- /* normal playback, send EOS event downstream */
- GST_DEBUG_OBJECT (demux, "sending EOS event, at end of stream");
- gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
- }
- goto pause_task;
- }
-pause_task:
- {
- demux->segment_running = FALSE;
- gst_pad_pause_task (demux->sinkpad);
- GST_DEBUG_OBJECT (demux, "pausing task");
- return;
- }
-}
-
-static gboolean
-gst_real_audio_demux_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event)
-{
- GstRealAudioDemux *demux;
- gboolean ret;
-
- demux = GST_REAL_AUDIO_DEMUX (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEGMENT:{
- /* FIXME */
- gst_event_unref (event);
- demux->need_newsegment = TRUE;
- ret = TRUE;
- break;
- }
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
- return ret;
-}
-
-static gboolean
-gst_real_audio_demux_handle_seek (GstRealAudioDemux * demux, GstEvent * event)
-{
- GstFormat format;
- GstSeekFlags flags;
- GstSeekType cur_type, stop_type;
- gboolean flush, update;
- gdouble rate;
- guint64 seek_pos;
- gint64 cur, stop;
-
- if (!demux->seekable)
- goto not_seekable;
-
- if (demux->byterate_num == 0 || demux->byterate_denom == 0)
- goto no_bitrate;
-
- gst_event_parse_seek (event, &rate, &format, &flags,
- &cur_type, &cur, &stop_type, &stop);
-
- if (format != GST_FORMAT_TIME)
- goto only_time_format_supported;
-
- if (rate <= 0.0)
- goto cannot_do_backwards_playback;
-
- flush = ((flags & GST_SEEK_FLAG_FLUSH) != 0);
-
- GST_DEBUG_OBJECT (demux, "flush=%d, rate=%g", flush, rate);
-
- /* unlock streaming thread and make streaming stop */
- if (flush) {
- gst_pad_push_event (demux->sinkpad, gst_event_new_flush_start ());
- gst_pad_push_event (demux->srcpad, gst_event_new_flush_start ());
- } else {
- gst_pad_pause_task (demux->sinkpad);
- }
-
- GST_PAD_STREAM_LOCK (demux->sinkpad);
-
- gst_segment_do_seek (&demux->segment, rate, format, flags,
- cur_type, cur, stop_type, stop, &update);
-
- GST_DEBUG_OBJECT (demux, "segment: %" GST_SEGMENT_FORMAT, &demux->segment);
-
- seek_pos = gst_util_uint64_scale (demux->segment.start,
- demux->byterate_num, demux->byterate_denom * GST_SECOND);
- if (demux->packet_size > 0) {
- seek_pos -= seek_pos % demux->packet_size;
- }
- seek_pos += demux->data_offset;
-
- GST_DEBUG_OBJECT (demux, "seek_pos = %" G_GUINT64_FORMAT, seek_pos);
-
- /* stop flushing */
- gst_pad_push_event (demux->sinkpad, gst_event_new_flush_stop (TRUE));
- gst_pad_push_event (demux->srcpad, gst_event_new_flush_stop (TRUE));
-
- demux->offset = seek_pos;
- demux->need_newsegment = TRUE;
-
- /* notify start of new segment */
- if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- gst_element_post_message (GST_ELEMENT (demux),
- gst_message_new_segment_start (GST_OBJECT (demux),
- GST_FORMAT_TIME, demux->segment.position));
- }
-
- demux->segment_running = TRUE;
- /* restart our task since it might have been stopped when we did the flush */
- gst_pad_start_task (demux->sinkpad,
- (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
-
- /* streaming can continue now */
- GST_PAD_STREAM_UNLOCK (demux->sinkpad);
-
- return TRUE;
-
-/* ERRORS */
-not_seekable:
- {
- GST_DEBUG_OBJECT (demux, "seek failed: cannot seek in streaming mode");
- return FALSE;
- }
-no_bitrate:
- {
- GST_DEBUG_OBJECT (demux, "seek failed: bitrate unknown");
- return FALSE;
- }
-only_time_format_supported:
- {
- GST_DEBUG_OBJECT (demux, "can only seek in TIME format");
- return FALSE;
- }
-cannot_do_backwards_playback:
- {
- GST_DEBUG_OBJECT (demux, "can only seek with positive rate, not %lf", rate);
- return FALSE;
- }
-}
-
-static gboolean
-gst_real_audio_demux_src_event (GstPad * pad, GstObject * parent,
- GstEvent * event)
-{
- GstRealAudioDemux *demux;
- gboolean ret = FALSE;
-
- demux = GST_REAL_AUDIO_DEMUX (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_QOS:
- gst_event_unref (event);
- break;
- case GST_EVENT_SEEK:
- ret = gst_real_audio_demux_handle_seek (demux, event);
- gst_event_unref (event);
- break;
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-static gboolean
-gst_real_audio_demux_src_query (GstPad * pad, GstObject * parent,
- GstQuery * query)
-{
- GstRealAudioDemux *demux;
- gboolean ret = FALSE;
-
- demux = GST_REAL_AUDIO_DEMUX (parent);
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_DURATION:{
- GstFormat format;
-
- gst_query_parse_duration (query, &format, NULL);
- if (format == GST_FORMAT_TIME && demux->duration > 0) {
- gst_query_set_duration (query, GST_FORMAT_TIME, demux->duration);
- ret = TRUE;
- } else if (format == GST_FORMAT_BYTES && demux->upstream_size > 0) {
- gst_query_set_duration (query, GST_FORMAT_BYTES,
- demux->upstream_size - demux->data_offset);
- ret = TRUE;
- }
- break;
- }
- case GST_QUERY_SEEKING:{
- GstFormat format;
- gboolean seekable;
-
- gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
- seekable = (format == GST_FORMAT_TIME && demux->seekable);
- gst_query_set_seeking (query, format, seekable, 0,
- (format == GST_FORMAT_TIME) ? demux->duration : -1);
- ret = TRUE;
- break;
- }
- case GST_QUERY_SEGMENT:
- {
- GstFormat format;
- gint64 start, stop;
-
- format = demux->segment.format;
-
- start =
- gst_segment_to_stream_time (&demux->segment, format,
- demux->segment.start);
- if ((stop = demux->segment.stop) == -1)
- stop = demux->segment.duration;
- else
- stop = gst_segment_to_stream_time (&demux->segment, format, stop);
-
- gst_query_set_segment (query, demux->segment.rate, format, start, stop);
- ret = TRUE;
- break;
- }
- default:
- ret = gst_pad_query_default (pad, parent, query);
- break;
- }
-
- return ret;
-}
-
-static GstStateChangeReturn
-gst_real_audio_demux_change_state (GstElement * element,
- GstStateChange transition)
-{
- GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
- GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (element);
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- break;
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
- demux->segment_running = FALSE;
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
- gst_adapter_clear (demux->adapter);
- break;
- case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- break;
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- break;
- case GST_STATE_CHANGE_PAUSED_TO_READY:{
- gst_real_audio_demux_reset (demux);
- gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
- break;
- }
- case GST_STATE_CHANGE_READY_TO_NULL:
- break;
- default:
- break;
- }
-
- return ret;
-}
+++ /dev/null
-/* GStreamer RealAudio demuxer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_REAL_AUDIO_DEMUX_H__
-#define __GST_REAL_AUDIO_DEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_REAL_AUDIO_DEMUX \
- (gst_real_audio_demux_get_type())
-#define GST_REAL_AUDIO_DEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemux))
-#define GST_REAL_AUDIO_DEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemuxClass))
-#define GST_IS_REAL_AUDIO_DEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_REAL_AUDIO_DEMUX))
-#define GST_IS_REAL_AUDIO_DEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_REAL_AUDIO_DEMUX))
-
-typedef enum
-{
- REAL_AUDIO_DEMUX_STATE_MARKER,
- REAL_AUDIO_DEMUX_STATE_HEADER,
- REAL_AUDIO_DEMUX_STATE_DATA
-} GstRealAudioDemuxState;
-
-typedef struct _GstRealAudioDemux GstRealAudioDemux;
-typedef struct _GstRealAudioDemuxClass GstRealAudioDemuxClass;
-
-struct _GstRealAudioDemux {
- GstElement element;
-
- GstPad *sinkpad;
- GstPad *srcpad;
-
- gboolean have_group_id;
- guint group_id;
-
- GstAdapter *adapter;
- GstRealAudioDemuxState state;
-
- guint ra_version;
- guint data_offset;
-
- guint packet_size;
- guint leaf_size;
- guint height;
- guint flavour;
-
- guint sample_rate;
- guint sample_width;
- guint channels;
- guint32 fourcc;
-
- gboolean segment_running;
-
- gboolean need_newsegment;
- GstTagList *pending_tags;
-
- guint byterate_num; /* bytes per second */
- guint byterate_denom;
-
- gint64 duration;
- gint64 upstream_size;
-
- guint64 offset; /* current read byte offset for
- * pull_range-based mode */
-
- /* playback start/stop positions */
- GstSegment segment;
-
- gboolean seekable;
-};
-
-struct _GstRealAudioDemuxClass {
- GstElementClass element_class;
-};
-
-GType gst_real_audio_demux_get_type (void);
-
-GST_ELEMENT_REGISTER_DECLARE (rademux);
-
-G_END_DECLS
-
-#endif /* __GST_REAL_AUDIO_DEMUX_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
- * <2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstrdtbuffer.h"
-#include "rdtdepay.h"
-
-GST_DEBUG_CATEGORY_STATIC (rdtdepay_debug);
-#define GST_CAT_DEFAULT rdtdepay_debug
-
-/* RDTDepay signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0,
-};
-
-static GstStaticPadTemplate gst_rdt_depay_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/vnd.rn-realmedia")
- );
-
-static GstStaticPadTemplate gst_rdt_depay_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/x-rdt, "
- "media = (string) \"application\", "
- "clock-rate = (int) [1, MAX ], "
- "encoding-name = (string) \"X-REAL-RDT\""
- /* All optional parameters
- *
- * "config="
- */
- )
- );
-
-#define gst_rdt_depay_parent_class parent_class
-G_DEFINE_TYPE (GstRDTDepay, gst_rdt_depay, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rdtdepay, "rdtdepay",
- GST_RANK_MARGINAL, GST_TYPE_RDT_DEPAY);
-
-static void gst_rdt_depay_finalize (GObject * object);
-
-static GstStateChangeReturn gst_rdt_depay_change_state (GstElement *
- element, GstStateChange transition);
-
-static gboolean gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static GstFlowReturn gst_rdt_depay_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buf);
-
-static void
-gst_rdt_depay_class_init (GstRDTDepayClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->finalize = gst_rdt_depay_finalize;
-
- gstelement_class->change_state = gst_rdt_depay_change_state;
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_depay_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_depay_sink_template);
-
- gst_element_class_set_static_metadata (gstelement_class, "RDT packet parser",
- "Codec/Depayloader/Network",
- "Extracts RealMedia from RDT packets",
- "Lutz Mueller <lutz at topfrose dot de>, "
- "Wim Taymans <wim@fluendo.com>");
-
- GST_DEBUG_CATEGORY_INIT (rdtdepay_debug, "rdtdepay",
- 0, "Depayloader for RDT RealMedia packets");
-}
-
-static void
-gst_rdt_depay_init (GstRDTDepay * rdtdepay)
-{
- rdtdepay->sinkpad =
- gst_pad_new_from_static_template (&gst_rdt_depay_sink_template, "sink");
- gst_pad_set_chain_function (rdtdepay->sinkpad, gst_rdt_depay_chain);
- gst_pad_set_event_function (rdtdepay->sinkpad, gst_rdt_depay_sink_event);
- gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->sinkpad);
-
- rdtdepay->srcpad =
- gst_pad_new_from_static_template (&gst_rdt_depay_src_template, "src");
- gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->srcpad);
-}
-
-static void
-gst_rdt_depay_finalize (GObject * object)
-{
- GstRDTDepay *rdtdepay;
-
- rdtdepay = GST_RDT_DEPAY (object);
-
- if (rdtdepay->header)
- gst_buffer_unref (rdtdepay->header);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_rdt_depay_setcaps (GstPad * pad, GstCaps * caps)
-{
- GstStructure *structure;
- GstRDTDepay *rdtdepay;
- GstCaps *srccaps;
- gint clock_rate = 1000; /* default */
- const GValue *value;
- GstBuffer *header;
-
- rdtdepay = GST_RDT_DEPAY (GST_PAD_PARENT (pad));
-
- structure = gst_caps_get_structure (caps, 0);
-
- if (gst_structure_has_field (structure, "clock-rate"))
- gst_structure_get_int (structure, "clock-rate", &clock_rate);
-
- /* config contains the RealMedia header as a buffer. */
- value = gst_structure_get_value (structure, "config");
- if (!value)
- goto no_header;
-
- header = gst_value_get_buffer (value);
- if (!header)
- goto no_header;
-
- /* get other values for newsegment */
- value = gst_structure_get_value (structure, "npt-start");
- if (value && G_VALUE_HOLDS_UINT64 (value))
- rdtdepay->npt_start = g_value_get_uint64 (value);
- else
- rdtdepay->npt_start = 0;
- GST_DEBUG_OBJECT (rdtdepay, "NPT start %" G_GUINT64_FORMAT,
- rdtdepay->npt_start);
-
- value = gst_structure_get_value (structure, "npt-stop");
- if (value && G_VALUE_HOLDS_UINT64 (value))
- rdtdepay->npt_stop = g_value_get_uint64 (value);
- else
- rdtdepay->npt_stop = -1;
-
- GST_DEBUG_OBJECT (rdtdepay, "NPT stop %" G_GUINT64_FORMAT,
- rdtdepay->npt_stop);
-
- value = gst_structure_get_value (structure, "play-speed");
- if (value && G_VALUE_HOLDS_DOUBLE (value))
- rdtdepay->play_speed = g_value_get_double (value);
- else
- rdtdepay->play_speed = 1.0;
-
- value = gst_structure_get_value (structure, "play-scale");
- if (value && G_VALUE_HOLDS_DOUBLE (value))
- rdtdepay->play_scale = g_value_get_double (value);
- else
- rdtdepay->play_scale = 1.0;
-
- /* caps seem good, configure element */
- rdtdepay->clock_rate = clock_rate;
-
- /* set caps on pad and on header */
- srccaps = gst_caps_new_empty_simple ("application/vnd.rn-realmedia");
- gst_pad_set_caps (rdtdepay->srcpad, srccaps);
- gst_caps_unref (srccaps);
-
- if (rdtdepay->header)
- gst_buffer_unref (rdtdepay->header);
- rdtdepay->header = gst_buffer_ref (header);
-
- return TRUE;
-
- /* ERRORS */
-no_header:
- {
- GST_ERROR_OBJECT (rdtdepay, "no header found in caps, no 'config' field");
- return FALSE;
- }
-}
-
-static gboolean
-gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstRDTDepay *depay;
- gboolean res = TRUE;
-
- depay = GST_RDT_DEPAY (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_CAPS:
- {
- GstCaps *caps;
-
- gst_event_parse_caps (event, &caps);
- res = gst_rdt_depay_setcaps (pad, caps);
- gst_event_unref (event);
- break;
- }
- case GST_EVENT_FLUSH_STOP:
- res = gst_pad_push_event (depay->srcpad, event);
-
- gst_segment_init (&depay->segment, GST_FORMAT_UNDEFINED);
- depay->need_newsegment = TRUE;
- depay->next_seqnum = -1;
- break;
- case GST_EVENT_SEGMENT:
- {
- gst_event_copy_segment (event, &depay->segment);
- /* don't pass the event downstream, we generate our own segment
- * including the NTP time and other things we receive in caps */
- gst_event_unref (event);
- break;
- }
- default:
- /* pass other events forward */
- res = gst_pad_push_event (depay->srcpad, event);
- break;
- }
- return res;
-}
-
-static GstEvent *
-create_segment_event (GstRDTDepay * depay, gboolean update,
- GstClockTime position)
-{
- GstSegment segment;
-
- gst_segment_init (&segment, GST_FORMAT_TIME);
- segment.rate = depay->play_speed;
- segment.applied_rate = depay->play_scale;
- segment.start = position;
-
- if (depay->npt_stop != -1)
- segment.stop = depay->npt_stop - depay->npt_start;
- else
- segment.stop = -1;
-
- segment.time = position + depay->npt_start;
-
- return gst_event_new_segment (&segment);
-}
-
-static GstFlowReturn
-gst_rdt_depay_push (GstRDTDepay * rdtdepay, GstBuffer * buffer)
-{
- GstFlowReturn ret;
-
- if (rdtdepay->need_newsegment) {
- GstEvent *event;
-
- event = create_segment_event (rdtdepay, FALSE, 0);
- gst_pad_push_event (rdtdepay->srcpad, event);
-
- rdtdepay->need_newsegment = FALSE;
- }
-
- if (rdtdepay->discont) {
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
- rdtdepay->discont = FALSE;
- }
- ret = gst_pad_push (rdtdepay->srcpad, buffer);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_rdt_depay_handle_data (GstRDTDepay * rdtdepay, GstClockTime outtime,
- GstRDTPacket * packet)
-{
- GstFlowReturn ret;
- GstBuffer *outbuf;
- GstMapInfo outmap;
- guint8 *data, *outdata;
- guint size;
- guint16 stream_id;
- guint32 timestamp;
- gint gap;
- guint16 seqnum;
- guint8 flags;
- guint16 outflags;
-
- /* get pointers to the packet data */
- data = gst_rdt_packet_data_map (packet, &size);
-
- outbuf = gst_buffer_new_and_alloc (12 + size);
- GST_BUFFER_TIMESTAMP (outbuf) = outtime;
-
- GST_DEBUG_OBJECT (rdtdepay, "have size %u", size);
-
- /* copy over some things */
- stream_id = gst_rdt_packet_data_get_stream_id (packet);
- timestamp = gst_rdt_packet_data_get_timestamp (packet);
- flags = gst_rdt_packet_data_get_flags (packet);
-
- seqnum = gst_rdt_packet_data_get_seq (packet);
-
- GST_DEBUG_OBJECT (rdtdepay, "stream_id %u, timestamp %u, seqnum %d, flags %d",
- stream_id, timestamp, seqnum, flags);
-
- if (rdtdepay->next_seqnum != -1) {
- gap = gst_rdt_buffer_compare_seqnum (seqnum, rdtdepay->next_seqnum);
-
- /* if we have no gap, all is fine */
- if (G_UNLIKELY (gap != 0)) {
- GST_LOG_OBJECT (rdtdepay, "got packet %u, expected %u, gap %d", seqnum,
- rdtdepay->next_seqnum, gap);
- if (gap < 0) {
- /* seqnum > next_seqnum, we are missing some packets, this is always a
- * DISCONT. */
- GST_LOG_OBJECT (rdtdepay, "%d missing packets", gap);
- rdtdepay->discont = TRUE;
- } else {
- /* seqnum < next_seqnum, we have seen this packet before or the sender
- * could be restarted. If the packet is not too old, we throw it away as
- * a duplicate, otherwise we mark discont and continue. 100 misordered
- * packets is a good threshold. See also RFC 4737. */
- if (gap < 100)
- goto dropping;
-
- GST_LOG_OBJECT (rdtdepay,
- "%d > 100, packet too old, sender likely restarted", gap);
- rdtdepay->discont = TRUE;
- }
- }
- }
- rdtdepay->next_seqnum = (seqnum + 1);
- if (rdtdepay->next_seqnum == 0xff00)
- rdtdepay->next_seqnum = 0;
-
- if ((flags & 1) == 0)
- outflags = 2;
- else
- outflags = 0;
-
- gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
- outdata = outmap.data;
- GST_WRITE_UINT16_BE (outdata + 0, 0); /* version */
- GST_WRITE_UINT16_BE (outdata + 2, size + 12); /* length */
- GST_WRITE_UINT16_BE (outdata + 4, stream_id); /* stream */
- GST_WRITE_UINT32_BE (outdata + 6, timestamp); /* timestamp */
- GST_WRITE_UINT16_BE (outdata + 10, outflags); /* flags */
- memcpy (outdata + 12, data, size);
- gst_buffer_unmap (outbuf, &outmap);
- gst_buffer_resize (outbuf, 0, 12 + size);
-
- gst_rdt_packet_data_unmap (packet);
-
- GST_DEBUG_OBJECT (rdtdepay, "Pushing packet, outtime %" GST_TIME_FORMAT,
- GST_TIME_ARGS (outtime));
-
- ret = gst_rdt_depay_push (rdtdepay, outbuf);
-
- return ret;
-
- /* ERRORS */
-dropping:
- {
- GST_WARNING_OBJECT (rdtdepay, "%d <= 100, dropping old packet", gap);
- return GST_FLOW_OK;
- }
-}
-
-static GstFlowReturn
-gst_rdt_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
- GstRDTDepay *rdtdepay;
- GstFlowReturn ret;
- GstClockTime timestamp;
- gboolean more;
- GstRDTPacket packet;
-
- rdtdepay = GST_RDT_DEPAY (parent);
-
- if (GST_BUFFER_IS_DISCONT (buf)) {
- GST_LOG_OBJECT (rdtdepay, "received discont");
- rdtdepay->discont = TRUE;
- }
-
- if (rdtdepay->header) {
- GstBuffer *out;
-
- out = rdtdepay->header;
- rdtdepay->header = NULL;
-
- /* push header data first */
- gst_rdt_depay_push (rdtdepay, out);
- }
-
- /* save timestamp */
- timestamp = GST_BUFFER_TIMESTAMP (buf);
-
- ret = GST_FLOW_OK;
-
- GST_LOG_OBJECT (rdtdepay, "received buffer timestamp %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
-
- /* data is in RDT format. */
- more = gst_rdt_buffer_get_first_packet (buf, &packet);
- while (more) {
- GstRDTType type;
-
- type = gst_rdt_packet_get_type (&packet);
- GST_DEBUG_OBJECT (rdtdepay, "Have packet of type %04x", type);
-
- if (GST_RDT_IS_DATA_TYPE (type)) {
- GST_DEBUG_OBJECT (rdtdepay, "We have a data packet");
- ret = gst_rdt_depay_handle_data (rdtdepay, timestamp, &packet);
- } else {
- switch (type) {
- default:
- GST_DEBUG_OBJECT (rdtdepay, "Ignoring packet");
- break;
- }
- }
- if (ret != GST_FLOW_OK)
- break;
-
- more = gst_rdt_packet_move_to_next (&packet);
- }
-
- gst_buffer_unref (buf);
-
- return ret;
-}
-
-static GstStateChangeReturn
-gst_rdt_depay_change_state (GstElement * element, GstStateChange transition)
-{
- GstRDTDepay *rdtdepay;
- GstStateChangeReturn ret;
-
- rdtdepay = GST_RDT_DEPAY (element);
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- break;
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- gst_segment_init (&rdtdepay->segment, GST_FORMAT_UNDEFINED);
- rdtdepay->next_seqnum = -1;
- rdtdepay->need_newsegment = TRUE;
- break;
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- if (rdtdepay->header)
- gst_buffer_unref (rdtdepay->header);
- rdtdepay->header = NULL;
- break;
- case GST_STATE_CHANGE_READY_TO_NULL:
- break;
- default:
- break;
- }
- return ret;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
- * <2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RDT_DEPAY_H__
-#define __GST_RDT_DEPAY_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RDT_DEPAY \
- (gst_rdt_depay_get_type())
-#define GST_RDT_DEPAY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_DEPAY,GstRDTDepay))
-#define GST_RDT_DEPAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_DEPAY,GstRDTDepayClass))
-#define GST_IS_RDT_DEPAY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_DEPAY))
-#define GST_IS_RDT_DEPAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_DEPAY))
-
-typedef struct _GstRDTDepay GstRDTDepay;
-typedef struct _GstRDTDepayClass GstRDTDepayClass;
-
-struct _GstRDTDepay
-{
- GstElement parent;
-
- GstPad *sinkpad;
- GstPad *srcpad;
-
- guint clock_rate;
- GstClockTime npt_start;
- GstClockTime npt_stop;
- gdouble play_speed;
- gdouble play_scale;
-
- guint32 next_seqnum;
-
- gboolean discont;
- gboolean need_newsegment;
- GstSegment segment;
- GstBuffer *header;
-};
-
-struct _GstRDTDepayClass
-{
- GstElementClass parent_class;
-};
-
-GType gst_rdt_depay_get_type (void);
-
-GST_ELEMENT_REGISTER_DECLARE (rdtdepay);
-
-G_END_DECLS
-
-#endif /* __GST_RDT_DEPAY_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#include <string.h>
-#include <stdlib.h>
-
-#include "rdtjitterbuffer.h"
-#include "gstrdtbuffer.h"
-
-GST_DEBUG_CATEGORY_STATIC (rdt_jitter_buffer_debug);
-#define GST_CAT_DEFAULT rdt_jitter_buffer_debug
-
-#define MAX_WINDOW RDT_JITTER_BUFFER_MAX_WINDOW
-#define MAX_TIME (2 * GST_SECOND)
-
-/* signals and args */
-enum
-{
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0
-};
-
-/* GObject vmethods */
-static void rdt_jitter_buffer_finalize (GObject * object);
-
-/* static guint rdt_jitter_buffer_signals[LAST_SIGNAL] = { 0 }; */
-
-G_DEFINE_TYPE (RDTJitterBuffer, rdt_jitter_buffer, G_TYPE_OBJECT);
-
-static void
-rdt_jitter_buffer_class_init (RDTJitterBufferClass * klass)
-{
- GObjectClass *gobject_class;
-
- gobject_class = (GObjectClass *) klass;
-
- gobject_class->finalize = rdt_jitter_buffer_finalize;
-
- GST_DEBUG_CATEGORY_INIT (rdt_jitter_buffer_debug, "rdtjitterbuffer", 0,
- "RDT Jitter Buffer");
-}
-
-static void
-rdt_jitter_buffer_init (RDTJitterBuffer * jbuf)
-{
- jbuf->packets = g_queue_new ();
-
- rdt_jitter_buffer_reset_skew (jbuf);
-}
-
-static void
-rdt_jitter_buffer_finalize (GObject * object)
-{
- RDTJitterBuffer *jbuf;
-
- jbuf = RDT_JITTER_BUFFER_CAST (object);
-
- rdt_jitter_buffer_flush (jbuf);
- g_queue_free (jbuf->packets);
-
- G_OBJECT_CLASS (rdt_jitter_buffer_parent_class)->finalize (object);
-}
-
-/**
- * rdt_jitter_buffer_new:
- *
- * Create an #RDTJitterBuffer.
- *
- * Returns: a new #RDTJitterBuffer. Use g_object_unref() after usage.
- */
-RDTJitterBuffer *
-rdt_jitter_buffer_new (void)
-{
- RDTJitterBuffer *jbuf;
-
- jbuf = g_object_new (RDT_TYPE_JITTER_BUFFER, NULL);
-
- return jbuf;
-}
-
-void
-rdt_jitter_buffer_reset_skew (RDTJitterBuffer * jbuf)
-{
- jbuf->base_time = -1;
- jbuf->base_rtptime = -1;
- jbuf->ext_rtptime = -1;
- jbuf->window_pos = 0;
- jbuf->window_filling = TRUE;
- jbuf->window_min = 0;
- jbuf->skew = 0;
- jbuf->prev_send_diff = -1;
-}
-
-/* For the clock skew we use a windowed low point averaging algorithm as can be
- * found in http://www.grame.fr/pub/TR-050601.pdf. The idea is that the jitter is
- * composed of:
- *
- * J = N + n
- *
- * N : a constant network delay.
- * n : random added noise. The noise is concentrated around 0
- *
- * In the receiver we can track the elapsed time at the sender with:
- *
- * send_diff(i) = (Tsi - Ts0);
- *
- * Tsi : The time at the sender at packet i
- * Ts0 : The time at the sender at the first packet
- *
- * This is the difference between the RDT timestamp in the first received packet
- * and the current packet.
- *
- * At the receiver we have to deal with the jitter introduced by the network.
- *
- * recv_diff(i) = (Tri - Tr0)
- *
- * Tri : The time at the receiver at packet i
- * Tr0 : The time at the receiver at the first packet
- *
- * Both of these values contain a jitter Ji, a jitter for packet i, so we can
- * write:
- *
- * recv_diff(i) = (Cri + D + ni) - (Cr0 + D + n0))
- *
- * Cri : The time of the clock at the receiver for packet i
- * D + ni : The jitter when receiving packet i
- *
- * We see that the network delay is irrelevant here as we can eliminate D:
- *
- * recv_diff(i) = (Cri + ni) - (Cr0 + n0))
- *
- * The drift is now expressed as:
- *
- * Drift(i) = recv_diff(i) - send_diff(i);
- *
- * We now keep the W latest values of Drift and find the minimum (this is the
- * one with the lowest network jitter and thus the one which is least affected
- * by it). We average this lowest value to smooth out the resulting network skew.
- *
- * Both the window and the weighting used for averaging influence the accuracy
- * of the drift estimation. Finding the correct parameters turns out to be a
- * compromise between accuracy and inertia.
- *
- * We use a 2 second window or up to 512 data points, which is statistically big
- * enough to catch spikes (FIXME, detect spikes).
- * We also use a rather large weighting factor (125) to smoothly adapt. During
- * startup, when filling the window, we use a parabolic weighting factor, the
- * more the window is filled, the faster we move to the detected possible skew.
- *
- * Returns: @time adjusted with the clock skew.
- */
-static GstClockTime
-calculate_skew (RDTJitterBuffer * jbuf, guint32 rtptime, GstClockTime time,
- guint32 clock_rate)
-{
- guint64 ext_rtptime;
- guint64 send_diff, recv_diff;
- gint64 delta;
- gint64 old;
- gint pos, i;
- GstClockTime gstrtptime, out_time;
-
- //ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
- ext_rtptime = rtptime;
-
- gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate);
-
-again:
- /* first time, lock on to time and gstrtptime */
- if (jbuf->base_time == -1)
- jbuf->base_time = time;
- if (jbuf->base_rtptime == -1)
- jbuf->base_rtptime = gstrtptime;
-
- if (gstrtptime >= jbuf->base_rtptime)
- send_diff = gstrtptime - jbuf->base_rtptime;
- else {
- /* elapsed time at sender, timestamps can go backwards and thus be smaller
- * than our base time, take a new base time in that case. */
- GST_DEBUG ("backward timestamps at server, taking new base time");
- jbuf->base_rtptime = gstrtptime;
- jbuf->base_time = time;
- send_diff = 0;
- }
-
- GST_DEBUG ("extrtp %" G_GUINT64_FORMAT ", gstrtp %" GST_TIME_FORMAT ", base %"
- GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT, ext_rtptime,
- GST_TIME_ARGS (gstrtptime), GST_TIME_ARGS (jbuf->base_rtptime),
- GST_TIME_ARGS (send_diff));
-
- if (jbuf->prev_send_diff != -1 && time != -1) {
- gint64 delta_diff;
-
- if (send_diff > jbuf->prev_send_diff)
- delta_diff = send_diff - jbuf->prev_send_diff;
- else
- delta_diff = jbuf->prev_send_diff - send_diff;
-
- /* server changed rtp timestamps too quickly, reset skew detection and start
- * again. This value is sortof arbitrary and can be a bad measurement up if
- * there are many packets missing because then we get a big gap that is
- * unrelated to a timestamp switch. */
- if (delta_diff > GST_SECOND) {
- GST_DEBUG ("delta changed too quickly %" GST_TIME_FORMAT " reset skew",
- GST_TIME_ARGS (delta_diff));
- rdt_jitter_buffer_reset_skew (jbuf);
- goto again;
- }
- }
- jbuf->prev_send_diff = send_diff;
-
- /* we don't have an arrival timestamp so we can't do skew detection. we
- * should still apply a timestamp based on RDT timestamp and base_time */
- if (time == -1)
- goto no_skew;
-
- /* elapsed time at receiver, includes the jitter */
- recv_diff = time - jbuf->base_time;
-
- GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %"
- GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (jbuf->base_time),
- GST_TIME_ARGS (recv_diff));
-
- /* measure the diff */
- delta = ((gint64) recv_diff) - ((gint64) send_diff);
-
- pos = jbuf->window_pos;
-
- if (jbuf->window_filling) {
- /* we are filling the window */
- GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta);
- jbuf->window[pos++] = delta;
- /* calc the min delta we observed */
- if (pos == 1 || delta < jbuf->window_min)
- jbuf->window_min = delta;
-
- if (send_diff >= MAX_TIME || pos >= MAX_WINDOW) {
- jbuf->window_size = pos;
-
- /* window filled */
- GST_DEBUG ("min %" G_GINT64_FORMAT, jbuf->window_min);
-
- /* the skew is now the min */
- jbuf->skew = jbuf->window_min;
- jbuf->window_filling = FALSE;
- } else {
- gint perc_time, perc_window, perc;
-
- /* figure out how much we filled the window, this depends on the amount of
- * time we have or the max number of points we keep. */
- perc_time = send_diff * 100 / MAX_TIME;
- perc_window = pos * 100 / MAX_WINDOW;
- perc = MAX (perc_time, perc_window);
-
- /* make a parabolic function, the closer we get to the MAX, the more value
- * we give to the scaling factor of the new value */
- perc = perc * perc;
-
- /* quickly go to the min value when we are filling up, slowly when we are
- * just starting because we're not sure it's a good value yet. */
- jbuf->skew =
- (perc * jbuf->window_min + ((10000 - perc) * jbuf->skew)) / 10000;
- jbuf->window_size = pos + 1;
- }
- } else {
- /* pick old value and store new value. We keep the previous value in order
- * to quickly check if the min of the window changed */
- old = jbuf->window[pos];
- jbuf->window[pos++] = delta;
-
- if (delta <= jbuf->window_min) {
- /* if the new value we inserted is smaller or equal to the current min,
- * it becomes the new min */
- jbuf->window_min = delta;
- } else if (old == jbuf->window_min) {
- gint64 min = G_MAXINT64;
-
- /* if we removed the old min, we have to find a new min */
- for (i = 0; i < jbuf->window_size; i++) {
- /* we found another value equal to the old min, we can stop searching now */
- if (jbuf->window[i] == old) {
- min = old;
- break;
- }
- if (jbuf->window[i] < min)
- min = jbuf->window[i];
- }
- jbuf->window_min = min;
- }
- /* average the min values */
- jbuf->skew = (jbuf->window_min + (124 * jbuf->skew)) / 125;
- GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT,
- delta, jbuf->window_min);
- }
- /* wrap around in the window */
- if (pos >= jbuf->window_size)
- pos = 0;
- jbuf->window_pos = pos;
-
-no_skew:
- /* the output time is defined as the base timestamp plus the RDT time
- * adjusted for the clock skew .*/
- out_time = jbuf->base_time + send_diff + jbuf->skew;
-
- GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
- jbuf->skew, GST_TIME_ARGS (out_time));
-
- return out_time;
-}
-
-/**
- * rdt_jitter_buffer_insert:
- * @jbuf: an #RDTJitterBuffer
- * @buf: a buffer
- * @time: a running_time when this buffer was received in nanoseconds
- * @clock_rate: the clock-rate of the payload of @buf
- * @tail: TRUE when the tail element changed.
- *
- * Inserts @buf into the packet queue of @jbuf. The sequence number of the
- * packet will be used to sort the packets. This function takes ownerhip of
- * @buf when the function returns %TRUE.
- * @buf should have writable metadata when calling this function.
- *
- * Returns: %FALSE if a packet with the same number already existed.
- */
-gboolean
-rdt_jitter_buffer_insert (RDTJitterBuffer * jbuf, GstBuffer * buf,
- GstClockTime time, guint32 clock_rate, gboolean * tail)
-{
- GList *list;
- guint32 rtptime;
- guint16 seqnum;
- GstRDTPacket packet;
- gboolean more;
-
- g_return_val_if_fail (jbuf != NULL, FALSE);
- g_return_val_if_fail (buf != NULL, FALSE);
-
- more = gst_rdt_buffer_get_first_packet (buf, &packet);
- /* programmer error */
- g_return_val_if_fail (more == TRUE, FALSE);
-
- seqnum = gst_rdt_packet_data_get_seq (&packet);
- /* do skew calculation by measuring the difference between rtptime and the
- * receive time, this function will retimestamp @buf with the skew corrected
- * running time. */
- rtptime = gst_rdt_packet_data_get_timestamp (&packet);
-
- /* loop the list to skip strictly smaller seqnum buffers */
- for (list = jbuf->packets->head; list; list = g_list_next (list)) {
- guint16 qseq;
- gint gap;
-
- more =
- gst_rdt_buffer_get_first_packet (GST_BUFFER_CAST (list->data), &packet);
- /* programmer error */
- g_return_val_if_fail (more == TRUE, FALSE);
-
- qseq = gst_rdt_packet_data_get_seq (&packet);
-
- /* compare the new seqnum to the one in the buffer */
- gap = gst_rdt_buffer_compare_seqnum (seqnum, qseq);
-
- /* we hit a packet with the same seqnum, notify a duplicate */
- if (G_UNLIKELY (gap == 0))
- goto duplicate;
-
- /* seqnum > qseq, we can stop looking */
- if (G_LIKELY (gap < 0))
- break;
- }
-
-
- if (clock_rate) {
- time = calculate_skew (jbuf, rtptime, time, clock_rate);
- GST_BUFFER_TIMESTAMP (buf) = time;
- }
-
- if (list)
- g_queue_insert_before (jbuf->packets, list, buf);
- else
- g_queue_push_tail (jbuf->packets, buf);
-
- /* tail was changed when we did not find a previous packet, we set the return
- * flag when requested. */
- if (tail)
- *tail = (list == NULL);
-
- return TRUE;
-
- /* ERRORS */
-duplicate:
- {
- GST_WARNING ("duplicate packet %d found", (gint) seqnum);
- return FALSE;
- }
-}
-
-/**
- * rdt_jitter_buffer_pop:
- * @jbuf: an #RDTJitterBuffer
- *
- * Pops the oldest buffer from the packet queue of @jbuf. The popped buffer will
- * have its timestamp adjusted with the incoming running_time and the detected
- * clock skew.
- *
- * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
- */
-GstBuffer *
-rdt_jitter_buffer_pop (RDTJitterBuffer * jbuf)
-{
- GstBuffer *buf;
-
- g_return_val_if_fail (jbuf != NULL, FALSE);
-
- buf = g_queue_pop_tail (jbuf->packets);
-
- return buf;
-}
-
-/**
- * rdt_jitter_buffer_peek:
- * @jbuf: an #RDTJitterBuffer
- *
- * Peek the oldest buffer from the packet queue of @jbuf. Register a callback
- * with rdt_jitter_buffer_set_tail_changed() to be notified when an older packet
- * was inserted in the queue.
- *
- * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
- */
-GstBuffer *
-rdt_jitter_buffer_peek (RDTJitterBuffer * jbuf)
-{
- GstBuffer *buf;
-
- g_return_val_if_fail (jbuf != NULL, FALSE);
-
- buf = g_queue_peek_tail (jbuf->packets);
-
- return buf;
-}
-
-/**
- * rdt_jitter_buffer_flush:
- * @jbuf: an #RDTJitterBuffer
- *
- * Flush all packets from the jitterbuffer.
- */
-void
-rdt_jitter_buffer_flush (RDTJitterBuffer * jbuf)
-{
- GstBuffer *buffer;
-
- g_return_if_fail (jbuf != NULL);
-
- while ((buffer = g_queue_pop_head (jbuf->packets)))
- gst_buffer_unref (buffer);
-}
-
-/**
- * rdt_jitter_buffer_num_packets:
- * @jbuf: an #RDTJitterBuffer
- *
- * Get the number of packets currently in "jbuf.
- *
- * Returns: The number of packets in @jbuf.
- */
-guint
-rdt_jitter_buffer_num_packets (RDTJitterBuffer * jbuf)
-{
- g_return_val_if_fail (jbuf != NULL, 0);
-
- return jbuf->packets->length;
-}
-
-/**
- * rdt_jitter_buffer_get_ts_diff:
- * @jbuf: an #RDTJitterBuffer
- *
- * Get the difference between the timestamps of first and last packet in the
- * jitterbuffer.
- *
- * Returns: The difference expressed in the timestamp units of the packets.
- */
-guint32
-rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer * jbuf)
-{
- guint64 high_ts, low_ts;
- GstBuffer *high_buf, *low_buf;
- guint32 result;
-
- g_return_val_if_fail (jbuf != NULL, 0);
-
- high_buf = g_queue_peek_head (jbuf->packets);
- low_buf = g_queue_peek_tail (jbuf->packets);
-
- if (!high_buf || !low_buf || high_buf == low_buf)
- return 0;
-
- //high_ts = gst_rtp_buffer_get_timestamp (high_buf);
- //low_ts = gst_rtp_buffer_get_timestamp (low_buf);
- high_ts = 0;
- low_ts = 0;
-
- /* it needs to work if ts wraps */
- if (high_ts >= low_ts) {
- result = (guint32) (high_ts - low_ts);
- } else {
- result = (guint32) (high_ts + G_MAXUINT32 + 1 - low_ts);
- }
- return result;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __RDT_JITTER_BUFFER_H__
-#define __RDT_JITTER_BUFFER_H__
-
-#include <gst/gst.h>
-
-typedef struct _RDTJitterBuffer RDTJitterBuffer;
-typedef struct _RDTJitterBufferClass RDTJitterBufferClass;
-
-#define RDT_TYPE_JITTER_BUFFER (rdt_jitter_buffer_get_type())
-#define RDT_JITTER_BUFFER(src) (G_TYPE_CHECK_INSTANCE_CAST((src),RDT_TYPE_JITTER_BUFFER,RDTJitterBuffer))
-#define RDT_JITTER_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),RDT_TYPE_JITTER_BUFFER,RDTJitterBufferClass))
-#define RDT_IS_JITTER_BUFFER(src) (G_TYPE_CHECK_INSTANCE_TYPE((src),RDT_TYPE_JITTER_BUFFER))
-#define RDT_IS_JITTER_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),RDT_TYPE_JITTER_BUFFER))
-#define RDT_JITTER_BUFFER_CAST(src) ((RDTJitterBuffer *)(src))
-
-/**
- * RTPTailChanged:
- * @jbuf: an #RDTJitterBuffer
- * @user_data: user data specified when registering
- *
- * This callback will be called when the tail buffer of @jbuf changed.
- */
-typedef void (*RTPTailChanged) (RDTJitterBuffer *jbuf, gpointer user_data);
-
-#define RDT_JITTER_BUFFER_MAX_WINDOW 512
-/**
- * RDTJitterBuffer:
- *
- * A JitterBuffer in the #RTPSession
- */
-struct _RDTJitterBuffer {
- GObject object;
-
- GQueue *packets;
-
- /* for calculating skew */
- GstClockTime base_time;
- GstClockTime base_rtptime;
- guint64 ext_rtptime;
- gint64 window[RDT_JITTER_BUFFER_MAX_WINDOW];
- guint window_pos;
- guint window_size;
- gboolean window_filling;
- gint64 window_min;
- gint64 skew;
- gint64 prev_send_diff;
-};
-
-struct _RDTJitterBufferClass {
- GObjectClass parent_class;
-};
-
-GType rdt_jitter_buffer_get_type (void);
-
-/* managing lifetime */
-RDTJitterBuffer* rdt_jitter_buffer_new (void);
-
-void rdt_jitter_buffer_reset_skew (RDTJitterBuffer *jbuf);
-
-gboolean rdt_jitter_buffer_insert (RDTJitterBuffer *jbuf, GstBuffer *buf,
- GstClockTime time,
- guint32 clock_rate,
- gboolean *tail);
-GstBuffer * rdt_jitter_buffer_peek (RDTJitterBuffer *jbuf);
-GstBuffer * rdt_jitter_buffer_pop (RDTJitterBuffer *jbuf);
-
-void rdt_jitter_buffer_flush (RDTJitterBuffer *jbuf);
-
-guint rdt_jitter_buffer_num_packets (RDTJitterBuffer *jbuf);
-guint32 rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer *jbuf);
-
-#endif /* __RDT_JITTER_BUFFER_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- * <2013> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rdtmanager
- * @title: rdtmanager
- * @see_also: GstRtspSrc
- *
- * A simple RTP session manager used internally by rtspsrc.
- */
-
-/* #define HAVE_RTCP */
-
-#include "gstrdtbuffer.h"
-#include "rdtmanager.h"
-#include "rdtjitterbuffer.h"
-
-#include <gst/glib-compat-private.h>
-
-#include <stdio.h>
-
-GST_DEBUG_CATEGORY_STATIC (rdtmanager_debug);
-#define GST_CAT_DEFAULT (rdtmanager_debug)
-
-/* GstRDTManager signals and args */
-enum
-{
- SIGNAL_REQUEST_PT_MAP,
- SIGNAL_CLEAR_PT_MAP,
-
- SIGNAL_ON_NEW_SSRC,
- SIGNAL_ON_SSRC_COLLISION,
- SIGNAL_ON_SSRC_VALIDATED,
- SIGNAL_ON_SSRC_ACTIVE,
- SIGNAL_ON_SSRC_SDES,
- SIGNAL_ON_BYE_SSRC,
- SIGNAL_ON_BYE_TIMEOUT,
- SIGNAL_ON_TIMEOUT,
- SIGNAL_ON_NPT_STOP,
- LAST_SIGNAL
-};
-
-#define DEFAULT_LATENCY_MS 200
-
-enum
-{
- PROP_0,
- PROP_LATENCY
-};
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtp_sink_%u",
- GST_PAD_SINK,
- GST_PAD_REQUEST,
- GST_STATIC_CAPS ("application/x-rdt")
- );
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtcp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtcp_sink_%u",
- GST_PAD_SINK,
- GST_PAD_REQUEST,
- GST_STATIC_CAPS ("application/x-rtcp")
- );
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtp_src_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtp_src_%u_%u_%u",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("application/x-rdt")
- );
-
-static GstStaticPadTemplate gst_rdt_manager_rtcp_src_template =
-GST_STATIC_PAD_TEMPLATE ("rtcp_src_%u",
- GST_PAD_SRC,
- GST_PAD_REQUEST,
- GST_STATIC_CAPS ("application/x-rtcp")
- );
-
-static void gst_rdt_manager_finalize (GObject * object);
-static void gst_rdt_manager_set_property (GObject * object,
- guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_rdt_manager_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec);
-
-static gboolean gst_rdt_manager_query_src (GstPad * pad, GstObject * parent,
- GstQuery * query);
-static gboolean gst_rdt_manager_src_activate_mode (GstPad * pad,
- GstObject * parent, GstPadMode mode, gboolean active);
-
-static GstClock *gst_rdt_manager_provide_clock (GstElement * element);
-static GstStateChangeReturn gst_rdt_manager_change_state (GstElement * element,
- GstStateChange transition);
-static GstPad *gst_rdt_manager_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
-static void gst_rdt_manager_release_pad (GstElement * element, GstPad * pad);
-
-static gboolean gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
- GstRDTManagerSession * session, GstCaps * caps);
-static gboolean gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent,
- GstEvent * event);
-
-static GstFlowReturn gst_rdt_manager_chain_rdt (GstPad * pad,
- GstObject * parent, GstBuffer * buffer);
-static GstFlowReturn gst_rdt_manager_chain_rtcp (GstPad * pad,
- GstObject * parent, GstBuffer * buffer);
-static void gst_rdt_manager_loop (GstPad * pad);
-
-static guint gst_rdt_manager_signals[LAST_SIGNAL] = { 0 };
-
-#define JBUF_LOCK(sess) (g_mutex_lock (&(sess)->jbuf_lock))
-
-#define JBUF_LOCK_CHECK(sess,label) G_STMT_START { \
- JBUF_LOCK (sess); \
- if (sess->srcresult != GST_FLOW_OK) \
- goto label; \
-} G_STMT_END
-
-#define JBUF_UNLOCK(sess) (g_mutex_unlock (&(sess)->jbuf_lock))
-#define JBUF_WAIT(sess) (g_cond_wait (&(sess)->jbuf_cond, &(sess)->jbuf_lock))
-
-#define JBUF_WAIT_CHECK(sess,label) G_STMT_START { \
- JBUF_WAIT(sess); \
- if (sess->srcresult != GST_FLOW_OK) \
- goto label; \
-} G_STMT_END
-
-#define JBUF_SIGNAL(sess) (g_cond_signal (&(sess)->jbuf_cond))
-
-/* Manages the receiving end of the packets.
- *
- * There is one such structure for each RTP session (audio/video/...).
- * We get the RTP/RTCP packets and stuff them into the session manager.
- */
-struct _GstRDTManagerSession
-{
- /* session id */
- gint id;
- /* the parent bin */
- GstRDTManager *dec;
-
- gboolean active;
- /* we only support one ssrc and one pt */
- guint32 ssrc;
- guint8 pt;
- gint clock_rate;
- GstCaps *caps;
- gint64 clock_base;
-
- GstSegment segment;
-
- /* the last seqnum we pushed out */
- guint32 last_popped_seqnum;
- /* the next expected seqnum */
- guint32 next_seqnum;
- /* last output time */
- GstClockTime last_out_time;
-
- /* the pads of the session */
- GstPad *recv_rtp_sink;
- GstPad *recv_rtp_src;
- GstPad *recv_rtcp_sink;
- GstPad *rtcp_src;
-
- GstFlowReturn srcresult;
- gboolean blocked;
- gboolean eos;
- gboolean waiting;
- gboolean discont;
- GstClockID clock_id;
-
- /* jitterbuffer, lock and cond */
- RDTJitterBuffer *jbuf;
- GMutex jbuf_lock;
- GCond jbuf_cond;
-
- /* some accounting */
- guint64 num_late;
- guint64 num_duplicates;
-};
-
-/* find a session with the given id */
-static GstRDTManagerSession *
-find_session_by_id (GstRDTManager * rdtmanager, gint id)
-{
- GSList *walk;
-
- for (walk = rdtmanager->sessions; walk; walk = g_slist_next (walk)) {
- GstRDTManagerSession *sess = (GstRDTManagerSession *) walk->data;
-
- if (sess->id == id)
- return sess;
- }
- return NULL;
-}
-
-/* create a session with the given id */
-static GstRDTManagerSession *
-create_session (GstRDTManager * rdtmanager, gint id)
-{
- GstRDTManagerSession *sess;
-
- sess = g_new0 (GstRDTManagerSession, 1);
- sess->id = id;
- sess->dec = rdtmanager;
- sess->jbuf = rdt_jitter_buffer_new ();
- g_mutex_init (&sess->jbuf_lock);
- g_cond_init (&sess->jbuf_cond);
- rdtmanager->sessions = g_slist_prepend (rdtmanager->sessions, sess);
-
- return sess;
-}
-
-static gboolean
-forward_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
-{
- GstPad *srcpad = GST_PAD_CAST (user_data);
-
- gst_pad_push_event (srcpad, gst_event_ref (*event));
-
- return TRUE;
-}
-
-static gboolean
-activate_session (GstRDTManager * rdtmanager, GstRDTManagerSession * session,
- guint32 ssrc, guint8 pt)
-{
- GstPadTemplate *templ;
- GstElementClass *klass;
- gchar *name;
- GstCaps *caps;
- GValue ret = { 0 };
- GValue args[3] = { {0}
- , {0}
- , {0}
- };
-
- GST_DEBUG_OBJECT (rdtmanager, "creating stream");
-
- session->ssrc = ssrc;
- session->pt = pt;
-
- /* get pt map */
- g_value_init (&args[0], GST_TYPE_ELEMENT);
- g_value_set_object (&args[0], rdtmanager);
- g_value_init (&args[1], G_TYPE_UINT);
- g_value_set_uint (&args[1], session->id);
- g_value_init (&args[2], G_TYPE_UINT);
- g_value_set_uint (&args[2], pt);
-
- g_value_init (&ret, GST_TYPE_CAPS);
- g_value_set_boxed (&ret, NULL);
-
- g_signal_emitv (args, gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP], 0,
- &ret);
-
- g_value_unset (&args[0]);
- g_value_unset (&args[1]);
- g_value_unset (&args[2]);
- caps = (GstCaps *) g_value_dup_boxed (&ret);
- g_value_unset (&ret);
-
- if (caps)
- gst_rdt_manager_parse_caps (rdtmanager, session, caps);
-
- name = g_strdup_printf ("recv_rtp_src_%u_%u_%u", session->id, ssrc, pt);
- klass = GST_ELEMENT_GET_CLASS (rdtmanager);
- templ = gst_element_class_get_pad_template (klass, "recv_rtp_src_%u_%u_%u");
- session->recv_rtp_src = gst_pad_new_from_template (templ, name);
- g_free (name);
-
- gst_pad_set_element_private (session->recv_rtp_src, session);
- gst_pad_set_query_function (session->recv_rtp_src, gst_rdt_manager_query_src);
- gst_pad_set_activatemode_function (session->recv_rtp_src,
- gst_rdt_manager_src_activate_mode);
-
- gst_pad_set_active (session->recv_rtp_src, TRUE);
-
- gst_pad_sticky_events_foreach (session->recv_rtp_sink, forward_sticky_events,
- session->recv_rtp_src);
- gst_pad_set_caps (session->recv_rtp_src, caps);
- gst_caps_unref (caps);
-
- gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_src);
-
- return TRUE;
-}
-
-static void
-free_session (GstRDTManagerSession * session)
-{
- g_object_unref (session->jbuf);
- g_cond_clear (&session->jbuf_cond);
- g_mutex_clear (&session->jbuf_lock);
- g_free (session);
-}
-
-#define gst_rdt_manager_parent_class parent_class
-G_DEFINE_TYPE (GstRDTManager, gst_rdt_manager, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rdtmanager, "rdtmanager",
- GST_RANK_NONE, GST_TYPE_RDT_MANAGER);
-
-/* BOXED:UINT,UINT */
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-
-static void
-gst_rdt_manager_marshal_BOXED__UINT_UINT (GClosure * closure,
- GValue * return_value,
- guint n_param_values,
- const GValue * param_values,
- gpointer invocation_hint, gpointer marshal_data)
-{
- typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
- guint arg_1, guint arg_2, gpointer data2);
- register GMarshalFunc_BOXED__UINT_UINT callback;
- register GCClosure *cc = (GCClosure *) closure;
- register gpointer data1, data2;
- gpointer v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure)) {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- } else {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback =
- (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
- cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2), data2);
-
- g_value_take_boxed (return_value, v_return);
-}
-
-static void
-gst_rdt_manager_marshal_VOID__UINT_UINT (GClosure * closure,
- GValue * return_value,
- guint n_param_values,
- const GValue * param_values,
- gpointer invocation_hint, gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
- guint arg_1, guint arg_2, gpointer data2);
- register GMarshalFunc_VOID__UINT_UINT callback;
- register GCClosure *cc = (GCClosure *) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure)) {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- } else {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback =
- (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
- cc->callback);
-
- callback (data1,
- g_marshal_value_peek_uint (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2), data2);
-}
-
-static void
-gst_rdt_manager_class_init (GstRDTManagerClass * g_class)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstRDTManagerClass *klass;
-
- klass = (GstRDTManagerClass *) g_class;
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = gst_rdt_manager_finalize;
- gobject_class->set_property = gst_rdt_manager_set_property;
- gobject_class->get_property = gst_rdt_manager_get_property;
-
- g_object_class_install_property (gobject_class, PROP_LATENCY,
- g_param_spec_uint ("latency", "Buffer latency in ms",
- "Amount of ms to buffer", 0, G_MAXUINT, DEFAULT_LATENCY_MS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GstRDTManager::request-pt-map:
- * @rdtmanager: the object which received the signal
- * @session: the session
- * @pt: the pt
- *
- * Request the payload type as #GstCaps for @pt in @session.
- */
- gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP] =
- g_signal_new ("request-pt-map", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, request_pt_map),
- NULL, NULL, gst_rdt_manager_marshal_BOXED__UINT_UINT, GST_TYPE_CAPS, 2,
- G_TYPE_UINT, G_TYPE_UINT);
-
- /**
- * GstRDTManager::clear-pt-map:
- * @rtpbin: the object which received the signal
- *
- * Clear all previously cached pt-mapping obtained with
- * GstRDTManager::request-pt-map.
- */
- gst_rdt_manager_signals[SIGNAL_CLEAR_PT_MAP] =
- g_signal_new ("clear-pt-map", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, clear_pt_map),
- NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
-
- /**
- * GstRDTManager::on-bye-ssrc:
- * @rtpbin: the object which received the signal
- * @session: the session
- * @ssrc: the SSRC
- *
- * Notify of an SSRC that became inactive because of a BYE packet.
- */
- gst_rdt_manager_signals[SIGNAL_ON_BYE_SSRC] =
- g_signal_new ("on-bye-ssrc", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_ssrc),
- NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
- /**
- * GstRDTManager::on-bye-timeout:
- * @rtpbin: the object which received the signal
- * @session: the session
- * @ssrc: the SSRC
- *
- * Notify of an SSRC that has timed out because of BYE
- */
- gst_rdt_manager_signals[SIGNAL_ON_BYE_TIMEOUT] =
- g_signal_new ("on-bye-timeout", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_timeout),
- NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
- /**
- * GstRDTManager::on-timeout:
- * @rtpbin: the object which received the signal
- * @session: the session
- * @ssrc: the SSRC
- *
- * Notify of an SSRC that has timed out
- */
- gst_rdt_manager_signals[SIGNAL_ON_TIMEOUT] =
- g_signal_new ("on-timeout", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_timeout),
- NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
-
- /**
- * GstRDTManager::on-npt-stop:
- * @rtpbin: the object which received the signal
- * @session: the session
- * @ssrc: the SSRC
- *
- * Notify that SSRC sender has sent data up to the configured NPT stop time.
- */
- gst_rdt_manager_signals[SIGNAL_ON_NPT_STOP] =
- g_signal_new ("on-npt-stop", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_npt_stop),
- NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
-
-
- gstelement_class->provide_clock =
- GST_DEBUG_FUNCPTR (gst_rdt_manager_provide_clock);
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_rdt_manager_change_state);
- gstelement_class->request_new_pad =
- GST_DEBUG_FUNCPTR (gst_rdt_manager_request_new_pad);
- gstelement_class->release_pad =
- GST_DEBUG_FUNCPTR (gst_rdt_manager_release_pad);
-
- /* sink pads */
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_manager_recv_rtp_sink_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_manager_recv_rtcp_sink_template);
- /* src pads */
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_manager_recv_rtp_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_rdt_manager_rtcp_src_template);
-
- gst_element_class_set_static_metadata (gstelement_class, "RTP Decoder",
- "Codec/Parser/Network",
- "Accepts raw RTP and RTCP packets and sends them forward",
- "Wim Taymans <wim.taymans@gmail.com>");
-
- GST_DEBUG_CATEGORY_INIT (rdtmanager_debug, "rdtmanager", 0, "RTP decoder");
-}
-
-static void
-gst_rdt_manager_init (GstRDTManager * rdtmanager)
-{
- rdtmanager->provided_clock = gst_system_clock_obtain ();
- rdtmanager->latency = DEFAULT_LATENCY_MS;
- GST_OBJECT_FLAG_SET (rdtmanager, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
-}
-
-static void
-gst_rdt_manager_finalize (GObject * object)
-{
- GstRDTManager *rdtmanager;
-
- rdtmanager = GST_RDT_MANAGER (object);
-
- g_slist_foreach (rdtmanager->sessions, (GFunc) free_session, NULL);
- g_slist_free (rdtmanager->sessions);
- g_clear_object (&rdtmanager->provided_clock);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_rdt_manager_query_src (GstPad * pad, GstObject * parent, GstQuery * query)
-{
- GstRDTManager *rdtmanager;
- gboolean res;
-
- rdtmanager = GST_RDT_MANAGER (parent);
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_LATENCY:
- {
- GstClockTime latency;
-
- latency = rdtmanager->latency * GST_MSECOND;
-
- /* we pretend to be live with a 3 second latency */
- gst_query_set_latency (query, TRUE, latency, -1);
-
- GST_DEBUG_OBJECT (rdtmanager, "reporting %" GST_TIME_FORMAT " of latency",
- GST_TIME_ARGS (latency));
- res = TRUE;
- break;
- }
- default:
- res = gst_pad_query_default (pad, parent, query);
- break;
- }
- return res;
-}
-
-static gboolean
-gst_rdt_manager_src_activate_mode (GstPad * pad, GstObject * parent,
- GstPadMode mode, gboolean active)
-{
- gboolean result;
- GstRDTManager *rdtmanager;
- GstRDTManagerSession *session;
-
- session = gst_pad_get_element_private (pad);
- rdtmanager = session->dec;
-
- switch (mode) {
- case GST_PAD_MODE_PUSH:
- if (active) {
- /* allow data processing */
- JBUF_LOCK (session);
- GST_DEBUG_OBJECT (rdtmanager, "Enabling pop on queue");
- /* Mark as non flushing */
- session->srcresult = GST_FLOW_OK;
- gst_segment_init (&session->segment, GST_FORMAT_TIME);
- session->last_popped_seqnum = -1;
- session->last_out_time = -1;
- session->next_seqnum = -1;
- session->eos = FALSE;
- JBUF_UNLOCK (session);
-
- /* start pushing out buffers */
- GST_DEBUG_OBJECT (rdtmanager, "Starting task on srcpad");
- result =
- gst_pad_start_task (pad, (GstTaskFunction) gst_rdt_manager_loop,
- pad, NULL);
- } else {
- /* make sure all data processing stops ASAP */
- JBUF_LOCK (session);
- /* mark ourselves as flushing */
- session->srcresult = GST_FLOW_FLUSHING;
- GST_DEBUG_OBJECT (rdtmanager, "Disabling pop on queue");
- /* this unblocks any waiting pops on the src pad task */
- JBUF_SIGNAL (session);
- /* unlock clock, we just unschedule, the entry will be released by
- * the locking streaming thread. */
- if (session->clock_id)
- gst_clock_id_unschedule (session->clock_id);
- JBUF_UNLOCK (session);
-
- /* NOTE this will hardlock if the state change is called from the src pad
- * task thread because we will _join() the thread. */
- GST_DEBUG_OBJECT (rdtmanager, "Stopping task on srcpad");
- result = gst_pad_stop_task (pad);
- }
- break;
- default:
- result = FALSE;
- break;
- }
- return result;
-}
-
-static GstFlowReturn
-gst_rdt_manager_handle_data_packet (GstRDTManagerSession * session,
- GstClockTime timestamp, GstRDTPacket * packet)
-{
- GstRDTManager *rdtmanager;
- guint16 seqnum;
- gboolean tail;
- GstFlowReturn res;
- GstBuffer *buffer;
-
- rdtmanager = session->dec;
-
- res = GST_FLOW_OK;
-
- seqnum = 0;
- GST_DEBUG_OBJECT (rdtmanager,
- "Received packet #%d at time %" GST_TIME_FORMAT, seqnum,
- GST_TIME_ARGS (timestamp));
-
- buffer = gst_rdt_packet_to_buffer (packet);
-
- JBUF_LOCK_CHECK (session, out_flushing);
-
- /* insert the packet into the queue now, FIXME, use seqnum */
- if (!rdt_jitter_buffer_insert (session->jbuf, buffer, timestamp,
- session->clock_rate, &tail))
- goto duplicate;
-
- /* signal addition of new buffer when the _loop is waiting. */
- if (session->waiting)
- JBUF_SIGNAL (session);
-
-finished:
- JBUF_UNLOCK (session);
-
- return res;
-
- /* ERRORS */
-out_flushing:
- {
- res = session->srcresult;
- GST_DEBUG_OBJECT (rdtmanager, "flushing %s", gst_flow_get_name (res));
- gst_buffer_unref (buffer);
- goto finished;
- }
-duplicate:
- {
- GST_WARNING_OBJECT (rdtmanager, "Duplicate packet #%d detected, dropping",
- seqnum);
- session->num_duplicates++;
- gst_buffer_unref (buffer);
- goto finished;
- }
-}
-
-static gboolean
-gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
- GstRDTManagerSession * session, GstCaps * caps)
-{
- GstStructure *caps_struct;
- guint val;
-
- /* first parse the caps */
- caps_struct = gst_caps_get_structure (caps, 0);
-
- GST_DEBUG_OBJECT (rdtmanager, "got caps");
-
- /* we need a clock-rate to convert the rtp timestamps to GStreamer time and to
- * measure the amount of data in the buffer */
- if (!gst_structure_get_int (caps_struct, "clock-rate", &session->clock_rate))
- session->clock_rate = 1000;
-
- if (session->clock_rate <= 0)
- goto wrong_rate;
-
- GST_DEBUG_OBJECT (rdtmanager, "got clock-rate %d", session->clock_rate);
-
- /* gah, clock-base is uint. If we don't have a base, we will use the first
- * buffer timestamp as the base time. This will screw up sync but it's better
- * than nothing. */
- if (gst_structure_get_uint (caps_struct, "clock-base", &val))
- session->clock_base = val;
- else
- session->clock_base = -1;
-
- GST_DEBUG_OBJECT (rdtmanager, "got clock-base %" G_GINT64_FORMAT,
- session->clock_base);
-
- /* first expected seqnum */
- if (gst_structure_get_uint (caps_struct, "seqnum-base", &val))
- session->next_seqnum = val;
- else
- session->next_seqnum = -1;
-
- GST_DEBUG_OBJECT (rdtmanager, "got seqnum-base %d", session->next_seqnum);
-
- return TRUE;
-
- /* ERRORS */
-wrong_rate:
- {
- GST_DEBUG_OBJECT (rdtmanager, "Invalid clock-rate %d", session->clock_rate);
- return FALSE;
- }
-}
-
-static gboolean
-gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstRDTManager *rdtmanager;
- GstRDTManagerSession *session;
- gboolean res;
-
- rdtmanager = GST_RDT_MANAGER (parent);
- /* find session */
- session = gst_pad_get_element_private (pad);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_CAPS:
- {
- GstCaps *caps;
-
- gst_event_parse_caps (event, &caps);
- res = gst_rdt_manager_parse_caps (rdtmanager, session, caps);
- gst_event_unref (event);
- break;
- }
- default:
- res = gst_pad_event_default (pad, parent, event);
- break;
- }
- return res;
-}
-
-static GstFlowReturn
-gst_rdt_manager_chain_rdt (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
- GstFlowReturn res;
- GstRDTManager *rdtmanager;
- GstRDTManagerSession *session;
- GstClockTime timestamp;
- GstRDTPacket packet;
- guint32 ssrc;
- guint8 pt;
- gboolean more;
-
- rdtmanager = GST_RDT_MANAGER (parent);
-
- GST_DEBUG_OBJECT (rdtmanager, "got RDT packet");
-
- ssrc = 0;
- pt = 0;
-
- GST_DEBUG_OBJECT (rdtmanager, "SSRC %08x, PT %d", ssrc, pt);
-
- /* find session */
- session = gst_pad_get_element_private (pad);
-
- /* see if we have the pad */
- if (!session->active) {
- activate_session (rdtmanager, session, ssrc, pt);
- session->active = TRUE;
- }
-
- if (GST_BUFFER_IS_DISCONT (buffer)) {
- GST_DEBUG_OBJECT (rdtmanager, "received discont");
- session->discont = TRUE;
- }
-
- res = GST_FLOW_OK;
-
- /* take the timestamp of the buffer. This is the time when the packet was
- * received and is used to calculate jitter and clock skew. We will adjust
- * this timestamp with the smoothed value after processing it in the
- * jitterbuffer. */
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
- /* bring to running time */
- timestamp = gst_segment_to_running_time (&session->segment, GST_FORMAT_TIME,
- timestamp);
-
- more = gst_rdt_buffer_get_first_packet (buffer, &packet);
- while (more) {
- GstRDTType type;
-
- type = gst_rdt_packet_get_type (&packet);
- GST_DEBUG_OBJECT (rdtmanager, "Have packet of type %04x", type);
-
- if (GST_RDT_IS_DATA_TYPE (type)) {
- GST_DEBUG_OBJECT (rdtmanager, "We have a data packet");
- res = gst_rdt_manager_handle_data_packet (session, timestamp, &packet);
- } else {
- switch (type) {
- default:
- GST_DEBUG_OBJECT (rdtmanager, "Ignoring packet");
- break;
- }
- }
- if (res != GST_FLOW_OK)
- break;
-
- more = gst_rdt_packet_move_to_next (&packet);
- }
-
- gst_buffer_unref (buffer);
-
- return res;
-}
-
-/* push packets from the queue to the downstream demuxer */
-static void
-gst_rdt_manager_loop (GstPad * pad)
-{
- GstRDTManager *rdtmanager;
- GstRDTManagerSession *session;
- GstBuffer *buffer;
- GstFlowReturn result;
-
- rdtmanager = GST_RDT_MANAGER (GST_PAD_PARENT (pad));
-
- session = gst_pad_get_element_private (pad);
-
- JBUF_LOCK_CHECK (session, flushing);
- GST_DEBUG_OBJECT (rdtmanager, "Peeking item");
- while (TRUE) {
- /* always wait if we are blocked */
- if (!session->blocked) {
- /* if we have a packet, we can exit the loop and grab it */
- if (rdt_jitter_buffer_num_packets (session->jbuf) > 0)
- break;
- /* no packets but we are EOS, do eos logic */
- if (session->eos)
- goto do_eos;
- }
- /* underrun, wait for packets or flushing now */
- session->waiting = TRUE;
- JBUF_WAIT_CHECK (session, flushing);
- session->waiting = FALSE;
- }
-
- buffer = rdt_jitter_buffer_pop (session->jbuf);
-
- GST_DEBUG_OBJECT (rdtmanager, "Got item %p", buffer);
-
- if (session->discont) {
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
- session->discont = FALSE;
- }
-
- JBUF_UNLOCK (session);
-
- result = gst_pad_push (session->recv_rtp_src, buffer);
- if (result != GST_FLOW_OK)
- goto pause;
-
- return;
-
- /* ERRORS */
-flushing:
- {
- GST_DEBUG_OBJECT (rdtmanager, "we are flushing");
- gst_pad_pause_task (session->recv_rtp_src);
- JBUF_UNLOCK (session);
- return;
- }
-do_eos:
- {
- /* store result, we are flushing now */
- GST_DEBUG_OBJECT (rdtmanager, "We are EOS, pushing EOS downstream");
- session->srcresult = GST_FLOW_EOS;
- gst_pad_pause_task (session->recv_rtp_src);
- gst_pad_push_event (session->recv_rtp_src, gst_event_new_eos ());
- JBUF_UNLOCK (session);
- return;
- }
-pause:
- {
- GST_DEBUG_OBJECT (rdtmanager, "pausing task, reason %s",
- gst_flow_get_name (result));
-
- JBUF_LOCK (session);
- /* store result */
- session->srcresult = result;
- /* we don't post errors or anything because upstream will do that for us
- * when we pass the return value upstream. */
- gst_pad_pause_task (session->recv_rtp_src);
- JBUF_UNLOCK (session);
- return;
- }
-}
-
-static GstFlowReturn
-gst_rdt_manager_chain_rtcp (GstPad * pad, GstObject * parent,
- GstBuffer * buffer)
-{
- GstRDTManager *src;
-
-#ifdef HAVE_RTCP
- gboolean valid;
- GstRTCPPacket packet;
- gboolean more;
-#endif
-
- src = GST_RDT_MANAGER (parent);
-
- GST_DEBUG_OBJECT (src, "got rtcp packet");
-
-#ifdef HAVE_RTCP
- valid = gst_rtcp_buffer_validate (buffer);
- if (!valid)
- goto bad_packet;
-
- /* position on first packet */
- more = gst_rtcp_buffer_get_first_packet (buffer, &packet);
- while (more) {
- switch (gst_rtcp_packet_get_type (&packet)) {
- case GST_RTCP_TYPE_SR:
- {
- guint32 ssrc, rtptime, packet_count, octet_count;
- guint64 ntptime;
- guint count, i;
-
- gst_rtcp_packet_sr_get_sender_info (&packet, &ssrc, &ntptime, &rtptime,
- &packet_count, &octet_count);
-
- GST_DEBUG_OBJECT (src,
- "got SR packet: SSRC %08x, NTP %" G_GUINT64_FORMAT
- ", RTP %u, PC %u, OC %u", ssrc, ntptime, rtptime, packet_count,
- octet_count);
-
- count = gst_rtcp_packet_get_rb_count (&packet);
- for (i = 0; i < count; i++) {
- guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
- guint8 fractionlost;
- gint32 packetslost;
-
- gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
- &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
-
- GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
- ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
- packetslost, exthighestseq, jitter, lsr, dlsr);
- }
- break;
- }
- case GST_RTCP_TYPE_RR:
- {
- guint32 ssrc;
- guint count, i;
-
- ssrc = gst_rtcp_packet_rr_get_ssrc (&packet);
-
- GST_DEBUG_OBJECT (src, "got RR packet: SSRC %08x", ssrc);
-
- count = gst_rtcp_packet_get_rb_count (&packet);
- for (i = 0; i < count; i++) {
- guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
- guint8 fractionlost;
- gint32 packetslost;
-
- gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
- &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
-
- GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
- ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
- packetslost, exthighestseq, jitter, lsr, dlsr);
- }
- break;
- }
- case GST_RTCP_TYPE_SDES:
- {
- guint chunks, i, j;
- gboolean more_chunks, more_items;
-
- chunks = gst_rtcp_packet_sdes_get_chunk_count (&packet);
- GST_DEBUG_OBJECT (src, "got SDES packet with %d chunks", chunks);
-
- more_chunks = gst_rtcp_packet_sdes_first_chunk (&packet);
- i = 0;
- while (more_chunks) {
- guint32 ssrc;
-
- ssrc = gst_rtcp_packet_sdes_get_ssrc (&packet);
-
- GST_DEBUG_OBJECT (src, "chunk %d, SSRC %08x", i, ssrc);
-
- more_items = gst_rtcp_packet_sdes_first_item (&packet);
- j = 0;
- while (more_items) {
- GstRTCPSDESType type;
- guint8 len;
- gchar *data;
-
- gst_rtcp_packet_sdes_get_item (&packet, &type, &len, &data);
-
- GST_DEBUG_OBJECT (src, "item %d, type %d, len %d, data %s", j,
- type, len, data);
-
- more_items = gst_rtcp_packet_sdes_next_item (&packet);
- j++;
- }
- more_chunks = gst_rtcp_packet_sdes_next_chunk (&packet);
- i++;
- }
- break;
- }
- case GST_RTCP_TYPE_BYE:
- {
- guint count, i;
- gchar *reason;
-
- reason = gst_rtcp_packet_bye_get_reason (&packet);
- GST_DEBUG_OBJECT (src, "got BYE packet (reason: %s)",
- GST_STR_NULL (reason));
- g_free (reason);
-
- count = gst_rtcp_packet_bye_get_ssrc_count (&packet);
- for (i = 0; i < count; i++) {
- guint32 ssrc;
-
-
- ssrc = gst_rtcp_packet_bye_get_nth_ssrc (&packet, i);
-
- GST_DEBUG_OBJECT (src, "SSRC: %08x", ssrc);
- }
- break;
- }
- case GST_RTCP_TYPE_APP:
- GST_DEBUG_OBJECT (src, "got APP packet");
- break;
- default:
- GST_WARNING_OBJECT (src, "got unknown RTCP packet");
- break;
- }
- more = gst_rtcp_packet_move_to_next (&packet);
- }
- gst_buffer_unref (buffer);
- return GST_FLOW_OK;
-
-bad_packet:
- {
- GST_WARNING_OBJECT (src, "got invalid RTCP packet");
- return GST_FLOW_OK;
- }
-#else
- return GST_FLOW_OK;
-#endif
-}
-
-static void
-gst_rdt_manager_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstRDTManager *src;
-
- src = GST_RDT_MANAGER (object);
-
- switch (prop_id) {
- case PROP_LATENCY:
- src->latency = g_value_get_uint (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_rdt_manager_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstRDTManager *src;
-
- src = GST_RDT_MANAGER (object);
-
- switch (prop_id) {
- case PROP_LATENCY:
- g_value_set_uint (value, src->latency);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstClock *
-gst_rdt_manager_provide_clock (GstElement * element)
-{
- GstRDTManager *rdtmanager;
-
- rdtmanager = GST_RDT_MANAGER (element);
-
- return GST_CLOCK_CAST (gst_object_ref (rdtmanager->provided_clock));
-}
-
-static GstStateChangeReturn
-gst_rdt_manager_change_state (GstElement * element, GstStateChange transition)
-{
- GstStateChangeReturn ret;
-
- switch (transition) {
- default:
- break;
- }
-
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- /* we're NO_PREROLL when going to PAUSED */
- ret = GST_STATE_CHANGE_NO_PREROLL;
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-/* Create a pad for receiving RTP for the session in @name
- */
-static GstPad *
-create_recv_rtp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
- const gchar * name)
-{
- guint sessid;
- GstRDTManagerSession *session;
-
- /* first get the session number */
- if (name == NULL || sscanf (name, "recv_rtp_sink_%u", &sessid) != 1)
- goto no_name;
-
- GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
-
- /* get or create session */
- session = find_session_by_id (rdtmanager, sessid);
- if (!session) {
- GST_DEBUG_OBJECT (rdtmanager, "creating session %d", sessid);
- /* create session now */
- session = create_session (rdtmanager, sessid);
- if (session == NULL)
- goto create_error;
- }
- /* check if pad was requested */
- if (session->recv_rtp_sink != NULL)
- goto existed;
-
- GST_DEBUG_OBJECT (rdtmanager, "getting RTP sink pad");
-
- session->recv_rtp_sink = gst_pad_new_from_template (templ, name);
- gst_pad_set_element_private (session->recv_rtp_sink, session);
- gst_pad_set_event_function (session->recv_rtp_sink,
- gst_rdt_manager_event_rdt);
- gst_pad_set_chain_function (session->recv_rtp_sink,
- gst_rdt_manager_chain_rdt);
- gst_pad_set_active (session->recv_rtp_sink, TRUE);
- gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_sink);
-
- return session->recv_rtp_sink;
-
- /* ERRORS */
-no_name:
- {
- g_warning ("rdtmanager: invalid name given");
- return NULL;
- }
-create_error:
- {
- /* create_session already warned */
- return NULL;
- }
-existed:
- {
- g_warning ("rdtmanager: recv_rtp pad already requested for session %d",
- sessid);
- return NULL;
- }
-}
-
-/* Create a pad for receiving RTCP for the session in @name
- */
-static GstPad *
-create_recv_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
- const gchar * name)
-{
- guint sessid;
- GstRDTManagerSession *session;
-
- /* first get the session number */
- if (name == NULL || sscanf (name, "recv_rtcp_sink_%u", &sessid) != 1)
- goto no_name;
-
- GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
-
- /* get the session, it must exist or we error */
- session = find_session_by_id (rdtmanager, sessid);
- if (!session)
- goto no_session;
-
- /* check if pad was requested */
- if (session->recv_rtcp_sink != NULL)
- goto existed;
-
- GST_DEBUG_OBJECT (rdtmanager, "getting RTCP sink pad");
-
- session->recv_rtcp_sink = gst_pad_new_from_template (templ, name);
- gst_pad_set_element_private (session->recv_rtp_sink, session);
- gst_pad_set_chain_function (session->recv_rtcp_sink,
- gst_rdt_manager_chain_rtcp);
- gst_pad_set_active (session->recv_rtcp_sink, TRUE);
- gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtcp_sink);
-
- return session->recv_rtcp_sink;
-
- /* ERRORS */
-no_name:
- {
- g_warning ("rdtmanager: invalid name given");
- return NULL;
- }
-no_session:
- {
- g_warning ("rdtmanager: no session with id %d", sessid);
- return NULL;
- }
-existed:
- {
- g_warning ("rdtmanager: recv_rtcp pad already requested for session %d",
- sessid);
- return NULL;
- }
-}
-
-/* Create a pad for sending RTCP for the session in @name
- */
-static GstPad *
-create_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
- const gchar * name)
-{
- guint sessid;
- GstRDTManagerSession *session;
-
- /* first get the session number */
- if (name == NULL || sscanf (name, "rtcp_src_%u", &sessid) != 1)
- goto no_name;
-
- /* get or create session */
- session = find_session_by_id (rdtmanager, sessid);
- if (!session)
- goto no_session;
-
- /* check if pad was requested */
- if (session->rtcp_src != NULL)
- goto existed;
-
- session->rtcp_src = gst_pad_new_from_template (templ, name);
- gst_pad_set_active (session->rtcp_src, TRUE);
- gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->rtcp_src);
-
- return session->rtcp_src;
-
- /* ERRORS */
-no_name:
- {
- g_warning ("rdtmanager: invalid name given");
- return NULL;
- }
-no_session:
- {
- g_warning ("rdtmanager: session with id %d does not exist", sessid);
- return NULL;
- }
-existed:
- {
- g_warning ("rdtmanager: rtcp_src pad already requested for session %d",
- sessid);
- return NULL;
- }
-}
-
-/*
- */
-static GstPad *
-gst_rdt_manager_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
-{
- GstRDTManager *rdtmanager;
- GstElementClass *klass;
- GstPad *result;
-
- g_return_val_if_fail (templ != NULL, NULL);
- g_return_val_if_fail (GST_IS_RDT_MANAGER (element), NULL);
-
- rdtmanager = GST_RDT_MANAGER (element);
- klass = GST_ELEMENT_GET_CLASS (element);
-
- /* figure out the template */
- if (templ == gst_element_class_get_pad_template (klass, "recv_rtp_sink_%u")) {
- result = create_recv_rtp (rdtmanager, templ, name);
- } else if (templ == gst_element_class_get_pad_template (klass,
- "recv_rtcp_sink_%u")) {
- result = create_recv_rtcp (rdtmanager, templ, name);
- } else if (templ == gst_element_class_get_pad_template (klass, "rtcp_src_%u")) {
- result = create_rtcp (rdtmanager, templ, name);
- } else
- goto wrong_template;
-
- return result;
-
- /* ERRORS */
-wrong_template:
- {
- g_warning ("rdtmanager: this is not our template");
- return NULL;
- }
-}
-
-static void
-gst_rdt_manager_release_pad (GstElement * element, GstPad * pad)
-{
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef __GST_RDT_MANAGER_H__
-#define __GST_RDT_MANAGER_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RDT_MANAGER (gst_rdt_manager_get_type())
-#define GST_IS_RDT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_MANAGER))
-#define GST_IS_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_MANAGER))
-#define GST_RDT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_MANAGER, GstRDTManager))
-#define GST_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_MANAGER, GstRDTManagerClass))
-
-typedef struct _GstRDTManager GstRDTManager;
-typedef struct _GstRDTManagerClass GstRDTManagerClass;
-typedef struct _GstRDTManagerSession GstRDTManagerSession;
-
-struct _GstRDTManager {
- GstElement element;
-
- guint latency;
- GSList *sessions;
- GstClock *provided_clock;
-};
-
-struct _GstRDTManagerClass {
- GstElementClass parent_class;
-
- /* get the caps for pt */
- GstCaps* (*request_pt_map) (GstRDTManager *rtpdec, guint session, guint pt);
-
- void (*clear_pt_map) (GstRDTManager *rtpdec);
-
- void (*on_new_ssrc) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_ssrc_collision) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_ssrc_validated) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_ssrc_active) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_ssrc_sdes) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_bye_ssrc) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_bye_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
- void (*on_npt_stop) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-};
-
-GType gst_rdt_manager_get_type(void);
-
-GST_ELEMENT_REGISTER_DECLARE (rdtmanager);
-
-G_END_DECLS
-
-#endif /* __GST_RDT_MANAGER_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/* Element-Checklist-Version: 5 */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <string.h>
-
-#include <gst/gst.h>
-
-#include "realhash.h"
-
-void rtsp_ext_real_calc_response_and_checksum (char *response,
- char *chksum, char *challenge);
-
-/*
- * The following code has been copied from
- * xine-lib-1.1.1/src/input/libreal/real.c.
- */
-
-static const unsigned char xor_table[] = {
- 0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
- 0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
- 0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
- 0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
- 0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00
-};
-
-#define LE_32(x) GST_READ_UINT32_LE(x)
-#define BE_32C(x,y) GST_WRITE_UINT32_BE(x,y)
-#define LE_32C(x,y) GST_WRITE_UINT32_LE(x,y)
-
-static void
-hash (char *field, char *param)
-{
- uint32_t a, b, c, d;
-
- /* fill variables */
- a = LE_32 (field);
- b = LE_32 (field + 4);
- c = LE_32 (field + 8);
- d = LE_32 (field + 12);
-
- a = ((b & c) | (~b & d)) + LE_32 ((param + 0x00)) + a - 0x28955B88;
- a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32 ((param + 0x04)) + d - 0x173848AA;
- d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32 ((param + 0x08)) + c + 0x242070DB;
- c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32 ((param + 0x0c)) + b - 0x3E423112;
- b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32 ((param + 0x10)) + a - 0x0A83F051;
- a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32 ((param + 0x14)) + d + 0x4787C62A;
- d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32 ((param + 0x18)) + c - 0x57CFB9ED;
- c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32 ((param + 0x1c)) + b - 0x02B96AFF;
- b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32 ((param + 0x20)) + a + 0x698098D8;
- a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32 ((param + 0x24)) + d - 0x74BB0851;
- d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32 ((param + 0x28)) + c - 0x0000A44F;
- c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32 ((param + 0x2C)) + b - 0x76A32842;
- b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32 ((param + 0x30)) + a + 0x6B901122;
- a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32 ((param + 0x34)) + d - 0x02678E6D;
- d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32 ((param + 0x38)) + c - 0x5986BC72;
- c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32 ((param + 0x3c)) + b + 0x49B40821;
- b = ((b << 0x16) | (b >> 0x0a)) + c;
-
- a = ((b & d) | (~d & c)) + LE_32 ((param + 0x04)) + a - 0x09E1DA9E;
- a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32 ((param + 0x18)) + d - 0x3FBF4CC0;
- d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32 ((param + 0x2c)) + c + 0x265E5A51;
- c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32 ((param + 0x00)) + b - 0x16493856;
- b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32 ((param + 0x14)) + a - 0x29D0EFA3;
- a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32 ((param + 0x28)) + d + 0x02441453;
- d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32 ((param + 0x3c)) + c - 0x275E197F;
- c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32 ((param + 0x10)) + b - 0x182C0438;
- b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32 ((param + 0x24)) + a + 0x21E1CDE6;
- a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32 ((param + 0x38)) + d - 0x3CC8F82A;
- d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32 ((param + 0x0c)) + c - 0x0B2AF279;
- c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32 ((param + 0x20)) + b + 0x455A14ED;
- b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32 ((param + 0x34)) + a - 0x561C16FB;
- a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32 ((param + 0x08)) + d - 0x03105C08;
- d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32 ((param + 0x1c)) + c + 0x676F02D9;
- c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32 ((param + 0x30)) + b - 0x72D5B376;
- b = ((b << 0x14) | (b >> 0x0c)) + c;
-
- a = (b ^ c ^ d) + LE_32 ((param + 0x14)) + a - 0x0005C6BE;
- a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32 ((param + 0x20)) + d - 0x788E097F;
- d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32 ((param + 0x2c)) + c + 0x6D9D6122;
- c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32 ((param + 0x38)) + b - 0x021AC7F4;
- b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32 ((param + 0x04)) + a - 0x5B4115BC;
- a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32 ((param + 0x10)) + d + 0x4BDECFA9;
- d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32 ((param + 0x1c)) + c - 0x0944B4A0;
- c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32 ((param + 0x28)) + b - 0x41404390;
- b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32 ((param + 0x34)) + a + 0x289B7EC6;
- a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32 ((param + 0x00)) + d - 0x155ED806;
- d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32 ((param + 0x0c)) + c - 0x2B10CF7B;
- c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32 ((param + 0x18)) + b + 0x04881D05;
- b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32 ((param + 0x24)) + a - 0x262B2FC7;
- a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32 ((param + 0x30)) + d - 0x1924661B;
- d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32 ((param + 0x3c)) + c + 0x1fa27cf8;
- c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32 ((param + 0x08)) + b - 0x3B53A99B;
- b = ((b << 0x17) | (b >> 0x09)) + c;
-
- a = ((~d | b) ^ c) + LE_32 ((param + 0x00)) + a - 0x0BD6DDBC;
- a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32 ((param + 0x1c)) + d + 0x432AFF97;
- d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32 ((param + 0x38)) + c - 0x546BDC59;
- c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32 ((param + 0x14)) + b - 0x036C5FC7;
- b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32 ((param + 0x30)) + a + 0x655B59C3;
- a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32 ((param + 0x0C)) + d - 0x70F3336E;
- d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32 ((param + 0x28)) + c - 0x00100B83;
- c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32 ((param + 0x04)) + b - 0x7A7BA22F;
- b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32 ((param + 0x20)) + a + 0x6FA87E4F;
- a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32 ((param + 0x3c)) + d - 0x01D31920;
- d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32 ((param + 0x18)) + c - 0x5CFEBCEC;
- c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32 ((param + 0x34)) + b + 0x4E0811A1;
- b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32 ((param + 0x10)) + a - 0x08AC817E;
- a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32 ((param + 0x2c)) + d - 0x42C50DCB;
- d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32 ((param + 0x08)) + c + 0x2AD7D2BB;
- c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32 ((param + 0x24)) + b - 0x14792C6F;
- b = ((b << 0x15) | (b >> 0x0b)) + c;
-
- a += LE_32 (field);
- b += LE_32 (field + 4);
- c += LE_32 (field + 8);
- d += LE_32 (field + 12);
-
- LE_32C (field, a);
- LE_32C (field + 4, b);
- LE_32C (field + 8, c);
- LE_32C (field + 12, d);
-}
-
-static void
-call_hash (char *key, char *challenge, int len)
-{
- uint8_t *ptr1, *ptr2;
- uint32_t a, b, c, d, tmp;
-
- ptr1 = (uint8_t *) (key + 16);
- ptr2 = (uint8_t *) (key + 20);
-
- a = LE_32 (ptr1);
- b = (a >> 3) & 0x3f;
- a += len * 8;
- LE_32C (ptr1, a);
-
- if (a < (len << 3))
- ptr2 += 4;
-
- tmp = LE_32 (ptr2) + (len >> 0x1d);
- LE_32C (ptr2, tmp);
- a = 64 - b;
- c = 0;
- if (a <= len) {
-
- memcpy (key + b + 24, challenge, a);
- hash (key, key + 24);
- c = a;
- d = c + 0x3f;
-
- while (d < len) {
- hash (key, challenge + d - 0x3f);
- d += 64;
- c += 64;
- }
- b = 0;
- }
-
- memcpy (key + b + 24, challenge + c, len - c);
-}
-
-void
-gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
- char *challenge)
-{
- int ch_len, table_len, resp_len;
- int i;
- char *ptr;
- char buf[128];
- char field[128];
- char zres[20];
- char buf1[128];
- char buf2[128];
-
- /* initialize return values */
- memset (response, 0, 64);
- memset (chksum, 0, 34);
-
- /* initialize buffer */
- memset (buf, 0, 128);
- ptr = buf;
- BE_32C (ptr, 0xa1e9149d);
- ptr += 4;
- BE_32C (ptr, 0x0e6b3b59);
- ptr += 4;
-
- if ((ch_len = MIN (strlen (challenge), 56)) == 40) {
- challenge[32] = 0;
- ch_len = 32;
- }
- memcpy (ptr, challenge, ch_len);
-
- /* xor challenge bytewise with xor_table */
- table_len = MIN (strlen ((char *) xor_table), 56);
- for (i = 0; i < table_len; i++)
- ptr[i] = ptr[i] ^ xor_table[i];
-
- /* initialize our field */
- BE_32C (field, 0x01234567);
- BE_32C (field + 4, 0x89ABCDEF);
- BE_32C (field + 8, 0xFEDCBA98);
- BE_32C (field + 12, 0x76543210);
- BE_32C (field + 16, 0x00000000);
- BE_32C (field + 20, 0x00000000);
-
- /* calculate response */
- call_hash (field, buf, 64);
- memset (buf1, 0, 64);
- *buf1 = (char) 128;
- memcpy (buf2, field + 16, 8);
- i = (LE_32 ((buf2)) >> 3) & 0x3f;
- if (i < 56)
- i = 56 - i;
- else
- i = 120 - i;
- call_hash (field, buf1, i);
- call_hash (field, buf2, 8);
- memcpy (zres, field, 16);
-
- /* convert zres to ascii string */
- for (i = 0; i < 16; i++) {
- char a, b;
-
- a = (zres[i] >> 4) & 15;
- b = zres[i] & 15;
-
- response[i * 2] = ((a < 10) ? (a + 48) : (a + 87)) & 255;
- response[i * 2 + 1] = ((b < 10) ? (b + 48) : (b + 87)) & 255;
- }
-
- /* add tail */
- resp_len = strlen (response);
- strcpy (&response[resp_len], "01d0a8e3");
-
- /* calculate checksum */
- for (i = 0; i < resp_len / 4; i++)
- chksum[i] = response[i * 4];
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTSP_HASH_H__
-#define __GST_RTSP_HASH_H__
-
-G_BEGIN_DECLS
-
-void
-gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
- char *challenge);
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_HASH_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "rmdemux.h"
-#include "rademux.h"
-#include "rdtdepay.h"
-#include "rdtmanager.h"
-#include "rtspreal.h"
-#include "pnmsrc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gboolean ret = FALSE;
-
- ret |= GST_ELEMENT_REGISTER (rmdemux, plugin);
- ret |= GST_ELEMENT_REGISTER (rademux, plugin);
- ret |= GST_ELEMENT_REGISTER (rdtdepay, plugin);
- ret |= GST_ELEMENT_REGISTER (rdtmanager, plugin);
- ret |= GST_ELEMENT_REGISTER (rtspreal, plugin);
- ret |= GST_ELEMENT_REGISTER (pnmsrc, plugin);
-
- return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- realmedia,
- "RealMedia support plugins",
- plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-/* GStreamer RealMedia demuxer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
- * Copyright (C) <2004> Stephane Loeuillet <gstreamer@leroutier.net>
- * Copyright (C) <2005> Owen Fraser-Green <owen@discobabe.net>
- * Copyright (C) <2005> Michael Smith <fluendo.com>
- * Copyright (C) <2006> Wim Taymans <wim@fluendo.com>
- * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "rmdemux.h"
-#include "rmutils.h"
-
-#include <string.h>
-#include <ctype.h>
-
-#define RMDEMUX_GUINT32_GET(a) GST_READ_UINT32_BE(a)
-#define RMDEMUX_GUINT16_GET(a) GST_READ_UINT16_BE(a)
-#define RMDEMUX_FOURCC_GET(a) GST_READ_UINT32_LE(a)
-#define HEADER_SIZE 10
-#define DATA_SIZE 8
-
-#define MAX_FRAGS 256
-
-static const guint8 sipr_subpk_size[4] = { 29, 19, 37, 20 };
-
-typedef struct _GstRMDemuxIndex GstRMDemuxIndex;
-
-struct _GstRMDemuxStream
-{
- guint32 subtype;
- guint32 fourcc;
- guint32 subformat;
- guint32 format;
-
- int id;
- GstPad *pad;
- gboolean discont;
- int timescale;
-
- int sample_index;
- GstRMDemuxIndex *index;
- int index_length;
- gint framerate_numerator;
- gint framerate_denominator;
- guint32 seek_offset;
-
- guint16 width;
- guint16 height;
- guint16 flavor;
- guint16 rate; /* samplerate */
- guint16 n_channels; /* channels */
- guint16 sample_width; /* bits_per_sample */
- guint16 leaf_size; /* subpacket_size */
- guint32 packet_size; /* coded_frame_size */
- guint16 version;
- guint32 extra_data_size; /* codec_data_length */
- guint8 *extra_data; /* extras */
- guint32 bitrate;
-
- gboolean needs_descrambling;
- guint subpackets_needed; /* subpackets needed for descrambling */
- GPtrArray *subpackets; /* array containing subpacket GstBuffers */
-
- /* Variables needed for fixing timestamps. */
- GstClockTime next_ts, last_ts;
- guint16 next_seq, last_seq;
-
- gint frag_seqnum;
- gint frag_subseq;
- guint frag_length;
- guint frag_current;
- guint frag_count;
- guint frag_offset[MAX_FRAGS];
- GstAdapter *adapter;
-
- GstTagList *pending_tags;
-};
-
-struct _GstRMDemuxIndex
-{
- guint32 offset;
- GstClockTime timestamp;
-};
-
-static GstStaticPadTemplate gst_rmdemux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/vnd.rn-realmedia")
- );
-
-static GstStaticPadTemplate gst_rmdemux_videosrc_template =
-GST_STATIC_PAD_TEMPLATE ("video_%u",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate gst_rmdemux_audiosrc_template =
-GST_STATIC_PAD_TEMPLATE ("audio_%u",
- GST_PAD_SRC,
- GST_PAD_SOMETIMES,
- GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (rmdemux_debug);
-#define GST_CAT_DEFAULT rmdemux_debug
-
-static GstElementClass *parent_class = NULL;
-
-static void gst_rmdemux_class_init (GstRMDemuxClass * klass);
-static void gst_rmdemux_base_init (GstRMDemuxClass * klass);
-static void gst_rmdemux_init (GstRMDemux * rmdemux);
-static void gst_rmdemux_finalize (GObject * object);
-static GstStateChangeReturn gst_rmdemux_change_state (GstElement * element,
- GstStateChange transition);
-static GstFlowReturn gst_rmdemux_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-static void gst_rmdemux_loop (GstPad * pad);
-static gboolean gst_rmdemux_sink_activate (GstPad * sinkpad,
- GstObject * parent);
-static gboolean gst_rmdemux_sink_activate_mode (GstPad * sinkpad,
- GstObject * parent, GstPadMode mode, gboolean active);
-static gboolean gst_rmdemux_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static gboolean gst_rmdemux_src_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static void gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event);
-static gboolean gst_rmdemux_src_query (GstPad * pad, GstObject * parent,
- GstQuery * query);
-static gboolean gst_rmdemux_perform_seek (GstRMDemux * rmdemux,
- GstEvent * event);
-
-static void gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data,
- int length);
-static void gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data,
- int length);
-static void gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux,
- const guint8 * data, int length);
-static guint gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data,
- int length);
-static void gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data,
- int length);
-static void gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data,
- int length);
-static GstFlowReturn gst_rmdemux_parse_packet (GstRMDemux * rmdemux,
- GstBuffer * in, guint16 version);
-static void gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux,
- const guint8 * data, int length);
-static void gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream);
-static GstRMDemuxStream *gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux,
- int id);
-
-static GType
-gst_rmdemux_get_type (void)
-{
- static GType rmdemux_type = 0;
-
- if (!rmdemux_type) {
- static const GTypeInfo rmdemux_info = {
- sizeof (GstRMDemuxClass),
- (GBaseInitFunc) gst_rmdemux_base_init, NULL,
- (GClassInitFunc) gst_rmdemux_class_init,
- NULL, NULL, sizeof (GstRMDemux), 0,
- (GInstanceInitFunc) gst_rmdemux_init,
- };
-
- rmdemux_type =
- g_type_register_static (GST_TYPE_ELEMENT, "GstRMDemux", &rmdemux_info,
- 0);
- }
- return rmdemux_type;
-}
-
-GST_ELEMENT_REGISTER_DEFINE (rmdemux, "rmdemux",
- GST_RANK_PRIMARY, GST_TYPE_RMDEMUX);
-
-static void
-gst_rmdemux_base_init (GstRMDemuxClass * klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_rmdemux_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rmdemux_videosrc_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rmdemux_audiosrc_template);
- gst_element_class_set_static_metadata (element_class, "RealMedia Demuxer",
- "Codec/Demuxer",
- "Demultiplex a RealMedia file into audio and video streams",
- "David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_rmdemux_class_init (GstRMDemuxClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rmdemux_change_state);
-
- GST_DEBUG_CATEGORY_INIT (rmdemux_debug, "rmdemux",
- 0, "Demuxer for Realmedia streams");
-
- gobject_class->finalize = gst_rmdemux_finalize;
-}
-
-static void
-gst_rmdemux_finalize (GObject * object)
-{
- GstRMDemux *rmdemux = GST_RMDEMUX (object);
-
- if (rmdemux->adapter) {
- g_object_unref (rmdemux->adapter);
- rmdemux->adapter = NULL;
- }
- if (rmdemux->flowcombiner) {
- gst_flow_combiner_free (rmdemux->flowcombiner);
- rmdemux->flowcombiner = NULL;
- }
-
- GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
-}
-
-static void
-gst_rmdemux_init (GstRMDemux * rmdemux)
-{
- rmdemux->sinkpad =
- gst_pad_new_from_static_template (&gst_rmdemux_sink_template, "sink");
- gst_pad_set_event_function (rmdemux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_sink_event));
- gst_pad_set_chain_function (rmdemux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_chain));
- gst_pad_set_activate_function (rmdemux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate));
- gst_pad_set_activatemode_function (rmdemux->sinkpad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate_mode));
-
- gst_element_add_pad (GST_ELEMENT (rmdemux), rmdemux->sinkpad);
-
- rmdemux->adapter = gst_adapter_new ();
- rmdemux->first_ts = GST_CLOCK_TIME_NONE;
- rmdemux->base_ts = GST_CLOCK_TIME_NONE;
- rmdemux->need_newsegment = TRUE;
- rmdemux->have_group_id = FALSE;
- rmdemux->group_id = G_MAXUINT;
- rmdemux->flowcombiner = gst_flow_combiner_new ();
- rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
-
- gst_rm_utils_run_tests ();
-}
-
-static gboolean
-gst_rmdemux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- gboolean ret;
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEGMENT:
- gst_event_unref (event);
- ret = TRUE;
- break;
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
- return ret;
-}
-
-static gboolean
-gst_rmdemux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- gboolean ret = TRUE;
-
- GstRMDemux *rmdemux = GST_RMDEMUX (parent);
-
- GST_LOG_OBJECT (rmdemux, "handling src event");
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEEK:
- {
- gboolean running;
- guint32 seqnum;
-
- GST_LOG_OBJECT (rmdemux, "Event on src: SEEK");
-
- seqnum = gst_event_get_seqnum (event);
- if (seqnum == rmdemux->seek_seqnum) {
- GST_LOG_OBJECT (pad,
- "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
- gst_event_unref (event);
- break;
- }
-
- /* can't seek if we are not seekable, FIXME could pass the
- * seek query upstream after converting it to bytes using
- * the average bitrate of the stream. */
- if (!rmdemux->seekable) {
- ret = FALSE;
- GST_DEBUG ("seek on non seekable stream");
- goto done_unref;
- }
-
- GST_OBJECT_LOCK (rmdemux);
- /* check if we can do the seek now */
- running = rmdemux->running;
- GST_OBJECT_UNLOCK (rmdemux);
-
- /* now do the seek */
- if (running) {
- ret = gst_rmdemux_perform_seek (rmdemux, event);
- } else
- ret = TRUE;
-
- gst_event_unref (event);
- break;
- }
- default:
- GST_LOG_OBJECT (rmdemux, "Event on src: type=%d", GST_EVENT_TYPE (event));
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-
-done_unref:
- GST_DEBUG ("error handling event");
- gst_event_unref (event);
- return ret;
-}
-
-/* Validate that this looks like a reasonable point to seek to */
-static gboolean
-gst_rmdemux_validate_offset (GstRMDemux * rmdemux)
-{
- GstBuffer *buffer;
- GstFlowReturn flowret;
- guint16 version, length;
- gboolean ret = TRUE;
- GstMapInfo map;
-
- buffer = NULL;
- flowret = gst_pad_pull_range (rmdemux->sinkpad, rmdemux->offset, 4, &buffer);
-
- if (flowret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (rmdemux, "Failed to pull data at offset %d",
- rmdemux->offset);
- return FALSE;
- }
- /* TODO: Can we also be seeking to a 'DATA' chunk header? Check this.
- * Also, for the case we currently handle, can we check any more? It's pretty
- * sucky to not be validating a little more heavily than this... */
- /* This should now be the start of a data packet header. That begins with
- * a 2-byte 'version' field, which has to be 0 or 1, then a length. I'm not
- * certain what values are valid for length, but it must always be at least
- * 4 bytes, and we can check that it won't take us past our known total size
- */
-
- gst_buffer_map (buffer, &map, GST_MAP_READ);
- version = RMDEMUX_GUINT16_GET (map.data);
- if (version != 0 && version != 1) {
- GST_DEBUG_OBJECT (rmdemux, "Expected version 0 or 1, got %d",
- (int) version);
- ret = FALSE;
- }
-
- length = RMDEMUX_GUINT16_GET (map.data + 2);
- /* TODO: Also check against total stream length */
- if (length < 4) {
- GST_DEBUG_OBJECT (rmdemux, "Expected length >= 4, got %d", (int) length);
- ret = FALSE;
- }
- gst_buffer_unmap (buffer, &map);
-
- if (ret) {
- rmdemux->offset += 4;
- gst_adapter_clear (rmdemux->adapter);
- gst_adapter_push (rmdemux->adapter, buffer);
- } else {
- GST_WARNING_OBJECT (rmdemux, "Failed to validate seek offset at %d",
- rmdemux->offset);
- gst_buffer_unref (buffer);
- }
-
- return ret;
-}
-
-static gboolean
-find_seek_offset_bytes (GstRMDemux * rmdemux, guint target)
-{
- int i;
- GSList *cur;
- gboolean ret = FALSE;
-
- for (cur = rmdemux->streams; cur; cur = cur->next) {
- GstRMDemuxStream *stream = cur->data;
-
- /* Search backwards through this stream's index until we find the first
- * timestamp before our target time */
- for (i = stream->index_length - 1; i >= 0; i--) {
- if (stream->index[i].offset <= target) {
- /* Set the seek_offset for the stream so we don't bother parsing it
- * until we've passed that point */
- stream->seek_offset = stream->index[i].offset;
- rmdemux->offset = stream->index[i].offset;
- ret = TRUE;
- break;
- }
- }
- }
- return ret;
-}
-
-static gboolean
-find_seek_offset_time (GstRMDemux * rmdemux, GstClockTime time)
-{
- int i, n_stream;
- gboolean ret = FALSE;
- GSList *cur;
- GstClockTime earliest = GST_CLOCK_TIME_NONE;
-
- n_stream = 0;
- for (cur = rmdemux->streams; cur; cur = cur->next, n_stream++) {
- GstRMDemuxStream *stream = cur->data;
-
- /* Search backwards through this stream's index until we find the first
- * timestamp before our target time */
- for (i = stream->index_length - 1; i >= 0; i--) {
- if (stream->index[i].timestamp <= time) {
- /* Set the seek_offset for the stream so we don't bother parsing it
- * until we've passed that point */
- stream->seek_offset = stream->index[i].offset;
-
- /* If it's also the earliest timestamp we've seen of all streams, then
- * that's our target!
- */
- if (earliest == GST_CLOCK_TIME_NONE ||
- stream->index[i].timestamp < earliest) {
- earliest = stream->index[i].timestamp;
- rmdemux->offset = stream->index[i].offset;
- GST_DEBUG_OBJECT (rmdemux,
- "We're looking for %" GST_TIME_FORMAT
- " and we found that stream %d has the latest index at %"
- GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start), n_stream,
- GST_TIME_ARGS (earliest));
- }
-
- ret = TRUE;
-
- break;
- }
- }
- stream->discont = TRUE;
- }
- return ret;
-}
-
-static gboolean
-gst_rmdemux_perform_seek (GstRMDemux * rmdemux, GstEvent * event)
-{
- gboolean validated;
- gboolean ret = TRUE;
- gboolean flush;
- GstFormat format;
- gdouble rate;
- GstSeekFlags flags;
- GstSeekType cur_type, stop_type;
- gint64 cur, stop;
- gboolean update;
- guint32 seqnum = GST_SEQNUM_INVALID;
- GstEvent *fl_event;
-
- if (event) {
- GST_DEBUG_OBJECT (rmdemux, "seek with event");
-
- seqnum = gst_event_get_seqnum (event);
- gst_event_parse_seek (event, &rate, &format, &flags,
- &cur_type, &cur, &stop_type, &stop);
-
- /* we can only seek on time */
- if (format != GST_FORMAT_TIME) {
- GST_DEBUG_OBJECT (rmdemux, "can only seek on TIME");
- goto error;
- }
- /* cannot yet do backwards playback */
- if (rate <= 0.0) {
- GST_DEBUG_OBJECT (rmdemux, "can only seek with positive rate, not %lf",
- rate);
- goto error;
- }
- } else {
- GST_DEBUG_OBJECT (rmdemux, "seek without event");
-
- flags = 0;
- rate = 1.0;
- }
-
- GST_DEBUG_OBJECT (rmdemux, "seek, rate %g", rate);
-
- flush = flags & GST_SEEK_FLAG_FLUSH;
-
- /* first step is to unlock the streaming thread if it is
- * blocked in a chain call, we do this by starting the flush. */
- if (flush) {
- fl_event = gst_event_new_flush_start ();
- if (seqnum != GST_SEQNUM_INVALID)
- gst_event_set_seqnum (fl_event, seqnum);
- gst_pad_push_event (rmdemux->sinkpad, fl_event);
-
- fl_event = gst_event_new_flush_start ();
- if (seqnum != GST_SEQNUM_INVALID)
- gst_event_set_seqnum (fl_event, seqnum);
- gst_rmdemux_send_event (rmdemux, fl_event);
- } else {
- gst_pad_pause_task (rmdemux->sinkpad);
- }
-
- GST_LOG_OBJECT (rmdemux, "Done starting flushes");
-
- /* now grab the stream lock so that streaming cannot continue, for
- * non flushing seeks when the element is in PAUSED this could block
- * forever. */
- GST_PAD_STREAM_LOCK (rmdemux->sinkpad);
-
- GST_LOG_OBJECT (rmdemux, "Took streamlock");
-
- if (event) {
- if (!gst_segment_do_seek (&rmdemux->segment, rate, format, flags,
- cur_type, cur, stop_type, stop, &update)) {
- ret = FALSE;
- goto done;
- }
-
- rmdemux->seek_seqnum = seqnum;
- }
-
- GST_DEBUG_OBJECT (rmdemux, "segment positions set to %" GST_TIME_FORMAT "-%"
- GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start),
- GST_TIME_ARGS (rmdemux->segment.stop));
-
- /* we need to stop flushing on the sinkpad as we're going to use it
- * next. We can do this as we have the STREAM lock now. */
- fl_event = gst_event_new_flush_stop (TRUE);
- if (seqnum != GST_SEQNUM_INVALID)
- gst_event_set_seqnum (fl_event, seqnum);
- gst_pad_push_event (rmdemux->sinkpad, fl_event);
-
- GST_LOG_OBJECT (rmdemux, "Pushed FLUSH_STOP event");
-
- /* For each stream, find the first index offset equal to or before our seek
- * target. Of these, find the smallest offset. That's where we seek to.
- *
- * Then we pull 4 bytes from that offset, and validate that we've seeked to a
- * what looks like a plausible packet.
- * If that fails, restart, with the seek target set to one less than the
- * offset we just tried. If we run out of places to try, treat that as a fatal
- * error.
- */
- if (!find_seek_offset_time (rmdemux, rmdemux->segment.position)) {
- GST_LOG_OBJECT (rmdemux, "Failed to find seek offset by time");
- ret = FALSE;
- goto done;
- }
-
- GST_LOG_OBJECT (rmdemux, "Validating offset %u", rmdemux->offset);
- validated = gst_rmdemux_validate_offset (rmdemux);
- while (!validated) {
- GST_INFO_OBJECT (rmdemux, "Failed to validate offset at %u",
- rmdemux->offset);
- if (!find_seek_offset_bytes (rmdemux, rmdemux->offset - 1)) {
- ret = FALSE;
- goto done;
- }
- validated = gst_rmdemux_validate_offset (rmdemux);
- }
-
- GST_LOG_OBJECT (rmdemux, "Found final offset. Excellent!");
-
- /* now we have a new position, prepare for streaming again */
- {
- /* Reset the demuxer state */
- rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
-
- if (flush) {
- fl_event = gst_event_new_flush_stop (TRUE);
- if (seqnum != GST_SEQNUM_INVALID)
- gst_event_set_seqnum (fl_event, seqnum);
- gst_rmdemux_send_event (rmdemux, fl_event);
- }
-
- /* must send newsegment event from streaming thread, so just set flag */
- rmdemux->need_newsegment = TRUE;
-
- /* notify start of new segment */
- if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- GstMessage *msg =
- gst_message_new_segment_start (GST_OBJECT_CAST (rmdemux),
- GST_FORMAT_TIME, rmdemux->segment.position);
- if (seqnum != GST_SEQNUM_INVALID)
- gst_message_set_seqnum (msg, seqnum);
- gst_element_post_message (GST_ELEMENT_CAST (rmdemux), msg);
- }
-
- /* restart our task since it might have been stopped when we did the
- * flush. */
- gst_pad_start_task (rmdemux->sinkpad, (GstTaskFunction) gst_rmdemux_loop,
- rmdemux->sinkpad, NULL);
- }
-
-done:
- /* streaming can continue now */
- GST_PAD_STREAM_UNLOCK (rmdemux->sinkpad);
-
- return ret;
-
-error:
- {
- GST_DEBUG_OBJECT (rmdemux, "seek failed");
- return FALSE;
- }
-}
-
-
-static gboolean
-gst_rmdemux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
- gboolean res = FALSE;
- GstRMDemux *rmdemux;
-
- rmdemux = GST_RMDEMUX (parent);
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_POSITION:
- GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
- break;
- case GST_QUERY_DURATION:{
- GstFormat fmt;
-
- gst_query_parse_duration (query, &fmt, NULL);
- if (fmt == GST_FORMAT_TIME) {
- GST_OBJECT_LOCK (rmdemux);
- if (G_LIKELY (rmdemux->running)) {
- gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
- GST_DEBUG_OBJECT (rmdemux, "duration set to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (rmdemux->duration));
- res = TRUE;
- }
- GST_OBJECT_UNLOCK (rmdemux);
- }
- break;
- }
- case GST_QUERY_SEEKING:{
- GstFormat fmt;
-
- gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
- if (fmt == GST_FORMAT_TIME) {
- GST_OBJECT_LOCK (rmdemux);
- if (G_LIKELY (rmdemux->running)) {
- gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable,
- 0, rmdemux->duration);
- res = TRUE;
- }
- GST_OBJECT_UNLOCK (rmdemux);
- }
- break;
- }
- case GST_QUERY_SEGMENT:
- {
- GstFormat format;
- gint64 start, stop;
-
- format = rmdemux->segment.format;
-
- start =
- gst_segment_to_stream_time (&rmdemux->segment, format,
- rmdemux->segment.start);
- if ((stop = rmdemux->segment.stop) == -1)
- stop = rmdemux->segment.duration;
- else
- stop = gst_segment_to_stream_time (&rmdemux->segment, format, stop);
-
- gst_query_set_segment (query, rmdemux->segment.rate, format, start, stop);
- res = TRUE;
- break;
- }
- default:
- res = gst_pad_query_default (pad, parent, query);
- break;
- }
-
- return res;
-}
-
-static void
-gst_rmdemux_free_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
- g_object_unref (stream->adapter);
- gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
- if (stream->pending_tags)
- gst_tag_list_unref (stream->pending_tags);
- if (stream->subpackets)
- g_ptr_array_free (stream->subpackets, TRUE);
- g_free (stream->index);
- g_free (stream);
-}
-
-static void
-gst_rmdemux_reset (GstRMDemux * rmdemux)
-{
- GSList *cur;
-
- GST_OBJECT_LOCK (rmdemux);
- rmdemux->running = FALSE;
- GST_OBJECT_UNLOCK (rmdemux);
-
- for (cur = rmdemux->streams; cur; cur = cur->next) {
- GstRMDemuxStream *stream = cur->data;
-
- gst_flow_combiner_remove_pad (rmdemux->flowcombiner, stream->pad);
- gst_element_remove_pad (GST_ELEMENT (rmdemux), stream->pad);
- gst_rmdemux_free_stream (rmdemux, stream);
- }
- g_slist_free (rmdemux->streams);
- rmdemux->streams = NULL;
- rmdemux->n_audio_streams = 0;
- rmdemux->n_video_streams = 0;
-
- if (rmdemux->pending_tags != NULL) {
- gst_tag_list_unref (rmdemux->pending_tags);
- rmdemux->pending_tags = NULL;
- }
-
- gst_adapter_clear (rmdemux->adapter);
- rmdemux->state = RMDEMUX_STATE_HEADER;
- rmdemux->have_pads = FALSE;
-
- gst_segment_init (&rmdemux->segment, GST_FORMAT_UNDEFINED);
- rmdemux->first_ts = GST_CLOCK_TIME_NONE;
- rmdemux->base_ts = GST_CLOCK_TIME_NONE;
- rmdemux->need_newsegment = TRUE;
-
- rmdemux->have_group_id = FALSE;
- rmdemux->group_id = G_MAXUINT;
-
- rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
-}
-
-static GstStateChangeReturn
-gst_rmdemux_change_state (GstElement * element, GstStateChange transition)
-{
- GstRMDemux *rmdemux = GST_RMDEMUX (element);
- GstStateChangeReturn res;
-
- switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- break;
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- rmdemux->state = RMDEMUX_STATE_HEADER;
- rmdemux->have_pads = FALSE;
- gst_segment_init (&rmdemux->segment, GST_FORMAT_TIME);
- rmdemux->running = FALSE;
- break;
- case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- break;
- default:
- break;
- }
-
- res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- break;
- case GST_STATE_CHANGE_PAUSED_TO_READY:{
- gst_rmdemux_reset (rmdemux);
- break;
- }
- case GST_STATE_CHANGE_READY_TO_NULL:
- break;
- default:
- break;
- }
-
- return res;
-}
-
-/* this function is called when the pad is activated and should start
- * processing data.
- *
- * We check if we can do random access to decide if we work push or
- * pull based.
- */
-static gboolean
-gst_rmdemux_sink_activate (GstPad * sinkpad, GstObject * parent)
-{
- GstQuery *query;
- gboolean pull_mode;
-
- query = gst_query_new_scheduling ();
-
- if (!gst_pad_peer_query (sinkpad, query)) {
- gst_query_unref (query);
- goto activate_push;
- }
-
- pull_mode = gst_query_has_scheduling_mode_with_flags (query,
- GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
- gst_query_unref (query);
-
- if (!pull_mode)
- goto activate_push;
-
- GST_DEBUG_OBJECT (sinkpad, "activating pull");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
- {
- GST_DEBUG_OBJECT (sinkpad, "activating push");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
- }
-}
-
-static gboolean
-gst_rmdemux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
- GstPadMode mode, gboolean active)
-{
- gboolean res;
- GstRMDemux *demux;
-
- demux = GST_RMDEMUX (parent);
-
- switch (mode) {
- case GST_PAD_MODE_PUSH:
- demux->seekable = FALSE;
- demux->running = active;
- res = TRUE;
- break;
- case GST_PAD_MODE_PULL:
- if (active) {
- demux->seekable = TRUE;
- demux->offset = 0;
- demux->loop_state = RMDEMUX_LOOP_STATE_HEADER;
- demux->data_offset = G_MAXUINT;
- res =
- gst_pad_start_task (sinkpad, (GstTaskFunction) gst_rmdemux_loop,
- sinkpad, NULL);
- } else {
- res = gst_pad_stop_task (sinkpad);
- }
- break;
- default:
- res = FALSE;
- break;
- }
- return res;
-}
-
-
-/* random access mode - just pass over to our chain function */
-static void
-gst_rmdemux_loop (GstPad * pad)
-{
- GstRMDemux *rmdemux;
- GstBuffer *buffer;
- GstFlowReturn ret = GST_FLOW_OK;
- guint size;
-
- rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad));
-
- GST_LOG_OBJECT (rmdemux, "loop with state=%d and offset=0x%x",
- rmdemux->loop_state, rmdemux->offset);
-
- switch (rmdemux->state) {
- case RMDEMUX_STATE_HEADER:
- size = HEADER_SIZE;
- break;
- case RMDEMUX_STATE_HEADER_DATA:
- size = DATA_SIZE;
- break;
- case RMDEMUX_STATE_DATA_PACKET:
- size = rmdemux->avg_packet_size;
- break;
- case RMDEMUX_STATE_EOS:
- GST_LOG_OBJECT (rmdemux, "At EOS, pausing task");
- ret = GST_FLOW_EOS;
- goto need_pause;
- default:
- GST_LOG_OBJECT (rmdemux, "Default: requires %d bytes (state is %d)",
- (int) rmdemux->size, rmdemux->state);
- size = rmdemux->size;
- }
-
- buffer = NULL;
- ret = gst_pad_pull_range (pad, rmdemux->offset, size, &buffer);
- if (ret != GST_FLOW_OK) {
- if (rmdemux->offset == rmdemux->index_offset) {
- /* The index isn't available so forget about it */
- rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
- rmdemux->offset = rmdemux->data_offset;
- GST_OBJECT_LOCK (rmdemux);
- rmdemux->running = TRUE;
- rmdemux->seekable = FALSE;
- GST_OBJECT_UNLOCK (rmdemux);
- return;
- } else {
- GST_DEBUG_OBJECT (rmdemux, "Unable to pull %d bytes at offset 0x%08x "
- "(pull_range returned flow %s, state is %d)", (gint) size,
- rmdemux->offset, gst_flow_get_name (ret), GST_STATE (rmdemux));
- goto need_pause;
- }
- }
-
- size = gst_buffer_get_size (buffer);
-
- /* Defer to the chain function */
- ret = gst_rmdemux_chain (pad, GST_OBJECT_CAST (rmdemux), buffer);
- if (ret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (rmdemux, "Chain flow failed at offset 0x%08x",
- rmdemux->offset);
- goto need_pause;
- }
-
- rmdemux->offset += size;
-
- switch (rmdemux->loop_state) {
- case RMDEMUX_LOOP_STATE_HEADER:
- if (rmdemux->offset >= rmdemux->data_offset) {
- /* It's the end of the header */
- rmdemux->loop_state = RMDEMUX_LOOP_STATE_INDEX;
- rmdemux->offset = rmdemux->index_offset;
- }
- break;
- case RMDEMUX_LOOP_STATE_INDEX:
- if (rmdemux->state == RMDEMUX_STATE_HEADER) {
- if (rmdemux->index_offset == 0) {
- /* We've read the last index */
- rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
- rmdemux->offset = rmdemux->data_offset;
- GST_OBJECT_LOCK (rmdemux);
- rmdemux->running = TRUE;
- GST_OBJECT_UNLOCK (rmdemux);
- } else {
- /* Get the next index */
- rmdemux->offset = rmdemux->index_offset;
- }
- }
- break;
- case RMDEMUX_LOOP_STATE_DATA:
- break;
- }
-
- return;
-
- /* ERRORS */
-need_pause:
- {
- const gchar *reason = gst_flow_get_name (ret);
-
- GST_LOG_OBJECT (rmdemux, "pausing task, reason %s", reason);
- rmdemux->segment_running = FALSE;
- gst_pad_pause_task (rmdemux->sinkpad);
-
- if (ret == GST_FLOW_EOS) {
- /* perform EOS logic */
- if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- gint64 stop;
-
- /* for segment playback we need to post when (in stream time)
- * we stopped, this is either stop (when set) or the duration. */
- if ((stop = rmdemux->segment.stop) == -1)
- stop = rmdemux->segment.duration;
-
- GST_LOG_OBJECT (rmdemux, "Sending segment done, at end of segment");
- gst_element_post_message (GST_ELEMENT (rmdemux),
- gst_message_new_segment_done (GST_OBJECT (rmdemux),
- GST_FORMAT_TIME, stop));
- gst_rmdemux_send_event (rmdemux,
- gst_event_new_segment_done (GST_FORMAT_TIME, stop));
- } else {
- /* normal playback, send EOS to all linked pads */
- GST_LOG_OBJECT (rmdemux, "Sending EOS, at end of stream");
- gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
- }
- } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_FLOW_ERROR (rmdemux, ret);
- gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
- }
- return;
- }
-}
-
-static gboolean
-gst_rmdemux_fourcc_isplausible (guint32 fourcc)
-{
- int i;
-
- for (i = 0; i < 4; i++) {
- if (!isprint ((int) ((unsigned char *) (&fourcc))[i])) {
- return FALSE;
- }
- }
- return TRUE;
-}
-
-static GstFlowReturn
-gst_rmdemux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- const guint8 *data;
- guint16 version;
- guint avail;
-
- GstRMDemux *rmdemux = GST_RMDEMUX (parent);
-
- if (rmdemux->base_ts == -1) {
- if (GST_BUFFER_DTS_IS_VALID (buffer))
- rmdemux->base_ts = GST_BUFFER_DTS (buffer);
- else
- rmdemux->base_ts = GST_BUFFER_PTS (buffer);
-
- GST_LOG_OBJECT (rmdemux, "base_ts %" GST_TIME_FORMAT,
- GST_TIME_ARGS (rmdemux->base_ts));
- }
-
- gst_adapter_push (rmdemux->adapter, buffer);
-
- GST_LOG_OBJECT (rmdemux, "Chaining buffer of size %" G_GSIZE_FORMAT,
- gst_buffer_get_size (buffer));
-
- while (TRUE) {
- avail = gst_adapter_available (rmdemux->adapter);
-
- GST_LOG_OBJECT (rmdemux, "looping in chain, avail %u", avail);
- switch (rmdemux->state) {
- case RMDEMUX_STATE_HEADER:
- {
- if (gst_adapter_available (rmdemux->adapter) < HEADER_SIZE)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, HEADER_SIZE);
-
- rmdemux->object_id = RMDEMUX_FOURCC_GET (data + 0);
- rmdemux->size = RMDEMUX_GUINT32_GET (data + 4) - HEADER_SIZE;
- rmdemux->object_version = RMDEMUX_GUINT16_GET (data + 8);
-
- /* Sanity-check. We assume that the FOURCC is printable ASCII */
- if (!gst_rmdemux_fourcc_isplausible (rmdemux->object_id)) {
- /* Failed. Remain in HEADER state, try again... We flush only
- * the actual FOURCC, not the entire header, because we could
- * need to resync anywhere at all... really, this should never
- * happen. */
- GST_WARNING_OBJECT (rmdemux, "Bogus looking header, unprintable "
- "FOURCC");
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, 4);
-
- break;
- }
-
- GST_LOG_OBJECT (rmdemux, "header found with object_id=%"
- GST_FOURCC_FORMAT
- " size=%08x object_version=%d",
- GST_FOURCC_ARGS (rmdemux->object_id), rmdemux->size,
- rmdemux->object_version);
-
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
-
- switch (rmdemux->object_id) {
- case GST_MAKE_FOURCC ('.', 'R', 'M', 'F'):
- rmdemux->state = RMDEMUX_STATE_HEADER_RMF;
- break;
- case GST_MAKE_FOURCC ('P', 'R', 'O', 'P'):
- rmdemux->state = RMDEMUX_STATE_HEADER_PROP;
- break;
- case GST_MAKE_FOURCC ('M', 'D', 'P', 'R'):
- rmdemux->state = RMDEMUX_STATE_HEADER_MDPR;
- break;
- case GST_MAKE_FOURCC ('I', 'N', 'D', 'X'):
- rmdemux->state = RMDEMUX_STATE_HEADER_INDX;
- break;
- case GST_MAKE_FOURCC ('D', 'A', 'T', 'A'):
- rmdemux->state = RMDEMUX_STATE_HEADER_DATA;
- break;
- case GST_MAKE_FOURCC ('C', 'O', 'N', 'T'):
- rmdemux->state = RMDEMUX_STATE_HEADER_CONT;
- break;
- default:
- rmdemux->state = RMDEMUX_STATE_HEADER_UNKNOWN;
- break;
- }
- break;
- }
- case RMDEMUX_STATE_HEADER_UNKNOWN:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- GST_WARNING_OBJECT (rmdemux, "Unknown object_id %" GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (rmdemux->object_id));
-
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_HEADER_RMF:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- if ((rmdemux->object_version == 0) || (rmdemux->object_version == 1)) {
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse__rmf (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
- } else {
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
- }
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_HEADER_PROP:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse_prop (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_HEADER_MDPR:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse_mdpr (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_HEADER_CONT:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse_cont (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_HEADER_DATA:
- {
- /* If we haven't already done so then signal there are no more pads */
- if (!rmdemux->have_pads) {
- GST_LOG_OBJECT (rmdemux, "no more pads");
- gst_element_no_more_pads (GST_ELEMENT (rmdemux));
- rmdemux->have_pads = TRUE;
- }
-
- /* The actual header is only 8 bytes */
- rmdemux->size = DATA_SIZE;
- GST_LOG_OBJECT (rmdemux, "data available %" G_GSIZE_FORMAT,
- gst_adapter_available (rmdemux->adapter));
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse_data (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
- rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
- break;
- }
- case RMDEMUX_STATE_HEADER_INDX:
- {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- rmdemux->size = gst_rmdemux_parse_indx (rmdemux, data, rmdemux->size);
- /* Only flush the header */
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
-
- rmdemux->state = RMDEMUX_STATE_INDX_DATA;
- break;
- }
- case RMDEMUX_STATE_INDX_DATA:
- {
- /* There's not always an data to get... */
- if (rmdemux->size > 0) {
- if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
- goto unlock;
-
- data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
- gst_rmdemux_parse_indx_data (rmdemux, data, rmdemux->size);
- gst_adapter_unmap (rmdemux->adapter);
- gst_adapter_flush (rmdemux->adapter, rmdemux->size);
- }
-
- rmdemux->state = RMDEMUX_STATE_HEADER;
- break;
- }
- case RMDEMUX_STATE_DATA_PACKET:
- {
- guint8 header[4];
-
- if (gst_adapter_available (rmdemux->adapter) < 2)
- goto unlock;
-
- gst_adapter_copy (rmdemux->adapter, header, 0, 2);
- version = RMDEMUX_GUINT16_GET (header);
- GST_LOG_OBJECT (rmdemux, "Data packet with version=%d", version);
-
- if (version == 0 || version == 1) {
- guint16 length;
-
- if (gst_adapter_available (rmdemux->adapter) < 4)
- goto unlock;
-
- gst_adapter_copy (rmdemux->adapter, header, 0, 4);
-
- length = RMDEMUX_GUINT16_GET (header + 2);
- GST_LOG_OBJECT (rmdemux, "Got length %d", length);
-
- if (length < 4) {
- GST_LOG_OBJECT (rmdemux, "length too small, dropping");
- /* Invalid, just drop it */
- gst_adapter_flush (rmdemux->adapter, 4);
- } else {
- GstBuffer *buffer;
-
- avail = gst_adapter_available (rmdemux->adapter);
- if (avail < length)
- goto unlock;
-
- GST_LOG_OBJECT (rmdemux, "we have %u available and we needed %d",
- avail, length);
-
- /* flush version and length */
- gst_adapter_flush (rmdemux->adapter, 4);
- length -= 4;
-
- buffer = gst_adapter_take_buffer (rmdemux->adapter, length);
-
- ret = gst_rmdemux_parse_packet (rmdemux, buffer, version);
- rmdemux->chunk_index++;
- }
-
- if (rmdemux->chunk_index == rmdemux->n_chunks || length == 0)
- rmdemux->state = RMDEMUX_STATE_HEADER;
- } else {
- /* Stream done */
- gst_adapter_flush (rmdemux->adapter, 2);
-
- if (rmdemux->data_offset == 0) {
- GST_LOG_OBJECT (rmdemux,
- "No further data, internal demux state EOS");
- rmdemux->state = RMDEMUX_STATE_EOS;
- } else
- rmdemux->state = RMDEMUX_STATE_HEADER;
- }
- break;
- }
- case RMDEMUX_STATE_EOS:
- gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
- goto unlock;
- default:
- GST_WARNING_OBJECT (rmdemux, "Unhandled state %d", rmdemux->state);
- goto unlock;
- }
- }
-
-unlock:
- return ret;
-}
-
-static GstRMDemuxStream *
-gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux, int id)
-{
- GSList *cur;
-
- for (cur = rmdemux->streams; cur; cur = cur->next) {
- GstRMDemuxStream *stream = cur->data;
-
- if (stream->id == id) {
- return stream;
- }
- }
-
- return NULL;
-}
-
-static void
-gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event)
-{
- GSList *cur;
-
- for (cur = rmdemux->streams; cur; cur = cur->next) {
- GstRMDemuxStream *stream = cur->data;
-
- GST_DEBUG_OBJECT (rmdemux, "Pushing %s event on pad %s",
- GST_EVENT_TYPE_NAME (event), GST_PAD_NAME (stream->pad));
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_FLUSH_STOP:
- stream->last_ts = -1;
- stream->next_ts = -1;
- stream->last_seq = -1;
- stream->next_seq = -1;
- break;
- default:
- break;
- }
- gst_event_ref (event);
- gst_pad_push_event (stream->pad, event);
- }
- gst_event_unref (event);
-}
-
-static void
-gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
- GstCaps *stream_caps = NULL;
- const gchar *codec_tag = NULL;
- gchar *codec_name = NULL;
- gchar *stream_id;
- int version = 0;
-
- if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
- char *name = g_strdup_printf ("video_%u", rmdemux->n_video_streams);
-
- stream->pad =
- gst_pad_new_from_static_template (&gst_rmdemux_videosrc_template, name);
- g_free (name);
-
- codec_tag = GST_TAG_VIDEO_CODEC;
-
- switch (stream->fourcc) {
- case GST_RM_VDO_RV10:
- version = 1;
- break;
- case GST_RM_VDO_RV20:
- version = 2;
- break;
- case GST_RM_VDO_RV30:
- version = 3;
- break;
- case GST_RM_VDO_RV40:
- version = 4;
- break;
- default:
- stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
- "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
- GST_WARNING_OBJECT (rmdemux,
- "Unknown video FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
- GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
- }
-
- if (version) {
- stream_caps =
- gst_caps_new_simple ("video/x-pn-realvideo", "rmversion", G_TYPE_INT,
- (int) version,
- "format", G_TYPE_INT,
- (int) stream->format,
- "subformat", G_TYPE_INT, (int) stream->subformat, NULL);
- }
-
- if (stream_caps) {
- gst_caps_set_simple (stream_caps,
- "width", G_TYPE_INT, stream->width,
- "height", G_TYPE_INT, stream->height,
- "framerate", GST_TYPE_FRACTION, stream->framerate_numerator,
- stream->framerate_denominator, NULL);
- }
- rmdemux->n_video_streams++;
-
- } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
- char *name = g_strdup_printf ("audio_%u", rmdemux->n_audio_streams);
-
- stream->pad =
- gst_pad_new_from_static_template (&gst_rmdemux_audiosrc_template, name);
- GST_LOG_OBJECT (rmdemux, "Created audio pad \"%s\"", name);
- g_free (name);
-
- codec_tag = GST_TAG_AUDIO_CODEC;
-
- switch (stream->fourcc) {
- /* Older RealAudio Codecs */
- case GST_RM_AUD_14_4:
- version = 1;
- break;
-
- case GST_RM_AUD_28_8:
- version = 2;
- break;
-
- /* DolbyNet (Dolby AC3, low bitrate) */
- case GST_RM_AUD_DNET:
- stream_caps =
- gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
- (int) stream->rate, NULL);
- stream->needs_descrambling = TRUE;
- stream->subpackets_needed = 1;
- stream->subpackets = NULL;
- break;
-
- /* MPEG-4 based */
- case GST_RM_AUD_RAAC:
- case GST_RM_AUD_RACP:
- stream_caps =
- gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT,
- (int) 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
- if (stream->extra_data_size > 0) {
- /* strip off an unknown byte in the extra data */
- stream->extra_data_size--;
- stream->extra_data++;
- }
- stream->needs_descrambling = TRUE;
- stream->subpackets_needed = 1;
- stream->subpackets = NULL;
- break;
-
- /* Sony ATRAC3 */
- case GST_RM_AUD_ATRC:
- stream_caps = gst_caps_new_empty_simple ("audio/x-vnd.sony.atrac3");
- stream->needs_descrambling = TRUE;
- stream->subpackets_needed = stream->height;
- stream->subpackets = NULL;
- break;
-
- /* RealAudio G2 audio */
- case GST_RM_AUD_COOK:
- version = 8;
- stream->needs_descrambling = TRUE;
- stream->subpackets_needed = stream->height;
- stream->subpackets = NULL;
- break;
-
- /* RALF is lossless */
- case GST_RM_AUD_RALF:
- GST_DEBUG_OBJECT (rmdemux, "RALF");
- stream_caps = gst_caps_new_empty_simple ("audio/x-ralf-mpeg4-generic");
- break;
-
- case GST_RM_AUD_SIPR:
-
- if (stream->flavor > 3) {
- GST_WARNING_OBJECT (rmdemux, "bad SIPR flavor %d, freeing it",
- stream->flavor);
- g_object_unref (stream->pad);
- gst_rmdemux_free_stream (rmdemux, stream);
- goto beach;
- }
-
- GST_DEBUG_OBJECT (rmdemux, "SIPR");
- stream_caps = gst_caps_new_empty_simple ("audio/x-sipro");
- stream->needs_descrambling = TRUE;
- stream->subpackets_needed = stream->height;
- stream->subpackets = NULL;
- stream->leaf_size = sipr_subpk_size[stream->flavor];
-
- break;
-
- default:
- stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
- "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
- GST_WARNING_OBJECT (rmdemux,
- "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
- GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
- break;
- }
-
- if (version) {
- stream_caps =
- gst_caps_new_simple ("audio/x-pn-realaudio", "raversion", G_TYPE_INT,
- (int) version, NULL);
- }
-
- if (stream_caps) {
- gst_caps_set_simple (stream_caps,
- "flavor", G_TYPE_INT, (int) stream->flavor,
- "rate", G_TYPE_INT, (int) stream->rate,
- "channels", G_TYPE_INT, (int) stream->n_channels,
- "width", G_TYPE_INT, (int) stream->sample_width,
- "leaf_size", G_TYPE_INT, (int) stream->leaf_size,
- "packet_size", G_TYPE_INT, (int) stream->packet_size,
- "bitrate", G_TYPE_INT, (int) stream->bitrate,
- "height", G_TYPE_INT, (int) stream->height, NULL);
- }
- rmdemux->n_audio_streams++;
- } else {
- GST_WARNING_OBJECT (rmdemux, "not adding stream of type %d, freeing it",
- stream->subtype);
- gst_rmdemux_free_stream (rmdemux, stream);
- goto beach;
- }
-
- GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
- rmdemux->streams = g_slist_append (rmdemux->streams, stream);
- GST_LOG_OBJECT (rmdemux, "n_streams is now %d",
- g_slist_length (rmdemux->streams));
-
- GST_LOG ("stream->pad = %p, stream_caps = %" GST_PTR_FORMAT, stream->pad,
- stream_caps);
-
- if (stream->pad && stream_caps) {
- GstEvent *event;
-
- GST_LOG_OBJECT (rmdemux, "%d bytes of extra data for stream %s",
- stream->extra_data_size, GST_PAD_NAME (stream->pad));
-
- /* add codec_data if there is any */
- if (stream->extra_data_size > 0) {
- GstBuffer *buffer;
-
- buffer = gst_buffer_new_and_alloc (stream->extra_data_size);
- gst_buffer_fill (buffer, 0, stream->extra_data, stream->extra_data_size);
-
- gst_caps_set_simple (stream_caps, "codec_data", GST_TYPE_BUFFER,
- buffer, NULL);
-
- gst_buffer_unref (buffer);
- }
-
- gst_pad_use_fixed_caps (stream->pad);
-
- gst_pad_set_event_function (stream->pad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_src_event));
- gst_pad_set_query_function (stream->pad,
- GST_DEBUG_FUNCPTR (gst_rmdemux_src_query));
-
- GST_DEBUG_OBJECT (rmdemux, "adding pad %s with caps %" GST_PTR_FORMAT
- ", stream_id=%d", GST_PAD_NAME (stream->pad), stream_caps, stream->id);
- gst_pad_set_active (stream->pad, TRUE);
-
- stream_id =
- gst_pad_create_stream_id_printf (stream->pad,
- GST_ELEMENT_CAST (rmdemux), "%03u", stream->id);
-
- event =
- gst_pad_get_sticky_event (rmdemux->sinkpad, GST_EVENT_STREAM_START, 0);
- if (event) {
- if (gst_event_parse_group_id (event, &rmdemux->group_id))
- rmdemux->have_group_id = TRUE;
- else
- rmdemux->have_group_id = FALSE;
- gst_event_unref (event);
- } else if (!rmdemux->have_group_id) {
- rmdemux->have_group_id = TRUE;
- rmdemux->group_id = gst_util_group_id_next ();
- }
-
- event = gst_event_new_stream_start (stream_id);
- if (rmdemux->have_group_id)
- gst_event_set_group_id (event, rmdemux->group_id);
-
- gst_pad_push_event (stream->pad, event);
- g_free (stream_id);
-
- gst_pad_set_caps (stream->pad, stream_caps);
-
- codec_name = gst_pb_utils_get_codec_description (stream_caps);
-
- /* save for later, we must send the tags after the newsegment event */
- if (codec_tag != NULL && codec_name != NULL) {
- if (stream->pending_tags == NULL)
- stream->pending_tags = gst_tag_list_new_empty ();
- gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_KEEP,
- codec_tag, codec_name, NULL);
- g_free (codec_name);
- }
- gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad);
- gst_flow_combiner_add_pad (rmdemux->flowcombiner, stream->pad);
- }
-
-beach:
-
- if (stream_caps)
- gst_caps_unref (stream_caps);
-}
-
-static int
-re_skip_pascal_string (const guint8 * ptr)
-{
- int length;
-
- length = ptr[0];
-
- return length + 1;
-}
-
-static void
-gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- GST_LOG_OBJECT (rmdemux, "file_version: %d", RMDEMUX_GUINT32_GET (data));
- GST_LOG_OBJECT (rmdemux, "num_headers: %d", RMDEMUX_GUINT32_GET (data + 4));
-}
-
-static void
-gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- GST_LOG_OBJECT (rmdemux, "max bitrate: %d", RMDEMUX_GUINT32_GET (data));
- GST_LOG_OBJECT (rmdemux, "avg bitrate: %d", RMDEMUX_GUINT32_GET (data + 4));
- GST_LOG_OBJECT (rmdemux, "max packet size: %d",
- RMDEMUX_GUINT32_GET (data + 8));
- rmdemux->avg_packet_size = RMDEMUX_GUINT32_GET (data + 12);
- GST_LOG_OBJECT (rmdemux, "avg packet size: %d", rmdemux->avg_packet_size);
- rmdemux->num_packets = RMDEMUX_GUINT32_GET (data + 16);
- GST_LOG_OBJECT (rmdemux, "number of packets: %d", rmdemux->num_packets);
-
- GST_LOG_OBJECT (rmdemux, "duration: %d", RMDEMUX_GUINT32_GET (data + 20));
- rmdemux->duration = RMDEMUX_GUINT32_GET (data + 20) * GST_MSECOND;
-
- GST_LOG_OBJECT (rmdemux, "preroll: %d", RMDEMUX_GUINT32_GET (data + 24));
- rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 28);
- GST_LOG_OBJECT (rmdemux, "offset of INDX section: 0x%08x",
- rmdemux->index_offset);
- rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 32);
- GST_LOG_OBJECT (rmdemux, "offset of DATA section: 0x%08x",
- rmdemux->data_offset);
- GST_LOG_OBJECT (rmdemux, "n streams: %d", RMDEMUX_GUINT16_GET (data + 36));
- GST_LOG_OBJECT (rmdemux, "flags: 0x%04x", RMDEMUX_GUINT16_GET (data + 38));
-}
-
-static void
-gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- GstRMDemuxStream *stream;
- char *stream1_type_string;
- char *stream2_type_string;
- guint str_len = 0;
- int stream_type;
- int offset;
- guint32 max_bitrate;
- guint32 avg_bitrate;
-
- stream = g_new0 (GstRMDemuxStream, 1);
-
- stream->id = RMDEMUX_GUINT16_GET (data);
- stream->index = NULL;
- stream->seek_offset = 0;
- stream->last_ts = -1;
- stream->next_ts = -1;
- stream->discont = TRUE;
- stream->adapter = gst_adapter_new ();
- GST_LOG_OBJECT (rmdemux, "stream_number=%d", stream->id);
-
- /* parse the bitrates */
- max_bitrate = RMDEMUX_GUINT32_GET (data + 2);
- avg_bitrate = RMDEMUX_GUINT32_GET (data + 6);
- stream->bitrate = avg_bitrate;
- GST_LOG_OBJECT (rmdemux, "Stream max bitrate=%u", max_bitrate);
- GST_LOG_OBJECT (rmdemux, "Stream avg bitrate=%u", avg_bitrate);
- if (max_bitrate != 0) {
- if (stream->pending_tags == NULL)
- stream->pending_tags = gst_tag_list_new_empty ();
- gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
- GST_TAG_MAXIMUM_BITRATE, max_bitrate, NULL);
- }
- if (avg_bitrate != 0) {
- if (stream->pending_tags == NULL)
- stream->pending_tags = gst_tag_list_new_empty ();
- gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
- GST_TAG_BITRATE, avg_bitrate, NULL);
- }
-
- offset = 30;
- stream1_type_string = gst_rm_utils_read_string8 (data + offset,
- length - offset, &str_len);
- offset += str_len;
- stream2_type_string = gst_rm_utils_read_string8 (data + offset,
- length - offset, &str_len);
- offset += str_len;
-
- /* stream1_type_string for audio and video stream is a "put_whatever_you_want" field :
- * observed values :
- * - "[The ]Video/Audio Stream" (File produced by an official Real encoder)
- * - "RealVideoPremierePlugIn-VIDEO/AUDIO" (File produced by Abobe Premiere)
- *
- * so, we should not rely on it to know which stream type it is
- */
-
- GST_LOG_OBJECT (rmdemux, "stream type: %s", stream1_type_string);
- GST_LOG_OBJECT (rmdemux, "MIME type=%s", stream2_type_string);
-
- if (strcmp (stream2_type_string, "video/x-pn-realvideo") == 0) {
- stream_type = GST_RMDEMUX_STREAM_VIDEO;
- } else if (strcmp (stream2_type_string,
- "video/x-pn-multirate-realvideo") == 0) {
- stream_type = GST_RMDEMUX_STREAM_VIDEO;
- } else if (strcmp (stream2_type_string, "audio/x-pn-realaudio") == 0) {
- stream_type = GST_RMDEMUX_STREAM_AUDIO;
- } else if (strcmp (stream2_type_string,
- "audio/x-pn-multirate-realaudio") == 0) {
- stream_type = GST_RMDEMUX_STREAM_AUDIO;
- } else if (strcmp (stream2_type_string,
- "audio/x-pn-multirate-realaudio-live") == 0) {
- stream_type = GST_RMDEMUX_STREAM_AUDIO;
- } else if (strcmp (stream2_type_string, "audio/x-ralf-mpeg4-generic") == 0) {
- /* Another audio type found in the real testsuite */
- stream_type = GST_RMDEMUX_STREAM_AUDIO;
- } else if (strcmp (stream1_type_string, "") == 0 &&
- strcmp (stream2_type_string, "logical-fileinfo") == 0) {
- stream_type = GST_RMDEMUX_STREAM_FILEINFO;
- } else {
- stream_type = GST_RMDEMUX_STREAM_UNKNOWN;
- GST_WARNING_OBJECT (rmdemux, "unknown stream type \"%s\",\"%s\"",
- stream1_type_string, stream2_type_string);
- }
- g_free (stream1_type_string);
- g_free (stream2_type_string);
-
- offset += 4;
-
- stream->subtype = stream_type;
- switch (stream_type) {
-
- case GST_RMDEMUX_STREAM_VIDEO:
- /* RV10/RV20/RV30/RV40 => video/x-pn-realvideo, version=1,2,3,4 */
- stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 8);
- stream->width = RMDEMUX_GUINT16_GET (data + offset + 12);
- stream->height = RMDEMUX_GUINT16_GET (data + offset + 14);
- stream->rate = RMDEMUX_GUINT16_GET (data + offset + 16);
- stream->subformat = RMDEMUX_GUINT32_GET (data + offset + 26);
- stream->format = RMDEMUX_GUINT32_GET (data + offset + 30);
- stream->extra_data_size = length - (offset + 26);
- stream->extra_data = (guint8 *) data + offset + 26;
- /* Natural way to represent framerates here requires unsigned 32 bit
- * numerator, which we don't have. For the nasty case, approximate...
- */
- {
- guint32 numerator = RMDEMUX_GUINT16_GET (data + offset + 22) * 65536 +
- RMDEMUX_GUINT16_GET (data + offset + 24);
- if (numerator > G_MAXINT) {
- stream->framerate_numerator = (gint) (numerator >> 1);
- stream->framerate_denominator = 32768;
- } else {
- stream->framerate_numerator = (gint) numerator;
- stream->framerate_denominator = 65536;
- }
- }
-
- GST_DEBUG_OBJECT (rmdemux,
- "Video stream with fourcc=%" GST_FOURCC_FORMAT
- " width=%d height=%d rate=%d framerate=%d/%d subformat=%x format=%x extra_data_size=%d",
- GST_FOURCC_ARGS (stream->fourcc), stream->width, stream->height,
- stream->rate, stream->framerate_numerator,
- stream->framerate_denominator, stream->subformat, stream->format,
- stream->extra_data_size);
- break;
- case GST_RMDEMUX_STREAM_AUDIO:{
- stream->version = RMDEMUX_GUINT16_GET (data + offset + 4);
- GST_INFO ("stream version = %u", stream->version);
- switch (stream->version) {
- case 3:
- stream->fourcc = GST_RM_AUD_14_4;
- stream->packet_size = 20;
- stream->rate = 8000;
- stream->n_channels = 1;
- stream->sample_width = 16;
- stream->flavor = 1;
- stream->leaf_size = 0;
- stream->height = 0;
- break;
- case 4:
- stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
- stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
- /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
- stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
- stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
- stream->rate = RMDEMUX_GUINT16_GET (data + offset + 48);
- stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 52);
- stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 54);
- stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 62);
- stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 69);
- GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
- stream->extra_data_size);
- if (length - (offset + 73) >= stream->extra_data_size) {
- stream->extra_data = (guint8 *) data + offset + 73;
- } else {
- GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
- stream->extra_data_size = 0;
- }
- break;
- case 5:
- stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
- stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
- /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
- stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
- stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
- stream->rate = RMDEMUX_GUINT16_GET (data + offset + 54);
- stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 58);
- stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 60);
- stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 66);
- stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 74);
- GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
- stream->extra_data_size);
- if (length - (offset + 78) >= stream->extra_data_size) {
- stream->extra_data = (guint8 *) data + offset + 78;
- } else {
- GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
- stream->extra_data_size = 0;
- }
- break;
- default:{
- GST_WARNING_OBJECT (rmdemux, "Unhandled audio stream version %d",
- stream->version);
- break;
- }
- }
- /* 14_4, 28_8, cook, dnet, sipr, raac, racp, ralf, atrc */
- GST_DEBUG_OBJECT (rmdemux,
- "Audio stream with rate=%d sample_width=%d n_channels=%d",
- stream->rate, stream->sample_width, stream->n_channels);
-
- break;
- }
- case GST_RMDEMUX_STREAM_FILEINFO:
- {
- int element_nb;
-
- /* Length of this section */
- GST_DEBUG_OBJECT (rmdemux, "length2: 0x%08x",
- RMDEMUX_GUINT32_GET (data + offset));
- offset += 4;
-
- /* Unknown : 00 00 00 00 */
- offset += 4;
-
- /* Number of variables that would follow (loop iterations) */
- element_nb = RMDEMUX_GUINT32_GET (data + offset);
- offset += 4;
-
- while (element_nb) {
- /* Category Id : 00 00 00 XX 00 00 */
- offset += 6;
-
- /* Variable Name */
- offset += re_skip_pascal_string (data + offset);
-
- /* Variable Value Type */
- /* 00 00 00 00 00 => integer/boolean, preceded by length */
- /* 00 00 00 02 00 => pascal string, preceded by length, no trailing \0 */
- offset += 5;
-
- /* Variable Value */
- offset += re_skip_pascal_string (data + offset);
-
- element_nb--;
- }
- }
- break;
- case GST_RMDEMUX_STREAM_UNKNOWN:
- default:
- break;
- }
-
- gst_rmdemux_add_stream (rmdemux, stream);
-}
-
-static guint
-gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- int n;
- int id;
-
- n = RMDEMUX_GUINT32_GET (data);
- id = RMDEMUX_GUINT16_GET (data + 4);
- rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 6);
-
- GST_DEBUG_OBJECT (rmdemux, "Number of indices=%d Stream ID=%d length=%d", n,
- id, length);
-
- /* Point to the next index_stream */
- rmdemux->index_stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
-
- /* Return the length of the index */
- return 14 * n;
-}
-
-static void
-gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux, const guint8 * data,
- int length)
-{
- int i;
- int n;
- GstRMDemuxIndex *index;
-
- /* The number of index records */
- n = length / 14;
-
- if (rmdemux->index_stream == NULL)
- return;
-
- /* don't parse the index a second time when operating pull-based and
- * reaching the end of the file */
- if (rmdemux->index_stream->index_length > 0) {
- GST_DEBUG_OBJECT (rmdemux, "Already have an index for this stream");
- return;
- }
-
- index = g_malloc (sizeof (GstRMDemuxIndex) * n);
- rmdemux->index_stream->index = index;
- rmdemux->index_stream->index_length = n;
-
- for (i = 0; i < n; i++) {
- index[i].timestamp = RMDEMUX_GUINT32_GET (data + 2) * GST_MSECOND;
- index[i].offset = RMDEMUX_GUINT32_GET (data + 6);
-
- GST_DEBUG_OBJECT (rmdemux, "Index found for timestamp=%f (at offset=%x)",
- gst_guint64_to_gdouble (index[i].timestamp) / GST_SECOND,
- index[i].offset);
- data += 14;
- }
-}
-
-static void
-gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- rmdemux->n_chunks = RMDEMUX_GUINT32_GET (data);
- rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 4);
- rmdemux->chunk_index = 0;
- GST_DEBUG_OBJECT (rmdemux, "Data chunk found with %d packets "
- "(next data at 0x%08x)", rmdemux->n_chunks, rmdemux->data_offset);
-}
-
-static void
-gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
- GstTagList *tags;
-
- tags = gst_rm_utils_read_tags (data, length, gst_rm_utils_read_string16);
-
- if (tags) {
- GstTagList *old_tags = rmdemux->pending_tags;
-
- GST_LOG_OBJECT (rmdemux, "tags: %" GST_PTR_FORMAT, tags);
-
- rmdemux->pending_tags =
- gst_tag_list_merge (old_tags, tags, GST_TAG_MERGE_APPEND);
-
- gst_tag_list_unref (tags);
- if (old_tags)
- gst_tag_list_unref (old_tags);
-
- gst_tag_list_set_scope (rmdemux->pending_tags, GST_TAG_SCOPE_GLOBAL);
- }
-}
-
-static void
-gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream)
-{
- if (stream->subpackets == NULL || stream->subpackets->len == 0)
- return;
-
- GST_DEBUG_OBJECT (rmdemux, "discarding %u previously collected subpackets",
- stream->subpackets->len);
- g_ptr_array_foreach (stream->subpackets, (GFunc) gst_mini_object_unref, NULL);
- g_ptr_array_set_size (stream->subpackets, 0);
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
- GstFlowReturn ret = GST_FLOW_ERROR;
- GstBuffer *outbuf;
- GstMapInfo outmap;
- guint packet_size = stream->packet_size;
- guint height = stream->subpackets->len;
- guint leaf_size = stream->leaf_size;
- guint p, x;
-
- g_assert (stream->height == height);
-
- GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
- leaf_size, height);
-
- outbuf = gst_buffer_new_and_alloc (height * packet_size);
- gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
-
- for (p = 0; p < height; ++p) {
- GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
- GstMapInfo map;
-
- gst_buffer_map (b, &map, GST_MAP_READ);
-
- if (p == 0) {
- GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
- GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
- }
-
- for (x = 0; x < packet_size / leaf_size; ++x) {
- guint idx;
-
- idx = height * x + ((height + 1) / 2) * (p % 2) + (p / 2);
-
- /* GST_LOG ("%3u => %3u", (height * p) + x, idx); */
- memcpy (outmap.data + leaf_size * idx, map.data + leaf_size * x,
- leaf_size);
- }
- gst_buffer_unmap (b, &map);
- }
- gst_buffer_unmap (outbuf, &outmap);
-
- /* some decoders, such as realaudiodec, need to be fed in packet units */
- for (p = 0; p < height; ++p) {
- GstBuffer *subbuf;
-
- subbuf =
- gst_buffer_copy_region (outbuf, GST_BUFFER_COPY_ALL, p * packet_size,
- packet_size);
-
- GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
- GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (subbuf)),
- GST_TIME_ARGS (GST_BUFFER_PTS (subbuf)));
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (subbuf, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
-
- ret = gst_pad_push (stream->pad, subbuf);
- if (ret != GST_FLOW_OK)
- break;
- }
-
- gst_buffer_unref (outbuf);
-
- gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_dnet_audio (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream)
-{
- GstBuffer *buf;
-
- buf = g_ptr_array_index (stream->subpackets, 0);
- g_ptr_array_index (stream->subpackets, 0) = NULL;
- g_ptr_array_set_size (stream->subpackets, 0);
-
- buf = gst_rm_utils_descramble_dnet_buffer (buf);
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
- return gst_pad_push (stream->pad, buf);
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_mp4a_audio (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream)
-{
- GstFlowReturn res;
- GstBuffer *buf, *outbuf;
- guint frames, index, i;
- GstMapInfo map;
- GstClockTime timestamp;
-
- res = GST_FLOW_OK;
-
- buf = g_ptr_array_index (stream->subpackets, 0);
- g_ptr_array_index (stream->subpackets, 0) = NULL;
- g_ptr_array_set_size (stream->subpackets, 0);
-
- gst_buffer_map (buf, &map, GST_MAP_READ);
- timestamp = GST_BUFFER_PTS (buf);
-
- frames = (map.data[1] & 0xf0) >> 4;
- index = 2 * frames + 2;
-
- for (i = 0; i < frames; i++) {
- guint len = (map.data[i * 2 + 2] << 8) | map.data[i * 2 + 3];
-
- outbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, index, len);
- if (i == 0) {
- GST_BUFFER_PTS (outbuf) = timestamp;
- GST_BUFFER_DTS (outbuf) = timestamp;
- }
-
- index += len;
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
- res = gst_pad_push (stream->pad, outbuf);
- if (res != GST_FLOW_OK)
- break;
- }
- gst_buffer_unmap (buf, &map);
- gst_buffer_unref (buf);
- return res;
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream)
-{
- GstFlowReturn ret;
- GstBuffer *outbuf;
- GstMapInfo outmap;
- guint packet_size = stream->packet_size;
- guint height = stream->subpackets->len;
- guint p;
-
- g_assert (stream->height == height);
-
- GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
- stream->leaf_size, height);
-
- outbuf = gst_buffer_new_and_alloc (height * packet_size);
- gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
-
- for (p = 0; p < height; ++p) {
- GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
-
- if (p == 0) {
- GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
- GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
- }
-
- gst_buffer_extract (b, 0, outmap.data + packet_size * p, packet_size);
- }
- gst_buffer_unmap (outbuf, &outmap);
-
- GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
- GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)),
- GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)));
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
-
- outbuf = gst_rm_utils_descramble_sipr_buffer (outbuf);
-
- ret = gst_pad_push (stream->pad, outbuf);
-
- gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_rmdemux_handle_scrambled_packet (GstRMDemux * rmdemux,
- GstRMDemuxStream * stream, GstBuffer * buf, gboolean keyframe)
-{
- GstFlowReturn ret;
-
- if (stream->subpackets == NULL)
- stream->subpackets = g_ptr_array_sized_new (stream->subpackets_needed);
-
- GST_LOG ("Got subpacket %u/%u, len=%" G_GSIZE_FORMAT ", key=%d",
- stream->subpackets->len + 1, stream->subpackets_needed,
- gst_buffer_get_size (buf), keyframe);
-
- if (keyframe && stream->subpackets->len > 0) {
- gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
- }
-
- g_ptr_array_add (stream->subpackets, buf);
-
- if (stream->subpackets->len < stream->subpackets_needed)
- return GST_FLOW_OK;
-
- g_assert (stream->subpackets->len >= 1);
-
- switch (stream->fourcc) {
- case GST_RM_AUD_DNET:
- ret = gst_rmdemux_descramble_dnet_audio (rmdemux, stream);
- break;
- case GST_RM_AUD_COOK:
- case GST_RM_AUD_ATRC:
- ret = gst_rmdemux_descramble_audio (rmdemux, stream);
- break;
- case GST_RM_AUD_RAAC:
- case GST_RM_AUD_RACP:
- ret = gst_rmdemux_descramble_mp4a_audio (rmdemux, stream);
- break;
- case GST_RM_AUD_SIPR:
- ret = gst_rmdemux_descramble_sipr_audio (rmdemux, stream);
- break;
- default:
- ret = GST_FLOW_ERROR;
- g_assert_not_reached ();
- }
-
- return ret;
-}
-
-#define PARSE_NUMBER(data, size, number, label) \
-G_STMT_START { \
- if (size < 2) \
- goto label; \
- number = GST_READ_UINT16_BE (data); \
- if (!(number & 0xc000)) { \
- if (size < 4) \
- goto label; \
- number = GST_READ_UINT32_BE (data); \
- data += 4; \
- size -= 4; \
- } else { \
- number &= 0x3fff; \
- data += 2; \
- size -= 2; \
- } \
-} G_STMT_END
-
-static GstFlowReturn
-gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
- GstBuffer * in, guint offset, guint16 version,
- GstClockTime timestamp, gboolean key)
-{
- GstFlowReturn ret;
- GstMapInfo map;
- const guint8 *data;
- gsize size;
-
- gst_buffer_map (in, &map, GST_MAP_READ);
-
- if (map.size < offset)
- goto not_enough_data;
-
- data = map.data + offset;
- size = map.size - offset;
-
- /* if size <= 2, we want this method to return the same GstFlowReturn as it
- * was previously for that given stream. */
- ret = GST_PAD_LAST_FLOW_RETURN (stream->pad);
-
- while (size > 2) {
- guint8 pkg_header;
- guint pkg_offset;
- guint pkg_length;
- guint pkg_subseq = 0, pkg_seqnum = G_MAXUINT;
- guint fragment_size;
- GstBuffer *fragment;
-
- pkg_header = *data++;
- size--;
-
- /* packet header
- * bit 7: 1=last block in block chain
- * bit 6: 1=short header (only one block?)
- */
- if ((pkg_header & 0xc0) == 0x40) {
- /* skip unknown byte */
- data++;
- size--;
- pkg_offset = 0;
- pkg_length = size;
- } else {
- if ((pkg_header & 0x40) == 0) {
- pkg_subseq = (*data++) & 0x7f;
- size--;
- } else {
- pkg_subseq = 0;
- }
-
- /* length */
- PARSE_NUMBER (data, size, pkg_length, not_enough_data);
-
- /* offset */
- PARSE_NUMBER (data, size, pkg_offset, not_enough_data);
-
- /* seqnum */
- if (size < 1)
- goto not_enough_data;
-
- pkg_seqnum = *data++;
- size--;
- }
-
- GST_DEBUG_OBJECT (rmdemux,
- "seq %d, subseq %d, offset %d, length %d, size %" G_GSIZE_FORMAT
- ", header %02x", pkg_seqnum, pkg_subseq, pkg_offset, pkg_length, size,
- pkg_header);
-
- /* calc size of fragment */
- if ((pkg_header & 0xc0) == 0x80) {
- fragment_size = pkg_offset;
- } else {
- if ((pkg_header & 0xc0) == 0)
- fragment_size = size;
- else
- fragment_size = pkg_length;
- }
- GST_DEBUG_OBJECT (rmdemux, "fragment size %d", fragment_size);
-
- if (map.size < (data - map.data) + fragment_size)
- goto not_enough_data;
-
- /* get the fragment */
- fragment =
- gst_buffer_copy_region (in, GST_BUFFER_COPY_ALL, data - map.data,
- fragment_size);
-
- if (pkg_subseq == 1) {
- GST_DEBUG_OBJECT (rmdemux, "start new fragment");
- gst_adapter_clear (stream->adapter);
- stream->frag_current = 0;
- stream->frag_count = 0;
- stream->frag_length = pkg_length;
- } else if (pkg_subseq == 0) {
- GST_DEBUG_OBJECT (rmdemux, "non fragmented packet");
- stream->frag_current = 0;
- stream->frag_count = 0;
- stream->frag_length = fragment_size;
- }
-
- /* put fragment in adapter */
- gst_adapter_push (stream->adapter, fragment);
- stream->frag_offset[stream->frag_count] = stream->frag_current;
- stream->frag_current += fragment_size;
- stream->frag_count++;
-
- if (stream->frag_count > MAX_FRAGS)
- goto too_many_fragments;
-
- GST_DEBUG_OBJECT (rmdemux, "stored fragment in adapter %d/%d",
- stream->frag_current, stream->frag_length);
-
- /* flush fragment when complete */
- if (stream->frag_current >= stream->frag_length) {
- GstBuffer *out;
- GstMapInfo outmap;
- guint8 *outdata;
- guint header_size;
- gint i, avail;
-
- /* calculate header size, which is:
- * 1 byte for the number of fragments - 1
- * for each fragment:
- * 4 bytes 0x00000001 little endian
- * 4 bytes fragment offset
- *
- * This is also the matroska header for realvideo, the decoder needs the
- * fragment offsets, both in ffmpeg and real .so, so we just give it that
- * in front of the data.
- */
- header_size = 1 + (8 * (stream->frag_count));
-
- GST_DEBUG_OBJECT (rmdemux,
- "fragmented completed. count %d, header_size %u", stream->frag_count,
- header_size);
-
- avail = gst_adapter_available (stream->adapter);
-
- out = gst_buffer_new_and_alloc (header_size + avail);
- gst_buffer_map (out, &outmap, GST_MAP_WRITE);
- outdata = outmap.data;
-
- /* create header */
- *outdata++ = stream->frag_count - 1;
- for (i = 0; i < stream->frag_count; i++) {
- GST_WRITE_UINT32_LE (outdata, 0x00000001);
- outdata += 4;
- GST_WRITE_UINT32_LE (outdata, stream->frag_offset[i]);
- outdata += 4;
- }
-
- /* copy packet data after the header now */
- gst_adapter_copy (stream->adapter, outdata, 0, avail);
- gst_adapter_flush (stream->adapter, avail);
-
- stream->frag_current = 0;
- stream->frag_count = 0;
- stream->frag_length = 0;
-
- if (timestamp != -1) {
- if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
- timestamp -= rmdemux->first_ts;
- else
- timestamp = 0;
-
- if (rmdemux->base_ts != -1)
- timestamp += rmdemux->base_ts;
- }
- gst_buffer_unmap (out, &outmap);
-
- /* video has DTS */
- GST_BUFFER_DTS (out) = timestamp;
- GST_BUFFER_PTS (out) = GST_CLOCK_TIME_NONE;
-
- GST_LOG_OBJECT (rmdemux, "pushing timestamp %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
-
- if (!key) {
- GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DELTA_UNIT);
- }
-
- ret = gst_pad_push (stream->pad, out);
- ret = gst_flow_combiner_update_flow (rmdemux->flowcombiner, ret);
- if (ret != GST_FLOW_OK)
- break;
-
- timestamp = GST_CLOCK_TIME_NONE;
- }
- data += fragment_size;
- size -= fragment_size;
- }
- GST_DEBUG_OBJECT (rmdemux, "%" G_GSIZE_FORMAT " bytes left", size);
-
-done:
- gst_buffer_unmap (in, &map);
- gst_buffer_unref (in);
-
- return ret;
-
- /* ERRORS */
-not_enough_data:
- {
- GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
- (NULL));
- ret = GST_FLOW_OK;
- goto done;
- }
-too_many_fragments:
- {
- GST_ELEMENT_ERROR (rmdemux, STREAM, DECODE,
- ("Got more fragments (%u) than can be handled (%u)",
- stream->frag_count, MAX_FRAGS), (NULL));
- ret = GST_FLOW_ERROR;
- goto done;
- }
-}
-
-static GstFlowReturn
-gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
- GstBuffer * in, guint offset, guint16 version,
- GstClockTime timestamp, gboolean key)
-{
- GstFlowReturn ret;
- GstBuffer *buffer;
-
- if (gst_buffer_get_size (in) < offset)
- goto not_enough_data;
-
- buffer = gst_buffer_copy_region (in, GST_BUFFER_COPY_MEMORY, offset, -1);
-
- if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
- timestamp -= rmdemux->first_ts;
- else
- timestamp = 0;
-
- if (rmdemux->base_ts != -1)
- timestamp += rmdemux->base_ts;
-
- GST_BUFFER_PTS (buffer) = timestamp;
- GST_BUFFER_DTS (buffer) = timestamp;
-
- if (stream->needs_descrambling) {
- GST_LOG_OBJECT (rmdemux, "descramble timestamp %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
- ret = gst_rmdemux_handle_scrambled_packet (rmdemux, stream, buffer, key);
- } else {
- GST_LOG_OBJECT (rmdemux,
- "Pushing buffer of size %" G_GSIZE_FORMAT ", timestamp %"
- GST_TIME_FORMAT "to pad %s", gst_buffer_get_size (buffer),
- GST_TIME_ARGS (timestamp), GST_PAD_NAME (stream->pad));
-
- if (stream->discont) {
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
- stream->discont = FALSE;
- }
- ret = gst_pad_push (stream->pad, buffer);
- }
-
-done:
- gst_buffer_unref (in);
-
- return ret;
-
- /* ERRORS */
-not_enough_data:
- {
- GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
- (NULL));
- ret = GST_FLOW_OK;
- goto done;
- }
-}
-
-static GstFlowReturn
-gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
-{
- guint16 id;
- GstRMDemuxStream *stream;
- gsize size, offset;
- GstFlowReturn cret, ret;
- GstClockTime timestamp;
- gboolean key;
- GstMapInfo map;
- guint8 *data;
- guint8 flags;
- guint32 ts;
-
- gst_buffer_map (in, &map, GST_MAP_READ);
- data = map.data;
- size = map.size;
-
- if (size < 4 + 6 + 1 + 2)
- goto not_enough_data;
-
- /* stream number */
- id = RMDEMUX_GUINT16_GET (data);
-
- stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
- if (!stream || !stream->pad)
- goto unknown_stream;
-
- /* timestamp in Msec */
- ts = RMDEMUX_GUINT32_GET (data + 2);
- timestamp = ts * GST_MSECOND;
-
- rmdemux->segment.position = timestamp;
-
- GST_LOG_OBJECT (rmdemux, "Parsing a packet for stream=%d, timestamp=%"
- GST_TIME_FORMAT ", size %" G_GSIZE_FORMAT ", version=%d, ts=%u", id,
- GST_TIME_ARGS (timestamp), size, version, ts);
-
- if (rmdemux->first_ts == GST_CLOCK_TIME_NONE) {
- GST_DEBUG_OBJECT (rmdemux, "First timestamp: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
- rmdemux->first_ts = timestamp;
- }
-
- /* skip stream_id and timestamp */
- data += (2 + 4);
- size -= (2 + 4);
-
- /* get flags */
- flags = GST_READ_UINT8 (data + 1);
-
- data += 2;
- size -= 2;
-
- /* version 1 has an extra byte */
- if (version == 1) {
- if (size < 1)
- goto not_enough_data;
-
- data += 1;
- size -= 1;
- }
- offset = data - map.data;
- gst_buffer_unmap (in, &map);
-
- key = (flags & 0x02) != 0;
- GST_DEBUG_OBJECT (rmdemux, "flags %d, Keyframe %d", flags, key);
-
- if (rmdemux->need_newsegment) {
- GstEvent *event;
-
- event = gst_event_new_segment (&rmdemux->segment);
-
- GST_DEBUG_OBJECT (rmdemux, "sending NEWSEGMENT event, segment.start= %"
- GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start));
-
- gst_rmdemux_send_event (rmdemux, event);
- rmdemux->need_newsegment = FALSE;
-
- if (rmdemux->pending_tags != NULL) {
- gst_rmdemux_send_event (rmdemux,
- gst_event_new_tag (rmdemux->pending_tags));
- rmdemux->pending_tags = NULL;
- }
- }
-
- if (stream->pending_tags != NULL) {
- GST_LOG_OBJECT (stream->pad, "tags %" GST_PTR_FORMAT, stream->pending_tags);
- gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
- stream->pending_tags = NULL;
- }
-
- if ((rmdemux->offset + size) <= stream->seek_offset) {
- GST_DEBUG_OBJECT (rmdemux,
- "Stream %d is skipping: seek_offset=%d, offset=%d, size=%"
- G_GSIZE_FORMAT, stream->id, stream->seek_offset, rmdemux->offset, size);
- cret = GST_FLOW_OK;
- gst_buffer_unref (in);
- goto beach;
- }
-
- /* do special headers */
- if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
- ret =
- gst_rmdemux_parse_video_packet (rmdemux, stream, in, offset,
- version, timestamp, key);
- } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
- ret =
- gst_rmdemux_parse_audio_packet (rmdemux, stream, in, offset,
- version, timestamp, key);
- } else {
- gst_buffer_unref (in);
- ret = GST_FLOW_OK;
- }
-
- cret = gst_flow_combiner_update_pad_flow (rmdemux->flowcombiner, stream->pad,
- ret);
-
-beach:
- return cret;
-
- /* ERRORS */
-unknown_stream:
- {
- GST_WARNING_OBJECT (rmdemux, "No stream for stream id %d in parsing "
- "data packet", id);
- gst_buffer_unmap (in, &map);
- gst_buffer_unref (in);
- return GST_FLOW_OK;
- }
-
- /* ERRORS */
-not_enough_data:
- {
- GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
- (NULL));
- gst_buffer_unmap (in, &map);
- gst_buffer_unref (in);
- return GST_FLOW_OK;
- }
-}
+++ /dev/null
-/* GStreamer RealMedia demuxer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_RMDEMUX_H__
-#define __GST_RMDEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/base/gstflowcombiner.h>
-#include <gst/pbutils/descriptions.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RMDEMUX \
- (gst_rmdemux_get_type())
-#define GST_RMDEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RMDEMUX,GstRMDemux))
-#define GST_RMDEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RMDEMUX,GstRMDemuxClass))
-#define GST_IS_RMDEMUX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RMDEMUX))
-#define GST_IS_RMDEMUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RMDEMUX))
-
-typedef enum
-{
- RMDEMUX_STATE_NULL,
- RMDEMUX_STATE_HEADER,
- RMDEMUX_STATE_HEADER_UNKNOWN,
- RMDEMUX_STATE_HEADER_RMF,
- RMDEMUX_STATE_HEADER_PROP,
- RMDEMUX_STATE_HEADER_MDPR,
- RMDEMUX_STATE_HEADER_INDX,
- RMDEMUX_STATE_HEADER_DATA,
- RMDEMUX_STATE_HEADER_CONT,
- RMDEMUX_STATE_HEADER_SEEKING,
- RMDEMUX_STATE_SEEKING,
- RMDEMUX_STATE_DATA_PACKET,
- RMDEMUX_STATE_SEEKING_EOS,
- RMDEMUX_STATE_EOS,
- RMDEMUX_STATE_INDX_DATA
-} GstRMDemuxState;
-
-typedef enum
-{
- RMDEMUX_LOOP_STATE_HEADER,
- RMDEMUX_LOOP_STATE_INDEX,
- RMDEMUX_LOOP_STATE_DATA
-} GstRMDemuxLoopState;
-
-typedef enum
-{
- GST_RMDEMUX_STREAM_UNKNOWN,
- GST_RMDEMUX_STREAM_VIDEO,
- GST_RMDEMUX_STREAM_AUDIO,
- GST_RMDEMUX_STREAM_FILEINFO
-} GstRMDemuxStreamType;
-
-typedef struct _GstRMDemux GstRMDemux;
-typedef struct _GstRMDemuxClass GstRMDemuxClass;
-typedef struct _GstRMDemuxStream GstRMDemuxStream;
-
-struct _GstRMDemux {
- GstElement element;
-
- /* pads */
- GstPad *sinkpad;
-
- gboolean have_group_id;
- guint group_id;
-
- GSList *streams;
- guint n_video_streams;
- guint n_audio_streams;
- GstAdapter *adapter;
- gboolean have_pads;
-
- GstFlowCombiner *flowcombiner;
-
- guint32 timescale;
- guint64 duration;
- guint32 avg_packet_size;
- guint32 index_offset;
- guint32 data_offset;
- guint32 num_packets;
-
- guint offset;
- gboolean seekable;
- guint32 seek_seqnum;
-
- GstRMDemuxState state;
- GstRMDemuxLoopState loop_state;
- GstRMDemuxStream *index_stream;
-
- /* playback start/stop positions */
- GstSegment segment;
- gboolean segment_running;
- gboolean running;
-
- /* Whether we need to send a newsegment event */
- gboolean need_newsegment;
-
- /* Current timestamp */
- GstClockTime cur_timestamp;
-
- /* First timestamp */
- GstClockTime base_ts;
- GstClockTime first_ts;
-
- int n_chunks;
- int chunk_index;
-
- guint32 object_id;
- guint32 size;
- guint16 object_version;
-
- /* container tags for all streams */
- GstTagList *pending_tags;
-};
-
-struct _GstRMDemuxClass {
- GstElementClass parent_class;
-};
-
-/* RealMedia VideoCodec FOURCC codes */
-#define GST_RM_VDO_RV10 GST_MAKE_FOURCC('R','V','1','0') // RealVideo 1
-#define GST_RM_VDO_RV20 GST_MAKE_FOURCC('R','V','2','0') // RealVideo G2
-#define GST_RM_VDO_RV30 GST_MAKE_FOURCC('R','V','3','0') // RealVideo 8
-#define GST_RM_VDO_RV40 GST_MAKE_FOURCC('R','V','4','0') // RealVideo 9+10
-
-/* RealMedia AudioCodec FOURCC codes */
-#define GST_RM_AUD_14_4 GST_MAKE_FOURCC('1','4','_','4') // 14.4 Audio Codec
-#define GST_RM_AUD_28_8 GST_MAKE_FOURCC('2','8','_','8') // 28.8 Audio Codec
-#define GST_RM_AUD_COOK GST_MAKE_FOURCC('c','o','o','k') // Cooker G2 Audio Codec
-#define GST_RM_AUD_DNET GST_MAKE_FOURCC('d','n','e','t') // DolbyNet Audio Codec (low bitrate Dolby AC3)
-#define GST_RM_AUD_SIPR GST_MAKE_FOURCC('s','i','p','r') // Sipro/ACELP.NET Voice Codec
-#define GST_RM_AUD_RAAC GST_MAKE_FOURCC('r','a','a','c') // LE-AAC Audio Codec
-#define GST_RM_AUD_RACP GST_MAKE_FOURCC('r','a','c','p') // HE-AAC Audio Codec
-#define GST_RM_AUD_RALF GST_MAKE_FOURCC('r','a','l','f') // RealAudio Lossless
-#define GST_RM_AUD_ATRC GST_MAKE_FOURCC('a','t','r','c') // Sony ATRAC3 Audio Codec
-
-#define GST_RM_AUD_xRA4 GST_MAKE_FOURCC('.','r','a','4') // Not a real audio codec
-#define GST_RM_AUD_xRA5 GST_MAKE_FOURCC('.','r','a','5') // Not a real audio codec
-
-GST_ELEMENT_REGISTER_DECLARE (rmdemux);
-
-G_END_DECLS
-
-#endif /* __GST_RMDEMUX_H__ */
+++ /dev/null
-/* GStreamer RealMedia utility functions
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "rmutils.h"
-
-gchar *
-gst_rm_utils_read_string8 (const guint8 * data, guint datalen,
- guint * p_total_len)
-{
- gint length;
-
- if (p_total_len)
- *p_total_len = 0;
-
- if (datalen < 1)
- return NULL;
-
- length = GST_READ_UINT8 (data);
- if (datalen < (1 + length))
- return NULL;
-
- if (p_total_len)
- *p_total_len = 1 + length;
-
- return g_strndup ((gchar *) data + 1, length);
-}
-
-gchar *
-gst_rm_utils_read_string16 (const guint8 * data, guint datalen,
- guint * p_total_len)
-{
- gint length;
-
- if (p_total_len)
- *p_total_len = 0;
-
- if (datalen < 2)
- return NULL;
-
- length = GST_READ_UINT16_BE (data);
- if (datalen < (2 + length))
- return NULL;
-
- if (p_total_len)
- *p_total_len = 2 + length;
-
- return g_strndup ((gchar *) data + 2, length);
-}
-
-GstTagList *
-gst_rm_utils_read_tags (const guint8 * data, guint datalen,
- GstRmUtilsStringReadFunc read_string_func)
-{
- const gchar *gst_tags[] = { GST_TAG_TITLE, GST_TAG_ARTIST,
- GST_TAG_COPYRIGHT, GST_TAG_COMMENT
- };
- GstTagList *tags;
- guint i;
-
- g_assert (read_string_func != NULL);
-
- GST_DEBUG ("File Content : (CONT) len = %d", datalen);
-
- tags = gst_tag_list_new_empty ();
-
- for (i = 0; i < G_N_ELEMENTS (gst_tags); ++i) {
- gchar *str = NULL;
- guint total_length = 0;
-
- str = read_string_func (data, datalen, &total_length);
- data += total_length;
- datalen -= total_length;
-
- if (str != NULL && !g_utf8_validate (str, -1, NULL)) {
- const gchar *encoding;
- gchar *tmp;
-
- encoding = g_getenv ("GST_TAG_ENCODING");
- if (encoding == NULL || *encoding == '\0') {
- if (g_get_charset (&encoding))
- encoding = "ISO-8859-15";
- }
- GST_DEBUG ("converting tag from %s to UTF-8", encoding);
- tmp = g_convert_with_fallback (str, -1, "UTF-8", encoding, (gchar *) "*",
- NULL, NULL, NULL);
- g_free (str);
- str = tmp;
- }
-
- GST_DEBUG ("%s = %s", gst_tags[i], GST_STR_NULL (str));
- if (str != NULL && *str != '\0') {
- gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, gst_tags[i], str, NULL);
- }
- g_free (str);
- }
-
- if (gst_tag_list_n_tags (tags) > 0)
- return tags;
-
- gst_tag_list_unref (tags);
- return NULL;
-}
-
-GstBuffer *
-gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf)
-{
- GstMapInfo map;
- guint8 *data, *end, tmp;
-
- buf = gst_buffer_make_writable (buf);
-
- /* dnet = byte-order swapped AC3 */
- gst_buffer_map (buf, &map, GST_MAP_READWRITE);
- data = map.data;
- end = data + map.size;
- while ((data + 1) < end) {
- /* byte-swap */
- tmp = data[0];
- data[0] = data[1];
- data[1] = tmp;
- data += sizeof (guint16);
- }
- gst_buffer_unmap (buf, &map);
- return buf;
-}
-
-static void
-gst_rm_utils_swap_nibbles (guint8 * data, gint idx1, gint idx2, gint len)
-{
- guint8 *d1, *d2, tmp1 = 0, tmp2, tmp1n, tmp2n;
-
- if ((idx2 & 1) && !(idx1 & 1)) {
- /* align destination to a byte by swapping the indexes */
- tmp1 = idx1;
- idx1 = idx2;
- idx2 = tmp1;
- }
- d1 = data + (idx1 >> 1);
- d2 = data + (idx2 >> 1);
-
- /* check if we have aligned offsets and we can copy bytes */
- if ((idx1 & 1) == (idx2 & 1)) {
- if (idx1 & 1) {
- /* swap first nibble */
- tmp1 = *d1;
- tmp2 = *d2;
- *d1++ = (tmp2 & 0xf0) | (tmp1 & 0x0f);
- *d2++ = (tmp1 & 0xf0) | (tmp2 & 0x0f);
- len--;
- }
- for (; len > 1; len -= 2) {
- /* swap 2 nibbles */
- tmp1 = *d1;
- *d1++ = *d2;
- *d2++ = tmp1;
- }
- if (len) {
- /* swap leftover nibble */
- tmp1 = *d1;
- tmp2 = *d2;
- *d1 = (tmp2 & 0x0f) | (tmp1 & 0xf0);
- *d2 = (tmp1 & 0x0f) | (tmp2 & 0xf0);
- }
- } else {
- /* preload nibbles from source */
- tmp2n = *d1;
- tmp2 = *d2;
-
- for (; len > 1; len -= 2) {
- /* assemble nibbles */
- *d1++ = (tmp2n & 0x0f) | (tmp2 << 4);
- tmp1n = *d1;
- *d2++ = (tmp1n << 4) | (tmp1 >> 4);
-
- tmp1 = tmp1n;
- tmp2n = (tmp2 >> 4);
- tmp2 = *d2;
- }
- if (len) {
- /* last leftover */
- *d1 = (tmp2 << 4) | (tmp2n & 0x0f);
- *d2 = (tmp1 >> 4) | (tmp2 & 0xf0);
- } else {
- *d1 = (tmp1 & 0xf0) | (tmp2n);
- }
- }
-}
-
-static const gint sipr_swap_index[38][2] = {
- {0, 63}, {1, 22}, {2, 44}, {3, 90},
- {5, 81}, {7, 31}, {8, 86}, {9, 58},
- {10, 36}, {12, 68}, {13, 39}, {14, 73},
- {15, 53}, {16, 69}, {17, 57}, {19, 88},
- {20, 34}, {21, 71}, {24, 46}, {25, 94},
- {26, 54}, {28, 75}, {29, 50}, {32, 70},
- {33, 92}, {35, 74}, {38, 85}, {40, 56},
- {42, 87}, {43, 65}, {45, 59}, {48, 79},
- {49, 93}, {51, 89}, {55, 95}, {61, 76},
- {67, 83}, {77, 80}
-};
-
-GstBuffer *
-gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf)
-{
- GstMapInfo map;
- gint n, bs;
- gsize size;
-
- size = gst_buffer_get_size (buf);
-
- /* split the packet in 96 blocks of nibbles */
- bs = size * 2 / 96;
- if (bs == 0)
- return buf;
-
- buf = gst_buffer_make_writable (buf);
-
- gst_buffer_map (buf, &map, GST_MAP_WRITE);
-
- /* we need to perform 38 swaps on the blocks */
- for (n = 0; n < 38; n++) {
- gint idx1, idx2;
-
- /* get the indexes of the blocks of nibbles that need swapping */
- idx1 = bs * sipr_swap_index[n][0];
- idx2 = bs * sipr_swap_index[n][1];
-
- /* swap the blocks */
- gst_rm_utils_swap_nibbles (map.data, idx1, idx2, bs);
- }
- gst_buffer_unmap (buf, &map);
-
- return buf;
-}
-
-void
-gst_rm_utils_run_tests (void)
-{
-#if 0
- guint8 tab1[] = { 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe };
- guint8 tab2[8];
-
- memcpy (tab2, tab1, 8);
- gst_util_dump_mem (tab2, 8);
-
- gst_rm_utils_swap_nibbles (tab2, 0, 8, 4);
- gst_util_dump_mem (tab2, 8);
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 0, 8, 5);
- gst_util_dump_mem (tab2, 8);
-
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 1, 8, 4);
- gst_util_dump_mem (tab2, 8);
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 1, 8, 5);
- gst_util_dump_mem (tab2, 8);
-
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 0, 9, 4);
- gst_util_dump_mem (tab2, 8);
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 0, 9, 5);
- gst_util_dump_mem (tab2, 8);
-
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 1, 9, 4);
- gst_util_dump_mem (tab2, 8);
- memcpy (tab2, tab1, 8);
- gst_rm_utils_swap_nibbles (tab2, 1, 9, 5);
- gst_util_dump_mem (tab2, 8);
-#endif
-}
+++ /dev/null
-/* GStreamer RealMedia utility functions
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RM_UTILS_H__
-#define __GST_RM_UTILS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef gchar * (*GstRmUtilsStringReadFunc) (const guint8 * data, guint datalen, guint * p_strlen);
-
-gchar *gst_rm_utils_read_string8 (const guint8 * data,
- guint datalen,
- guint * p_totallen);
-
-gchar *gst_rm_utils_read_string16 (const guint8 * data,
- guint datalen,
- guint * p_totallen);
-
-GstTagList *gst_rm_utils_read_tags (const guint8 * data,
- guint datalen,
- GstRmUtilsStringReadFunc func);
-
-GstBuffer *gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf);
-GstBuffer *gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf);
-
-void gst_rm_utils_run_tests (void);
-
-
-G_END_DECLS
-
-#endif /* __GST_RM_UTILS_H__ */
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rtspreal
- * @title: rtspreal
- *
- * A RealMedia RTSP extension
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <gst/rtsp/gstrtspextension.h>
-
-#include "realhash.h"
-#include "rtspreal.h"
-#include "asmrules.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtspreal_debug);
-#define GST_CAT_DEFAULT (rtspreal_debug)
-
-#define SERVER_PREFIX "RealServer"
-#define DEFAULT_BANDWIDTH "10485800"
-
-static GstRTSPResult
-rtsp_ext_real_get_transports (GstRTSPExtension * ext,
- GstRTSPLowerTrans protocols, gchar ** transport)
-{
- GstRTSPReal *ctx = (GstRTSPReal *) ext;
- GString *str;
-
- if (!ctx->isreal)
- return GST_RTSP_OK;
-
- GST_DEBUG_OBJECT (ext, "generating transports for %d", protocols);
-
- str = g_string_new ("");
-
- /*
- if (protocols & GST_RTSP_LOWER_TRANS_UDP_MCAST) {
- g_string_append (str, "x-real-rdt/mcast;client_port=%%u1;mode=play,");
- }
- if (protocols & GST_RTSP_LOWER_TRANS_UDP) {
- g_string_append (str, "x-real-rdt/udp;client_port=%%u1;mode=play,");
- g_string_append (str, "x-pn-tng/udp;client_port=%%u1;mode=play,");
- }
- */
- if (protocols & GST_RTSP_LOWER_TRANS_TCP) {
- g_string_append (str, "x-real-rdt/tcp;mode=play,");
- g_string_append (str, "x-pn-tng/tcp;mode=play,");
- }
-
- /* if we added something, remove trailing ',' */
- if (str->len > 0)
- g_string_truncate (str, str->len - 1);
-
- *transport = g_string_free (str, FALSE);
-
- return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
- GstRTSPReal *ctx = (GstRTSPReal *) ext;
-
- switch (request->type_data.request.method) {
- case GST_RTSP_OPTIONS:
- {
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_USER_AGENT,
- //"RealMedia Player (" GST_PACKAGE_NAME ")");
- "RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_CHALLENGE,
- "9e26d33f2984236010ef6253fb1887f7");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_COMPANY_ID,
- "KnKV4M4I/B2FjJ1TToLycw==");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
- "00000000-0000-0000-0000-000000000000");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_PLAYER_START_TIME,
- "[28/03/2003:22:50:23 00:00]");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
- "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
- ctx->isreal = FALSE;
- break;
- }
- case GST_RTSP_DESCRIBE:
- {
- if (ctx->isreal) {
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_BANDWIDTH,
- DEFAULT_BANDWIDTH);
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
- "00000000-0000-0000-0000-000000000000");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
- "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_MAX_ASM_WIDTH, "1");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_LANGUAGE, "en-US");
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_REQUIRE,
- "com.real.retain-entity-for-setup");
- }
- break;
- }
- case GST_RTSP_SETUP:
- {
- if (ctx->isreal) {
- gchar *value =
- g_strdup_printf ("%s, sd=%s", ctx->challenge2, ctx->checksum);
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_REAL_CHALLENGE2,
- value);
- gst_rtsp_message_add_header (request, GST_RTSP_HDR_IF_MATCH, ctx->etag);
- g_free (value);
- }
- break;
- }
- default:
- break;
- }
- return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-rtsp_ext_real_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
- GstRTSPMessage * resp)
-{
- GstRTSPReal *ctx = (GstRTSPReal *) ext;
-
- switch (req->type_data.request.method) {
- case GST_RTSP_OPTIONS:
- {
- gchar *challenge1 = NULL;
- gchar *server = NULL;
-
- gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
-
- gst_rtsp_message_get_header (resp, GST_RTSP_HDR_REAL_CHALLENGE1,
- &challenge1, 0);
- if (!challenge1)
- goto no_challenge1;
-
- gst_rtsp_ext_real_calc_response_and_checksum (ctx->challenge2,
- ctx->checksum, challenge1);
-
- GST_DEBUG_OBJECT (ctx, "Found Real challenge tag");
- ctx->isreal = TRUE;
- break;
- }
- case GST_RTSP_DESCRIBE:
- {
- gchar *etag = NULL;
- guint len;
-
- gst_rtsp_message_get_header (resp, GST_RTSP_HDR_ETAG, &etag, 0);
- if (etag) {
- len = sizeof (ctx->etag);
- strncpy (ctx->etag, etag, len);
- ctx->etag[len - 1] = '\0';
- }
- break;
- }
- default:
- break;
- }
- return GST_RTSP_OK;
-
- /* ERRORS */
-no_challenge1:
- {
- GST_DEBUG_OBJECT (ctx, "Could not find challenge tag.");
- ctx->isreal = FALSE;
- return GST_RTSP_OK;
- }
-}
-
-#define ENSURE_SIZE(size) \
-G_STMT_START { \
- while (data_len < size) { \
- data_len += 1024; \
- data = g_realloc (data, data_len); \
- } \
-} G_STMT_END
-
-#define READ_BUFFER_GEN(src, func, name, dest, dest_len) \
-G_STMT_START { \
- dest = (gchar *)func (src, name); \
- dest_len = 0; \
- if (!dest) { \
- dest = (char *) ""; \
- } \
- else if (!strncmp (dest, "buffer;\"", 8)) { \
- dest += 8; \
- dest_len = strlen (dest) - 1; \
- dest[dest_len] = '\0'; \
- g_base64_decode_inplace (dest, &dest_len); \
- } \
-} G_STMT_END
-
-#define READ_BUFFER(sdp, name, dest, dest_len) \
- READ_BUFFER_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest, dest_len)
-#define READ_BUFFER_M(media, name, dest, dest_len) \
- READ_BUFFER_GEN(media, gst_sdp_media_get_attribute_val, name, dest, dest_len)
-
-#define READ_INT_GEN(src, func, name, dest) \
-G_STMT_START { \
- const gchar *val = func (src, name); \
- if (val && !strncmp (val, "integer;", 8)) \
- dest = atoi (val + 8); \
- else \
- dest = 0; \
-} G_STMT_END
-
-#define READ_INT(sdp, name, dest) \
- READ_INT_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest)
-#define READ_INT_M(media, name, dest) \
- READ_INT_GEN(media, gst_sdp_media_get_attribute_val, name, dest)
-
-#define READ_STRING(media, name, dest, dest_len) \
-G_STMT_START { \
- const gchar *val = gst_sdp_media_get_attribute_val (media, name); \
- if (val && !strncmp (val, "string;\"", 8)) { \
- dest = (gchar *) val + 8; \
- dest_len = strlen (dest) - 1; \
- dest[dest_len] = '\0'; \
- } else { \
- dest = (char *) ""; \
- dest_len = 0; \
- } \
-} G_STMT_END
-
-#define WRITE_STRING1(datap, str, str_len) \
-G_STMT_START { \
- *datap = str_len; \
- memcpy ((datap) + 1, str, str_len); \
- datap += str_len + 1; \
-} G_STMT_END
-
-#define WRITE_STRING2(datap, str, str_len) \
-G_STMT_START { \
- GST_WRITE_UINT16_BE (datap, str_len); \
- memcpy (datap + 2, str, str_len); \
- datap += str_len + 2; \
-} G_STMT_END
-
-static GstRTSPResult
-rtsp_ext_real_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
- GstStructure * props)
-{
- GstRTSPReal *ctx = (GstRTSPReal *) ext;
- guint size;
- gint i;
- gchar *title, *author, *copyright, *comment;
- gsize title_len, author_len, copyright_len, comment_len;
- guint8 *data = NULL, *datap;
- guint data_len = 0, offset;
- GstBuffer *buf;
- gchar *opaque_data;
- gsize opaque_data_len, asm_rule_book_len;
- GHashTable *vars;
- GString *rules;
-
- /* don't bother for non-real formats */
- READ_INT (sdp, "IsRealDataType", ctx->isreal);
- if (!ctx->isreal)
- return TRUE;
-
- /* Force PAUSE | PLAY */
- //src->methods |= GST_RTSP_PLAY | GST_RTSP_PAUSE;
-
- ctx->n_streams = gst_sdp_message_medias_len (sdp);
-
- ctx->max_bit_rate = 0;
- ctx->avg_bit_rate = 0;
- ctx->max_packet_size = 0;
- ctx->avg_packet_size = 0;
- ctx->duration = 0;
-
- for (i = 0; i < ctx->n_streams; i++) {
- const GstSDPMedia *media;
- gint intval;
-
- media = gst_sdp_message_get_media (sdp, i);
-
- READ_INT_M (media, "MaxBitRate", intval);
- ctx->max_bit_rate += intval;
- READ_INT_M (media, "AvgBitRate", intval);
- ctx->avg_bit_rate += intval;
- READ_INT_M (media, "MaxPacketSize", intval);
- ctx->max_packet_size = MAX (ctx->max_packet_size, intval);
- READ_INT_M (media, "AvgPacketSize", intval);
- ctx->avg_packet_size = (ctx->avg_packet_size * i + intval) / (i + 1);
- READ_INT_M (media, "Duration", intval);
- ctx->duration = MAX (ctx->duration, intval);
- }
-
- /* FIXME: use GstByteWriter to write the header */
- /* PROP */
- offset = 0;
- size = 50;
- ENSURE_SIZE (size);
- datap = data + offset;
-
- memcpy (datap + 0, "PROP", 4);
- GST_WRITE_UINT32_BE (datap + 4, size);
- GST_WRITE_UINT16_BE (datap + 8, 0);
- GST_WRITE_UINT32_BE (datap + 10, ctx->max_bit_rate);
- GST_WRITE_UINT32_BE (datap + 14, ctx->avg_bit_rate);
- GST_WRITE_UINT32_BE (datap + 18, ctx->max_packet_size);
- GST_WRITE_UINT32_BE (datap + 22, ctx->avg_packet_size);
- GST_WRITE_UINT32_BE (datap + 26, 0);
- GST_WRITE_UINT32_BE (datap + 30, ctx->duration);
- GST_WRITE_UINT32_BE (datap + 34, 0);
- GST_WRITE_UINT32_BE (datap + 38, 0);
- GST_WRITE_UINT32_BE (datap + 42, 0);
- GST_WRITE_UINT16_BE (datap + 46, ctx->n_streams);
- GST_WRITE_UINT16_BE (datap + 48, 0);
- offset += size;
-
- /* CONT */
- READ_BUFFER (sdp, "Title", title, title_len);
- READ_BUFFER (sdp, "Author", author, author_len);
- READ_BUFFER (sdp, "Comment", comment, comment_len);
- READ_BUFFER (sdp, "Copyright", copyright, copyright_len);
-
- size = 18 + title_len + author_len + comment_len + copyright_len;
- ENSURE_SIZE (offset + size);
- datap = data + offset;
-
- memcpy (datap, "CONT", 4);
- GST_WRITE_UINT32_BE (datap + 4, size);
- GST_WRITE_UINT16_BE (datap + 8, 0); /* Version */
- datap += 10;
- WRITE_STRING2 (datap, title, title_len);
- WRITE_STRING2 (datap, author, author_len);
- WRITE_STRING2 (datap, copyright, copyright_len);
- WRITE_STRING2 (datap, comment, comment_len);
- offset += size;
-
- /* fix the hashtale for the rule parser */
- rules = g_string_new ("");
- vars = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (vars, (gchar *) "Bandwidth",
- (gchar *) DEFAULT_BANDWIDTH);
-
- /* MDPR */
- for (i = 0; i < ctx->n_streams; i++) {
- const GstSDPMedia *media;
- guint32 len;
- GstRTSPRealStream *stream;
- gchar *str;
- gint rulematches[MAX_RULEMATCHES];
- gint sel, j, n;
-
- media = gst_sdp_message_get_media (sdp, i);
-
- if (media->media && !strcmp (media->media, "data"))
- continue;
-
- stream = g_new0 (GstRTSPRealStream, 1);
- ctx->streams = g_list_append (ctx->streams, stream);
-
- READ_INT_M (media, "MaxBitRate", stream->max_bit_rate);
- READ_INT_M (media, "AvgBitRate", stream->avg_bit_rate);
- READ_INT_M (media, "MaxPacketSize", stream->max_packet_size);
- READ_INT_M (media, "AvgPacketSize", stream->avg_packet_size);
- READ_INT_M (media, "StartTime", stream->start_time);
- READ_INT_M (media, "Preroll", stream->preroll);
- READ_INT_M (media, "Duration", stream->duration);
- READ_STRING (media, "StreamName", str, stream->stream_name_len);
- stream->stream_name = g_strndup (str, stream->stream_name_len);
- READ_STRING (media, "mimetype", str, stream->mime_type_len);
- stream->mime_type = g_strndup (str, stream->mime_type_len);
-
- /* FIXME: Depending on the current bandwidth, we need to select one
- * bandwidth out of a list offered by the server. Someone needs to write
- * a parser for strings like
- *
- * #($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,priority=9;
- * #($Bandwidth >= 67959) && ($Bandwidth < 167959),AverageBandwidth=67959,
- * Priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),
- * AverageBandwidth=0,Priority=5,OnDepend=\"1\";
- * #($Bandwidth >= 167959) && ($Bandwidth < 267959),
- * AverageBandwidth=167959,Priority=9;
- * #($Bandwidth >= 167959) && ($Bandwidth < 267959),AverageBandwidth=0,
- * Priority=5,OnDepend=\"3\";#($Bandwidth >= 267959),
- * AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959),
- * AverageBandwidth=0,Priority=5,OnDepend=\"5\";
- *
- * As I don't know how to do that, I just use the first entry (sel = 0).
- * But to give you a starting point, I offer you above string
- * in the variable 'asm_rule_book'.
- */
- READ_STRING (media, "ASMRuleBook", str, asm_rule_book_len);
- stream->rulebook = gst_asm_rule_book_new (str);
-
- n = gst_asm_rule_book_match (stream->rulebook, vars, rulematches);
- for (j = 0; j < n; j++) {
- g_string_append_printf (rules, "stream=%u;rule=%u,", i, rulematches[j]);
- }
-
- /* get the MLTI for the first matched rules */
- sel = rulematches[0];
-
- READ_BUFFER_M (media, "OpaqueData", opaque_data, opaque_data_len);
-
- if (opaque_data_len < 4) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
- opaque_data_len);
- goto strange_opaque_data;
- }
- if (strncmp (opaque_data, "MLTI", 4)) {
- GST_DEBUG_OBJECT (ctx, "no MLTI found, appending all");
- stream->type_specific_data_len = opaque_data_len;
- stream->type_specific_data = g_memdup2 (opaque_data, opaque_data_len);
- goto no_type_specific;
- }
- opaque_data += 4;
- opaque_data_len -= 4;
-
- if (opaque_data_len < 2) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
- opaque_data_len);
- goto strange_opaque_data;
- }
- stream->num_rules = GST_READ_UINT16_BE (opaque_data);
- opaque_data += 2;
- opaque_data_len -= 2;
-
- if (sel >= stream->num_rules) {
- GST_DEBUG_OBJECT (ctx, "sel %d >= num_rules %d", sel, stream->num_rules);
- goto strange_opaque_data;
- }
-
- if (opaque_data_len < 2 * sel) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
- " < 2 * sel (%d)", opaque_data_len, 2 * sel);
- goto strange_opaque_data;
- }
- opaque_data += 2 * sel;
- opaque_data_len -= 2 * sel;
-
- if (opaque_data_len < 2) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
- opaque_data_len);
- goto strange_opaque_data;
- }
- stream->codec = GST_READ_UINT16_BE (opaque_data);
- opaque_data += 2;
- opaque_data_len -= 2;
-
- if (opaque_data_len < 2 * (stream->num_rules - sel - 1)) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
- " < %d", opaque_data_len, 2 * (stream->num_rules - sel - 1));
- goto strange_opaque_data;
- }
- opaque_data += 2 * (stream->num_rules - sel - 1);
- opaque_data_len -= 2 * (stream->num_rules - sel - 1);
-
- if (opaque_data_len < 2) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
- opaque_data_len);
- goto strange_opaque_data;
- }
- stream->num_rules = GST_READ_UINT16_BE (opaque_data);
- opaque_data += 2;
- opaque_data_len -= 2;
-
- if (stream->codec > stream->num_rules) {
- GST_DEBUG_OBJECT (ctx, "codec %d > num_rules %d", stream->codec,
- stream->num_rules);
- goto strange_opaque_data;
- }
-
- for (j = 0; j < stream->codec; j++) {
- if (opaque_data_len < 4) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
- opaque_data_len);
- goto strange_opaque_data;
- }
- len = GST_READ_UINT32_BE (opaque_data);
- opaque_data += 4;
- opaque_data_len -= 4;
-
- if (opaque_data_len < len) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < len %d",
- opaque_data_len, len);
- goto strange_opaque_data;
- }
- opaque_data += len;
- opaque_data_len -= len;
- }
-
- if (opaque_data_len < 4) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
- opaque_data_len);
- goto strange_opaque_data;
- }
- stream->type_specific_data_len = GST_READ_UINT32_BE (opaque_data);
- opaque_data += 4;
- opaque_data_len -= 4;
-
- if (opaque_data_len < stream->type_specific_data_len) {
- GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < %d",
- opaque_data_len, stream->type_specific_data_len);
- goto strange_opaque_data;
- }
- stream->type_specific_data =
- g_memdup2 (opaque_data, stream->type_specific_data_len);
-
- no_type_specific:
- size =
- 46 + stream->stream_name_len + stream->mime_type_len +
- stream->type_specific_data_len;
- ENSURE_SIZE (offset + size);
- datap = data + offset;
-
- memcpy (datap, "MDPR", 4);
- GST_WRITE_UINT32_BE (datap + 4, size);
- GST_WRITE_UINT16_BE (datap + 8, 0);
- GST_WRITE_UINT16_BE (datap + 10, i);
- GST_WRITE_UINT32_BE (datap + 12, stream->max_bit_rate);
- GST_WRITE_UINT32_BE (datap + 16, stream->avg_bit_rate);
- GST_WRITE_UINT32_BE (datap + 20, stream->max_packet_size);
- GST_WRITE_UINT32_BE (datap + 24, stream->avg_packet_size);
- GST_WRITE_UINT32_BE (datap + 28, stream->start_time);
- GST_WRITE_UINT32_BE (datap + 32, stream->preroll);
- GST_WRITE_UINT32_BE (datap + 36, stream->duration);
- datap += 40;
- WRITE_STRING1 (datap, stream->stream_name, stream->stream_name_len);
- WRITE_STRING1 (datap, stream->mime_type, stream->mime_type_len);
- GST_WRITE_UINT32_BE (datap, stream->type_specific_data_len);
- if (stream->type_specific_data_len)
- memcpy (datap + 4, stream->type_specific_data,
- stream->type_specific_data_len);
- offset += size;
- }
-
- /* destroy the rulebook hashtable now */
- g_hash_table_destroy (vars);
-
- /* strip final , if we added some stream rules */
- if (rules->len > 0) {
- rules = g_string_truncate (rules, rules->len - 1);
- }
-
- /* and store rules in the context */
- ctx->rules = g_string_free (rules, FALSE);
-
- /* DATA */
- size = 18;
- ENSURE_SIZE (offset + size);
- datap = data + offset;
-
- memcpy (datap, "DATA", 4);
- GST_WRITE_UINT32_BE (datap + 4, size);
- GST_WRITE_UINT16_BE (datap + 8, 0);
- GST_WRITE_UINT32_BE (datap + 10, 0); /* number of packets */
- GST_WRITE_UINT32_BE (datap + 14, 0); /* next data header */
- offset += size;
-
- buf = gst_buffer_new_wrapped (data, offset);
-
- /* Set on caps */
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
- gst_structure_set (props, "config", GST_TYPE_BUFFER, buf, NULL);
- gst_buffer_unref (buf);
-
- /* Overwrite encoding and media fields */
- gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-REAL-RDT", NULL);
- gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
-
- return TRUE;
-
- /* ERRORS */
-strange_opaque_data:
- {
- g_string_free (rules, TRUE);
- g_hash_table_destroy (vars);
- g_free (data);
-
- GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE, ("Strange opaque data."), (NULL));
- return FALSE;
- }
-}
-
-static GstRTSPResult
-rtsp_ext_real_stream_select (GstRTSPExtension * ext, GstRTSPUrl * url)
-{
- GstRTSPReal *ctx = (GstRTSPReal *) ext;
- GstRTSPResult res;
- GstRTSPMessage request = { 0 };
- GstRTSPMessage response = { 0 };
- gchar *req_url;
-
- if (!ctx->isreal)
- return GST_RTSP_OK;
-
- if (!ctx->rules)
- return GST_RTSP_OK;
-
- req_url = gst_rtsp_url_get_request_uri (url);
-
- /* create SET_PARAMETER */
- if ((res = gst_rtsp_message_init_request (&request, GST_RTSP_SET_PARAMETER,
- req_url)) < 0)
- goto create_request_failed;
-
- g_free (req_url);
-
- gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SUBSCRIBE, ctx->rules);
-
- /* send SET_PARAMETER */
- if ((res = gst_rtsp_extension_send (ext, &request, &response)) < 0)
- goto send_error;
-
- gst_rtsp_message_unset (&request);
- gst_rtsp_message_unset (&response);
-
- return GST_RTSP_OK;
-
- /* ERRORS */
-create_request_failed:
- {
- GST_ELEMENT_ERROR (ctx, LIBRARY, INIT,
- ("Could not create request."), (NULL));
- g_free (req_url);
- goto reset;
- }
-send_error:
- {
- GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE,
- ("Could not send message."), (NULL));
- goto reset;
- }
-reset:
- {
- gst_rtsp_message_unset (&request);
- gst_rtsp_message_unset (&response);
- return res;
- }
-}
-
-static void gst_rtsp_real_extension_init (gpointer g_iface,
- gpointer iface_data);
-static void gst_rtsp_real_finalize (GObject * obj);
-
-#define gst_rtsp_real_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstRTSPReal, gst_rtsp_real, GST_TYPE_ELEMENT,
- G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
- gst_rtsp_real_extension_init));
-GST_ELEMENT_REGISTER_DEFINE (rtspreal, "rtspreal",
- GST_RANK_MARGINAL, GST_TYPE_RTSP_REAL);
-
-static void
-gst_rtsp_real_class_init (GstRTSPRealClass * g_class)
-{
- GObjectClass *gobject_class = (GObjectClass *) g_class;
- GstElementClass *gstelement_class = (GstElementClass *) g_class;
-
- gobject_class->finalize = gst_rtsp_real_finalize;
-
- gst_element_class_set_static_metadata (gstelement_class,
- "RealMedia RTSP Extension", "Network/Extension/Protocol",
- "Extends RTSP so that it can handle RealMedia setup",
- "Wim Taymans <wim.taymans@gmail.com>");
-
- GST_DEBUG_CATEGORY_INIT (rtspreal_debug, "rtspreal", 0,
- "RealMedia RTSP extension");
-}
-
-static void
-gst_rtsp_real_init (GstRTSPReal * rtspreal)
-{
- rtspreal->isreal = FALSE;
-}
-
-static void
-gst_rtsp_stream_free (GstRTSPRealStream * stream)
-{
- g_free (stream->stream_name);
- g_free (stream->mime_type);
- gst_asm_rule_book_free (stream->rulebook);
- g_free (stream->type_specific_data);
-
- g_free (stream);
-}
-
-static void
-gst_rtsp_real_finalize (GObject * obj)
-{
- GstRTSPReal *r = (GstRTSPReal *) obj;
-
- g_list_foreach (r->streams, (GFunc) gst_rtsp_stream_free, NULL);
- g_list_free (r->streams);
- g_free (r->rules);
-
- G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gst_rtsp_real_extension_init (gpointer g_iface, gpointer iface_data)
-{
- GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
-
- iface->before_send = rtsp_ext_real_before_send;
- iface->after_send = rtsp_ext_real_after_send;
- iface->parse_sdp = rtsp_ext_real_parse_sdp;
- iface->stream_select = rtsp_ext_real_stream_select;
- iface->get_transports = rtsp_ext_real_get_transports;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTSP_REAL_H__
-#define __GST_RTSP_REAL_H__
-
-#include <gst/gst.h>
-
-#include "asmrules.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTSP_REAL (gst_rtsp_real_get_type())
-#define GST_IS_RTSP_REAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_REAL))
-#define GST_IS_RTSP_REAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_REAL))
-#define GST_RTSP_REAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_REAL, GstRTSPReal))
-#define GST_RTSP_REAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_REAL, GstRTSPRealClass))
-
-typedef struct _GstRTSPReal GstRTSPReal;
-typedef struct _GstRTSPRealClass GstRTSPRealClass;
-
-typedef struct _GstRTSPRealStream GstRTSPRealStream;
-
-struct _GstRTSPRealStream {
- guint id;
- guint max_bit_rate;
- guint avg_bit_rate;
- guint max_packet_size;
- guint avg_packet_size;
- guint start_time;
- guint preroll;
- guint duration;
- gchar *stream_name;
- guint stream_name_len;
- gchar *mime_type;
- guint mime_type_len;
-
- GstASMRuleBook *rulebook;
-
- gchar *type_specific_data;
- guint type_specific_data_len;
-
- guint16 num_rules, j, sel, codec;
-};
-
-struct _GstRTSPReal {
- GstElement element;
-
- gchar checksum[34];
- gchar challenge2[64];
- gchar etag[64];
- gboolean isreal;
-
- guint n_streams;
- GList *streams;
-
- guint max_bit_rate;
- guint avg_bit_rate;
- guint max_packet_size;
- guint avg_packet_size;
- guint duration;
-
- gchar *rules;
-};
-
-struct _GstRTSPRealClass {
- GstElementClass parent_class;
-};
-
-GType gst_rtsp_real_get_type(void);
-
-GST_ELEMENT_REGISTER_DECLARE (rtspreal);
-
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_REAL_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2006 Christophe Fergeau <teuf@gnome.org>
- * Copyright (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
-
-
-/**
- * SECTION:element-xingmux
- * @title: xingmux
- *
- * xingmux adds a Xing header to MP3 files. This contains information about the duration and size
- * of the file and a seek table and is very useful for getting an almost correct duration and better
- * seeking on VBR MP3 files.
- *
- * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 audiotestsrc num-buffers=1000 ! audioconvert ! lamemp3enc ! xingmux ! filesink location=test.mp3
- * gst-launch-1.0 filesrc location=test.mp3 ! xingmux ! filesink location=test2.mp3
- * gst-launch-1.0 filesrc location=test.mp3 ! mp3parse ! xingmux ! filesink location=test2.mp3
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include "gstxingmux.h"
-
-GST_DEBUG_CATEGORY_STATIC (xing_mux_debug);
-#define GST_CAT_DEFAULT xing_mux_debug
-
-#define gst_xing_mux_parent_class parent_class
-G_DEFINE_TYPE (GstXingMux, gst_xing_mux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (xingmux, "xingmux", GST_RANK_MARGINAL,
- GST_TYPE_XING_MUX);
-
-/* Xing Header stuff */
-#define GST_XING_FRAME_FIELD (1 << 0)
-#define GST_XING_BYTES_FIELD (1 << 1)
-#define GST_XING_TOC_FIELD (1 << 2)
-#define GST_XING_QUALITY_FIELD (1 << 3)
-
-typedef struct _GstXingSeekEntry
-{
- gint64 timestamp;
- gint byte;
-} GstXingSeekEntry;
-
-static inline GstXingSeekEntry *
-gst_xing_seek_entry_new (void)
-{
- return g_slice_new (GstXingSeekEntry);
-}
-
-static inline void
-gst_xing_seek_entry_free (GstXingSeekEntry * entry)
-{
- g_slice_free (GstXingSeekEntry, entry);
-}
-
-static void gst_xing_mux_finalize (GObject * obj);
-static GstStateChangeReturn
-gst_xing_mux_change_state (GstElement * element, GstStateChange transition);
-static GstFlowReturn gst_xing_mux_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-static gboolean gst_xing_mux_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-
-static GstStaticPadTemplate gst_xing_mux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, "
- "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
-
-
-static GstStaticPadTemplate gst_xing_mux_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, "
- "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
-static const guint mp3types_bitrates[2][3][16] = {
- {
- {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,},
- {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
- {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}
- },
- {
- {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}
- },
-};
-
-static const guint mp3types_freqs[3][3] = { {44100, 48000, 32000},
-{22050, 24000, 16000},
-{11025, 12000, 8000}
-};
-
-static gboolean
-parse_header (guint32 header, guint * ret_size, guint * ret_spf,
- gulong * ret_rate)
-{
- guint length, spf;
- gulong samplerate, bitrate, layer, padding;
- gint lsf, mpg25;
-
- if ((header & 0xffe00000) != 0xffe00000) {
- g_warning ("invalid sync");
- return FALSE;
- }
-
- if (((header >> 19) & 3) == 0x01) {
- g_warning ("invalid MPEG version");
- return FALSE;
- }
-
- if (((header >> 17) & 3) == 0x00) {
- g_warning ("invalid MPEG layer");
- return FALSE;
- }
-
- if (((header >> 12) & 0xf) == 0xf || ((header >> 12) & 0xf) == 0x0) {
- g_warning ("invalid bitrate");
- return FALSE;
- }
-
- if (((header >> 10) & 0x3) == 0x3) {
- g_warning ("invalid sampling rate");
- return FALSE;
- }
-
- if (header & 0x00000002) {
- g_warning ("invalid emphasis");
- return FALSE;
- }
-
- if (header & (1 << 20)) {
- lsf = (header & (1 << 19)) ? 0 : 1;
- mpg25 = 0;
- } else {
- lsf = 1;
- mpg25 = 1;
- }
-
- layer = 4 - ((header >> 17) & 0x3);
-
- bitrate = (header >> 12) & 0xF;
- bitrate = mp3types_bitrates[lsf][layer - 1][bitrate] * 1000;
- if (bitrate == 0)
- return FALSE;
-
- samplerate = (header >> 10) & 0x3;
- samplerate = mp3types_freqs[lsf + mpg25][samplerate];
-
- padding = (header >> 9) & 0x1;
-
- switch (layer) {
- case 1:
- length = 4 * ((bitrate * 12) / samplerate + padding);
- break;
- case 2:
- length = (bitrate * 144) / samplerate + padding;
- break;
- default:
- case 3:
- length = (bitrate * 144) / (samplerate << lsf) + padding;
- break;
- }
-
- if (layer == 1)
- spf = 384;
- else if (layer == 2 || lsf == 0)
- spf = 1152;
- else
- spf = 576;
-
- if (ret_size)
- *ret_size = length;
- if (ret_spf)
- *ret_spf = spf;
- if (ret_rate)
- *ret_rate = samplerate;
-
- return TRUE;
-}
-
-static guint
-get_xing_offset (guint32 header)
-{
- guint mpeg_version = (header >> 19) & 0x3;
- guint channel_mode = (header >> 6) & 0x3;
-
- if (mpeg_version == 0x3) {
- if (channel_mode == 0x3) {
- return 0x11;
- } else {
- return 0x20;
- }
- } else {
- if (channel_mode == 0x3) {
- return 0x09;
- } else {
- return 0x11;
- }
- }
-}
-
-static gboolean
-has_xing_header (guint32 header, GstBuffer * buffer, gsize size)
-{
- gboolean ret;
- GstMapInfo map;
- guint8 *data;
-
- gst_buffer_map (buffer, &map, GST_MAP_READ);
- data = map.data;
- data += 4;
- data += get_xing_offset (header);
-
- if (memcmp (data, "Xing", 4) == 0 ||
- memcmp (data, "Info", 4) == 0 || memcmp (data, "VBRI", 4) == 0)
- ret = TRUE;
- else
- ret = FALSE;
-
- gst_buffer_unmap (buffer, &map);
- return ret;
-}
-
-static GstBuffer *
-generate_xing_header (GstXingMux * xing)
-{
- guint8 *xing_flags;
- guint32 xing_flags_tmp = 0;
- GstBuffer *xing_header;
- GstMapInfo map;
- guchar *data;
-
- guint32 header;
- guint32 header_be;
- guint size, spf, xing_offset;
- gulong rate;
- guint bitrate = 0x00;
-
- gint64 duration;
- gint64 byte_count;
-
- header = xing->first_header;
-
- /* Set bitrate and choose lowest possible size */
- do {
- bitrate++;
-
- header &= 0xffff0fff;
- header |= bitrate << 12;
-
- if (!parse_header (header, &size, &spf, &rate)) {
- GST_ERROR ("Failed to parse header!");
- return NULL;
- }
- xing_offset = get_xing_offset (header);
- } while (size < (4 + xing_offset + 4 + 4 + 4 + 4 + 100) && bitrate < 0xe);
-
- if (bitrate == 0xe) {
- GST_ERROR ("No usable bitrate found!");
- return NULL;
- }
-
- xing_header = gst_buffer_new_and_alloc (size);
-
- gst_buffer_map (xing_header, &map, GST_MAP_WRITE);
- data = map.data;
- memset (data, 0, size);
- header_be = GUINT32_TO_BE (header);
- memcpy (data, &header_be, 4);
-
- data += 4;
- data += xing_offset;
-
- memcpy (data, "Xing", 4);
- data += 4;
-
- xing_flags = data;
- data += 4;
-
- if (xing->duration != GST_CLOCK_TIME_NONE) {
- duration = xing->duration;
- } else {
- GstFormat fmt = GST_FORMAT_TIME;
-
- if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &duration))
- duration = GST_CLOCK_TIME_NONE;
- }
-
- if (duration != GST_CLOCK_TIME_NONE) {
- guint32 number_of_frames;
-
- /* The Xing Header contains a NumberOfFrames field, which verifies to:
- * Duration = NumberOfFrames *SamplesPerFrame/SamplingRate
- * SamplesPerFrame and SamplingRate are values for the current frame.
- */
- number_of_frames = gst_util_uint64_scale (duration, rate, GST_SECOND) / spf;
- number_of_frames += 1; /* Xing Header Frame */
- GST_DEBUG ("Setting number of frames to %u", number_of_frames);
- number_of_frames = GUINT32_TO_BE (number_of_frames);
- memcpy (data, &number_of_frames, 4);
- xing_flags_tmp |= GST_XING_FRAME_FIELD;
- data += 4;
- }
-
- if (xing->byte_count != 0) {
- byte_count = xing->byte_count;
- } else {
- GstFormat fmt = GST_FORMAT_BYTES;
-
- if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &byte_count))
- byte_count = 0;
- if (byte_count == -1)
- byte_count = 0;
- }
-
- if (byte_count != 0) {
- guint32 nbytes;
-
- if (byte_count > G_MAXUINT32) {
- GST_DEBUG ("Too large stream: %" G_GINT64_FORMAT " > %u bytes",
- byte_count, G_MAXUINT32);
- } else {
- nbytes = byte_count;
- GST_DEBUG ("Setting number of bytes to %u", nbytes);
- nbytes = GUINT32_TO_BE (nbytes);
- memcpy (data, &nbytes, 4);
- xing_flags_tmp |= GST_XING_BYTES_FIELD;
- data += 4;
- }
- }
-
- if (xing->seek_table != NULL && byte_count != 0
- && duration != GST_CLOCK_TIME_NONE) {
- GList *it;
- gint percent = 0;
-
- xing_flags_tmp |= GST_XING_TOC_FIELD;
-
- GST_DEBUG ("Writing seek table");
- for (it = xing->seek_table; it != NULL && percent < 100; it = it->next) {
- GstXingSeekEntry *entry = (GstXingSeekEntry *) it->data;
- gint64 pos;
- guchar byte;
-
- while ((entry->timestamp * 100) / duration >= percent) {
- pos = (entry->byte * 256) / byte_count;
- GST_DEBUG (" %d %% -- %" G_GINT64_FORMAT " 1/256", percent, pos);
- byte = (guchar) pos;
- memcpy (data, &byte, 1);
- data++;
- percent++;
- }
- }
-
- if (percent < 100) {
- guchar b;
- gint i;
-
- memcpy (&b, data - 1, 1);
-
- for (i = percent; i < 100; i++) {
- GST_DEBUG (" %d %% -- %d 1/256", i, b);
- memcpy (data, &b, 1);
- data++;
- }
- }
- }
-
- GST_DEBUG ("Setting Xing flags to 0x%x\n", xing_flags_tmp);
- xing_flags_tmp = GUINT32_TO_BE (xing_flags_tmp);
- memcpy (xing_flags, &xing_flags_tmp, 4);
- gst_buffer_unmap (xing_header, &map);
- return xing_header;
-}
-
-static void
-gst_xing_mux_class_init (GstXingMuxClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_xing_mux_finalize);
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_xing_mux_change_state);
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_xing_mux_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_xing_mux_sink_template);
-
- GST_DEBUG_CATEGORY_INIT (xing_mux_debug, "xingmux", 0, "Xing Header Muxer");
-
- gst_element_class_set_static_metadata (gstelement_class, "MP3 Xing muxer",
- "Formatter/Muxer/Metadata",
- "Adds a Xing header to the beginning of a VBR MP3 file",
- "Christophe Fergeau <teuf@gnome.org>");
-}
-
-static void
-gst_xing_mux_finalize (GObject * obj)
-{
- GstXingMux *xing = GST_XING_MUX (obj);
-
- if (xing->adapter) {
- g_object_unref (xing->adapter);
- xing->adapter = NULL;
- }
-
- if (xing->seek_table) {
- g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
- g_list_free (xing->seek_table);
- xing->seek_table = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-xing_reset (GstXingMux * xing)
-{
- xing->duration = GST_CLOCK_TIME_NONE;
- xing->byte_count = 0;
-
- gst_adapter_clear (xing->adapter);
-
- if (xing->seek_table) {
- g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
- g_list_free (xing->seek_table);
- xing->seek_table = NULL;
- }
-
- xing->sent_xing = FALSE;
-}
-
-
-static void
-gst_xing_mux_init (GstXingMux * xing)
-{
- /* pad through which data comes in to the element */
- xing->sinkpad =
- gst_pad_new_from_static_template (&gst_xing_mux_sink_template, "sink");
- gst_pad_set_chain_function (xing->sinkpad,
- GST_DEBUG_FUNCPTR (gst_xing_mux_chain));
- gst_pad_set_event_function (xing->sinkpad,
- GST_DEBUG_FUNCPTR (gst_xing_mux_sink_event));
- GST_PAD_SET_PROXY_CAPS (xing->sinkpad);
- gst_element_add_pad (GST_ELEMENT (xing), xing->sinkpad);
-
- /* pad through which data goes out of the element */
- xing->srcpad =
- gst_pad_new_from_static_template (&gst_xing_mux_src_template, "src");
- gst_element_add_pad (GST_ELEMENT (xing), xing->srcpad);
-
- xing->adapter = gst_adapter_new ();
-
- xing_reset (xing);
-}
-
-static GstFlowReturn
-gst_xing_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
- GstXingMux *xing = GST_XING_MUX (parent);
- GstFlowReturn ret = GST_FLOW_OK;
-
- gst_adapter_push (xing->adapter, buffer);
-
- while (gst_adapter_available (xing->adapter) >= 4) {
- const guchar *data;
- guint32 header;
- GstBuffer *outbuf;
- GstClockTime duration;
- guint size, spf;
- gulong rate;
- GstXingSeekEntry *seek_entry;
-
- data = gst_adapter_map (xing->adapter, 4);
- header = GST_READ_UINT32_BE (data);
- gst_adapter_unmap (xing->adapter);
-
- if (!parse_header (header, &size, &spf, &rate)) {
- GST_DEBUG ("Lost sync, resyncing");
- gst_adapter_flush (xing->adapter, 1);
- continue;
- }
-
- if (gst_adapter_available (xing->adapter) < size)
- break;
-
- outbuf = gst_adapter_take_buffer (xing->adapter, size);
-
- if (!xing->sent_xing) {
- if (has_xing_header (header, outbuf, size)) {
- GST_LOG_OBJECT (xing, "Dropping old Xing header");
- gst_buffer_unref (outbuf);
- continue;
- } else {
- GstBuffer *xing_header;
- guint64 xing_header_size;
-
- xing->first_header = header;
-
- xing_header = generate_xing_header (xing);
-
- if (xing_header == NULL) {
- GST_ERROR ("Can't generate Xing header");
- gst_buffer_unref (outbuf);
- return GST_FLOW_ERROR;
- }
-
- xing_header_size = gst_buffer_get_size (xing_header);
-
- if ((ret = gst_pad_push (xing->srcpad, xing_header)) != GST_FLOW_OK) {
- GST_ERROR_OBJECT (xing, "Failed to push Xing header: %s",
- gst_flow_get_name (ret));
- gst_buffer_unref (xing_header);
- gst_buffer_unref (outbuf);
- return ret;
- }
-
- xing->byte_count += xing_header_size;
- xing->sent_xing = TRUE;
- }
- }
-
- seek_entry = gst_xing_seek_entry_new ();
- seek_entry->timestamp =
- (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
- /* Workaround for parsers checking that the first seek table entry is 0 */
- seek_entry->byte = (seek_entry->timestamp == 0) ? 0 : xing->byte_count;
- xing->seek_table = g_list_append (xing->seek_table, seek_entry);
-
- duration = gst_util_uint64_scale_ceil (spf, GST_SECOND, rate);
-
- GST_BUFFER_TIMESTAMP (outbuf) =
- (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
- GST_BUFFER_DURATION (outbuf) = duration;
- GST_BUFFER_OFFSET (outbuf) = xing->byte_count;
- xing->byte_count += gst_buffer_get_size (outbuf);
- GST_BUFFER_OFFSET_END (outbuf) = xing->byte_count;
-
- if (xing->duration == GST_CLOCK_TIME_NONE)
- xing->duration = duration;
- else
- xing->duration += duration;
-
- if ((ret = gst_pad_push (xing->srcpad, outbuf)) != GST_FLOW_OK) {
- GST_ERROR_OBJECT (xing, "Failed to push MP3 frame: %s",
- gst_flow_get_name (ret));
- return ret;
- }
- }
-
- return ret;
-}
-
-static gboolean
-gst_xing_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstXingMux *xing;
- gboolean result;
-
- xing = GST_XING_MUX (parent);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEGMENT:
- if (xing->sent_xing) {
- GST_ERROR ("Already sent Xing header, dropping NEWSEGMENT event!");
- gst_event_unref (event);
- result = FALSE;
- } else {
- GstSegment segment;
-
- gst_event_copy_segment (event, &segment);
-
- if (segment.format == GST_FORMAT_BYTES) {
- result = gst_pad_push_event (xing->srcpad, event);
- } else {
-
- gst_event_unref (event);
- gst_segment_init (&segment, GST_FORMAT_BYTES);
- event = gst_event_new_segment (&segment);
-
- result = gst_pad_push_event (xing->srcpad, event);
- }
- }
- break;
-
- case GST_EVENT_EOS:{
- GstEvent *n_event;
-
- GST_DEBUG_OBJECT (xing, "handling EOS event");
-
- if (xing->sent_xing) {
- GstSegment segment;
-
- gst_segment_init (&segment, GST_FORMAT_BYTES);
- n_event = gst_event_new_segment (&segment);
-
- if (G_UNLIKELY (!gst_pad_push_event (xing->srcpad, n_event))) {
- GST_WARNING
- ("Failed to seek to position 0 for pushing the Xing header");
- } else {
- GstBuffer *header;
- GstFlowReturn ret;
-
- header = generate_xing_header (xing);
-
- if (header == NULL) {
- GST_ERROR ("Can't generate Xing header");
- } else {
-
- GST_INFO ("Writing real Xing header to beginning of stream");
-
- if ((ret = gst_pad_push (xing->srcpad, header)) != GST_FLOW_OK)
- GST_WARNING ("Failed to push updated Xing header: %s\n",
- gst_flow_get_name (ret));
- }
- }
- }
- result = gst_pad_push_event (xing->srcpad, event);
- break;
- }
- default:
- result = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return result;
-}
-
-
-static GstStateChangeReturn
-gst_xing_mux_change_state (GstElement * element, GstStateChange transition)
-{
- GstXingMux *xing;
- GstStateChangeReturn result;
-
- xing = GST_XING_MUX (element);
-
- result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- xing_reset (xing);
- break;
- default:
- break;
- }
-
- return result;
-}
+++ /dev/null
-/*
- * Copyright (c) 2006 Christophe Fergeau <teuf@gnome.org>
- * Copyright (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-#ifndef __GST_XINGMUX_H__
-#define __GST_XINGMUX_H__
-
-G_BEGIN_DECLS
-
-/* Standard macros for defining types for this element. */
-#define GST_TYPE_XING_MUX \
- (gst_xing_mux_get_type())
-#define GST_XING_MUX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
-#define GST_XING_MUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
-#define GST_IS_XING_MUX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
-#define GST_IS_XING_MUX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
-
-typedef struct _GstXingMux GstXingMux;
-typedef struct _GstXingMuxClass GstXingMuxClass;
-
-/* Definition of structure storing data for this element. */
-
-/**
- * GstXingMux:
- *
- * Opaque data structure.
- */
-struct _GstXingMux {
- GstElement element;
-
- GstPad *sinkpad, *srcpad;
-
- /* < private > */
-
- GstAdapter *adapter;
- GstClockTime duration;
- guint64 byte_count;
- guint64 frame_count;
- GList *seek_table;
- gboolean sent_xing;
-
- /* Copy of the first frame header */
- guint32 first_header;
-};
-
-/* Standard definition defining a class for this element. */
-
-/**
- * GstXingMuxClass:
- *
- * Opaque data structure.
- */
-struct _GstXingMuxClass {
- GstElementClass parent_class;
-};
-
-/* Standard function returning type information. */
-GType gst_xing_mux_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (xingmux);
-
-G_END_DECLS
-
-#endif /* __GST_XINGMUX_H__ */
+++ /dev/null
-xing_sources = [
- 'plugin.c',
- 'gstxingmux.c',
-]
-
-gstxingmux = library('gstxingmux',
- xing_sources,
- c_args : ugly_args,
- include_directories : [configinc],
- dependencies : [gstbase_dep],
- install : true,
- install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstxingmux, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstxingmux]
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2008> Jan Schmidt <jan.schmidt@sun.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include "gstxingmux.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return GST_ELEMENT_REGISTER (xingmux, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- xingmux,
- "Add XING tags to mpeg audio files",
- plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+++ /dev/null
-#!/bin/sh
-#
-# Check that the code follows a consistent code style
-#
-
-# Check for existence of indent, and error out if not present.
-# On some *bsd systems the binary seems to be called gnunindent,
-# so check for that first.
-
-version=`gnuindent --version 2>/dev/null`
-if test "x$version" = "x"; then
- version=`gindent --version 2>/dev/null`
- if test "x$version" = "x"; then
- version=`indent --version 2>/dev/null`
- if test "x$version" = "x"; then
- echo "GStreamer git pre-commit hook:"
- echo "Did not find GNU indent, please install it before continuing."
- exit 1
- else
- INDENT=indent
- fi
- else
- INDENT=gindent
- fi
-else
- INDENT=gnuindent
-fi
-
-case `$INDENT --version` in
- GNU*)
- ;;
- default)
- echo "GStreamer git pre-commit hook:"
- echo "Did not find GNU indent, please install it before continuing."
- echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
- exit 1
- ;;
-esac
-
-INDENT_PARAMETERS="--braces-on-if-line \
- --case-brace-indentation0 \
- --case-indentation2 \
- --braces-after-struct-decl-line \
- --line-length80 \
- --no-tabs \
- --cuddle-else \
- --dont-line-up-parentheses \
- --continuation-indentation4 \
- --honour-newlines \
- --tab-size8 \
- --indent-level2 \
- --leave-preprocessor-space"
-
-echo "--Checking style--"
-for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
- # nf is the temporary checkout. This makes sure we check against the
- # revision in the index (and not the checked out version).
- nf=`git checkout-index --temp ${file} | cut -f 1`
- newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
- $INDENT ${INDENT_PARAMETERS} \
- $nf -o $newfile 2>> /dev/null
- # FIXME: Call indent twice as it tends to do line-breaks
- # different for every second call.
- $INDENT ${INDENT_PARAMETERS} \
- $newfile 2>> /dev/null
- diff -u -p "${nf}" "${newfile}"
- r=$?
- rm "${newfile}"
- rm "${nf}"
- if [ $r != 0 ] ; then
-echo "================================================================================================="
-echo " Code style error in: $file "
-echo " "
-echo " Please fix before committing. Don't forget to run git add before trying to commit again. "
-echo " If the whole file is to be committed, this should work (run from the top-level directory): "
-echo " "
-echo " gst-indent $file; git add $file; git commit"
-echo " "
-echo "================================================================================================="
- exit 1
- fi
-done
-echo "--Checking style pass--"
+++ /dev/null
-project('gst-plugins-ugly', 'c',
- version : '1.19.2',
- meson_version : '>= 0.54',
- default_options : [ 'warning_level=1',
- 'buildtype=debugoptimized' ])
-
-gst_version = meson.project_version()
-version_arr = gst_version.split('.')
-gst_version_major = version_arr[0].to_int()
-gst_version_minor = version_arr[1].to_int()
-gst_version_micro = version_arr[2].to_int()
- if version_arr.length() == 4
- gst_version_nano = version_arr[3].to_int()
-else
- gst_version_nano = 0
-endif
-gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90
-
-have_cxx = add_languages('cpp', native: false, required: false)
-
-glib_req = '>= 2.56.0'
-gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)
-
-api_version = '1.0'
-
-plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
-plugins = []
-
-cc = meson.get_compiler('c')
-if have_cxx
- cxx = meson.get_compiler('cpp')
-endif
-
-if cc.get_id() == 'msvc'
- msvc_args = [
- # Ignore several spurious warnings for things gstreamer does very commonly
- # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
- # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
- # NOTE: Only add warnings here if you are sure they're spurious
- '/wd4018', # implicit signed/unsigned conversion
- '/wd4146', # unary minus on unsigned (beware INT_MIN)
- '/wd4244', # lossy type conversion (e.g. double -> int)
- '/wd4305', # truncating type conversion (e.g. double -> float)
- cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
-
- # Enable some warnings on MSVC to match GCC/Clang behaviour
- '/w14062', # enumerator 'identifier' in switch of enum 'enumeration' is not handled
- '/w14101', # 'identifier' : unreferenced local variable
- '/w14189', # 'identifier' : local variable is initialized but not referenced
- ]
- if have_cxx
- add_project_arguments(msvc_args, language: ['c', 'cpp'])
- else
- add_project_arguments(msvc_args, language: 'c')
- endif
- # Disable SAFESEH with MSVC for plugins and libs that use external deps that
- # are built with MinGW
- noseh_link_args = ['/SAFESEH:NO']
-else
- noseh_link_args = []
-endif
-
-if cc.has_link_argument('-Wl,-Bsymbolic-functions')
- add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
-endif
-if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
- add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
-endif
-
-cdata = configuration_data()
-check_headers = [
- ['HAVE_DLFCN_H', 'dlfcn.h'],
- ['HAVE_INTTYPES_H', 'inttypes.h'],
- ['HAVE_MALLOC_H', 'malloc.h'],
- ['HAVE_MEMORY_H', 'memory.h'],
- ['HAVE_STDINT_H', 'stdint.h'],
- ['HAVE_STDLIB_H', 'stdlib.h'],
- ['HAVE_STRINGS_H', 'strings.h'],
- ['HAVE_STRING_H', 'string.h'],
- ['HAVE_SYS_STAT_H', 'sys/stat.h'],
- ['HAVE_SYS_TYPES_H', 'sys/types.h'],
- ['HAVE_UNISTD_H', 'unistd.h'],
- ['HAVE_WINSOCK2_H', 'winsock2.h'],
-]
-
-foreach h : check_headers
- if cc.has_header(h.get(1))
- cdata.set(h.get(0), 1)
- endif
-endforeach
-
-check_functions = [
- ['HAVE_DCGETTEXT', 'dcgettext'], # FIXME: this looks unused
-]
-
-foreach f : check_functions
- if cc.has_function(f.get(1))
- cdata.set(f.get(0), 1)
- endif
-endforeach
-
-cdata.set('SIZEOF_CHAR', cc.sizeof('char'))
-cdata.set('SIZEOF_INT', cc.sizeof('int'))
-cdata.set('SIZEOF_LONG', cc.sizeof('long'))
-cdata.set('SIZEOF_SHORT', cc.sizeof('short'))
-cdata.set('SIZEOF_VOIDP', cc.sizeof('void*'))
-
-cdata.set_quoted('VERSION', gst_version)
-cdata.set_quoted('PACKAGE', 'gst-plugins-ugly')
-cdata.set_quoted('GST_LICENSE', 'LGPL')
-cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-ugly-1.0')
-cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
-
-# GStreamer package name and origin url
-gst_package_name = get_option('package-name')
-if gst_package_name == ''
- if gst_version_nano == 0
- gst_package_name = 'GStreamer Ugly Plug-ins source release'
- elif gst_version_nano == 1
- gst_package_name = 'GStreamer Ugly Plug-ins git'
- else
- gst_package_name = 'GStreamer Ugly Plug-ins prerelease'
- endif
-endif
-cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name)
-cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin'))
-
-# Mandatory GST deps
-gst_dep = dependency('gstreamer-1.0', version : gst_req,
- fallback : ['gstreamer', 'gst_dep'])
-gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'app_dep'])
-gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'video_dep'])
-gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'pbutils_dep'])
-gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'tag_dep'])
-gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'fft_dep'])
-gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'audio_dep'])
-gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
- fallback : ['gstreamer', 'gst_base_dep'])
-gstriff_dep = dependency('gstreamer-riff-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'riff_dep'])
-gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'rtp_dep'])
-gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req,
- fallback : ['gstreamer', 'gst_net_dep'])
-gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'sdp_dep'])
-gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req,
- fallback : ['gst-plugins-base', 'rtsp_dep'])
-gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
- required : get_option('tests'),
- fallback : ['gstreamer', 'gst_check_dep'])
-gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
- fallback : ['gstreamer', 'gst_controller_dep'])
-
-orc_dep = dependency('orc-0.4', version : '>= 0.4.16', required : get_option('orc'),
- fallback : ['orc', 'orc_dep'])
-if orc_dep.found()
- cdata.set('HAVE_ORC', 1) # used by a52dec for cpu detection
-else
- cdata.set('DISABLE_ORC', 1)
-endif
-
-gmodule_dep = dependency('gmodule-2.0', fallback : ['glib', 'libgmodule_dep'])
-
-if gmodule_dep.version().version_compare('< 2.67.4')
- cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)')
-endif
-
-ugly_args = ['-DHAVE_CONFIG_H']
-configinc = include_directories('.')
-libsinc = include_directories('gst-libs')
-
-# Disable compiler warnings for unused variables and args if gst debug system is disabled
-if gst_dep.type_name() == 'internal'
- gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
-else
- # We can't check that in the case of subprojects as we won't
- # be able to build against an internal dependency (which is not built yet)
- gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
-endif
-
-if gst_debug_disabled
- message('GStreamer debug system is disabled')
- if cc.has_argument('-Wno-unused')
- add_project_arguments('-Wno-unused', language: 'c')
- endif
- if have_cxx and cxx.has_argument ('-Wno-unused')
- add_project_arguments('-Wno-unused', language: 'cpp')
- endif
-else
- message('GStreamer debug system is enabled')
-endif
-
-warning_flags = [
- '-Wmissing-declarations',
- '-Wredundant-decls',
- '-Wwrite-strings',
- '-Wformat',
- '-Wformat-nonliteral',
- '-Wformat-security',
- '-Winit-self',
- '-Wmissing-include-dirs',
- '-Waddress',
- '-Wno-multichar',
- '-Wvla',
- '-Wpointer-arith',
- '-Waggregate-return',
- '-fno-strict-aliasing',
- # Symbol visibility
- '-fvisibility=hidden',
-]
-
-warning_c_flags = [
- '-Wmissing-prototypes',
- '-Wold-style-definition',
- '-Wdeclaration-after-statement',
- '-Wnested-externs'
-]
-
-foreach extra_arg : warning_flags
- if cc.has_argument (extra_arg)
- add_project_arguments([extra_arg], language: 'c')
- endif
- if have_cxx and cxx.has_argument (extra_arg)
- add_project_arguments([extra_arg], language: 'cpp')
- endif
-endforeach
-
-foreach extra_arg : warning_c_flags
- if cc.has_argument (extra_arg)
- add_project_arguments([extra_arg], language: 'c')
- endif
-endforeach
-
-# Define G_DISABLE_DEPRECATED for development versions
-if gst_version_is_dev
- message('Disabling deprecated GLib API')
- add_project_arguments('-DG_DISABLE_DEPRECATED', language: 'c')
-endif
-
-cast_checks = get_option('gobject-cast-checks')
-if cast_checks.disabled() or (cast_checks.auto() and not gst_version_is_dev)
- message('Disabling GLib cast checks')
- add_project_arguments('-DG_DISABLE_CAST_CHECKS', language: 'c')
-endif
-
-glib_asserts = get_option('glib-asserts')
-if glib_asserts.disabled() or (glib_asserts.auto() and not gst_version_is_dev)
- message('Disabling GLib asserts')
- add_project_arguments('-DG_DISABLE_ASSERT', language: 'c')
-endif
-
-glib_checks = get_option('glib-checks')
-if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev)
- message('Disabling GLib checks')
- add_project_arguments('-DG_DISABLE_CHECKS', language: 'c')
-endif
-
-presetdir = join_paths(get_option('datadir'), 'gstreamer-' + api_version, 'presets')
-
-pkgconfig = import('pkgconfig')
-plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig')
-if get_option('default_library') == 'shared'
- # If we don't build static plugins there is no need to generate pc files
- plugins_pkgconfig_install_dir = disabler()
-endif
-
-python3 = import('python').find_installation()
-subdir('gst')
-subdir('ext')
-subdir('tests')
-
-# xgettext is optional (on Windows for instance)
-if find_program('xgettext', required : get_option('nls')).found()
- cdata.set('ENABLE_NLS', 1)
- subdir('po')
-endif
-subdir('docs')
-subdir('scripts')
-
-# Set release date
-if gst_version_nano == 0
- extract_release_date = find_program('scripts/extract-release-date-from-doap-file.py')
- run_result = run_command(extract_release_date, gst_version, files('gst-plugins-ugly.doap'))
- if run_result.returncode() == 0
- release_date = run_result.stdout().strip()
- cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date)
- message('Package release date: ' + release_date)
- else
- # Error out if our release can't be found in the .doap file
- error(run_result.stderr())
- endif
-endif
-
-configure_file(output : 'config.h', configuration : cdata)
-
-run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
-
-if meson.version().version_compare('>= 0.54')
- plugin_names = []
- foreach plugin: plugins
- # FIXME: Use str.subtring() when we can depend on Meson 0.56
- split = plugin.name().split('gst')
- if split.length() == 2
- plugin_names += [split[1]]
- else
- warning('Need substring API in meson >= 0.56 to properly parse plugin name: ' + plugin.name())
- plugin_names += [plugin.name()]
- endif
- endforeach
- summary({'Plugins':plugin_names}, list_sep: ', ')
-endif
+++ /dev/null
-option('x264_libraries', type : 'string', value : '',
- description : 'Colon separated list of additional x264 library paths, e.g. for 10-bit version')
-
-# Feature options for plugins without external deps
-option('asfdemux', type : 'feature', value : 'auto')
-option('dvdlpcmdec', type : 'feature', value : 'auto')
-option('dvdsub', type : 'feature', value : 'auto')
-option('realmedia', type : 'feature', value : 'auto')
-option('xingmux', type : 'feature', value : 'auto')
-
-# Feature options for plugins that need external deps
-option('a52dec', type : 'feature', value : 'auto', description : 'Dolby Digital (AC-3) audio decoder plugin')
-option('amrnb', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Narrow-Band audio codec plugin')
-option('amrwbdec', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Wide-Band audio decoder plugin')
-option('cdio', type : 'feature', value : 'auto', description : 'CD audio source plugin')
-option('dvdread', type : 'feature', value : 'auto', description : 'DVD video source plugin')
-option('mpeg2dec', type : 'feature', value : 'auto', description : 'MPEG 2 video decoder plugin')
-option('sidplay', type : 'feature', value : 'auto', description : 'Commodore 64 audio decoder plugin')
-option('x264', type : 'feature', value : 'auto', description : 'H.264 video encoder plugin')
-
-# Common feature options
-option('nls', type : 'feature', value : 'auto', yield: true,
- description : 'Enable native language support (translations)')
-option('orc', type : 'feature', value : 'auto', yield : true)
-option('tests', type : 'feature', value : 'auto', yield : true)
-option('gobject-cast-checks', type : 'feature', value : 'auto', yield : true,
- description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)')
-option('glib-asserts', type : 'feature', value : 'enabled', yield : true,
- description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)')
-option('glib-checks', type : 'feature', value : 'enabled', yield : true,
- description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)')
-
-# Common options
-option('package-name', type : 'string', yield : true,
- description : 'package name to use in plugins')
-option('package-origin', type : 'string', value : 'Unknown package origin', yield: true,
- description : 'package origin URL to use in plugins')
-option('doc', type : 'feature', value : 'auto', yield: true,
- description: 'Enable documentation.')
\ No newline at end of file
+++ /dev/null
-af ast az bg ca cs da de el en_GB eo es eu fi fr fur gl hr hu id it ja lt lv ms mt nb nl or pl pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN
+++ /dev/null
-ext/cdio/gstcdiocddasrc.c
-ext/dvdread/dvdreadsrc.c
-gst/asfdemux/gstasfdemux.c
+++ /dev/null
-# Translation of gstreamer plugin messages to Afrikaans.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Petri Jooste <rkwjpj@puk.ac.za>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.7.6\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-03-18 14:16+0200\n"
-"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
-"Language-Team: Afrikaans <i18n@af.org.za>\n"
-"Language: af\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-msgid "Could not open CD device for reading."
-msgstr "Kon nie CD-toestel oopmaak om te lees nie."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Toestel is nie oop nie."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Kon nie lêer \"%s\" oopmaak om in te skryf nie."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Fout tydens toemaak van lêer \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Kon nie lêer \"%s\" oopmaak om te lees nie."
-
-#~ msgid "No filename specified."
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Kon nie oudio-toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Kon nie beheertoestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Kon nie oudio-toestel \"%s\" konfigureer nie."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Kon nie klanktoestel \"%s\" verstel na %d Hz nie."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Kon nie beheertoestel \"%s\" toemaak nie."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Kon nie video-toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Kon nie video-toestel \"%s\" toemaak nie."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Kon nie skryf na toestel \"%s\" nie."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "OSS-toestel \"%s\" is reeds in gebruik deur 'n ander program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Kon nie toegang kry tot toestel \"%s\" nie, kyk na toegangsregte."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Toestel \"%s\" bestaan nie."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees nie."
-
-#~ msgid "Volume"
-#~ msgstr "Volume"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Sintetiseerder"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Luidspreker"
-
-#~ msgid "Line-in"
-#~ msgstr "Lyn-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofoon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Menger"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Neem op"
-
-#~ msgid "In-gain"
-#~ msgstr "In-versterking"
-
-#~ msgid "Out-gain"
-#~ msgstr "Uit-versterking"
-
-#~ msgid "Line-1"
-#~ msgstr "Lyn-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Lyn-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Lyn-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digitaal-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digitaal-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digitaal-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefoon-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefoon-uit"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Luidspreker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir lees nie."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir skryf nie."
-
-#, fuzzy
-#~ msgid "No filename given"
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#~ msgid "No device specified."
-#~ msgstr "Geen toestel gespesifiseer"
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
-
-#~ msgid "Device is open."
-#~ msgstr "Toestel is oop."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Toestel \"%s\" is nie 'n vasleggingtoestel nie."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Kon nie genoeg buffers vanaf toestel \"%s\" kry nie."
+++ /dev/null
-# Asturian translation for gst-plugins-ugly
-# This file is put in the public domain.
-#
-# enolp <enolp@softastur.org>, 2018.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-01 17:53+0200\n"
-"PO-Revision-Date: 2018-07-14 12:03+0100\n"
-"Last-Translator: enolp <enolp@softastur.org>\n"
-"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
-"Language: ast\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 2.0\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Nun pudo lleese dende'l CD."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Nun pudo abrise'l preséu de CDs pa la llectura."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "El discu nun ye un CD d'audiu."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "Nun pudo abrise'l DVD"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:621
-#: ext/dvdread/dvdreadsrc.c:628
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nun pudo abrise'l titulu del DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Fallu al dir al capítulu %d del títulu del DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:635
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Nun pudo abrise'l títulu del DVD %d. Esti elementu nun sofita los elementos interactivos."
-
-#: ext/dvdread/dvdreadsrc.c:990
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Nun pudo lleese'l DVD. Esto podría ser porque'l DVD ta cifráu y nun s'instaló una biblioteca de descifráu de DVDs."
-
-#: ext/dvdread/dvdreadsrc.c:993
-msgid "Could not read DVD."
-msgstr "Nun pudo lleese'l DVD."
-
-#: ext/lame/gstlamemp3enc.c:395
-msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr "Fallu al configurar el codificador d'audiu MP3 de LAME. Comprueba los parámetros de codificación."
-
-#: ext/lame/gstlamemp3enc.c:427 ext/twolame/gsttwolamemp2enc.c:488
-#, c-format
-msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-msgstr "La tasa de bits %d kbit/s solicitada pa la propieda «%s» nun ta permitida. Camudóse la tasa de bits a %d kbit/s."
-
-#: ext/twolame/gsttwolamemp2enc.c:411
-msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr "Fallu al configurar el codificador TwoLAME. Comprueba los parámetros de codificación."
-
-#: gst/asfdemux/gstasfdemux.c:446
-msgid "This stream contains no data."
-msgstr "Esti fluxu nun contién datos."
+++ /dev/null
-# Translation of 'gst-plugins' messages to Azerbaijani.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Mətin Əmirov <metin@karegen.com>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-0.8.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-03-19 18:29+0200\n"
-"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
-"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
-"Language: az\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.0.2\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "\"%s\" faylına yazıla bilmədi."
-
-msgid "Could not open CD device for reading."
-msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Avadanlıq açıq deyil."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "\"%s\" vfs faylı bağlana bilmədi."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "\"%s\" faylına yazıla bilmədi."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "\"%s\" faylına yazıla bilmədi."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "\"%s\" vfs faylı bağlana bilmədi."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "\"%s\" faylı yazma üçün açıla bilmədi."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "\"%s\" faylı bağlana bilmədi."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "\"%s\" faylı oxuma üçün açıla bilmədi."
-
-#~ msgid "No filename specified."
-#~ msgstr "Fayl adı verilməyib."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "\"%s\" audio avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "\"%s\" idarə avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "\"%s\" audio avadanlığı quraşdırıla bilmədi."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "\"%s\" audio avadanlığı %d Hz-ə keçirilə bilmədi."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "\"%s\" idarə avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "\"%s\" video avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "\"%s\" video avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "\"%s\" avadanlığına yazıla bilmədi."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "\"%s\" OSS avadanlığı başqa bir proqram tərəfindən istifadədədir."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "\"%s\" avadanlığına yetişə bilmədi, səlahiyyətlərini yoxlayın."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "\"%s\" avadanlığı mövcud deyil."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "\"%s\" avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "\"%s\" avadanlığı oxuma üçün açıla bilmədi."
-
-#~ msgid "Volume"
-#~ msgstr "Səs"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "İncə"
-
-#~ msgid "Synth"
-#~ msgstr "Sint"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Spiker"
-
-#~ msgid "Line-in"
-#~ msgstr "Xətd-giriş"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mikser"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Qeyd"
-
-#~ msgid "In-gain"
-#~ msgstr "Giriş-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Çıxış-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Xətd-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Xətd-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Xətd-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Dijital-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Dijital-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Dijital-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefon-girişi"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefon-çıxışı"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Spiker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "\"%s\" vfs faylı oxuma üçün açıla bilmədi."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Fayl adı verilməyib."
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "\"%s\" vfs faylı yazma üçün açıla bilmədi."
-
-#, fuzzy
-#~ msgid "No filename given"
-#~ msgstr "Fayl adı verilməyib."
-
-#~ msgid "No device specified."
-#~ msgstr "Avadanlıq bildirilməyib."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
-
-#~ msgid "Device is open."
-#~ msgstr "Avadanlıq açıqdır."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "\"%s\" avadanlığı capture avadanlığı deyil."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "\"%s\" avadanlığından kifayət qədər bufferlər alına bilmədi."
+++ /dev/null
-# Bulgarian translation of gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2016 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011, 2016.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2016-02-21 21:03+0200\n"
-"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
-"Language-Team: Bulgarian <dict@ludost.net>\n"
-"Language: bg\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "CD-то не може да бъде прочетено."
-
-msgid "Could not open CD device for reading."
-msgstr "Не може да се чете от устройството за CD-та."
-
-msgid "Disc is not an Audio CD."
-msgstr "Дискът не е аудио CD."
-
-msgid "Could not open DVD"
-msgstr "DVD-то не може да бъде отворено"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Заглавната част %d от DVD-то не може да бъде отворена"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Не може да се премине към раздел %d от заглавната част %d на DVD-то"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Заглавната част %d от DVD-то не може да бъде отворена. Интерактивни части не "
-"се поддържат от този елемент"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD-то не може да бъде прочетено. Причината може да е, че DVD-то е шифрирано "
-"и не е инсталирана библиотека за дешифриране."
-
-msgid "Could not read DVD."
-msgstr "DVD-то не може да бъде прочетено."
-
-msgid "This stream contains no data."
-msgstr "Потокът не съдържа данни."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Кодерът за mp3 — LAME не може да бъде настроен. Проверете настройките за "
-#~ "кодиране."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Поисканата честота в битове %d kbit/s за свойството „%s“ не е позволена. "
-#~ "Тя бе променена на %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Кодерът TwoLAME не може да бъде настроен. Проверете настройките за "
-#~ "кодиране."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Вътрешна грешка в потока от данни."
+++ /dev/null
-# Catalan translation for gstreamer.
-# Copyright © 2004, 2005, 2010 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Jordi Mallach <jordi@sindominio.net>, 2004, 2005, 2010.
-# Jordi Estrada <jordi.estrada@yamaha-motor.es>, 2011.
-# Gil Forcada <gforcada@gnome.org>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-01-01 14:19+0100\n"
-"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
-"Language-Team: Catalan <ca@dodds.net>\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "No s'ha pogut llegir des del CD."
-
-msgid "Could not open CD device for reading."
-msgstr "No s'ha pogut obrir el dispositiu de CD per a lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "El disc no és un CD d'àudio."
-
-msgid "Could not open DVD"
-msgstr "No s'ha pogut obrir el DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "No s'ha pogut obrir el títol %d del DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "No s'ha pogut anar al capítol %d del títol %d del DVD."
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"No s'ha pogut obrir el títol %d del DVD. Els títols interactius no són "
-"compatibles amb aquest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"No s'ha pogut llegir el DVD. Possiblement el DVD està encriptat i la "
-"biblioteca de desencriptació de DVD no està instal·lada."
-
-msgid "Could not read DVD."
-msgstr "No s'ha pogut llegir el DVD."
-
-msgid "This stream contains no data."
-msgstr "Aquest flux no conté dades."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "No s'ha pogut configurar el codificador LAME. Comproveu els paràmetres de "
-#~ "codificació."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La taxa de bits %d kbit/s per a la propietat «%s» no és permesa. S'ha "
-#~ "canviat la taxa de bits a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "No s'ha pogut configurar el codificador TwoLAME. Comproveu els paràmetres "
-#~ "de codificació."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "S'ha produït un error intern de flux de dades."
+++ /dev/null
-# Czech translations of gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009 the author(s) of gst-plugins-ugly.
-# Copyright (C) 2004 Miloslav Trmac <mitr@volny.cz>.
-# This file is put in the public domain.
-#
-# Miloslav Trmac <mitr@volny.cz>, 2004.
-# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
-# Marek Černocký <marek@manet.cz>, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2013-09-07 07:06+0200\n"
-"Last-Translator: Marek Černocký <marek@manet.cz>\n"
-"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Gtranslator 2.91.6\n"
-
-msgid "Could not read from CD."
-msgstr "Nezdařilo se čtení z CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nezdařilo se otevřít zařízení CD pro čtení."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk není zvukovým CD."
-
-msgid "Could not open DVD"
-msgstr "Nezdařilo se otevřít DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nezdařilo se otevřít titul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nezdařil se přechod na kapitolu %d titulu DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nezdařilo se otevřít titul DVD %d. Interaktivní tituly nejsou tímto prvkem "
-"podporovány"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nezdařilo se čtení DVD. To může být způsobeno tím, že je DVD šifrováno a "
-"knihovna pro dešifrování DVD není nainstalována."
-
-msgid "Could not read DVD."
-msgstr "Nezdařilo se čtení DVD."
-
-msgid "This stream contains no data."
-msgstr "Tento proud neobsahuje žádná data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Selhalo nastavení zvukového kodéru LAME mp3. Zkontrolujte parametry "
-#~ "kódování."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Požadovaný datový tok %d kb/s za sekundu není u vlastnosti „%s“ povolen. "
-#~ "Datový tok byl změněn na %d kb/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "Selhalo nastavení kodéru TwoLAME. Zkontrolujte parametry kódování."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interní chyba datového proudu."
+++ /dev/null
-# Danish translation of gst-plugins-ugly.
-# Copyright (C) 2011 gst.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Mogens Jaeger <mogens@jaeger.tf>, 2007.
-# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2011, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-09 03:56+0100\n"
-"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
-"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
-"Language: da\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Kunne ikke åbne cd."
-
-msgid "Could not open CD device for reading."
-msgstr "Kunne ikke åbne cd-enhed."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk er ikke en lyd-cd."
-
-msgid "Could not open DVD"
-msgstr "Kunne ikke åbne dvd"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunne ikke åbne dvd-titel %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Kunne ikke gå til kapitel %d i dvd-titel %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kunne ikke åbne dvd-titel %d. Interaktive titler er ikke understøttet i "
-"dette element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kunne ikke læse dvd. Dette kan være fordi dvd'en er krypteret og et dvd-"
-"dekrypteringsbibliotek ikke er installeret."
-
-msgid "Could not read DVD."
-msgstr "Kunne ikke læse dvd."
-
-msgid "This stream contains no data."
-msgstr "Denne strøm indeholder ingen data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere LAME mp3-lydindkoderen. Kontroller dine "
-#~ "indkoderparametre."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Den krævede bithastighed %d kbit/s for egenskab %s er ikke tilladt. "
-#~ "Bithastigheden blev ændret til %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere TwoLAME-indkoderen. Kontroller dine "
-#~ "indkoderparametre."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Intern datastrømfejl."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ugyldig titelinformation på dvd."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kunne ikke læse titelinformation på dvd."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kunne ikke åbne dvd-enhed %s."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Mislykkedes i at indstille PGC-baseret søgning."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Filen er krypteret og kan ikke afspilles."
+++ /dev/null
-# German translations for gst-plugins-ugly 1.3.2
-# Copyright (C) 2009 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# PCM = PCM
-# Line-in = Eingang
-# Line-out = Ausgang
-# Pipeline = Weiterleitung
-# Stream = Strom
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2011, 2012, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.3.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-05-22 18:29+0100\n"
-"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
-"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "Von der CD konnte nicht gelesen werden."
-
-msgid "Could not open CD device for reading."
-msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
-
-msgid "Disc is not an Audio CD."
-msgstr "Das Medium ist keine Audio-CD."
-
-msgid "Could not open DVD"
-msgstr "Die DVD konnte nicht geöffnet werden."
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Der Titel »%d« der DVD konnte nicht geöffnet werden."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Springen zu Kapitel %d des DVD-Titels »%d« schlug fehl"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Der DVD-Titel »%d« konnte nicht geöffnet werden. Interaktive Titel werden "
-"von diesem Element nicht unterstützt"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD konnten nicht gelesen werden. Dies könnte daran liegen, dass die DVD "
-"verschlüsselt ist und eine Bibliothek zur DVD-Entschlüsselung nicht "
-"installiert ist."
-
-msgid "Could not read DVD."
-msgstr "DVD konnten nicht gelesen werden."
-
-msgid "This stream contains no data."
-msgstr "Dieser Strom enthält keine Daten."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Konfigurieren des MP3 Audio-Enkodierers »LAME« schlug fehl. Überprüfen "
-#~ "Sie die Parameter zum Enkodieren."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Die angeforderte Bitrate von %d kBit/s ist für die Eigenschaft »%s« nicht "
-#~ "erlaubt. Die Bitrate wurde auf %d kBit/s abgeändert."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Konfigurieren des Enkodierers »TwoLAME« schlug fehl. Überprüfen Sie die "
-#~ "Parameter zum Enkodieren. "
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interner Datenstromfehler."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ungültige Titelinformation auf der DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Die Titelinformationen der DVD konnten nicht gelesen werden."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Öffnen des DVD-Geräts »%s« schlug fehl."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC-basiertes Suchen schlug fehl."
+++ /dev/null
-# Greek translation for gst-plugins-ugly package of GStreamer project.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Simos Xenitellis <simos.lists@googlemail.com>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-03-18 01:04+0100\n"
-"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
-"Language-Team: Greek <team@lists.gnome.gr>\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Δέν μπόρεσε να γινει ανάγνωση το CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Δέν ήταν δυνατό το άνοιγμα της συσκευής CD για την ανάγνωση. "
-
-msgid "Disc is not an Audio CD."
-msgstr "Ο δίσκος δεν είναι ένα ακουστικό CD."
-
-msgid "Could not open DVD"
-msgstr "Δεν ήταν δυνατό το άνοιγμα του DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Αποτυχία μετάβασης στο κεφάλαιο %d του τίτλου του DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d. Οι διαδραστικοί τίτλοι δεν "
-"υποστηρίζονται από αυτό το στοιχείο"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Δεν είναι δυνατή η ανάγνωση του DVD. Αυτό μπορεί να οφείλεται στο ότι το DVD "
-"είναι κρυπτογραφημένο και μια βιβλιοθήκη αποκρυπτογράφησης DVD δεν έχει "
-"εγκατασταθεί."
-
-msgid "Could not read DVD."
-msgstr "Δεν είναι δυνατή η ανάγνωση του DVD."
-
-msgid "This stream contains no data."
-msgstr "Η ροή αυτή δεν περιέχει καθόλου δεδομένα."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Αδυναμία ρύθμισης του κωδικοποιητή LAME. Ελέγξτε τις παραμέτρους "
-#~ "κωδικοποίησης."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Ο αιτούμενος ρυθμός μετάδοσης %d kbit/s για την ιδιοκτησία '%s' δεν είναι "
-#~ "επιτρεπτός.Ορυθμός μετάδοσης άλλαξε σε %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Αδυναμία ρύθμισης του κωδικοποιητή TwoLAME. Ελέγξτε τις παραμέτρους "
-#~ "κωδικοποίησης."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+++ /dev/null
-# English (British) translation.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Gareth Owen <gowen72@yahoo.com>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.8.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-04-26 10:41-0400\n"
-"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
-"Language-Team: English (British) <en_gb@li.org>\n"
-"Language: en_GB\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Could not write to file \"%s\"."
-
-msgid "Could not open CD device for reading."
-msgstr "Could not open CD device for reading."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Device is not open."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "Could not close vfs file \"%s\"."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Could not write to file \"%s\"."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Could not write to file \"%s\"."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Could not close vfs file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Could not open file \"%s\" for writing."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Error closing file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Could not open file \"%s\" for reading."
-
-#~ msgid "No filename specified."
-#~ msgstr "No filename specified."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "No or invalid input audio, AVI stream will be corrupt."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Could not open audio device \"%s\" for writing."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Could not open control device \"%s\" for writing."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Could not configure audio device \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Could not set audio device \"%s\" to %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Could not close audio device \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Could not close control device \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Could not open video device \"%s\" for writing."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Could not close video device \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Could not write to device \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "OSS device \"%s\" is already in use by another program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Could not access device \"%s\", check its permissions."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Device \"%s\" does not exist."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Could not open device \"%s\" for writing."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Could not open device \"%s\" for reading."
-
-#, fuzzy
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Your oss device could not be probed correctly"
-
-#~ msgid "Volume"
-#~ msgstr "Volume"
-
-#~ msgid "Bass"
-#~ msgstr "Bass"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Synth"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Speaker"
-
-#~ msgid "Line-in"
-#~ msgstr "Line-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Microphone"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mixer"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Record"
-
-#~ msgid "In-gain"
-#~ msgstr "In-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Out-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Line-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Line-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Line-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digital-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digital-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digital-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Phone-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Phone-out"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Speaker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Could not open vfs file \"%s\" for reading."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "No filename given"
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Could not open vfs file \"%s\" for writing."
-
-#~ msgid "No filename given"
-#~ msgstr "No filename given"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Your oss device could not be probed correctly"
-
-#~ msgid "No device specified."
-#~ msgstr "No device specified."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Could not open device \"%s\" for reading and writing."
-
-#~ msgid "Device is open."
-#~ msgstr "Device is open."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Device \"%s\" is not a capture device."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Could not get buffers from device \"%s\"."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Could not get enough buffers from device \"%s\"."
+++ /dev/null
-# Esperanto translations for gst-plugins-ugly.
-# Copyright (C) 2014 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
-# Benno Schulenberg <benno@vertaalt.nl>, 2014.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.4.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-09-21 21:03+0200\n"
-"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
-"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
-"Language: eo\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Lokalize 1.0\n"
-
-msgid "Could not read from CD."
-msgstr "Ne eblis legi de la KD."
-
-msgid "Could not open CD device for reading."
-msgstr "Ne eblis malfermi la KD-aparaton por legi."
-
-msgid "Disc is not an Audio CD."
-msgstr "La disko ne estas son-KD."
-
-msgid "Could not open DVD"
-msgstr "Ne eblis malfermi la DVD-n"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ne eblis malfermi titolon \"%d\" de la DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Fiaskis iri al ĉapitro %d de la DVD-titolo %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ne eblis malfermi DVD-titolon \"%d\"; ĉi tiu elemento ne subtenas interagajn "
-"titolojn"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Ne eblis legi la DVD-n. Eble la DVD estas ĉifrita sed biblioteko por DVD-"
-"malĉifrado ne estas instalita."
-
-msgid "Could not read DVD."
-msgstr "Ne eblis legi la DVD-n."
-
-msgid "This stream contains no data."
-msgstr "Tiu fluo enhavas neniun datumon."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "Fiaskis agordi la LAME-kodilon. Kontrolu viajn kodad-parametrojn."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La petita bitrapido je %d kbit/s ne estas permesata por la atributo \"%s"
-#~ "\". La bitrapido estas ŝanĝite al %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Fiaskis agordi la TwoLAME-kodilon. Kontrolu viajn kodad-parametrojn."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interna datum-flu-eraro."
+++ /dev/null
-# translation of gst-plugins-ugly-0.10.17.2.po to Español
-# spanish translation for gst-plugins-ugly
-# This file is put in the public domain.
-# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2009, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2011-10-02 15:45+0200\n"
-"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-
-msgid "Could not read from CD."
-msgstr "No se pudo leer del CD."
-
-msgid "Could not open CD device for reading."
-msgstr "No se pudo abrir el dispositivo de CD para su lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "El disco no es un CD de sonido."
-
-msgid "Could not open DVD"
-msgstr "No se pudo abrir el DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "No se pudo abrir el título %d del DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Falló al ir al capítulo %d del título %d del DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"No se pudo abrir el título %d del DVD. Los títulos interactivos no están "
-"soportados por este elemento."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"No se pudo leer el DVD. Puede ser debido a que el DVD está cifrado y la "
-"biblioteca de descifrado del DVD no está instalada."
-
-msgid "Could not read DVD."
-msgstr "No se pudo leer el DVD."
-
-msgid "This stream contains no data."
-msgstr "Este medio no contiene datos."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Falló al configurar el codificador LAME. Compruebe sus parámetros de "
-#~ "codificación."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La tasa de bits %d kbps solicitada para la propiedad «%s» no está "
-#~ "permitida. La tasa de bits se cambió a %d kbps."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Falló al configurar el codificador TwoLAME. Compruebe sus parámetros de "
-#~ "codificación."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Error del flujo de datos interno."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Información del título del DVD no válida."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "No se pudo leer la información del título para el DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Falló abrir el dispositivo DVD «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Falló al establecer la búsqueda basada en PGC."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Este archivo está cifrado y no se puede reproducir."
+++ /dev/null
-# translation of gst-plugins-ugly.master.po to Basque
-# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
-# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2009, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.13.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2010-03-07 13:12+0200\n"
-"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
-"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
-"Language: eu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Ezin izan da CDtik irakurri."
-
-msgid "Could not open CD device for reading."
-msgstr "Ezin izan da CD gailua ireki irakurtzeko."
-
-msgid "Disc is not an Audio CD."
-msgstr "Ez da Audio CD disko bat."
-
-msgid "Could not open DVD"
-msgstr "Ezin izan da DVDa ireki"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ezin izan da DVDko %d. titulua ireki"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Huts egin du DVDko %2$d. tituluaren %1$d. kapitulura joatean"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ezin izan da DVDko %d. titulua ireki. Elementu honek ez ditu onartzen titulu "
-"interaktiboak"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Ezin izan da DVDa ireki"
-
-msgid "This stream contains no data."
-msgstr "Korronte honek ez du daturik."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Ez da onartzen '%2$s' propietatearentzat eskatutako %1$d kbit/s-ko bit-"
-#~ "emaria. Bit-emaria aldatu egin da, eta orain %3$d kbit/s-koa da."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Datu-korrontearen barne-errorea."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Huts egin du LAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ezin izan da CDtik irakurri."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Ezin izan da DVDko %d. titulua ireki"
+++ /dev/null
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Finnish messages for gst-plugins-ugly.
-# Copyright (C) 2007 Ilkka Tuohela.
-# Copyright (C) 2008-2009 Tommi Vainikainen.
-# Suomennos: http://gnome.fi/
-#
-# Ilkka Tuohela <hile@iki.fi>, 2007.
-# Tommi Vainikainen <thv@iki.fi>, 2008-2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.10.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2009-03-10 20:41+0200\n"
-"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
-"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
-"Language: fi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.2\n"
-
-msgid "Could not read from CD."
-msgstr "Lukeminen CD:ltä ei onnistunut."
-
-msgid "Could not open CD device for reading."
-msgstr "CD-laitetta ei voitu avata luettavaksi."
-
-msgid "Disc is not an Audio CD."
-msgstr "Levy ei ole ääni-CD."
-
-msgid "Could not open DVD"
-msgstr "DVD:tä ei voitu avata"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD:n ohjelmaa %d ei voitu avata"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Ei voitu siirtyä kappaleeseen %d DVD:n ohjelmassa %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVD:n ohjelmaa %d ei voitu avata. Tämä elementti ei tue interaktiivisia "
-"ohjelmia"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "DVD:tä ei voitu avata"
-
-msgid "This stream contains no data."
-msgstr "Virta ei sisällä tietoa."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pyydetty bittinopeus %d kb/s ominaisuudelle \"%s\" ei ole sallittu. "
-#~ "Bittinopeus asetettiin arvoon %d kb/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Sisäinen tietovirtavirhe."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr "LAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD:llä on virheellisiä ohjelmatietoja."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ohjelmatietoja ei voitu lukea DVD:ltä."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVD-laitetta \"%s\" ei voitu avata."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC-pohjaista siirtymistä ei voitu asettaa."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Tiedosto on salattu eikä sitä voi toistaa."
+++ /dev/null
-# Translation of gst-plugins-ugly to French
-# Copyright (C) 2003-2011 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Claude Paroz <claude@2xlibre.net>, 2008-2011.
-# Stéphane Aulery <lkppo@free.fr>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-12-27 01:51+0100\n"
-"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
-"Language-Team: French <traduc@traduc.org>\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Impossible de lire le CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impossible d’ouvrir le lecteur de CD."
-
-msgid "Disc is not an Audio CD."
-msgstr "Le disque n’est pas un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Impossible d’ouvrir le DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impossible d’ouvrir le DVD intitulé %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Impossible d’aller au chapitre %d du DVD intitulé %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impossible d’ouvrir le DVD intitulé %d. Les titres interactifs ne sont pas "
-"pris en charge par cet élément"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impossible de lire le DVD. Il se peut que le DVD soit chiffré et qu’aucune "
-"bibliothèque de déchiffrement de DVD de ne soit installée."
-
-msgid "Could not read DVD."
-msgstr "Impossible de lire le DVD."
-
-msgid "This stream contains no data."
-msgstr "Ce flux ne contient aucune données."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "La configuration de l’encodeur audio mp3 LAME a échoué. Vérifiez vos "
-#~ "paramètres d’encodage."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Le débit de transfert demandé de %d kbit/s pour la propriété « %s » n’est "
-#~ "pas autorisé. Le débit de transfert a été défini à %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "La configuration de l’encodeur TwoLAME a échoué. Vérifiez vos paramètres "
-#~ "d’encodage."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erreur du flux de données interne."
+++ /dev/null
-# Friulian messages for gst-plugins-ugly-1.10.0.
-# This file is put in the public domain.
-# Fabio Tomat <f.t.public@gmail.com>, 2016.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2016-11-30 16:23+0100\n"
-"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
-"Language-Team: Friulian <f.t.public@gmail.com>\n"
-"Language: fur\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.8.11\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Impussibil lei dal CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impussibil vierzi il dispositîf CD par lei."
-
-msgid "Disc is not an Audio CD."
-msgstr "Il disc nol è un CD Audio."
-
-msgid "Could not open DVD"
-msgstr "Impussibil vierzi il DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impussibil vierzi il titul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "No si è rivâts a lâ al cjapitul %d dal titul DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impussibil vierzi il titul DVD %d. I titui interatîfs no son supuartâts di "
-"chest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impussibil lei il DVD. Al podarès jessi par vie che il DVD al è cifrât e une "
-"librarie di decifradure no je instalade."
-
-msgid "Could not read DVD."
-msgstr "Impussibil lei il DVD."
-
-msgid "This stream contains no data."
-msgstr "Il flus nol conten dâts."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "No si è rivâts a configurâ il codificadôr audio mp3 LAME. Controle i "
-#~ "parametris di codifiche."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Il bitrate domandât (%d kbit/s) pe proprietât '%s' nol è permetût. Il "
-#~ "bitrate al è stât cambiât a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "No si è rivâts a configurâ il codificadôr TwoLAME. Controle i parametris "
-#~ "di codifiche."
+++ /dev/null
-# Galician translation of gst-plugins-ugly.
-# Copyright (C) 2009 gst-plugins-ugly's COPYRIGHT HOLDER
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010.
-# Fran Dieguez <frandieguez@gnome.org>, 2012.
-# Francisco Diéguez <frandieguez@ubuntu.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-15 03:47+0200\n"
-"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
-"Language-Team: Galician <proxecto@trasno.net>\n"
-"Language: gl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.1\n"
-"X-Project-Style: gnome\n"
-
-msgid "Could not read from CD."
-msgstr "Non foi posíbel ler desde o CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Non foi posíbel abrir o dispositivo de CD para a súa lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "O disco non é un CD de son."
-
-msgid "Could not open DVD"
-msgstr "Non foi posíbel abrir o DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Non foi posíbel abrir o título %d do DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Produciuse un erro ao ir ao capítulo %d do título %d do DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Non foi posíbel abrir o título %d de DVD. Este elemento non é compatíbel cos "
-"títulos interactivos"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Non foi posíbel ler o DVD. Isto pode ser porque o DVD está cifrado e non ten "
-"instalada unha biblioteca de descifrado de DVD."
-
-msgid "Could not read DVD."
-msgstr "Non foi posíbel ler o DVD"
-
-msgid "This stream contains no data."
-msgstr "Este fluxo non contén datos."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Produciuse un erro ao configurar o codificador LAME mp3. Comprobe os seus "
-#~ "parámetros de codificación."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Non se permite o bitrate solicitado %d kbit/s para a propiedade '%s'. O "
-#~ "bitrate cambiouse a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Produciuse un fallo ao configurar o codificador TwoLAME. Comprobe os seus "
-#~ "parámetros de codificación."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erro de fluxo de datos interno."
+++ /dev/null
-# Translation of gst-plugins-ugly messages to Croatian.
-# This file is put in the public domain.
-# Copyright (C) 2004-2010, 2019 GStreamer core team.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
-# Božidar Putanec <bozidarp@yahoo.com>, 2016, 2018, 2019.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2019-02-03 13:14-0800\n"
-"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
-"Language-Team: Croatian <lokalizacija@linux.hr>\n"
-"Language: hr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.2.1\n"
-
-msgid "Could not read from CD."
-msgstr "Nije moguće čitati CD."
-
-msgid "Could not open CD device for reading."
-msgstr "CD uređaj nije moguće otvoriti za čitanje."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk nije Audio CD."
-
-msgid "Could not open DVD"
-msgstr "DVD nije moguće otvoriti"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nije moguće otvoriti DVD naslov %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nije uspjelo otvoriti poglavlje %d DVD naslova %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nije moguće otvoriti DVD naslov %d. Ovaj element ne podržava interaktivne "
-"naslove"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD nije moguće čitati. DVD je možda je šifriran a biblioteka za "
-"dešifriranje\n"
-"nije instalirana."
-
-msgid "Could not read DVD."
-msgstr "DVD nije moguće čitati."
-
-msgid "This stream contains no data."
-msgstr "Ovaj protok ne sadrži podatke."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Konfiguracija LAME mp3 audiokodera nije uspjela. Provjerite parametre "
-#~ "kodiranja."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Tražena brzina (bitrate) %d kbit/s za svojstvo „%s“ nije dopuštena. "
-#~ "Brzina (bitrate) je promijenjena u %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Konfiguracija TwoLAME kodera nije uspjela. Provjerite parametre kodiranja."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interna greška toka (stream) podataka."
+++ /dev/null
-# Hungarian translation of gst-plugins-ugly
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
-#
-# Gabor Kelemen <kelemeng@gnome.hu>, 2007, 2008, 2009, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-30 15:02+0100\n"
-"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
-"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "A CD nem olvasható."
-
-msgid "Could not open CD device for reading."
-msgstr "Nem nyitható meg a CD eszköz olvasásra."
-
-msgid "Disc is not an Audio CD."
-msgstr "A lemez nem hang CD."
-
-msgid "Could not open DVD"
-msgstr "A DVD nem nyitható meg"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nem nyitható meg a(z) %d. DVD cím"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "A(z) $%2d. DVD cím $%1d. fejezetére ugrás meghiúsult"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nem nyitható meg a(z) %d. DVD cím. Ez az elem nem támogatja az interaktív "
-"címeket."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nem olvasható a DVD. Ezt az okozhatja, hogy a DVD titkosított, és a DVD-"
-"visszafejtő programkönyvtár nincs telepítve."
-
-msgid "Could not read DVD."
-msgstr "Nem olvasható a DVD."
-
-msgid "This stream contains no data."
-msgstr "Ez az adatfolyam nem tartalmaz adatokat."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "A LAME MP3 hangkódoló beállítása meghiúsult. Ellenőrizze a kódolás "
-#~ "beállításait."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "A kért %d kbit/s bitsebesség nem engedélyezett a(z) „%s” tulajdonsághoz. "
-#~ "A bitsebesség módosítva %d kbit/s-re."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "A TwoLAME kódoló beállítása meghiúsult. Ellenőrizze a kódolás "
-#~ "beállításait."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Belső adatfolyam-hiba."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "A DVD címinformációi érvénytelenek."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "A DVD címinformációi nem olvashatók."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nem nyitható meg a DVD eszköz („%s”)."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "A PGC alapú keresés beállítása meghiúsult."
+++ /dev/null
-# Indonesian translations for gst-plugins-ugly package.
-# This file is put in the public domain.
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2009-2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-11-09 15:57+0100\n"
-"PO-Revision-Date: 2014-01-27 20:04+0700\n"
-"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
-"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
-"Language: id\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Tak dapat membaca dari CD."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Tak dapat membuka divais CD untuk dibaca."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "Cakram bukan CD Audio."
-
-#: ext/dvdread/dvdreadsrc.c:228 ext/dvdread/dvdreadsrc.c:235
-msgid "Could not open DVD"
-msgstr "Tak dapat membuka DVD"
-
-#: ext/dvdread/dvdreadsrc.c:242 ext/dvdread/dvdreadsrc.c:618
-#: ext/dvdread/dvdreadsrc.c:625
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Tak dapat membuka judul DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:248
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gagal pergi ke bab %d dari judul DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:632
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Tak dapat membuka judul DVD %d. Judul interaktif tidak didukung oleh elemen ini"
-
-#: ext/dvdread/dvdreadsrc.c:985
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Tak dapat membaca DVD. Hal ini karena DVD terenkripsi dan pustaka dekripsi DVD tidak diinstal."
-
-#: ext/dvdread/dvdreadsrc.c:988
-msgid "Could not read DVD."
-msgstr "Tak dapat membaca DVD."
-
-#: ext/lame/gstlamemp3enc.c:394
-msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr "Gagal mengatur penyandi audio mp3 LAME. Cek parameter penyandian anda."
-
-#: ext/lame/gstlamemp3enc.c:426 ext/twolame/gsttwolamemp2enc.c:486
-#, c-format
-msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-msgstr "Bitrasi %d kbit/s yang diminta untuk properti '%s' tidak diizinkan. Bitrasi diubah ke %d kbit/s."
-
-#: ext/twolame/gsttwolamemp2enc.c:411
-msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr "Gagal mengatur penyandi TwoLAME. Cek parameter penyandian anda."
-
-#: gst/asfdemux/gstasfdemux.c:412
-msgid "This stream contains no data."
-msgstr "Arus ini tidak berisi data."
-
-#: gst/asfdemux/gstasfdemux.c:419 gst/asfdemux/gstasfdemux.c:1971
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Informasi judul tidak sah pada DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Tak dapat membaca informasi judul untuk DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Gagal membuka divais DVD '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Gagal mengatur pencarian berbasis PGC."
+++ /dev/null
-# Italian translation for gst-plugins-ugly package of GStreamer project.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Luca Ferretti <elle.uca@infinito.it>, 2007, 2008, 2009.Luca Ferretti <elle.uca@infinito.it>, 2009.
-# Sebastiano Pistore <sebastianopistore.info@protonmail.ch>", 2017.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2017-09-15 09:56+0200\n"
-"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.0.3\n"
-
-msgid "Could not read from CD."
-msgstr "Impossibile leggere dal CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impossibile aprire il dispositivo CD in lettura."
-
-msgid "Disc is not an Audio CD."
-msgstr "Il disco non è un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Impossibile aprire il DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impossibile aprire il titolo %d del DVD"
-
-# go --> open (più comune in italiano)
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Apertura del capitolo %d del titolo %d del DVD non riuscita"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impossibile aprire il titolo %d del DVD. I titoli interattivi non sono "
-"supportati da questo elemento"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impossibile leggere il DVD. Questo potrebbe essere dovuto al fatto che il "
-"DVD è crittografato ed all'assenza nel sistema di una libreria di decodifica "
-"DVD."
-
-msgid "Could not read DVD."
-msgstr "Impossibile leggere il DVD."
-
-# NEW
-msgid "This stream contains no data."
-msgstr "Questo flusso non contiene dati."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Configurazione dell'encoder LAME mp3 non riuscita. Verificare i parametri "
-#~ "di codifica."
-
-# NEW
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Il bitrate richiesto di %d kbit/s per la proprietà «%s» non è consentito. "
-#~ "Il bitrate è stato cambiato a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Configurazione dell'encoder TwoLAME non riuscita. Verificare i parametri "
-#~ "di codifica."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Informazioni del titolo non valide sul DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Impossibile leggere le informazioni del titolo per il DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Apertura del device DVD «%s» non riuscita."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Impostazione del posizionamento basato su PGC non riuscita."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Errore interno dello stream di dati."
+++ /dev/null
-# Japanese translation of gst-plugins-ugly
-# Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Makoto Kato <makoto.kt@gmail.com>, 2009-2011
-# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-22 19:42+0900\n"
-"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
-"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "CDを読むことができません。"
-
-msgid "Could not open CD device for reading."
-msgstr "読み込み用にCDデバイスを開くことができません。"
-
-msgid "Disc is not an Audio CD."
-msgstr "ディスクは音声CDではありません。"
-
-msgid "Could not open DVD"
-msgstr "DVDを開くことができません"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVDタイトル %d を開くことができません"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "DVDタイトル %2$d のチャプター %1$d へ移動できません"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVDタイトル %d を開くことができません。この要素はインタラクティブタイトルをサ"
-"ポートしていません。"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVDを読み込むことができませんでした。DVDが暗号化されているかDVDを解読するライ"
-"ブラリがインストールされていないからかもしれません。"
-
-msgid "Could not read DVD."
-msgstr "DVDを読み込むことができません。"
-
-msgid "This stream contains no data."
-msgstr "このストリームはデータを含んでいません。"
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "LAME MP3 音声エンコーダーの構成に失敗しました。エンコーディングパラメータ"
-#~ "をチェックしてください。"
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "要求されたビットレート %d kbit/s はプロパティ '%s' では許可されません。そ"
-#~ "のためビットレートは %d kbit/s へ変更されました。"
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "TwoLAMEエンコーダーの構成に失敗しました。エンコード用のパラメータをチェッ"
-#~ "クしてください。"
-
-#~ msgid "Internal data stream error."
-#~ msgstr "内部データストリームエラー。"
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD上のタイトル情報が不正です。"
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "DVDからタイトル情報を読み込むことができません。"
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVDデバイス '%s' を開くことができません。"
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "プログラム・チェーン (PGC) のシークに失敗しました。"
+++ /dev/null
-# translation of gst-plugins-ugly-0.10.7.2 to Lithuanian
-# This file is put in the public domain.
-#
-# Gintautas Miliauskas <gintas@akl.lt>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.7.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2008-05-14 02:52+0300\n"
-"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
-"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
-"Language: lt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
-"%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Nepavyko perskaityti DVD įrašo informacijos."
-
-#, fuzzy
-msgid "Could not open CD device for reading."
-msgstr "Nepavyko atverti %d DVD įrašo"
-
-msgid "Disc is not an Audio CD."
-msgstr ""
-
-msgid "Could not open DVD"
-msgstr "Nepavyko atverti DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nepavyko atverti %d DVD įrašo"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nepavyko peršokti į %2$d DVD įrašo %1$d dalį"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nepavyko atverti %d DVD įrašo. Šis elementas nepalaiko interaktyvių įrašų"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Nepavyko atverti DVD"
-
-msgid "This stream contains no data."
-msgstr "Šiame sraute nėra duomenų."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pageidautas bitų dažnis %d kbit/s savybei „%s“ neleidžiamas. Bitų dažnis "
-#~ "pakeistas į %d kbit/s."
-
-#, fuzzy
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Netaisyklinga DVD įrašo informacija."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nepavyko perskaityti DVD įrašo informacijos."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nepavyko atverti DVD įrenginio „%s“."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Nepavyko nustatyti PGC paieškos."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Šis failas užšifruotas ir negali būti parodytas."
+++ /dev/null
-# Latvain translation of gst-plugins
-# This file is put in the public domain.
-# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
-# Rihards Prieditis <rprieditis@gmail.com>, 2011.
-# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2014.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-04-20 16:24+0300\n"
-"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
-"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
-"Language: lv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
-"2);\n"
-"X-Generator: Lokalize 1.5\n"
-
-msgid "Could not read from CD."
-msgstr "Nevarēja nolasīt no CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nevarēja atvērt CD ierīci lasīšanai."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disks nav Audio CD."
-
-msgid "Could not open DVD"
-msgstr "Nevarēja atvērt DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nevarēja atvērt DVD nosaukumu %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Neizdevās pāriet uz %d nodaļu DVD nosaukumā %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nevarēja atvērt DVD nosaukumu %d. Šis elements nenodrošina interaktīvos "
-"nosaukumus."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nevarēja nolasīt DVD. Iespējams, ka DVD ir šifrēts un DVD atšifrēšanas "
-"bibliotēka nav instalēta."
-
-msgid "Could not read DVD."
-msgstr "Nevarēja nolasīt DVD."
-
-msgid "This stream contains no data."
-msgstr "Šī straume nesatur datus."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Neizdevās konfigurēt LAME mp3 audio kodētāju. Pārbaudiet savus kodēšanas "
-#~ "parametrus."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pieprasītais straumēšanas ātrums %d kbiti/s nepieciešamajai īpašībai “%s” "
-#~ "nav atļauts. Straumēšanas ātrums tika mainīts uz %d kbitiem/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Neizdevās konfigurēt TwoLAME kodētāju. Pārbaudiet savus kodēšanas "
-#~ "parametrus."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Iekšēja datu plūsmas kļūda."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Nederīga DVD virsraksta informācija."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nevarēja nolasīt virsrakstu informāciju no DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Neizdevās atvērt DVD ierīci \"%s\"."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Neizdevās uzstādīt PCG balstīto meklēšanu."
+++ /dev/null
-i18n = import('i18n')
-
-i18n.gettext('gst-plugins-ugly-1.0', preset: 'glib')
+++ /dev/null
-# translation of gst-plugins-ugly-0.10.11.2.po to Malay
-# This file is put in the public domain.
-#
-# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.11.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2009-07-16 15:07+0800\n"
-"Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
-"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
-"Language: ms\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-msgid "Could not read from CD."
-msgstr "Tidak dapat baca dari CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Tidak dapat buka peranti CD untuk baca."
-
-msgid "Disc is not an Audio CD."
-msgstr "Cakera bukan CD Audio"
-
-msgid "Could not open DVD"
-msgstr "Tidak dapat buka DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Tidak dapat buka tajuk %d DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gagal untuk ke bab %d pata tajuk DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Gagal buka tajuk %d DVD. Tajuk interaktrif tidak disokong oleh elemen ini"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Tidak dapat buka DVD"
-
-msgid "This stream contains no data."
-msgstr "Aliran ini tiada data."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Kadarbit %d yang diminta untuk properti '%s' tidak dibenarkan. Kadarbit "
-#~ "telah ditukar ke %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Ralat aliran data dalaman."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr "Gagal mengkonfigur pengekod LAME. Periksa parameter pengenkod anda."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Maklumat tajuk pada DVD tidak sah."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Tidak dapat baca maklumat tajuk pada DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Gagal membuka peranti DVD %s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Gagal untuk menetapkan carian berasaskan PGC."
+++ /dev/null
-# Maltese translation for gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# NAME OF AUTHOR <michelbugeja@rabatmalta.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.9.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2008-11-13 18:18+0100\n"
-"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
-"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
-"Language: mt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Maltese\n"
-"X-Poedit-Country: Malta\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Ma nistax naqra mis-CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Ma nistax niftaħ is-CD biex naqra."
-
-msgid "Disc is not an Audio CD."
-msgstr "Id-diska mijhiex CD tal-awdjo."
-
-msgid "Could not open DVD"
-msgstr "Ma nistax niftaħ DVD."
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ma nistax niftaħ titlu %d tad-DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Problema biex immur kapitlu %d mit-titlu %d tad-DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ma nistax niftaħ titlu %d tad-DVD. Titli nterattivi mhux issapportjati minn "
-"dan l-element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Ma nistax niftaħ DVD."
-
-msgid "This stream contains no data."
-msgstr "L-istream ma fiha l-ebda data."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Mhux permess il-bitrate %d kbit/s rikjesta għal '%s'. Għalhekk il-bitrate "
-#~ "ġiet mibdula għal %d kbit/s."
-
-#, fuzzy
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Problema interna fid-data stream."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "L-informazzjoni tat-titlu tad-DVD mhux validu."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ma nistax naqra l-informazzjoni tat-titlu tad-DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Problema biex niftaħ l-apparat tad-DVD '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Problema biex nissettja tfittxija bbażata fuq PGC."
+++ /dev/null
-# Norwegian bokmaal translation of gst-plugins-ugly.
-# This file is put in the public domain.
-#
-# Kjartan Maraas <kmaraas@gnome.org>, 2004-2007.
-# Johnny A. Solbu <johnny@solbu.net>, 2012
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-21 21:38+0100\n"
-"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
-"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
-"Language: nb_NO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "Kunne ikke lese fra CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Kunne ikke åpne CD-enheten for lesing."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disken er ikke en lyd-CD."
-
-msgid "Could not open DVD"
-msgstr "Kunne ikke åpne DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunne ikke åpne DVD-tittel %d."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Klarte ikke å gå til kapittel %d på DVD tittel %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kunne ikke åpne DVD-tittel %d. Interaktive titler er ikke støttet av dette "
-"elementet"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kunne ikke lese DVD-en. Dette kan være fordi DVD-en er kryptert DVD-"
-"dekrypteringsbiblioteket ikke er installert."
-
-msgid "Could not read DVD."
-msgstr "Kunne ikke lese DVD"
-
-msgid "This stream contains no data."
-msgstr "Denne strømmen inneholde ikke data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "Kunne ikke konfigurere LAME-koder. Sjekk parametere for kodingen."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Forespurt bitrate %d kbit/s for egenskap «%s» er ikke tillatt. Bitraten "
-#~ "ble endret til %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere TwoLAME-enkoder. Sjekk parameterene for kodingen."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Intern feil i datastrøm."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Denne filen er kryptert og kan ikke spilles av."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ugyldig tittelinformasjon på DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kunne ikke åpne DVD-enhet «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Kunne ikke sette PGC-basert søking."
+++ /dev/null
-# translation of gst-plugins-ugly-1.10.0.nl.po to Dutch
-# Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2012, 2014, 2017.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2017-10-24 23:30+0100\n"
-"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
-"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 2.0\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "Kan niet van de cd lezen."
-
-msgid "Could not open CD device for reading."
-msgstr "Kan het CD-apparaat niet openen voor lezen."
-
-msgid "Disc is not an Audio CD."
-msgstr "De schrijf is geen audio-CD"
-
-msgid "Could not open DVD"
-msgstr "Kan DVD niet openen"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kan DVD-titel %d niet openen"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Kan niet naar hoofdstuk %d van DVD-titel %d gaan"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kan de DVD-titel %d niet openen. Interactieve titels worden door dit element "
-"niet ondersteund"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kon dvd niet lezen. Dit kan veroorzaakt zijn omdat de dvd versleuteld is en "
-"een bibliotheek voor ontcijferen van een dvd niet is geïnstalleerd."
-
-msgid "Could not read DVD."
-msgstr "Kon dvd niet lezen"
-
-msgid "This stream contains no data."
-msgstr "Deze stroom bevat geen gegevens."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Instellen van de LAME mp3-encoder is mislukt. Controleer uw parameters "
-#~ "voor codering."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "De gevraagde bitsnelheid %d kbits/s voor eigenschap '%s' is niet "
-#~ "toegestaan. De bitsnelheid is gewijzigd in %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kan de TwoLAME-encoder niet configureren. Controleer uw "
-#~ "encodingparameters."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Fout met interne gegevensstroom."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ongeldige titelinformatie op de DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kan de titelinformatie van de DVD niet lezen."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kan het DVD-apparaat '%s' niet openen."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Kan op PGC gebaseerd zoeken niet instellen."
+++ /dev/null
-# Oriya translation of gst-plugins-0.8.3.pot.
-# Copyright (C) 2004, Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-0.8.3 package.
-# Gora Mohanty <gora_mohanty@yahoo.co.in>, 2004.
-# $Id$
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-0.8.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-09-27 13:32+0530\n"
-"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
-"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
-"Language: or\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-msgid "Could not open CD device for reading."
-msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇ ନାହିଁ."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "\"%s\" ଫାଇଲ ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "No filename specified."
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଉଲ୍ଲେଖିତ ହୋଇ ନାହିଁ."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ରକୁ %d ହର୍ଜରେ ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରେ ଲେଖିହେଲା ନାହିଁ."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "\"%s\" ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ର ପୂର୍ବରୁ ଅନ୍ଯ କାରିକା ଦ୍ବାରା ବ୍ଯବହାର କରାଯାଉଛି."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ବ୍ଯବହାର କରିହେଲା ନାହିଁ, ତାହାର ଅନୁମତି ଦେଖନ୍ତୁ."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଅବସ୍ଥିତ ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Volume"
-#~ msgstr "ପ୍ରବଳତା"
-
-#~ msgid "Bass"
-#~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
-
-#~ msgid "Treble"
-#~ msgstr "ଉଚ୍ଚ ସ୍ବର"
-
-#~ msgid "Synth"
-#~ msgstr "ସିନ୍ଥେସାଇଜର"
-
-#~ msgid "PCM"
-#~ msgstr "ପି.ସି.ଏମ."
-
-#~ msgid "Speaker"
-#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
-
-#~ msgid "Line-in"
-#~ msgstr "ଲାଇନ-ଇନ"
-
-#~ msgid "Microphone"
-#~ msgstr "ମାଇକ୍ରୋଫୋନ୍"
-
-#~ msgid "CD"
-#~ msgstr "ସି.ଡି."
-
-#~ msgid "Mixer"
-#~ msgstr "ମିଶ୍ରଣ ଯନ୍ତ୍ର"
-
-#~ msgid "PCM-2"
-#~ msgstr "ପି.ସି.ଏମ.-୨"
-
-#~ msgid "Record"
-#~ msgstr "ଅନୁଲିପିକରଣ"
-
-#~ msgid "In-gain"
-#~ msgstr "ନିବେଶ-ବୃଦ୍ଧି"
-
-#~ msgid "Out-gain"
-#~ msgstr "ନିର୍ଗମ-ବୃଦ୍ଧି"
-
-#~ msgid "Line-1"
-#~ msgstr "ଲାଇନ-୧"
-
-#~ msgid "Line-2"
-#~ msgstr "ଲାଇନ-୨"
-
-#~ msgid "Line-3"
-#~ msgstr "ଲାଇନ-୩"
-
-#~ msgid "Digital-1"
-#~ msgstr "ସାଂଖ୍ଯିକ-୧"
-
-#~ msgid "Digital-2"
-#~ msgstr "ସାଂଖ୍ଯିକ-୨"
-
-#~ msgid "Digital-3"
-#~ msgstr "ସାଂଖ୍ଯିକ-୩"
-
-#~ msgid "Phone-in"
-#~ msgstr "ଫୋନ-ନିବେଶ"
-
-#~ msgid "Phone-out"
-#~ msgstr "ଫୋନ-ନିର୍ଗମ"
-
-#~ msgid "Video"
-#~ msgstr "ଭିଡିଓ"
-
-#~ msgid "Radio"
-#~ msgstr "ରେଡିଓ"
-
-#~ msgid "Monitor"
-#~ msgstr "ପ୍ରଦର୍ଶିକା"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
-
-#~ msgid "No device specified."
-#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Device is open."
-#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇଚ୍ଛି."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଗୋଟିଏ ଅନୁଲିପିକାର ନୁହେଁ."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ପର୍ଯ୍ଯାପ୍ତ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "%s ଉପାଦାନ ମିଳିଲା ନାହିଁ. ପୁନଃପ୍ରଦର୍ଶନ ପାଇଁ ଏହି ଉପାଦାନଟି ଆବଶ୍ଯକ. ଦୟା କରି ସଠିକ ପ୍ଲଗ୍ଇନ୍ "
-#~ "ସ୍ଥାପିତ କରନ୍ତୁ, ଓ 'gst-inspect %s' ଚଳାଇ ଯାଞ୍ଚ କରନ୍ତୁ କି ଏହା କାର୍ଯ୍ଯକାରୀ ଅଛି"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "କୌଣସି ବ୍ଯବହାରଯୋଗ୍ଯ ରଙ୍ଗକ୍ଷେତ୍ର ଉପାଦାନ ମିଳିଲା ନାହିଁ.\n"
-#~ "ଦୟା କରି ଗୋଟିଏ ଉପାଦାନ ସ୍ଥାପିତ କରି ପୁନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ."
+++ /dev/null
-# Polish translation for gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-28 19:34+0100\n"
-"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
-"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Odczyt z CD nie powiódł się."
-
-msgid "Could not open CD device for reading."
-msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
-
-msgid "Disc is not an Audio CD."
-msgstr "Płyta nie jest płytą CD Audio."
-
-msgid "Could not open DVD"
-msgstr "Nie udało się otworzyć DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nie udało się otworzyć tytułu DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nie udało się przemieścić do rozdziału %d tytułu DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nie udało się otworzyć tytułu DVD %d. Interaktywne tytułu nie są obsługiwane "
-"przez ten element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nie udało się odczytać DVD. Powodem może być to, że płyta jest zaszyfrowana, "
-"a biblioteka odszyfrowująca nie została zainstalowana."
-
-msgid "Could not read DVD."
-msgstr "Nie udało się odczytać DVD."
-
-msgid "This stream contains no data."
-msgstr "Ten strumień nie zawiera danych."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nie udało się skonfigurować kodera dźwięku mp3 LAME. Proszę sprawdzić "
-#~ "parametry kodowania."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Żądana prędkość bitowa %d kbit/s dla właściwości '%s' nie jest dozwolona. "
-#~ "Prędkość bitowa zmieniona na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nie udało się skonfigurować kodera TwoLAME. Proszę sprawdzić parametry "
-#~ "kodowania."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Błąd wewnętrzny strumienia danych."
+++ /dev/null
-# Brazilian Portuguese translation of gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Copyright (C) 2007-2013 Free Software Foundation, Inc.
-# Raphael Higino <In memoriam>, 2007.
-# Fabrício Godoy <skarllot@gmail.com>, 2008-2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-12-28 19:54-0200\n"
-"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
-"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
-"net>\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Não foi possível ler as informações do CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Não foi possível abrir o dispositivo de CD para leitura."
-
-msgid "Disc is not an Audio CD."
-msgstr "O disco não é um CD de áudio."
-
-msgid "Could not open DVD"
-msgstr "Não foi possível abrir o DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Não foi possível abrir o título %d do DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Falha ao avançar para o capítulo %d do título %d do DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Não foi possível abrir o título %d do DVD. Não há suporte a títulos "
-"interativos por este elemento"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Não foi possível ler o DVD. O motivo pode ser que o DVD está criptografado e "
-"uma biblioteca de descriptografia de DVD não está instalada."
-
-msgid "Could not read DVD."
-msgstr "Não foi possível ler o DVD."
-
-msgid "This stream contains no data."
-msgstr "Este fluxo não contém dados."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Falha ao configurar o codificador de áudio MP3 LAME. Verifique seus "
-#~ "parâmetros de codificação."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "A taxa de bits, %d kbits/s, requisitada pela propriedade \"%s\" não é "
-#~ "permitida. A taxa de bits foi alterada para %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Falha ao configurar o codificador TwoLAME. Verifique seus parâmetros de "
-#~ "codificação."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erro interno no fluxo de dados."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "As informações de título no DVD são inválidas."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Não foi possível ler as informações de título do DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Falha ao abrir o dispositivo de DVD \"%s\"."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Falha ao definir busca baseada em PGC."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Este arquivo está criptografado e não pôde ser reproduzido."
+++ /dev/null
-# Romanian translation for gst-plugins-ugly
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2010-08-16 03:32+0300\n"
-"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
-"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2);;\n"
-"X-Generator: Virtaal 0.6.1\n"
-
-msgid "Could not read from CD."
-msgstr "Nu s-a putut citi de pe CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nu s-a putut deschide dispozitivul CD pentru citire."
-
-msgid "Disc is not an Audio CD."
-msgstr "Discul nu este un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Nu s-a putut deschide DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nu s-a putut deschide titlul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nu s-a putut sări la capitolul %d al titlului DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nu s-a putut deschide titlul DVD %d. Titlurile interactive nu sunt suportate "
-"de acest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Nu s-a putut deschide DVD"
-
-msgid "This stream contains no data."
-msgstr "Fluxul acesta nu conține date."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Rata de biți solicitată de %d kbiți/s pentru proprietatea „%s” nu este "
-#~ "permisă. Rata de biți a fost modificată la %d kbiți/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Eroare internă a fluxului de date."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul LAME. Verificați parametrii de codare."
+++ /dev/null
-# Translation for gst-plugins-ugly messages to Russian
-# This file is put in the public domain.
-#
-# Артём Попов <artfwo@gmail.com>, 2009.
-# Pavel Maryanov <acid_jack@ukr.net>, 2009.
-# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-01 13:38+0400\n"
-"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <gnu@mx.ru>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-msgid "Could not read from CD."
-msgstr "Не удалось прочесть CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Не удалось открыть CD-устройство для чтения."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск не в формате аудио-CD."
-
-msgid "Could not open DVD"
-msgstr "Не удалось открыть DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не удалось открыть DVD-раздел %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Ошибка перехода к эпизоду %d DVD-раздела %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не удалось открыть DVD-раздел %d. Интерактивные разделы не поддерживаются "
-"этим элементом"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не удалось прочесть DVD. Это могло произойти из-за того, что DVD закодирован "
-"и не установлена библиотека декодирования DVD."
-
-msgid "Could not read DVD."
-msgstr "Не удалось прочесть DVD."
-
-msgid "This stream contains no data."
-msgstr "Поток не содержит данных."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Не удалось настроить аудио-кодировщик mp3 LAME. Проверьте параметры "
-#~ "кодирования."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Запрошенный битрейт в %d кбит/с для свойства «%s» недопустим. Битрейт был "
-#~ "изменён на %d кбит/с."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Не удалось настроить кодировщик TwoLAME. Проверьте параметры кодирования."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Внутренняя ошибка потока данных."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Неверные сведения о разделах на DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Не удалось прочесть сведения о разделах для DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Ошибка при открытии DVD-устройства «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Не удалось включить PGC-позиционирование."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Файл зашифрован и не может быть воспроизведён."
+++ /dev/null
-# Czech translations of gst-plugins.
-# Copyright (C) 2004 gst-plugins' COPYRIGHT HOLDER
-# This file is put in the public domain.
-# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2009, 2010, 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-01-30 10:28+0100\n"
-"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
-"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
-"Language: sk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Poedit-Language: Slovak\n"
-"X-Poedit-Country: SLOVAKIA\n"
-
-msgid "Could not read from CD."
-msgstr "Nepodarilo sa čítať z CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
-
-msgid "Disc is not an Audio CD."
-msgstr "Tento disk nie je zvukové CD."
-
-msgid "Could not open DVD"
-msgstr "Nepodarilo sa otvoriť DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nepodarilo sa otvoriť DVD titul %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nepodarilo sa preskočiť na kapitolu %d pre DVD titul %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nepodarilo sa otvoriť DVD titul %d. Interaktívne tituly nie sú podporované "
-"týmto prvkom"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nepodarilo sa čítať DVD. Možno je DVD šifrované a nie je nainštalovaná "
-"dešifrovacia knižnica."
-
-msgid "Could not read DVD."
-msgstr "Nepodarilo sa čítať DVD."
-
-msgid "This stream contains no data."
-msgstr "Tento prúd neobsahuje žiadne údaje."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nepodarilo sa nastaviť LAME mp3 enkodér. Skontrolujte svoje kódovacie "
-#~ "nastavenia, prosím."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Požadovaná bitová rýchlosť %d kbit/s pre vlastnosť '%s' nie je dovolená. "
-#~ "Bitová rýchlosť bola nastavená na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepodarilo sa nastaviť TwoLAME enkodér. Skontrolujte svoje kódovacie "
-#~ "nastavenia, prosím."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Vnútorná chyba prúdu údajov."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Chybný titul na DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nepodarilo sa načítať informáciu o titule DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nepodarilo sa otvoriť DVD zariadenie '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Nepodarilo sa nastaviť preskočenie na báze PGC. "
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Tento súbor je šifrovaný a nedá sa prehrať."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Nemohu otevřít soubor \"%s\" pro zápis."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Chyba při zavírání souboru \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Nemohu otevřít soubor \"%s\" pro čtení."
-
-#~ msgid "No filename specified."
-#~ msgstr "Nezadán název souboru."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Žádný nebo neplatný vstup zvuku, proud AVI bude poškozen."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zařízení zvuku \"%s\" pro zápis."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít řídicí zařízení \"%s\" pro zápis."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\" na %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Nemohu zavřít zařízení zvuku \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Nemohu zavřít řídicí zařízení \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zařízení videa \"%s\" pro zápis."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Nemohu zavřít zařízení videa \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Nemohu zapisovat do zařízení \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "Zařízení OSS \"%s\" již používá jiný program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Nemohu přistupovat k zařízení \"%s\", zkontrolujte jeho oprávnění."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Zařízení \"%s\" neexistuje."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zažízení \"%s\" pro zápis."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Nemohu otevřít zažízení \"%s\" pro čtení."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
-
-#~ msgid "Volume"
-#~ msgstr "Hlasitost"
-
-#~ msgid "Bass"
-#~ msgstr "Basy"
-
-#~ msgid "Treble"
-#~ msgstr "Výšky"
-
-#~ msgid "Synth"
-#~ msgstr "Synth"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Reproduktor"
-
-#~ msgid "Line-in"
-#~ msgstr "Line-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mixér"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Nahrávání"
-
-#~ msgid "In-gain"
-#~ msgstr "Vstupní-zisk"
-
-#~ msgid "Out-gain"
-#~ msgstr "Výstupní-zisk"
-
-#~ msgid "Line-1"
-#~ msgstr "Line-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Line-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Line-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digitální-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digitální-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digitální-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefon-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefon-out"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Rádio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Reproduktor"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro čtení."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Nezadán název souboru"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro zápis: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Nezadán název souboru"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
-
-#~ msgid "No device specified."
-#~ msgstr "Nezadáno zařízení."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Nemohu otevřít zařízení \"%s\" pro čtení a zápis."
-
-#~ msgid "Device is open."
-#~ msgstr "Zařízení je otevřeno."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Zařízení \"%s\" není zachytávací zařízení."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Nemohu od zařízení \"%s\" získat vyrovnávací paměti."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Nemohu od zařízení \"%s\" získat dost vyrovnávacích pamětí."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "Element %s nelze najít. Tento element je pro přehrávání nutný. "
-#~ "Nainstalujte prosím potřebný modul a ověřte, že funguje, spuštěním 'gst-"
-#~ "inspect %s'"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "Nenalezen použitelný element colorspace.\n"
-#~ "Nainstalujte prosím nějaký a restartujte."
+++ /dev/null
-# Slovenian translation for gst-plugins-ugly.
-# Copyright (C) 2009 - 2012 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Matej Urbančič <matej.urban@gmail.com>, 2009.
-# Klemen Košir <klemen.kosir@gmx.com>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-03-26 22:48+0100\n"
-"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
-"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
-"Language: sl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
-"%100==4 ? 3 : 0);\n"
-
-msgid "Could not read from CD."
-msgstr "S CD-ja ni mogoče brati."
-
-msgid "Could not open CD device for reading."
-msgstr "Naprave CD ni mogoče odpreti za branje."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk ni zvočni CD."
-
-msgid "Could not open DVD"
-msgstr "DVD-ja ni mogoče odpreti"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD naslova %d ni mogoče odpreti."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Napaka med odpiranjem poglavja %d DVD naslova %d."
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr "DVD naslova %d ni mogoče odpreti. Interaktivni naslovi niso podprti."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD-ja ni mogoče prebrati. Verjetno je DVD šifriran, knjižnica za "
-"dešifriranje pa ni nameščena."
-
-msgid "Could not read DVD."
-msgstr "DVD-ja ni mogoče prebrati."
-
-msgid "This stream contains no data."
-msgstr "Pretok ne vsebuje podatkov."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem zvočnega kodirnika mp3 LAME. Preverite parametre "
-#~ "kodiranja."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Zahtevana bitna hitrost %d kbit/s za lastnost \"%s\" ni dovoljena. Bitna "
-#~ "hitrost je bila spremenjena na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem kodirnika TwoLAME. Preverite parametre kodiranja."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Notranja napaka pretoka podatkov."
-
-#~ msgid "Failed to configure LAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem kodirnika LAME. Preverite parametre kodiranja."
+++ /dev/null
-# Përkthimi i mesazheve të gst-plugins në shqip.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Laurent Dhima <laurenti@alblinux.net>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.8.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-08-07 20:29+0200\n"
-"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
-"Language-Team: Albanian <begraj@hotmail.com>\n"
-"Language: sq\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "I pamundur shkrimi tek file \"%s\"."
-
-msgid "Could not open CD device for reading."
-msgstr "I pamundur hapja e dispozitivit CD për lexim."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Dispozitivi nuk është hapur."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "E pamundur mbyllja e file vfs \"%s\"."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "I pamundur shkrimi tek file \"%s\"."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "I pamundur shkrimi tek file \"%s\"."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "E pamundur mbyllja e file vfs \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "E pamundur hapja e file \"%s\" në shkrim."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Gabim gjatë mbylljes së file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "E pamundur hapja e file \"%s\" për lexim."
-
-#~ msgid "No filename specified."
-#~ msgstr "Nuk është përcaktuar emri i file."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit të zërit \"%s\" për shkrim."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit të kontrollit \"%s\" për shkrim."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "I pamundur konfigurimi i dispozitivit të zërit \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "I pamundur rregullimi i dispozitivit audio \"%s\" në %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit të kontrollit \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit video \"%s\" për shkrim."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit video \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "I pamundur shkrimi në dispozitivin \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr ""
-#~ "Dispozitivi OSS \"%s\" është duke u përdorur nga një tjetër program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr ""
-#~ "E pamundur futja në dispozitivin \"%s\", kontrollo të drejtat e tij."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Dispozitivi \"%s\" nuk ekziston."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për shkrim."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
-
-#~ msgid "Volume"
-#~ msgstr "Volumi"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Sintetizuesi"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Zë folës"
-
-#~ msgid "Line-in"
-#~ msgstr "Linja-hyrje"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofoni"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Kontrolli i volumit"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Regjistrimi"
-
-#~ msgid "In-gain"
-#~ msgstr "In-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Out-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Linja-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Linja-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Linja-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Dixhitale-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Dixhitale-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Dixhitale-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Phone-hyrja"
-
-#~ msgid "Phone-out"
-#~ msgstr "Phone-dalja"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Ekrani"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Zë folës"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "E pamundur hapja e file vfs \"%s\" për lexim."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Nuk është dhënë asnjë emër file"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "E pamundur hapja e file vfs \"%s\" për shkrim: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Nuk është dhënë asnjë emër file"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
-
-#~ msgid "No device specified."
-#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
-
-#~ msgid "Device is open."
-#~ msgstr "Dispozitivi është i hapur."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Dispozitivi \"%s\" nuk është një dispozitiv marrje."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "E pamundur marrja e buffers të mjaftueshëm nga dispozitivi \"%s\"."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "E pamundur gjetja e elementit %s. Ky element është thelbësor për "
-#~ "playback. Ju lutem instaloni plug-in e duhur dhe kontrollo funksionimin "
-#~ "duke ekzekutuar 'gst-inspect %s'"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "Nuk arrin të gjehet asnjë element ngjyra e hapësirës.\n"
-#~ "Ju lutem instaloni një dhe rinisni."
+++ /dev/null
-# Serbian translation of gst-plugins
-# This file is put in the public domain.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.1.4\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2013-10-03 22:30+0200\n"
-"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
-"Language-Team: Serbian <(nothing)>\n"
-"Language: sr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Project-Style: gnome\n"
-
-msgid "Could not read from CD."
-msgstr "Не могу да читам ЦД."
-
-msgid "Could not open CD device for reading."
-msgstr "Не могу да отворим ЦД уређај ради читања."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск није Звучни ЦД."
-
-msgid "Could not open DVD"
-msgstr "Не могу да отворим ДВД"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не могу да отворим ДВД наслов „%d“"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Нисам успео да стигнем до поглавља „%d“ ДВД наслова „%d“"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не могу да отворим ДВД наслов „%d“. Овај елемент не подржава међудејствене "
-"наслове"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не могу да читам ДВД. Можда зато што је ДВД шифрован а библиотека за "
-"дешифровање ДВД-а није инсталирана."
-
-msgid "Could not read DVD."
-msgstr "Не могу да читам ДВД."
-
-msgid "This stream contains no data."
-msgstr "Овај ток не садржи податке."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Нисам успео да подесим енкодер звука ЛАМЕ мп3. Проверите ваше параметре "
-#~ "кодирања."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Тражени проток података од %d kbit/s за „%s“ није допуштен. Проток "
-#~ "података је постављен на %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Нисам успео да подесим ДваЛАМЕ енкодер. Проверите ваше параметре кодирања."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Унутрашња грешка тока података."
+++ /dev/null
-# Swedish translation for gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009, 2014, 2015, 2019 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Daniel Nylander <po@danielnylander.se>, 2007, 2008, 2009.
-# Sebastian Rasmussen <sebras@gmail.com>, 2014, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-01-17 02:02+0000\n"
-"PO-Revision-Date: 2019-01-17 02:02+0000\n"
-"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
-"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.8.6\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Kunde inte läsa från cd."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Kunde inte öppna cd-enheten för läsning."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "Skivan är inte en ljud-cd."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "Kunde inte öppna dvd"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
-#: ext/dvdread/dvdreadsrc.c:629
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunde inte öppna dvd-titel %d"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Misslyckades med att gå till kapitel %d för dvd-titel %d"
-
-#: ext/dvdread/dvdreadsrc.c:636
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Kunde inte öppna dvd-titel %d. Interaktiva titlar stöds inte av det här elementet"
-
-#: ext/dvdread/dvdreadsrc.c:991
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Kunde ej läsa dvd. Detta kan vara för att dvd:n är krypterad och ett dvd-avkrypteringsbibliotek inte är installerat."
-
-#: ext/dvdread/dvdreadsrc.c:994
-msgid "Could not read DVD."
-msgstr "Kunde inte läsa dvd."
-
-#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
-msgid "This stream contains no data."
-msgstr "Den här strömmen innehåller inget data."
-
-#~ msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-#~ msgstr "Misslyckades med att konfigurera LAME mp3 ljudkodare. Kontrollera dina kodningsparametrar."
-
-#~ msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-#~ msgstr "Den begärda bitfrekvensen %d kbit/s för egenskapen \"%s\" tillåts inte. Bitfrekvensen ändrades till %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "Misslyckades med att konfigurera TwoLAME-kodaren. Kontrollera dina kodningsparametrar."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Fel i intern dataström."
+++ /dev/null
-# Tamil messages for gst-plugins-ugly.
-# This file is put in the public domain.
-# List of contributors follow:
-# Poorajith <gokulkannanst@gmail.com>, 2019.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-01-17 02:02+0000\n"
-"PO-Revision-Date: 2019-02-06 01:10+0530\n"
-"Last-Translator: Arun Isaac <arunisaac@systemreboot.net>\n"
-"Language-Team: Tamil <tamil@systemreboot.net>\n"
-"Language: ta\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "குறுவட்டைப் படிக்க இயலவில்லை."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "குறுவட்டுக் கருவியைப் படிப்பதற்காகத் திறக்க இயலவில்லை."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "இவ்வட்டு ஒலி குறுவட்டல்ல."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "இறுவட்டைத் திறக்க இயல்வில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
-#: ext/dvdread/dvdreadsrc.c:629
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "இறுவட்டுத் தலைப்பு %2$d யில் %1$d என்ற அத்தியாயத்திற்குச் செல்ல இயலவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:636
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை. ஊடாட்ட தலைப்புகளுக்கு இவ்வுறுப்பில் ஆதரவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:991
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr ""
-"இறுவட்டைப் படிக்க இயலவில்லை. இது இறுவட்டு மறையாக்கப்பட்டிருந்து அதனை மறைவிலக்க\n"
-"தேவையான நிரலகம் நிறுவப்படாததால் இருக்கலாம்."
-
-#: ext/dvdread/dvdreadsrc.c:994
-msgid "Could not read DVD."
-msgstr "இறுவட்டைப் படிக்க இயலவில்லை."
-
-#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
-msgid "This stream contains no data."
-msgstr "இத்தரவுத்தொடரில் எத்தரவுமில்லை."
+++ /dev/null
-# translation of gst-plugins-ugly-1.0.3.po to Turkish
-# This file is put in the public domain.
-# Server Acim <sacim@kde.org.tr>, 2009.
-# Server Acim <sacim@kde.org.tr>, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-01 01:19+0200\n"
-"Last-Translator: Server Acim <serveracim@gmail.com>\n"
-"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
-"Language: tr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-msgid "Could not read from CD."
-msgstr "CD okuyamıyor."
-
-msgid "Could not open CD device for reading."
-msgstr "Okumak için CD aygıtını açamıyor."
-
-msgid "Disc is not an Audio CD."
-msgstr "Bu disk bir Ses CD'si değil."
-
-msgid "Could not open DVD"
-msgstr "DVD açılamıyor"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD başlığı açılamıyor %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Bu dosyalara okunamadı:bölüm %d ve DVD başlığı %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVD başlığı açılamadı %d. Bu öğede etkileşimli Interactive başlıklar "
-"desteklenmiyor"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD okunamıyor. Bunun sebebi, DVD'nin şifrelenmiş olması veya DVD şifre "
-"çzöme kitaplığının kurulu olmaması olabilir."
-
-msgid "Could not read DVD."
-msgstr "DVD okunamıyor."
-
-msgid "This stream contains no data."
-msgstr "Akış veri içermiyor."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "LAME mp3 kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
-#~ "denetleyiniz."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "İstenen bit oranı %d kbit/s bu özellik için '%s' onaylanmadı. Bu yüzden "
-#~ "bit oranı şuna dönüştürüldü %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "TwoLAME kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
-#~ "denetleyiniz."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "İç veri akış hatası."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD'de geçersiz başlık bilgisi."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "DVD'deki başlık bilgisi okunamıyor."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVD aygıtı açılamadı '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC tabanlı arama ayarlanamadı."
+++ /dev/null
-# Ukrainian translation to gst-plugins-ugly.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-28 20:25+0200\n"
-"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.5\n"
-
-msgid "Could not read from CD."
-msgstr "Не вдалося прочитати дані з компакт-диска."
-
-msgid "Could not open CD device for reading."
-msgstr "Не вдалося відкрити носій для читання."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск не записано у форматі Audio CD."
-
-msgid "Could not open DVD"
-msgstr "Не вдалося відкрити DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не вдалося відкрити частину DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Не вдалося перейти до розділу %d частини DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не вдалося відкрити заголовок DVD %d. Інтерактивні заголовки не "
-"підтримуються цим елементом"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не вдалося прочитати DVD. Причиною може бути те, що DVD зашифровано, а "
-"бібліотеку розшифрування DVD не встановлено."
-
-msgid "Could not read DVD."
-msgstr "Не вдалося прочитати DVD."
-
-msgid "This stream contains no data."
-msgstr "Потік не містить даних."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Помилка при налаштовуванні кодера LAME для звукових даних у форматі MP3. "
-#~ "Перевірте параметри кодування."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Запитана бітова швидкість %d кбіт/с для властивості «%s» є неприпустимою. "
-#~ "Бітову швидкість змінено на %d кбіт/с."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Помилка при налаштовуванні кодувальника TwoLAME. Перевірте параметри "
-#~ "кодування."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Помилка внутрішнього потоку даних."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Файл зашифрований та не може бути відтворений."
+++ /dev/null
-# Vietnamese translation for GST Plugins Ugly.
-# Copyright © 2014 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.3.90\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-06-30 09:20+0700\n"
-"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
-"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
-"Language: vi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
-"X-Generator: LocFactoryEditor 1.8\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-msgid "Could not read from CD."
-msgstr "Không thể đọc từ đĩa CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Không thể mở thiết bị đĩa CD để đọc."
-
-msgid "Disc is not an Audio CD."
-msgstr "Đây không phải là một đĩa CD âm nhạc."
-
-msgid "Could not open DVD"
-msgstr "Không thể mở đĩa DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Không thể mở đĩa DVD tên %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gặp lỗi khi nhảy đến chương %d của đĩa DVD tên %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Không thể mở đĩa DVD tên %d. Phần tử này không hỗ trợ tiêu đề tương tác."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Không thể đọc đĩa DVD. Nguyên nhân có thể là DVD đã bị mã hóa và thư viện "
-"giải mã DVD chưa được cài đặt."
-
-msgid "Could not read DVD."
-msgstr "Không thể đọc đĩa DVD."
-
-msgid "This stream contains no data."
-msgstr "Luồng này không chứa dữ liệu."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Gặp lỗi khi cấu hình bộ giải mã âm thanh mp3 của LAME. Hãy kiểm tra các "
-#~ "tham số giải mã."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Không cho phép tỷ lệ đã yêu cầu %d kbit/giây cho thuộc tính “%s” nên tỷ "
-#~ "lệ bit bị thay đổi thành %d kbit/g."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Gặp lỗi khi cấu hình bộ biên mã TwoLAME. Hãy kiểm tra lại các tham số "
-#~ "giải mã."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+++ /dev/null
-# Chinese (simplified) translation for gst-plugins-ugly.
-# Copyright (C) 2007 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Wenzheng Hu <db_lobster@163.com>, 2007.
-# LI Daobing <lidaobing@gmail.com>, 2008, 2009.
-# Wylmer Wang <wantinghard@gmail.com>, 2011.
-# Mingye Wang <arthur200126@gmail.com>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.5.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-08-28 15:36+0800\n"
-"Last-Translator: Mingye Wang <arthur200126@gmail.com>\n"
-"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.4\n"
-
-msgid "Could not read from CD."
-msgstr "无法读取 CD。"
-
-msgid "Could not open CD device for reading."
-msgstr "无法打开以读方式打开 CD 设备。"
-
-msgid "Disc is not an Audio CD."
-msgstr "盘类型不是音频 CD。"
-
-msgid "Could not open DVD"
-msgstr "无法打开 DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "无法打开 DVD 标题 %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "跳转到章节 %d, DVD 标题 %d 失败"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr "无法打开 DVD 标题 %d. 这个元素不支持互动标题"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr "无法读取 DVD。可能 DVD 光盘已加密,但 DVD 解密库没有安装。"
-
-msgid "Could not read DVD."
-msgstr "无法读取 DVD。"
-
-msgid "This stream contains no data."
-msgstr "这个串流中没有包含数据."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "配置 LAME mp3 编码器失败. 请检查你的编码参数."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr "不允许的比特率 %d kbit/s 于 '%s'. 比特率已改变成 %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "设置 TwoLAME 编码器失败. 请检查你的编码参数."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "内部数据流错误。"
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "无效的 DVD 标题信息。"
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "无法读取为 DVD 读取标题信息。"
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "无法打开 DVD 设备 '%s'。"
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "设置基于 PGC 的定位失败。"
+++ /dev/null
-#!/usr/bin/env python3
-#
-# Copyright (C) 2020 Tim-Philipp Müller <tim centricular net>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-import os
-import subprocess
-import shutil
-import tempfile
-
-if __name__ == "__main__":
- dist_root = os.environ['MESON_DIST_ROOT']
- build_root = os.environ['MESON_BUILD_ROOT']
- source_root = os.environ['MESON_SOURCE_ROOT']
- pwd = os.environ['PWD']
- tmpdir = tempfile.gettempdir()
-
- module = os.path.basename(os.path.normpath(source_root))
-
- # Generate pot file
- print('Generating pot file ...')
- subprocess.run(['ninja', '-C', build_root, module + '-1.0-pot'], check=True)
-
- # Dist pot file in tarball
- print('Copying pot file into dist staging directory ...')
- pot_src = os.path.join(source_root, 'po', module + '-1.0.pot')
- dist_po_dir = os.path.join(dist_root, 'po')
- shutil.copy2(pot_src, dist_po_dir)
+++ /dev/null
-#!/usr/bin/env python3
-#
-# extract-release-date-from-doap-file.py VERSION DOAP-FILE
-#
-# Extract release date for the given release version from a DOAP file
-#
-# Copyright (C) 2020 Tim-Philipp Müller <tim centricular com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-import sys
-import xml.etree.ElementTree as ET
-
-if len(sys.argv) != 3:
- sys.exit('Usage: {} VERSION DOAP-FILE'.format(sys.argv[0]))
-
-release_version = sys.argv[1]
-doap_fn = sys.argv[2]
-
-tree = ET.parse(doap_fn)
-root = tree.getroot()
-
-namespaces = {'doap': 'http://usefulinc.com/ns/doap#'}
-
-for v in root.findall('doap:release/doap:Version', namespaces=namespaces):
- if v.findtext('doap:revision', namespaces=namespaces) == release_version:
- release_date = v.findtext('doap:created', namespaces=namespaces)
- if release_date:
- print(release_date)
- sys.exit(0)
-
-sys.exit('Could not find a release with version {} in {}'.format(release_version, doap_fn))
+++ /dev/null
-# dist scripts
-if not meson.is_subproject()
- meson.add_dist_script('dist-translations.py')
-endif
--- /dev/null
+*~
+*.bak
+
+Build
+*.user
+*.suo
+*.ipch
+*.sdf
+*.opensdf
+*.DS_Store
+
+# Meson
+/build
+/_build
+/subprojects
--- /dev/null
+include: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/master/gitlab/ci_template.yml"
--- /dev/null
+Erik Walthinsen <omega@temple-baptist.com>
+Matt Howell <mhowell@users.sourceforge.net>
+Brent Bradburn <bbradburn@users.sourceforge.net>
+Wim Taymans <wim.taymans@chello.be>
+Richard Boulton <richard@tartarus.org>
+Zaheer Abbas Merali <zaheerabbas at merali dot org>
+David I. Lehn <dlehn@users.sourceforge.net>
+Chris Emerson <chris@tartarus.org>
+Jens Thiele <karme@unforgettable.com>
+Thomas Nyberg <thomas@codefactory.se>
+Bastien Nocera <hadess@hadess.net>
+Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org>
+Thomas Vander Stichele <thomas@apestaart.org>
+Andy Wingo <wingo@pobox.com>
+Cameron Hutchison <camh@xdna.net>
+David Schleef <ds@schleef.org>
+Benjamin Otte <in7y118@public.uni-hamburg.de>
+Ronald Bultje <rbultje@ronald.bitfreak.net>
+Julien MOUTTE <julien@moutte.net>
+Jan Schmidt <thaytan@mad.scientist.com>
+Arwed v. Merkatz <v.merkatz@gmx.net>
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null
+=== release 1.19.2 ===
+
+2021-09-23 01:34:00 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.19.2
+
+2021-09-21 15:05:58 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Strip trailing whitespace from x264's log messages
+ x264 has linebreaks at the end of its log messages that we should
+ ignore.
+ Add G_GNUC_PRINTF to the callback to make sure GCC lets us forward the
+ format string to another function marked as printf (g_strdup_vprintf)
+ without triggering -Wformat-nonliteral.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-09-21 14:57:29 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add the func/line info to the log callback
+ It looks awkward when it's missing. At least point us at the callback
+ function.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-09-21 14:56:23 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Reduce log spam about bit depth support
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-07-28 11:49:16 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: drop B-frame on open gop
+ Enhance open gop detection to drop B-frame which are invalid
+ before the first reference frame.
+ In stream such
+ gst-integration-testsuites/medias/defaults/mxf/op2b-mpeg2-wave_hd.mxf,
+ the two first frames must be dropped as we detect an open GOP situation
+ but in another media, such as http://col.la/1920X1080IXDCAMEX5MIN, the
+ first frames should not be dropped as we are in a closed GOP situation.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/84>
+
+2021-05-22 01:53:43 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstencoderbitrateprofilemanager.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rtspreal.c:
+ * meson.build:
+ Use g_memdup2() where available and add fallback for older GLib versions
+ - x264 encoder bitrate profile manager: alloc size is based
+ on existing allocation
+ - asfdemux: change length var to 64-bit and check for G_MAXUINT
+ - realmedia: opaque_data_len is read from 32 bits and then
+ only subtracted upon.
+ g_memdup() is deprecated since GLib 2.68 and we want to avoid
+ deprecation warnings with recent versions of GLib.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/83>
+
+2021-06-01 15:28:40 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.19.1 ===
+
+2021-06-01 00:12:09 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * README:
+ * RELEASE:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.19.1
+
+2018-02-26 17:28:25 +0100 David Fernandez <d.fernandezlop@gmail.com>
+
+ * docs/gst_plugins_cache.json:
+ * ext/x264/gstx264enc.c:
+ x264enc: Change accepted caps width and height from [16, MAX] to [1, MAX]
+ There are cases where the video size might be less than 16x16.
+ This change allows the x264 encoder to accept this cases.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/44>
+
+2021-04-20 18:48:38 -0400 Doug Nazar <nazard@nazar.ca>
+
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ realmedia: Drop duplicate seek events.
+ Also use seek seqnum for flush & segment events/messages.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
+
+2021-04-20 18:47:31 -0400 Doug Nazar <nazard@nazar.ca>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Drop duplicate seek events.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
+
+2021-03-29 13:41:07 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * gst/xingmux/gstxingmux.c:
+ * gst/xingmux/gstxingmux.h:
+ * gst/xingmux/plugin.c:
+ xingmux: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:39:20 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/pnmsrc.h:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rademux.h:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtdepay.h:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rdtmanager.h:
+ * gst/realmedia/realmedia.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ * gst/realmedia/rtspreal.c:
+ * gst/realmedia/rtspreal.h:
+ realmedia: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:23:51 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/dvdsub/gstdvdsubparse.h:
+ dvdsub: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:15:32 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:11:23 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * gst/asfdemux/gstasf.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/gstasfelement.c:
+ * gst/asfdemux/gstasfelements.h:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/asfdemux/meson.build:
+ asfdemux: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:39:36 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:33:00 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ sidplay: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:31:26 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:28:28 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/dvdread/dvdreadsrc.h:
+ dvdread: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:28:04 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ cdio: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:39:46 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/amrwbdec/amrwb.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/amrwbdec/amrwbdec.h:
+ amrwbdec: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:38:07 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/amrnb/amrnb.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbenc.h:
+ amrnb: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:37:26 +0200 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ a52dec: allow per feature registration
+ Split plugin into features including
+ dynamic types which can be indiviually
+ registered during a static build.
+ More details here:
+ https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-19 15:16:06 +1100 Matthew Waters <matthew@centricular.com>
+
+ * ext/x264/gstencoderbitrateprofilemanager.c:
+ gst: don't use volatile to mean atomic
+ volatile is not sufficient to provide atomic guarantees and real atomics
+ should be used instead. GCC 11 has started warning about using volatile
+ with atomic operations.
+ https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
+ Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/78>
+
+2021-03-03 11:05:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Make sure we have enough data available when parsing audio/video packets
+ Otherwise there will be out-of-bounds reads and potential crashes.
+ Thanks to Natalie Silvanovich for reporting.
+ Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/74>
+
+2020-11-04 18:44:07 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * meson.build:
+ meson: Enable some MSVC warnings for parity with GCC/Clang
+ This makes it easier to do development with MSVC by making it warn
+ on common issues that GCC/Clang error out for in our CI configuration.
+ Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/71>
+
+2020-10-31 04:52:14 +0900 Seungha Yang <seungha@centricular.com>
+
+ * tests/check/elements/mpeg2dec.c:
+ tests: mpeg2dec: Don't expect BT601 color space
+ If it's required, mpeg2dec should set it explicitly.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/70>
+
+2020-09-08 17:30:39 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitlab-ci.yml:
+ ci: include template from gst-ci master branch again
+
+2020-09-08 16:58:40 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.18.0 ===
+
+2020-09-08 00:05:39 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitlab-ci.yml:
+ * ChangeLog:
+ * NEWS:
+ * README:
+ * RELEASE:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.18.0
+
+2020-09-07 22:40:46 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * scripts/dist-translations.py:
+ * scripts/meson.build:
+ meson: dist pot file in tarball
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/69>
+
+2020-09-07 12:14:13 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Update for gst_video_transfer_function_*() function renaming
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/68>
+
+2020-08-21 10:35:11 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * docs/gst_plugins_cache.json:
+ * ext/x264/gstx264enc.c:
+ x264enc: Allow maximum quantizer value of 63 instead of 51
+ QP_MAX_SPEC in x264 is set to 63 nowadays and in theory it allows even
+ up to 81 (QP_MAX) but that seems to be outside the spec.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/67>
+
+=== release 1.17.90 ===
+
+2020-08-20 16:12:23 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.17.90
+
+2020-07-15 10:49:03 +0300 Jordan Petridis <jordan@centricular.com>
+
+ * tests/check/elements/amrnbenc.c:
+ amrnbenc: remove global variables
+ gstcheck is declaring its own buffers glist which ends up
+ overwritten, loks like the code meant to use that already
+ gcc 10 is also complaining about this, but only on static
+ builds for some reason
+ ```
+ FAILED: subprojects/gst-plugins-ugly/tests/check/elements_amrnbenc
+ /usr/bin/ld: subprojects/gstreamer/libs/gst/check/libgstcheck-1.0.a(gstcheck.c.o):(.bss+0x38): multiple definition of `buffers'; subprojects/gst-plugins-ugly/tests/check/708af1f@@elements_amrnbenc@exe/elements_amrnbenc.c.o:(.bss+0x18): first defined here
+ collect2: error: ld returned 1 exit status
+ ```
+ also remove unused var `current_buf`
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/62>
+
+2020-04-02 03:27:26 +1100 Jan Schmidt <jan@centricular.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Don't ignore the return value of gst_segment_do_seek()
+ If gst_segment_do_seek() fails, fail the seek.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
+
+2020-04-01 19:34:30 +1100 Jan Schmidt <jan@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't ignore the return result of gst_segment_do_seek()
+ gst_segment_do_seek() can fail, and our seek should fail
+ accordingly.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
+
+2020-04-17 11:34:16 -0500 Derek Lesho <dlesho@codeweavers.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Only forward SEEK event when in push mode.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/48>
+
+2020-07-25 21:19:20 +0100 Stéphane Cerveau <scerveau@collabora.com>
+
+ * meson.build:
+ meson: add a plugin summary
+ This summary displays a list of plugins which
+ have been enabled.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/65>
+
+2018-10-03 13:32:11 +0200 Thibault Saunier <tsaunier@igalia.com>
+
+ * ext/x264/GstX264Enc.prs:
+ x264enc: Add a 'Zero Latency' profile
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/42>
+
+2020-07-22 17:31:37 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * tests/check/elements/x264enc.c:
+ tests/x264enc: Don't declare variables inside the for loop header
+ This is a C99 feature
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/64>
+
+2020-07-21 15:40:26 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * tests/check/elements/x264enc.c:
+ tests: x264enc: Test formats are compatible with profile
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-01 16:11:09 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Separate high-10 video formats from 8-bit formats
+ If downstream is constrained to an 8-bit profile, caps queries would
+ still allow I420_10LE as input. If upstream actually sends such a caps
+ event, downstream would fail to accept the high-10 profile.
+ The following pipeline now fails earlier, during the negotiation phase
+ instead of the stream start:
+ gst-launch-1.0 videotestsrc ! video/x-raw,format=I420_10LE \
+ ! x264enc ! video/x-h264,profile=constrained-baseline \
+ ! fakesink
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-21 15:39:31 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * tests/check/elements/x264enc.c:
+ tests: x264enc: Test 10-bit formats
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-21 15:33:57 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * tests/check/elements/x264enc.c:
+ tests: x264enc: Test all (8-bit) video formats
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-06 22:13:55 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Forward downstream colorimetry and chroma-site upstream
+ So that the value can be used by upstream converters when necessary.
+ This whole logic has been copied from `__gst_video_element_proxy_caps`
+ but those 2 fields were missing.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/60>
+
+2020-07-08 17:07:35 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * scripts/extract-release-date-from-doap-file.py:
+ meson: set release date from .doap file for releases
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/61>
+
+2020-07-03 02:03:37 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.17.2 ===
+
+2020-07-03 00:29:25 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.17.2
+
+2020-06-23 00:03:04 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * docs/meson.build:
+ meson: mark plugins cache target as always stale
+
+2020-06-19 22:55:28 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/gst_plugins_cache.json:
+ doc: Stop documenting properties from parents
+
+2020-06-20 00:28:13 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.17.1 ===
+
+2020-06-19 19:20:41 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * docs/gst_plugins_cache.json:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.17.1
+
+2020-06-09 15:13:47 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/gst_plugins_cache.json:
+ docs: Update plugins cache
+
+2020-06-08 09:37:10 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/gst_plugins_cache.json:
+ docs: Update plugins cache
+
+2020-06-06 10:15:25 +0100 Philippe Normand <philn@igalia.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: update gst_type_mark_as_plugin_api() calls
+ This was left behind in commit bc1ab5e8e00a7ed6ac5e192af9310bd2146e446a.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/55>
+
+2020-06-06 00:41:38 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/x264/gstx264enc.c:
+ plugins: uddate gst_type_mark_as_plugin_api() calls
+
+2020-06-03 18:38:28 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/meson.build:
+ doc: Require hotdoc >= 0.11.0
+
+2020-05-27 16:02:02 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * docs/gst_plugins_cache.json:
+ docs: Update gst_plugins_cache.json
+
+2020-05-30 23:16:50 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types
+
+2020-06-02 00:41:23 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: extract WM/PartOfSet disc number and count metadata
+ Fixes #30
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
+
+2020-06-02 00:40:48 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: sprinkle some INDENT-OFF
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
+
+2020-05-27 14:42:20 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/check/meson.build:
+ tests: fix meson test env setup to make sure we use the right gst-plugin-scanner
+ If core is built as a subproject (e.g. as in gst-build), make sure to use
+ the gst-plugin-scanner from the built subproject. Without this, gstreamer
+ might accidentally use the gst-plugin-scanner from the install prefix if
+ that exists, which in turn might drag in gst library versions we didn't
+ mean to drag in. Those gst library versions might then be older than
+ what our current build needs, and might cause our newly-built plugins
+ to get blacklisted in the test registry because they rely on a symbol
+ that the wrongly-pulled in gst lib doesn't have.
+ This should fix running of unit tests in gst-build when invoking
+ meson test or ninja test from outside the devenv for the case where
+ there is an older or different-version gst-plugin-scanner installed
+ in the install prefix.
+ In case no gst-plugin-scanner is installed in the install prefix, this
+ will fix "GStreamer-WARNING: External plugin loader failed. This most
+ likely means that the plugin loader helper binary was not found or
+ could not be run. You might need to set the GST_PLUGIN_SCANNER
+ environment variable if your setup is unusual." warnings when running
+ the unit tests.
+ In the case where we find GStreamer core via pkg-config we use
+ a newly-added pkg-config var "pluginscannerdir" to get the right
+ directory. This has the benefit of working transparently for both
+ installed and uninstalled pkg-config files/setups.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/53>
+
+2020-05-27 09:13:17 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: fix uninitialized warning
+ Variable is always set in actual code paths but let's keep gcc happy.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/51>
+
+2020-05-12 05:07:47 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/sidplay/meson.build:
+ * meson.build:
+ meson: Pass native: false to add_languages()
+ This is needed for cross-compiling without a build machine compiler
+ available. The option was added in 0.54, but we only need this in
+ Cerbero and it doesn't affect older versions so it should be ok.
+ Will just cause a spurious warning.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/50>
+
+2020-04-03 14:24:46 -0500 Derek Lesho <dlesho@codeweavers.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Always re-initialize metadata and global_metadata
+ When transitioning from the PAUSED state, to the READY state, and back,
+ metadata and global_metadata are left uninitialized, unlike when the
+ demxuer transitions from NULL to READY, then to PAUSED. I have found
+ this to cause a segmentation fault when fields in these structures are
+ set.
+
+2020-04-02 16:18:00 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix 'ref' property range and default
+ The --ref option indicate the size of the DPB, hence should be in the range of
+ 0 to 16. This patch also fix the default to match x264enc default 3. This
+ change isn't a behaviour change since we don't enforce the reported default.
+
+2020-03-19 18:05:43 -0300 Thibault Saunier <tsaunier@igalia.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Mark as converter
+ It is able to do channel downminxing, so technically it is also a
+ converter
+ This is also important so validate knows about that when doing its
+ checks
+
+2019-10-17 14:55:51 +0200 Thibault Saunier <tsaunier@igalia.com>
+
+ * ext/x264/gstencoderbitrateprofilemanager.c:
+ * ext/x264/gstencoderbitrateprofilemanager.h:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ * ext/x264/meson.build:
+ x264enc: Respect Youtube bitrate recommandation
+ Properly follow google recommendations[0] concerning bitrate when the
+ user wants to use the youtube profile.
+ [0]: https://support.google.com/youtube/answer/1722171?hl=en
+
+2019-12-18 16:09:42 +0100 Stéphane Cerveau <scerveau@collabora.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ ugly: use of g_value_dup_string
+ Use helper method to get string from GValue.
+
+2019-12-14 18:49:54 +0700 Dmitry Shusharin <pmdvsh@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fixed codestyle
+
+2019-12-14 17:15:21 +0700 Dmitry Shusharin <pmdvsh@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: corrected em_data value in CEA-708 CC SEI message (fixes #28)
+ Section 4.4 of CEA-708-D specification (table 2) requires all bits to be
+ set inside em_data field. h264parse element (and possible third-party
+ decoders such as libav) also follows this requirement.
+ https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/28
+
+2019-06-09 00:30:53 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitignore:
+ * .gitmodules:
+ * Makefile.am:
+ * README:
+ * autogen.sh:
+ * common:
+ * configure.ac:
+ * docs/.gitignore:
+ * docs/version.entities.in:
+ * ext/Makefile.am:
+ * ext/a52dec/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/mpeg2dec/.gitignore:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst-libs/Makefile.am:
+ * gst-libs/gst/Makefile.am:
+ * gst/Makefile.am:
+ * gst/asfdemux/.gitignore:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/realmedia/.gitignore:
+ * gst/realmedia/Makefile.am:
+ * gst/xingmux/Makefile.am:
+ * m4/.gitignore:
+ * m4/Makefile.am:
+ * m4/README:
+ * m4/a52.m4:
+ * m4/aalib.m4:
+ * m4/as-ffmpeg.m4:
+ * m4/as-slurp-ffmpeg.m4:
+ * m4/check-libheader.m4:
+ * m4/freetype2.m4:
+ * m4/gconf-2.m4:
+ * m4/glib.m4:
+ * m4/gst-fionread.m4:
+ * m4/gst-ivorbis.m4:
+ * m4/gst-sdl.m4:
+ * m4/gst-shout2.m4:
+ * m4/gst-sid.m4:
+ * m4/gtk.m4:
+ * m4/libfame.m4:
+ * m4/libmikmod.m4:
+ * m4/lrint.m4:
+ * m4/lrintf.m4:
+ * pkgconfig/.gitignore:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+ * po/.gitignore:
+ * po/Makevars:
+ * po/POTFILES:
+ * tests/Makefile.am:
+ * tests/check/.gitignore:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/check/generic/.gitignore:
+ * tests/files/Makefile.am:
+ Remove autotools build system
+
+2019-09-02 09:33:15 -0400 Aaron Boxer <aaron.boxer@collabora.com>
+
+ * NEWS:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/realmedia/rdtjitterbuffer.c:
+ * gst/realmedia/rtspreal.c:
+ * hooks/pre-commit.hook:
+ documentation: fix some typos
+
+2019-08-23 19:06:59 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ docstrings: port ulinks to markdown links
+
+2019-08-23 16:25:25 +1000 Matthew Waters <matthew@centricular.com>
+
+ * docs/meson.build:
+ meson: Don't generate doc cache when no plugins are enabled
+ Fixes gst-build with -Dauto-features=disabled -Dugly=enabled
+
+2019-07-15 21:56:57 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Port to color_{primaries,transfer,matrix}_to_iso
+ ... with more color value mapping
+
+2019-07-15 22:38:35 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * tests/check/elements/x264enc.c:
+ * tests/check/meson.build:
+ tests: x264enc: Enable test on Windows
+ ... with removal of pointless unistd.h dependency.
+ Note that full dependency listing is required to run unit test
+ executable binary on Windows uninstalled environment.
+
+2019-05-31 23:07:58 +0200 Niels De Graef <niels.degraef@barco.com>
+
+ * configure.ac:
+ * meson.build:
+ meson: Bump minimal GLib version to 2.44
+ This means we can use some newer features and get rid of some
+ boilerplate code using the G_DECLARE_* macros.
+ As discussed on IRC, 2.44 is old enough by now to start depending on it.
+
+2019-05-29 23:00:48 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ doc: remove xml from comments
+
+2019-05-25 14:19:54 +0200 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/asfheaders.h:
+ asfdemux: remove some unused cruft in internal headers
+
+2019-05-16 09:15:52 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/gst_plugins_cache.json:
+ * docs/meson.build:
+ docs: Stop building the doc cache by default
+ And update the cache
+ Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/issues/36
+
+2019-05-13 22:54:16 -0400 Thibault Saunier <tsaunier@igalia.com>
+
+ * docs/gst_plugins_cache.json:
+ docs: Update plugins documentation cache
+
+2018-10-22 11:47:37 +0200 Thibault Saunier <tsaunier@igalia.com>
+
+ * Makefile.am:
+ * configure.ac:
+ * docs/Makefile.am:
+ * docs/all_index.md:
+ * docs/gst_api_version.in:
+ * docs/gst_plugins_cache.json:
+ * docs/index.md:
+ * docs/meson.build:
+ * docs/plugins/.gitignore:
+ * 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/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/gst-plugins-ugly-plugins.types:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * docs/sitemap.txt:
+ * ext/a52dec/meson.build:
+ * ext/amrnb/meson.build:
+ * ext/amrwbdec/meson.build:
+ * ext/cdio/meson.build:
+ * ext/dvdread/meson.build:
+ * ext/mpeg2dec/meson.build:
+ * ext/sidplay/meson.build:
+ * ext/x264/meson.build:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/meson.build:
+ * gst/dvdlpcmdec/meson.build:
+ * gst/dvdsub/meson.build:
+ * gst/realmedia/meson.build:
+ * gst/xingmux/meson.build:
+ * meson.build:
+ * meson_options.txt:
+ docs: Port documentation to hotdoc
+
+2018-10-22 11:47:32 +0200 Thibault Saunier <tsaunier@igalia.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/realmedia/gstrdtbuffer.h:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rtspreal.c:
+ * gst/xingmux/gstxingmux.c:
+ docs: Port all docstring to gtk-doc markdown
+
+2019-04-26 18:28:04 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/meson.build:
+ meson: sidplay: use library() instead of shared_module()
+ Like we do for other plugins, and also install a .pc file
+ if we build the plugin statically.
+
+2019-04-22 12:51:33 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dvdread/meson.build:
+ * meson.build:
+ meson: Always require the gmodule dependency
+ It's needed by the dvdread plugin but also by the x264 plugin in certain
+ circumstances. As it's part of GLib and always available, simply move it
+ as a hard dependency to the top-level meson.build.
+
+2019-04-19 10:28:17 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * README:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * meson.build:
+ Back to development
+
+=== release 1.16.0 ===
+
+2019-04-19 00:24:40 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * README:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.16.0
+
+2019-04-19 00:24:40 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2019-04-19 00:24:38 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ Update translations
+
+=== release 1.15.90 ===
+
+2019-04-11 00:28:18 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.15.90
+
+2019-04-11 00:28:18 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2019-03-27 21:59:45 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/x264/meson.build:
+ meson: Add a subproject fallback for x264
+
+2019-03-10 19:33:31 +0000 Piotr Drąg <piotrdrag@gmail.com>
+
+ * po/LINGUAS:
+ Update LINGUAS
+
+2019-03-21 11:23:07 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: add -Wno-unused also to C++ args when gst debug system is disabled
+
+2019-03-04 09:08:07 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * meson.build:
+ Back to development
+
+2019-02-28 11:03:31 +0100 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: inject CEA708 closed captions
+
+=== release 1.15.2 ===
+
+2019-02-26 11:48:50 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.15.2
+
+2019-02-26 11:48:50 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2019-02-26 11:48:47 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/fur.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/ta.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update translations
+
+2019-02-22 23:54:30 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ sidplay: fix indentation
+
+2019-02-12 17:58:19 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: Work around GCC9 compiler warning
+ It's technically true but not for this specific type.
+ dvdreadsrc.c:394:65: error: taking address of packed member of ‘struct <anonymous>’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
+ 394 | gst_dvd_read_src_make_clut_change_event (src, src->cur_pgc->palette);
+ | ~~~~~~~~~~~~^~~~~~~~~
+
+2019-01-30 19:50:30 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * meson.build:
+ meson: Add support orc fallback
+ Allow fallback to orc subproject if any.
+
+2019-01-25 14:38:05 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Only enable dynamic loading code for x264 < 253
+ Otherwise we get some compiler warnings:
+ ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:200:1: warning: ‘unload_x264’ defined but not used [-Wunused-function]
+ unload_x264 (GstX264EncVTable * vtable)
+ ^~~~~~~~~~~
+ ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:154:1: warning: ‘load_x264’ defined but not used [-Wunused-function]
+ load_x264 (const gchar * filename)
+ ^~~~~~~~~
+
+2019-01-25 14:36:55 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/meson.build:
+ x264: Link to gmodule in the meson build if extra x264 libraries are provided
+ We would dynamically load additional x264 libraries then.
+
+2019-01-17 17:29:38 +0200 Helmut Grohne <helmut@subdivi.de>
+
+ * m4/gst-sid.m4:
+ sid: Fix cross-compilation by using AC_TRY_LINK instead of AC_TRY_RUN
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917899
+
+=== release 1.15.1 ===
+
+2019-01-17 02:02:30 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.15.1
+
+2019-01-17 02:02:30 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2019-01-17 02:02:22 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/af.po:
+ * po/ast.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/fur.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update translations
+
+2018-12-30 22:48:42 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * tests/check/generic/states.c:
+ * tests/check/meson.build:
+ tests: Enable test generic_states on Windows
+ ... and drop needless unistd.h dependency
+
+2018-12-18 22:48:42 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * meson.build:
+ * tests/check/meson.build:
+ meson: Use join_paths() instead '/'
+
+2018-12-07 23:39:01 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * meson.build:
+ * tests/check/meson.build:
+ * tests/meson.build:
+ tests: Enable unit test on Windows
+ Remove hard-coded ':' whitelist separator since it varies with OS
+
+2018-12-05 17:24:25 -0300 Thibault Saunier <tsaunier@igalia.com>
+
+ * common:
+ Automatic update of common submodule
+ From ed78bee to 59cb678
+
+2018-11-24 19:28:19 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * meson.build:
+ meson: Specify encoding to UTF-8 when building with MSVC
+ Use build arguments consistent with core and -base. This can also
+ remove noisy "C4819" warning of non-us locale MSVC.
+
+2018-11-12 13:30:59 +0200 Jordan Petridis <jordan@centricular.com>
+
+ * .gitlab-ci.yml:
+ Add Gitlab CI configuration
+ This commit adds a .gitlab-ci.yml file, which uses a feature
+ to fetch the config from a centralized repository. The intent is
+ to have all the gstreamer modules use the same configuration.
+ The configuration is currently hosted at the gst-ci repository
+ under the gitlab/ci_template.yml path.
+ Part of https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/29
+
+2018-11-05 05:38:33 +0000 Matthew Waters <matthew@centricular.com>
+
+ * .gitmodules:
+ Update common submodule location
+ Remove the git directory
+
+2018-11-05 12:52:46 +0800 Haihao Xiang <haihao.xiang@intel.com>
+
+ * .gitmodules:
+ * gst-plugins-ugly.doap:
+ Clone the code from gitlab
+ This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/22
+
+2018-10-08 20:45:52 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: use new 'python' module instead of deprecated
+ https://github.com/mesonbuild/meson/pull/4169
+
+2018-09-22 17:33:35 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/check/elements/x264enc.c:
+ tests: x264enc: fix leak in unit test
+ The static pad templates weren't static so their
+ contents were leaked. valgrind was not happy.
+ Also rename confusing define.
+
+2018-09-18 21:43:14 +0900 Seungha Yang <seungha.yang@navercorp.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Avoid format decision per frame
+ Avoid switch/case per frame for format decision and detect the format
+ only if where it could be changed. Note that, whenever encoder->input_state
+ is changed, gst_x264_enc_init_encoder() is called.
+ https://bugzilla.gnome.org/show_bug.cgi?id=797164
+
+2018-09-19 12:00:32 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: add glib-checks option to disable API guards and such
+ We want this enabled by default, also in releases, but people
+ may want to disable this for performance-critical workloads or
+ on embedded devices.
+
+2018-09-19 11:58:54 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson_options.txt:
+ meson: fix missing closing bracket in option descriptions
+
+2018-08-18 21:22:42 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ * tests/meson.build:
+ meson: add option to disable tests
+
+2018-08-18 21:20:20 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: clean up some cruft
+
+2018-08-18 21:15:23 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: add options to disable gobject cast checks and glib asserts
+ ... and define G_DISABLE_DEPRECATED for development versions,
+ like we do in autotools.
+
+2018-08-16 13:17:58 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Set bit depth for x264 ≥ 153
+ https://bugzilla.gnome.org/show_bug.cgi?id=796975
+
+2018-08-16 14:55:04 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Remove superfluous x264_param_default
+ https://bugzilla.gnome.org/show_bug.cgi?id=796973
+
+2018-07-27 19:29:01 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/a52dec/meson.build:
+ * ext/amrnb/meson.build:
+ * ext/amrwbdec/meson.build:
+ * ext/cdio/meson.build:
+ * ext/dvdread/meson.build:
+ * ext/mpeg2dec/meson.build:
+ * ext/sidplay/meson.build:
+ * ext/x264/meson.build:
+ * gst/meson.build:
+ * meson.build:
+ * meson_options.txt:
+ Add feature options for all plugins
+ The only automagic dependency left is C++ availability detection.
+ https://bugzilla.gnome.org/show_bug.cgi?id=795107
+
+2018-07-25 17:17:21 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: Convert common options to feature options
+ The rest will be converted later, these are necessary for gst-build to
+ set options correctly.
+ https://bugzilla.gnome.org/show_bug.cgi?id=795107
+
+2018-06-11 14:43:20 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Remove 0.10 code
+ This was used to "close" a segment. It's no longer needed anymore
+ in 1.x (it was essentially sending the same thing again)
+
+2018-05-11 09:21:09 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Only send flush event on seeking flushes
+ And not on all the time
+
+2018-05-21 11:54:50 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: add 'nls' option to disable translations
+ And enable by default. Was implicitly disabled because
+ ENABLE_NLS was not defined. Also use .set_quoted().
+
+2018-05-05 19:32:00 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: Update option names to omit disable_ and with- prefixes
+ Also yield common options to the outer project (gst-build in our case)
+ so that they don't have to be set manually.
+
+2018-05-04 22:54:01 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Take the highlight event from the structure.
+ Don't use GST_EVENT_TIMESTAMP to transfer any PTS
+ associated with a highlight event, instead store
+ it in the event structure directly, as
+ GstEvent::timestamp will disappear in GStreamer 2.0
+ https://bugzilla.gnome.org/show_bug.cgi?id=761477
+
+2018-04-24 14:06:20 -0400 Xavier Claessens <xavier.claessens@collabora.com>
+
+ * ext/a52dec/meson.build:
+ * ext/amrnb/meson.build:
+ * ext/amrwbdec/meson.build:
+ * ext/cdio/meson.build:
+ * ext/dvdread/meson.build:
+ * ext/mpeg2dec/meson.build:
+ * ext/x264/meson.build:
+ * gst/asfdemux/meson.build:
+ * gst/dvdlpcmdec/meson.build:
+ * gst/dvdsub/meson.build:
+ * gst/realmedia/meson.build:
+ * gst/xingmux/meson.build:
+ * meson.build:
+ Meson: Generate pc file for all plugins in ugly
+ https://bugzilla.gnome.org/show_bug.cgi?id=794568
+
+2018-04-25 10:59:11 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: use -Wl,-Bsymbolic-functions where supported
+ Just like the autotools build.
+
+2018-04-16 20:13:05 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Set the stream-format field of H264 streams
+ If we have codec_data it will be AVC, otherwise assume byte-stream.
+
+2018-04-16 10:53:12 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 3fa2c9e to ed78bee
+
+2018-03-20 09:26:15 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * meson.build:
+ Back to development
+
+=== release 1.14.0 ===
+
+2018-03-19 20:19:43 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.14.0
+
+2018-03-19 20:19:43 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+=== release 1.13.91 ===
+
+2018-03-13 19:17:58 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.13.91
+
+2018-03-13 19:17:58 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2018-03-12 20:19:19 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ docs: plugins: minor addition to plugins list
+
+2018-03-08 10:12:16 +0100 Michael Tretter <m.tretter@pengutronix.de>
+
+ * configure.ac:
+ configure.ac: enable largefile support if possible
+ https://bugzilla.gnome.org/show_bug.cgi?id=793103
+
+=== release 1.13.90 ===
+
+2018-03-03 22:24:28 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.13.90
+
+2018-03-03 22:24:28 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ Update docs
+
+2018-03-01 19:07:42 +0100 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * meson.build:
+ * tests/check/meson.build:
+ meson: enable more warnings
+
+2018-02-28 10:07:13 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix build with newer x264 with support for multiple bit depths
+ libx264 used to be built for one specific bit depth, and if we
+ wanted to support multiple bit depths we would have to dynamically
+ load the right .so from different paths. That has changed now, and
+ libx264 can include support for multiple depths in the same lib,
+ so we don't need to do the dlopen() dance any more. We'll keep
+ the vtable stuff around until we can drop support for older x264.
+ gstx264enc.c:2927:36: error: ‘x264_bit_depth’ undeclared
+ https://bugzilla.gnome.org/show_bug.cgi?id=792111
+
+2018-02-27 15:42:32 +0100 Alicia Boya García <aboya@igalia.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add format example for option-string
+ https://bugzilla.gnome.org/show_bug.cgi?id=793879
+
+2018-02-21 19:47:36 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*
+ add_global_arguments() can't be used in subprojects. It's
+ entirely possible that -ugly is a subproject but gstreamer
+ is picked up from an installed location, so we should
+ really use add_project_arguments() in both cases.
+
+2018-02-15 19:44:21 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * meson.build:
+ Back to development
+
+=== release 1.13.1 ===
+
+2018-02-15 17:10:13 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.13.1
+
+2018-02-15 17:07:42 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-sid.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ docs: update plugin docs
+
+2018-02-15 14:52:29 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/id.po:
+ * po/it.po:
+ * po/nl.po:
+ * po/sv.po:
+ po: update translations
+
+2018-02-08 19:09:45 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: make version numbers ints and fix int/string comparison
+ WARNING: Trying to compare values of different types (str, int).
+ The result of this is undefined and will become a hard error
+ in a future Meson release.
+
+2018-02-04 12:03:36 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ autotools: use -fno-strict-aliasing where supported
+ https://bugzilla.gnome.org/show_bug.cgi?id=769183
+
+2018-01-30 20:34:52 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/meson.build:
+ * meson.build:
+ meson: use -fno-strict-aliasing where supported
+ https://bugzilla.gnome.org/show_bug.cgi?id=769183
+
+2018-01-03 16:02:08 +0100 Edward Hervey <edward@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ amrnbdec: Don't use g_return_*_if_fail() on data parsing
+ Those functions can be disabled. Instead just use the (existing)
+ function.
+ CID #1427121
+
+2018-01-03 16:02:08 +0100 Edward Hervey <edward@centricular.com>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: Don't use g_return_*_if_fail() on data parsing
+ Those functions can be disabled. Instead just use the (existing)
+ function.
+ CID #1427093
+
+2017-12-26 13:51:37 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: skip translations if gettext is not available
+
+2017-12-14 14:49:17 +1100 Matthew Waters <matthew@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From e8c7a71 to 3fa2c9e
+
+2017-12-07 15:52:58 +0900 Justin Kim <justin.kim@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: add 'insert-vui' property for users to choose
+ VUI(Video Usability Information) parameters should be set
+ according to the specification. However, some of the existing
+ hardware decoders refuse to decode in certain combinations of
+ the resolution and VUI parameters. To support the legacy
+ decoders, this patch provides 'insert-vui' to skip the settings.
+ https://bugzilla.gnome.org/show_bug.cgi?id=791331
+
+2017-12-06 13:01:39 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c:
+ cdio: Fix build with cdio >= 1.0
+ LIBCDIO_VERSION_NUM was defined as e.g. 94 for 0.94 but is now defined
+ as 1 for 1.0. We had various checks for < 83, which of course succeeded
+ now although we are >= 0.83.
+ Fix this by checking for < 76 (0.76) too, as that is the minimum version
+ we currently support and everything < 76 is going to be >= 1.0.
+ https://bugzilla.gnome.org/show_bug.cgi?id=791301
+
+2017-11-27 20:11:56 +1100 Matthew Waters <matthew@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 3f4aa96 to e8c7a71
+
+2017-11-26 15:05:14 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ configure: actually use -fvisibility if supported
+ Fix up for previous commit.
+
+2017-11-26 14:49:21 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ autotools: stop controlling symbol visibility with -export-symbols-regex
+ Instead, use -fvisibility=hidden and explicit exports via GST_EXPORT.
+ This should result in consistent behaviour for the autotools and
+ Meson builds.
+
+2017-11-13 11:13:30 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix prerolling files with "empty" streams
+ This is a regression that was introduced by
+ commit 1803b3c18530cb0100d140c2b8e49a8dfe41f941
+ " asfdemux: Add support for dvr-ms"
+ The problem is that some files/streams might contain stream definition
+ but there is no actual packets for those streams.
+ This was used to "define" streams with different bitrates for example.
+ The first_ts calculation resulted in never ever finding a valid first_ts
+ since some streams were empty, and therefore never "activating" itself.
+ Instead of that we first check if we are prerolled. And if we are we
+ unconditionally get the "first_ts"
+ The preroll check has been adapted to check whether streams of
+ each defined type (i.e. audio/video/sub) has been prerolled. This solves
+ the problem of having different streams of a particular type where only
+ one stream actually has data.
+
+2017-11-13 11:09:31 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Store the stream type in streams
+ The field was present but never set :)
+
+2017-09-26 10:11:24 +0530 Ponnam Srinivas <p.srinivas@samsung.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Fix out buffer memory leak in error code path
+ https://bugzilla.gnome.org/show_bug.cgi?id=788119
+
+2017-09-15 17:06:58 +0530 Deepak Srivastava <srivastava.d@samsung.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix buffer memory leak in error code path
+ https://bugzilla.gnome.org/show_bug.cgi?id=787817
+
+2017-09-07 13:27:26 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Unmap output video frame if copying to it fails
+ https://bugzilla.gnome.org/show_bug.cgi?id=787398
+
+2017-08-31 11:33:14 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
+
+ * gst/realmedia/asmrules.c:
+ realmedia: fix leak in asmrules error code path
+ https://bugzilla.gnome.org/show_bug.cgi?id=787056
+
+2017-08-30 18:41:28 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
+
+ * gst/realmedia/rtspreal.c:
+ realmedia: Fix Memory leak in error case
+ https://bugzilla.gnome.org/show_bug.cgi?id=787014
+
+2017-08-26 13:02:26 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/files/Makefile.am:
+ * tests/files/cbr_stream.mp3:
+ * tests/files/stream.mp2:
+ * tests/files/vbr_stream.mp3:
+ tests: remove files that were used by the mpg123 unit test
+
+2017-08-26 09:35:20 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ * REQUIREMENTS:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * ext/Makefile.am:
+ * ext/meson.build:
+ * ext/twolame/Makefile.am:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/twolame/gsttwolamemp2enc.h:
+ * ext/twolame/meson.build:
+ * po/POTFILES.in:
+ Remove twolame plugin, moved to -good
+ https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-26 08:51:01 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ * REQUIREMENTS:
+ * configure.ac:
+ * 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-lame.xml:
+ * ext/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ * ext/lame/meson.build:
+ * ext/lame/plugin.c:
+ * ext/meson.build:
+ * m4/Makefile.am:
+ * m4/as-liblame.m4:
+ * po/POTFILES.in:
+ * tests/check/Makefile.am:
+ * tests/check/gst-plugins-ugly.supp:
+ * tests/check/meson.build:
+ * tests/check/pipelines/.gitignore:
+ * tests/check/pipelines/lame.c:
+ Remove lame plugin, moved to -good
+ https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-20 14:31:02 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ * REQUIREMENTS:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * ext/Makefile.am:
+ * ext/meson.build:
+ * ext/mpg123/Makefile.am:
+ * ext/mpg123/gstmpg123audiodec.c:
+ * ext/mpg123/gstmpg123audiodec.h:
+ * ext/mpg123/meson.build:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/check/elements/mpg123audiodec.c:
+ * tests/check/meson.build:
+ Remove mpg123 plugin, moved to -good
+ https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-17 12:23:43 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 48a5d85 to 3f4aa96
+
+2017-08-10 15:48:27 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/meson.build:
+ sidplay: hide symbols in meson for this c++ plugin too
+ Keep things local, as this is the only c++ plugin
+ in ugly currently.
+
+2017-08-10 11:55:58 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: don't export symbols by default
+ Only plugin entry points should be exported.
+ Currently plugins might export more symbols with
+ the meson build, as we don't have the exports
+ regexp there that we pass to libtool.
+
+2017-08-09 19:31:56 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: add FIXME note for future configuration cleanup
+
+2017-07-25 13:36:17 +0530 Satya Prakash Gupta <sp.gupta@samsung.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: Fix string memory leak
+ https://bugzilla.gnome.org/show_bug.cgi?id=785388
+
+2017-07-15 15:01:09 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix indentation
+
+2017-07-15 14:59:42 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix caps leak
+ Move creation of supported sink pads into class_init function
+ which is also the only place where they're used. Unref the
+ caps when no longer needed, the pad template will take its
+ own ref.
+ https://bugzilla.gnome.org/show_bug.cgi?id=784982
+
+2017-07-15 14:57:49 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123audiodec: fix caps leak
+ The pad template takes its own ref, so we should unref the caps.
+ https://bugzilla.gnome.org/show_bug.cgi?id=784982
+
+2017-07-15 12:49:19 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/meson.build:
+ meson: po: use glib preset and read language list from LINGUAS
+ Supported since meson 0.37, so we can use it now.
+
+2017-07-11 14:21:41 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpmdec: Fix overrun from coverity
+ CID #1414801
+
+2017-07-07 11:58:36 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: find python3 via python3 module
+ https://bugzilla.gnome.org/show_bug.cgi?id=783198
+
+2017-07-05 18:58:35 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: Added support for Blu-Ray audio
+ https://bugzilla.gnome.org/show_bug.cgi?id=784552
+
+2017-06-27 11:48:08 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: More index handling
+ In the same vein as the previous commit, the end of the file might have been
+ cut and therefore contains bogus data.
+ If the object is too short, consider it as garbage and return a non-fatal
+ flow.
+ Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
+
+2017-06-27 10:25:42 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux; Don't assume index is present at end of file
+ Some files have garbage at the end of the file, don't error out if we don't
+ find the index there.
+ Reverts back to previous behaviour (where corrupted/missing indexex were
+ not a fatal error).
+ Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
+
+2017-06-26 09:49:22 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: fix with-package-name option
+ https://bugzilla.gnome.org/show_bug.cgi?id=784082
+
+2017-06-14 21:08:31 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: adjust segment start to a keyframe ts only for a KEYUNIT seek
+ ... which is how it has always been until changed coincidentally in commit
+ 9ee60482b265481d0e3b397044f560eb736e5429 which then prompted commit
+ dba14178ce6115b406ef86e356b1201463af5e2a to consider ACCURATE as well
+ to compensate for that in a lateral way
+
+2017-06-14 20:56:16 +0200 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: relax bframes upper limit count to maximum encoder supported
+
+2017-06-23 23:44:18 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/meson.build:
+ meson: don't error out if sidplay library is not found
+
+2017-06-23 18:33:24 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/meson.build:
+ * ext/sidplay/meson.build:
+ meson: build sid plugin
+ https://bugzilla.gnome.org/show_bug.cgi?id=784135
+
+2017-06-21 21:23:29 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: fix memory leak
+ When the allowed caps are the same of template caps the allowed
+ caps are not unrefed, leaking memory.
+ https://bugzilla.gnome.org/show_bug.cgi?id=784060
+
+2017-06-07 12:08:43 -0400 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * tests/check/meson.build:
+ meson: Do not use path separator in test names
+ Avoiding warnings like:
+ WARNING: Target "elements/audioamplify" has a path separator in its name.
+
+2017-06-06 21:48:19 -0700 Thiago Santos <thiagossantos@gmail.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix checking for header objects
+ The if 'and' condition was mixed up with the last parameter of the
+ function and would lead to wrong results
+
+2017-05-21 17:49:59 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ * config.h.meson:
+ * meson.build:
+ meson: don't need config.h.meson any longer
+
+2017-05-20 14:58:37 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * meson_options.txt:
+ meson: add options to set package name and origin
+ https://bugzilla.gnome.org/show_bug.cgi?id=782172
+
+2017-05-19 20:05:02 +0200 Jan Schmidt <jan@centricular.com>
+
+ * tests/check/meson.build:
+ Add gstvideo_dep for meson mpeg2dec test build
+
+2017-05-19 18:59:17 +0200 Jan Schmidt <jan@centricular.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/mpeg2dec.c:
+ mpeg2dec test: Fix expected output caps
+ In the absence of explicit info, video decoders
+ now output mono multiview caps by default, so make
+ the expected caps match that
+
+2017-05-16 14:07:56 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * config.h.meson:
+ * configure.ac:
+ * ext/a52dec/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/mpg123/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * gst/xingmux/Makefile.am:
+ Remove plugin specific static build option
+ Static and dynamic plugins now have the same interface. The standard
+ --enable-static/--enable-shared toggle are sufficient.
+
+2017-05-09 09:45:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ sid: Make plugin name match plugin file name
+
+2017-05-04 18:59:14 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ * meson.build:
+ Back to development
+
+=== release 1.12.0 ===
+
+2017-05-04 15:39:25 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.12.0
+
+2017-05-04 15:12:50 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/fur.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2017-05-04 13:47:56 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+=== release 1.11.91 ===
+
+2017-04-27 17:33:23 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.11.91
+
+2017-04-27 16:08:13 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/fur.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2017-04-27 15:29:48 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/LINGUAS:
+ * po/fur.po:
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2017-04-27 12:42:34 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/x264/gstx264enc.h:
+ x264: Use __declspec(dllimport) with MinGW too
+ x264.h says this isn't needed with MinGW, but it looks like it is.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=779249
+
+2017-04-24 20:28:15 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 60aeef6 to 48a5d85
+
+2017-04-10 23:49:25 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From 39ac2f5 to 60aeef6
+
+=== release 1.11.90 ===
+
+2017-04-07 16:34:22 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * meson.build:
+ Release 1.11.90
+
+2017-04-07 15:33:31 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2017-04-07 15:07:50 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2017-03-28 14:18:38 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * tests/check/meson.build:
+ meson: test: Fix environment object usage
+ And use get_pkgconfig_variable instead of calling pkg-config ourself
+
+2017-03-20 17:06:16 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * REQUIREMENTS:
+ REQUIREMENTS: update for mad mp3 decoder removal
+ https://bugzilla.gnome.org/show_bug.cgi?id=776140
+
+2017-03-12 11:57:23 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * Makefile.am:
+ Add libgstrmdemux.so to cruft list
+ This was renamed to libgstrealmedia.so, this fixes helps fixing
+ uninstalled setup.
+ https://bugzilla.gnome.org/show_bug.cgi?id=779344
+
+2017-03-04 11:09:33 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/meson.build:
+ Rename plugin filenames to match plugin names
+ libgstrmdemux.so becomes libgstrealmedia.so
+ https://bugzilla.gnome.org/show_bug.cgi?id=779344
+
+2017-03-01 23:00:55 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix latency calculation
+ The latency calculation was missing a scaling by GST_SECOND,
+ so it would always report a tiny latency. Fix that.
+ Spotted by Guillaume Desmottes.
+
+2017-02-27 20:55:34 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix compilation with gcc 7
+ gstasfdemux.c: In function 'gst_asf_demux_parse_stream_object':
+ gstasfdemux.c:3001:39: error: '<<' in boolean context, did you mean '<' ? [-Werror=int-in-bool-context]
+ is_encrypted = ! !((flags & 0x8000) << 15);
+ ~~~~~~~~~~~~~~~~~~^~~~~~
+ https://bugzilla.gnome.org/show_bug.cgi?id=779329
+
+2017-02-25 21:48:46 -0300 Edgard Lima <edgard.lima@gmail.com>
+
+ * ext/amrwbdec/amrwb.c:
+ * ext/amrwbdec/amrwbdec.h:
+ Update Edgard Lima's email
+ https://bugzilla.gnome.org/show_bug.cgi?id=779230
+
+2017-02-24 15:59:47 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * meson.build:
+ meson: Update version
+
+2017-02-24 15:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.11.2 ===
+
+2017-02-24 15:07:54 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ Release 1.11.2
+
+2017-02-24 12:57:00 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2017-02-24 12:45:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2017-02-14 19:56:13 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ meson: dist meson build files
+ Ship meson build files in tarballs, so people who use tarballs
+ in their builds can start playing with meson already.
+
+2017-02-01 03:08:10 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Initialize function vtable in plugin_init()
+ These values are defined in the x264.h header and are not const on
+ Windows due to the way DLLs work. See:
+ https://msdn.microsoft.com/en-us/library/619w14ds.aspx
+ https://msdn.microsoft.com/en-us/library/zw3za17w.aspx
+ https://bugzilla.gnome.org/show_bug.cgi?id=777903
+
+2017-01-31 13:50:21 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Check that we have enough data available before parsing bool/uint extended content descriptors
+ https://bugzilla.gnome.org/show_bug.cgi?id=777955
+
+2017-01-30 15:39:59 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Reset number of languages to 0 when freeing the array because of errors
+ Otherwise we will happily index into the array at NULL if the requested
+ index is smaller than the number of languages that were previously
+ allocated.
+ https://bugzilla.gnome.org/show_bug.cgi?id=777937
+
+2017-01-24 19:24:10 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * tests/check/meson.build:
+ meson: Properly use ':' for defining keywords
+
+2017-01-13 12:39:09 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: bump version
+
+2017-01-12 16:32:52 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.11.1 ===
+
+2017-01-12 16:10:25 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ Release 1.11.1
+
+2017-01-12 14:45:56 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2017-01-12 14:37:02 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/hr.po:
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2016-12-16 16:52:00 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * ext/amrnb/meson.build:
+ * ext/x264/meson.build:
+ * meson.build:
+ meson: Install presets files
+
+2015-06-26 20:22:47 +0200 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+ * ext/x264/GstX264Enc.prs:
+ x264enc: Add a youtube preset.
+ Based on https://support.google.com/youtube/answer/1722171
+ https://bugzilla.gnome.org/show_bug.cgi?id=751560
+
+2016-12-28 10:42:15 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * config.h.meson:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * ext/Makefile.am:
+ * ext/mad/Makefile.am:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ * ext/mad/meson.build:
+ * ext/meson.build:
+ mad: remove plugin
+ We have better replacements such as the mpg123 plugin.
+ The main reason to keep around mad was for 'freeform'
+ mp3 support, but mpg123 can handle those too nowadays.
+ Also, mad is GPL and has been unmaintained for years.
+ https://bugzilla.gnome.org/show_bug.cgi?id=776140
+
+2016-12-16 19:07:51 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ * configure.ac:
+ * win32/MANIFEST:
+ * win32/common/.gitignore:
+ * win32/common/config.h:
+ win32: remove platform-specific copies of generated headers
+ Unused and no longer needed.
+
+2016-12-14 10:24:26 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitignore:
+ * Makefile.am:
+ * configure.ac:
+ * gst-plugins-ugly.spec.in:
+ Remove generated .spec file
+ Likely extremely bitrotten, and we should not ship this anyway.
+
+2016-12-09 17:45:34 -0300 Thibault Saunier <tsaunier@gnome.org>
+
+ * meson.build:
+ meson: Support building without Gst debug
+
+2016-12-03 08:19:44 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From f980fd9 to 39ac2f5
+
+2016-12-02 14:06:21 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix memory leak of payload extensions for unusable/unsupported streams
+ https://bugzilla.gnome.org/show_bug.cgi?id=775515
+
+2016-11-30 18:11:30 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add information for mixed mode
+ https://bugzilla.gnome.org/show_bug.cgi?id=775411
+
+2016-11-30 17:30:33 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Correctly pass interlacing/TFF information
+ Give the interlacing information correctly to the encoder. Also parse
+ TFF/BFF information from the caps and pass it too.
+ https://bugzilla.gnome.org/show_bug.cgi?id=775411
+
+2016-11-28 15:14:18 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Auto-detect interlace mode from caps
+ If the caps are interlaced, interlacing is always enabled on the
+ encoder. If the interlace-mode field is missing or if it's progressive,
+ the encoder uses the "interlaced" property.
+ https://bugzilla.gnome.org/show_bug.cgi?id=775228
+
+2016-11-26 11:20:51 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitmodules:
+ common: use https protocol for common submodule
+ https://bugzilla.gnome.org/show_bug.cgi?id=775110
+
+2016-11-25 23:51:00 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/realmedia/realhash.c:
+ real: Fix compiler warnings with latest clang
+ realhash.c:295:11: error: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Werror,-Wconstant-conversion]
+ *buf1 = 128;
+ ~ ^~~
+ https://bugzilla.gnome.org/show_bug.cgi?id=775112
+
+2016-11-25 12:41:03 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Allow 64bit sizes for DATA object
+ we *can* have files greater than 4GB, any other object should be
+ smaller than that
+
+2016-11-25 10:07:35 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Add sanity check for asf_stream_audio
+ We should have enough bytes for the specified codec_data
+ https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-25 09:45:04 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Add sanity checks when reading asf_stream_video_format
+ It should report a size of at least 40 bytes
+ Also check for the size of the remaining data (i.e. codec_data)
+ https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-25 09:44:05 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Add check for invalid/corrupt asf object
+ An asf object can't realistically be bigger than 2**32 bytes.
+ If it reports a size bigger than that, consider it corrupt and properly
+ propagate the error back.
+ https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-22 17:14:44 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Handle EOS in push-mode on corrupted files
+ It is possible no streams were activated when receiving EOS, if so
+ handled it as if we hadn't seen the header
+ https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:56:04 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: FILE headers are mandatory in the header
+ As per the specification, also avoids ending up trying to play a
+ file with plenty of un-initialized values.
+ https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:54:26 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Handle incomplete header in pull mode
+ pulling headers is meant to complete as a whole. If we don't have
+ enough data, it's an error.
+ Avoids pipeline hangs on corrupted files
+ https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:22:49 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Handle issues with "empty" files
+ In some corrupted files, we could end up with no actual streams
+ being exposed.
+ In those cases, make sure we properly propagate the failure all
+ the way to the loop function. This avoids ending up in cases where
+ we are neither EOS'd nor ERROR'd out from a pipeline point of view.
+ https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-20 20:54:25 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: dvd-spu-clut-change is a sticky custom event
+
+2016-11-17 17:20:03 -0800 Scott D Phillips <scott.d.phillips@intel.com>
+
+ * meson.build:
+ meson: Add ignored warnings for MSVC
+ https://bugzilla.gnome.org/show_bug.cgi?id=774656
+
+2016-11-11 14:15:17 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ * ext/x264/Makefile.am:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ * ext/x264/meson.build:
+ * meson_options.txt:
+ x264enc: Add configure parameter to specify additional x264 libraries with e.g. different depth configuration
+ x264 has to be compiled specifically for a target bit depth.
+ Distributions currently ship various libraries in their packages, with
+ different bit depths.
+ This change now allows to provide them all at configure time and have
+ the x264enc element dynamically switch between them based on the bit
+ depth of the input format.
+ https://bugzilla.gnome.org/show_bug.cgi?id=763297
+
+2016-11-01 18:09:25 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: update version
+
+=== release 1.11.0 ===
+
+2016-11-01 18:53:15 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.10.0 ===
+
+2016-11-01 18:05:31 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.10.0
+
+2016-11-01 17:54:16 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-11-01 17:43:01 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2016-10-25 08:54:52 -0700 Scott D Phillips <scott.d.phillips@intel.com>
+
+ * meson.build:
+ * tests/meson.build:
+ meson: Don't depend on gstreamer-check-1.0 on windows
+ https://bugzilla.gnome.org/show_bug.cgi?id=773114
+
+2016-10-25 10:51:08 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * meson.build:
+ * tests/check/meson.build:
+ * tests/meson.build:
+ Revert "meson: move gstreamer-check-1.0 dependency to tests/check"
+ This reverts commit 0555c09607e548b6c45d029ab31dbb3042195ae3.
+ Does not actually work. See:
+ https://bugzilla.gnome.org/show_bug.cgi?id=773114#c31
+
+2016-10-24 00:35:23 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/check/meson.build:
+ meson: fix build outside of gst-all
+
+2016-10-21 00:47:14 -0700 Scott D Phillips <scott.d.phillips@intel.com>
+
+ * meson.build:
+ * tests/check/meson.build:
+ * tests/meson.build:
+ meson: move gstreamer-check-1.0 dependency to tests/check
+ https://bugzilla.gnome.org/show_bug.cgi?id=773114
+
+2016-10-15 22:20:05 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * meson.build:
+ meson: Don't set c_std to gnu99
+ Use the default for each compiler on every platform instead. This
+ improves our compatibility with compilers that don't have gnu99 as
+ a c_std.
+
+2016-10-04 18:06:09 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * meson.build:
+ * tests/check/getpluginsdir:
+ * tests/check/meson.build:
+ meson: Make use of new environment object and set plugin path to builddir
+ Workaround source_root being the root directory of all projects
+ in the subproject case and remove now unneeded getpluginsdir
+ Bump meson requirement to 0.35
+
+2016-09-30 11:35:40 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * hooks/pre-commit.hook:
+ * meson.build:
+ * tests/check/getpluginsdir:
+ meson: Setup pre commit hook and fix getpluginsdir for standalone case
+
+2016-09-30 11:41:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ meson: update version
+
+=== release 1.9.90 ===
+
+2016-09-30 13:03:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.9.90
+
+2016-09-30 12:23:17 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-09-30 11:44:22 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2016-09-29 12:39:34 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Set colorimetry and chroma-site information
+ https://bugzilla.gnome.org/show_bug.cgi?id=772159
+
+2016-09-24 09:08:00 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * po/meson.build:
+ meson: hook up translations
+
+2016-09-24 08:59:55 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ * tests/check/getpluginsdir:
+ * tests/check/meson.build:
+ * tests/meson.build:
+ meson: hook up unit tests
+
+2016-09-14 11:30:58 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ configure: Depend on gstreamer 1.9.2.1
+
+2016-09-10 20:51:36 +1000 Jan Schmidt <jan@centricular.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From b18d820 to f980fd9
+
+2016-09-10 09:54:15 +1000 Jan Schmidt <jan@centricular.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From f49c55e to b18d820
+
+2016-09-05 12:22:56 -0300 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * meson.build:
+ meson: Bump version to 1.9.2
+
+2016-09-01 12:28:57 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.9.2 ===
+
+2016-09-01 12:28:45 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.9.2
+
+2016-09-01 11:24:13 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: Update translations
+
+2016-09-01 10:57:46 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: Fix compilation with debugging disabled
+ gstsiddec.o
+ gstsiddec.cc: In function ‘void play_loop(GstPad*)’:
+ gstsiddec.cc:446:18: error: unused variable ‘reason’ [-Werror=unused-variable]
+ const gchar *reason = gst_flow_get_name (ret);
+ ^
+
+2016-08-19 11:11:14 -0700 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rmdemux.c:
+ Use the new API to post flow ERROR messages on the bus
+ https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-24 09:45:05 -0300 Thibault Saunier <tsaunier@gnome.org>
+
+ * gst/asfdemux/meson.build:
+ meson: Link asfdemux against the gstsdp library
+
+2016-08-23 15:29:10 -0300 Thibault Saunier <tsaunier@gnome.org>
+
+ * meson.build:
+ meson: Add support for fallback subprojects
+
+2016-08-12 21:25:34 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * .gitignore:
+ * config.h.meson:
+ * ext/a52dec/meson.build:
+ * ext/amrnb/meson.build:
+ * ext/amrwbdec/meson.build:
+ * ext/cdio/meson.build:
+ * ext/dvdread/meson.build:
+ * ext/lame/meson.build:
+ * ext/mad/meson.build:
+ * ext/meson.build:
+ * ext/mpeg2dec/meson.build:
+ * ext/mpg123/meson.build:
+ * ext/twolame/meson.build:
+ * ext/x264/meson.build:
+ * gst/asfdemux/meson.build:
+ * gst/dvdlpcmdec/meson.build:
+ * gst/dvdsub/meson.build:
+ * gst/meson.build:
+ * gst/realmedia/meson.build:
+ * gst/xingmux/meson.build:
+ * meson.build:
+ Add support for Meson as alternative/parallel build system
+ https://github.com/mesonbuild/meson
+ With contributions from:
+ Tim-Philipp Müller <tim@centricular.com>
+ Jussi Pakkanen <jpakkane@gmail.com> (original port)
+ Highlights of the features provided are:
+ * Faster builds on Linux (~40-50% faster)
+ * The ability to build with MSVC on Windows
+ * Generate Visual Studio project files
+ * Generate XCode project files
+ * Much faster builds on Windows (on-par with Linux)
+ * Seriously fast configure and building on embedded
+ ... and many more. For more details see:
+ http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+ http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+ Building with Meson should work on both Linux and Windows, but may
+ need a few more tweaks on other operating systems.
+
+2016-08-12 21:41:39 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/x264/gstx264enc.h:
+ * gst/realmedia/realhash.c:
+ * gst/realmedia/rtspreal.c:
+ plugins: Use <stdint.h> instead of _stdint.h
+ _stdint.h is generated by Autotools and we don't really need it. All
+ supported platforms now ship with stdint.h. The only stickler was MSVC,
+ and since Visual Studio 2015 it also ships stdint.h now.
+
+2016-08-19 13:01:39 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpeg2dec/perftest.c:
+ mpeg2dec: remove file no longer used or needed
+
+2016-08-08 09:58:20 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/dvdlpcmdec/Makefile.am:
+ dvdlpcmdec: add libgstbase CFLAGS as well
+ For consistency.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769610
+
+2016-08-07 00:10:24 +0000 xlazom00 <xlazom00@gmail.com>
+
+ * gst/dvdlpcmdec/Makefile.am:
+ dvdlpcmdec: link libgstbase-1.0
+ https://bugzilla.gnome.org/show_bug.cgi?id=769610
+
+2016-08-02 13:38:25 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Add byte rate based bitrate tag in case there are no audio props
+ https://bugzilla.gnome.org/show_bug.cgi?id=769418
+
+2016-04-28 16:42:43 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: add support for another format
+ The format specification can be found here:
+ http://www.dvdforum.org/images/Guideline1394V10R0_20020911.pdf
+ Note: This format is also used for Wifi-Display.
+ https://bugzilla.gnome.org/show_bug.cgi?id=765807
+
+2016-04-28 16:32:53 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: rewrite to use GstAudioDecoder
+ https://bugzilla.gnome.org/show_bug.cgi?id=765807
+
+2016-07-24 10:00:48 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ sidplay: fix compiler warnings when building with -O3
+ Avoid compiler warnings "‘foo’ may be used uninitialized in this
+ function" when building with -O3 by checking the return bool value
+ of format conversion function.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769116
+
+2016-07-11 21:14:06 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f363b32 to f49c55e
+
+2016-07-06 13:51:09 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:15:28 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.9.1
+
+2016-07-06 11:54:01 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-07-06 10:19:44 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/hr.po:
+ po: Update translations
+
+2016-06-21 11:46:53 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * common:
+ Automatic update of common submodule
+ From ac2f647 to f363b32
+
+2015-05-12 11:08:55 +0300 Vootele Vesterblom <vov@bang-olufsen.dk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix seeking back after EOS has been reached in push mode
+ Fix seeking when demuxer is in INDEX state. This happens when we
+ reached the end of the stream. It should still be possible to do
+ a flushing seek and seek back to any other position though. Instead
+ the demuxer would just go straight to EOS again instead of going
+ back to processing packets again from the new position.
+ https://bugzilla.gnome.org/show_bug.cgi?id=749066
+
+2016-05-17 16:00:29 +0300 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ rdtmanager: fix clock leak
+ The clock returned by gst_system_clock_obtain() was never unreffed.
+ https://bugzilla.gnome.org/show_bug.cgi?id=766565
+
+2016-05-15 13:33:30 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ docs: Update for git master
+
+2016-04-16 09:15:43 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/mad/gstmad.c:
+ amrnbec, mad: fix two more parse function declarations
+
+2016-04-15 20:46:37 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrwbdec/amrwbdec.c:
+ a52dec, amrwbec: fix parse function declaration mismatch
+ Fixes MSVC compiler warning:
+ amrwbdec.c(99): warning C4133: '=': incompatible types
+ - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
+ 'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
+ gsta52dec.c(156): warning C4133: '=': incompatible types
+ - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
+ 'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
+
+2016-04-15 19:55:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.h:
+ mpg123: fix build with msvc
+ Fix syntax errors when compiling against cerbero-provided libmpg123
+ headers. We do the same as the libmpg123 internal visual studio
+ build here.
+ mpg123.h(1378): error C2143: syntax error: missing ')' before '('
+ mpg123.h(1378): error C2081: 'ssize_t': name in formal parameter list illegal
+ mpg123.h(1378): error C2143: syntax error: missing ')' before '*'
+ mpg123.h(1378): error C2091: function returns function
+ mpg123.h(1378): error C2143: syntax error: missing '{' before '*'
+ mpg123.h(1378): error C2059: syntax error: ')'
+ mpg123.h(1379): error C2143: syntax error: missing ')' before '*'
+ mpg123.h(1379): error C2365: 'off_t': redefinition; previous definition was 'typedef'
+ ...
+
+2016-04-15 18:37:42 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: bump libmpeg2 requirement to 0.5.1 and fix msvc build
+ libmpeg2 0.5.1 was released in mid-2008, let's bump the requirement
+ and get rid of version-dependent code paths. There's still
+ avdec_mpeg2video for those who are stuck on ancient distros which
+ we don't target any more.
+ Also fixes build with MSVC, which doesn't like #if #else #endif
+ inside macro arguments (like the GST_DEBUG_OBJECT in line 941).
+
+2016-04-14 10:02:50 +0100 Julien Isorce <j.isorce@samsung.com>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 6f2d209 to ac2f647
+
+2016-03-04 16:14:44 +0900 Vineeth TM <vineeth.tm@samsung.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/xingmux/gstxingmux.c:
+ ugly: use new gst_element_class_add_static_pad_template()
+ https://bugzilla.gnome.org/show_bug.cgi?id=763082
+
+2016-03-24 13:33:22 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.8.0 ===
+
+2016-03-24 12:43:04 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.8.0
+
+2016-03-24 12:18:09 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+=== release 1.7.91 ===
+
+2016-03-15 12:21:07 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.7.91
+
+2016-03-15 12:03:34 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-03-08 12:26:01 +0100 Edward Hervey <edward@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Don't modify segment values on accurate seeks
+ When dealing with accurate seeks, we want to return exactly the segment
+ that was requested by the seek event, and not adjust the values.
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+=== release 1.7.90 ===
+
+2016-03-01 18:42:01 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.7.90
+
+2016-03-01 17:18:01 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-03-01 16:54:07 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/bg.po:
+ po: Update translations
+
+2016-02-27 20:17:31 +0100 Jens Georg <mail@jensge.org>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdread: Fix seek starting at 0 for title != 1
+ Otherwise the playback would start at title 0
+ https://bugzilla.gnome.org/show_bug.cgi?id=762787
+
+2016-02-26 12:41:18 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From b64f03f to 6f2d209
+
+2016-02-22 22:08:12 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix adding bitrate to stream tags
+ https://bugzilla.gnome.org/show_bug.cgi?id=699586
+
+2016-02-21 10:11:12 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/asf.vcproj:
+ * gst/realmedia/rmdemux.vcproj:
+ * win32/MANIFEST:
+ * win32/gst.sln:
+ * win32/vs6/gst_plugins_ugly.dsw:
+ * win32/vs6/libgstasfdemux.dsp:
+ * win32/vs6/libgstdvdlpcmdec.dsp:
+ * win32/vs6/libgstdvdsub.dsp:
+ * win32/vs6/libgstlame.dsp:
+ * win32/vs6/libgstmad.dsp:
+ * win32/vs6/libgstrealmedia.dsp:
+ * win32/vs6/libgstsynaesthesia.dsp:
+ win32: remove outdated build cruft
+ This hasn't been touched for generations, doesn't work,
+ and is just causing confusion. We also don't want to
+ maintain these files manually.
+
+2016-02-20 11:55:37 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: don't use exported but undeclared core debug category symbols
+ It's not right and won't work on Windows with MSVC.
+
+2016-02-19 12:38:34 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.7.2 ===
+
+2016-02-19 11:58:13 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.7.2
+
+2016-02-19 11:21:03 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2016-02-19 10:32:06 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/fr.po:
+ * po/pt_BR.po:
+ po: Update translations
+
+2016-02-18 00:25:56 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ sidplay: Fix compiler warning about C++11 compatibility
+ gstsiddec.cc:78:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+ #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+ ^
+ gstsiddec.cc:78:38: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+ #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+ ^
+
+2016-02-16 14:46:11 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ docs: update inspection to git and fix mpg123 inspect location
+
+2016-02-16 12:23:33 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/files/Makefile.am:
+ * tests/files/stream.mp2:
+ tests: fix distcheck
+
+2016-02-16 10:38:18 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/xml/plugin-mpg123.xml:
+ * ext/Makefile.am:
+ * gst-plugins-ugly.spec.in:
+ * tests/check/Makefile.am:
+ mpg123: move from -bad to -ugly
+ Hook up to build system, add to docs
+
+2016-02-16 10:55:01 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * tests/Makefile.am:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/files/Makefile.am:
+ * tests/files/cbr_stream.mp3:
+ * tests/files/vbr_stream.mp3:
+ tests: add test data for mpg123 plugin
+
+2016-02-16 10:41:07 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ Merge branch 'plugin-move-mpg123'
+ Move mpg123 plugin from -bad to -ugly.
+ https://bugzilla.gnome.org/show_bug.cgi?id=719849
+
+2015-12-14 11:09:46 +0900 Vineeth TM <vineeth.tm@samsung.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ plugins-bad: Fix example pipelines
+ rename gst-launch --> gst-launch-1.0
+ replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
+ fix caps in examples
+ https://bugzilla.gnome.org/show_bug.cgi?id=759432
+
+2015-08-17 11:50:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: still reset pending audio info on hard flush
+ Follow-up to previous commit.
+ https://bugzilla.gnome.org/show_bug.cgi?id=752431
+
+2015-07-15 10:44:02 -0600 Jason Litzinger <jlitzinger@control4.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: fix handling of sample rate change during playback
+ If the sample rate of the media changes, the resulting flush will
+ clear the has_next_audioinfo flag, and the caps won't be sent
+ downstream.
+ https://bugzilla.gnome.org/show_bug.cgi?id=752431
+
+2015-08-15 12:58:40 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ audiodecoders: use default pad accept-caps handling
+ Avoids useless check of downstream caps when handling an
+ accept-caps query
+ Elements: dtsdec, faad, gsmdec, mpg123audiodec, opusdec,
+ sbcdec, adpcmdec, sirendec
+
+2015-04-26 18:04:16 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/Makefile.am:
+ Remove obsolete Android build cruft
+ This is not needed any longer.
+
+2015-01-11 01:08:08 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: fix compiler warning and simplify checks in set_caps
+ https://bugzilla.gnome.org/show_bug.cgi?id=740195
+
+2015-01-03 13:06:45 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: rework set_format code so mpg123audiodec works with decodebin/playbin
+ The old code was using gst_caps_normalize() and was generally overly
+ complex. Simplify by picking sample rate and number of channels from
+ upstream and the sample format from the allowed caps. If the format caps
+ is a list of strins, just pick the first one. And if the srcpad isn't
+ linked yet, use the default format (S16).
+ https://bugzilla.gnome.org/show_bug.cgi?id=740195
+
+2014-09-10 17:24:39 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ Fix up one-element lists in template caps
+
+2014-03-05 00:51:04 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/check/elements/mpg123audiodec.c:
+ tests: fix mpg123audiodec test for big-endian architectures
+
+2014-02-04 17:22:27 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: improved error report and checks
+ Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+
+2013-12-05 12:04:39 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123audiodec: Require caps to be set before any data processing
+
+2013-07-26 17:25:42 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: Remove dead assignment
+ harder ? :)
+
+2013-05-15 11:25:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/elements/mpg123audiodec.c:
+ mpg123audiodec: Fix event handling in unit test
+
+2012-10-24 12:16:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpg123/Makefile.am:
+ gst: Add better support for static plugins
+
+2013-04-15 00:22:39 -0700 David Schleef <ds@schleef.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: Add conditional on API version for new enum
+
+2016-02-05 19:11:38 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * tests/check/Makefile.am:
+ tests: extend the AM_TESTS_ENVIRONMENT from check.mak
+ To get the CK_DEFAULT_TIMEOUT defined for all tests
+ https://bugzilla.gnome.org/show_bug.cgi?id=761472
+
+2016-02-05 18:07:02 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From 86e4663 to b64f03f
+
+2016-01-25 20:00:26 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrwbdec/amrwbdec.h:
+ amrnb, amrwb: unconditionally depend on opencore-amr*b >= 0.1.3
+ We don't really need to cater for older versions any more.
+
+2016-01-21 17:34:38 +0100 Edward Hervey <edward@centricular.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Demote rank to SECONDARY
+ https://bugzilla.gnome.org/show_bug.cgi?id=574461
+
+2016-01-08 21:40:53 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: use query caps instead of accept-caps
+ accept-caps does only a shallow check and a full downstream
+ caps query is needed to check if ARGB is possible
+
+2015-10-30 11:06:11 +0530 Ravi Kiran K N <ravi.kiran@samsung.com>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Support reverse playback
+ Support reverse playback for ASF format.
+ Parse packets and queue the payloads, then push
+ the payload buffer to decoder in reverse order.
+ Video buffers are pushed from KeyFrame to next
+ Keyframe.
+ https://bugzilla.gnome.org/show_bug.cgi?id=757341
+
+2015-12-24 15:28:46 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+2015-12-24 14:48:50 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/elements/amrnbenc.c:
+ amrnbenc: Fix various compiler warnings in the test
+
+2015-12-24 14:48:38 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/elements/x264enc.c:
+ x264enc: Fix various compiler warnings in the test
+
+=== release 1.7.1 ===
+
+2015-12-24 14:41:21 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.7.1
+
+2015-12-24 14:10:29 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2015-12-24 12:23:27 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2015-12-21 12:32:32 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ configure: Use -Bsymbolic-functions if available
+ While this is more useful for libraries, some of our plugins with multiple
+ files and some internal API can also benefit from this.
+
+2015-12-16 09:36:08 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ docs: update to git
+
+2015-12-07 09:08:18 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From b319909 to 86e4663
+
+2015-11-26 15:49:47 +0000 Arjen Veenhuizen <arjen.veenhuizen@tno.nl>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: increase bitrate limit from 100Mbps to 2Gbps
+ Don't artificially limit the bitrate, x264enc allows much
+ higher bitrates, and for intra-only 4k AVC they are needed.
+ x264 clips to 2Gbps internally, so use that as limit for now.
+ https://bugzilla.gnome.org/show_bug.cgi?id=758620
+
+2015-11-18 23:20:59 -0800 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: drop unnecessary NULL check before g_free
+
+2015-10-21 14:35:17 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From b99800a to b319909
+
+2015-10-20 17:29:42 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Use new GST_ENABLE_EXTRA_CHECKS #define
+ https://bugzilla.gnome.org/show_bug.cgi?id=756870
+
+2015-10-21 14:26:07 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 9aed1d7 to b99800a
+
+2015-10-02 22:24:46 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Update GLib dependency to 2.40.0
+
+2015-09-29 14:16:07 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * ext/dvdread/README:
+ dvdread: remove broken link
+ Removing instead of updating as previously pointed-to page
+ (now http://dvd.sourceforge.net/dvdinfo/) is already linked
+ from dvd.sourceforge.net's homepage as: "Collection of
+ information on file formats/data structures relating to DVD
+ navigation/SPUs."
+
+2015-09-26 09:23:05 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: fix invalid read beyond channel position array
+ We would always copy sizeof(sorted_position) bytes, which is
+ for 8 channels, but if we have less than 8 channels the
+ position array we copy from will only have allocated space
+ for channel channels, so we would read beyond the input
+ array in some cases.
+
+2015-08-25 10:08:46 +0900 HoonHee Lee <hoonhee.lee@lge.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: factor out common code to set output format into new function
+ When caps event is recieved and header is changed, reordering channel
+ and setting the default output format for audio are processed. These 2 of
+ code are same. Thus, It is better to make a new function for these common
+ code in terms of removing duplicated code, maintenance and expansion.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753920
+
+2015-09-23 20:45:34 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't push any data on pads after the segment.stop
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 20:30:21 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Only change segment start to a keyframe for KEYUNIT seeks
+ Not for accurate seeks, which should accurately start at the requested
+ position.
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 20:23:40 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Update segment.position when pushing buffers
+ Without this, non-flushing seeks are not going to work well.
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 19:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Only push EOS event if we're not doing a segment seek
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 16:31:28 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: If pushing buffers returned EOS, go into the EOS and not failure code path
+ We don't want to unconditionally send an EOS event downstream, but might want
+ to send a SEGMENT_DONE message/event instead if a segment seek was done
+ before.
+ https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-25 23:51:12 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.6.0 ===
+
+2015-09-25 23:32:02 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.6.0
+
+2015-09-25 23:04:56 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+=== release 1.5.91 ===
+
+2015-09-18 20:01:17 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.5.91
+
+2015-09-18 19:34:50 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2015-09-18 11:53:57 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/zh_CN.po:
+ po: Update translations
+
+2015-09-05 23:34:45 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Add bitrate info to the tags output.
+ Makes it possible for muxers to know the target bitrate as soon
+ as encoding starts, which flvmux now uses.
+
+2015-08-28 19:18:32 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: fix file mode of some source files
+
+=== release 1.5.90 ===
+
+2015-08-19 14:05:27 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.5.90
+
+2015-08-19 12:55:35 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2015-08-19 11:33:01 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/sv.po:
+ po: Update translations
+
+2015-08-18 02:23:55 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: actually return TRUE from accept-caps handler
+ The query was handled
+
+2015-08-16 14:27:44 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: implement accept-caps handling
+ Implement accept-caps handling without doing caps queries downstream
+
+2015-08-15 22:15:26 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/amrnb/amrnbenc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/twolame/gsttwolamemp2enc.c:
+ audioencoders: use template subset check for accept-caps
+ It is faster than doing a query that propagates downstream and
+ should be enough
+ Elements: amrnbenc, lamemp3enc, twolamemp2enc
+
+2015-08-15 11:46:59 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: use default pad accept-caps handling
+ Avoids useless check of downstream caps when handling an
+ accept-caps query
+
+2015-08-15 11:46:13 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/mad/gstmad.c:
+ audiodecoders: use default pad accept-caps handling
+ Avoids useless check of downstream caps when handling an
+ accept-caps query
+ Elements: a52dec, amrnbdec, amrwbdec, mad
+
+2015-08-14 11:14:31 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * tests/check/generic/states.c:
+ check: Rename states unit test
+ Makes it easier to differentiate from other modules states unit test
+
+2015-08-06 10:05:53 +0900 Vineeth TM <vineeth.tm@samsung.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix assertion error when freeing old tags.
+ Check if old_tags is present before calling gst_tag_list_unref
+ https://bugzilla.gnome.org/show_bug.cgi?id=753301
+
+2015-07-24 10:08:34 +0900 Vineeth TM <vineeth.tm@samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix assertion error when codec_data is not present in structure
+ When discovering a particular asf file, caps structure doesn't have
+ codec_data, and this was not being checked before using the same,
+ resulting in assertion error
+ https://bugzilla.gnome.org/show_bug.cgi?id=752803
+
+2015-07-29 15:55:14 +0100 Luis de Bethencourt <luis@debethencourt.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: remove unread value
+ Init value of idx2 is never used. First usage sets it to idx + 1. Removing
+ initial value.
+
+2015-07-25 04:55:15 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't post error on flushing while reading headers
+
+2015-07-21 11:13:27 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: mark tag list as global scope
+
+2015-07-21 11:10:04 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix taglist leak
+ merge doesn't take ownership, so must unref the
+ old tags if we do merge.
+
+2015-07-21 12:44:55 +0900 Vineeth TM <vineeth.tm@samsung.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix wrong unref when there are no tags
+ Tags should be appended to pending tags and unref'ed only if tags
+ are present. Else there is no need to append.
+ https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-16 18:11:37 +0900 Vineeth T M <vineeth.tm@samsung.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix memory leaks during error cases
+ while adding stream, during error cases, only stream is
+ being freed. Adapter, pad, tags, subpackets, index are not being
+ freed resulting in memory leaks
+ https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-16 17:23:15 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst-plugins-ugly.doap:
+ Update mailing list in doap file as well
+
+2015-07-16 17:19:37 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ Update mailing list address from sourceforge to freedesktop
+
+2015-07-16 09:49:17 +0900 Vineeth T M <vineeth.tm@samsung.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix tag memory leak
+ tags is not being freed after being merged to the
+ pending_tags.
+ https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-03 21:58:33 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f74b2df to 9aed1d7
+
+2015-06-25 00:04:19 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.5.2 ===
+
+2015-06-24 23:39:37 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.5.2
+
+2015-06-24 23:14:52 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2015-06-24 11:15:22 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/nl.po:
+ po: Update translations
+
+2015-06-15 16:33:26 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Use gst_video_multiview_guess_half_aspect() function
+ Use gst_video_multiview_guess_half_aspect() to guess if frame-packed
+ stereoscopic video is full-frame per view or not.
+
+2015-06-16 17:49:05 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 6015d26 to f74b2df
+
+2014-11-26 22:15:43 +0100 Matej Knopp <matej.knopp@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Use gst_video_encoder_set_min_pts
+ This method replace the manual adjustment of PTS and DTS to avoid
+ negative DTS issues. Using this method will also update the segment so
+ we don't loos sync.
+ https://bugzilla.gnome.org/show_bug.cgi?id=740575
+
+2015-06-10 14:28:05 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Add support for stereoscopic video metadata.
+ Add parsing of stereoscopic metadata, and place into the caps to
+ the decoder.
+ Fix parsing of Advanced Mutual Exclustion objects.
+ https://bugzilla.gnome.org/show_bug.cgi?id=711190
+ Based on a patch by HyeJin Choi <meeshel78@hotmail.com>
+
+2014-10-05 00:54:59 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Add support for stereoscopic video
+ Provide new frame-packing property to directly set
+ x264enc frame packing, or pass through upstream settings
+ The explicit layout from the frame-packing property is
+ preferred over any info from the caps.
+
+2015-06-10 15:32:44 +0100 Chris Clayton <chris2553@googlemail.com>
+
+ * gst/xingmux/gstxingmux.c:
+ xingmux: fix compiler warnings
+ https://bugzilla.gnome.org/show_bug.cgi?id=750596
+
+2015-06-09 15:28:46 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * Makefile.am:
+ cruft: add the obsolete tmpl dir to cruft-dirs
+
+2015-06-09 11:30:34 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From d9a3353 to 6015d26
+
+2015-06-08 23:08:11 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From d37af32 to d9a3353
+
+2015-06-07 23:06:47 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 21ba2e5 to d37af32
+
+2015-06-07 17:32:12 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From c408583 to 21ba2e5
+
+2015-06-07 17:02:31 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * docs/plugins/Makefile.am:
+ docs: remove variables that we define in the snippet from common
+ This is syncing our Makefile.am with upstream gtkdoc.
+
+2015-06-07 17:16:30 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From d676993 to c408583
+
+2015-06-07 16:44:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.5.1 ===
+
+2015-06-07 11:05:29 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.5.1
+
+2015-06-07 11:05:22 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2015-06-07 09:36:00 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/eo.po:
+ * po/fr.po:
+ po: Update translations
+
+2015-06-02 16:31:10 +0200 Edward Hervey <edward@centricular.com>
+
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/mpeg2dec.c:
+ * tests/check/elements/x264enc.c:
+ * tests/check/elements/xingmux.c:
+ * tests/check/pipelines/lame.c:
+ check: Use GST_CHECK_MAIN () macro everywhere
+ Makes source code smaller, and ensures we go through common initialization
+ path (like the one that sets up XML unit test output ...)
+
+2015-05-26 17:58:18 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: don't artificially limit max allowed value of "threads" property
+ In auto mode it will happily chose much higher values anyway,
+ and a limit of 4 seems a bit low these days.
+
+2015-05-12 22:05:02 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdread: Also reset the first_seek var in start()
+ Make the initial chapter seek work across reuse.
+ https://bugzilla.gnome.org/show_bug.cgi?id=453322
+
+2015-05-12 21:52:24 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/dvdread/dvdreadsrc.h:
+ dvdread: Work around basesrc initial seek
+ Ignore the initial seek basesrc sends, as it
+ breaks starting from another chapter by
+ immediately seeking back to the start of the title
+
+2015-05-10 11:34:33 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/x264/gstx264enc.c:
+ * gst/realmedia/rademux.c:
+ * gst/xingmux/gstxingmux.c:
+ docs: update example pipelines in element docs
+ Mostly gst-launch -> gst-launch-1.0, but also
+ use autoaudiosink/autovideosink in more places
+ and update pipelines a little or flesh out
+ descriptions.
+
+2015-04-27 10:57:12 +0100 Luis de Bethencourt <luis.bg@samsung.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/realmedia/rdtdepay.c:
+ Rename property enums from ARG_ to PROP_
+ Property enum items should be nameed PROP_ for consistency and readability.
+
+2015-04-26 17:56:22 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Android.mk:
+ * ext/mad/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * gst/xingmux/Makefile.am:
+ Remove obsolete Android build cruft
+ This is not needed any longer.
+
+2015-04-24 17:05:20 +0100 Luis de Bethencourt <luis.bg@samsung.com>
+
+ * gst/realmedia/pnmsrc.c:
+ realmedia: remove unused enum item PROP_LAST
+
+2015-04-23 16:23:01 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/check/Makefile.am:
+ tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON
+ Make sure the test environment is set up.
+ https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 16:22:39 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ configure: bump automake requirement to 1.14 and autoconf to 2.69
+ This is only required for builds from git, people can still
+ build tarballs if they only have older autotools.
+ https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 16:22:30 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitignore:
+ Update .gitignore
+
+2015-04-22 10:37:54 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * LICENSE_readme:
+ Remove LICENSE_readme
+ It's completely outdated and just confusing, better if people are
+ forced to look at the actual code in question than trusting this file.
+
+2015-04-22 10:37:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * INSTALL:
+ Remove INSTALL file
+ autotools automatically generate this, and when using different versions
+ for autogen.sh there will always be changes to a file tracked by git.
+
+2015-04-20 14:35:30 +0900 Cliff Han <cliff.han@lge.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix a seek failure due to out-of-range in push mode
+ A seek in push mode failed for big offsets which are beyond
+ the range of guint32.
+ https://bugzilla.gnome.org/show_bug.cgi?id=748162
+
+2015-04-08 16:52:06 +0200 Edward Hervey <edward@centricular.com>
+
+ * common:
+ * tests/check/Makefile.am:
+ tests: Use AM_TESTS_ENVIRONMENT
+ Needed by the new automake test runner
+
+2015-04-03 18:58:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From bc76a8b to c8fb372
+
+2015-04-02 17:24:05 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: fix race in liba52dec lookup table initialization
+ a52_init initializes the IMDCT global state as well as creating
+ a new state. When two A52 decoders are created (eg, when two AC3
+ tracks are contained in a video), calls to a52_init may happen
+ at the same time, and the IMDCT initialization is not reentrant.
+ https://bugzilla.gnome.org/show_bug.cgi?id=746781
+
+2015-03-27 14:41:51 +0100 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix buffer leak in crop_buffer()
+ gst_buffer_pool_acquire_buffer() gives us a new owned buffer while
+ gst_buffer_replace() reffed it as well so we were one reference extra.
+ https://bugzilla.gnome.org/show_bug.cgi?id=746887
+
+2015-03-28 16:58:26 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: resurrect some flow return handling
+ https://bugzilla.gnome.org/show_bug.cgi?id=744572
+
+2015-03-28 16:57:06 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: resurrect some flow return handling
+ https://bugzilla.gnome.org/show_bug.cgi?id=744572
+
+2015-03-24 12:50:43 +0000 Luis de Bethencourt <luis.bg@samsung.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix memory leak
+ CID #1291630
+
+2015-03-24 10:29:48 +0000 Luis de Bethencourt <luis.bg@samsung.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: initialize buffer
+ Buffer needs to be null before passing it to gst_buffer_pool_acquire_buffer()
+ CID #1291634
+
+2015-03-13 17:00:03 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Add stride support
+ This allow using external pools that have different strides from the
+ default. These strides need to respect certain rules, which we check
+ and if these are not met, we fallback to generic pool.
+ https://bugzilla.gnome.org/show_bug.cgi?id=735379
+
+2015-03-10 16:45:01 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Re-implement pool handling
+ This is a rewrite of the pool negotiation and configuration. Direct
+ to output decoding is now achieved by configuring the pool using
+ video-alignment. This removes copies when dealing with any elements that
+ supports VideoAlignment, and enable usage of generic video buffer pool,
+ XVImagePool and GLPool. It drops the crop meta implementation for now.
+ https://bugzilla.gnome.org/show_bug.cgi?id=735379
+
+2015-03-10 09:33:15 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvbsub: fix indentation
+
+2015-03-10 09:32:51 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ Fix double semicolons
+
+2015-03-09 19:11:51 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Revert "mpeg2dec: Fix handling of stride"
+ This reverts commit f3e8dcb9de4d546e7d80ccc1754ed13dd4e7ac81.
+
+2015-03-09 19:11:44 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Revert "mpeg2dec: Use propose unref method for buffer"
+ This reverts commit 63b43d3bee832aec353d02575da543f3c73f6893.
+
+2015-03-09 18:43:43 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Use propose unref method for buffer
+
+2015-01-21 18:29:22 +0000 Simon Farnsworth <simon.farnsworth@onelan.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix handling of stride
+ A pipeline like:
+ gst-launch-1.0 filesrc location=file.ts ! tsdemux ! mpegvideoparse ! mpeg2dec ! vaapisink
+ would look bad when file.ts contains 704x576 video, because vaapisink would
+ give you buffers of stride 768, but libmpeg2 was not told about this and
+ used a stride of 704.
+ Tell libmpeg2 about the stride from downstream; in the process, teach it to
+ reject buffer pools that don't meet libmpeg2's chroma stride requirements
+ Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
+
+2015-02-11 13:56:48 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ Improve and fix LATENCY query handling
+ This now follows the design docs everywhere, especially the maximum latency
+ handling.
+ https://bugzilla.gnome.org/show_bug.cgi?id=744106
+
+2015-02-06 19:04:32 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Don't set max latency to the same value as the encoder latency
+ The meaning of the max latency is *not* the maximum latency this element will
+ introduce. It is the maximum latency this element can endure without
+ overflowing any buffers, which is infinite for x264enc.
+ Fixes latency configuration in zero latency mode, where max latency was
+ becoming 0... which usually won't work well if something else introduces
+ latency as then max < min in the end, and latency configuration just fails.
+
+2015-02-02 14:13:10 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: set annexb=1 in byte stream mode when downstream has ANY caps
+ This matches what is done when downstream caps are not ANY, and fixes
+ prerolling in byte stream mode when typefind is downstream.
+
+2015-01-21 09:56:41 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/lame/gstlamemp3enc.c:
+ * ext/twolame/gsttwolamemp2enc.c:
+ Constify some static arrays everywhere
+
+2015-01-18 16:53:41 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ configure: remove non-ported plugins stuff
+ It's not needed any longer, all plugins in -ugly
+ have been ported.
+
+2015-01-18 11:07:43 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Don't set an allocation maximum
+ There is no reason x264enc should enforce a maximum allocation size.
+ The maximum is normally set by buffer pool which cannot grow, but we
+ don't offer a buffer pool. This would lead to stall when used with
+ element that don't implement allocation query.
+ Related to: https://bugzilla.gnome.org/show_bug.cgi?id=738302
+
+2015-01-12 16:10:45 +0100 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f2c6b95 to bc76a8b
+
+2014-12-22 11:46:27 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * MAINTAINERS:
+ MAINTAINERS: Update my mail address
+
+2014-12-18 10:54:30 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From ef1ffdc to f2c6b95
+
+2014-11-27 17:11:30 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From 7bb2bce to ef1ffdc
+
+2014-06-06 13:59:57 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: set channel positions using the appropriate API
+ https://bugzilla.gnome.org/show_bug.cgi?id=731038
+
+2014-11-05 23:34:56 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix comment
+
+2014-11-05 13:45:29 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Send duration query upstream first
+ An upstream element (like mms or some dlna source) might be able to
+ answer the query. Try that first, else fallback to standard logic
+
+2014-11-02 17:31:05 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asf: fix up file mode
+
+2014-10-27 17:58:14 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 84d06cd to 7bb2bce
+
+2014-10-21 19:46:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * Makefile.am:
+ tests: parallelise 'make check-valgrind'
+
+2014-10-21 13:02:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From a8c8939 to 84d06cd
+
+2014-10-21 12:58:58 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 36388a1 to a8c8939
+
+2014-08-22 10:46:35 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: first try to delegate TIME seek events upstream
+ We should give a chance to upstream to handle TIME seek events before trying
+ to handle it in asfdemux.
+ Fix a bug where fast backward seeks where discarded right away because they
+ were not supported by asfdemux.
+ https://bugzilla.gnome.org/show_bug.cgi?id=734471
+
+2014-09-04 16:57:02 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: add ASF_OBJ_METADATA_LIBRARY_OBJECT
+ We can safely ignore those but best to claim to understand this object type so
+ we don't raise a warning.
+ https://bugzilla.gnome.org/show_bug.cgi?id=736060
+
+2014-08-21 12:09:23 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: if video is h264, check the codec_data for bytestream data
+ For bytestream we don't want to expose it as codec_data but rather as
+ streamheader as it is not out-of-band data but data that should be
+ prepended to the beginning of the stream before the other buffers.
+ https://bugzilla.gnome.org/show_bug.cgi?id=735070
+
+2014-08-10 19:13:10 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ docs: update for git master
+
+2014-08-06 12:07:09 -0300 Thiago Santos <thiagoss@osg.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: simplify log statement
+ Use the GST_PTR_FORMAT to print the buffer
+
+2014-08-05 19:47:26 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: fix colour inversion with YV12 format
+ It's the same as I420 but with the U/V planes swapped.
+
+2014-08-01 10:37:44 +0200 Edward Hervey <edward@collabora.com>
+
+ * Makefile.am:
+ * common:
+ Makefile: Add usage of build-checks step
+ Allows building checks without running them
+
+2014-07-08 16:45:45 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Request buffers in allocation query
+ https://bugzilla.gnome.org/show_bug.cgi?id=732288
+
+2014-06-06 20:23:15 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Shift both PTS and DTS to ensure positive timestamp
+ Currently we only shift DTS to compensate that we don't support negative
+ timestamp. This cause a problem that PTS is no longer >= DTS and may
+ make muxers live much harder. Instead, shift both PTS/DTS forward. Also
+ remove all the hack to handle this which seems the result of thinking libx264
+ is bugged.
+ https://bugzilla.gnome.org/show_bug.cgi?id=731351
+
+2014-07-19 18:04:46 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.4.0 ===
+
+2014-07-19 17:44:06 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.4.0
+
+2014-07-19 16:50:04 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-07-19 12:48:11 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/sv.po:
+ po: Update translations
+
+=== release 1.3.91 ===
+
+2014-07-11 11:44:28 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.3.91
+
+2014-07-11 11:13:39 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-07-11 08:53:12 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/vi.po:
+ po: Update translations
+
+2014-07-04 03:22:00 +0200 Sebastian Rasmussen <sebras@hotmail.com>
+
+ * gst/realmedia/rademux.c:
+ rademux: Print invalid fourcc in error message in hex
+ Previously this was printed as characters which caused later processing
+ of the error message to sometimes warn about non-UTF-8 characters.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732716
+
+=== release 1.3.90 ===
+
+2014-06-28 11:39:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.3.90
+
+2014-06-28 11:39:01 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-06-22 21:48:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * .gitignore:
+ Ignore autotools test-driver temp files from 'make check'
+
+2014-06-22 19:36:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.3.3 ===
+
+2014-06-22 18:13:53 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.3.3
+
+2014-06-22 17:40:40 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-06-22 14:25:18 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/de.po:
+ * po/nl.po:
+ po: Update translations
+
+2014-05-26 17:55:43 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ rmdemux: use GstFlowCombiner
+ Removes flow return combination code to use the newly added GstFlowCombiner
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-23 18:17:11 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: use GstFlowCombiner
+ Removes flow return combination code to use the newly added GstFlowCombiner
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-28 09:49:59 +0200 Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix caps leak in set_format()
+ https://bugzilla.gnome.org/show_bug.cgi?id=730865
+
+2013-12-01 20:53:03 +0100 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Handle initial 0 timestamp that should have been -1
+ https://bugzilla.gnome.org/show_bug.cgi?id=719660
+
+2014-05-21 13:23:33 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.3.2 ===
+
+2014-05-21 13:06:35 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * docs/plugins/inspect-build.stamp:
+ * docs/plugins/inspect.stamp:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.3.2
+
+2014-05-21 12:53:52 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-05-21 10:51:38 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 211fa5f to 1f5d3c3
+
+2014-05-16 16:24:46 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: remove unused struct members
+
+2014-05-16 12:21:06 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: Fix some memory leaks in an error path
+ CID 1212165.
+
+2014-05-09 14:54:54 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Release codec state on negotiation failures
+ Else it leaks
+ CID #1212169
+
+2014-05-03 20:48:37 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.3.1 ===
+
+2014-05-03 18:29:23 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.3.1
+
+2014-05-03 18:21:01 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2014-05-03 17:23:39 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/de.po:
+ * po/id.po:
+ * po/lv.po:
+ * po/sk.po:
+ * po/sr.po:
+ po: Update translations
+
+2014-05-03 10:15:28 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From bcb1518 to 211fa5f
+
+2014-04-27 00:29:16 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rtspreal.c:
+ docs: remove outdated and pointless 'Last reviewed' lines from docs
+ They are very confusing for people, and more often than not
+ also just not very accurate. Seeing 'last reviewed: 2005' in
+ your docs is not very confidence-inspiring. Let's just remove
+ those comments.
+
+2014-04-10 17:29:30 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: fix spurious rejection of 0 time offset commands
+ Coverity 206168
+
+2014-04-10 16:53:25 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdread: avoid intermediate promotion to signed
+ We should not reach the dangerous range here, though.
+ Coverity 206491, 206492, 1139856
+
+2014-01-17 10:46:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: do not reset the whole video info when setting size
+ New changes to gstvideo will reset all the video info state
+ when calling _set_format, overwriting what was previously set
+ in the preceding code.
+ The comment says the following code is meant to preserve the
+ pre-crop size, so let's just keep the size and related data
+ as this does not seem to break anything else (this is what
+ the _set_format call would have set before the change that
+ reset all data, except the colorimetry).
+
+2014-04-03 15:06:22 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix payloads check
+ Don't iterate stream->payloads if ... it doesn't exist
+ CID #1139846
+
+2014-03-02 05:11:10 +0100 Sebastian Rasmussen <sebras@hotmail.com>
+
+ * .gitignore:
+ .gitignore: Ignore gcov intermediate files
+ https://bugzilla.gnome.org/show_bug.cgi?id=725483
+
+2014-02-28 09:35:10 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From fe1672e to bcb1518
+
+2014-02-26 22:12:50 +0100 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 1a07da9 to fe1672e
+
+2014-02-26 11:31:03 +0100 Stefan Sauer <ensonic@users.sf.net>
+
+ * docs/Makefile.am:
+ docs: install prebuilt plugin docs if gtk-doc is disabled
+ Sync to the Makefile.am from gst-plugin-base where it is done right.
+ Fixes #725034
+
+2014-02-13 09:39:04 +0100 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/xingmux/gstxingmux.c:
+ * gst/xingmux/plugin.c:
+ xingmux: add muxer category and make element plugable
+ This is required to make encodebin consider the element. Yet it is not enough to
+ have it plugged it has a lower priority than most mp3encoders and no different
+ caps.
+
+2014-02-24 11:42:00 +0100 Dirk Van Haerenborgh <vhdirk@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: allow lossless compression (qp=0)
+ https://bugzilla.gnome.org/show_bug.cgi?id=725051
+
+2014-02-20 21:08:08 +0100 Edward Hervey <edward@collabora.com>
+
+ * m4/a52.m4:
+ m4: Remove extra check for 11+ year old a52 release
+ You deserve a build failure if you still have that version
+ If someone wants to completely remove this m4 to replace it with the
+ generic AS_GST_CHECK_LIBHEADER() it would be appreciated.
+
+2014-02-19 21:11:55 +0100 Rico Tzschichholz <ricotz@ubuntu.com>
+
+ * m4/a52.m4:
+ m4: Fix multiple tests in AC_CHECK_A52DEC
+
+2014-02-09 23:41:36 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Remove unused function
+
+2014-02-06 19:22:47 +0100 Edward Hervey <edward@collabora.com>
+
+ * tests/check/Makefile.am:
+ check: Fix test location
+
+2014-02-03 02:06:11 +0100 Sebastian Rasmussen <sebras@hotmail.com>
+
+ * tests/check/Makefile.am:
+ tests: Don't build disabled plugins' check tests
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723505
+
+2014-01-30 10:44:29 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From d48bed3 to 1a07da9
+
+2014-01-03 16:20:11 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: only add "format" field with fourcc to WMV caps
+ Doesn't make sense for e.g. H264 or MJPEG.
+
+2013-12-22 22:34:03 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From dbedaa0 to d48bed3
+
+2013-12-22 21:56:03 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/Makevars:
+ po: set gettext domain in Makevars so we don't have to patch the generated Makefile.in.in
+ https://bugzilla.gnome.org/show_bug.cgi?id=705455
+
+2013-12-05 12:16:45 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: Remove some dead code
+
+2013-12-05 12:16:38 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ amrnbdec: Remove some dead code
+
+2013-12-05 12:09:04 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/amrnb/amrnbdec.c:
+ amrnbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
+
+2013-12-05 12:08:46 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
+
+2013-12-05 11:44:10 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Use new gst_video_decoder_set_needs_format() API
+
+2013-11-29 15:51:49 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix compiler warning
+ Compiler warns rightly about possibly uninitialized variable.
+
+2013-11-29 15:49:29 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix crash on NULL caps when negotiation happens without a downstream peer
+ gst-launch-1.0 videotestsrc ! x264enc
+
+2013-11-11 13:15:54 +0100 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: graceful degradation for badly parsed input
+
+2013-11-05 11:20:20 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 865aa20 to dbedaa0
+
+2013-10-22 16:02:04 +0900 HyeJin Choi <meeshel@meeshel78@hotmail.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: mo_size check bug fix. mo_size is not mandatory field.
+ So, don't need to check previous payload's mo_size and current
+ payload's mo_size when merging it.
+ https://bugzilla.gnome.org/show_bug.cgi?id=710609
+
+2013-10-22 15:03:15 -0300 Thiago Santos <ts.santos@partner.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Keep audio error checking fields only for audio
+ Video shouldn't need to be descrambled, this can cause frames data
+ to be corrupted
+ https://bugzilla.gnome.org/show_bug.cgi?id=684942
+
+2013-10-22 00:56:29 -0300 Thiago Santos <ts.santos@partner.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: really copy the buffer data
+ Pass the copy-memory flag to copy the memory for the output buffer,
+ otherwise we end with 0-sized buffers
+ https://bugzilla.gnome.org/show_bug.cgi?id=684942
+
+2013-09-27 08:05:25 -0700 Michael Esemplare <michael.esemplare@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: If FPS is available, set VFR to false
+ https://bugzilla.gnome.org/show_bug.cgi?id=708940
+
+2013-09-24 10:08:10 -0700 Thiago Santos <ts.santos@partner.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Only use segment.start as seek_time if it is relative
+ Relying on the gst_segment_do_seek results for getting the
+ seeking time should not be used if seek type is SET because the
+ do_seek function makes the 'cur` position of the seek normalized
+ on the segment range. This means that seeking beyond the end of the
+ file might not result in instant EOS as it will end up seeking to
+ the final ts of the file.
+ In asf seeking to the final timestamp can lead to seeking to the last
+ keyframe, meaning a few seconds of video will still be played, which should
+ not be the desired behavior when seeking beyong file limits.
+
+2013-09-24 10:07:25 -0700 Thiago Santos <ts.santos@partner.samsung.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Parse last simple index entry
+ The entry size is fixed at 6, fix typo to finish parsing the index
+ correctly until the last sample
+
+2013-09-24 18:32:31 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * README:
+ * common:
+ Automatic update of common submodule
+ From 6b03ba7 to 865aa20
+
+2013-09-24 15:05:36 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ configure: Actually use 1.3.0.1 as version to make configure happy
+
+2013-09-24 15:00:30 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.2.0 ===
+
+2013-09-24 14:27:45 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.2.0
+
+2013-09-24 14:27:39 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-09-18 11:34:56 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Update the documentation to match the default profile used
+ https://bugzilla.gnome.org/show_bug.cgi?id=708036
+
+2013-09-20 16:17:31 +0200 Edward Hervey <edward@collabora.com>
+
+ * common:
+ Automatic update of common submodule
+ From b613661 to 6b03ba7
+
+2013-09-19 18:43:43 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 74a6857 to b613661
+
+2013-09-19 17:36:25 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From 098c0d7 to 74a6857
+
+2013-09-19 11:35:04 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.1.90 ===
+
+2013-09-19 10:50:32 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.1.90
+
+2013-09-19 10:30:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-09-19 09:45:55 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/cs.po:
+ po: Update translations
+
+2013-09-18 19:13:45 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ * tests/check/elements/x264enc.c:
+ x264enc: Implement getcaps that restricts the input format depending on the output profile
+ Also add some x264enc profile tests
+ https://bugzilla.gnome.org/show_bug.cgi?id=708326
+
+2013-09-16 19:38:36 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix playback regression in push mode
+
+2013-09-10 19:33:33 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: remove unused variable
+
+2013-09-05 22:56:48 +0200 Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Don't unref future state but the old one
+ Being silly will lead us nowhere.
+
+2013-09-04 16:32:43 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Check if we have an input state before using it
+ Flushing might happen before caps were set on the encoder,
+ which would lead to crashes here.
+ Thanks to Matej Knopp for analyzing this.
+ https://bugzilla.gnome.org/show_bug.cgi?id=707414
+
+2013-09-03 20:28:35 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix unsigned comparison warning
+
+2013-08-28 13:27:05 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.1.4 ===
+
+2013-08-28 12:58:43 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.1.4
+
+2013-08-28 12:58:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-08-28 12:32:37 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/pt_BR.po:
+ po: update translations
+
+2013-08-27 14:13:06 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: log when we output a lower profile than requested
+
+2013-08-21 18:32:17 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Consider subset relations of profiles when setting srcpad caps
+ constrained-baseline is a subset of baseline, is a subset of main,
+ is a subset of high profile.
+ https://bugzilla.gnome.org/show_bug.cgi?id=705425
+
+2013-08-21 12:31:23 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: propagate flow return back to base class and upstream
+ https://bugzilla.gnome.org/show_bug.cgi?id=705425
+
+2013-08-17 23:13:17 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ configure: fix x264 version checking
+ x264 releases carry pkg-config versions such as 0.120.x
+ (literallly with an 'x'). Checking for x264 >= 0.120.0 will
+ then fail, so we need to either check for > 0.119.0 or
+ for >= 0.120 to make this work right.
+
+2013-08-17 23:09:15 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: minor clean-up
+ We requires x264 build >= 120 now.
+
+2013-08-15 15:30:31 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix mpeg2_reset() calls
+
+2013-08-15 15:27:48 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/x264/gstx264enc.c:
+ ext: Use new flush vfunc of video codec base classes and remove reset implementations
+
+2013-08-01 01:34:05 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix build on C89 compilers
+
+2013-07-30 17:28:17 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix seeking in push mode
+
+2013-08-02 14:14:48 +0200 Lubosz Sarnecki <lubosz@gmail.com>
+
+ * configure.ac:
+ build: add subdir-objects to AM_INIT_AUTOMAKE
+ Fixes warnings in automake 1.14
+ https://bugzilla.gnome.org/show_bug.cgi?id=705350
+
+2013-08-02 08:25:49 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Do a hard reset of flush_stop
+ Which is notified by hard == 0 with latest refactoring.
+
+2013-07-29 21:09:37 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * po/LINGUAS:
+ * po/da.po:
+ * po/de.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/ja.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/pl.po:
+ * po/ru.po:
+ * po/sl.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ po: update translations
+
+2013-07-29 14:48:21 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.1.3 ===
+
+2013-07-29 13:46:08 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.1.3
+
+2013-07-29 13:46:05 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-07-29 12:13:17 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ gst: Don't swap start/stop for negative rates in the SEGMENT query
+
+2013-07-29 10:57:38 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ real: Implement SEGMENT query
+
+2013-07-29 10:56:06 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Implement SEGMENT query
+
+2013-07-28 16:43:28 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Add support for dvr-ms
+ https://bugzilla.gnome.org/show_bug.cgi?id=705026
+
+2013-07-26 16:47:48 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: Ensure output value has an assigned value
+ In the case where this macro was used, that dest was != NULL but that
+ the strncmp failed, we would end up with dest_len being undefined.
+
+2013-07-26 16:39:12 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Fix dts comparision
+ We were assigning to a guint64 value (frame->dts) the sum of a unsigned
+ and signed value... resulting it the result never being < 0.
+ Instead just check if it is smaller before assigning to frame->dts.
+
+2013-07-25 11:28:54 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: fix seqnum handling for seeks
+ Use the same seqnum as the seek for flushes/segments that are
+ caused by the seek. Also do the same for segment events
+ Fixes #676242
+
+2013-07-25 13:35:44 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Clean up reset/start/stop handling
+
+2013-07-25 11:01:20 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: React properly to flushing/resetting the encoder
+ https://bugzilla.gnome.org/show_bug.cgi?id=656007
+
+2013-07-22 16:01:13 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rademux.h:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ realmedia: Add support for group-id in the stream-start event
+
+2013-07-22 15:45:57 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Add support for group-id in the stream-start event
+
+2013-07-22 15:43:18 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ siddec: Add support for group-id in the stream-start event
+
+2013-07-18 17:14:29 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Mark demuxer as "running" in push-mode
+ Allows queries (and other code) to be answered when working in push-mode.
+ Running would only be set to TRUE accordingly when working in pull-mode
+ once it had read header/index.
+ Fixes #680185
+
+2013-07-17 16:17:54 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Properly reset on sequence changes
+ Otherwise we end up using stray data/buffers.
+ Fixes #690701
+
+2013-07-11 16:57:24 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.1.2 ===
+
+2013-07-11 16:12:25 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.1.2
+
+2013-07-11 16:12:21 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-06-18 20:06:24 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: correctly determine last chapter's duration
+ This (mostly) reverts 683f5eeae7b830e4e4b790f3817ff6b8ce517b1c.
+ It worked just fine before ...
+
+2013-06-25 14:20:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ rdt: forward sticky events
+
+2013-06-05 18:36:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.1.1 ===
+
+2013-06-05 17:58:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.1.1
+
+2013-06-05 16:42:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2013-06-05 15:15:16 +0200 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * common:
+ Automatic update of common submodule
+ From 098c0d7 to 01a7a46
+
+2013-06-04 16:12:27 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: make the aspect ratio calculation more accurate.
+ Utilize the libmpeg2 api: mpeg2_guess_aspect() to guess the
+ aspect-ratio if we don't have a valid upstream PAR.
+ https://bugzilla.gnome.org/show_bug.cgi?id=685103
+
+2013-05-15 10:52:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 5edcd85 to 098c0d7
+
+2013-05-13 13:19:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/mpeg2dec.c:
+ * tests/check/elements/x264enc.c:
+ * tests/check/elements/xingmux.c:
+ tests: Fix event handling
+
+2013-05-09 19:40:49 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Tell GstAudioEncoder about the number of incoming samples
+ lame does internal resampling, but the base class only cares about
+ the number of raw samples, so tell finish frames about that, not
+ the number of samples in the outgoing frame.:
+
+2013-04-30 10:01:29 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: output byte-stream if downstream has ANY caps
+ It's what people expect when they pipe the output to
+ filesink or into a tcp connection or pipe.
+
+2013-04-22 23:52:48 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * MAINTAINERS:
+ * README:
+ * README.static-linking:
+ * common:
+ Automatic update of common submodule
+ From 3cb3d3c to 5edcd85
+
+2012-10-24 12:15:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/a52dec/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mad/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * gst/xingmux/Makefile.am:
+ gst: Add better support for static plugins
+
+2013-04-14 17:55:44 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * autogen.sh:
+ * common:
+ Automatic update of common submodule
+ From aed87ae to 3cb3d3c
+
+2013-04-09 21:00:43 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 04c7a1e to aed87ae
+
+2013-03-25 18:05:14 -0700 David Schleef <ds@schleef.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rmdemux.c:
+ Use %03u instead of %u in gst_pad_create_stream_id_printf()
+
+2013-03-06 13:28:37 +0000 Tom Greenwood <tgreenwood@Toms-MacBook-Pro.local>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix for 0/1 framerate - now uses VFR in this case
+ Previously did a division by zero.
+ https://bugzilla.gnome.org/show_bug.cgi?id=695728
+
+2013-03-07 00:02:00 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 2de221c to 04c7a1e
+
+2013-02-08 00:15:01 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: simplify template caps
+ No need to make an array for one single element.
+
+2013-02-08 00:11:03 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: put all theoretically possible formats in template caps
+ and decide at runtime which subset of these (8-bit or 10-bit video
+ formats) is supported. libx264 will be compiled for one of these
+ two options, and it is possible to switch by pointing the dynamic
+ linker to a different libx264 build at runtime. If we want our
+ template caps to be correct, they should contain all then, with
+ the actually supported ones determined at runtime.
+ https://bugzilla.gnome.org/show_bug.cgi?id=691935
+
+2013-01-23 10:16:51 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: detect supported bit depth and pixel formats at runtime
+ http://bugs.debian.org/667573
+ https://bugzilla.gnome.org/show_bug.cgi?id=691935
+
+2013-01-30 09:15:18 +0100 Benjamin Gaignard <benjamin.gaignard@st.com>
+
+ * autogen.sh:
+ autogen.sh: allow calling from out-of-tree
+ Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
+ https://bugzilla.gnome.org/show_bug.cgi?id=692857
+
+2013-01-28 20:43:08 +0100 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From a942293 to 2de221c
+
+2013-01-15 15:18:04 +0100 Martin Pitt <martinpitt@gnome.org>
+
+ * tests/check/Makefile.am:
+ tests: use _1_0 variants for the various registry variables
+ These override the variants without version suffix. Makes 'make check' work
+ properly in environments that set the suffixed variant for 1.0, such as
+ jhbuild.
+
+2013-01-15 15:06:41 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From a72faea to a942293
+
+2012-12-30 23:56:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ configure: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
+ AM_CONFIG_HEADER has been removed in the just-released automake 1.13:
+ https://lists.gnu.org/archive/html/automake/2012-12/msg00038.html
+ https://bugzilla.gnome.org/show_bug.cgi?id=690881
+
+2012-12-19 17:16:53 +0100 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: use appropriate printf format for gsize
+
+2012-12-19 17:15:03 +0100 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ * ext/cdio/gstcdio.h:
+ cdio: Fix redundant redeclaration of 'cdio_version_string'
+ cdio/version.h is already included by cdio/cdio.h
+
+2012-12-01 13:26:26 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: init debug category
+
+2012-11-30 20:09:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/dvdread/Makefile.am:
+ dvdread: link to libgmodule-2.0 since the g_module_* API is used
+ And the gmodule lib has been moved into the Requires.private
+ section of the pkg-config file in core.
+
+2012-11-27 17:07:31 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ cdiocddasrc: detect whether drive produces samples in non-host endianness
+ If drive produces samples in other endianness than the host,
+ we need to byte swap them before pushing them out, or we
+ produce nothing but noise. cdparanoia detects this automatically,
+ but libcdio does not, so we have to do it ourselves.
+ This is needed on e.g. the PowerBook G4 with Matshita UJ-816 drive.
+ https://bugzilla.gnome.org/show_bug.cgi?id=377280
+
+2012-11-19 11:27:21 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From b497c4f to a72faea
+
+2012-11-16 13:32:00 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/elements/xingmux_testdata.h:
+ xingmux: Fix unit test after change to correctly calculate number of frames
+
+2012-11-15 16:42:09 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add support for 10-bit color formats
+ Requires x264 to be built with 10-bit support, which disables
+ 9-bit support. Also only advertise the color formats that were
+ compiled into x264.
+
+2012-11-15 16:21:49 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add support for Y444, Y42B and NV12
+
+2012-11-11 20:42:42 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/cdio/Makefile.am:
+ * ext/cdio/gstcdio.c:
+ cdio: use gst_tag_freeform_string_to_utf8() for CD-TEXT strings
+ They're probably not going to be UTF-8, but ISO-8859-1 or somesuch
+ if they're not plain ASCII.
+
+2012-11-09 11:33:40 +0100 Gautier Portet <kassoulet@gmail.com>
+
+ * gst/xingmux/gstxingmux.c:
+ xingmux: Properly calculate the number of frames
+ First, the xing header frame is never added to the count,
+ we have to increment the count.
+ Secondly, there is a rounding error when calculating the
+ frame duration, as spf*GST_SECOND/rate is not an integer
+ (26122448.9) an it must be 26122449.
+
+2012-11-07 20:45:38 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ configure.ac: update courtesy of autoupdate
+
+2012-11-07 20:39:56 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ * configure.ac:
+ configure: let AG_GST_PLUGIN_DOCS check for python
+ And update common for move from AS_PATH_PYTHON to AM_PATH_PYTHON,
+ which as a side-effect should pick up newer python versions as
+ well.
+ https://bugzilla.gnome.org/show_bug.cgi?id=563903
+
+2012-11-05 13:16:52 -0800 Michael Smith <msmith@rdio.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: Fix parsing of headers to set correct width to allow decode.
+
+2012-11-03 20:38:00 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/mpg123audiodec.c:
+ Fix FSF address
+ https://bugzilla.gnome.org/show_bug.cgi?id=687520
+
+2012-11-03 20:40:37 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/random/LICENSE:
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ * ext/amrnb/amrnb.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrwbdec/amrwb.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/amrwbdec/amrwbdec.h:
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/dvdread/dvdreadsrc.h:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ * ext/lame/plugin.c:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/twolame/gsttwolamemp2enc.h:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ * gst-libs/gst/gettext.h:
+ * gst-libs/gst/glib-compat-private.h:
+ * gst-libs/gst/gst-i18n-plugin.h:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ * gst/asfdemux/gstasf.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtpasfdepay.h:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/asfdemux/gstrtspwms.h:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/dvdsub/gstdvdsubparse.h:
+ * gst/realmedia/asmrules.c:
+ * gst/realmedia/asmrules.h:
+ * gst/realmedia/gstrdtbuffer.c:
+ * gst/realmedia/gstrdtbuffer.h:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/pnmsrc.h:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rademux.h:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtdepay.h:
+ * gst/realmedia/rdtjitterbuffer.c:
+ * gst/realmedia/rdtjitterbuffer.h:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rdtmanager.h:
+ * gst/realmedia/realhash.c:
+ * gst/realmedia/realhash.h:
+ * gst/realmedia/realmedia.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ * gst/realmedia/rmutils.c:
+ * gst/realmedia/rmutils.h:
+ * gst/realmedia/rtspreal.c:
+ * gst/realmedia/rtspreal.h:
+ * gst/xingmux/gstxingmux.c:
+ * gst/xingmux/gstxingmux.h:
+ * gst/xingmux/plugin.c:
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/mpeg2dec.c:
+ * tests/check/elements/x264enc.c:
+ * tests/check/generic/index.c:
+ * tests/check/generic/states.c:
+ * tests/check/pipelines/lame.c:
+ Fix FSF address
+ https://bugzilla.gnome.org/show_bug.cgi?id=687520
+
+2012-10-30 13:39:52 +0100 Andreas Frisch <fraxinas@opendreambox.org>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: allocate correct amount of memory for bitmap
+ https://bugzilla.gnome.org/show_bug.cgi?id=687192
+
+2012-10-30 09:27:24 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: removed unnecessary finalize function
+ https://bugzilla.gnome.org/show_bug.cgi?id=687176
+
+2012-10-30 09:20:04 +0000 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: reset bytes counter
+ Reset the total_bytes counter so that we get timestamps correct.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686931
+
+2012-10-30 10:20:09 +1100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: Fix leaks from not chaining up in the finalize function
+
+2012-10-25 12:38:47 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * win32/common/config.h:
+ Back to feature development
+
+=== release 1.0.2 ===
+
+2012-10-25 01:11:10 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.0.2
+
+2012-10-24 13:41:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/mpg123audiodec.c:
+ tests: fix up mpg123 test a little
+ - dist input files
+ - fix sample leak
+ - simplify check for elements
+ - only run mpg123 test if mpg123 is available and selected
+ - fix build in uninstalled setup
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 12:30:10 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * tests/check/elements/mpg123audiodec.c:
+ tets: add unit test for mpg123audiodec
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:36:42 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: added gtkdoc section
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:22:05 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: fixed bug with last frame, disabled internal resampler & chatter
+ * The last MP3 frame wasn't being pushed when base class was draining
+ * Made sure mpg123 cannot ever use its (crude) internal resampler
+ * Disabled mpg123 stderr output
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 20:10:03 +0800 Scott Fan <fanchp@neusoft.com>
+
+ * gst/asfdemux/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ Makefile.am: Fix typos for generating the Android.mk files
+ Change libgstasfdemux to libgstasf, and change libgstrealmedia to libgstrmdemux.
+ The typos led to generate the incorrect Android.mk files for the asfdemux
+ and realmedia plugin.
+ https://bugzilla.gnome.org/show_bug.cgi?id=686748
+
+2012-10-24 00:21:45 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: cleaned up comments, formatting, and logging lines
+ also replaced mpg123decoder->handle != NULL checks with asserts
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-18 22:19:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: correctly set next cell when seeking to sector
+
+2012-10-18 22:18:28 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubparse.c:
+ dvdsubparse: send src caps when receiving sink caps
+
+2012-10-12 14:49:28 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: update dvd event to enhanced approach
+ ... in line with resindvdsrc.
+
+2012-10-07 17:08:37 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/Makefile.am:
+ docs: add 'make upload' target for new-release script
+
+2012-10-07 16:58:10 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * win32/common/config.h:
+ Back to development (bug fixing)
+
+=== release 1.0.1 ===
+
+2012-10-07 16:13:11 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.0.1
+
+2012-10-06 14:58:34 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 6c0b52c to 6bb6951
+
+2012-10-01 00:01:09 +1000 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Don't error out when there is no associated buffer
+ In 0.10, having mpeg2dec occasionally tell us to output a frame that
+ was never decoded was just ignored, so do the same in 1.0
+ Fixes: #685107
+
+2012-09-29 12:13:00 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * REQUIREMENTS:
+ * gst/dvdsub/gstdvdsubdec.c:
+ Purge mention of liboil and update REQUIREMENTS
+ https://bugzilla.gnome.org/show_bug.cgi?id=673285
+
+2012-09-26 01:04:32 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: when setting fallback decoder latency, set valid min_latency
+ Min. latency needs to be a valid time, so pass 0 as default
+ value in the fallback case where we can't determine any latency,
+ and avoid nasty criticals at runtime.
+
+2012-09-24 16:52:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * win32/common/config.h:
+ Back to development (bug fixing)
+
+=== release 1.0.0 ===
+
+2012-09-24 14:32:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 1.0.0
+
+2012-09-22 16:08:54 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 4f962f7 to 6c0b52c
+
+=== release 0.11.99 ===
+
+2012-09-17 17:59:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-xingmux.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.99
+
+2012-09-17 16:57:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update docs
+
+2012-09-17 16:57:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * tests/check/Makefile.am:
+ Remove -DGST_USE_UNSTABLE_API
+
+2012-09-17 12:22:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ Update docs
+
+2012-09-17 10:53:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/cdio/gstcdio.c:
+ cdio: work around cdio headers re-defining VERSION and PACKAGE_VERSION
+ Thanks guys. Fixes plugin version in gst-inspect-1.0 and docs
+ introspection/updating for this plugin.
+
+2012-09-15 22:23:53 +0200 Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
+
+ * gst-plugins-ugly.spec.in:
+ Switch to F18 package naming
+
+2012-09-14 16:28:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/dvdread/demo-play:
+ * tests/check/elements/mpeg2dec.c:
+ rename some caps and elements in examples
+
+2012-09-14 02:58:26 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ Back to development
+
+=== release 0.11.94 ===
+
+2012-09-14 02:49:34 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ChangeLog:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.94
+
+2012-09-14 01:48:50 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.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-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update docs
+
+2012-09-13 13:49:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: use DTS and PTS
+ Video uses DTS as timestamps. Set the DTS on the buffers and leave the PTS
+ undefined to make the decoder do the right thing. We can then remove the code
+ that tries to guess the PTS from the DTS.
+
+2012-09-10 22:30:18 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Hold ref to buffer while mapped
+ So that the buffer still exists when we go to unmap it later,
+ even if it got pushed in the meantime.
+
+2012-09-11 16:48:51 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/x264enc.c:
+ x264enc test: x264enc produces constrained-baseline, not the full baseline
+
+2012-09-11 17:37:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ gst: only activate in pull mode if upstream is seekable
+
+2012-09-11 11:28:06 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ rademux: tags can be NULL
+
+2012-09-11 11:13:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: fix email address
+
+2012-09-11 11:12:38 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: init base class method only once
+
+2012-09-11 10:46:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/xingmux/gstxingmux.c:
+ xingmux: remove defunct commented code
+
+2012-09-11 10:40:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvbsubdec: handle and send GAP event
+ ... in stead of update newsegment event.
+
+2012-09-11 10:34:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvbsubdec: adjust disabled code comment style
+
+2012-09-09 15:48:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: clean up some debug statements
+
+2012-09-07 17:38:18 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: handle possibly negative DTS provided by codec
+ ... by arranging for an offset such that DTS == PTS for keyframes,
+ which is expected elsewhere to go along with semantics of PTS and DTS.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679443
+
+2012-09-07 13:31:15 +0200 Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
+
+ * gst-plugins-ugly.spec.in:
+ Fix spec file for ugly
+
+2012-09-06 14:42:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ tests: mpeg2dec: initialize variable
+ ... which avoids test segfaulting.
+
+2012-08-30 16:26:00 -0700 Edward Hervey <edward@collabora.com>
+
+ * tests/check/elements/mpeg2dec.c:
+ check: Feed parsed data to mpeg2dec
+ And fix the expected output caps by adding colorimetry field
+
+2012-08-22 13:31:00 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 668acee to 4f962f7
+
+2012-08-22 13:19:01 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * configure.ac:
+ configure: bump gtk-doc req to 1.12 (mar-2009)
+ This allows us to e.g. unconditionally use gtkdoc-rebase.
+
+2012-08-20 23:32:32 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ video/x-dvd-subpicture -> subpicture/x-dvd
+
+2012-08-09 16:30:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Use new video encoder base class API for handling tags
+
+2012-08-09 11:48:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: Give MARGINAL rank to the mpg123 decoder element
+
+2012-08-08 16:27:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Set alignment at the correct place of GstAllocationParams
+
+2012-08-08 16:26:41 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.11.93 ===
+
+2012-08-08 15:23:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.93
+
+2012-08-08 15:23:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/realmedia/rmdemux.c:
+ gst: silence some compiler warnings with -DG_DISABLE_ASSERT
+
+2012-08-08 12:58:50 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/mpg123/Makefile.am:
+ mpg123: dist header file
+
+2012-08-06 15:31:50 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: avoid some more invalid timestamp arithmetic
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=681291
+
+2012-08-05 18:30:52 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ gst: Add stream-id to stream-start events
+
+2012-07-27 11:35:52 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Don't use NULL values for fbuf
+ We need to make a difference between the initial dummy buffers (which
+ have a fbuf->id of NULL) and the buffers on which we allocated
+ video frames.
+
+2012-08-05 16:40:57 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 94ccf4c to 668acee
+
+2012-08-04 16:13:36 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/lame/gstlamemp3enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmutils.c:
+ gst_tag_list_free -> gst_tag_list_unref
+
+2012-08-03 13:43:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: map input buffer in READ mode, not WRITE mode
+ Makes things actually work.
+
+2012-08-03 11:50:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: query supported output formats at run-time
+ Fixes stuff. We use a string here since we can't be bothered
+ with GValue.
+
+2012-08-03 11:48:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpg123/Makefile.am:
+ mpg123: hook up to build system
+
+2012-08-03 11:13:48 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ * ext/mpg123/gstmpg123audiodec.h:
+ mpg123: add new libmpg123-based mp3 decoder plugin
+ Needs a bit of cleaning up.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681003
+
+2012-07-28 00:28:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ tag: Update for taglist/tag event API changes
+
+2012-07-26 18:30:04 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Avoid dropping first GOP
+ We use the mpeg2_fbuf_t id field as an integer and not as a pointer, so
+ do not check if it is NULL or not.
+ And cleanup a bit of debug
+
+2012-07-25 13:05:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rdtmanager.h:
+ rdt: add on-npt-stop signal
+ rtspsrc will look for it.
+
+2012-07-25 12:48:21 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ rdt: set caps after activating the pad
+
+2012-07-25 12:48:06 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/gstrdtbuffer.c:
+ rdt: reset map info
+
+2012-07-25 09:37:08 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: fix padding correction
+ Fix padding correction. gst_buffer_copy_into() appends the memory to the already
+ existing memory in the target buffer..
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680536
+
+2012-07-23 13:32:26 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: copy buffer flags when cropping
+ When we crop a buffer, copy the flags as well.
+
+2012-07-23 11:25:34 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix GstVideoInfo pointer
+
+2012-07-23 11:13:05 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Correctly flag output buffer interlaced state
+ If the sequence is not flagged as progressive its buffers are marked
+ interlace mode mixed. There is an individual picture flag indicating
+ whether picture in the sequence are interlaced or not. This is used
+ along with the new GST_VIDEO_BUFFER_FLAG_INTERLACED to correctly and
+ completely indicate the buffer's interlaced state.
+ Also, TFF and RFF should only be set if the sequence is not progressive.
+
+2012-07-23 10:33:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ ext: Update for video base classes API changes
+
+2012-07-23 08:45:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 98e386f to 94ccf4c
+
+2012-07-20 16:12:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: make sure to avoid arithmetic with _NONE timestamp
+
+2012-07-16 17:36:19 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: convert invalid 0 payload TS into GST_CLOCK_TIME_NONE
+ ... so it does not get used as first (valid) payload ts, whereas
+ the first real valid payload ts may be considerably larger.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679838
+
+2012-07-20 14:41:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: slightly relax supported seek requirements
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680279
+
+2012-07-19 09:58:50 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Propagate GstFlowReturn where needed
+ It was just ignoring the return values...
+
+2012-07-19 09:56:17 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Store temporary buffers out of the way
+ When mpeg2dec needs to do cropping (because downstream can't handle it),
+ we need temporary buffers to decode to.
+ Use the user_data field to store those, and unify the rest of the code
+ that needs to touch a buffer (regardless of how/where it was allocated).
+ https://bugzilla.gnome.org/show_bug.cgi?id=680194
+
+2012-07-18 18:32:54 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Call gst_video_decoder_negotiate()
+
+2012-07-18 17:21:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: give stream tags a different event name so they don't overwrite global tags
+ There can only be one taglist per name for sticky tag events.
+ Needs to be fixed more properly, see
+ https://bugzilla.gnome.org/show_bug.cgi?id=677619
+
+2012-07-18 16:49:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ rademux: set/send caps on pad after activating it
+
+2012-07-18 16:46:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: set/send caps after activating the source pads
+ Makes sure the caps event isn't dropped immediately.
+
+2012-07-17 20:54:45 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: mustn't drop queries like caps query if not started yet
+
+2012-07-15 20:12:46 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: extract WM/Year as GstDateTime instead of GDate
+ So we can signal that only the year field is valid.
+
+2012-07-13 15:41:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: don't leak payload if we are not pushing it
+
+2012-07-13 13:59:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ demuxers: Push STREAM_START when needed
+
+2012-07-13 11:36:40 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asf: don't push on inactive streams
+
+2012-07-12 18:05:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: set rank to NONE
+ It should never be autoplugged really, for DVD
+ playback there's rsndvd (or will be, realsoonnow).
+
+2012-07-09 16:27:25 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ fix for allocator API changes
+
+2012-07-06 11:50:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ update for query api changes
+
+2012-07-06 11:27:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ update for query api changes
+
+2012-07-06 11:03:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ update for allocation query changes
+
+2012-07-05 23:23:33 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * LICENSE_readme:
+ LICENSE_readme: fix typo
+
+2012-07-05 22:48:18 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * LICENSE_readme:
+ LICENSE_readme: mention x264
+ https://bugzilla.gnome.org/show_bug.cgi?id=679472
+
+2012-07-05 13:12:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ gst: Implement segment-done event
+
+2012-06-27 11:23:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asf: fix x-wmv format in caps
+
+2012-06-27 10:24:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asf: unmap packets
+
+2012-06-21 15:13:57 +0100 Bastien Nocera <hadess@hadess.net>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Ignore parsing errors from broken packets
+ We should instead be counting the number of errors and exiting if
+ they're too numerous. This makes a number of broken ASF files playable.
+ https://bugzilla.gnome.org/show_bug.cgi?id=678543
+ Conflicts:
+ gst/asfdemux/asfpacket.c
+ gst/asfdemux/gstasfdemux.c
+
+2012-06-26 17:15:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ fix interlace-mode
+
+2012-06-25 09:43:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Add comment explaining why we first chain up to the parent class' decide_allocation
+
+2012-06-25 09:34:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Set allocation parameters to guarantee 16-byte aligned output buffers
+ Fixes bug #377713.
+
+2012-06-20 13:36:25 -0400 Matej Knopp <matej.knopp@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix unitialized variable and taglist event
+
+2012-06-20 13:23:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix compilation
+
+2012-06-20 10:39:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ update for task api change
+
+2012-06-20 10:39:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/x264/gstx264enc.c:
+ fix compilation
+
+2012-06-20 09:06:37 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Port to 0.11 again
+
+2012-06-19 15:19:28 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix compiler warning
+
+2012-05-30 12:50:13 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Report PAR if not present upstream
+ And clean up some code
+
+2012-05-04 16:09:57 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: use _scale_ceil to compute frame period
+ https://bugzilla.gnome.org/show_bug.cgi?id=675769
+
+2012-05-04 16:08:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: mpeg2dec actually has 3 frame latency
+ https://bugzilla.gnome.org/show_bug.cgi?id=675769
+
+2012-05-01 18:49:03 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix large output buffers leak
+
+2012-05-01 18:46:31 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Port to new way of handling frame reference
+
+2012-05-01 16:12:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: don't leak input_state
+
+2012-04-13 19:06:52 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Port to GstVideoDecoder base class
+ Conflicts:
+ ext/mpeg2dec/gstmpeg2dec.c
+ ext/mpeg2dec/gstmpeg2dec.h
+ Back to 0.10 state, needs to be ported to 0.11 again.
+
+2012-06-19 09:26:46 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master'
+
+2012-06-19 09:26:02 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Port to 0.11 again
+
+2012-05-07 11:52:40 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Don't set latency while holding object lock
+ This reverts commit 30a0b50e9ca0d625e61f994d4f8acd022dcddf38.
+ https://bugzilla.gnome.org/show_bug.cgi?id=675762
+
+2012-05-03 18:07:24 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Use video encoder stream lock to avoid deadlock
+
+2012-05-01 18:45:33 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Port to new way of passing frame reference
+
+2012-04-30 19:00:09 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Set default stream-format to avc as it's a better format
+
+2012-04-26 22:27:55 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix setting latency
+ Fixes setting latency when framerate is dynamic and round up the latency
+ to avoid rounding issues.
+
+2012-04-30 18:59:44 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: gst_video_encoder_get_frame() is now transfer full
+
+2012-04-26 17:31:45 +0000 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: don't leak output state
+
+2012-04-18 17:09:12 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Remove x264 backward compatibility support
+
+2012-04-18 16:13:57 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Report latency base on x264 buffer size
+
+2012-04-17 15:44:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Port to GstVideoEncoder baseclass
+ Conflicts:
+ configure.ac
+ ext/x264/gstx264enc.c
+ ext/x264/gstx264enc.h
+ Back to 0.10 state, needs to be ported to 0.11 again.
+
+2012-06-16 18:29:54 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Android.mk:
+ * LICENSE_readme:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-synaesthesia.xml:
+ * gst/synaesthesia/.gitignore:
+ * gst/synaesthesia/Makefile.am:
+ * gst/synaesthesia/README:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/synaesthesia/gstsynaesthesia.h:
+ * gst/synaesthesia/synaescope.c:
+ * gst/synaesthesia/synaescope.h:
+ synaesthesia: remove experimental GPL-ed synaesthesia plugin
+ It never made it out of experimental, and there's a new
+ synaescope element in gst-plugins-bad that's hopefully
+ sufficiently similar.
+ https://bugzilla.gnome.org/show_bug.cgi?id=356882
+
+2012-06-16 18:13:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegstream/.gitignore:
+ mpegstream: remove leftover hidden .gitignore file
+
+2012-06-08 15:55:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/x264enc.c:
+ elements: Use gst_pad_set_caps() instead of manual event fiddling
+
+2012-06-08 15:05:22 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 03a0e57 to 98e386f
+
+2012-06-07 16:28:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Back to development
+
+=== release 0.11.92 ===
+
+2012-06-07 16:28:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.92
+
+2012-06-07 16:28:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2012-06-06 18:19:06 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 1fab359 to 03a0e57
+
+2012-06-06 13:03:04 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ update for tag event change
+
+2012-06-01 10:29:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From f1b5a96 to 1fab359
+
+2012-05-31 13:08:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 92b7266 to f1b5a96
+
+2012-05-30 12:45:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From ec1c4a8 to 92b7266
+
+2012-05-30 11:24:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 3429ba6 to ec1c4a8
+
+2012-05-26 23:41:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rmutils.c:
+ realmedia: don't use GstStructure API on tag lists
+
+2012-05-21 14:57:44 +0200 Julien Isorce <julien.isorce@gmail.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: really prefer the original number (and position) of channels
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676495
+
+2012-05-24 12:32:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From dc70203 to 3429ba6
+
+2012-05-17 21:12:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/x264/gstx264enc.c:
+ x264: bump x264 requirement to build 106 or later
+ Build 106 is from September 2010.
+ https://bugzilla.gnome.org/show_bug.cgi?id=676257
+
+2012-04-15 23:39:48 +0400 Руслан Ижбулатов <lrn1986@gmail.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * m4/a52.m4:
+ a52dec: adapt to work also with new liba52
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674091
+
+2012-05-17 12:40:05 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: trigger renegotiation upon changed stream channels
+ Fixes #675451
+
+2012-05-16 09:13:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Require core/base 0.11.91
+
+2012-01-13 18:18:33 -0500 Matej Knopp <matej.knopp@gmail.com>
+
+ * .gitignore:
+ .gitignore: add visual studio IDE files and OS X .DS_Store files
+ https://bugzilla.gnome.org/show_bug.cgi?id=667899
+
+2012-05-13 17:00:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Back to development
+
+=== release 0.11.91 ===
+
+2012-05-13 16:49:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.91
+
+2012-05-13 16:48:57 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2012-05-13 16:45:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
+
+2012-05-13 15:56:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From dc70203 to 3429ba6
+
+2012-04-24 15:27:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Use correct enum type
+
+2012-05-10 10:11:44 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: implement pull mode seek snap flags when an index is present
+ Also ensure we get a proper EOS when seeking past the end of the
+ file, or (when the snap after flag is set) between the last keyframe
+ and the end of the file.
+
+2012-05-03 23:50:30 +0100 Leon Merten Lohse <leon@green-side.de>
+
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c:
+ cdio: compensate for libcdio's recent cd-text api changes
+ https://bugzilla.gnome.org/show_bug.cgi?id=675112
+ Conflicts:
+ ext/cdio/gstcdiocddasrc.c
+
+2012-04-30 21:27:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdread: fix build after recent include reshuffling in core
+ Need to include gmodule.h ourselves now.
+
+2012-04-19 12:22:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ video: Update for libgstvideo API changes
+
+2012-04-16 09:09:35 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 6db25be to dc70203
+
+2012-04-12 13:56:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ asfdemux: fix performance issue, especially with high-bitrate streams
+ Two things were suboptimal from a performance point of view:
+ a) consider a large media object such as a video keyframe, which
+ may be split up into multiple fragments. We would assemble
+ the media object as follows:
+ buf = join (join (join (frag1, frag2), frag3), frag4)
+ which causes many unnecessary memcpy()s, and malloc/free,
+ which could easily add up to a multiple of the actual object
+ size. To avoid this, we allocate a buffer of the size needed
+ from the start and copy fragments into that directly.
+ b) for every fragment to join, we would create a sub-buffer
+ before joining it (which would discard the sub-buffer again),
+ leading to unnecessary miniobject create/free churn.
+ Conflicts:
+ gst/asfdemux/asfpacket.c
+ gst/asfdemux/asfpacket.h
+
+2012-04-12 14:45:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: avoid unnecessary stream lookup
+ We have already retrieved the stream for that stream number and
+ made sure it's not NULL, so no need to do it again here; neither
+ the number nor the streams changed since the last time.
+
+2012-04-02 19:31:20 +0200 Alban Browaeys <prahal@yahoo.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: fix first_access bigger than 2
+ gst_buffer_extract returns the number of bytes extracted, here 2 max.
+ Set size to the buffer size as was done in 0.10 to avoid first_access
+ error when it bypass 2.
+ https://bugzilla.gnome.org/show_bug.cgi?id=673434
+
+2012-04-13 13:43:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * autogen.sh:
+ * configure.ac:
+ configure: Modernize autotools setup a bit
+ Also we now only create tar.bz2 and tar.xz tarballs.
+
+2012-04-13 13:37:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 464fe15 to 6db25be
+
+2012-04-12 11:19:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Back to development
+
+=== release 0.11.90 ===
+
+2012-04-12 10:40:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.11.90
+
+2012-04-12 10:39:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2012-04-10 00:48:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/gstmad.c.orig:
+ mad: remove .c.orig file
+
+2012-04-10 00:47:44 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.c.orig:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rtspreal.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/xingmux/gstxingmux.c:
+ Use new gst_element_class_set_static_metadata()
+
+2012-04-05 18:43:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 7fda524 to 464fe15
+
+2012-04-05 17:40:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnb.c:
+ * ext/amrwbdec/amrwb.c:
+ * ext/cdio/gstcdio.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/plugin.c:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.c.orig:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasf.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/realmedia/realmedia.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/xingmux/plugin.c:
+ gst: Update for GST_PLUGIN_DEFINE() API changes
+
+2012-04-05 13:26:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Update version to 0.11.89.1
+
+2012-04-04 14:38:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/version.entities.in:
+ * ext/a52dec/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mad/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst-plugins-ugly.spec.in:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+ * tests/check/Makefile.am:
+ gst: Update versioning
+
+2012-04-02 15:21:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: fix cropping
+ fix cropping in mpeg2dec
+
+2012-04-01 20:19:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: add crop metadata when buffer is still writable
+
+2012-03-30 18:13:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ update for buffer api change
+
+2012-03-30 11:52:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/mad/gstmad.c:
+ ext: Update for audio decoder API changes
+
+2012-03-29 17:32:08 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/x264enc.c:
+ tests: make more valgrind-friendly and plug caps leak
+
+2012-03-28 12:50:09 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ update for buffer changes
+
+2012-03-27 14:07:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/x264enc.c:
+ tests: x264enc: adjust test to removal of deprecated properties
+
+2012-03-26 12:13:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Replace master with 0.11
+
+2012-03-22 15:56:04 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ back to development
+
+=== release 0.11.2 ===
+
+2012-03-22 15:52:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ Release 0.11.2
+
+2012-03-21 13:18:35 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ tests: fix after memory changes
+
+2012-03-21 13:18:11 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: remove deprecated properties
+
+2012-03-20 12:08:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+ So 0.11 folks also get amr include fixes.
+ Conflicts:
+ ext/a52dec/gsta52dec.c
+ ext/mad/gstmad.c
+
+2012-03-18 18:56:16 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ synaesthesia: fixup for bufferpool api changes
+ ... as well as some caps ref handling.
+
+2012-03-16 21:48:02 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ don't pass random pointers to pull_range
+
+2012-03-15 22:11:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ update for bufferpool changes
+
+2012-03-15 20:38:50 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ update for allocation query changes
+
+2012-03-15 13:38:16 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/x264/gstx264enc.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ update for memory api changes
+
+2012-03-14 19:52:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ take padding into account
+
+2012-03-13 18:27:51 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: simplify parsing code
+ Also fixes #671455 (expected at least).
+
+2012-03-12 16:16:17 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: bump required GLib to 2.31.14
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=671911
+
+2012-03-12 12:23:43 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ fix for caps _normalize changes
+
+2012-03-11 19:07:19 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ fix for caps api changes
+
+2012-03-06 16:08:23 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ a52dec: use base class tag handling helper
+ ... so as to ensure these to be handled and sent at proper time.
+
+2012-03-06 14:28:15 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: Use variable type with correct signedness
+
+2011-01-14 18:50:41 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Copy planes in one go when possible
+
+2012-03-03 17:17:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrwbdec/amrwbdec.h:
+ amrnb, amrwbdec: fix build with opencore-amr >= 0.1.3
+ In previous versions, the opencore-amr include sub-directory
+ would be specified in the include path in the CFLAGS, but this
+ is no longer the case in newer versions, so we need to add those
+ to our include directives.
+ Based on patch by: Christian Morales Vega
+ https://bugzilla.gnome.org/show_bug.cgi?id=671123
+
+2012-03-03 16:56:13 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: get rid of non-pkg-config ways to check for opencore-amr
+
+2012-02-29 17:26:42 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ update for metadata API changes
+
+2012-02-27 06:35:01 +0100 Alessandro Decina <alessandro.d@gmail.com>
+
+ * ext/amrwbdec/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mad/Makefile.am:
+ amrwbdec, lame, mad: link to libgstbase
+
+2012-02-27 06:33:48 +0100 Alessandro Decina <alessandro.d@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix compiler warning
+
+2012-02-27 00:36:46 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+
+2012-02-27 00:34:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge commit '02f5d72a0519bcbe8f6958fab6dd998fc8ccda6b' into 0.11
+ Conflicts:
+ ext/mad/gstmad.c
+
+2012-02-23 11:20:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * 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-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Bump version after release
+
+2012-02-21 18:58:06 -0800 David Schleef <ds@schleef.org>
+
+ * autogen.sh:
+ autogen.sh: avoid touching .po files during 'make'
+ A simple workaround to deal with GNU gettext automake integration
+ failing to deal with git. Fixes: #669207
+
+2012-02-22 02:17:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264: convert g_print to LOG
+
+2012-02-22 02:07:49 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ update for new memory api
+
+2012-02-22 02:07:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: handle pts and dts
+
+2012-02-21 18:53:57 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: handle libmad freeform parsing quirk
+
+2012-02-21 18:49:50 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: fixup unhacking last frame coaxing
+ ... so as to not only replace the data pointer but also available size.
+
+2012-02-20 14:27:49 +0000 Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+ * gst-plugins-ugly.spec.in:
+ Add latest plugins
+
+2012-02-18 00:02:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * win32/common/config.h:
+ win32: back to development
+
+2012-02-17 17:53:34 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * configure.ac:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/synaesthesia/gstsynaesthesia.h:
+ synaesthesia: port to 0.11
+
+2012-02-17 17:53:28 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * configure.ac:
+ * gst/xingmux/gstxingmux.c:
+ xingmux: port to 0.11
+
+2012-02-17 11:06:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ back to development
+
+=== release 0.11.1 ===
+
+2012-02-17 11:06:27 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * 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-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdread.xml:
+ * docs/plugins/inspect/plugin-dvdsub.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ RELEASE 0.11.1
+
+2012-02-17 09:16:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/mad/gstmad.c
+
+2012-02-16 14:29:47 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: unhack last frame coaxing
+ ... so as to maximally use available base class API and interfere least
+ as possible with its internal state.
+
+2012-02-15 13:45:00 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: fix compilation
+
+2012-02-15 13:40:13 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: chain up to default event handler
+
+2012-02-11 05:38:41 -0500 Matej Knopp <matej.knopp@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: unmap video frame after encoding
+ Fixes major memory leak.
+ https://bugzilla.gnome.org/show_bug.cgi?id=669863
+
+2012-02-10 17:02:38 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix after merge
+
+2012-02-10 17:00:33 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/x264/gstx264enc.c
+
+2012-02-09 18:10:48 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ sidplay: don't use ulong properties
+
+2012-02-09 16:14:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ sidplay: fix negotiation
+
+2012-02-09 11:55:07 +0100 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add baseline profile to caps
+ 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.
+
+2012-02-08 16:38:09 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/amrnb/amrnbenc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rdtmanager.c:
+ GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING
+
+2012-02-07 18:56:23 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ mpeg2dec: fix test a bit more
+ Still broken because cropping is broken in mpeg2dec
+
+2012-02-07 11:06:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/x264enc.c:
+ * tests/check/elements/xingmux.c:
+ tests: fix some tests
+
+2012-02-01 16:20:46 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/twolame/gsttwolamemp2enc.c:
+ twolame: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:20:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lame: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:19:55 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:17:57 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:15:27 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:14:08 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ amrnb: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-01-31 15:52:38 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: ensure we do not confuse the base class with our buffer guard
+ 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.
+
+2012-01-30 17:17:31 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ update for HEADER flag
+
+2011-07-20 09:00:58 +0200 Alessandro Decina <alessandro.d@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: implement force-key-unit API
+
+2012-01-25 13:58:48 +0100 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * common:
+ Automatic update of common submodule
+ From c463bc0 to 7fda524
+
+2012-01-25 13:58:54 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrwbdec/amrwbdec.c:
+ amr: port to 0.11 again
+
+2012-01-25 13:03:33 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/a52dec/gsta52dec.c
+
+2012-01-25 07:24:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ * gst/realmedia/gstrdtbuffer.c:
+ * gst/realmedia/gstrdtbuffer.h:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmutils.c:
+ port to new memory API
+
+2012-01-25 11:38:56 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 2a59016 to c463bc0
+
+2012-01-22 23:56:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst-libs/gst/glib-compat-private.h:
+ Remove compatibility versions for deprecated GLib API
+
+2012-01-19 15:26:25 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: fix read buffer overflow upon syncing
+ The wrong size was being decremented, leading to a runaway
+ read loop.
+
+2012-01-19 15:06:47 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ * configure.ac:
+ Add --disable-fatal-warnings configure option
+
+2012-01-19 11:34:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ port to new gthread API
+
+2012-01-18 17:00:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: Require GLib 2.31.10 for consistency
+
+2012-01-18 16:46:42 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 0807187 to 2a59016
+
+2012-01-17 11:55:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: _parse should not return OK if not enough data yet
+
+2012-01-17 11:55:14 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ amrnbdec: _parse should not return OK if not enough data yet
+
+2012-01-13 15:03:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: fix off by one in cell calculation for the last chapter
+
+2012-01-13 15:56:47 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: set caps on src pad before adding it
+
+2012-01-13 15:56:25 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: perform writable buffer map to copy into it
+
+2012-01-13 15:55:15 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ asfpacket: fix 0.11 ported payload extraction
+ ... to cater for not necessarily offset == size - cur_pos,
+ as size may have been adjusted due to padding.
+ Fixes #667567.
+
+2012-01-13 13:46:50 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: remove useless and semantically (though not practically) wrong code
+ The object will be freed, so it's pointless to set the pointers
+ to NULL anyway.
+
+2012-01-13 13:46:28 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: remove leaking "optimization"
+
+2012-01-13 00:05:50 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ GST_TYPE_DATE -> G_TYPE_DATE
+
+2012-01-13 00:01:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+ Conflicts:
+ ext/a52dec/gsta52dec.c
+
+2012-01-12 13:25:22 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: plug buffer leak
+
+2012-01-12 13:20:26 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: plug buffer leak
+
+2012-01-11 12:31:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/amrnbenc.c:
+ amrnbenc: _map and _unmap the appropriate input and output buffers
+
+2012-01-10 15:25:12 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Fix some merge mistakes
+
+2012-01-10 15:17:11 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/a52dec/gsta52dec.c
+ ext/a52dec/gsta52dec.h
+ ext/lame/gstlame.c
+ ext/lame/gstlame.h
+ ext/lame/gstlamemp3enc.c
+ ext/mad/gstmad.c
+ ext/mad/gstmad.h
+ gst/mpegaudioparse/gstmpegaudioparse.c
+ gst/mpegstream/gstdvddemux.c
+ gst/realmedia/rdtdepay.c
+ po/es.po
+ po/lv.po
+ po/sr.po
+
+2012-01-10 11:41:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvdsub/Makefile.am:
+ dvdsub: add some CFLAGS and LIBS in Makefile.am
+ ... since adapter is still used.
+
+2012-01-09 16:00:18 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Don't use buffer after unreffing
+
+2012-01-09 15:46:10 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Only change writable caps and make sure to set updated caps on the srcpad
+
+2012-01-09 15:24:53 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Correctly unmap the buffer with the original data pointer
+
+2012-01-09 15:15:28 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Make sure to set caps on the srcpad if none are set yet
+
+2012-01-08 14:24:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/Makefile.am:
+ mad: fix LIBS order in Makefile.am
+
+2012-01-07 21:04:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/gstmad.h:
+ mad: remove left-over id3tag.h include
+ We don't use libid3tag any more.
+
+2012-01-05 12:17:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: fix for multichannel
+
+2012-01-04 16:05:59 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ a52dec: Update for the new raw audio caps
+
+2012-01-04 15:49:38 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Update for the new raw audio caps
+
+2012-01-04 15:45:43 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Update for the new raw audio caps
+
+2012-01-04 15:44:37 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/twolame/gsttwolamemp2enc.c:
+ twolamemp2enc: Update for the new raw audio caps
+
+2012-01-04 15:43:13 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: Add the new layout field to the raw audio caps
+
+2012-01-04 15:42:29 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ amrnb: Add the new layout field to the raw audio caps
+
+2012-01-04 15:26:56 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: Port to the new raw audio caps
+
+2012-01-04 15:12:26 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Update for libgstriff API changes
+ Still needs to handle audio channel reordering.
+
+2012-01-04 19:53:13 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 50b34ab to 0807187
+
+2012-01-04 17:05:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/lame/Makefile.am:
+ lame: fix LIBADD order in Makefile.am
+
+2012-01-04 10:33:27 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ * tests/check/elements/mpeg2dec.c:
+ * tests/check/elements/x264enc.c:
+ * tests/check/elements/xingmux.c:
+ * tests/check/generic/states.c:
+ tests: make tests compile
+
+2012-01-03 15:27:42 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ GST_FLOW_UNEXPECTED -> GST_FLOW_EOS
+
+2011-12-30 18:31:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ tests: disable generic index test
+
+2011-12-30 17:53:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: remove all seeking-related code
+ A parser or demuxer upstream should handle this Same for
+ queries.
+
+2011-12-30 17:49:01 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: update for GstIndex removal
+
+2011-12-30 17:46:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/cdio/gstcdiocddasrc.c:
+ cdio: update for probe vfunc removal in GstAudioCdSrc
+
+2011-12-27 22:54:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: fix printf format in debug statements
+ https://bugzilla.gnome.org/show_bug.cgi?id=666926
+
+2011-12-26 18:24:32 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlame.h:
+ lame: ensure parsed output
+ ... by doing some basic parsing of encoded lame data.
+
+2011-12-26 16:34:01 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlame.h:
+ lame: cleanup unused instance struct fields
+
+2011-12-26 18:23:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ lamemp3enc: ensure parsed output
+ ... by doing some basic parsing of encoded lame data.
+ Fixes #652150.
+
+2011-12-26 18:15:41 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: do not leak merged tags
+
+2011-12-22 15:23:54 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: helpfully bodge the last buffer to let mad decode the last frame
+ 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)).
+
+2009-01-25 22:49:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: map subtitle language tag to stream indicated in PGC data
+
+2009-01-25 22:49:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegstream/gstdvddemux.c:
+ dvddemux: tweak subtitle stream setup based on dvd language codes event
+ ... to allow for non-continuous subtitle stream numbers.
+ The missing stream numbers tend to come up as subtitle streams anyway
+ (albeit not with an identified language tag).
+
+2011-12-21 13:56:35 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: minor safety tweak to sector seeking
+
+2011-12-20 11:54:38 +0100 Julien Isorce <julien.isorce@gmail.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: check that a52_init returns a valid a52 state
+
+2011-12-19 18:20:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: update for new interlaced flags
+
+2011-12-14 17:33:52 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/a52dec/Makefile.am:
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ a52dec: port to audiodecoder
+
+2011-12-12 13:44:12 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/Makefile.am:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: port to audiodecoder
+
+2011-12-13 14:54:18 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Don't claim to support upstream renegotiation
+ 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.
+
+2011-12-13 14:52:26 +0100 Julien Isorce <julien.isorce@gmail.com>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Check that the a52_state is correctly initialized
+
+2011-12-12 11:33:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst-libs/gst/Makefile.am:
+ * gst-libs/gst/glib-compat-private.h:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ Work around deprecated thread API in glib master
+ Add private replacements for deprecated functions such as
+ g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
+ to avoid the deprecation warnings. We can't change most of
+ these in 0.10 because they're part of our API and ABI.
+ Suppress deprecation warnings in selected files, mostly for
+ g_static_rec_mutex_*. StaticRecMutex is part of our API/ABI,
+ not much we can do here in 0.10.
+
+2011-12-10 15:19:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/LINGUAS:
+ * po/eo.po:
+ * po/es.po:
+ * po/lv.po:
+ * po/sr.po:
+ po: update translations
+
+2011-12-09 15:25:21 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rdtdepay.c:
+ rdtdepay: make buffer metadata writable before setting caps on it
+ Fixes issue when the header buffer is being pushed, which was taken
+ from the caps and is therefore not writable.
+
+2011-12-06 14:00:18 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ fix for basesrc changes
+
+2011-12-05 18:43:49 +0100 Edward Hervey <edward@collabora.com>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: Initialize GstRTPBuffer before usage
+
+2011-12-02 02:01:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+ Conflicts:
+ ext/dvdread/dvdreadsrc.c
+
+2011-11-29 08:49:23 +0100 Руслан Ижбулатов <lrn1986@gmail.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: Fix format string compiler warning
+ Fixes bug #665101.
+
+2011-11-28 21:31:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+
+2011-11-28 18:26:34 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Update for indexable change
+
+2011-11-28 17:52:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ update for clock provider API change
+
+2011-11-28 13:10:01 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/twolame/gsttwolame.c:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/iec958/ac3iec.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstxingmux.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ various: fix pad template ref leaks
+ https://bugzilla.gnome.org/show_bug.cgi?id=662664
+
+2011-11-24 21:41:55 +0100 René Stadler <rene.stadler@collabora.co.uk>
+
+ * tests/check/elements/xingmux.c:
+ tests: update for gstcheck API change
+
+2011-11-23 23:29:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/amrnb/amrnbenc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/twolame/gsttwolamemp2enc.c:
+ ext: fix more printf format warnings in debug messages
+
+2011-11-21 22:02:07 +0100 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ Fix print format compiler warnings on OS X / 64bit
+ https://bugzilla.gnome.org/show_bug.cgi?id=662617
+
+2011-11-21 13:36:10 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ update for activation changes
+
+2011-11-18 18:00:28 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ update for new scheduling query
+
+2011-11-18 13:59:29 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ add parent to activate functions
+
+2011-11-17 15:25:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ add parent to pad functions
+
+2011-11-16 17:28:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ add parent to query function
+
+2011-11-15 17:55:36 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rademux.c:
+ _query_peer_*() -> _peer_query_*()
+
+2011-11-15 17:42:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ _accept_caps() -> _query_accept_caps()
+
+2011-11-15 17:23:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ _peer_get_caps() -> _peer_query_caps()
+
+2011-11-15 16:52:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ update for _get_caps() -> _query_caps()
+
+2011-11-15 16:34:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ change getcaps to query
+
+2011-11-14 00:55:16 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: re-instate accidentally dropped rank
+
+2011-11-13 23:47:46 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * gst/realmedia/pnmsrc.c:
+ Update for GstURIHandler get_protocols() changes
+
+2011-11-13 19:01:31 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/dvdread/dvdreadsrc.h:
+ * gst/realmedia/pnmsrc.c:
+ dvdreadsrc, pnmsrc: update for GstURIHandler changes
+
+2011-11-13 01:33:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: re-port to 0.11
+ 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).
+
+2011-11-13 00:29:20 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: update for GstBaseAudioDecoder -> GstAudioDecoder rename
+
+2011-08-16 21:12:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: replace with 0.10 version ported to GstAudioDecoder
+ 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.
+
+2011-11-13 00:13:17 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ docs: remove bits for old lame element from sections.txt file
+
+2011-11-13 00:04:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Android.mk:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/inspect/plugin-mpegstream.xml:
+ * gst-plugins-ugly.spec.in:
+ * gst/mpegstream/Makefile.am:
+ * gst/mpegstream/README:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegclock.c:
+ * gst/mpegstream/gstmpegclock.h:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegpacketize.c:
+ * gst/mpegstream/gstmpegpacketize.h:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstmpegstream.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/mpegstream/gstrfc2250enc.h:
+ * gst/mpegstream/mpegstream.vcproj:
+ * gst/mpegstream/notes:
+ * win32/MANIFEST:
+ * win32/vs6/gst_plugins_ugly.dsw:
+ * win32/vs6/libgstac3parse.dsp:
+ * win32/vs6/libgstmpegaudioparse.dsp:
+ * win32/vs6/libgstmpegstream.dsp:
+ mpegstream: remove the old mpeg-ps parser and demuxers
+ Don't want anyone porting this by accident.
+ Superseded by mpegpsdemux in -bad.
+
+2011-11-12 21:06:29 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/cdio/Makefile.am:
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ cdio: port cdiocddasrc to 0.11
+
+2011-11-12 20:44:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ tests: port mpeg2dec to 0.11
+ It compiles, but fails.
+
+2011-11-12 20:33:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/x264enc.c:
+ tests: port x264enc unit test to 0.11
+ Well, it compiles now at least.
+
+2011-11-11 12:33:51 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.h:
+ update for base class rename
+
+2011-11-11 12:25:25 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtpasfdepay.h:
+ update for base class rename
+
+2011-11-11 01:30:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: update translations
+
+2011-11-11 01:29:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * 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-amrwbdec.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-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpeg2dec.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update docs
+
+2011-11-11 01:27:47 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: cosmetic error message change
+ LET'S TRY TO KEEP CAPITALS TO A MINIMUM.
+
+2011-11-11 00:58:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * ext/twolame/Makefile.am:
+ * ext/twolame/gsttwolamemp2enc.c:
+ * ext/twolame/gsttwolamemp2enc.h:
+ * po/POTFILES.in:
+ twolame: rename to twolamemp2enc
+
+2011-11-11 00:51:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/twolame/gsttwolame.c:
+ twolame: port to 0.11
+
+2011-11-10 23:17:53 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Android.mk:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/inspect/plugin-iec958.xml:
+ * gst-plugins-ugly.spec.in:
+ * gst/iec958/Makefile.am:
+ * gst/iec958/ac3_padder.c:
+ * gst/iec958/ac3_padder.h:
+ * gst/iec958/ac3iec.c:
+ * gst/iec958/ac3iec.h:
+ * win32/MANIFEST:
+ * win32/vs6/libgstiec958.dsp:
+ iec958: remove this plugin
+ I think it can just go away. Audio sinks can and should payload
+ things themselves using the helper API in libgstaudio. If such
+ a plugin still makes sense, it should probably be rewritten
+ using the library functions (and be put into -good or so).
+
+2011-11-10 18:25:38 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rtspreal.c:
+ update for adapter api change
+
+2011-11-10 11:04:06 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ update for removed fixate function
+
+2011-11-09 11:58:03 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rmdemux.c:
+ remove query types
+
+2011-11-04 17:32:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmutils.c:
+ realmedia is ported
+
+2011-11-04 16:40:59 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ more template fixes
+
+2011-11-04 16:32:48 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * po/POTFILES.in:
+ po: lame => lamemp3enc
+
+2011-11-04 12:04:56 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtmanager.c:
+ make request pads take %u
+
+2011-11-04 10:45:47 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Add basic cropping support
+
+2011-11-02 12:09:45 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ tags: update for tag API removal
+
+2011-10-31 02:24:30 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ update for meta api change
+
+2011-10-29 09:10:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ structure: fix for api update
+
+2011-10-31 14:34:57 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ Merge remote-tracking branch 'origin/master' into 0.11
+
+2011-10-30 15:05:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ tests: port amrnbenc test to 0.11
+
+2011-10-30 15:04:22 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ amrnb: fix up raw audio caps for 0.11
+
+2011-10-30 15:03:29 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ tests: need to define GST_USE_UNSTABLE_API to avoid warnings
+
+2011-10-30 12:29:14 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/lame/README:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlame.h:
+ * ext/lame/plugin.c:
+ * ext/lame/test-lame.c:
+ * gst/xingmux/gstxingmux.c:
+ * tests/check/pipelines/lame.c:
+ lame: remove lame element, it's been superseded by lamemp3enc
+
+2011-10-30 11:51:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ ext, gst: update for taglist API changes
+
+2011-10-29 11:57:40 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't leak pending payload buffers
+ Fixes #662964
+
+2011-10-28 15:21:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/sidplay/gstsiddec.cc
+
+2011-10-27 16:53:44 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: use BOILERPLATE macro and cleanup FIXMEs
+
+2011-10-28 09:18:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: fix compiler warnings after gst_caps_new_simple() change
+
+2011-10-21 12:24:01 +0100 Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+ * gst-plugins-ugly.spec.in:
+ Update specfile with latest changes
+
+2011-10-11 18:03:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't unmap a buffer that doesn't exist
+
+2011-10-10 12:38:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * ext/dvdread/dvdreadsrc.c:
+ dvdread: port to 0.11
+
+2011-10-06 17:24:22 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * gst/dvdsub/Makefile.am:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ * gst/dvdsub/gstdvdsubparse.c:
+ dvdsub: port to 0.11
+
+2011-10-05 13:32:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/amrwbdec/Makefile.am
+ ext/amrwbdec/amrwbdec.c
+
+2011-10-05 13:18:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/gstrdtbuffer.c:
+ * gst/realmedia/gstrdtbuffer.h:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmutils.c:
+ * gst/realmedia/rtspreal.c:
+ realmedia: port to 0.11
+
+2011-10-05 12:05:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrwbdec/Makefile.am:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/amrwbdec/amrwbdec.h:
+ amrwbdec: port to audiodecoder
+
+2011-10-04 17:00:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/Makefile.am:
+ amrnbdec: fixup build
+
+2011-10-04 17:00:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ amrnbdec: remove leftover extraneous _unref
+
+2011-10-04 17:50:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/amrnb/amrnbdec.c
+
+2011-10-04 17:35:40 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ amrnb: port to 0.11
+
+2011-10-04 17:12:35 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * ext/amrwbdec/Makefile.am:
+ * ext/amrwbdec/amrwbdec.c:
+ ported amrwbdec to 0.11
+
+2011-10-03 17:19:02 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbdec.h:
+ amrnbdec: port to audiodecoder
+
+2011-09-30 17:45:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+
+2011-09-30 17:38:07 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: minimal port to 0.11
+
+2011-09-05 11:11:52 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: post QoS messages when dropping a frame due to QoS
+ https://bugzilla.gnome.org/show_bug.cgi?id=658241
+
+2011-09-28 13:05:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ configure: update ported plugins list
+
+2011-09-28 13:03:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * common:
+ update to 0.11 branch
+
+2011-09-27 20:32:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ dvdlpcmdec: port to 0.11
+
+2011-09-27 18:19:50 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: fix raw audio caps too
+
+2011-09-27 18:15:00 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: port to 0.11
+
+2011-09-27 17:54:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+
+2011-09-27 17:51:31 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: port to 0.11
+
+2011-09-27 17:01:59 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrnb/Makefile.am:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbenc.h:
+ amrnbenc: port to audioencoder
+
+2011-09-26 19:07:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ ext/mad/gstmad.c
+
+2011-09-26 19:03:13 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ port a52dec to 0.11
+
+2011-09-26 16:29:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/twolame/gsttwolame.c:
+ twolame: Simple fix for GstAudioEncoder API change
+
+2011-09-26 16:28:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/twolame/gsttwolame.c:
+ twolame: Fix variable 'gstelement_class' set but not used compiler warning
+
+2011-09-26 16:08:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: Don't get the parent class again, GST_BOILERPLATE does this already
+
+2011-09-26 16:07:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: Fix variable 'gstelement_class' set but not used compiler warning
+
+2011-09-26 12:07:15 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/twolame/gsttwolame.c:
+ twolame: improve output framing and timestamping
+ ... which simply comes down to requesting one frame of input data at a time,
+ since the encoder nicely turns this into 1 encoded frame.
+
+2011-09-26 11:56:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/twolame/Makefile.am:
+ * ext/twolame/gsttwolame.c:
+ * ext/twolame/gsttwolame.h:
+ twolame: port to audioencoder
+
+2011-09-23 15:32:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ lame: use some more boilerplate
+
+2011-09-23 15:26:48 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlame.h:
+ lame: port to audioencoder
+
+2011-09-23 14:33:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: use some more boilerplate
+
+2011-09-26 14:44:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: really report bitrate rather kbitrate
+
+2011-09-26 14:44:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ lamemp3enc: port to audioencoder
+
+2011-09-16 15:35:06 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: take into account first sector of the current title
+ This fixes seeking on titles which do not start on a new file.
+ https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-09-16 15:03:54 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: fix sector seeking
+ It was overly complicated, and did not take into account the offset
+ needed for titles which do not start on a new file.
+ https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-09-16 13:42:53 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: fix sector search for packed titles
+ Some DVD titles are packed in a single set, and we need to use
+ the correct table to map times to sectors.
+ https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-08-15 16:23:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/mad/Makefile.am:
+ * ext/mad/gstmad.c:
+ * gst-plugins-ugly.spec.in:
+ mad: remove id3tag dependency used by in practice unreachable legacy code
+ 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().
+
+2011-09-08 17:01:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfpacket: skip empty payload packets
+ ... which also avoids assertion failures and possible segfaults later on
+ when possibly trying to join 2 empty buffers.
+
+2011-09-08 14:33:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ rmdemux: delay announcing container tags until we have pads
+ Fixes tags when transcoding.
+ https://bugzilla.gnome.org/show_bug.cgi?id=658297
+
+2011-09-07 14:36:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/elements/amrnbenc.c:
+ amrnbenc: Use complete raw audio caps in the test
+
+2011-09-07 14:25:41 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * docs/plugins/Makefile.am:
+ docs: cleanup makefiles
+ Remove commented out parts that we don't need. Remove "the wingo addition" - no
+ so useful after all. Narrow down file-globs for plugin docs.
+
+2011-09-06 21:25:13 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From a39eb83 to 11f0cd5
+
+2011-09-06 15:40:55 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 605cd9a to a39eb83
+
+2011-08-25 13:04:01 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asf: don't use fourcc
+
+2011-08-25 12:54:42 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+
+2011-08-22 17:49:14 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix spurious failure to decode some files
+ 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
+
+2011-08-19 18:07:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/sidplay/Makefile.am:
+ * ext/sidplay/gstsiddec.cc:
+ port to new audio caps
+
+2011-08-03 18:58:09 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ common
+ gst/asfdemux/gstrtpasfdepay.c
+
+2011-08-03 09:05:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Add synaesthesia to the list of non-ported plugins
+
+2011-08-03 01:08:43 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+ * gst-plugins-ugly.spec.in:
+ * gst/mpegaudioparse/Makefile.am:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ * gst/mpegaudioparse/mpegaudioparse.vcproj:
+ * gst/xingmux/Makefile.am:
+ * gst/xingmux/gstxingmux.c:
+ * gst/xingmux/gstxingmux.h:
+ * gst/xingmux/plugin.c:
+ Remove mp3parse plugin/element
+ It's been replaced by mpegaudioparse in -good. Don't want anyone
+ to spend time porting a deprecated element. Rename plugin to xingmux
+ for now until we move that somewhere else.
+
+2011-08-02 12:49:09 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: Define list of non-ported plugins
+
+2011-08-02 12:48:52 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Fix for changes in GstQuery API
+
+2011-08-02 12:40:22 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix for changes in GstQuery API
+
+2011-08-02 12:40:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Fix print statement
+
+2011-08-02 12:35:40 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Update common submodule
+
+2011-07-30 18:47:44 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Properly set the stream format in setcaps
+ Do not forget to set the selected format to the options string
+ when getting it from caps
+ https://bugzilla.gnome.org/show_bug.cgi?id=655223
+
+2011-07-19 15:06:49 +0200 Stefan Sauer <ensonic@google.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix the build for older x264enc
+ b_fake_interlaced was introduced in x264 commit 1b48874d06 = X264_BUILD 96.
+
+2011-07-18 20:41:20 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Read stream-format from the right place
+ 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.
+
+2011-06-13 23:24:27 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Select stream-format based on caps
+ 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
+
+2011-07-04 18:03:49 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/x264/gstx264enc.c:
+ x264: Allow renegotiation but prefer current caps
+
+2011-06-09 20:20:27 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/x264enc.c:
+ tests: Test x264enc profiles from the caps
+ https://bugzilla.gnome.org/show_bug.cgi?id=644233
+
+2011-03-07 17:58:34 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/Makefile.am:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264: Use profile and level from caps
+ Enforces the profile and level from the downstream caps, also
+ sets them on the fixated caps
+ https://bugzilla.gnome.org/show_bug.cgi?id=644233
+
+2011-07-05 10:14:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ Add -DGST_USE_UNSTABLE_API to the compiler flags to avoid warnings
+
+2011-06-25 06:29:50 +0300 Brian Gitonga Marete <marete@toshnix.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix subme property annotation - subme maximum is 10, not 6.
+ 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
+
+2011-06-23 11:28:58 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From 69b981f to 605cd9a
+
+2011-06-19 12:45:00 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstrtspwms.c:
+ rtspwms: Porting to 0.11
+
+2011-06-18 20:24:42 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: Port to 0.11
+
+2011-06-15 23:40:02 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Porting to 0.11
+
+2011-06-08 18:18:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: port siddec to 0.11
+
+2011-06-06 12:41:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: fix fragmented packet handling and packet padding
+ Also remove a bogus assert.
+
+2011-06-03 11:35:55 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ synaesthesia: fix wrong debug log string (copy'n'paste)
+
+2011-06-02 18:46:11 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ configure.ac
+
+2011-06-02 18:43:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: port to new API
+ Port to new segment API.
+ Eat Caps events.
+ No need to set caps on buffers.
+
+2011-05-20 13:32:31 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: target is unsigned and can't be < 0
+
+2011-05-20 13:31:14 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/mad/gstmad.c:
+ mad: use signed when caluculating the delta
+ Avoids a <0 check for an unsigned variable.
+
+2011-05-19 23:55:41 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * docs/plugins/Makefile.am:
+ docs: remove obsolete commented out part
+ We don't have this in the other modules and its not needed.
+
+2011-05-19 23:38:23 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ docs: update plugin introspection data
+ Now more files are merged and produced in a canonical fashion, which hopefully
+ creates less or no delta in the future.
+
+2011-05-19 22:58:28 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 9e5bbd5 to 69b981f
+
+2011-05-18 14:49:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Post CODEC and BITRATE tags
+ Also filter any CODEC/AUDIO_CODEC tags from incoming
+ tag events.
+ Fixes bug #391543.
+
+2011-05-18 16:10:55 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From fd35073 to 9e5bbd5
+
+2011-05-18 12:25:01 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 46dfcea to fd35073
+
+2011-04-27 15:20:20 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: simplify and refactor packet parsing
+ Specifically, refactor buffer padding and consider marker bit for fragment
+ assembling.
+
+2011-04-27 15:14:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: avoid re-sending header
+ ... e.g. following a seek, which otherwise confuses downstream demuxer
+ expecting only a flow of data packets at this time.
+
+2011-04-27 15:12:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtpasfdepay.h:
+ rtpasfdepay: remove unused field
+
+2011-04-29 09:19:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: Post bitrate tag whenever the bitrate changes
+ Also send the layer/mode/emphasis/bitrate tags as an event too.
+
+2011-05-14 10:09:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ win32: define GST_PACKAGE_RELEASE_DATETIME in win32 config.h as well
+
+2011-05-14 10:06:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.10.18 ===
+
+2011-05-10 10:26:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.18
+ Highlights:
+ - x264enc: allow changing bitrate and quantizers dynamically at runtime
+ - x264enc: proxy downstream caps restrictions upstream via get_caps()
+ - lamemp3enc: proxy downstream rate/channels restrictions upstream via get_caps()
+ - mad: allow build without libid3tag (which isn't really needed anyway)
+ - many other fixes and improvements
+
+2011-05-04 12:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Copy the template caps, it's not allowed to increase the refcount of const caps
+
+2011-05-04 12:30:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: do not leak peer pad reference
+
+2011-05-03 15:27:43 +0100 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: No need to copy, reffing is enough
+
+2011-05-03 14:57:16 +0100 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: get_caps function should return a copy of the caps
+
+2011-04-30 20:07:44 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * po/da.po:
+ * po/de.po:
+ * po/fr.po:
+ * po/uk.po:
+ * win32/common/config.h:
+ 0.10.17.4 pre-release
+
+2011-04-29 15:43:47 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: remove buffer_alloc
+
+2011-04-27 12:48:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * 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-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * po/bg.po:
+ * po/ja.po:
+ * po/nl.po:
+ * po/pl.po:
+ * po/ru.po:
+ * po/sl.po:
+ * po/tr.po:
+ 0.10.17.3 pre-release
+
+2011-04-24 14:04:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From c3cafe1 to 46dfcea
+
+2011-04-19 19:24:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: port to 0.11
+
+2011-04-19 19:23:56 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ android/amrnb.mk
+ android/amrwbdec.mk
+ android/asf.mk
+ android/mpegaudioparse.mk
+ configure.ac
+
+2011-04-19 17:26:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/gst-plugins-ugly.supp:
+ tests: add suppression for lame unit test
+
+2011-04-19 14:41:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ * tests/check/generic/.gitignore:
+ * tests/check/generic/index.c:
+ tests: add generic index-setting test
+
+2011-04-19 15:24:03 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: don't deadlock when setting an index
+
+2011-04-16 23:26:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * 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-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * po/sl.po:
+ * win32/common/config.h:
+ 0.10.17.2 pre-release
+
+2011-04-16 23:23:56 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ rademux: fix two 'variable may be used uninitialized' warnings caused by -DG_DISABLE_ASSERT
+
+2011-04-14 15:04:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegstream/gstmpegdemux.c:
+ mpegstream: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-14 15:03:56 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ dvdread, sidplay, x264enc: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-14 15:03:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-13 20:31:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Implement getcaps function
+ This allows to set width/height/etc restrictions downstream.
+
+2011-04-10 18:24:22 -0400 Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+ * Android.mk:
+ * ext/mad/Makefile.am:
+ * ext/x264/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/iec958/Makefile.am:
+ * gst/mpegaudioparse/Makefile.am:
+ * gst/mpegstream/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * gst/synaesthesia/Makefile.am:
+ android: make it ready for androgenizer
+ 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
+
+2011-04-10 18:34:11 -0400 Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+ * android/NOTICE:
+ * android/amrnb.mk:
+ * android/amrwbdec.mk:
+ * android/asf.mk:
+ * android/mpegaudioparse.mk:
+ android: remove the android/ folder
+
+2011-04-04 15:57:58 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 1ccbe09 to c3cafe1
+
+2010-09-21 20:14:04 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Allow changing the bitrate and quantitizers dynamically
+ https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2010-09-21 19:33:10 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Set max bitrate in quality mode
+ https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2010-09-21 19:20:29 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Make it clear that constant quantizer is for debugging only
+ https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2011-03-25 22:34:31 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 193b717 to 1ccbe09
+
+2011-03-25 14:57:00 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From b77e2bf to 193b717
+
+2011-03-25 09:33:04 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From d8814b6 to b77e2bf
+
+2011-03-25 09:09:29 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 6aaa286 to d8814b6
+
+2011-03-24 18:50:17 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 6aec6b9 to 6aaa286
+
+2011-03-22 12:59:33 +0100 Luis de Bethencourt <luis@debethencourt.com>
+
+ * configure.ac:
+ configure.ac: redundant use of AC_MSG_RESULT()
+ cleaned the redundant use of AC_MSG_RESULT() in configure.ac
+
+2011-03-18 19:34:57 +0100 Luis de Bethencourt <luis@debethencourt.com>
+
+ * autogen.sh:
+ autogen: wingo signed comment
+
+2011-03-15 11:02:42 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ dvdsubdec: Rearrange buffer allocation and pushing code a bit
+ This makes the code easier to read, doesn't store every buffer
+ in the instance until the next buffer is to be drawn and
+ fixes an unitialized variable compiler warning.
+
+2011-03-15 10:59:23 +0100 Brendan Le Foll <blefoll@fluendo.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Output only a single buffer per subpicture and set the correct duration
+ Fixes bug #619136.
+
+2011-03-14 18:39:35 +0100 Brendan Le Foll <blefoll@fluendo.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Implement clipping if the video size is smaller than the subpicture size
+ Fixes bug #644704.
+
+2011-03-11 17:45:37 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: build the mad plugin even if libid3tag is not available
+ 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.
+
+2011-03-04 13:48:02 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+
+2011-03-02 13:12:11 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/mpegstream/gstdvddemux.c:
+ dvddemux: small code cleanup
+ Don't duplicate the 'if' check. Makes the 2nd condition easier to read also
+ and avoid empty 'if' when logging is disabled.
+
+2011-02-28 19:27:21 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: export plugin description more platform independent
+ Fixes #642504.
+
+2011-02-28 18:33:34 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 1de7f6a to 6aec6b9
+
+2011-02-26 15:02:58 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+ Conflicts:
+ configure.ac
+
+2011-02-21 13:13:11 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: do not fail fatally when unlinked
+ ... as _NOT_LINKED was neither tested as fatal before nor complained about.
+
+2011-02-21 11:05:31 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ index: remove conditional index support
+ Index support cannot be disabled since commit
+ 4bfb1fe70c6f0d5e29c17a8eeffb02f7fd083f11
+ in core, which removed the configure flags to disable index.
+
+2011-02-17 18:06:51 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ formatting: trim trailing whitespace
+
+2011-02-17 18:05:58 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ index: use delta frame flags instead of 0 or none
+
+2011-02-14 17:52:09 +0000 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Don't register flags with a value of 0
+ Flags with a value of 0 aren't meaningful and will cause
+ g_value_transform to go into an endless loop when trying to
+ convert the flags to a string
+
+2011-02-14 12:54:10 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f94d739 to 1de7f6a
+
+2011-02-07 19:58:45 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/amrwbdec/amrwbdec.c:
+ amrwbdec: avoid stalling on invalid frame
+ Skip 1 byte indicating invalid frame type index rather than stalling
+ on it indefinitely until EOS.
+ Fixes #639715.
+
+2011-02-03 18:25:00 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/pipelines/lame.c:
+ tests: add unit test for lamemp3enc negotiation issue
+ https://bugzilla.gnome.org/show_bug.cgi?id=641151
+
+2011-02-03 18:18:35 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: implement sinkpad get_caps() function to proxy rate and channels restrictions from downstream
+ 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
+
+2011-01-30 16:17:19 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfpacket: Avoid using broken duration extension
+ Quite a few (broken?) files have a packet duration of 1ms, which is
+ most definitely wrong for either audio or video packets.
+ We therefore avoid using that value and instead use other metrics to
+ determine the buffer duration (like using the extended stream properties
+ average frame duration if present and valid).
+
+2011-01-27 15:33:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ win32: fix DEFAULT_AUDIOSINK, should be direct*sound*sink
+ https://bugzilla.gnome.org/show_bug.cgi?id=640705
+
+2011-01-12 16:48:57 +0800 Yang Xichuan <xichuan.yang@tieto.com>
+
+ * gst/mpegaudioparse/gstxingmux.c:
+ xingmux: Use FALSE instead of 0 as return value for a function returning gboolean
+ Fixes bug #639291.
+
+2011-01-06 18:29:06 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/mpegstream/gstdvddemux.c:
+ mpegstream: increase allowable gap between streams
+ The new delay is three times as much as the old one, and just happens
+ to let me properly decode my "Princess Mononoke" DVD, on which dvdreadsrc
+ was chocking before at 5:11.
+ While there, merge the constants used in two places into a define.
+ https://bugzilla.gnome.org/show_bug.cgi?id=539708
+
+2011-01-22 17:31:40 +0100 Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: make tag event writable before modifying tag list in place
+ To modify an event tag is necessary to be sure that x264enc
+ has its own copy.
+ Also fix indentation.
+ https://bugzilla.gnome.org/show_bug.cgi?id=640272
+
+2011-01-24 10:14:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.10.17 ===
+
+2011-01-21 13:18:51 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.17
+
+2011-01-18 11:11:28 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ 0.10.16.4 pre-release
+
+2011-01-14 17:37:09 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Use the proper component value for height
+
+2011-01-11 20:42:06 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ 0.10.16.3 pre-release
+
+2011-01-11 17:09:02 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Handle new type of DRM'd asf files.
+ These are produced by the new MS PlayReady system.
+ https://bugzilla.gnome.org/show_bug.cgi?id=639226
+
+2011-01-11 15:51:14 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From e572c87 to f94d739
+
+2011-01-10 16:37:19 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From ccbaa85 to e572c87
+
+2011-01-10 14:54:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 46445ad to ccbaa85
+
+2011-01-08 00:35:08 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ tests: never disable g_assert() and cast checks for the unit tests
+ The unit tests are riddled with g_assert() and friends, make sure we
+ don't disable assert and cast checks for the unit tests even if
+ this has been specified for the rest of the code base, e.g. via
+ --disable-glib-asserts
+
+2011-01-07 14:42:26 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.16.2 pre-release
+
+2011-01-07 14:38:17 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update docs
+
+2011-01-07 14:37:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/bg.po:
+ * po/ca.po:
+ * po/ru.po:
+ po: update translations
+
+2011-01-07 14:33:37 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: use $LIBM instead of hardcoding -lm
+
+2011-01-06 13:15:17 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Initialize return variable.
+ In the unlikely event that height is 0 (which is invalid) we would end up
+ never setting the flow return.
+
+2011-01-05 16:52:03 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/realmedia/rmutils.c:
+ realmedia: Fix unitialized variables on macosx
+
+2011-01-04 10:32:05 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Handle codec/encoder tags
+ Make x264enc drop video-codec and codec tags and replace
+ encoder/encoder-version with x264 and its build number
+ Fixes #621465
+
+2010-12-29 22:17:50 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers
+
+2010-12-29 22:10:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: minor formatting clean-up
+
+2010-12-29 21:42:36 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: refactor cropping code to use libgstvideo functions
+ https://bugzilla.gnome.org/show_bug.cgi?id=571146
+
+2010-12-29 20:19:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: use GstVideoFormat instead of custom enum
+
+2010-12-29 20:15:03 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpeg2dec/Makefile.am:
+ mpeg2dec: fix LIBADD order in Makefile.am
+
+2010-11-19 13:01:35 -0500 Tristan Matthews <tristan@sat.qc.ca>
+
+ * ext/x264/gstx264enc.c:
+ x264: vbv-buf-capacity should have a minimum of 0
+ x264 will clip this value internally, and users should be allowed to
+ specify a lower value than 300 ms.
+ https://bugzilla.gnome.org/show_bug.cgi?id=635291
+
+2010-12-27 11:38:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: also accept YV12 input
+
+2010-12-01 18:35:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: add a note to the docs about encoder latency and queues
+ https://bugzilla.gnome.org/show_bug.cgi?id=636107
+
+2010-12-24 10:12:19 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ realmedia: do not use the pad buffer allocation functions in demuxers
+ Doing so can block, see https://bugzilla.gnome.org/show_bug.cgi?id=637822
+ https://bugzilla.gnome.org/show_bug.cgi?id=637932
+
+2010-12-20 17:47:41 +0100 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 169462a to 46445ad
+
+2010-12-16 10:30:31 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ mad: If gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one
+ Fixes bug #635461.
+
+2010-12-15 14:56:36 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 20742ae to 169462a
+
+2010-12-12 11:54:35 -0600 Rob Clark <rob@ti.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly
+ Signed-off-by: Rob Clark <rob@ti.com>
+
+2010-12-13 16:24:09 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 011bcc8 to 20742ae
+
+2010-11-14 10:57:21 -0800 Leo Singer <leo.singer@ligo.org>
+
+ * configure.ac:
+ x264: uses pkg-config to locate libx264
+
+2010-12-07 15:40:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ Merge branch 'master' into 0.11
+
+2010-12-07 15:39:32 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/pipelines/lame.c:
+ check: don't use deprecated method
+
+2010-12-06 18:12:51 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * android/amrnb.mk:
+ * android/amrwbdec.mk:
+ * android/asf.mk:
+ * android/mpegaudioparse.mk:
+ * configure.ac:
+ more 0.10 -> 0,11 changes
+
+2010-12-06 12:29:12 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ configure: open 0.11 branch
+
+2010-12-03 17:43:25 +0100 Benjamin Gaignard <benjamin.gaignard@stericsson.com>
+
+ * Android.mk:
+ * android/NOTICE:
+ * android/amrnb.mk:
+ * android/amrwbdec.mk:
+ * android/asf.mk:
+ * android/mpegaudioparse.mk:
+ Add build system for Android
+
+2010-11-25 19:51:50 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/rmutils.c:
+ realmedia: Remove dead assignments
+
+2010-11-25 19:51:40 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mad/gstmad.c:
+ mad: Remove dead assignments
+
+2010-11-13 12:38:45 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: remove bogus comment
+
+2010-11-13 12:34:37 +0000 Thomas Green <thomasgr33n@gmail.com>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: fix handling of multi-angle streams
+ We would output all angles interleaved instead of just
+ the selected angle.
+ https://bugzilla.gnome.org/show_bug.cgi?id=539254
+
+2010-10-28 17:01:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/Makefile.am:
+ realmedia: fix LIBS order in Makefile
+
+2010-10-22 09:17:40 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: update for new translatable strings
+
+2010-10-27 13:17:29 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 7bbd708 to 011bcc8
+
+2010-10-20 20:26:45 +0200 Guillaume Emont <gemont@igalia.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: convert the position to stream time before answering to a position query
+
+2010-10-24 14:22:39 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ realmedia: Get codec name from pbutils instead of harcoding them
+
+2010-10-22 11:29:55 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Work around a rate control issue in libx264
+ 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
+
+2010-10-19 16:30:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Use gst_pad_peer_query() instead of getting the peer pad manually
+
+2010-10-13 21:38:06 +0200 Guillaume Emont <gemont@igalia.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix position query by trusting upstream
+ 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.
+
+2010-10-19 12:20:40 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/lame/gstlame.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/mpegstream/gstmpegparse.c:
+ various: canonicalize property names
+
+2010-10-19 10:06:33 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/x264/gstx264enc.c:
+ various (ext): add a missing G_PARAM_STATIC_STRINGS flags
+
+2010-10-19 09:49:47 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/iec958/ac3iec.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rdtmanager.c:
+ various (gst): add a missing G_PARAM_STATIC_STRINGS flags
+
+2010-10-14 12:32:16 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From 5a668bf to 7bbd708
+
+2010-10-08 12:44:52 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From c4a8adc to 5a668bf
+
+2010-10-08 12:56:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 5e3c9bf to c4a8adc
+
+2010-09-29 21:24:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad: support reverse playback
+
+2010-09-26 19:24:08 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ dvdreadsrc: improve error messages on read errors
+ Provide proper i18n-ed error messages when a read error happens,
+ and point out that the error could be happening because the
+ DVD is scrambled.
+ https://bugzilla.gnome.org/show_bug.cgi?id=613633
+
+2010-09-24 00:03:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: set plugin release datetime
+
+2010-09-21 18:34:31 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From aa0d1d0 to 5e3c9bf
+
+2010-09-15 20:14:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegstream/gstmpegparse.c:
+ mpegparse: re-fix flow return handling
+ Fix wrong GST_FLOW_IS_SUCCESS substitution in commit e99cb46c:
+ - } while (GST_FLOW_IS_SUCCESS (result));
+ + } while (result != GST_FLOW_OK);
+
+2010-09-09 22:33:36 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * tests/check/Makefile.am:
+ * tests/check/generic/states.c:
+ tests: allow running state tests for all elements
+ Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check
+ to try elements that would normaly be skipped.
+
+2010-09-09 09:53:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Makefile.am:
+ New pkgconfig subdirectory needs to be added to SUBDIRS as well so it's entered and disted
+
+2010-09-08 00:09:35 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * pkgconfig/.gitignore:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+ Add gstreamer-plugins-ugly-uninstalled-0.10.pc file so other modules can find our plugins
+ This .pc file will not be installed, it's only for uninstalled setups,
+ same thing as we do for -good. This is so other modules' unit tests can
+ find our plugins properly in an uninstalled setup.
+
+2010-09-07 11:42:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From c2e10bf to aa0d1d0
+
+2010-09-06 23:53:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: re-enable use of -DGST_DISABLE_DEPRECATED in git versions
+
+2010-09-06 23:51:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/sidplay/gstsiddec.cc:
+ siddec: don't use GST_FLOW_IS_FATAL
+ GST_FLOW_IS_FATAL has been deprecated in core git.
+
+2010-09-05 18:58:50 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From d3d9acf to c2e10bf
+
+2010-09-05 12:27:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Require orc >= 0.4.6 for --compat
+
+2010-09-05 12:20:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From ec60217 to d3d9acf
+
+2010-08-27 18:26:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Don't use GST_FLOW_IS_FATAL()
+ And don't post error messages if allocating a buffer resulted
+ in WRONG_STATE or UNEXPECTED.
+
+2010-08-27 18:25:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstxingmux.c:
+ xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream
+
+2010-08-27 18:24:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ mpegstream: Don't use GST_FLOW_IS_SUCCESS()
+
+2010-08-27 18:22:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Don't use GST_FLOW_IS_FATAL() and GST_FLOW_IS_SUCCESS()
+
+2010-08-27 18:19:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't use GST_FLOW_IS_FATAL()
+ And don't post error messages for UNEXPECTED and post an error
+ message if pulling data failed because of NOT_LINKED.
+
+2010-09-04 13:17:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Back to development
+ Temporarily disable -DGST_DISABLE_DEPRECATED for git builds until
+ the code is updated for the GST_FLOW_IS_* macro deprecations.
+
+=== release 0.10.16 ===
+
+2010-09-02 23:59:20 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.16
+
+2010-09-02 23:58:22 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update docs for release
+
+2010-09-02 23:48:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/LINGUAS:
+ * po/gl.po:
+ * po/id.po:
+ * po/lv.po:
+ * po/ro.po:
+ * po/sv.po:
+ po: update translations
+
+2010-08-30 16:02:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ 0.10.15.6 pre-release
+
+2010-08-27 17:50:59 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't error out on non-critical flow returns
+ Only error out when downstream returns:
+ * NOT_SUPPORTED
+ * ERROR
+ * NOT_NEGOTIATED
+ * NOT_LINKED
+ If we got _UNEXPECTED, we push an EOS downstream (since maybe only one
+ of the streams had gone EOS) and then stop the task silently.
+ In the case of WRONG_STATE we just need to stop silently
+ https://bugzilla.gnome.org/show_bug.cgi?id=600412
+
+2010-08-25 19:02:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ 0.10.15.5 pre-release
+
+2010-08-25 15:39:33 +0200 Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: propagate flow errors upstream.
+ Remove a wrong GST_FLOW_IS_FATAL call. When pushing fails, mp3parse should
+ always return the error upstream.
+
+2010-08-21 21:42:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ 0.10.15.4 pre-release
+
+2010-08-13 17:24:41 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 3e8db1d to ec60217
+
+2010-08-11 16:46:48 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ 0.10.15.3 pre-release
+
+2010-08-11 09:21:43 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue
+ 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
+
+2010-08-11 00:02:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ 0.10.15.2 pre-release
+
+2010-08-10 14:37:39 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ synaesthesia: code cleanups.
+ Remove unused boilerplate for signals. Use _OBJECT variants of logging macros
+ more.
+
+2010-08-10 14:24:01 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ synaesthesia: use GST_BOILERPLATE macros
+
+2010-08-10 10:59:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From bd2054b to 3e8db1d
+
+2010-08-09 00:31:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264: fix printf format warning in debug message
+
+2010-08-07 00:09:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/Makefile.am:
+ docs: fix bug passing arguments to gtkdoc-fixref in upload target
+ Missing backslash at end of line meant we weren't passing all arguments
+ to gtkdoc-fixref and we'd get a shell error when doing 'make upload'.
+
+2010-08-05 13:57:26 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From a519571 to bd2054b
+
+2010-08-04 19:28:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Check if the compiler supports ISO C89 or C99 and which parameters are required
+ This first checks what is required for ISO C99 support and sets the relevant
+ compiler parameters and if no C99 compiler is found, it checks for a
+ C89 compiler. This enables us to check for and use C89/C99 functions
+ that gcc hides from us without the correct compiler parameters.
+
+2010-07-29 09:41:49 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix flushing of delayed frames
+ 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.
+
+2010-07-21 17:24:33 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Improve x264enc defaults
+ - medium x264 speed/quality preset
+ - threads defaults to 0 which automatically uses 1.5x number of cpu cores
+ Addresses part of bug #607798
+
+2010-07-21 17:22:48 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Fix property description typos
+
+2010-07-22 11:53:04 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add some more debug info
+
+2010-07-21 17:09:20 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Add speed-preset and [psy-]tuning properties
+ 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
+
+2010-07-21 16:56:06 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Refactor code in preparation for presets/tunings
+ - 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
+
+2010-07-21 16:32:11 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Update available me types
+ Use the x264_motion_est_names[] array to populate the enum of ME types. This is
+ now self-maintaining.
+
+2010-07-21 15:59:12 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Use new libx264 API to affect fast first pass
+ 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
+
+2010-07-21 15:52:28 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Add profile property
+ 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
+
+2010-07-21 15:40:27 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Add option-string property
+ Adds support for an x264 format option-string to specify advanced parameters
+ Addresses part of bug #607798
+
+2010-07-22 13:24:37 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mad/Makefile.am:
+ mad: use right automake variable, should be ID3TAG_{LIBS,CFLAGS} not ID3_{LIBS,CFLAGS}
+ Spotted by syntr0py.
+
+2010-07-20 19:44:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: only set timebase on versions where it exists
+
+2010-07-20 16:40:22 +0200 David Hoyt <dhoyt@llnl.gov>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: set appropriate time base
+ Fixes #624786.
+
+2010-06-30 18:45:49 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ tests: add plugin loading whitelist to test environment
+ Only want to load core/-base/-ugly plugins here.
+
+2010-06-28 16:12:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * autogen.sh:
+ * configure.ac:
+ Bump automake requirement to 1.10 and autoconf to 2.60
+ For maintainability reasons and $(builddir).
+ See #622944.
+
+2010-06-28 09:34:30 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix seeking after last commits
+ Don't handle wrong-state returns as errors to allow seeking to work
+ again.
+
+2010-06-24 19:46:39 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Push all pending data on EOS
+ When on push mode and receiving an EOS event, asfdemux
+ should push all pending data because we might be dealing
+ with a broken file that has a preroll value higher
+ than its actual length.
+
+2010-06-24 19:29:17 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix sending eos event for chained asfs
+ Properly push EOS event when finishing a chained asf file
+ in pull mode
+ Fixes #599718
+
+2010-06-24 20:55:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-rmdemux.xml:
+ docs: add rmdemux to docs properly
+ The plugin has been renamed, remove old introspection file.
+
+2010-06-24 18:04:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-x264.xml:
+ docs: update for recent x264enc changes
+
+2010-06-24 18:03:21 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: fix compiler warning when debugging system in core is disabled
+
+2010-06-24 15:09:44 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 73ff93a to a519571
+
+2010-06-23 11:05:11 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Allow at least 500ms of preroll.
+ Some files have insanely low preroll values which break the
+ all_streams_prerolled() logic.
+ Fixes #622407
+
+2010-06-22 11:41:42 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: add new h264 caps attribute alignment
+ See #606662.
+
+2010-06-18 14:35:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: conditionally expose enhanced upstream capabilities
+ API: GstX264Enc:sliced-threads
+ API: GstX264Enc:sync-lookahead
+ API: GstX264Enc:intra-refresh
+ API: GstX264Enc:mb-tree
+ API: GstX264Enc:rc-lookahead
+ See #607798.
+
+2010-06-17 16:48:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-iec958.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+ * docs/plugins/inspect/plugin-mpegstream.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ docs: update introspected plugin docs for gstdoc-scangobj and other changes
+ Update common for latest gstdoc-scangobj and inspect xml files for
+ escaping and pad template order changes.
+
+2010-06-15 16:50:21 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From 9339ccc to 35617c2
+
+2010-06-15 16:54:42 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 5adb1ca to 9339ccc
+
+2010-06-15 16:35:49 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 57c89b7 to 5adb1ca
+
+2010-06-15 15:50:09 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From c804988 to 57c89b7
+
+2010-06-14 16:59:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * gst/realmedia/rtspreal.c:
+ configure: Update required GLib version to 2.20
+
+2010-06-14 15:33:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Call orc_init() before trying to get target flags
+
+2010-06-14 14:34:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Remove debug printf...
+
+2010-06-14 14:34:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/a52dec/Makefile.am:
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Use orc for CPU feature detection and don't check for liboil
+
+2010-06-14 13:27:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Use GLIB_EXTRA_CFLAGS
+
+2010-06-14 13:05:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 7a0fdf5 to c804988
+
+2010-06-14 11:35:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 6da3bab to 7a0fdf5
+
+2010-06-12 08:29:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 733fca9 to 6da3bab
+
+2010-06-09 12:40:26 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From fad145b to 733fca9
+
+2010-06-09 12:34:18 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From 47683c1 to fad145b
+
+2010-06-05 14:11:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: pass bitrate on caps
+ Set the bitrate on the caps, some decoders like sipro need this to function
+ properly.
+ Fixes #620007
+
+2010-06-01 23:49:37 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From 17f89e5 to 47683c1
+
+2010-06-01 22:55:22 -0700 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From fd7ca04 to 17f89e5
+
+2010-05-31 16:57:42 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Only set i_weighted_pred on versions where it exists
+
+2010-05-20 11:28:47 -0400 Tristan Matthews <tristan@sat.qc.ca>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: implement latency query
+ The encoder's latency is deduced from the framesize. Fixes #618896.
+
+2010-06-01 09:30:33 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.10.15 ===
+
+2010-05-30 14:21:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.15
+
+2010-05-30 14:20:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2010-05-30 12:10:29 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: make implicit GLib and liboil requirements explicit
+ core/base 0.10.26 require GLib >= 2.18 and liboil >= 0.3.14
+
+2010-05-26 23:16:46 -0400 Olivier Crête <tester@tester.ca>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: disable I weighted pred
+ 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.
+
+2010-05-26 12:16:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.14.3 pre-release
+
+2010-05-26 11:52:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: update translations
+
+2010-05-26 11:55:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 357b0db to fd7ca04
+
+2010-05-14 20:06:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.14.2 pre-release
+
+2010-05-14 18:25:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 4d67bd6 to 357b0db
+
+2010-05-14 16:02:47 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmutils.c:
+ * gst/realmedia/rmutils.h:
+ rmdemux: add better sipr nibble swap routine
+
+2010-05-13 17:57:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: descramble SIPR before pushing out
+ Collect and descramble the SIPR packets before pushing.
+ Descramble ATRAC audio.
+ Fixes #618098
+
+2010-05-13 17:57:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmutils.c:
+ * gst/realmedia/rmutils.h:
+ rm: add function to descramble sipr
+
+2010-01-08 20:51:56 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Re-send the received upstream event as-is downstream
+ https://bugzilla.gnome.org/show_bug.cgi?id=606689
+
+2010-05-07 15:33:28 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/amrnb/amrnb.c:
+ amrnbenc: Set rank to GST_RANK_SECONDARY
+
+2010-04-30 19:53:15 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: use GLib's base64 functions if available
+ Since gst_rtsp_base64_decode_ip() just got deprecated in -base git.
+
+2010-04-28 17:10:36 +0400 Руслан Ижбулатов <lrn1986@gmail.com>
+
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrwbdec/amrwbdec.h:
+ amr: Use correct includes (as pkg-config suggests)
+ Fixes #617078
+
+2010-04-27 13:15:47 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/ac3parse/.gitignore:
+ * gst/ac3parse/Makefile.am:
+ * gst/ac3parse/README:
+ * gst/ac3parse/ac3parse.vcproj:
+ * gst/ac3parse/gstac3parse.c:
+ * gst/ac3parse/gstac3parse.h:
+ ac3parse: remove unported 0.8 plugin
+ New ac3parse lives in gst-plugin-bad. Remove this to avoid confusion.
+
+2010-04-27 12:25:37 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ docs: adding a mp3decoder as well is useful
+
+2010-04-27 11:39:51 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ docs: massage section index
+
+2010-04-27 11:39:11 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/amrwbdec/amrwbdec.h:
+ amrwbdec: move define to source to avoid hiding it from the docs
+
+2010-04-27 11:38:28 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/cdio/gstcdiocddasrc.c:
+ docs: remove short_desc, it is taken from element details
+
+2010-04-27 11:37:52 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ docs: fix sections docs for synaesthesia
+
+2010-04-27 11:02:15 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ docs: add docs for mp3parse
+
+2010-04-20 17:23:04 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst-plugins-ugly.doap:
+ doap: update repository info from cvs->git and maintainers
+
+2010-04-23 14:41:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From fc85867 to 4d67bd6
+
+2010-04-13 16:59:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/x264enc.c:
+ x264enc: adaptive NALU type checking
+ In particular, be less picky about SEI NALU order, which makes test more
+ robust with respect to changes in libx264.
+ See also #615410.
+
+2010-04-16 21:10:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: adaptive x264 header NAL layout handling
+ Fixes #615410.
+
+2010-04-15 16:31:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: we require a dynamic payload type
+ Add an extra caps property that restricts the depayloader to only accept dynamic
+ payload types.
+
+2010-04-15 07:20:20 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * configure.ac:
+ configure: Drop -Wcast-align
+ Commit message copied from core's commit from Benjamin Otte:
+ 246f5dba96a5b50bb74621af67b30942cca72af5
+ Apparently gcc warns that GstMiniObject is not castable to
+ GstEvent/Message/Buffer due to them containing 64bit variables, even
+ though ARM hackers claim that those only need 4byte alignment. And as
+ long as gcc behaves that way, this warning is not very useful.
+ So we'll remove the warning until this problem is fixed.
+ Fixes #615698
+
+2010-04-14 09:27:14 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: copy over all buffer flags when copying buffers.
+ Avoids losing the tff/rff video buffer flags
+
+2010-03-14 12:16:21 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Make a table static to avoid having to always allocate it.
+
+2010-04-13 16:31:25 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix up avcC header construction
+ Fix off-by-one introduced by commit 35dd89951d8bb1c094da65480e4197efdfb4e93c
+ for BUILD_X264 < 76.
+ Also fixes #610089.
+
+2010-04-13 13:16:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: parameterize libx264 provided NAL layout in codec-data creation
+
+2010-04-12 12:43:05 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * configure.ac:
+ configure: Remove -Wundef flag
+ Same fix as for #615161
+
+2010-04-09 11:23:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From fdf023d to fc85867
+
+2010-04-09 09:55:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst-libs/gst/gettext.h:
+ i18n: #if ENABLE_NLS -> #ifdef ENABLE_NLS to fix compiler warning
+
+2010-03-30 00:36:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ * ext/Makefile.am:
+ * gst/Makefile.am:
+ build: build plugins in parallel where possible, if make -jN is used
+
+2010-03-26 17:08:23 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Makefile.am:
+ build: add cruft alert for common/shave*
+
+2010-03-25 19:40:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * win32/MANIFEST:
+ Fix make distcheck
+ Remove removed file win32/common/config.h.in from MANIFEST.
+
+2010-03-24 19:35:03 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/synaesthesia/synaescope.c:
+ * gst/synaesthesia/synaescope.h:
+ synaestesia: Fix old-style prototype
+
+2010-03-24 19:07:11 +0300 Руслан Ижбулатов <lrn1986@gmail.com>
+
+ * gst/realmedia/rmutils.c:
+ Fix pointer type.
+ Fixes #613815
+
+2010-03-24 18:55:32 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From 55cd514 to c1d07dd
+
+2010-03-24 11:27:40 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.h:
+ * ext/lame/gstlamemp3enc.h:
+ * ext/lame/plugin.c:
+ * ext/mad/gstmad.c:
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstxingmux.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/realmedia/asmrules.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/pnmsrc.h:
+ * gst/realmedia/rdtdepay.h:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rtspreal.c:
+ build: Add all kinds of compiler warning flags and fix the resulting warnings
+
+2010-03-19 00:03:53 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/amrnb/Makefile.am:
+ * ext/amrwbdec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/mpegaudioparse/Makefile.am:
+ build: fix up Makefile.am
+ Mostly just add $(GST_BASE_CFLAGS) where they're missing and fix
+ the order a bit here and there (see docs/random/moving-plugins).
+
+2010-03-19 00:02:40 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * win32/common/config.h.in:
+ win32: remove win32-specific config.h.in copy that's not used any longer
+ The win32 config.h is now generated from the top-level config.h.in.
+
+2010-03-18 15:53:14 +0100 Benjamin Otte <otte@redhat.com>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.c:
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst/ac3parse/gstac3parse.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/iec958/ac3iec.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstxingmux.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rtspreal.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ gst_element_class_set_details => gst_element_class_set_details_simple
+
+2010-03-16 15:05:06 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Put pixel-aspect-ratio from input into the src pad caps
+ Fixes bug #612995.
+
+2010-03-12 13:59:53 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From e272f71 to 55cd514
+
+2010-03-11 11:21:19 +0100 Benjamin Otte <otte@redhat.com>
+
+ * common:
+ Automatic update of common submodule
+ From df8a7c8 to e272f71
+
+2010-03-10 22:13:45 +0100 Benjamin Otte <otte@redhat.com>
+
+ * configure.ac:
+ Update CXXFLAGS, too
+
+2010-03-10 21:01:20 +0100 Benjamin Otte <otte@redhat.com>
+
+ * configure.ac:
+ Update for recent changes to common submodule
+ This just replaces every "$ERROR_CFLAGS" usage with a usage of
+ "$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
+ previously.
+ Actually using that separation will happen later.
+
+2010-03-10 21:52:30 +0100 Benjamin Otte <otte@redhat.com>
+
+ * common:
+ Automatic update of common submodule
+ From 9720a7d to df8a7c8
+
+2010-03-10 20:44:18 +0100 Benjamin Otte <otte@redhat.com>
+
+ * common:
+ Automatic update of common submodule
+ From 0b6e072 to 9720a7d
+
+2010-03-10 16:10:17 +0100 Benjamin Otte <otte@redhat.com>
+
+ * common:
+ Automatic update of common submodule
+ From 7cc5eb4 to 0b6e072
+
+2010-03-10 01:10:52 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 7aa65b5 to 7cc5eb4
+
+2010-03-09 21:40:26 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 44ecce7 to 7aa65b5
+
+2010-02-26 15:43:58 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Use automake 1.11 silent rules instead of shave if available
+ This makes sure that we use something that is still maintained and
+ also brings back libtool 1.5 support.
+
+2010-03-09 17:42:11 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.10.14 ===
+
+2010-03-06 01:13:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.14
+
+2010-03-06 01:10:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2010-03-03 22:52:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.13.4 pre-release
+
+2010-02-22 19:13:11 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * tests/check/elements/x264enc.c:
+ x264enc: Replace 'avc-sample' with 'avc' in caps
+ In the element and in its tests
+ Fixes #606662
+
+2010-03-01 14:07:20 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't set durations of 0 on outgoing buffers.
+ Some (broken) streams don't have the extended stream properties in
+ the header, resulting in applying a duration of zero on outgoing
+ buffers.
+ Fixes #611473
+
+2010-03-01 14:05:58 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Make sure we always set proper payload duration.
+ Some (broken) streams will have a delta of 0, resulting in outgoing
+ buffers having durations of 0.
+ Fixes #611473
+
+2010-02-24 01:40:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.13.3 pre-release
+
+2010-02-19 10:13:34 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Make sure we don't end up with negative timestamps.
+ Some files have payload with timestamps smaller than the preroll duration.
+ Instead of blindly substracting the preroll value (and ending up with
+ insanely high timestamps on the outgoing buffers), we make sure we
+ never go below 0.
+ Fixes #610432
+
+2010-02-19 01:07:08 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.13.2 pre-release
+ Update core/base requirement to 0.10.26, since that's more likely
+ to be the actual requirement.
+
+2010-02-19 01:06:44 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/LINGUAS:
+ * po/el.po:
+ * po/sl.po:
+ po: update translations
+
+2010-02-16 14:08:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/x264enc.c:
+ x264enc: add caps check to x264enc unit test
+ Add some minimal caps checking to x264enc unit test.
+ See #610089.
+
+2010-02-16 13:25:11 +0000 Vittorio Palmisano <vpalmisano@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: fix up avcC header construction and playback by flash players
+ 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.
+
+2010-02-16 12:59:54 +0100 Robert Swain <robert.swain@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Improve seek behaviour for audio-only with no index
+ Instead of seeking to seek_time - 5s in the hope of hitting a keyframe
+ for video, we can just seek to seek_time instead.
+
+2010-02-16 00:24:32 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: fix up GST_CXXFLAGS properly
+ We don't want C specific flags in GST_CXXFLAGS, so base it on the
+ GST_CFLAGS that only contains the pkg-config CFLAGS but none of
+ the GST_OPTION_CFLAGS. Also, we only need the local includes once.
+
+2010-02-11 01:12:43 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * MAINTAINERS:
+ Update MAINTAINERS, add myself
+
+2010-02-15 23:16:32 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * configure.ac:
+ configure: base GST_CXXFLAGS on --cflags from pkg-config
+ pkg-config sets GST_CFLAGS and GST_LIBS. We need to use CFLAGS as a starting
+ point for for both C and CXX settings.
+
+2010-02-14 23:18:44 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 96dc793 to 44ecce7
+
+2010-02-01 01:33:22 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Makefile.am:
+ * configure.ac:
+ * win32/common/.gitignore:
+ * win32/common/config.h:
+ win32: change how win32/common/config.h is updated
+ Generate win32/common/config.h-new directly from config.h.in,
+ using shell variables in configure and some hard-coded information.
+ Change top-level makefile so that 'make win32-update' copies the
+ generated file to win32/common/config.h, which we keep in source
+ control. It's kept in source control so that the git tree is
+ buildable from VS.
+ This change is similar to the ones applied a while ago to GStreamer
+ core, gst-plugins-base and gst-plugins-good and prevents configure
+ from changing files in source control. The generated config.h
+ should be ok, but needs testing.
+
+2010-01-31 13:03:33 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: don't construct config header with uninitialised bytes
+ Turns out 4 + 4 + 2 + (4 * 2) is actually 18 and not 22. This avoids
+ a presumably unintentional padding of uninitialised bytes at the end
+ of the CONT tags chunk, which should be harmless but causes warnings
+ in valgrind (see #608533 for a test URL).
+
+2010-01-30 19:12:24 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: add finalize function so we can free streams and rulebook
+ Fix memory leak in Real RTSP component (#608533).
+
+2010-01-30 19:10:45 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: fix minor memory leak
+ Caps take their own reference when a buffer is added to them, so
+ unref buffer after adding it to caps (#608533).
+
+2010-01-30 19:06:34 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rdtdepay.c:
+ rdtdepay: unref input buffer when done
+ Fixes memory leak, see #608533.
+
+2010-01-30 15:19:56 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 15d47a6 to 96dc793
+
+2010-01-29 19:47:03 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: make use of Access Unit delimiters configurable
+ API: GstX264Enc:aud
+
+2010-01-22 15:40:28 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Do not subtract padding twice
+ Only subtract implicit padding if an explicit one isn't
+ provided. Avoids subtracting it twice and causing
+ parsing errors.
+ Fixes #607698
+
+2010-01-22 16:55:14 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/mpegstream/gstmpegpacketize.c:
+ assert: g_assert_not_reached() cannot replace return statement
+ Fix build with assert being turned off.
+
+2010-01-20 00:55:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 14cec89 to 15d47a6
+
+2010-01-18 18:01:55 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't forget to update flow variable
+ Forgot to update the return value in the loop.
+
+2010-01-18 17:49:06 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Check flow return on every push
+ We previously only aggregated flow returns after the while(push) loop,
+ which meant that in some cases we would end-up not properly aggregating
+ the flow returns.
+ This is based on the same flow aggregation algorithm as oggdemux.
+
+2010-01-11 16:14:44 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Add stream-format to output caps
+ Adds stream-format to output caps of x264enc that
+ informs if the stream is in bytestream of avc format.
+ Fixes #606662
+
+2010-01-11 12:23:35 +0100 Arnaud Patard <apatard@mandriva.com>
+
+ * gst/mpegaudioparse/gstxingmux.c:
+ xingmux: Fix unaligned memory access
+ ARM/SPARC need 32bit alignment but xingmux accesses possibly
+ unaligned memory, which leads to SIGBUS.
+ Fixes bug #586464.
+
+2010-01-07 14:36:47 -0800 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Use GST_STR_NULL in a couple of places.
+ Fixes crashing on some of the log statements on win32.
+
+2010-01-07 16:36:08 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Parse and post bitrate for streams
+ Parse the bitrate of the streams and post their tags.
+ Fixes #599299
+
+2010-01-07 13:54:21 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Post bitrate tag
+ If stream bitrate object is available, post the bitrate
+ tags.
+ Fixes #599297
+
+2010-01-04 15:19:25 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: minor validation check of (Xing, VBRI) metadata
+ ... to detect e.g. a truncated file, rendering some of the metadata invalid.
+
+2010-01-04 14:59:06 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: use proper total_time and total_bytes in various cases
+ The correct basis for (Xing, VBRI) seek table calculations is the
+ byte size and duration provided by that metadata, rather than some
+ other (possibly even estimated) one. This also prevents an infinite
+ conversion loop in (unlikely) case where a TOC is provided without
+ such corresponding (duration) metdata.
+
+2009-12-08 19:55:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: conserve stop time for non-accurate seek
+ Use the same strategy as accurate seeks to store
+ pending non-accurate seeks to avoid overwriting non-definite
+ stop times. When doing non-accurate seeks our position
+ reporting might drift off by some secs and the stream can
+ end up before it should.
+ Fixes #603695
+
+2009-12-21 19:12:59 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 47cb23a to 14cec89
+
+2009-12-18 16:04:12 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/amrwbdec/amrwb.c:
+ amrwbdec: give decoder a rank so decodebin/playbin will use it
+
+2009-12-08 19:01:50 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: return false when we can't seek
+ When upstream can't seek, we return false as well
+
+2009-12-02 11:21:22 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: Avoid crash when seeking before negotiating
+ 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
+
+2009-12-01 15:08:07 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 87bf428 to 47cb23a
+
+2009-12-01 14:17:50 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From da4c75c to 87bf428
+
+2009-11-27 18:56:13 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From 53a2485 to da4c75c
+
+2009-11-26 15:54:45 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: fix non-flushing seek
+ Specifically, in addition to clearing lots of variables/offsets
+ when receiving newsegment, also clear leftover data to match.
+
+2009-11-20 21:32:31 -0500 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ x264enc: Make upstream GstForceKeyUnit thread-safe
+ Also send the GstForceKeyUnit event downstream when an upstream on is received,
+ allowing muxers or payloaders to take appropriate actions.
+ https://bugzilla.gnome.org/show_bug.cgi?id=602556
+
+2009-11-19 10:31:25 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From a3e3ce4 to 53a2485
+
+2009-11-18 09:58:39 +0100 Benjamin Gaignard <benjamin@gaignard.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Don't call strlen() on NULL pointers
+ Fixes bug #602280.
+
+2009-11-09 15:02:05 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Remove old pads when new ones are added
+ The old pads were being removed before adding the new ones,
+ we should add the new ones first.
+ Fixes #599718
+
+2009-11-09 13:30:45 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Handle chained asfs on pull mode
+ Adds chained asfs handling to pull mode. It now checks if
+ there is a new asf header after the last packet (when it
+ is possible to know how many packets are) or it tries
+ checking if a processed packet that fails is an header
+ object.
+ Fixes #599718
+
+2009-11-09 10:24:46 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: properly do chained asfs on push mode
+ To properly do chained asfs work with playbin2, we need to
+ push eos on the old pads before removing them.
+ Fixes #599718
+
+2009-10-27 17:48:03 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: add support for chained asfs (push mode)
+ Adds support for detecting and playing chained asfs
+ in push mode. asfdemux tries to detect a new asf start
+ by identifying the header object guid in a input buffer.
+ When it finds it, it resets its state, removing its pads
+ and creates new ones for the new file.
+
+2009-11-05 18:33:09 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix two small leaks
+
+2009-11-05 18:19:58 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: prefer WM/TrackNumber over WM/Track, it's more reliable
+ WM/Track has a 0 base but is often wrongly written as starting from 1,
+ so not as reliable as WM/TrackNumber which always starts from 1.
+
+2009-11-05 18:11:55 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: WM/Track starts counting from 0, adjust to start from 1
+
+2009-11-05 18:11:14 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: map WM/TrackNumber to GST_TAG_TRACK_NUMBER as well
+ There's both WM/Track and WM/TrackNumber.
+
+2009-11-04 15:52:09 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Fix debug statement: Pass pos variable instead of time() function
+
+2009-11-04 15:50:17 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Fix printf format string warning
+
+2009-11-04 15:46:04 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix bogus variable used uninitialised warnings
+
+2009-11-04 13:55:39 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/Makevars:
+ po: Don't create backup .po files
+ As well as preventing creation of useless backup files, it works
+ around a bug in gettext 0.17 on OS/X
+
+2009-10-29 11:39:13 -0700 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: fix c99-style comments.
+
+2009-10-29 10:34:17 -0700 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: accept fragments in a continued packet where the subsequent fragments declare a size of 0. Fixes bug 600037.
+
+2009-10-27 12:33:24 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rmutils.c:
+ rmutils: fix byteswapping
+ fix the byteswapping code that was wrong because of the side effects of the
+ READ/WRITE macros.
+ Fixes #599676
+
+2009-10-20 20:00:44 +0100 Robert Swain <robert.swain@gmail.com>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: Adapt to slightly modified x264 API
+ Fixes #599095.
+
+2009-10-26 17:31:19 -0300 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: careful to avoid crash on bogus data
+ When receiving bogus data, we have to avoid subtracting a value
+ larger than 'size' from 'size' variable, resulting in a wrap
+ that would make 'size' a really large bogus value.
+ Fixes #599333
+
+2009-10-26 00:56:37 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * win32/common/config.h:
+ win32: Commit bumped version number
+
+2009-10-17 13:46:13 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: Don't use expensive glib ways to get an enum nick.
+ Fixes #598761
+ This removes a good 50% of processing time for parsing a buffer.
+ We do this by simply... getting the nicks that we already have handy
+ instead of going through the expensive glib system.
+
+2009-10-24 20:36:41 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * configure.ac:
+ configure.ac: And back to development we go...
+
+=== release 0.10.13 ===
+
+2009-10-21 17:16:00 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * gst-plugins-ugly.doap:
+ * win32/common/config.h:
+ Release 0.10.13
+
+2009-10-21 17:02:42 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2009-10-16 10:16:55 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 85d1530 to 0702fe1
+
+2009-10-15 23:56:55 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ChangeLog:
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ 0.10.12.3 pre-release
+
+2009-10-14 10:41:48 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From a3e3ce4 to 85d1530
+
+2009-10-13 13:05:32 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Fix reference leak on all input buffers in 'dvd mode'
+ https://bugzilla.gnome.org/show_bug.cgi?id=598272
+
+2009-10-12 13:54:27 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ChangeLog:
+ * configure.ac:
+ * po/LINGUAS:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/ms.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ 0.10.12.2 pre-release
+
+2009-10-12 11:31:22 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args.new:
+ * docs/plugins/gst-plugins-ugly-plugins.signals.new:
+ docs: Remove files accidentally added
+ Remove the gst-plugins-ugly-plugins.args.new and
+ gst-plugins-ugly-plugins.signals.new files, that appear
+ to have been accidentally added in commit
+ f5d046a0b034f9bd7274291f7131ee5db1a30052
+
+2009-09-16 00:00:28 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Add some debugging for new segment events
+
+2009-10-11 16:18:37 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: fix warning in macosx snow leopard
+
+2009-10-11 16:16:09 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/mpegstream/gstmpegparse.c:
+ mpegstream: fix warning in macosx snow leopard
+
+2009-10-11 16:14:08 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: fix warning in macosx snow leopard
+
+2009-10-11 16:09:11 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: fix warning on macosx snow leopard
+
+2009-10-11 16:06:25 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix warning in macosx snow leopard
+
+2009-10-08 19:58:25 +0300 René Stadler <rene.stadler@nokia.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: don't fail SEEKING query when upstream query fails for TIME format
+
+2009-10-08 11:01:03 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 19fa4f3 to a3e3ce4
+
+2009-10-07 14:22:09 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/realmedia/rdtmanager.c:
+ build: fprintf, sprintf, sscanf need stdio.h
+
+2009-10-02 18:27:11 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/mad/gstmad.c:
+ mad: add missing include to fix the build
+
+2009-10-05 12:13:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcm: whitespace fixes
+
+2009-10-04 22:51:41 +0100 Christian F.K. Schaller <christian.schaller@collabora.co.uk>
+
+ * gst-plugins-ugly.spec.in:
+ update spec file
+
+2009-10-02 15:22:38 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * configure.ac:
+ x264enc: adjust configure checking to changed upstream
+
+2009-10-01 18:58:42 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ x264enc: conditionally adjust to new upstream API
+ Fixes #596517.
+
+2009-09-24 17:49:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mpegaudioparse: prevent infinite (re)syncing
+ Conflicts:
+ gst/mpegaudioparse/gstmpegaudioparse.c
+
+2009-09-22 12:13:38 -0700 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: Refactor checking for sync. Make resyncing more reliable.
+ Previously, we could get false sync relatively easily - it sometimes happened
+ on real files. This cleans the code up a fair bit, and makes it require more
+ confirmation that we've found valid sync before continuing.
+
+2009-09-17 16:12:29 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: ensure 2 valid headers in a row when resyncing
+
+2009-09-11 10:05:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegstream/gstdvddemux.c:
+ dvddemux: remove bogus ifndef
+
+2009-09-05 10:23:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 94f95e3 to 19fa4f3
+
+2009-09-01 12:22:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Fix GstIndex handling, incl. refcounting and NULL indizes
+
+2009-08-31 13:42:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/dvdsub/gstdvdsubparse.c:
+ dvdsubparse: GstAdapter is not a GstObject and should be freed with g_object_unref
+
+2009-08-24 13:59:05 -0700 David Schleef <ds@schleef.org>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ Remove Ronald Bultje from Authors field
+ Replaced with "GStreamer maintainers
+ <gstreamer-devel@lists.sourceforge.net>" or just removed,
+ depending on the number of other authors.
+
+2009-08-24 13:57:14 -0700 David Schleef <ds@schleef.org>
+
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/gstasfmux.c:
+ * gst/asfdemux/gstasfmux.h:
+ asfdemux: Remove old non-built asfmux code
+ Remove so people don't confuse it with the new asfmux code
+ in -bad.
+
+2009-08-23 13:35:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Only add the MM_ACCEL_DJBFFT flag if it's defined
+ It's not defined for older liba52 versions.
+
+2009-08-23 13:34:32 +0200 Mart Raudsepp <leio@gentoo.org>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Allow liba52 to use djbfft based IMDCT transform
+ 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.
+
+2009-08-17 17:31:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ amr: Use opencore-amr pkg-config files if possible
+ This makes it possible to build the plugins when the libraries
+ are installed at non-standard locations.
+ Fixes bug #591348.
+
+2009-08-14 12:07:40 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: use metadata (xing, vbri) provided bytesize for conversions
+ Metadata provided seek tables are consistent with metadata's view of
+ total size, which typically matches real size, but need not do so
+ (e.g. a truncated file). Fixes seeking and position reporting
+ in such truncated files (although duration based on metadata may then
+ still be incorrect).
+
+2009-08-10 22:22:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: bump core/base requirements to released versions
+ to avoid confusion.
+
+2009-08-04 10:44:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Remove all mentions to the id3tag plugin which was removed
+
+2009-08-01 08:43:21 +0200 Marvin Schmidt <marvin_schmidt@gmx.net>
+
+ * configure.ac:
+ mad: make check for mad independent of the check for id3tag
+ Fixes bug #590432.
+
+2009-07-31 00:25:43 -0300 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: set padding size to the correct value
+ asf packets in rtp packets should come with their padding fields
+ set to 0 and the depayload must update them to the correct
+ value before pushing downstream
+
+2009-07-27 20:12:20 +0200 Iago Toral <itoral@igalia.com>
+
+ * configure.ac:
+ * 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.prerequisites:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-amrwbdec.xml:
+ * ext/Makefile.am:
+ * ext/amrnb/GstAmrnbEnc.prs:
+ * ext/amrnb/Makefile.am:
+ * ext/amrnb/README:
+ * ext/amrnb/amrnb.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrnb/amrnbparse.c:
+ * ext/amrnb/amrnbparse.h:
+ * ext/amrwbdec/Makefile.am:
+ * ext/amrwbdec/README:
+ * ext/amrwbdec/amrwb.c:
+ * ext/amrwbdec/amrwbdec.c:
+ * ext/amrwbdec/amrwbdec.h:
+ amr: Add AMR-WB decoder and AMR-NB encoder and decoder
+ These are based on the OpenCore codecs.
+ Fixes bug #584890.
+
+2009-07-24 00:43:07 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From fedaaee to 94f95e3
+
+2009-07-22 11:10:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * REQUIREMENTS:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins.args.new:
+ * docs/plugins/gst-plugins-ugly-plugins.signals.new:
+ * docs/plugins/inspect/plugin-dvdnav.xml:
+ * ext/Makefile.am:
+ * ext/dvdnav/.gitignore:
+ * ext/dvdnav/Makefile.am:
+ * ext/dvdnav/README:
+ * ext/dvdnav/dvdnavsrc.c:
+ * ext/dvdnav/dvdnavsrc.h:
+ * ext/dvdnav/gst-dvd:
+ * ext/dvdread/dvdreadsrc.c:
+ * gst-plugins-ugly.spec.in:
+ * po/POTFILES.in:
+ dvdnav: remove dvdnav plugin
+ 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.
+
+2009-06-20 14:31:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ mpeg2dec: Fix unused variables compiler warnings in unit test
+
+2009-06-26 15:21:12 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * autogen.sh:
+ autogen.sh: Use printf instead of 'echo -n'. Check for automake-1.1[01]
+ Check for more automake command variants. Use printf instead of 'echo -n'
+ for portability
+
+2009-07-13 12:24:14 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 5845b63 to fedaaee
+
+2009-02-10 13:25:54 +0000 Tim-Philipp Muller <tpm@mini.centricular.net>
+
+ * .gitignore:
+ Make git ignore more files
+
+2009-06-29 11:10:42 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Refactor multiple packet pull.
+ This also fixes a bug by which the first buffer (in a multi-packet mode)
+ passed to asf_demux_parse_packet() would have a GST_BUFFER_SIZE of the
+ full incoming buffer and not just of the single asf packet.
+ Fixes corrupted frames introduced by latest commit.
+
+2009-06-29 10:58:49 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: use the right accurate field
+ Remove accurate variable and its faulty use because the real variable is an
+ instance variable.
+
+2009-06-28 17:48:11 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Sprinkle branch prediction macros accross the code
+
+2009-06-28 17:43:12 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Delay newsegment handling until we have a keyframe.
+ We now have a chance for packets to be collected before we send out the
+ newsegment. If we're not in accurate seeking (keyunit) it will set
+ the segment start/time to the keyframe's timestamp.
+
+2009-06-28 17:39:23 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Remove useless check. We already have checked for it above.
+
+2009-06-28 17:31:11 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: No longer queue GOPs now that seeking is fixed.
+ We now *always* seek to the keyframe just before our requested position.
+ When we encounter the first keyframe and we were not accurate (therefore doing
+ keyframe seeking), we update the segment start position to the keyframe timestamp.
+
+2009-06-28 17:42:44 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Store the accurate seeking flag
+
+2009-06-28 17:04:00 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Use the average frame duration for buffers without a duration.
+ This will still cause some timestamp jitter, but giving a hint as to the duration
+ rather than nothing seems to be a better idea.
+ Also, this allows some scenarios (like remuxing with asfmux) to estimate the total
+ duration using the accumulated packet duration (which will be correct).
+
+2009-06-28 17:02:17 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Use index entry packet count to optimize seeking.
+ The simple index entries also contain the number of packets one needs
+ to retrieve at a given position to get a full keyframe. We therefore
+ use that information to retrieve all those packets in one buffer when
+ working in pull-mode.
+
+2009-06-26 20:52:29 -0300 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Do not try to free const pointer
+ In gst_asf_demux_chain_headers, when 'goto wrong_type' was called
+ asfdemux tried to free a const pointer that had been cast to a
+ normal pointer variable.
+
+2009-06-26 20:44:09 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Use presentation timestamp when searching in the index.
+ We need to take the preroll into account... else we end up too early.
+
+2009-06-26 13:43:16 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From f3bb51b to 5845b63
+
+2009-06-26 13:35:38 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Convert index entry from presentation time to timestamps.
+ We weren't taking the preroll into account previously, meaning that we
+ were always seeking preroll nanoseconds too early... resulting in a lot
+ of dropped packets (which are before the start time).
+ This brings quit a bit closer to as-fast-as-possible seeking in asf files.
+
+2009-06-26 10:58:56 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Fix byte array metadata handling.
+ We basically discard byte array metadata. Should be trivial to adapt
+ to storing the pointers if we need it later on.
+
+2009-06-26 10:41:28 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Handle PAR/interlaced information stored in packet payload.
+ This is the 'other' way to store non 1/1 PAR in asf streams (by storing it
+ in the ASF Packet payload extensions).
+
+2009-06-26 10:40:39 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: Store/Handle global metadata (not specific to one stream).
+ This allows us to store (and handle) PAR information which might be stored there.
+
+2009-06-25 18:24:56 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: fix Xing inverse seek table building
+
+2009-06-24 15:15:37 +0100 Jan Schmidt <jan.schmidt@sun.com>
+
+ * common:
+ Automatic update of common submodule
+ From f3bb51b to f810030
+
+2009-06-23 16:45:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: don't try to free a NULL taglist
+
+2009-06-23 02:14:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: post tags only after we've created our source pads
+ Post global tags only after we've added our source pads, so that
+ tag events get sent downstream in addition to tag messages posted
+ on the bus. This makes sure tags can be picked up automatically
+ when transcoding, but also by tagreadbin/playbin2. Fixes #519721.
+ While we're at it, also add a container-format tag.
+
+2009-06-23 01:37:01 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: use new bytereader functions for image tag parsing
+
+2009-06-22 18:53:56 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: remove some more unused variables
+
+2009-06-19 17:25:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: plug buffer leaking
+
+2009-06-22 17:36:21 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: guard against dropped buffers
+ If a buffer was dropped, we might request data from the adapter that is not
+ there and then we get a NULL buffer.
+
+2009-06-22 17:16:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: set DISCONT on streams
+ When we receive a DISCONT as input, don't clear our complete state but simply
+ mark a discont that will be put on the next buffer. The code will be able to
+ handle and throw away incomplete data.
+ Add some more debug info.
+ Remove an unused variable.
+
+2009-06-22 17:15:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: set DELTA_UNIT flag correctly
+ Only set the DELTA_UNIT flag when we are not dealing with a keyframe.
+ Add some more debug info.
+
+2009-06-22 13:37:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix latency calculations
+ We need to check for -1 as an invalid timestamp, not 1.
+
+2009-06-16 09:45:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: don't put every single frame into the index
+ Let's not put every single mp3 frame in our index, a few frames per
+ second should be more than enough. For now use an index interval
+ of 100ms-500ms depending on the upstream size, to keep the index at
+ a reasonable size. Factor out the code that adds the index entry
+ into a separate function for better code readability.
+
+2009-06-16 01:40:42 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: assume seekability only if we know the upstream size
+ While technically upstream may be seekable even if it doesn't know
+ the exact size, I can't think of a use case where this distincation
+ is relevant in practice, so for now just assume we're not seekable
+ if upstream doesn't provide us with a size. Makes sure we don't
+ build a seek index when streaming internet radio with sources that
+ pretend to be seekable until you try to actually seek.
+
+2009-06-19 17:46:12 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * gst-plugins-ugly.spec.in:
+ Fix x264 requirement in SPEC file
+
+2009-06-19 15:01:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * gst/realmedia/rdtmanager.c:
+ x264enc, rdtmanager: fix compilation with debugging disabled
+
+2009-06-11 13:48:22 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ * docs/plugins/Makefile.am:
+ docs: Bump common. Fix comment in the docs Makefile.am
+
+2009-06-18 20:26:04 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * win32/common/config.h:
+ Back to development -> 0.10.12.1
+
+2009-06-18 08:54:17 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst-plugins-ugly.doap:
+ Add 0.10.12 release to the doap file
+
+=== release 0.10.12 ===
+
+2009-06-18 08:34:54 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * win32/common/config.h:
+ Release 0.10.12
+
+2009-06-18 08:34:46 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/bg.po:
+ * po/id.po:
+ * po/it.po:
+ * po/nl.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2009-06-18 08:04:40 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2009-06-05 22:10:02 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ 0.10.11.2 pre-release
+
+2009-06-05 22:07:31 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * win32/common/config.h.in:
+ win32: Remove #undef inline from the win32 config.h
+
+2009-06-05 20:53:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * ext/mad/Makefile.am:
+ * ext/mad/gstid3tag.c:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ mad, id3mux: (re)move broken, unmaintained and unloved id3mux element
+ It will be reborn with a shiny new code base under its hood in -bad.
+ See #581756 and #565764.
+
+2009-06-05 19:48:28 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * tests/check/pipelines/.gitignore:
+ gitignore: Ignore some built files in the test area
+
+2009-06-05 19:46:17 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ docs: Update plugin inspect files
+
+2009-06-05 19:25:54 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-x264.xml:
+ * ext/Makefile.am:
+ * gst-plugins-ugly.spec.in:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ Moved 'x264enc' from -bad to -ugly
+
+2009-05-25 11:18:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ [MOVED FROM BAD 28/28] x264enc: add multipass-cache-file property
+ Fixes #583627
+
+2009-05-09 23:47:39 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * ext/x264/GstX264Enc.prs:
+ [MOVED FROM BAD 27/28] Remove wrong stuff from preset file
+
+2009-05-09 12:42:25 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * ext/x264/GstX264Enc.prs:
+ [MOVED FROM BAD 26/28] Add a more representative example preset file for x264
+
+2009-05-07 17:53:42 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ [MOVED FROM BAD 25/28] Add ranks to various muxers and encoders in -bad
+
+2009-04-30 00:06:36 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/x264/GstX264Enc.prs:
+ * ext/x264/Makefile.am:
+ * ext/x264/gstx264enc.c:
+ [MOVED FROM BAD 24/28] x264enc: add preset support
+ Add preset iface and a (dummy) preset file as a starting point.
+
+2009-04-29 16:57:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/x264/gstx264enc.c:
+ [MOVED FROM BAD 23/28] x264enc: add some documentation on profile
+
+2009-04-09 23:53:39 +0200 Janin Kolenc <janin.kolenc at marand.si>
+
+ * ext/x264/gstx264enc.c:
+ * ext/x264/gstx264enc.h:
+ [MOVED FROM BAD 22/28] x264enc: add force keyframe event handling
+ Use the GstForceKeyUnit event to force a keyframe.
+ Fixes #578112.
+
+2009-01-05 10:28:58 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 21/28] ext/x264/gstx264enc.c: Use hyphen in property name, perform safety buffer size check prior to mem access, and some mo...
+ 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.
+
+2009-01-02 01:44:11 +0000 Alessandro Decina <alessandro.d@gmail.com>
+
+ [MOVED FROM BAD 20/28] ext/apexsink/Makefile.am: Link against -lgcrpyto for RSA_new and RSA_free.
+ 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.
+
+2008-11-14 19:52:24 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 19/28] ext/x264/gstx264enc.c: Construct source caps in more conventional (and correct) manner.
+ Original commit message from CVS:
+ * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
+ Construct source caps in more conventional (and correct) manner.
+
+2008-11-04 12:42:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ [MOVED FROM BAD 18/28] Don't install static libs for plugins. Fixes #550851 for -bad.
+ Original commit message from CVS:
+ * ext/alsaspdif/Makefile.am:
+ * ext/amrwb/Makefile.am:
+ * ext/apexsink/Makefile.am:
+ * ext/arts/Makefile.am:
+ * ext/artsd/Makefile.am:
+ * ext/audiofile/Makefile.am:
+ * ext/audioresample/Makefile.am:
+ * ext/bz2/Makefile.am:
+ * ext/cdaudio/Makefile.am:
+ * ext/celt/Makefile.am:
+ * ext/dc1394/Makefile.am:
+ * ext/dirac/Makefile.am:
+ * ext/directfb/Makefile.am:
+ * ext/divx/Makefile.am:
+ * ext/dts/Makefile.am:
+ * ext/faac/Makefile.am:
+ * ext/faad/Makefile.am:
+ * ext/gsm/Makefile.am:
+ * ext/hermes/Makefile.am:
+ * ext/ivorbis/Makefile.am:
+ * ext/jack/Makefile.am:
+ * ext/jp2k/Makefile.am:
+ * ext/ladspa/Makefile.am:
+ * ext/lcs/Makefile.am:
+ * ext/libfame/Makefile.am:
+ * ext/libmms/Makefile.am:
+ * ext/metadata/Makefile.am:
+ * ext/mpeg2enc/Makefile.am:
+ * ext/mplex/Makefile.am:
+ * ext/musepack/Makefile.am:
+ * ext/musicbrainz/Makefile.am:
+ * ext/mythtv/Makefile.am:
+ * ext/nas/Makefile.am:
+ * ext/neon/Makefile.am:
+ * ext/ofa/Makefile.am:
+ * ext/polyp/Makefile.am:
+ * ext/resindvd/Makefile.am:
+ * ext/sdl/Makefile.am:
+ * ext/shout/Makefile.am:
+ * ext/snapshot/Makefile.am:
+ * ext/sndfile/Makefile.am:
+ * ext/soundtouch/Makefile.am:
+ * ext/spc/Makefile.am:
+ * ext/swfdec/Makefile.am:
+ * ext/tarkin/Makefile.am:
+ * ext/theora/Makefile.am:
+ * ext/timidity/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/x264/Makefile.am:
+ * ext/xine/Makefile.am:
+ * ext/xvid/Makefile.am:
+ * gst-libs/gst/app/Makefile.am:
+ * gst-libs/gst/dshow/Makefile.am:
+ * gst/aiffparse/Makefile.am:
+ * gst/app/Makefile.am:
+ * gst/audiobuffer/Makefile.am:
+ * gst/bayer/Makefile.am:
+ * gst/cdxaparse/Makefile.am:
+ * gst/chart/Makefile.am:
+ * gst/colorspace/Makefile.am:
+ * gst/dccp/Makefile.am:
+ * gst/deinterlace/Makefile.am:
+ * gst/deinterlace2/Makefile.am:
+ * gst/dvdspu/Makefile.am:
+ * gst/festival/Makefile.am:
+ * gst/filter/Makefile.am:
+ * gst/flacparse/Makefile.am:
+ * gst/flv/Makefile.am:
+ * gst/games/Makefile.am:
+ * gst/h264parse/Makefile.am:
+ * gst/librfb/Makefile.am:
+ * gst/mixmatrix/Makefile.am:
+ * gst/modplug/Makefile.am:
+ * gst/mpeg1sys/Makefile.am:
+ * gst/mpeg4videoparse/Makefile.am:
+ * gst/mpegdemux/Makefile.am:
+ * gst/mpegtsmux/Makefile.am:
+ * gst/mpegvideoparse/Makefile.am:
+ * gst/mve/Makefile.am:
+ * gst/nsf/Makefile.am:
+ * gst/nuvdemux/Makefile.am:
+ * gst/overlay/Makefile.am:
+ * gst/passthrough/Makefile.am:
+ * gst/pcapparse/Makefile.am:
+ * gst/playondemand/Makefile.am:
+ * gst/rawparse/Makefile.am:
+ * gst/real/Makefile.am:
+ * gst/rtjpeg/Makefile.am:
+ * gst/rtpmanager/Makefile.am:
+ * gst/scaletempo/Makefile.am:
+ * gst/sdp/Makefile.am:
+ * gst/selector/Makefile.am:
+ * gst/smooth/Makefile.am:
+ * gst/smoothwave/Makefile.am:
+ * gst/speed/Makefile.am:
+ * gst/speexresample/Makefile.am:
+ * gst/stereo/Makefile.am:
+ * gst/subenc/Makefile.am:
+ * gst/tta/Makefile.am:
+ * gst/vbidec/Makefile.am:
+ * gst/videodrop/Makefile.am:
+ * gst/videosignal/Makefile.am:
+ * gst/virtualdub/Makefile.am:
+ * gst/vmnc/Makefile.am:
+ * gst/y4m/Makefile.am:
+ * sys/acmenc/Makefile.am:
+ * sys/cdrom/Makefile.am:
+ * sys/dshowdecwrapper/Makefile.am:
+ * sys/dshowsrcwrapper/Makefile.am:
+ * sys/dvb/Makefile.am:
+ * sys/dxr3/Makefile.am:
+ * sys/fbdev/Makefile.am:
+ * sys/oss4/Makefile.am:
+ * sys/qcam/Makefile.am:
+ * sys/qtwrapper/Makefile.am:
+ * sys/vcd/Makefile.am:
+ * sys/wininet/Makefile.am:
+ * win32/common/config.h:
+ Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2008-10-27 17:01:22 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 17/28] ext/x264/gstx264enc.c: Adapt to slightly modified x264 API. Fixes #555238.
+ Original commit message from CVS:
+ * ext/x264/gstx264enc.c: (gst_x264_enc_init_encoder):
+ Adapt to slightly modified x264 API. Fixes #555238.
+
+2008-08-12 16:13:15 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 16/28] ext/x264/gstx264enc.*: Do not deal with duplicated input (timestamps). If needed, a generic element can do so.
+ 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.
+
+2008-08-12 15:41:48 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 15/28] docs/plugins/gst-plugins-bad-plugins.args: Integrate new properties into documentation.
+ 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)
+
+2008-08-12 13:08:39 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 14/28] Add documentation and unit test for x264enc.
+ 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.
+
+2008-08-11 17:24:58 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 13/28] ext/x264/gstx264enc.c: Allocate some buffers in more adaptive and economical fashion.
+ 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.
+
+2008-08-11 15:16:14 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 12/28] configure.ac: Check for sufficiently up-to-date x264 API.
+ 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.
+
+2008-08-08 15:07:12 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 11/28] ext/x264/gstx264enc.c: Coding style and layout; re-order some functions in more typical and natural flow.
+ 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.
+
+2008-08-08 14:19:16 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 10/28] ext/x264/: Use GQueue in stead of custom queue code.
+ Original commit message from CVS:
+ * ext/x264/Makefile.am:
+ * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps),
+ (gst_x264_enc_sink_set_caps), (gst_x264_enc_init),
+ (gst_x264_enc_reset), (gst_x264_enc_finalize),
+ (gst_x264_enc_flush_frames), (gst_x264_enc_sink_event),
+ (gst_x264_enc_chain), (gst_x264_enc_encode_frame),
+ (gst_x264_enc_change_state), (gst_x264_enc_set_property):
+ * ext/x264/gstx264enc.h:
+ Use GQueue in stead of custom queue code.
+ Factorize flushing out encoder delayed frames.
+ Factorize initialization and state change reset.
+
+2008-08-08 10:56:02 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 09/28] Use configure-generated _stdint.h.
+ Original commit message from CVS:
+ * ext/x264/gstx264enc.h:
+ * sys/fbdev/gstfbdevsink.c:
+ Use configure-generated _stdint.h.
+
+2008-08-08 10:13:36 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ [MOVED FROM BAD 08/28] ext/x264/: Use video format library and GST_WRITE_*_BE macros where applicable.
+ 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.
+
+2008-06-04 11:33:21 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ [MOVED FROM BAD 07/28] ext/x264/gstx264enc.c: Try harder not to crash when we get an EOS event but haven't set up the encoder yet (as may ha...
+ 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.
+
+2007-12-11 16:26:07 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ [MOVED FROM BAD 06/28] ext/x264/gstx264enc.c: Fix caps memleak.
+ Original commit message from CVS:
+ * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
+ Fix caps memleak.
+
+2007-10-26 17:18:41 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ [MOVED FROM BAD 05/28] ext/x264/gstx264enc.c: Fix build against the libx264 version that ships with debian stable.
+ Original commit message from CVS:
+ * ext/x264/gstx264enc.c:
+ Fix build against the libx264 version that ships with debian stable.
+
+2007-09-24 10:53:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ [MOVED FROM BAD 04/28] Massive leak fixing, plus code cleanups.
+ Original commit message from CVS:
+ * ext/audioresample/gstaudioresample.c:
+ * ext/x264/gstx264enc.c:
+ * gst/dvdspu/gstdvdspu.c:
+ * gst/dvdspu/gstdvdspu.h:
+ * gst/festival/gstfestival.c:
+ * gst/h264parse/gsth264parse.c:
+ * gst/mpegtsparse/mpegtspacketizer.c:
+ * gst/mpegtsparse/mpegtsparse.c:
+ * gst/multifile/gstmultifilesink.c:
+ * gst/multifile/gstmultifilesrc.c:
+ * gst/nuvdemux/gstnuvdemux.c:
+ * sys/dshowsrcwrapper/gstdshowaudiosrc.c:
+ * sys/dshowsrcwrapper/gstdshowvideosrc.c:
+ * sys/vcd/vcdsrc.c:
+ Massive leak fixing, plus code cleanups.
+
+2007-07-18 07:35:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ [MOVED FROM BAD 03/28] Add stdlib include (free, atoi, exit).
+ Original commit message from CVS:
+ * examples/app/appsrc_ex.c:
+ * examples/switch/switcher.c:
+ * ext/neon/gstneonhttpsrc.c:
+ * ext/timidity/gstwildmidi.c:
+ * ext/x264/gstx264enc.c:
+ * gst/mve/mveaudioenc.c: (mve_compress_audio):
+ * gst/rtpmanager/gstrtpclient.c:
+ * gst/rtpmanager/gstrtpjitterbuffer.c:
+ * gst/spectrum/demo-audiotest.c:
+ * gst/spectrum/demo-osssrc.c:
+ * sys/dvb/gstdvbsrc.c:
+ Add stdlib include (free, atoi, exit).
+
+2007-05-15 21:23:53 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ [MOVED FROM BAD 02/28] ext/x264/gstx264enc.c (gst_x264_enc_init_encoder): This needs a version check.
+ 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.
+
+2007-03-25 13:06:26 +0000 Michal Benes <michal.benes@itonis.tv>
+
+ [MOVED FROM BAD 01/28] Add libx264-based h264 encoder plugin (#421110). Probably doesn't handle 'odd' widths and heights correctly yet.
+ Original commit message from CVS:
+ Patch by: Michal Benes <michal.benes at itonis tv>
+ Patch by: Josef Zlomek <josef.zlomek at itonis tv>
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/x264/Makefile.am:
+ * ext/x264/gstx264enc.c: (gst_x264_enc_me_get_type),
+ (gst_x264_enc_analyse_get_type),
+ (gst_x264_enc_timestamp_queue_init),
+ (gst_x264_enc_timestamp_queue_free),
+ (gst_x264_enc_timestamp_queue_put),
+ (gst_x264_enc_timestamp_queue_get), (gst_x264_enc_header_buf),
+ (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
+ (gst_x264_enc_base_init), (gst_x264_enc_class_init),
+ (gst_x264_enc_init), (gst_x264_enc_init_encoder),
+ (gst_x264_enc_close_encoder), (gst_x264_enc_dispose),
+ (gst_x264_enc_sink_event), (gst_x264_enc_chain),
+ (gst_x264_enc_encode_frame), (gst_x264_enc_change_state),
+ (gst_x264_enc_set_property), (gst_x264_enc_get_property),
+ (plugin_init):
+ * ext/x264/gstx264enc.h:
+ Add libx264-based h264 encoder plugin (#421110). Probably doesn't
+ handle 'odd' widths and heights correctly yet.
+
+2009-06-05 01:51:20 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: nicer metadata extraction of genre tags in some cases
+ Handle pseudo-strings like "(5)" and map them to the ID3v1 genre
+ that they presumably stand for.
+
+2009-06-05 01:32:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: parse WM/Picture tags to extract cover art
+ Fixes #583112.
+
+2009-05-31 20:20:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * REQUIREMENTS:
+ docs: fix http links for amr libs in REQUIREMENTS
+
+2009-05-29 20:07:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fix bogus flow return handling in eos handler
+ Don't overwrite the origin flow return by whatever flow we get
+ when trying to push the remaining internally queued payloads.
+ We want to do our eos logic, ie. send an EOS event or segment-done
+ message in any case. Makes things EOS properly when an EOS event
+ is forced upon the pipeline so that the source returns
+ FLOW_UNEXPECTED to a pulling asfdemux. Should fix #582056.
+
+2009-05-29 19:52:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * win32/common/config.h:
+ win32: update config.h
+
+2009-05-22 19:27:35 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: bump core/base requirements to released versions
+
+2009-05-22 19:26:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * autogen.sh:
+ * configure.ac:
+ autogen: move the -Wno-portability for automake into configure.ac
+
+2009-05-27 00:16:30 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: Add multichannel channel maps, and send some tags
+ Add a multichannel map to the output caps, and send at least a CODEC and
+ BITRATE tag. I'm not too sure about the 5.1 and 7.1 channel maps. I have
+ no samples and can't find info about the channel ordering, but this is
+ better than nothing.
+
+2009-05-26 17:19:54 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 888e0a2 to c572721
+
+2009-05-22 10:20:46 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 6ab11d1 to 888e0a2
+
+2009-05-21 15:18:06 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ dvdsubdec: Remove some dead code
+ Remove some redundant memset - gobject memory is already initalised to 0.
+ Remove a commented out line leftover from the previous commit
+
+2009-05-21 14:20:22 +0100 Kapil Agrawal <kapil@mediamagictechnologies.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubdec.h:
+ dvdsubdec: Support ARGB output
+ Negotiate to and render into ARGB buffers directly if the peer supports it.
+ Fixes: #580869
+
+2009-05-19 00:51:49 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/a52dec/gsta52dec.c:
+ a52dec: Reconcile code with dtsdec
+ 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.
+
+2009-05-14 12:32:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Improve debugging a bit
+
+2009-05-13 19:32:16 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Revert ranking switch with ffdec_mpeg2video. Fixes #574461
+
+2009-05-13 01:55:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * po/Makevars:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: avoid conflicts of local *.po files with files in git
+ Make it so that filenames and line numbers are only stored in the *.pot file
+ (which is not in git), but not in the individual *.po files. This information
+ is hardly useful for translators in our case, and it should avoid the constant
+ conflicts of local *.po files with the ones in git which are caused by the
+ source files changing and the line numbers being updated. This commit might
+ cause one last merge conflict for you, which you can work around with
+ "git checkout po/*.po" before merging or pulling. After that there should
+ (hopefully) not be any more local modifications of these files (unless
+ someone committed additions or changes to translated strings and the
+ *.po files haven't been updated yet, that is).
+
+2009-05-12 19:22:07 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: add Since tag to gtk-doc chunk
+
+2009-05-13 01:46:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/mpeg2dec.c:
+ checks: fix mpeg2dec unit test again after interlace addition to caps
+
+2009-05-12 20:34:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: work around old mpeg2dec versions
+ 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
+
+2009-05-12 20:24:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mpeg2dec/Makefile.am:
+ mpeg2dec: link to gstvideo
+ Fix compilation by adding the right include directories and linking to the video
+ library.
+
+2009-05-12 11:57:04 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfdemux: Downgrade simple statements from WARNING to DEBUG
+
+2009-05-11 12:37:46 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/asfpacket.h:
+ asf: Detect more payload extensions.
+ These should help fix interlaced/PAR issues with more files.
+
+2009-05-12 11:44:13 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ mpeg2dec: Implement interlaced support.
+ Expand the debugging statements to show more picture information.
+
+2009-05-12 11:19:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Lower rank to MARGINAL to make ffdec_mpeg2video the default
+ ffdec_mpeg2video is much faster, fixes bug #574461.
+
+2009-05-10 16:53:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Don't write a Xing header
+
+2009-05-10 11:17:25 +0200 Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+ * autogen.sh:
+ Run libtoolize before aclocal
+ This unbreaks the build in some cases. Fixes bug #582021
+
+2009-05-09 15:28:18 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: use 64bit safe scaling functions.
+ Got this to fail when seeking in a 14GB file (the value in bytes is
+ bigger than 2**32).
+
+2009-05-09 10:57:34 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: remove some pointless g_return_if_fail()s
+
+2009-05-08 14:24:47 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * ext/twolame/gsttwolame.c:
+ Switch twolame to primary rank
+
+2009-05-07 17:59:52 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/twolame/gsttwolame.c:
+ Add ranks to mp3 encoders
+
+2009-05-07 17:57:17 +0100 Christian Schaller <christian.schaller@collabora.co.uk>
+
+ * gst-plugins-ugly.spec.in:
+ Add twolame plugin to spec file
+
+2009-05-02 18:11:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: use upstream segment and timestamps for some interpolation
+ This should particularly help in case of upstream live src, e.g. rtspsrc,
+ and especially so if it has to perform fallback to TCP.
+
+2009-05-07 11:09:59 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: Add support for fragmented packet (L == 0).
+ This happens with rtp-over-udp.
+
+2009-05-07 10:10:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Fixup the bitrate only for CBR
+ Additionally clarify some property descriptions.
+
+2009-05-06 21:47:17 +0200 Alessandro Decina <alessandro.d@gmail.com>
+
+ * ext/lame/gstlamemp3enc.c:
+ lame: fix format string in debug statement
+
+2009-05-06 15:37:44 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: Don't reject valid Xing tables of contents
+ Some Xing headers apparently start the TOC at byte 1 instead of 0. Don't
+ reject them because of it, just subtract the initial offset when reading
+ the table.
+
+2009-05-06 15:27:01 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: Allow more bits to change in headers during resynch
+ Be more lenient about what we accept as changing bits in a header - basically,
+ only require that the mp3 sync marker is present, for the mpeg version,
+ layer and samplerate.
+ Fixes: #581464
+
+2009-05-06 13:17:35 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mad/gstmad.c:
+ mad: Add duration of incoming/outgoing buffers in debug statements
+
+2009-05-06 13:15:30 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: Remove useless checks for valid buffer duration.
+ The buffer duration is set to a valid value at the very top of
+ emit_frame(), we therefore don't need to check it later on.
+
+2009-05-06 13:13:35 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: Fix stop condition for outputting buffers.
+ Some mp3 streams have an offset in timestamps, requiring us to push the
+ frame *AFTER* segment.stop in order for the decoder to be able to push
+ all data up to the segment.stop position.
+
+2009-05-02 16:51:11 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: 0-base timestamps consistently (whether or not streaming)
+ This also makes timestamps (more) consistent before and after a possible
+ seek, and moreover makes for reasonable position reporting in live stream
+ (whose payload timestamps should not be taken for granted).
+
+2009-05-02 13:45:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: report initial latency due to internal preroll queue
+
+2009-05-02 13:44:48 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: enhance debug statement and refactor some initialization
+
+2009-05-02 13:44:11 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: handle FIXME; activate pads after internal preroll also when streaming
+
+2009-05-02 11:12:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: handle FIXME; normalize preroll
+
+2009-05-02 16:08:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux: fixes for streaming mode
+ * Improve newsegment handling, e.g. upstream might live in TIME.
+ * Only send newsegment if we have needed info.
+ * Avoid reading past end of data section.
+
+2009-05-01 18:08:15 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: fixes/enhancements for streaming mode
+ * Do not rock the boat by reacting to FLUSH_START.
+ * Try to handle TIME seeking by seeking upstream in BYTES.
+ * Handle SEEKING query.
+
+2009-05-05 16:38:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/lame/gstlamemp3enc.c:
+ lame: fix compilation with LAME versions < 3.98
+ 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.
+
+2009-05-04 20:39:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * win32/common/config.h:
+ win32: update config.h to git
+ Until someone ports the new win32 config.h logic from the
+ other modules to -ugly.
+
+2009-05-04 12:53:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ Update docs
+
+2009-05-04 12:51:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lamemp3enc: Add a note to the encoding-engine-quality property
+ that says, that this does not affect the bitrate at all.
+
+2009-05-04 12:48:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame: Implement preset interface
+
+2009-05-04 12:47:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/twolame/gsttwolame.c:
+ twolame: Implement preset interface
+
+2009-04-30 10:21:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ lamemp3enc: Remove fast-vbr property and rename vbr-quality to quality
+
+2009-04-30 10:16:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ lame/lamemp3enc: Fix memory leak on FLUSH_STOP
+
+2009-04-30 10:14:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlame.c:
+ lame: Deprecate the lame element
+
+2009-04-30 10:13:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * 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-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ Update docs
+
+2009-04-30 10:10:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/gstlamemp3enc.c:
+ lame: Update example pipelines with the new properties
+
+2009-04-29 19:01:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlamemp3enc.c:
+ * ext/lame/gstlamemp3enc.h:
+ * ext/lame/plugin.c:
+ lame: Add lamemp3enc element with much simplified interface
+ This deprecates the lame element and fixes bug #494528.
+
+2009-04-23 09:04:41 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/asfpacket.c:
+ asfpacket: Fix pull-mode timestamping handling.
+ The problem that happens is the following:
+ * A packet with multiple payloads comes in
+ * Those payloads get handled one by one
+ * The first payload contains the first audio payload with timestamp A
+ * The second payload contains the first video (key)frame with timestamp V (where V < A)
+ With the previous code, the following would happen:
+ * the first payload gets processed, then passed to queue_for_stream
+ * queue_for_stream detects it's the first valid timestamp received and stores
+ first_ts = A
+ * the second payload gets processed, then pass to queue_for_stream
+ * queue_for_stream detects the timestamp is lower than first_ts... and
+ discards it... resulting in losing the first keyframe of the video stream
+ We've been having this issue for *ages*... it's just that nobody noticed it
+ that much with playbin. But with playbin2's aggresive multiqueue handling, this
+ will result in multiqueue not being able to preroll (because the video decoder will
+ be dropping a ton of buffers before (maybe) receiving the next keyframe).
+ Tested with over 200 asf files, and they all play the first frame correctly now,
+ even the most braindead ones.
+
+2009-04-21 14:12:06 -0700 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: don't build seek table if we can't seek.
+ Fixes #573720 - unbounded memory usage increase when listening to mp3
+ stream for a long time.
+
+2009-04-21 22:13:32 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From b3941ea to 6ab11d1
+
+2009-04-21 20:17:57 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstxingmux.c:
+ mpegaudioparse: Remove dead assignment and duplicate code
+
+2009-04-21 20:21:11 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Actually return the return value for the seek handling.
+
+2009-04-21 20:20:02 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ mpegstream: Remove dead assignments.
+ The duplicate assignment of update_time was weird... but it seems normal
+ that it's indeed the second statement which is the valid one.
+
+2009-04-21 20:17:19 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/amrnb/amrnbparse.c:
+ armnb: Remove unused variable, adapt debug message accordingly.
+
+2009-04-21 20:15:56 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegclock.c:
+ dvdsub/mpegstream: _class_init: Remove unused class variables
+
+2009-04-19 14:03:58 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: Initialize flow for a corner case.
+ This might be caused by entering the if() line 1214 and then not having
+ any activated_streams.. resulting in reaching line 1267 without having
+ any valid flow value.
+
+2009-04-19 14:03:38 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/twolame/gsttwolame.c:
+ twolame: Remove unneeded variable, value assigned was never read.
+
+2009-04-19 14:03:19 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ mpeg2dec: Remove dead assignment. Value overwritten later on.
+
+2009-04-19 14:02:44 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mad/gstmad.c:
+ mad: Remove dead assignment and variables given values which are never read.
+
+2009-04-19 14:02:03 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/lame/gstlame.c:
+ lame: Remove unneeded variable, it's assigned a value never read.
+
+2009-04-19 13:59:24 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Remove dead assignment, value is being overwritten before being read.
+
+2009-04-19 13:58:31 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/rmdemux.c:
+ rmdemux: Remove unused accurate flag.
+ I couldn't see any reason why this was there in the first place.
+
+2009-04-19 13:57:59 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/asmrules.c:
+ * gst/realmedia/rdtdepay.c:
+ realmedia: Remove dead assignments. The results are never read.
+
+2009-04-19 13:57:10 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/gstrdtbuffer.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtmanager.c:
+ * gst/realmedia/rmdemux.c:
+ realmedia: Remove useless variables, only being used once (or not).
+
+2009-04-19 13:55:24 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst/asfdemux/gstrtspwms.c:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/realmedia/rtspreal.c:
+ remove empty method implementations.
+
+2009-04-18 08:12:08 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/asfdemux/gstrtspwms.c:
+ rtspwms: fix condition to detect extension commands for WMS
+ Reply with OK to the extension commands for WMS.
+
+2009-04-15 11:09:56 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * gst/realmedia/rtspreal.c:
+ realmedia: add special Real header to DESCRIBE message only for Real servers
+ Add headers that are specific to real only if a real server had been
+ detected by the OPTIONS message.
+
+2009-04-14 19:16:46 +0200 David Hoyt <dhoyt at llnl.gov>
+
+ * gst/synaesthesia/synaescope.c:
+ synaesthesia: fix compilation on windows
+ Fix compilation under MSVC due to references to headers
+ that are not available with the MS SDKs.
+ Fixes #578524
+
+2009-04-14 10:54:37 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtspwms.c:
+ rtspwms: reply to extension commands
+ Reply with OK to the extension commands for WMS.
+
+2009-04-14 10:53:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ asfdepay: fix a comment
+
+2009-04-14 10:53:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/gstasfdemux.c:
+ asfdemux: add some more debugging
+
+2009-04-14 10:51:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: require git -base
+ We require 0.10.22.1 of -base for the new Match-If and ETag headers in RTSP.
+
+2009-04-09 20:21:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ realmedia: add special Real header to SETUP message only for Real servers
+ Fixes playback of Windows Media RTSP streams and other non-Real RTSP
+ streams where the server errors out because it can't handle the
+ Real-specific 'Required: com.real.retain-entity-for-setup' header
+ we've been adding unconditionally in the recent past.
+ For reference:
+ rtsp://66.111.34.191:601/broadcast/alnour.rm
+ rtsp://195.134.224.231/snowboard_100.wmv
+
+2009-04-08 11:44:53 -0700 Michael Smith <msmith@songbirdnest.com>
+
+ * configure.ac:
+ * gst/asfdemux/Makefile.am:
+ asfdemux: link to all required libraries including indirectly used ones.
+ On win32, we're required to link to all the libraries used - including
+ ones only indirectly used by other libs. So, add gstaudio, gsttag, and
+ (for windows only) winsock.
+
+2009-04-04 21:19:23 +0300 Felipe Contreras <felipe.contreras@gmail.com>
+
+ * common:
+ Automatic update of common submodule
+ From d0ea89e to b3941ea
+
+2009-04-04 14:54:41 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Automatic update of common submodule
+ From f8b3d91 to d0ea89e
+
+2009-03-26 20:23:14 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ dvdlpcmdec: Fix factory klass, It's a 'Decoder', not a 'Demuxer'.
+
+2009-03-25 16:39:06 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ * gst/realmedia/rtspreal.h:
+ realrtsp: add more headers
+ Parse the ETag from the describe method and pass the sessionid as the value for
+ the If-Match header is subsequent setup calls.
+ Fixes support for more RealMedia RTSP streams.
+
+2009-03-22 13:08:48 -0700 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ twolame: bump requirement to 0.3.10
+ 0.3.10 is the first version with the float32 encoder functions.
+ Fixes #576305.
+
+2009-03-22 20:15:24 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ back to development -> 0.10.11.1
+
+=== release 0.10.11 ===
+
+2009-03-21 01:05:22 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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-twolame.xml:
+ * gst-plugins-ugly.doap:
+ * po/cs.po:
+ * win32/common/config.h:
+ Release 0.10.11
+
+2009-03-21 00:28:29 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+
+2009-03-13 16:45:08 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * win32/common/config.h:
+ 0.10.10.3 pre-release
+
+2009-03-13 16:40:38 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/fi.po:
+ * po/id.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/sv.po:
+ po: Update translations from upstream
+
+2009-03-13 16:38:08 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/LINGUAS:
+ * po/tr.po:
+ po: Add Turkish translation
+
+2009-03-13 19:23:12 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ mp3parse: Fix glitches in the output when playing (for e.g.) AVI
+ Don't introduce glitches in the output by a) relaxing the threshold for
+ taking upstream timestamps in preference to our calculated timestamps and
+ b) only set the discont flag on outgoing buffers in response to an incoming
+ discont buffer.
+ Fixes: #575046
+
+2009-03-12 15:57:31 +0100 Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: fix deadlock with accurate seeks.
+ Release pending_accurate_seeks_lock before forwarding the seek event upstream.
+ Fixes #575068.
+
+2009-03-10 00:22:35 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/lt.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * win32/common/config.h:
+ 0.10.10.2 pre-release
+ Bump version number, update translations and win32 config.h
+
+2009-03-10 00:19:01 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * po/LINGUAS:
+ * po/ja.po:
+ po: Add Japanese translation
+
+2009-03-10 00:10:20 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * 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-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * docs/plugins/inspect/plugin-twolame.xml:
+ * ext/Makefile.am:
+ * po/POTFILES.in:
+ Moved twolame from Bad to Ugly
+
+2008-11-04 12:42:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ [MOVED FROM BAD] Don't install static libs for plugins. Fixes #550851 for -bad.
+ Original commit message from CVS:
+ * ext/alsaspdif/Makefile.am:
+ * ext/amrwb/Makefile.am:
+ * ext/apexsink/Makefile.am:
+ * ext/arts/Makefile.am:
+ * ext/artsd/Makefile.am:
+ * ext/audiofile/Makefile.am:
+ * ext/audioresample/Makefile.am:
+ * ext/bz2/Makefile.am:
+ * ext/cdaudio/Makefile.am:
+ * ext/celt/Makefile.am:
+ * ext/dc1394/Makefile.am:
+ * ext/dirac/Makefile.am:
+ * ext/directfb/Makefile.am:
+ * ext/divx/Makefile.am:
+ * ext/dts/Makefile.am:
+ * ext/faac/Makefile.am:
+ * ext/faad/Makefile.am:
+ * ext/gsm/Makefile.am:
+ * ext/hermes/Makefile.am:
+ * ext/ivorbis/Makefile.am:
+ * ext/jack/Makefile.am:
+ * ext/jp2k/Makefile.am:
+ * ext/ladspa/Makefile.am:
+ * ext/lcs/Makefile.am:
+ * ext/libfame/Makefile.am:
+ * ext/libmms/Makefile.am:
+ * ext/metadata/Makefile.am:
+ * ext/mpeg2enc/Makefile.am:
+ * ext/mplex/Makefile.am:
+ * ext/musepack/Makefile.am:
+ * ext/musicbrainz/Makefile.am:
+ * ext/mythtv/Makefile.am:
+ * ext/nas/Makefile.am:
+ * ext/neon/Makefile.am:
+ * ext/ofa/Makefile.am:
+ * ext/polyp/Makefile.am:
+ * ext/resindvd/Makefile.am:
+ * ext/sdl/Makefile.am:
+ * ext/shout/Makefile.am:
+ * ext/snapshot/Makefile.am:
+ * ext/sndfile/Makefile.am:
+ * ext/soundtouch/Makefile.am:
+ * ext/spc/Makefile.am:
+ * ext/swfdec/Makefile.am:
+ * ext/tarkin/Makefile.am:
+ * ext/theora/Makefile.am:
+ * ext/timidity/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/x264/Makefile.am:
+ * ext/xine/Makefile.am:
+ * ext/xvid/Makefile.am:
+ * gst-libs/gst/app/Makefile.am:
+ * gst-libs/gst/dshow/Makefile.am:
+ * gst/aiffparse/Makefile.am:
+ * gst/app/Makefile.am:
+ * gst/audiobuffer/Makefile.am:
+ * gst/bayer/Makefile.am:
+ * gst/cdxaparse/Makefile.am:
+ * gst/chart/Makefile.am:
+ * gst/colorspace/Makefile.am:
+ * gst/dccp/Makefile.am:
+ * gst/deinterlace/Makefile.am:
+ * gst/deinterlace2/Makefile.am:
+ * gst/dvdspu/Makefile.am:
+ * gst/festival/Makefile.am:
+ * gst/filter/Makefile.am:
+ * gst/flacparse/Makefile.am:
+ * gst/flv/Makefile.am:
+ * gst/games/Makefile.am:
+ * gst/h264parse/Makefile.am:
+ * gst/librfb/Makefile.am:
+ * gst/mixmatrix/Makefile.am:
+ * gst/modplug/Makefile.am:
+ * gst/mpeg1sys/Makefile.am:
+ * gst/mpeg4videoparse/Makefile.am:
+ * gst/mpegdemux/Makefile.am:
+ * gst/mpegtsmux/Makefile.am:
+ * gst/mpegvideoparse/Makefile.am:
+ * gst/mve/Makefile.am:
+ * gst/nsf/Makefile.am:
+ * gst/nuvdemux/Makefile.am:
+ * gst/overlay/Makefile.am:
+ * gst/passthrough/Makefile.am:
+ * gst/pcapparse/Makefile.am:
+ * gst/playondemand/Makefile.am:
+ * gst/rawparse/Makefile.am:
+ * gst/real/Makefile.am:
+ * gst/rtjpeg/Makefile.am:
+ * gst/rtpmanager/Makefile.am:
+ * gst/scaletempo/Makefile.am:
+ * gst/sdp/Makefile.am:
+ * gst/selector/Makefile.am:
+ * gst/smooth/Makefile.am:
+ * gst/smoothwave/Makefile.am:
+ * gst/speed/Makefile.am:
+ * gst/speexresample/Makefile.am:
+ * gst/stereo/Makefile.am:
+ * gst/subenc/Makefile.am:
+ * gst/tta/Makefile.am:
+ * gst/vbidec/Makefile.am:
+ * gst/videodrop/Makefile.am:
+ * gst/videosignal/Makefile.am:
+ * gst/virtualdub/Makefile.am:
+ * gst/vmnc/Makefile.am:
+ * gst/y4m/Makefile.am:
+ * sys/acmenc/Makefile.am:
+ * sys/cdrom/Makefile.am:
+ * sys/dshowdecwrapper/Makefile.am:
+ * sys/dshowsrcwrapper/Makefile.am:
+ * sys/dvb/Makefile.am:
+ * sys/dxr3/Makefile.am:
+ * sys/fbdev/Makefile.am:
+ * sys/oss4/Makefile.am:
+ * sys/qcam/Makefile.am:
+ * sys/qtwrapper/Makefile.am:
+ * sys/vcd/Makefile.am:
+ * sys/wininet/Makefile.am:
+ * win32/common/config.h:
+ Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2008-09-02 09:56:44 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ [MOVED FROM BAD] Enable/fix up translations for these plugins.
+ 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.
+
+2008-08-07 14:34:03 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ [MOVED FROM BAD] ext/twolame/gsttwolame.*: Allow raw float samples as input for encoding.
+ 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.
+
+2008-08-02 17:39:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ [MOVED FROM BAD] Add TwoLAME MP2 encoding element, based on the LAME element.
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/twolame/Makefile.am:
+ * ext/twolame/gsttwolame.c: (gst_two_lame_mode_get_type),
+ (gst_two_lame_padding_get_type), (gst_two_lame_emphasis_get_type),
+ (gst_two_lame_release_memory), (gst_two_lame_finalize),
+ (gst_two_lame_base_init), (gst_two_lame_class_init),
+ (gst_two_lame_src_setcaps), (gst_two_lame_sink_setcaps),
+ (gst_two_lame_init), (gst_two_lame_set_property),
+ (gst_two_lame_get_property), (gst_two_lame_sink_event),
+ (gst_two_lame_chain), (gst_two_lame_setup),
+ (gst_two_lame_change_state), (gst_two_lame_get_default_settings),
+ (plugin_init):
+ * ext/twolame/gsttwolame.h:
+ Add TwoLAME MP2 encoding element, based on the LAME element.
+
+2009-03-09 23:13:20 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 7032163 to f8b3d91
+
+2009-03-08 12:05:57 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From ffa738d to 7032163
+
+2009-03-08 11:21:32 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 3f13e4e to ffa738d
+
+2009-03-07 11:47:06 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 3c7456b to 3f13e4e
+
+2009-03-07 10:47:13 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 57c83f2 to 3c7456b
+
+2009-03-06 12:30:36 -0800 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: be more conservative when changing layer/rate/etc.
+ Don't allow a change in sample rate/channels/layer/version unless we can
+ see another frame at the correct offset. Prevents accidently flipping
+ due to simple single-bit corruption.
+
+2009-03-04 16:52:59 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/realmedia/realhash.c:
+ rmdemux: Fix strict-aliasing warnings.
+ Use existing GST_READ_UINT32 and GST_WRITE_UINT32 macros instead of
+ hand-rolled ones.
+
+2009-03-04 16:15:00 +0200 René Stadler <mail@renestadler.de>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: Remove empty lines added by buggy indent.
+
+2009-02-27 13:41:58 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mpegaudioparse: Provide SEEKING query handling.
+ Since SEEK event handling might perform some conversion
+ from TIME to BYTES, do not let upstream fool application
+ into (TIME) seeking not being possible.
+
+2009-02-25 13:34:05 -0800 Michael Smith <msmith@songbirdnest.com>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ mp3parse: fix accurate seeks to near 0
+ Integer underflow made accurate seeks to near zero fail and seek to
+ completely the wrong place. Fix by clamping to zero, since we can't seek
+ to negative times anyway.
+
+2009-02-25 20:52:08 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ * configure.ac:
+ build: Update shave init statement for changes in common. Bump common.
+
+2009-02-25 18:19:20 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rtspreal.c:
+ rtspreal: ignore data streams. Fixes #527112
+ Ignore data streams when parsing the SDP as they don't contain anything we need
+ to put in the realmedia header.
+
+2009-02-25 11:32:37 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 9cf8c9b to a6ce5c6
+
+2009-02-24 15:25:16 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/mad/gstid3tag.c:
+ Forward unknown events
+ Forward unknown events upstream instead of dropping them. Also return the result
+ of the seek event instead of a fixed value.
+
+2009-02-23 10:50:50 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/asfdemux/gstrtpasfdepay.c:
+ rtpasfdepay: Fix the build by adding the needed include for atoi.
+
+2009-02-22 19:19:12 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ Use shave for the build output
+
+2009-02-22 16:00:02 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Automatic update of common submodule
+ From 5d7c9cc to 9cf8c9b
+
+2009-02-22 14:22:30 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/asfdemux/gstasf.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rdtdepay.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/synaesthesia/synaescope.c:
+ Fix indentation.
+
+2009-02-22 14:21:22 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/realmedia/pnmsrc.c:
+ pnmsrc: Error out gracefully if location is NULL. Run gst-indent
+
+2009-02-21 11:13:55 -0800 David Schleef <ds@schleef.org>
+
+ * common:
+ Automatic update of common submodule
+ From 80c627d to 5d7c9cc
+
+2009-02-20 15:53:34 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/pnmsrc.c:
+ * gst/realmedia/pnmsrc.h:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rademux.h:
+ * gst/realmedia/realmedia.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ Add pnm:// uri source
+ Add a new utri handler for pnm:// that for now just redirects to the same uri
+ with the rtsp:// protocol, which usually works nowadays.
+ Separate the registration of the various plugins into a separate source file.
+
+2009-02-20 13:48:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/gstasf.c:
+ * gst/asfdemux/gstrtpasfdepay.c:
+ * gst/asfdemux/gstrtpasfdepay.h:
+ Add ASF depayloader
+ Add ASF depayloader based on latest public MicroSoft docs (MS-RTSP).
+ Fixes #335067.
+
+2009-02-19 19:10:53 +0000 Zaheer Merali <zaheerabbas@merali.org>
+
+ * ext/mad/gstmad.c:
+ mad: remove log line added in error
+
+2009-02-19 19:08:10 +0000 Zaheer Merali <zaheerabbas@merali.org>
+
+ * ext/mad/gstmad.c:
+ mad: just flush data when seeing BADDATAPTR instead of going into error state
+
+2009-02-18 12:55:16 +0100 Roland Moser <rmoser@gmx.at>
+
+ * gst/realmedia/rmdemux.c:
+ Fix parsing of the flags in rmdemux
+ Fix parsing of the flags in version 1 realmedia streams.
+ Fixes #571358.
+
+2009-02-09 12:03:15 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * common:
+ Bump revision to use for common submodule.
+
+2009-01-30 22:27:05 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ Add releaseinfo with online url.
+
+2009-01-30 17:34:27 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * common:
+ Bump common
+
+2009-01-30 14:35:40 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ Remove redundant push_mode struct member
+
+2009-01-30 09:04:46 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * autogen.sh:
+ Fix previous commit, wasn't actually setting up a symbolic link
+
+2009-01-30 08:56:33 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * autogen.sh:
+ * common:
+ Use a symbolic link for the pre-commit client-side hook
+
+2009-01-30 08:56:24 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * .gitignore:
+ Ignore some more files
+
+2009-01-26 22:40:10 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/synaescope.c:
+ * gst/synaesthesia/synaescope.h:
+ Precalculate some size dependent variables. Demystify the height scaling a bit.
+ Adds more comments to the code about the height scaling. RIght now only certain heights are screen filling.
+
+2009-01-26 21:26:46 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
+
+2009-01-26 20:12:41 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/rdtdepay.c:
+ Set flags on the realmedia chunks
+ Set the keyframe flags from the RDT packet to the realmedia chunk so that the
+ descrambler can be reset on keyframes. Fixes #556714.
+
+2009-01-26 20:10:36 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/realmedia/gstrdtbuffer.c:
+ * gst/realmedia/gstrdtbuffer.h:
+ Add method to get RDT flags
+ Add a method to get the RDT flags. We need these flags to mark keyframes to
+ reset the descrambing queue. See #556714.
+
+2009-01-26 10:00:57 +0100 Hans de Goede <jwrdegoede@fedoraproject.org>
+
+ * gst/asfdemux/asfpacket.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ Add seeking support to asfdemux in push mode
+ Fixes bug #568836.
+
+2009-01-26 09:57:26 +0100 Hans de Goede <jwrdegoede@fedoraproject.org>
+
+ * gst/asfdemux/asfpacket.c:
+ Drop packets with an invalid replicated data length
+ Drop packets with an invalid replicated data length
+ instead of continuing with an invalid timestamp
+ and uninitialized payload metadata.
+ All other code assumes that the timestamps are valid.
+
+2009-01-25 22:31:52 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/synaescope.h:
+ Change comment to refer to right variable.
+
+2009-01-24 23:27:08 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/synaesthesia/gstsynaesthesia.h:
+ * gst/synaesthesia/synaescope.c:
+ * gst/synaesthesia/synaescope.h:
+ Bring synaesthesia to next century.
+ Do proper size negotiation. Change engine API to allow resizes. Small cleanups elsewhere.
+
+2009-01-23 17:51:00 -0800 David Schleef <ds@schleef.org>
+
+ * gst/asfdemux/gstasfdemux.c:
+ Fix leak of converted string
+
+2009-01-23 23:44:01 +0000 Jan Schmidt <thaytan@noraisin.net>
+
+ * .gitignore:
+ * po/.gitignore:
+ Add more to the gitignores
+
+2009-01-23 23:59:38 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/synaesthesia/gstsynaesthesia.c:
+ Make synaesthesia build again.
+ _init() has no params.
+
+2009-01-22 18:15:36 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * common:
+ Update common snapshot.
+
+2009-01-22 13:50:09 +0100 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * common:
+ Fix pre-commit hook
+
+2009-01-22 06:14:31 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * autogen.sh:
+ * common:
+ Install and use pre-commit indentation hook from common
+
+2009-01-21 04:32:33 +0100 Edward Hervey <bilboed@bilboed.com>
+
+ * autogen.sh:
+ autogen.sh : Use git submodule
+
+2009-01-08 08:19:25 +0000 Yves Lefebvre <ivanohe@abacom.com>
+
+ gst/mpegstream/: Fix some caps leaks. Fixes bug #564885.
+ Original commit message from CVS:
+ Patch by: Yves Lefebvre <ivanohe at abacom dot com>
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream),
+ (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream),
+ (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+ Fix some caps leaks. Fixes bug #564885.
+
+2009-01-02 00:43:53 +0000 Alessandro Decina <alessandro.d@gmail.com>
+
+ ext/cdio/gstcdio.c: Remove unused format argument.
+ Original commit message from CVS:
+ * ext/cdio/gstcdio.c:
+ Remove unused format argument.
+
+2008-12-13 20:41:40 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ win32/common/: Hardcode cpu for win32 build, just like we do in the other modules, to remove VCS conflicts and incons...
+ Original commit message from CVS:
+ * win32/common/.cvsignore:
+ * win32/common/config.h:
+ * win32/common/config.h.in:
+ Hardcode cpu for win32 build, just like we do in the other modules,
+ to remove VCS conflicts and inconsistent defines between modules,
+ and update version defines to CVS.
+
+2008-12-13 16:29:38 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ m4/Makefile.am: Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
+ Original commit message from CVS:
+ * m4/Makefile.am:
+ Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
+
+2008-12-13 13:01:49 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ m4/Makefile.am: inttypes.m4 hasn't been available since gettext-0.15, and since we now require gettext >= 0.17 ... we...
+ Original commit message from CVS:
+ * m4/Makefile.am:
+ inttypes.m4 hasn't been available since gettext-0.15, and since we now
+ require gettext >= 0.17 ... we can remove it from the list of files to
+ dist.
+
+2008-12-10 15:42:21 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Do an initial class_ref on an internal enum type from within the class_init f...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (channel_mode_class),
+ (GST_TYPE_MP3_CHANNEL_MODE), (mp3_type_frame_length_from_header),
+ (gst_mp3parse_emit_frame), (mp3parse_get_query_types):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Do an initial class_ref on an internal enum type from within the
+ class_init function so that there aren't any issues when multiple
+ mp3parse elements are started in separate threads at the same
+ time. (Why we use an enum type here if the tag is registered as
+ a string type, I don't know). Also remove custom UNUSED macro
+ and use GLib's instead.
+
+2008-12-04 20:11:33 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change.
+ Original commit message from CVS:
+ * configure.ac:
+ Apparently AC_CONFIG_MACRO_DIR breaks when using more
+ than one macro directory, reverting last change.
+
+2008-12-04 19:48:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros.
+ Original commit message from CVS:
+ * configure.ac:
+ Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to
+ our M4 macros.
+
+2008-12-01 14:39:34 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Last change introduced a regression that made mpeg2dec handle some 4:2:2 videos as 4:4:4....
+ 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.
+
+2008-11-29 13:33:37 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Require gettext 0.17 because older versions don't mix with libtool 2.2. At build time an older gettext version will s...
+ Original commit message from CVS:
+ Patch by: Cygwin Ports maintainer
+ <yselkowitz at users dot sourceforge dot net>
+ * autogen.sh:
+ * configure.ac:
+ Require gettext 0.17 because older versions don't mix with libtool
+ 2.2. At build time an older gettext version will still work.
+ Fixes bug #556091.
+
+2008-11-25 03:44:06 +0000 David Schleef <ds@schleef.org>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Add support for 4:4:4 video. Fixes #562086
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Add support for 4:4:4 video. Fixes #562086
+
+2008-11-24 09:51:39 +0000 Simon Holm Thøgersen <odie@cs.aau.dk>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec >= 0.5.0. Fixes bug #562065.
+ 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.
+
+2008-11-20 21:31:19 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Remove duplicate and broken code for the streaming case and simply reuse the much better ...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_chain):
+ Remove duplicate and broken code for the streaming case and simply reuse
+ the much better working pull based code. Fixes #560348.
+
+2008-11-20 20:42:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Back to development -> 0.10.10.1
+ Original commit message from CVS:
+ * configure.ac:
+ Back to development -> 0.10.10.1
+
+=== release 0.10.10 ===
+
+2008-11-19 14:30:44 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * gst-plugins-ugly.doap:
+ * po/LINGUAS:
+ Release 0.10.10 - "Under the House"
+ Original commit message from CVS:
+ Release 0.10.10 - "Under the House"
+
+2008-11-19 13:59:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * po/bg.po:
+ * po/ca.po:
+ * po/da.po:
+ * po/id.po:
+ * po/it.po:
+ * po/mt.po:
+ * po/vi.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2008-11-17 09:53:39 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/sidplay/Makefile.am: Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could contain CFLAGS that do...
+ 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.
+
+2008-11-12 23:19:55 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: 0.10.9.3 pre-release
+ Original commit message from CVS:
+ * configure.ac:
+ 0.10.9.3 pre-release
+
+2008-11-11 17:14:46 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Only copy sane aspect ratio values on the caps. Fixes #559682.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
+ Only copy sane aspect ratio values on the caps. Fixes #559682.
+
+2008-11-06 13:29:37 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ChangeLog:
+ Add bug number to the mp3parse mpeg 2.5 fix
+ Original commit message from CVS:
+ Add bug number to the mp3parse mpeg 2.5 fix
+
+2008-11-05 11:03:07 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/amrnbdec.*: Add a property to select the amr variant. Fixes #424070.
+ 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.
+
+2008-11-03 11:31:49 +0000 Tal Shalif <tshalif@nargila.org>
+
+ gst/mpegstream/: Fix memmory corruption due to not storing the new updated pointer after a g_renew(). Fixes #558896.
+ Original commit message from CVS:
+ Patch by: Tal Shalif <tshalif at nargila dot org>
+ * gst/mpegstream/gstdvddemux.c:
+ (gst_dvd_demux_get_subpicture_stream):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream):
+ Fix memmory corruption due to not storing the new updated pointer
+ after a g_renew(). Fixes #558896.
+
+2008-10-30 14:50:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/Makefile.am: Blacklist cdiocddasrc from state-change tests. Fixes #558277.
+ Original commit message from CVS:
+ * tests/check/Makefile.am:
+ Blacklist cdiocddasrc from state-change tests. Fixes #558277.
+
+2008-10-24 20:44:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: oops, forgot to bump the version back to devel after the last release 0.10.9.1
+ Original commit message from CVS:
+ * configure.ac:
+ oops, forgot to bump the version back to devel
+ after the last release 0.10.9.1
+
+2008-10-24 12:47:05 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Add suport for mpeg4 and aac audio. See #556714.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_descramble_mp4a_audio),
+ (gst_rmdemux_handle_scrambled_packet):
+ Add suport for mpeg4 and aac audio. See #556714.
+
+2008-10-14 19:28:05 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Calculate samples per frame correctly for "MPEG 2.5" layer 3.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ Calculate samples per frame correctly for "MPEG 2.5" layer 3.
+ Fixes skipping on these files.
+
+2008-10-14 12:51:41 +0000 Robin Stocker <robin@nibor.org>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Prefer the container's PAR over the stream's PAR if it's given in the srcpad caps. Fixes ...
+ 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.
+
+2008-10-13 18:10:25 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Don't install static libs for plugins. Fixes #550851 for ugly.
+ Original commit message from CVS:
+ * ext/a52dec/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/dvdnav/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mad/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ * gst/ac3parse/Makefile.am:
+ * gst/asfdemux/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/iec958/Makefile.am:
+ * gst/mpegaudioparse/Makefile.am:
+ * gst/mpegstream/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ * gst/synaesthesia/Makefile.am:
+ Don't install static libs for plugins. Fixes #550851 for ugly.
+
+2008-10-13 09:04:15 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid frames. Partia...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event):
+ Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid
+ frames. Partially fixes bug #552237.
+
+2008-10-09 09:23:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/amrnb/amrnbparse.c: use #defines for HEADER. Unref the object in _sink_activate_pull().
+ Original commit message from CVS:
+ * ext/amrnb/amrnbparse.c:
+ use #defines for HEADER. Unref the object in _sink_activate_pull().
+
+2008-10-08 13:59:57 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mad/gstmad.*: track discont on incomming buffers and set discont on outgoing buffers.
+ 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.
+
+2008-09-28 17:33:43 +0000 Sameer Naik <sameer.subscriptions@damagehead.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Fix compilation with --disable-index. Fixes bug #554150.
+ Original commit message from CVS:
+ Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init),
+ (handle_slice), (gst_mpeg2dec_sink_event),
+ (gst_mpeg2dec_src_event):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Fix compilation with --disable-index. Fixes bug #554150.
+
+2008-09-28 17:31:37 +0000 Sameer Naik <sameer.subscriptions@damagehead.com>
+
+ ext/mad/gstmad.*: Fix compilation with --disable-index. Fixes bug #554142.
+ Original commit message from CVS:
+ Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
+ * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_dispose),
+ (gst_mad_src_event), (gst_mad_chain):
+ * ext/mad/gstmad.h:
+ Fix compilation with --disable-index. Fixes bug #554142.
+
+2008-09-27 00:20:48 +0000 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ ext/a52dec/gsta52dec.*: Fix channel re-negotiation on a change of the incoming stream.
+ 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
+
+2008-09-26 14:39:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/amrnbenc.*: Pass the discont flag from the input buffer on to the output buffer in the AMR encoder.
+ 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.
+
+2008-09-26 10:04:35 +0000 Benoit Fouet <benoit.fouet@purplelabs.com>
+
+ ext/amrnb/amrnbparse.*: Add flush seek handler. Fixes #536274.
+ Original commit message from CVS:
+ Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_handle_pull_seek),
+ (gst_amrnbparse_handle_push_seek), (gst_amrnbparse_src_event),
+ (gst_amrnbparse_sink_activate_push),
+ (gst_amrnbparse_sink_activate_pull):
+ * ext/amrnb/amrnbparse.h:
+ Add flush seek handler. Fixes #536274.
+
+2008-09-26 09:57:02 +0000 Benoit Fouet <benoit.fouet@purplelabs.com>
+
+ ext/amrnb/amrnbparse.*: Fix the duration query. Fixes #536226.
+ 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.
+
+2008-09-02 09:43:10 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ po/LINGUAS: Add 'ca' to LINGUAS.
+ Original commit message from CVS:
+ * po/LINGUAS:
+ Add 'ca' to LINGUAS.
+
+2008-08-28 09:57:30 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/gstasfdemux.c: Fix aggregated GST_FLOW_RETURN check for when to send an error message on the bus.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
+ Fix aggregated GST_FLOW_RETURN check for when to send an error message
+ on the bus.
+ Re-fixes #546859
+
+2008-08-27 15:55:05 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtdepay.*: Parse other values from the incomming caps.
+ Original commit message from CVS:
+ * gst/realmedia/rdtdepay.c: (gst_rdt_depay_init),
+ (gst_rdt_depay_setcaps), (gst_rdt_depay_sink_event),
+ (create_segment_event), (gst_rdt_depay_push),
+ (gst_rdt_depay_handle_data), (gst_rdt_depay_change_state):
+ * gst/realmedia/rdtdepay.h:
+ Parse other values from the incomming caps.
+ Add event handler to handle flushing and segments.
+ Create segment events.
+ * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_insert):
+ Do skew correction based on RDT timestamps.
+ * gst/realmedia/rdtmanager.c: (activate_session),
+ (gst_rdt_manager_parse_caps), (gst_rdt_manager_setcaps),
+ (create_recv_rtp):
+ Parse caps to get the clockrate needed for the jitterbuffer.
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+ Apply timestamp fixup after correcting for initial timestamp and
+ internal base timestamp corrections.
+
+2008-08-27 11:28:50 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtdepay.*: Check seqnum gaps and drop duplicate packets or mark outgoing buffers with a DISCONT flag w...
+ Original commit message from CVS:
+ * gst/realmedia/rdtdepay.c: (gst_rdt_depay_handle_data),
+ (gst_rdt_depay_change_state):
+ * gst/realmedia/rdtdepay.h:
+ Check seqnum gaps and drop duplicate packets or mark outgoing buffers
+ with a DISCONT flag when needed.
+ * gst/realmedia/rdtmanager.c: (gst_rdt_manager_query_src):
+ Report the configure latency instead of a hardcoded value.
+
+2008-08-27 10:02:06 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtmanager.c: Include the new rdt jitterbuffer in the session manager.
+ Original commit message from CVS:
+ * gst/realmedia/rdtmanager.c: (create_session), (activate_session),
+ (free_session), (gst_rdt_manager_query_src),
+ (gst_rdt_manager_src_activate_push),
+ (gst_rdt_manager_handle_data_packet), (gst_rdt_manager_chain_rdt),
+ (gst_rdt_manager_loop), (create_recv_rtp):
+ Include the new rdt jitterbuffer in the session manager.
+
+2008-08-27 09:58:00 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtdepay.*: Use new RDT parsing helper functions.
+ Original commit message from CVS:
+ * gst/realmedia/rdtdepay.c: (gst_rdt_depay_class_init),
+ (gst_rdt_depay_finalize), (gst_rdt_depay_setcaps),
+ (gst_rdt_depay_push), (gst_rdt_depay_handle_data),
+ (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
+ * gst/realmedia/rdtdepay.h:
+ Use new RDT parsing helper functions.
+ Copy discont flags correctly.
+ Push the header from the chain function instead of the setcaps function.
+ Copy incomming timestamp to the output buffers instead of doing magic
+ with the RDT timestamps.
+
+2008-08-27 09:52:49 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Add first support for parsing RDT messages.
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/gstrdtbuffer.c: (gst_rdt_buffer_validate_data),
+ (gst_rdt_buffer_validate), (gst_rdt_buffer_get_packet_count),
+ (read_packet_header), (gst_rdt_buffer_get_first_packet),
+ (gst_rdt_packet_move_to_next), (gst_rdt_packet_get_type),
+ (gst_rdt_packet_get_length), (gst_rdt_packet_to_buffer),
+ (gst_rdt_buffer_compare_seqnum), (gst_rdt_packet_data_get_seq),
+ (gst_rdt_packet_data_peek_data),
+ (gst_rdt_packet_data_get_stream_id),
+ (gst_rdt_packet_data_get_timestamp):
+ * gst/realmedia/gstrdtbuffer.h:
+ Add first support for parsing RDT messages.
+ * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_class_init),
+ (rdt_jitter_buffer_init), (rdt_jitter_buffer_finalize),
+ (rdt_jitter_buffer_new), (rdt_jitter_buffer_reset_skew),
+ (calculate_skew), (rdt_jitter_buffer_insert),
+ (rdt_jitter_buffer_pop), (rdt_jitter_buffer_peek),
+ (rdt_jitter_buffer_flush), (rdt_jitter_buffer_num_packets),
+ (rdt_jitter_buffer_get_ts_diff):
+ * gst/realmedia/rdtjitterbuffer.h:
+ Add first version of an RDT jitterbuffer.
+
+2008-08-27 09:47:17 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.*: Keep track of the first timestamp of the stream and add this to the outgoing buffer timestam...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+ (find_seek_offset_time), (gst_rmdemux_reset), (gst_rmdemux_chain),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_descramble_cook_audio),
+ (gst_rmdemux_descramble_dnet_audio),
+ (gst_rmdemux_parse_video_packet), (gst_rmdemux_parse_audio_packet):
+ * gst/realmedia/rmdemux.h:
+ Keep track of the first timestamp of the stream and add this to the
+ outgoing buffer timestamps so that we can handle live streams.
+ Set discont flag on the first buffers and after a seek.
+
+=== release 0.10.9 ===
+
+2008-08-26 23:06:04 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * gst-plugins-ugly.doap:
+ Release 0.10.9
+ Original commit message from CVS:
+ Release 0.10.9
+
+2008-08-26 22:56:30 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/lt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2008-08-26 15:35:43 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/a52dec/gsta52dec.c: Set up a default time segment for output when receiving an incoming byte segment (as for raw ...
+ 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
+
+2008-08-12 09:16:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ 0.10.8.2 pre-release.
+ Original commit message from CVS:
+ * configure.ac:
+ * 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-asf.xml:
+ * docs/plugins/inspect/plugin-cdio.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:
+ * ext/Makefile.am:
+ 0.10.8.2 pre-release.
+ * po/LINGUAS:
+ * po/POTFILES.in:
+ * po/id.po:
+ Add new translation.
+
+2008-08-11 18:44:35 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/asfdemux/gstasfdemux.c: Properly aggregate flow returns for both push and pull mode, so we shut down if all pads ...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ Properly aggregate flow returns for both push and pull mode, so we shut
+ down if all pads are unlinked.
+ Fixes #546859.
+
+2008-08-07 16:14:42 +0000 Frederic Crozat <fcrozat@mandriva.org>
+
+ Make sure gettext returns translations in UTF-8 encoding rather than in the current locale encoding (#546822).
+ 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).
+
+2008-07-31 14:35:40 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time() if we'...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame),
+ (mp3parse_total_time), (mp3parse_bytepos_to_time):
+ Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time()
+ if we're called from there already. Otherwise we end up in a endless
+ recursion and crash with a stack overflow.
+ This can happen when a Xing or VBRI header with TOC exists but it
+ doesn't contain the total time. Fixes bug #545370.
+
+2008-07-31 14:24:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.c: Use the default for the strict-iso property too.
+ 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.
+
+2008-07-29 16:57:16 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.*: Get the defaults settings of LAME in the plugin initialization function and return FALSE here if ...
+ 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.
+
+2008-07-27 15:56:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.c: Use LAME's default for the min/max/mean VBR bitrate. Setting our own defaults will restrict the b...
+ 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.
+
+2008-07-27 11:01:12 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Put the MPEG audio version into the caps as "mpegaudioversion".
+ 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".
+
+2008-07-22 18:25:08 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.*: Fix build with lame >= 3.97. The padding type and cwlimit settings are deprecated now and the fun...
+ 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.
+
+2008-07-13 10:13:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Don't allow width/height outside the spec (i.e. smaller than 16 and higher than 4096). Su...
+ 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.
+
+2008-07-11 12:30:22 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/sidplay/Makefile.am: Fix the build.
+ Original commit message from CVS:
+ * ext/sidplay/Makefile.am:
+ Fix the build.
+
+2008-07-08 14:01:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include flags that are invalid for C++.
+ Original commit message from CVS:
+ * configure.ac:
+ Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include
+ flags that are invalid for C++.
+
+2008-07-05 18:57:30 +0000 Tal Shalif <tshalif@nargila.org>
+
+ ext/dvdnav/dvdnavsrc.c: Prevent double free. Fixes bug #541697.
+ Original commit message from CVS:
+ Patch by: Tal Shalif <tshalif at nargila dot org>
+ * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_stop):
+ Prevent double free. Fixes bug #541697.
+
+2008-07-05 15:56:56 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ gst/mpegstream/: Resend tags event after a FLUSH (seek) to support prerolling a partial pipeline.
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+ (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_get_subpicture_stream),
+ (gst_dvd_demux_parse_packhead), (gst_dvd_demux_reset):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
+ (gst_mpeg_demux_process_event), (gst_mpeg_demux_init_stream),
+ (gst_mpeg_demux_parse_packhead), (gst_mpeg_demux_reset):
+ * gst/mpegstream/gstmpegdemux.h:
+ Resend tags event after a FLUSH (seek) to support prerolling
+ a partial pipeline.
+
+2008-07-03 13:12:26 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Use correct error code for encrypted streams.
+ Original commit message from CVS:
+ * configure.ac:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
+ Use correct error code for encrypted streams.
+
+2008-07-02 07:49:19 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ gst/mpegstream/gstmpegdemux.c: Bridge gaps in stream by NEWSEGMENT sending. Fixes #540194.
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
+ (gst_mpeg_demux_sync_stream_to_time):
+ Bridge gaps in stream by NEWSEGMENT sending. Fixes #540194.
+
+2008-06-27 12:58:35 +0000 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ ext/dvdread/dvdreadsrc.c: Allow and implement non-flushing and/or segment seek (mainly in TIME and chapter format).
+ 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.
+
+2008-06-26 10:40:03 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Fix build on macosx.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
+ Fix build on macosx.
+
+2008-06-13 06:57:21 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Add missing elements to docs. Restore alphabetical order in section file. Document mad (it was included in docs alrea...
+ 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.
+
+2008-06-13 05:52:17 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Do not use short_description in section docs for elements. We extract them from element details and there will be war...
+ 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.
+
+2008-06-09 20:02:05 +0000 Benjamin Kampmann <benjamin@fluendo.com>
+
+ ext/cdio/: Also extract album title and album genre from CD-TEXT if available (#537021).
+ 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).
+
+2008-06-09 07:51:00 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Don't mark MPEG headers with emphasis == 0x2 as invalid. This emphasis value ...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
+ Don't mark MPEG headers with emphasis == 0x2 as invalid. This
+ emphasis value is reserved but unfortunately files with that
+ value exist and the information is not important for the decoder
+ anyway. Fixes bug #537235.
+
+2008-06-07 18:48:54 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Require libcdio >= 0.76.
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
+ Require libcdio >= 0.76.
+
+2008-06-02 15:44:57 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/a52dec/gsta52dec.c: Drain queued buffers before forwarding the segment event.
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
+ Drain queued buffers before forwarding the segment event.
+
+2008-06-02 11:59:07 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/a52dec/gsta52dec.*: Add segment handling, buffer clipping and basic reverse playback.
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (clear_queued), (flush_queued),
+ (gst_a52dec_drain), (gst_a52dec_push), (gst_a52dec_sink_event),
+ (gst_a52dec_chain), (gst_a52dec_change_state):
+ * ext/a52dec/gsta52dec.h:
+ Add segment handling, buffer clipping and basic reverse playback.
+
+2008-05-28 11:43:01 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ 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:
+ * 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.
+
+2008-05-26 09:06:54 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/a52dec/gsta52dec.*: Mark discont on outgoing buffers after receiving a DISCONT buffer or when we have a decoding ...
+ 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.
+
+2008-05-26 07:41:24 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstxingmux.c: Fix alignment issues that caused SIGBUS on some architectures.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
+ Fix alignment issues that caused SIGBUS on some architectures.
+
+2008-05-25 21:30:40 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/ac3parse/gstac3parse.c: Fix alignment issue which isn't really an issue at all because the plugin hasn't been por...
+ Original commit message from CVS:
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+ Fix alignment issue which isn't really an issue at all because
+ the plugin hasn't been ported to 0.10 yet.
+
+2008-05-25 21:03:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Back to devel -> 0.10.8.1
+ Original commit message from CVS:
+ * configure.ac:
+ Back to devel -> 0.10.8.1
+
+=== release 0.10.8 ===
+
+2008-05-21 23:03:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/inspect/plugin-a52dec.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:
+ * gst-plugins-ugly.doap:
+ * po/LINGUAS:
+ Release 0.10.8
+ Original commit message from CVS:
+ Release 0.10.8
+
+2008-05-21 22:43:42 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * common:
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/lt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2008-05-19 21:38:16 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: 0.10.7.4 pre-release
+ Original commit message from CVS:
+ * configure.ac:
+ 0.10.7.4 pre-release
+
+2008-05-19 15:07:07 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/mad/gstmad.c: Fix inconsistent use of rate and channels.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_convert_src), (gst_mad_chain):
+ Fix inconsistent use of rate and channels.
+ Fixes #533581
+
+2008-05-19 10:23:46 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Flush timestamp correction variables on a flush. Fixes #533832.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_send_event):
+ Flush timestamp correction variables on a flush. Fixes #533832.
+
+2008-05-19 10:02:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * common:
+ * configure.ac:
+ Commit 0.10.7.3 pre-rel marker
+ Original commit message from CVS:
+ Commit 0.10.7.3 pre-rel marker
+
+2008-05-13 09:33:09 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/realmedia/rmdemux.c: Properly aggregate GstFlowReturn from downstream in order to properly stop, and doing that a...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+ Properly aggregate GstFlowReturn from downstream in order to properly
+ stop, and doing that as early as possible.
+ Fixes #532807
+
+2008-05-10 15:32:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: 0.10.7.2 pre-release
+ Original commit message from CVS:
+ * configure.ac:
+ 0.10.7.2 pre-release
+
+2008-05-10 00:44:00 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ Always let FLUSH_START events flow downstream.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_sink_event):
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event):
+ Always let FLUSH_START events flow downstream.
+
+2008-05-07 08:00:24 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Error out if we don't have the required core/base versions.
+ Original commit message from CVS:
+ * configure.ac:
+ Error out if we don't have the required core/base versions.
+
+2008-05-06 17:53:26 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Fix video timestamps by adjusting it with the first timestamp found.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
+ (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
+ Fix video timestamps by adjusting it with the first timestamp found.
+ Don't assume we have a complete fragment when flushing the adapter,
+ packets might have been lost or the stream might just be broken.
+
+2008-05-06 10:30:18 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtmanager.c: Set Rank to NONE so that we don't accidentally try to autoplug the rdtmanager.
+ Original commit message from CVS:
+ * gst/realmedia/rdtmanager.c: (gst_rdt_manager_plugin_init):
+ Set Rank to NONE so that we don't accidentally try to autoplug the
+ rdtmanager.
+
+2008-05-05 08:43:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Send a new duration message if the average bitrate changed and we don't know ...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ Send a new duration message if the average bitrate changed and
+ we don't know the duration from the Xing or VBRI header.
+ Fixes bug #321857.
+
+2008-04-30 17:16:47 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rtspreal.*: Move assembly rule parsing to the place where we parse the SDP as it's also there that we c...
+ Original commit message from CVS:
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_before_send),
+ (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
+ * gst/realmedia/rtspreal.h:
+ Move assembly rule parsing to the place where we parse the SDP as it's
+ also there that we create the MDPR and we need the currently selected
+ asmrule in order to select the right MTLI.
+ Fixes #529359.
+
+2008-04-29 17:34:19 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/realmedia/: Include generated "_stdint.h" instead of <stdint.h> which might not exist on some systems.
+ Original commit message from CVS:
+ * gst/realmedia/realhash.c:
+ * gst/realmedia/rtspreal.c:
+ Include generated "_stdint.h" instead of <stdint.h> which might not
+ exist on some systems.
+
+2008-04-25 23:10:54 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/sidplay/gstsiddec.cc: Cast NULL sentinels to void * as NULL is defined as an integer constant in most environment...
+ 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.
+
+2008-04-22 12:11:30 +0000 Edgard Lima <edgard.lima@indt.org.br>
+
+ * ChangeLog:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstrtspwms.c:
+ Fix "unused var" compiler error when --disable-gst-debug is used.
+ Original commit message from CVS:
+ Fix "unused var" compiler error when --disable-gst-debug is used.
+
+2008-04-17 20:58:00 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/amrnb/amrnbparse.c: We should also stop the streaming task when we get a NOT_LINKED flow return, which is not cov...
+ 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.
+
+2008-04-17 10:24:32 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/: gst_atomic_int_set ==> g_atomic_int_set
+ Original commit message from CVS:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dv/gstdvdemux.c:
+ gst_atomic_int_set ==> g_atomic_int_set
+
+2008-04-11 08:09:55 +0000 Julien Moutte <julien@moutte.net>
+
+ gst/mpegaudioparse/gstxingmux.c: Fix argument formats.
+ Original commit message from CVS:
+ 2008-04-11 Julien Moutte <julien@fluendo.com>
+ * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header): Fix
+ argument formats.
+
+2008-04-06 08:57:33 +0000 Damien Lespiau <damien.lespiau@gmail.com>
+
+ configure.ac: Actually build dlls when cross-compiling with mingw32.
+ Original commit message from CVS:
+ Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+ * configure.ac:
+ Actually build dlls when cross-compiling with mingw32.
+ Fixes bug #526247.
+
+2008-04-04 19:04:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Depend on GLib 2.12 and use it unconditionally as we do in other modules too already.
+ Original commit message from CVS:
+ * configure.ac:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mpeg_audio_seek_entry_free):
+ * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_free):
+ Depend on GLib 2.12 and use it unconditionally as we do in other
+ modules too already.
+
+2008-04-03 15:21:50 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/: Use GSlice for allocating the seek table entries if we compile with
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mpeg_audio_seek_entry_new), (mpeg_audio_seek_entry_free),
+ (gst_mp3parse_reset), (gst_mp3parse_emit_frame):
+ * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_new),
+ (gst_xing_seek_entry_free), (gst_xing_mux_finalize), (xing_reset),
+ (gst_xing_mux_chain):
+ Use GSlice for allocating the seek table entries if we compile with
+ GLib 2.10 or newer.
+
+2008-04-01 14:39:24 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Remove some debug code.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_stream_props):
+ Remove some debug code.
+
+2008-04-01 14:29:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Guard against division by 0 and fall back to 25/1 framerate.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_stream_props):
+ Guard against division by 0 and fall back to 25/1 framerate.
+
+2008-04-01 14:00:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duratio...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_ext_stream_props):
+ Instead of adding a fixes 25/1 framerate to the video caps, use the
+ average frame duration in the extended properties of the video stream as
+ the framerate. Fixes #524346.
+
+2008-03-21 14:15:27 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Check if the compiler supports do { } while (0) macros. This fixes a warning when compiling with g++ 4....
+ Original commit message from CVS:
+ * configure.ac:
+ Check if the compiler supports do { } while (0) macros. This fixes
+ a warning when compiling with g++ 4.3, resulting in a build failure
+ because of -Werror.
+
+2008-03-19 11:01:25 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/asmrules.c: make ) also a delimiter for rules.
+ Original commit message from CVS:
+ * gst/realmedia/asmrules.c: (gst_asm_scan_string), (main):
+ make ) also a delimiter for rules.
+ Skip \\ when scanning strings.
+ Add new testcase for these problems.
+
+2008-03-12 16:09:48 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Don't take the stream lock when caching events. This is not necessary and res...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event):
+ Don't take the stream lock when caching events. This is not necessary
+ and results in a deadlock when seeking with rhythmbox (but not with
+ totem or banshee for some reason).
+
+2008-03-10 15:17:24 +0000 Pizpot Gargravarr <pgargravarr@siriuscybernetics.org>
+
+ gst/realmedia/rtspreal.c: Add the version field when creating the CONT chunk resulting in the Author, Comment and Cop...
+ Original commit message from CVS:
+ Patch by: Pizpot Gargravarr <pgargravarr at siriuscybernetics dot org>
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp):
+ Add the version field when creating the CONT chunk resulting in
+ the Author, Comment and Copyright tags not being parsed correctly.
+ Fixes #521459.
+
+2008-03-10 15:13:10 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Remove trailing newlines from debug statements.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+ Remove trailing newlines from debug statements.
+
+2008-03-04 22:54:21 +0000 Simone Gotti <simone.gotti@email.it>
+
+ ext/dvdnav/dvdnavsrc.*: Apply patch that adds some seeking support to dvdnav, and fixes it in various other ways. Thi...
+ Original commit message from CVS:
+ * ext/dvdnav/dvdnavsrc.c:
+ * ext/dvdnav/dvdnavsrc.h:
+ Apply patch that adds some seeking support to dvdnav, and fixes it
+ in various other ways. This doesn't make dvdnavsrc fully functional,
+ but moves it forward.
+ Fixes: #476149
+ Patch By: Simone Gotti <simone.gotti@email.it>
+ * ext/dvdnav/gst-dvd:
+ Update the simple dvdnavsrc gst-launch example to work for 0.10
+
+2008-03-03 12:50:56 +0000 Peter Kjellerstedt <pkj@axis.com>
+
+ configure.ac: Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which plug-ins are included/excluded. (#4...
+ Original commit message from CVS:
+ * configure.ac:
+ Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which
+ plug-ins are included/excluded. (#498222)
+
+2008-02-27 15:23:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead of dropping and leaking them.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_sink_event):
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event):
+ Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead
+ of dropping and leaking them.
+
+2008-02-27 13:18:57 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Cache all events except EOS if we still have to send a NEWSEGMENT event. This will let TAG events be forwarded until ...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_dispose), (gst_mad_sink_event),
+ (gst_mad_chain):
+ * ext/mad/gstmad.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose),
+ (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Cache all events except EOS if we still have to send a NEWSEGMENT
+ event. This will let TAG events be forwarded until after decodebin
+ to an encoder for example as decodebin only links the pads
+ after NEWSEGMENT. Fixes bug #518933.
+
+2008-02-27 12:48:41 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstxingmux.c: Write Xing header at the correct position in the MP3 frame for stereo files. Fixes b...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstxingmux.c: (get_xing_offset):
+ Write Xing header at the correct position in the MP3 frame for
+ stereo files. Fixes bug #518676.
+
+2008-02-23 12:35:53 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them when building C++ code (#516509).
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/sidplay/Makefile.am:
+ Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them
+ when building C++ code (#516509).
+
+2008-02-22 14:55:57 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
+ Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
+ Workshop 12 compiler, but probably also crashes (#517985).
+
+2008-02-22 07:11:17 +0000 Thiago Sousa Santos <thiagoss@lcc.ufcg.edu.br>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Post channel mode and CRC as tags. Fixes bug #504493.
+ Original commit message from CVS:
+ Patch by: Thiago Sousa Santos <thiagoss at lcc dot ufcg dot edu dot br>
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3_channel_mode_get_type),
+ (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
+ (gst_mp3parse_reset), (gst_mp3parse_emit_frame),
+ (gst_mp3parse_chain):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Post channel mode and CRC as tags. Fixes bug #504493.
+
+2008-02-22 06:27:11 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/dvdnav/dvdnavsrc.c: Correctly chain up to the parent's finalize function.
+ Original commit message from CVS:
+ * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_finalize):
+ Correctly chain up to the parent's finalize function.
+
+2008-02-22 06:25:28 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Try a bit harder to get valid timestamps, especially if upstream gives us one...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame), (gst_mp3parse_chain):
+ Try a bit harder to get valid timestamps, especially if upstream
+ gives us one and we are at the first frame or resyncing.
+ Return UNEXPECTED if we get a valid timestamp that is outside of
+ our configured segment. After all changes done so far this doesn't
+ seem to cause any regression, please test.
+
+2008-02-22 06:19:41 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/asfdemux/gstasfdemux.c: If we don't have the position to seek to in our index first try to convert from TIME to B...
+ Original commit message from CVS:
+ Patch by:
+ Hans de Goede <j dot w dot r dot degoede at hhs dot nl>
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event):
+ If we don't have the position to seek to in our index first try
+ to convert from TIME to BYTES upstream and only if that fails
+ too use the old hack to simply seek to an earlier position
+ and let the sink drop everything before segment start.
+ Partially fixes bug #469930.
+
+2008-02-21 23:54:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Back to development...
+ Original commit message from CVS:
+ * configure.ac:
+ Back to development...
+
+=== release 0.10.7 ===
+
+2008-02-21 00:15:22 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-a52dec.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:
+ * gst-plugins-ugly.doap:
+ * po/LINGUAS:
+ Release 0.10.7 - I Cheated Time
+ Original commit message from CVS:
+ Release 0.10.7 - I Cheated Time
+
+2008-02-20 23:51:56 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/es.po:
+ * po/fi.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/sk.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2008-02-18 20:40:29 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ tests/check/Makefile.am: Exclude dvdreadsrc from the states test too.
+ Original commit message from CVS:
+ * tests/check/Makefile.am:
+ Exclude dvdreadsrc from the states test too.
+
+2008-02-18 10:25:16 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Handler buffers without valid timestamp more correctly: Don't drop them and d...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ Handler buffers without valid timestamp more correctly: Don't drop
+ them and don't use the invalid timestamp to calculate the next
+ timestamp. Fixes bug #516811.
+
+2008-02-18 05:16:44 +0000 Tal Shalif <tshalif@nargila.org>
+
+ ext/dvdread/dvdreadsrc.c: Add some gint64 casts to prevent 32 bit integer overflows.
+ Original commit message from CVS:
+ Patch by: Tal Shalif <tshalif at nargila dot org>
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_create),
+ (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_position_query):
+ Add some gint64 casts to prevent 32 bit integer overflows.
+ Fixes bug #516989.
+
+2008-02-17 18:49:30 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Revert previous commit to mp3parse, as it breaks playback of AVI files.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ Revert previous commit to mp3parse, as it breaks playback
+ of AVI files.
+
+2008-02-14 13:58:42 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Return GST_FLOW_UNEXPECTED if we get data that is after our configured segmen...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ Return GST_FLOW_UNEXPECTED if we get data that is after our
+ configured segment. This makes upstream go EOS immediately instead
+ of sending us the complete stream. Also improve debugging a bit.
+
+2008-02-13 22:57:54 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/dvdread/dvdreadsrc.c: Fix regression in DVD seeking - when a pack we expect to be a NAV block turns out not to be...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c:
+ Fix regression in DVD seeking - when a pack we
+ expect to be a NAV block turns out not to be, scan forwards
+ for up to 2MB (at most ~1sec) until we find one.
+ Fixes: #516278
+
+2008-02-12 21:42:19 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ win32/vs6/libgstmpegaudioparse.dsp: Add xing files to VS project file.
+ Original commit message from CVS:
+ * win32/vs6/libgstmpegaudioparse.dsp:
+ Add xing files to VS project file.
+
+2008-02-11 13:31:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/dvdsub/gstdvdsubparse.c: Stop leaking src pad templates. Fixes bug #515708.
+ Original commit message from CVS:
+ * gst/dvdsub/gstdvdsubparse.c: (gst_dvd_sub_parse_init):
+ Stop leaking src pad templates. Fixes bug #515708.
+
+2008-02-11 13:29:07 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstxingmux.c: Correctly write the size in bytes on big endian systems.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
+ Correctly write the size in bytes on big endian systems.
+ Fixes bug #515725.
+
+2008-02-11 09:13:33 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.c: Don't leak the allowed caps.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_setup):
+ Don't leak the allowed caps.
+ * tests/check/pipelines/lame.c: (GST_START_TEST):
+ Stop leaking all buffers. Fixes bug #515575.
+
+2008-02-08 10:17:11 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/plugin.c: Commit new file I forgot to add.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/plugin.c:
+ Commit new file I forgot to add.
+
+2008-02-08 01:09:53 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Make DISABLE_DEPRECATED defined *only* during CVS, not during pre-releases or releases.
+ Original commit message from CVS:
+ * configure.ac:
+ Make DISABLE_DEPRECATED defined *only* during CVS, not during
+ pre-releases or releases.
+
+2008-02-08 00:44:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ Mention bug 511497 fixed in previous commit
+ Original commit message from CVS:
+ Mention bug 511497 fixed in previous commit
+
+2008-02-08 00:36:51 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ Move xingmux from -bad.
+ 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/inspect/plugin-mpegaudioparse.xml:
+ * gst/mpegaudioparse/Makefile.am:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstxingmux.c:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.cvsignore:
+ Move xingmux from -bad.
+
+2008-02-07 19:25:08 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_guint64_to_gdouble for conversion
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:(mp3parse_time_to_bytepos):
+ Use gst_guint64_to_gdouble for conversion
+ * win32/vs6/libgstasfdemux.dsp:
+ * win32/vs6/libgstdvdsub.dsp:
+ * win32/vs6/libgstrealmedia.dsp:
+ Update project dependencies and add new source files
+
+2008-02-04 14:27:32 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Reset decoder when handling sequence where libmpeg2 has set frame period to 0, probably d...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Reset decoder when handling sequence where libmpeg2 has set
+ frame period to 0, probably due to a corrupt packet.
+ Fixes bug #514297
+
+2008-01-29 19:10:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Don't set new caps on the srcpad everytime the bitrate or MPEG version change...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create),
+ (gst_mp3parse_chain):
+ Don't set new caps on the srcpad everytime the bitrate or MPEG
+ version changes but calculate new spf value when the MPEG version
+ changes.
+
+2008-01-23 10:34:40 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Add documentation for the xingheader plugin.
+ 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:
+ * gst/xingheader/gstxingmux.c:
+ * gst/xingheader/gstxingmux.h:
+ Add documentation for the xingheader plugin.
+ * tests/check/elements/xingmux.c: (GST_START_TEST):
+ Set element state to PLAYING before doing something else.
+
+2008-01-23 10:11:44 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ tests/check/: Add simple unit test for the xingmux element.
+ Original commit message from CVS:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.cvsignore:
+ * tests/check/elements/xingmux.c: (setup_xingmux),
+ (cleanup_xingmux), (GST_START_TEST), (xingmux_suite), (main):
+ * tests/check/elements/xingmux_testdata.h:
+ Add simple unit test for the xingmux element.
+ * gst/xingheader/gstxingmux.c: (generate_xing_header),
+ (gst_xing_mux_finalize), (xing_reset):
+ Fix a memleak and invalid seek tables with less than 100 MP3 frames.
+
+2008-01-21 13:35:02 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ docs/plugins/: Add the real and rtsp elements and update the lists.
+ 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:
+ Add the real and rtsp elements and update the lists.
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-dvdsub.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:
+ Regenerate docs.
+ * gst/iec958/ac3_padder.c:
+ * gst/iec958/ac3_padder.h:
+ Do not use gtk-doc style comments for non gtk-doc comments. Note -
+ there are functions defined using extern in the .c file - does that
+ make sense?
+
+2008-01-21 12:43:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/mad/gstmad.c: Chain up at the end of the function.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c:
+ Chain up at the end of the function.
+
+2008-01-19 16:04:14 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mad/gstid3tag.c: Don't add pad templates for the base class but only in the subclasses.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_id3_tag_class_init):
+ Don't add pad templates for the base class but only in the
+ subclasses.
+
+2008-01-17 17:26:48 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ ext/lame/gstlame.*: Fix the case where you initially have stereo input, and so lame's mode is not set to mono, and th...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlame.h:
+ Fix the case where you initially have stereo input, and so lame's
+ mode is not set to mono, and then you get input with mono audio and
+ soon after you get stereo input again. What happened before this
+ commit is that it would keep the encoding mode as mono. It should
+ change it back to the one requested by the app (or the default one)
+ if not requested.
+
+2008-01-15 17:18:31 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Interpolate the VBRI seek table entries to get better results, support 3 byte...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+ (mp3parse_bytepos_to_time):
+ Interpolate the VBRI seek table entries to get better results,
+ support 3 byte seek table entries and prevent overflows in the
+ seek table by adding the relative offsets when using the seek
+ table in a large enough data type.
+
+2008-01-14 15:02:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Add support for seeking based on the VBRI seek table. Might make sense to use...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+ (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+ (mp3parse_bytepos_to_time):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Add support for seeking based on the VBRI seek table. Might make
+ sense to use interpolation in the table later to get hopefully a
+ bit more accurate values.
+
+2008-01-14 11:41:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Fix compilation error. Fixes #509313.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
+ (handle_picture), (handle_slice):
+ Fix compilation error. Fixes #509313.
+
+2008-01-14 11:24:57 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/lame/gstlame.c: Use gst_util_uint64_scale instead of gst_util_uint64_scale_int as 8 * GST_SECOND is too large for...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_event):
+ Use gst_util_uint64_scale instead of gst_util_uint64_scale_int
+ as 8 * GST_SECOND is too large for int.
+
+2008-01-14 10:52:20 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/xingheader/gstxingmux.c: Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead of 0xfe.
+ Original commit message from CVS:
+ * gst/xingheader/gstxingmux.c: (generate_xing_header):
+ Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead
+ of 0xfe.
+
+2008-01-14 10:42:48 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Add initial support for reading VBRI headers as found in VBR files created by...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+ (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
+ (mp3parse_total_bytes), (mp3parse_total_time):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Add initial support for reading VBRI headers as found in VBR files
+ created by some Fraunhofer encoders. Currently we only read the
+ number of frames and bytes (and calculate duration, etc from this)
+ but there is also a seek table that we currently don't use.
+
+2008-01-14 09:17:47 +0000 Mark Nauwelaerts <manauw@syknet.be>
+
+ ext/lame/gstlame.c: Correctly set number of channels when using mono-encoding mode and fix the duration calculation o...
+ Original commit message from CVS:
+ Patch by: Mark Nauwelaerts <manauw at syknet dot be>
+ * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+ (gst_lame_sink_event):
+ Correctly set number of channels when using mono-encoding mode
+ and fix the duration calculation of the EOS buffer.
+
+2008-01-14 09:13:29 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Guard against 0 values in the Xing header as frame count and byte count and c...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_handle_first_frame):
+ Guard against 0 values in the Xing header as frame count and
+ byte count and calculate the bitrate when we have all values
+ we need and not before.
+
+2008-01-14 09:09:49 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/xingheader/gstxingmux.c: Remove accidentially leftover debug printf.
+ Original commit message from CVS:
+ * gst/xingheader/gstxingmux.c: (generate_xing_header):
+ Remove accidentially leftover debug printf.
+
+2008-01-14 08:56:31 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/xingheader/gstxingmux.c: Choose smallest possible frame size for the Xing header, properly set the timestamp, dur...
+ Original commit message from CVS:
+ * gst/xingheader/gstxingmux.c: (has_xing_header),
+ (generate_xing_header), (gst_xing_mux_chain),
+ (gst_xing_mux_sink_event):
+ Choose smallest possible frame size for the Xing header, properly
+ set the timestamp, duration and offset on the outgoing buffers,
+ only send NEWSEGMENT events in BYTE format downstream and also
+ drop VBRI headers if already existing.
+
+2008-01-12 09:22:06 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/xingheader/: Major cleanup and rewrite of xingmux with less bugs and new features:
+ Original commit message from CVS:
+ * gst/xingheader/Makefile.am:
+ * gst/xingheader/gstxingmux.c: (parse_header), (get_xing_offset),
+ (has_xing_header), (generate_xing_header),
+ (gst_xing_mux_base_init), (gst_xing_mux_finalize), (xing_reset),
+ (gst_xing_mux_init), (gst_xing_mux_chain),
+ (gst_xing_mux_sink_event), (gst_xing_mux_change_state):
+ * gst/xingheader/gstxingmux.h:
+ Major cleanup and rewrite of xingmux with less bugs and new features:
+ - Handles other layers as 3
+ - Write TOC
+
+2008-01-10 17:24:09 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Call g_type_class_ref() from a thread-safe context and not from the streaming thread to avoid GLib ...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (GST_TYPE_MAD_MODE),
+ (GST_TYPE_MAD_EMPHASIS), (GST_TAG_EMPHASIS), (CHECK_HEADER):
+ Call g_type_class_ref() from a thread-safe context and not
+ from the streaming thread to avoid GLib screwing up (see
+ bug #349410 and #493432). Comment out unused code.
+
+2008-01-10 15:24:08 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Add buffer clipping.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
+ (handle_picture), (clip_buffer), (handle_slice),
+ (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
+ (gst_mpeg2dec_change_state):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Add buffer clipping.
+ Add basic reverse playback support. Not complete yet when dealing with
+ non-closed GOPs.
+
+2008-01-10 12:28:19 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We...
+ Original commit message from CVS:
+ * autogen.sh:
+ Add -Wno-portability to the automake parameters to stop warnings
+ about GNU make extensions being used. We require GNU make in almost
+ every Makefile anyway.
+ * configure.ac:
+ Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o
+ at the same time is required for per target flags.
+
+2008-01-09 13:51:38 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Makefile.am: Include lcov.mak to allow building coverage reports.
+ Original commit message from CVS:
+ * Makefile.am:
+ Include lcov.mak to allow building coverage reports.
+
+2008-01-08 19:42:38 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Make sure that the Xing TOC starts with 0 and the entries are increasing over time. Otherwise it's broken and should ...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (mpg123_parse_xing_header):
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_handle_first_frame):
+ Make sure that the Xing TOC starts with 0 and the entries
+ are increasing over time. Otherwise it's broken and should
+ be skipped. Fixes bug #507821.
+
+2008-01-08 16:31:29 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.*: Parse metadata object and extract pixel aspect ratio. Fixes #507844.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (asfdemux_dbg), (gst_asf_demux_reset),
+ (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_get_metadata_for_stream),
+ (gst_asf_demux_process_metadata), (gst_asf_demux_process_object),
+ (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Parse metadata object and extract pixel aspect ratio. Fixes #507844.
+
+2007-12-31 21:41:52 +0000 David Schleef <ds@schleef.org>
+
+ docs/plugins/.cvsignore: Add *-undeclared.txt
+ Original commit message from CVS:
+ * docs/plugins/.cvsignore:
+ Add *-undeclared.txt
+
+2007-12-21 14:01:06 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtmanager.*: Implement some more signals that rtspsrc connects to.
+ Original commit message from CVS:
+ * gst/realmedia/rdtmanager.c:
+ (gst_rdt_manager_marshal_VOID__UINT_UINT),
+ (gst_rdt_manager_class_init):
+ * gst/realmedia/rdtmanager.h:
+ Implement some more signals that rtspsrc connects to.
+ Fixes #504671.
+
+2007-12-18 09:07:53 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626).
+ Original commit message from CVS:
+ * Makefile.am:
+ Include common/win32.mak for CRLF check of win32 project
+ files (see #393626).
+
+2007-12-13 11:20:11 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Don't post SEGMENT_START messages on the bus, only the element driving the pi...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (mp3parse_handle_seek):
+ Don't post SEGMENT_START messages on the bus, only the element
+ driving the pipeline should do that.
+
+2007-12-09 04:29:35 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+ Original commit message from CVS:
+ * configure.ac:
+ Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+
+2007-12-03 19:05:20 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.h: Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
+ Fixes #500808.
+
+2007-11-20 12:15:51 +0000 Julien Moutte <julien@moutte.net>
+
+ gst/realmedia/rtspreal.c: Fix build on Mac OS X.
+ Original commit message from CVS:
+ 2007-11-20 Julien MOUTTE <julien@moutte.net>
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp): Fix build
+ on Mac OS X.
+
+2007-11-19 11:38:49 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Restore the segment handling logic.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ Restore the segment handling logic.
+ Please don't do behavioural changes under the heading of 'leak fixes'
+ or 'whitespace changes', people.
+
+2007-11-19 09:50:58 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Plug some leaks.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ Plug some leaks.
+
+2007-11-13 06:57:57 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfdemux.c: Sync _activate_pull() a little more with other demuxers.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ Sync _activate_pull() a little more with other demuxers.
+
+2007-11-11 20:41:32 +0000 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ gst/mpegstream/gstmpegdemux.c: recognize the padding stream
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegdemux.c:
+ recognize the padding stream
+
+2007-10-31 14:33:03 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Convert tags that come as string into the type required by
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_ext_content_desc):
+ Convert tags that come as string into the type required by
+ GstTagList.
+
+2007-10-30 12:27:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Remove some more broken code, it seems to clip even when it should not.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ Remove some more broken code, it seems to clip even when it should not.
+ See #491305.
+
+2007-10-30 11:13:49 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: When the element is not driving the streaming thread it is not supposed to em...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ When the element is not driving the streaming thread it is not supposed
+ to emit EOS or post SEGMENT done. It is allowed to return UNEXPECTED
+ upstream when it detects EOS. See #491305.
+
+2007-10-13 15:13:34 +0000 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+ gst/dvdsub/: Add dvd subtitle parser, which just packetizes the input stream. This is needed to mux dvd subtitles int...
+ Original commit message from CVS:
+ Patch by: Mark Nauwelaerts <mnauw at users.sourceforge.net>
+ * gst/dvdsub/Makefile.am:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/dvdsub/gstdvdsubparse.c:
+ * gst/dvdsub/gstdvdsubparse.h:
+ Add dvd subtitle parser, which just packetizes the input
+ stream. This is needed to mux dvd subtitles into matroska
+ files, since the muxer expects unfragmented and properly
+ timestamped input (#415754).
+
+2007-10-10 12:02:30 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Update requirements from past CVS versions to released versions (0.10.14 in this case).
+ Original commit message from CVS:
+ * configure.ac:
+ Update requirements from past CVS versions to released
+ versions (0.10.14 in this case).
+ * ext/sidplay/gstsiddec.cc:
+ Fix compilation with g++-4.2.
+
+2007-10-08 17:51:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/realmedia/: Fix some compiler warnings shown on Forte.
+ Original commit message from CVS:
+ * gst/realmedia/asmrules.c: (gst_asm_scan_parse_expression),
+ (gst_asm_scan_parse_condition):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+ Fix some compiler warnings shown on Forte.
+
+2007-10-05 08:51:44 +0000 Gautier Portet <kassoulet@gmail.com>
+
+ gst/xingheader/gstxingmux.c: The size of the Xing header is actually 417 as it's rounded to the next smaller integer....
+ Original commit message from CVS:
+ Patch by: Gautier Portet <kassoulet at gmail dot com>
+ * gst/xingheader/gstxingmux.c:
+ The size of the Xing header is actually 417 as it's rounded to the
+ next smaller integer. Fixes #397759.
+ * gst/xingheader/gstxingmux.c: (xing_generate_header),
+ (xing_push_header):
+ Some random cleanup, add FIXMEs and TODOs and check if the newsegment
+ event to the beginning was successful before pushing the header again.
+
+2007-09-29 17:11:16 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_util_guint64_to_gdouble for conversions.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_time_to_bytepos),
+ (mp3parse_bytepos_to_time):
+ Use gst_util_guint64_to_gdouble for conversions.
+ * win32/vs6/libgstmad.dsp:
+ Add a link to libgstaudio.
+
+2007-09-26 13:40:35 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: Fix up case where there is no peer, in which case _get_allowed_caps() will return NULL.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c:
+ Fix up case where there is no peer, in which case
+ _get_allowed_caps() will return NULL.
+
+2007-09-25 13:20:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: Use GST_PTR_FORMAT to print caps in debug statement.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c:
+ Use GST_PTR_FORMAT to print caps in debug statement.
+
+2007-09-25 09:16:05 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ configure.ac: Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
+ Original commit message from CVS:
+ * configure.ac:
+ Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
+ AG_GST_ARG_ENABLE_EXPERIMENTAL instead of duplicating those macros
+ in configure.ac.
+
+2007-09-24 10:26:21 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ ext/lame/gstlame.c: Allow fixing the sample rate lame converts to by negotiating fixed sample rate on the src pad caps.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c:
+ Allow fixing the sample rate lame converts to by negotiating fixed
+ sample rate on the src pad caps.
+ Add docs for it.
+ * tests/check/Makefile.am:
+ * tests/check/pipelines/lame.c:
+ Add a check for it.
+
+2007-09-22 18:22:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Updated translations.
+ Original commit message from CVS:
+ * po/LINGUAS:
+ * po/da.po:
+ Updated translations.
+
+2007-09-22 18:20:50 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/pl.po: Added Polish translation.
+ Original commit message from CVS:
+ translated by: Jakub Bogusz <qboosh@pld-linux.org>
+ * po/pl.po:
+ Added Polish translation.
+
+2007-09-22 18:19:08 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/fi.po: Added Finnish translation.
+ Original commit message from CVS:
+ translated by: Ilkka Tuohela <hile@iki.fi>
+ * po/fi.po:
+ Added Finnish translation.
+
+2007-09-22 18:17:52 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/es.po: Added Spanish translation.
+ Original commit message from CVS:
+ translated by: Jorge González González <aloriel@gmail.com>
+ * po/es.po:
+ Added Spanish translation.
+
+2007-09-22 18:17:08 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/bg.po: Added Bulgarian translation.
+ Original commit message from CVS:
+ translated by: Alexander Shopov <ash@contact.bg>
+ * po/bg.po:
+ Added Bulgarian translation.
+
+2007-09-20 11:47:52 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/iec958/ac3iec.c: Chainup in finalize.
+ Original commit message from CVS:
+ * gst/iec958/ac3iec.c:
+ Chainup in finalize.
+ * tests/check/Makefile.am:
+ * tests/check/generic/states.c:
+ Improved state change unit test.
+
+2007-09-19 18:20:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Ignore registries in any format.
+ Original commit message from CVS:
+ * docs/plugins/.cvsignore:
+ * tests/check/.cvsignore:
+ Ignore registries in any format.
+
+2007-09-08 20:54:54 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a define in the lame headers. This has the advan...
+ Original commit message from CVS:
+ * configure.ac:
+ Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a
+ define in the lame headers. This has the advantage that
+ it should still work when we're cross-compiling (#452025).
+
+2007-08-24 15:55:03 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.c: Add other allowed rates to the pad templates.
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ Add other allowed rates to the pad templates.
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose):
+ Reset the parser to release memory in dispose.
+
+2007-08-17 06:56:53 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/: Fix more leaks.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbparse.c:
+ * ext/sidplay/gstsiddec.cc:
+ Fix more leaks.
+
+2007-08-16 14:49:11 +0000 Daniel Charles <dcharles@ti.com>
+
+ ext/amrnb/amrnbenc.*: Add property to select the BandMode of the AMR encoder.
+ Original commit message from CVS:
+ Patch by: Daniel Charles <dcharles at ti dot com>
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_bandmode_get_type),
+ (gst_amrnbenc_set_property), (gst_amrnbenc_get_property),
+ (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
+ (gst_amrnbenc_chain), (gst_amrnbenc_state_change):
+ * ext/amrnb/amrnbenc.h:
+ Add property to select the BandMode of the AMR encoder.
+ See #466442.
+
+2007-08-16 12:15:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/realmedia/asmrules.c: Make ro memory to share.
+ Original commit message from CVS:
+ * gst/realmedia/asmrules.c:
+ Make ro memory to share.
+
+2007-08-16 11:52:57 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Queue segment event and push it after we know the caps on the pad or else an ...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Queue segment event and push it after we know the caps on the pad or
+ else an autoplugger might not have plugged the element yet and the
+ segment is lost.
+
+2007-08-16 07:17:13 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/iec958/ac3iec.c: Fix tests.
+ Original commit message from CVS:
+ * gst/iec958/ac3iec.c:
+ Fix tests.
+
+2007-08-16 06:48:13 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/: Add generic state-change test suite to help to fi leaks.
+ Original commit message from CVS:
+ * tests/check/Makefile.am:
+ * tests/check/generic/.cvsignore:
+ * tests/check/generic/states.c:
+ Add generic state-change test suite to help to fi leaks.
+
+2007-08-09 10:57:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Added Portuguese (Brazilian) translation.
+ Original commit message from CVS:
+ translated by: Raphael Higino <phhigino@gmail.com>
+ * po/LINGUAS:
+ * po/pt_BR.po:
+ Added Portuguese (Brazilian) translation.
+
+2007-08-09 10:55:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Updated translations.
+ Original commit message from CVS:
+ * po/hu.po:
+ * po/nl.po:
+ * po/sv.po:
+ * po/uk.po:
+ Updated translations.
+
+2007-08-07 11:50:44 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Activate timestamp fixing code.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_fix_timestamp),
+ (gst_rmdemux_parse_video_packet):
+ Activate timestamp fixing code.
+
+2007-08-07 10:57:09 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Do fragment collection in the demuxer so that we can now work with both ffmpeg and realvideo...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
+ (gst_rmdemux_chain), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
+ (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
+ Do fragment collection in the demuxer so that we can now work with
+ both ffmpeg and realvideodec to decoder real video content.
+
+2007-08-04 12:59:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/realmedia/asmrules.c: Include stdlib.h.
+ Original commit message from CVS:
+ * gst/realmedia/asmrules.c:
+ Include stdlib.h.
+
+2007-08-03 16:21:19 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtmanager.c: Fix caps.
+ Original commit message from CVS:
+ * gst/realmedia/rdtmanager.c:
+ Fix caps.
+
+2007-08-03 16:11:09 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rtspreal.c: Disable UDP transport for now.
+ Original commit message from CVS:
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+ (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
+ Disable UDP transport for now.
+
+2007-08-03 16:09:01 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Add simple rdt manager.
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rdtmanager.c: (find_session_by_id),
+ (create_session), (free_session), (gst_rdt_manager_base_init),
+ (gst_rdt_manager_marshal_BOXED__UINT_UINT),
+ (gst_rdt_manager_class_init), (gst_rdt_manager_init),
+ (gst_rdt_manager_finalize), (gst_rdt_manager_query_src),
+ (gst_rdt_manager_chain_rtp), (gst_rdt_manager_chain_rtcp),
+ (gst_rdt_manager_set_property), (gst_rdt_manager_get_property),
+ (gst_rdt_manager_provide_clock), (gst_rdt_manager_change_state),
+ (create_recv_rtp), (create_recv_rtcp), (create_rtcp),
+ (gst_rdt_manager_request_new_pad), (gst_rdt_manager_release_pad),
+ (gst_rdt_manager_plugin_init):
+ * gst/realmedia/rdtmanager.h:
+ * gst/realmedia/rmdemux.c: (plugin_init):
+ Add simple rdt manager.
+
+2007-08-03 14:19:50 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtdepay.c: Fix the encoding-name so that it matches what the rtsp extension sets.
+ Original commit message from CVS:
+ * gst/realmedia/rdtdepay.c:
+ Fix the encoding-name so that it matches what the rtsp extension sets.
+
+2007-08-02 19:37:41 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Use g_hash_table_destroy instead of _unref which is too new.
+ Original commit message from CVS:
+ * gst/realmedia/asmrules.c: (gst_asm_node_free),
+ (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
+ (gst_asm_scan_string), (gst_asm_scan_number),
+ (gst_asm_scan_identifier), (gst_asm_scan_print_token),
+ (gst_asm_scan_next_token), (gst_asm_rule_free),
+ (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
+ (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
+ (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
+ (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
+ (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
+ (gst_asm_rule_book_match), (main):
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
+ (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
+ Use g_hash_table_destroy instead of _unref which is too new.
+
+2007-08-02 19:30:05 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/.cvsignore: Add test to ignore.
+ Original commit message from CVS:
+ * gst/realmedia/.cvsignore:
+ Add test to ignore.
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/asmrules.c: (gst_asm_node_new),
+ (gst_asm_node_free), (gst_asm_operator_eval),
+ (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
+ (gst_asm_scan_string), (gst_asm_scan_number),
+ (gst_asm_scan_identifier), (gst_asm_scan_print_token),
+ (gst_asm_scan_next_token), (gst_asm_rule_new), (gst_asm_rule_free),
+ (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
+ (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
+ (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
+ (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
+ (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
+ (gst_asm_rule_book_match), (main):
+ * gst/realmedia/asmrules.h:
+ Added asembler rule book parser and evaluator.
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
+ (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
+ * gst/realmedia/rtspreal.h:
+ Keep per stream config info.
+ Parse and evaluate asm rule books for stream selection.
+
+2007-07-31 19:16:44 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/realmedia/rtspreal.c: Include stdlib.
+ Original commit message from CVS:
+ * gst/realmedia/rtspreal.c:
+ Include stdlib.
+
+2007-07-27 16:39:45 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Split out hash code in separate file.
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/realhash.c: (hash), (call_hash),
+ (gst_rtsp_ext_real_calc_response_and_checksum):
+ * gst/realmedia/realhash.h:
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+ (rtsp_ext_real_after_send), (rtsp_ext_real_stream_select):
+ Split out hash code in separate file.
+
+2007-07-27 10:12:55 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/: Fix include paths and link dependecies for rtsp extension.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_parse_sdp), (_do_init),
+ (gst_rtsp_wms_class_init):
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+ (rtsp_ext_real_before_send), (rtsp_ext_real_after_send),
+ (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
+ (_do_init), (gst_rtsp_real_class_init):
+ Fix include paths and link dependecies for rtsp extension.
+
+2007-07-26 15:52:43 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Add RealMedia RTSP extension module. It has rank NONE until it is fully functional.
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rmdemux.c: (plugin_init):
+ * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+ (rtsp_ext_real_before_send), (rtsp_ext_real_after_send), (hash),
+ (call_hash), (rtsp_ext_real_calc_response_and_checksum),
+ (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
+ (_do_init), (gst_rtsp_real_base_init), (gst_rtsp_real_class_init),
+ (gst_rtsp_real_init), (gst_rtsp_real_finalize),
+ (gst_rtsp_real_change_state), (gst_rtsp_real_extension_init),
+ (gst_rtsp_real_plugin_init):
+ * gst/realmedia/rtspreal.h:
+ Add RealMedia RTSP extension module. It has rank NONE until it is fully
+ functional.
+
+2007-07-25 18:38:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/: Move WMS RTSP extension from -good to here.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_before_send),
+ (gst_rtsp_wms_after_send), (gst_rtsp_wms_parse_sdp),
+ (gst_rtsp_wms_configure_stream), (_do_init),
+ (gst_rtsp_wms_base_init), (gst_rtsp_wms_class_init),
+ (gst_rtsp_wms_init), (gst_rtsp_wms_finalize),
+ (gst_rtsp_wms_change_state), (gst_rtsp_wms_extension_init):
+ * gst/asfdemux/gstrtspwms.h:
+ Move WMS RTSP extension from -good to here.
+ Port it to the new pluggable extension interface.
+
+2007-07-24 06:58:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/mad/Makefile.am: Link to audio helper from plugins-base.
+ Original commit message from CVS:
+ * ext/mad/Makefile.am:
+ Link to audio helper from plugins-base.
+
+2007-07-24 05:05:29 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Use the new buffer clipping function from gstaudio here and require gst-plugins-base CVS.
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Use the new buffer clipping function from gstaudio here and
+ require gst-plugins-base CVS.
+
+2007-07-23 09:07:19 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: Sync liboil check with plugins-base. Add libm check.
+ Original commit message from CVS:
+ * configure.ac:
+ Sync liboil check with plugins-base. Add libm check.
+ * gst/synaesthesia/Makefile.am:
+ Link against libm. We're using sqrt here.
+
+2007-07-20 07:58:25 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfdemux.c: Include stdlib.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ Include stdlib.
+
+2007-07-20 07:41:57 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/annodex/Makefile.am: Fix CFLAGS/LIBS.
+ Original commit message from CVS:
+ * ext/annodex/Makefile.am:
+ Fix CFLAGS/LIBS.
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/libpng/gstpngdec.c: (gst_pngdec_task):
+ Include stdlib
+ * ext/cairo/Makefile.am:
+ * gst/videofilter/Makefile.am:
+ * tests/examples/level/Makefile.am:
+ Use $(LIBM) instead of -lm
+
+2007-07-18 17:51:55 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Save some memory for each frame by only saving the start timestamp and start ...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+ (gst_mp3parse_emit_frame), (mp3parse_handle_seek):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Save some memory for each frame by only saving the start timestamp
+ and start byte position instead of additionally the stop timestamp
+ and stop byte position. This requires us to use a doubly-linked list
+ but still saves 8-12 bytes per frame.
+
+2007-07-16 09:14:18 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mad/gstmad.c: Fix buffer clipping to correctly clip to the segment stop.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (clip_outgoing_buffer):
+ Fix buffer clipping to correctly clip to the segment stop.
+
+2007-07-15 19:39:46 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Fix a calculation that was causing mp3parse to drop every incoming frame when...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_emit_frame):
+ Fix a calculation that was causing mp3parse to drop every incoming
+ frame when upstream delivered a segment in TIME format, breaking
+ playback of all mpeg system streams.
+
+2007-07-13 16:46:35 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ Remove bogus check for libcheck, since we check for gstreamer-check and it pulls in the required info from and we wer...
+ Original commit message from CVS:
+ * Makefile.am:
+ * configure.ac:
+ * tests/Makefile.am:
+ Remove bogus check for libcheck, since we check for
+ gstreamer-check and it pulls in the required info from
+ and we weren't actually _using_ the information for
+ libcheck ourselves anyway.
+
+2007-07-13 16:27:56 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Implement accurate seeking in mpegaudioparse. Fixes #308312.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+ (gst_mp3parse_init), (gst_mp3parse_dispose),
+ (gst_mp3parse_sink_event), (mp3parse_seek_table_last_entry),
+ (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
+ (mp3parse_handle_seek), (mp3parse_src_query):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Implement accurate seeking in mpegaudioparse. Fixes #308312.
+ Also implement segment seeks.
+
+2007-07-13 15:46:13 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mad/gstmad.*: Implement buffer clipping and use GST_BOILERPLATE instead of manual
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (_do_init), (gst_mad_init), (index_seek),
+ (normal_seek), (gst_mad_sink_event), (clip_outgoing_buffer),
+ (gst_mad_chain), (gst_mad_change_state):
+ * ext/mad/gstmad.h:
+ Implement buffer clipping and use GST_BOILERPLATE instead of manual
+ GType magic. Part one of bug #308312.
+
+2007-07-12 11:21:23 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: Use pkg-config to locate check.
+ Original commit message from CVS:
+ * configure.ac:
+ Use pkg-config to locate check.
+
+2007-07-11 23:18:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Fix build against core CVS by not using deprecated API. Bump requirements for new API (overdue anyway).
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_buffer):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+ Fix build against core CVS by not using deprecated API. Bump
+ requirements for new API (overdue anyway).
+
+2007-07-09 06:05:48 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ REQUIREMENTS: Also add amr-libs here and update a little.
+ Original commit message from CVS:
+ * REQUIREMENTS:
+ Also add amr-libs here and update a little.
+
+2007-07-06 17:59:29 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ docs/plugins/inspect/: Add inspect file for synaesthesia so the docs can be built even if the plugin isn't built yet....
+ Original commit message from CVS:
+ * docs/plugins/inspect/plugin-dvdnav.xml:
+ * docs/plugins/inspect/plugin-realmedia.xml:
+ * docs/plugins/inspect/plugin-synaesthesia.xml:
+ Add inspect file for synaesthesia so the docs can be built even if
+ the plugin isn't built yet. Fixes #454311. Also add inspect files
+ for dvdnavsrc and realmedia.
+
+2007-07-05 08:44:30 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ docs/plugins/Makefile.am: Simplify --extra-dir as gtkdoc scans recursively.
+ Original commit message from CVS:
+ * docs/plugins/Makefile.am:
+ Simplify --extra-dir as gtkdoc scans recursively.
+
+2007-07-03 13:05:01 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ And yet more docs enabled.
+ 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:
+ * gst/synaesthesia/Makefile.am:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/synaesthesia/gstsynaesthesia.h:
+ And yet more docs enabled.
+
+2007-07-03 11:55:45 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ docs/plugins/: Add new docs. Scan c++ files too.
+ 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/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-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:
+ Add new docs. Scan c++ files too.
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
+ (gst_amrnbdec_event):
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init):
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
+ (gst_amrnbparse_loop):
+ Add documentation headers.
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ Refactor for docs.
+
+2007-07-01 19:12:32 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Use GST_BOILERPLATE instead of manual GType magic.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_base_init),
+ (gst_mp3parse_init):
+ Use GST_BOILERPLATE instead of manual GType magic.
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+ (mp3parse_bytepos_to_time):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Implement seeking, byte->time, time->byte conversions with the Xing
+ seek table if available. This allows better at least a bit more
+ accurate seeks and file position reporting.
+
+2007-06-28 20:33:51 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Copy the complete Xing seek table in the 100 byte array instead of copying th...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_handle_first_frame):
+ Copy the complete Xing seek table in the 100 byte array instead of
+ copying the first byte 100 times.
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_total_bytes),
+ (mp3parse_total_time), (mp3parse_time_to_bytepos):
+ Add seeking support based on the Xing header but comment it out for
+ now as it seems to yield worse result than the other method.
+ Also use gst_pad_query_peer_duration() instead of getting the peer pad
+ ourself, creating a new GstQuery, etc.
+
+2007-06-25 12:46:47 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ docs/plugins/: Update docs with caps info.
+ Original commit message from CVS:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * 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:
+ Update docs with caps info.
+
+2007-06-25 12:25:09 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ po/POTFILES.in: Make sure dvdnav strings get translated too (no reason not to have them in the .po file, even if the ...
+ Original commit message from CVS:
+ * po/POTFILES.in:
+ Make sure dvdnav strings get translated too (no reason not to have
+ them in the .po file, even if the plugin is disabled for now).
+ Fixes #450879.
+
+2007-06-25 11:46:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/amrnb/: Add newsegment and discont handling. Some code cleanups.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
+ (gst_amrnbdec_event), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
+ (gst_amrnbparse_loop):
+ Add newsegment and discont handling. Some code cleanups.
+
+2007-06-25 07:55:51 +0000 David Schleef <ds@schleef.org>
+
+ ext/dvdread/dvdreadsrc.c: check for an error from
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: check for an error from
+ DVDReadBlocks() correctly.
+
+2007-06-25 07:22:10 +0000 David Schleef <ds@schleef.org>
+
+ ext/dvdread/dvdreadsrc.c: If we can't read a nav packet, or it doesn't look like a nav packet, that's an error. Prev...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c:
+ If we can't read a nav packet, or it doesn't look like a nav
+ packet, that's an error. Previous behavior was to look at
+ the next packet; I can't find any justification for doing that.
+ Fixes: #358891.
+
+2007-06-23 22:57:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/it.po: Updated Italian translation.
+ Original commit message from CVS:
+ * po/it.po:
+ Updated Italian translation.
+
+2007-06-23 11:22:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/vi.po: Updated Vietnames translation.
+ Original commit message from CVS:
+ * po/vi.po:
+ Updated Vietnames translation.
+
+2007-06-23 11:21:54 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Added Chinese (simplified) translation.
+ Original commit message from CVS:
+ contributed by: Wenzheng Hu <db_lobster@163.com>
+ * po/LINGUAS:
+ * po/zh_CN.po:
+ Added Chinese (simplified) translation.
+
+2007-06-22 14:27:18 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ MAINTAINERS: Updating all the maintainers files
+ Original commit message from CVS:
+ * MAINTAINERS:
+ Updating all the maintainers files
+
+2007-06-22 10:57:06 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ Fix leaks some more.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init):
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init):
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_init):
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_init):
+ * gst/iec958/ac3iec.c: (ac3iec_init):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
+ Fix leaks some more.
+
+2007-06-21 14:33:58 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: "She's leaking me", said valgrind.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init):
+ "She's leaking me", said valgrind.
+
+2007-06-19 14:40:20 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Fix "pad caps are not a real subset of its template caps" warning.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create):
+ Fix "pad caps are not a real subset of its template caps" warning.
+
+2007-06-19 14:15:50 +0000 Laurent Glayal <spglegle@yahoo.fr>
+
+ ext/amrnb/amrnbdec.c: Don't leak the adapter, unref it in a new finalize method instead.
+ Original commit message from CVS:
+ Patch by: Laurent Glayal <spglegle at yahoo dot fr>
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init),
+ (gst_amrnbdec_finalize):
+ Don't leak the adapter, unref it in a new finalize method instead.
+ Fixes #448782.
+
+2007-06-19 10:43:26 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Back to CVS
+ Original commit message from CVS:
+ * configure.ac:
+ Back to CVS
+ * gst-plugins-ugly.doap:
+ Add 0.10.6 to the list of releases.
+
+=== release 0.10.6 ===
+
+2007-06-19 10:31:04 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.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-siddec.xml:
+ Release 0.10.6
+ Original commit message from CVS:
+ Release 0.10.6
+
+2007-06-19 10:21:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2007-06-15 09:31:16 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ win32/vs6/: Convert line endings to CRLF and mark as binary files.
+ Original commit message from CVS:
+ * win32/vs6/gst_plugins_ugly.dsw:
+ * win32/vs6/libgstac3parse.dsp:
+ * win32/vs6/libgstasfdemux.dsp:
+ * win32/vs6/libgstdvdlpcmdec.dsp:
+ * win32/vs6/libgstdvdsub.dsp:
+ * win32/vs6/libgstiec958.dsp:
+ * win32/vs6/libgstlame.dsp:
+ * win32/vs6/libgstmad.dsp:
+ * win32/vs6/libgstmpegaudioparse.dsp:
+ * win32/vs6/libgstmpegstream.dsp:
+ * win32/vs6/libgstrealmedia.dsp:
+ * win32/vs6/libgstsynaesthesia.dsp:
+ Convert line endings to CRLF and mark as binary files.
+
+2007-06-13 14:29:39 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdnav/dvdnavsrc.c: Don't forget to unlock when setting the device property, or we'll sooner or later deadlock.
+ Original commit message from CVS:
+ * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_set_property):
+ Don't forget to unlock when setting the device property, or
+ we'll sooner or later deadlock.
+
+2007-06-12 21:46:10 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ gst/dvdsub/gstdvdsubdec.c: Use gst_util_guint64_to_gdouble for conversion.
+ Original commit message from CVS:
+ * gst/dvdsub/gstdvdsubdec.c:(gst_dvd_sub_dec_parse_subpic):
+ Use gst_util_guint64_to_gdouble for conversion.
+ * win32/vs6/libgstasfdemux.dsp:
+ Add asfpacket.c to the build.
+
+2007-06-08 08:39:43 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: If the Xing header provides a total time, use it to calculate the correct ave...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+ (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ If the Xing header provides a total time, use it to calculate the
+ correct average bitrate immediately, instead of sending updates as
+ we parse the stream.
+
+2007-06-05 21:47:29 +0000 by Mark Nauwelaerts <manauw@skynet.be>
+
+ gst/dvdsub/gstdvdsubdec.c: Use GstClockTime instead of guint for a time variable to prevent overflows on too large su...
+ Original commit message from CVS:
+ Patch by by: Mark Nauwelaerts <manauw at skynet dot be>
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
+ Use GstClockTime instead of guint for a time variable to prevent
+ overflows on too large subtitle durations. Fixes #444514.
+
+2007-05-31 22:33:26 +0000 Mark Nauwelaerts <manauw@skynet.be>
+
+ gst/dvdsub/gstdvdsubdec.c: Clear state when handling the serialized FLUSH_STOP event instead of the FLUSH_START event...
+ Original commit message from CVS:
+ Patch by: Mark Nauwelaerts <manauw at skynet be>
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_sink_event):
+ Clear state when handling the serialized FLUSH_STOP event instead of
+ the FLUSH_START event, thereby making sure we don't free buffers the
+ chain function is still using. Fixes dvdsubdec crashing when flusing
+ or seeking (#442706).
+
+2007-05-23 11:16:09 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Initialise variable to make fc4 build bot happy.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ Initialise variable to make fc4 build bot happy.
+
+2007-05-21 15:11:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegdemux.c: Add sanity check so we don't abort for broken or non-MPEG streams, but instead error o...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+ Add sanity check so we don't abort for broken or non-MPEG streams,
+ but instead error out. Fixes crashes/aborts for when our typefinder
+ wrongly identifies quicktime files as mpeg (which should be fixed in
+ -base now too). (#440120).
+
+2007-05-18 09:35:17 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ * ChangeLog:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbparse.c:
+ ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT, block_size, _do_init, gst_amrnbdec_base_init, gst_amrnbdec...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT,
+ block_size, _do_init, gst_amrnbdec_base_init,
+ gst_amrnbdec_class_init, gst_amrnbdec_init):
+ * ext/amrnb/amrnbenc.c (gst_amrnbenc_debug, GST_CAT_DEFAULT, _do_init,
+ gst_amrnbenc_base_init, gst_amrnbenc_class_init, gst_amrnbenc_init):
+ * ext/amrnb/amrnbparse.c (gst_amrnbparse_debug, GST_CAT_DEFAULT,
+ block_size, _do_init, gst_amrnbparse_base_init,
+ gst_amrnbparse_class_init, gst_amrnbparse_init):
+ First round of cleanups, that use GST_BOILERPLATE, GST_ELEMENT_DETAILS,
+ GST_DEBUG_FUNCPTR and add log-category.
+
+2007-05-18 08:42:25 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Implement parsing of Xing headers from the first frame of the stream, and use...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+ (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
+ (gst_mp3parse_chain), (mp3parse_total_bytes),
+ (mp3parse_total_time):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Implement parsing of Xing headers from the first frame of the stream,
+ and use it to report duration correctly where possible.
+
+2007-05-16 19:15:13 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: After descrambling, push the packets out as individual packets instead of one big descramble...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_cook_audio):
+ After descrambling, push the packets out as individual packets
+ instead of one big descrambled buffer. Makes cook audio decoding
+ work with the 'realaudiodec' decoder from gst-plugins-bad.
+
+2007-05-16 19:07:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.*: Remember first timestamp encountered in stream and re-timestamp stream to start from zero (f...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+ (gst_rmdemux_sink_event), (gst_rmdemux_perform_seek),
+ (gst_rmdemux_reset), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_packet):
+ * gst/realmedia/rmdemux.h:
+ Remember first timestamp encountered in stream and re-timestamp
+ stream to start from zero (fixes #397219); only send one newsegment
+ event, not two; when seeking, send newsegment events from the
+ streaming thread and not from the seeking thread.
+
+2007-05-16 12:48:43 +0000 Mark Nauwelaerts <manauw@skynet.be>
+
+ gst/mpegstream/: Reset last_flow values for the various streams after a flushing seek, otherwise we might aggregate w...
+ Original commit message from CVS:
+ Based on patch by: Mark Nauwelaerts <manauw skynet be>
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+ (gst_mpeg_demux_process_event), (gst_mpeg_streams_reset_last_flow):
+ * gst/mpegstream/gstmpegdemux.h:
+ Reset last_flow values for the various streams after a flushing
+ seek, otherwise we might aggregate wrong flow returns afterwards
+ that will make upstream pause silently. This should fix seeking
+ in DVDs and also fix the Thoggen cropping dialog (#438610).
+
+2007-05-07 13:51:43 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.*: Activate streams (ie. add the pads to the element) depending on whether we actually get d...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
+ (gst_asf_demux_chain_headers),
+ (gst_asf_demux_parse_data_object_start), (all_streams_prerolled),
+ (gst_asf_demux_have_mutually_exclusive_active_stream),
+ (gst_asf_demux_check_activate_streams),
+ (gst_asf_demux_find_stream_with_complete_payload),
+ (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
+ (gst_asf_demux_activate_ext_props_streams),
+ (gst_asf_demux_process_object):
+ * gst/asfdemux/gstasfdemux.h:
+ Activate streams (ie. add the pads to the element) depending on
+ whether we actually get data for those streams within the ASF
+ preroll value specified. Currently only done in pull-mode though
+ (this will fix problems with playbin hanging on mms streams once
+ we use this in push-mode as well).
+
+2007-05-04 11:04:16 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Make all timestamps start from zero in pull-mode too; some small clean-ups and FIXMEs here and there.
+ Original commit message from CVS:
+ * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
+ (gst_asf_demux_init), (gst_asf_demux_push_complete_payloads),
+ (gst_asf_demux_process_file):
+ * gst/asfdemux/gstasfdemux.h:
+ Make all timestamps start from zero in pull-mode too; some small
+ clean-ups and FIXMEs here and there.
+
+2007-05-01 11:10:31 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/asfpacket.c: If packet size is specified within the packet and smaller than the actual packet size, don'...
+ Original commit message from CVS:
+ * gst/asfdemux/asfpacket.c: (gst_asf_demux_parse_payload),
+ (gst_asf_demux_parse_packet):
+ If packet size is specified within the packet and smaller than
+ the actual packet size, don't parse beyond the size specified in
+ the packet (this makes us parse some cases of packets with single
+ compressed payloads cleanly, see e.g stream from #431318). Also
+ add a sanity check when parsing compressed single payloads.
+
+2007-05-01 09:19:13 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only send data from the keyframe ri...
+ Original commit message from CVS:
+ * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_seek_index_lookup),
+ (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_push_complete_payloads):
+ Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only
+ send data from the keyframe right before the new segment start to
+ make sure the decoder doesn't have to decode more than absolutely
+ necessary.
+
+2007-04-30 15:36:00 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Implement payload extension system/extended replicated data parsing, so we can extract payload duratio...
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/asfpacket.c:
+ (asf_payload_parse_replicated_data_extensions),
+ (gst_asf_demux_parse_payload):
+ * gst/asfdemux/asfpacket.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+ (gst_asf_demux_push_complete_payloads),
+ (gst_asf_demux_process_ext_stream_props):
+ * gst/asfdemux/gstasfdemux.h:
+ Implement payload extension system/extended replicated data parsing,
+ so we can extract payload durations if they're specified.
+
+2007-04-30 11:41:22 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Refactor stream parse/activation a bit (stream activation heuristics are still the same though); some ...
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+ (gst_asf_demux_reset), (gst_asf_demux_parse_data_object_start),
+ (gst_asf_demux_loop), (gst_asf_demux_setup_pad),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_activate_stream),
+ (gst_asf_demux_parse_stream_object),
+ (gst_asf_demux_process_ext_stream_props),
+ (gst_asf_demux_process_queued_extended_stream_objects),
+ (gst_asf_demux_activate_ext_props_streams),
+ (gst_asf_demux_process_object):
+ * gst/asfdemux/gstasfdemux.h:
+ Refactor stream parse/activation a bit (stream activation heuristics
+ are still the same though); some more clean-ups.
+
+2007-04-28 12:23:16 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ win32/common/.cvsignore: Ignore generated config.h file to make build bot happy.
+ Original commit message from CVS:
+ * win32/common/.cvsignore:
+ Ignore generated config.h file to make build bot happy.
+
+2007-04-28 10:49:17 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Init debug category before using it.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init):
+ * gst/asfdemux/gstasfdemux.h:
+ Init debug category before using it.
+
+2007-04-27 18:39:21 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Fix silly bug when we can't pull as much data as we want; don't forget to announce pendin...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_pull_data),
+ (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop):
+ Fix silly bug when we can't pull as much data as we want; don't
+ forget to announce pending tags in the new packet parsing code.
+
+2007-04-25 17:23:33 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Generate a win32 config.h into win32/common and add to MANIFEST so it gets disted (#393890). Looks like win32/common/...
+ Original commit message from CVS:
+ * configure.ac:
+ * win32/MANIFEST:
+ Generate a win32 config.h into win32/common and add to MANIFEST so
+ it gets disted (#393890). Looks like win32/common/config.h.in needs
+ some work though.
+
+2007-04-22 22:41:20 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/amrnb/amrnbparse.c: Fix pull mode operation some more: send newsegment event before sending data; handle EOS and ...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
+ (gst_amrnbparse_class_init), (gst_amrnbparse_init),
+ (gst_amrnbparse_pull_header), (gst_amrnbparse_loop):
+ Fix pull mode operation some more: send newsegment event before
+ sending data; handle EOS and fatal flow returns a bit better; don't
+ leak buffers in some cases. Misc. minor cleanups. Fixes #431707.
+
+2007-04-20 20:57:56 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: New packet parsing code: should put halfway decent timestamps on buffers, and might even set the appro...
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/asfpacket.c: (asf_packet_read_varlen_int),
+ (asf_packet_create_payload_buffer),
+ (asf_payload_find_previous_fragment),
+ (gst_asf_payload_queue_for_stream), (gst_asf_demux_parse_payload),
+ (gst_asf_demux_parse_packet):
+ * gst/asfdemux/asfpacket.h:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_reset_stream_state_after_discont),
+ (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
+ (gst_asf_demux_setup_pad), (gst_asf_demux_descramble_buffer),
+ (gst_asf_demux_process_chunk):
+ * gst/asfdemux/gstasfdemux.h:
+ New packet parsing code: should put halfway decent timestamps on
+ buffers, and might even set the appropriate keyframe/discont buffer
+ flags from time to time (and even if it doesn't, I'm at least able
+ to debug this code); only used in pull-mode so far. Still needs
+ some more work, like payload extensions parsing and proper flow
+ aggregation, and stream activation based on preroll. Stay tuned.
+
+2007-04-20 17:32:00 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Some clean-ups and small fixes: rename asf_stream_context structure to
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+ (gst_asf_demux_seek_index_lookup),
+ (gst_asf_demux_handle_seek_event), (gst_asf_demux_get_stream),
+ (gst_asf_demux_setup_pad), (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_process_file), (gst_asf_demux_descramble_segment),
+ (gst_asf_demux_push_buffer), (gst_asf_demux_process_chunk),
+ (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
+ * gst/asfdemux/gstasfdemux.h:
+ Some clean-ups and small fixes: rename asf_stream_context structure to
+ AsfStream; inline some three-line utility functions that are only used
+ once anyway and get rid of their associated helper structs; make debug
+ category global so that it is used by the debug statements in the other
+ file as well; simplify gst_asf_demux_get_stream(); fix accidental
+ implicit initialisation of stream->last_buffer_timestamp to 0, which
+ would lead to missing timestamps on the first buffer; put fourcc format
+ into video caps to make certain proprietary wmv decoders happy (for the
+ case of WMVA in particular); play_time is offset by preroll as well, so
+ fix overreporting of duration for some files.
+
+2007-04-17 10:21:50 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Printf format fixes.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_pull_indices):
+ Printf format fixes.
+
+2007-04-16 16:30:50 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegparse.c: Post an error message if EOS wasn't handled by anything downstream.
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+ (gst_mpeg_parse_send_event):
+ Post an error message if EOS wasn't handled by anything downstream.
+ This should fix playbin freezing/hanging with small VobSub subtitle
+ files (background: not-linked flow returns from downstream are
+ ignored for a while at the beginning, so if the file is small
+ upstream will never get a not-linked flow return even if nothing
+ is connected downstream). (#429960).
+
+2007-04-16 15:15:07 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/amrnb/amrnbparse.c: Rewrite terminally broken sinkpad activation code. and push mode activation doesn't leave the...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_sink_activate),
+ (gst_amrnbparse_sink_activate_pull):
+ Rewrite terminally broken sinkpad activation code.
+ Now actually supports pull-mode activation (didn't before), and push
+ mode activation doesn't leave the sinkpad flushing.
+
+2007-04-12 13:38:03 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Make asfdemux work in pull mode where possible. If there's an index at the end of the file, read it an...
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+ (gst_asf_demux_reset), (gst_asf_demux_init),
+ (gst_asf_demux_activate), (gst_asf_demux_activate_push),
+ (gst_asf_demux_activate_pull), (gst_asf_demux_sink_event),
+ (gst_asf_demux_seek_index_lookup),
+ (gst_asf_demux_reset_stream_state_after_discont),
+ (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_handle_src_event), (gst_asf_demux_chain_headers),
+ (gst_asf_demux_chain), (gst_asf_demux_pull_data),
+ (gst_asf_demux_pull_indices),
+ (gst_asf_demux_parse_data_object_start),
+ (gst_asf_demux_pull_headers), (gst_asf_demux_loop),
+ (gst_asf_demux_setup_pad), (gst_asf_demux_process_file),
+ (gst_asf_demux_process_simple_index),
+ (gst_asf_demux_process_object),
+ (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
+ (gst_asf_demux_handle_data), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Make asfdemux work in pull mode where possible. If there's an index
+ at the end of the file, read it and use it for seeking purposes.
+
+2007-04-12 10:19:18 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/synaesthesia/gstsynaesthesia.c: Some timestamp fixes.
+ Original commit message from CVS:
+ * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+ (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_setcaps),
+ (gst_synaesthesia_chain), (gst_synaesthesia_change_state):
+ Some timestamp fixes.
+ * gst/synaesthesia/synaescope.c: (synaescope_coreGo):
+ Fix for 64-bit machines.
+
+2007-04-12 10:10:22 +0000 René Stadler <mail@renestadler.de>
+
+ gst/realmedia/rmdemux.*: Make rmdemux handle any number of logical streams. Fixes #428698.
+ Original commit message from CVS:
+ Patch by: René Stadler <mail at renestadler dot de>
+ * gst/realmedia/rmdemux.c: (find_seek_offset_bytes),
+ (find_seek_offset_time), (gst_rmdemux_reset),
+ (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
+ (gst_rmdemux_add_stream), (gst_rmdemux_combine_flows):
+ * gst/realmedia/rmdemux.h:
+ Make rmdemux handle any number of logical streams. Fixes #428698.
+
+2007-04-05 13:48:52 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * po/nl.po:
+ update dutch
+ Original commit message from CVS:
+ update dutch
+
+2007-04-05 13:48:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Added Danish translation.
+ Original commit message from CVS:
+ submitted by: Mogens Jaeger <mogens@jaeger.tf>
+ * po/LINGUAS:
+ * po/da.po:
+ Added Danish translation.
+
+2007-03-28 16:01:06 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ po/.cvsignore: Add pot.
+ Original commit message from CVS:
+ * po/.cvsignore:
+ Add pot.
+
+2007-03-27 12:02:49 +0000 Julien Moutte <julien@moutte.net>
+
+ ext/mad/gstmad.c: Generate a perfect stream and try to adapt to incoming timestamps lack of precision up to half a fr...
+ Original commit message from CVS:
+ 2007-03-27 Julien MOUTTE <julien@moutte.net>
+ * ext/mad/gstmad.c: (gst_mad_chain): Generate a perfect
+ stream and try to adapt to incoming timestamps lack of
+ precision up to half a frame. This allows generating
+ a perfect stream even with muxed formats like FLV where
+ the timestamps are stored in milliseconds.
+
+2007-03-22 21:44:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Remove unused zlib.h include. Fixes #421594.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c:
+ Remove unused zlib.h include. Fixes #421594.
+
+2007-03-21 12:53:57 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/lame/gstlame.c: Disable the bitrate checking when the user has requested
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_setup):
+ Disable the bitrate checking when the user has requested
+ Free Format mode, as all bitrates less than the maximum
+ are valid then.
+
+2007-03-14 15:21:41 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ po/: Update translations.
+ Original commit message from CVS:
+ * po/hu.po:
+ * po/it.po:
+ * po/sv.po:
+ Update translations.
+
+2007-03-12 17:26:13 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mad/gstmad.c: When handling seeks, don't convert -1 start or stop values to a bogus byte position - pass them ups...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src):
+ When handling seeks, don't convert -1 start or stop values to a bogus
+ byte position - pass them upstream as -1.
+
+2007-03-12 10:47:01 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Implement seeking via average bitrate, and position+duration querying in mp3p...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+ (gst_mp3parse_init), (gst_mp3parse_sink_event),
+ (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
+ (gst_mp3parse_change_state), (mp3parse_time_to_bytepos),
+ (mp3parse_bytepos_to_time), (mp3parse_total_bytes),
+ (mp3parse_total_time), (mp3parse_handle_seek),
+ (mp3parse_src_event), (mp3parse_src_query),
+ (mp3parse_get_query_types), (plugin_init):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Implement seeking via average bitrate, and position+duration
+ querying in mp3parse. Later, it will support frame-accurate seeking by
+ building a seek table as it parses.
+ Add 'parsed=false' to the sink pad caps, and 'parsed=true' to the src
+ pad caps. Bump the priority to PRIMARY+1 so that it is autoplugged
+ before any extant MP3 decoder plugin. This allows us to remove framing
+ support from the decoders, if we want, and will provide them with
+ accurate seeking automatically once it is finished.
+ Fix the handling of MPEG-1 Layer 1 files.
+ Partially fix timestamping of packets arriving from a demuxer by
+ queueing the incoming timestamp until the next packet starts, rather
+ than applying it immediately to the next pushed buffer.
+
+2007-03-10 15:56:26 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Printf format fix.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_header_ext):
+ Printf format fix.
+
+2007-03-04 17:13:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/cdio/gstcdiocddasrc.c: Make sure we always destroy our libcdio handle.
+ Original commit message from CVS:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open),
+ (gst_cdio_cdda_src_finalize):
+ Make sure we always destroy our libcdio handle.
+
+2007-03-02 16:08:17 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/cdio/gstcdiocddasrc.c: Small code cleanups.
+ Original commit message from CVS:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_probe_devices),
+ (gst_cdio_cdda_src_read_sector), (gst_cdio_cdda_src_open),
+ (gst_cdio_cdda_src_finalize):
+ Small code cleanups.
+ Don't use pad_alloc as the base class cannot deal with the error codes.
+
+2007-03-02 13:01:48 +0000 Zaheer Abbas Merali <zaheermerali@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Never post a (fatal) error message on the bus on decoding errors. We should only do this ...
+ Original commit message from CVS:
+ Patch by: Zaheer Abbas Merali <zaheermerali at gmail com>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
+ Never post a (fatal) error message on the bus on decoding errors. We
+ should only do this if we can't recover, but mpeg2dec can always
+ recover. This is needed for DVB streams, for example, where there
+ may be temporary glitches in the stream. Instead of an error
+ message, post a warning message on the bus for every N decoding
+ errors. Fixes #370020.
+
+2007-02-28 19:30:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ configure.ac: Convert to new AG_GST style.
+ Original commit message from CVS:
+ * configure.ac:
+ Convert to new AG_GST style.
+
+2007-02-28 18:41:38 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/lame/gstlame.c: Display sensible defaults and limits for the vbr-min/max/mean properties. Fix the 'hard-limit' VB...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
+ (gst_lame_setup):
+ Display sensible defaults and limits for the
+ vbr-min/max/mean properties. Fix the 'hard-limit' VBR min
+ property - it's supposed to be a boolean 0/1 value.
+
+2007-02-28 16:01:08 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/lame/gstlame.c: Initialise the variables so gcc doesn't complain about possibly uninitialised uses, even though t...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c:
+ Initialise the variables so gcc doesn't complain about possibly
+ uninitialised uses, even though they can't actually happen.
+
+2007-02-28 15:52:23 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.*: Implement all sample rates.
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+ (update_timestamps), (parse_header), (gst_dvdlpcmdec_chain_dvd),
+ (gst_dvdlpcmdec_chain_raw), (dvdlpcmdec_sink_event):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ Implement all sample rates.
+ Implement sample permutation a little smarter avoiding a memcpy.
+ Fix timestamps, use segments, fix seeking.
+
+2007-02-28 15:49:35 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ Document siddec.
+ 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/inspect/plugin-siddec.xml:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ Document siddec.
+
+2007-02-21 16:02:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ ext/lame/gstlame.c: Fix up bitrate checking macro. Make it give us a
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+ (gst_lame_set_property), (gst_lame_setup):
+ Fix up bitrate checking macro. Make it give us a
+ GST_ELEMENT_WARNING message so the application has a chance of
+ reporting this to the user. Move the checking to _setup, so we
+ are sure it runs in the READY state, when we hope to have a pipeline
+ and a bus that is not flushing.
+ This fixes e.g. using 96 kbit/sec as a bitrate.
+
+2007-02-15 19:55:55 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.*: Parse advanced mutual exclusion object and only add pads for 'hidden' streams (those in a...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file),
+ (gst_asf_demux_process_advanced_mutual_exclusion),
+ (gst_asf_demux_process_queued_extended_stream_objects),
+ (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Parse advanced mutual exclusion object and only add pads for
+ 'hidden' streams (those in an extended stream header) that are
+ mutually exclusive with an already existing 'main stream' if
+ the broadcasting flag is not set. If the broadcasting flag is set,
+ assume that data for this stream isn't sent. (This should ideally be
+ solved better by making playbin more robust against this and/or by
+ making mmssrc send some information downstream about which streams
+ will be streamed). Fixes #353116.
+
+2007-02-13 12:00:59 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/synaesthesia/: Move all the mutable engine state into a structure so that multiple element instances can run with...
+ Original commit message from CVS:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+ (gst_synaesthesia_finalize), (gst_synaesthesia_chain):
+ * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
+ (synaescope32), (synaescope_set_data), (synaesthesia_update),
+ (synaesthesia_init), (synaesthesia_new), (synaesthesia_close):
+ * gst/synaesthesia/synaescope.h:
+ Move all the mutable engine state into a structure so that
+ multiple element instances can run without interfering.
+
+2007-02-13 09:15:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Add crossreferences to glib/gobject/gstream docs.
+ Original commit message from CVS:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ Add crossreferences to glib/gobject/gstream docs.
+
+2007-02-12 12:46:20 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/synaesthesia/: More source cleanups and add FIXME comments.
+ Original commit message from CVS:
+ * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+ (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+ (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
+ (plugin_init):
+ * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
+ (synaescope8):
+ More source cleanups and add FIXME comments.
+
+2007-02-11 13:42:45 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ gst/realmedia/rmdemux.c: Use gst_guint64_to_gdouble for conversions.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c:(gst_rmdemux_parse_indx_data):
+ Use gst_guint64_to_gdouble for conversions.
+ * gst/synaesthesia/synaescope.c:
+ Define M_PI and do not include <pthread.h> and
+ <sys/time.h> for G_OS_WIN32
+ * win32/vs6/libgstrealmedia.dsp:
+ * win32/vs6/synaesthesia.dsp:
+ Update projects files.
+ * win32/common/config.h.in:
+ Add config.h.in for autogen of config.h
+
+2007-02-11 10:51:42 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: Add --enable-experimental support. Activate synaesthesia when building with --enable-experimental. Fix ...
+ Original commit message from CVS:
+ * configure.ac:
+ Add --enable-experimental support. Activate synaesthesia when building
+ with --enable-experimental. Fix --enable external configure switch
+ description.
+
+2007-02-09 16:24:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.*: On receiving EOS, we try to push a last buffer with the remaining samples. Don't do that if we go...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
+ (gst_lame_change_state):
+ * ext/lame/gstlame.h:
+ On receiving EOS, we try to push a last buffer with the remaining
+ samples. Don't do that if we got an unclean flow return on the last
+ gst_pad_push(), downstream might not handle this very gracefully
+ (see #403168).
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ Pass flow returns upstream (helps #403168).
+
+2007-02-09 08:03:09 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/synaesthesia/gstsynaesthesia.c: check result of gst_pad_push() in _chain.
+ Original commit message from CVS:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+ (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+ (gst_synaesthesia_chain), (plugin_init):
+ check result of gst_pad_push() in _chain.
+
+2007-02-09 07:48:50 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/synaesthesia/: Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not built by default). Fixe...
+ Original commit message from CVS:
+ * gst/synaesthesia/Makefile.am:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+ (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+ (gst_synaesthesia_chain), (plugin_init):
+ * gst/synaesthesia/synaescope.c:
+ * gst/synaesthesia/synaescope.h:
+ Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not
+ built by default). Fixed Makefile.am. Fixed license headers (its GPL as it
+ is derived from GPL code). Fixed GST_SYNAESTHESIA_CLASS macro. Added
+ GST_DEBUG_FUNCPTR. Reflowed _setcaps. Updated pad setup in _init. Fix
+ possible leak in _chain. (#356882)
+
+2007-02-08 21:07:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Refactor and clean up header parsing and chain function a bit; get rid of some cruft; make header pars...
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+ (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_identify_guid), (asf_demux_peek_object),
+ (gst_asf_demux_chain_headers), (gst_asf_demux_chain),
+ (gst_asf_demux_setup_pad), (gst_asf_demux_process_stream),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_get_object_header), (gst_asf_demux_process_header),
+ (gst_asf_demux_process_file), (gst_asf_demux_process_comment),
+ (gst_asf_demux_process_bitrate_props_object),
+ (gst_asf_demux_process_header_ext),
+ (gst_asf_demux_process_language_list),
+ (gst_asf_demux_process_ext_stream_props),
+ (gst_asf_demux_process_queued_extended_stream_objects),
+ (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Refactor and clean up header parsing and chain function a bit; get
+ rid of some cruft; make header parsing a tad more robust, fixing
+ #403188.
+
+2007-02-01 11:12:25 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Post an error if we receive an EOS event while still waiting for the
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
+ Post an error if we receive an EOS event while still waiting for the
+ ASF header object to come through.
+
+2007-01-24 17:36:36 +0000 Xavier B <xavierb@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Guard places where we assume that a certain amount of data is available better against le...
+ Original commit message from CVS:
+ Patch by: Xavier B. <xavierb gmail com>
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_guid),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_process_data),
+ (gst_asf_demux_process_language_list),
+ (gst_asf_demux_process_ext_stream_props),
+ (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
+ Guard places where we assume that a certain amount of data is
+ available better against less data being available (should fix
+ infamous assertion crasher bug #336370). Also fixes a small
+ memory leak.
+
+2007-01-11 12:49:23 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/: Add demuxer for RealAudio files (#349779).
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rademux.c:
+ * gst/realmedia/rademux.h:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_descramble_dnet_audio), (gst_rmdemux_plugin_init):
+ * gst/realmedia/rmutils.c: (gst_rm_utils_descramble_dnet_buffer):
+ * gst/realmedia/rmutils.h:
+ Add demuxer for RealAudio files (#349779).
+
+2007-01-07 13:37:19 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ Makefile.am: Add win32/MANIFEST to EXTRA_DIST so win32 files will be include in the next release.
+ Original commit message from CVS:
+ * Makefile.am:
+ Add win32/MANIFEST to EXTRA_DIST so win32 files will
+ be include in the next release.
+ * win32/MANIFEST:
+ Remove win32/common/config.h is which is not autogenerated yet.
+
+2006-12-30 20:01:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ ext/lame/gstlame.c: warn when outgoing sample rate is different from incoming
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_setcaps), (gst_lame_chain):
+ warn when outgoing sample rate is different from incoming
+
+2006-12-29 14:51:19 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: All sample-rates < 32khz come from the LSF extensions, which only use 1 granu...
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ All sample-rates < 32khz come from the LSF extensions, which only
+ use 1 granule. Fixes parsing of 22.05khz, 24khz and 16khz files.
+ Use gst_util_uint64_scale because we can.
+
+2006-12-22 13:06:24 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/elements/amrnbenc.c: and fix compilation of this test
+ Original commit message from CVS:
+ * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+ (cleanup_amrnbenc):
+ and fix compilation of this test
+
+2006-12-22 12:41:52 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/elements/: re-apply as it was -bad and not -ugly that is frozen, doh
+ Original commit message from CVS:
+ * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+ (cleanup_amrnbenc):
+ * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+ (cleanup_mpeg2dec):
+ re-apply as it was -bad and not -ugly that is frozen, doh
+
+2006-12-21 12:50:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/elements/: revert my freeze breakage
+ Original commit message from CVS:
+ * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+ (cleanup_amrnbenc):
+ * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+ (cleanup_mpeg2dec):
+ revert my freeze breakage
+
+2006-12-21 08:16:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfdemux.c: add a comment about a future change
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_get_gst_tag_from_tag_name),
+ (gst_asf_demux_process_ext_content_desc):
+ add a comment about a future change
+ * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+ (cleanup_amrnbenc):
+ * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+ (cleanup_mpeg2dec):
+ consistent pad (de)activation
+
+2006-12-15 18:26:41 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Update query_types function too.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_src_query_types):
+ Update query_types function too.
+
+2006-12-15 18:25:17 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Implement SEEKING query, make query function thread-safe.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query),
+ (gst_rmdemux_src_query_types):
+ Implement SEEKING query, make query function thread-safe.
+
+2006-12-15 17:59:47 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Use alignment-safe macros here too (subbuffers ...); guard against hypothetical memory acces...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
+ Use alignment-safe macros here too (subbuffers ...); guard against
+ hypothetical memory access beyond our given buffer in the case
+ where the buffer size is not a multiple of 2.
+
+2006-12-15 17:54:48 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.*: Don't crash in the seek event handling code when playtime is 0, as may be the case with l...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_process_data), (gst_asf_demux_process_file),
+ (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Don't crash in the seek event handling code when playtime is 0,
+ as may be the case with live streams (#386218). Implement SEEKING
+ query so applications can query seekability without second-guessing
+ based on whether we have a duration or not.
+
+2006-12-15 11:12:21 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ add doap file
+ Original commit message from CVS:
+ * Makefile.am:
+ * gst-plugins-ugly.doap:
+ * gst-plugins-ugly.spec.in:
+ add doap file
+
+2006-12-14 12:05:49 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegparse.c: Use our alignment-safe macros here too, since we can't assume that
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+ Use our alignment-safe macros here too, since we can't assume that
+ GST_BUFFER_DATA is aligned (these are subbuffers we're dealing with
+ here).
+
+2006-12-14 11:49:39 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Also, don't read the index for a stream a second time when operating in pull-mode and reachi...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_indx_data):
+ Also, don't read the index for a stream a second time when
+ operating in pull-mode and reaching the end of the file.
+
+2006-12-14 11:25:00 +0000 Roland Kay <roland.kay@ox.compsoc.net>
+
+ gst/realmedia/rmdemux.c: Don't leak stream index (#385292).
+ Original commit message from CVS:
+ Patch by: Roland Kay <roland.kay at ox compsoc net>
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_reset):
+ Don't leak stream index (#385292).
+
+2006-12-14 10:15:24 +0000 Roland Kay <roland.kay@ox.compsoc.net>
+
+ ext/lame/gstlame.*: Fix leak (by calling lame_init_params() before lame_close()); handle
+ Original commit message from CVS:
+ Based on patch by: Roland Kay <roland.kay at ox compsoc net>
+ * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
+ (gst_lame_setup):
+ * ext/lame/gstlame.h:
+ Fix leak (by calling lame_init_params() before lame_close()); handle
+ NULL return from lame_init() more gracefully. Fixes #385311.
+
+2006-12-14 09:57:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Back to CVS
+ Original commit message from CVS:
+ * configure.ac:
+ Back to CVS
+
+=== release 0.10.5 ===
+
+2006-12-13 21:04:12 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-asf.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-siddec.xml:
+ Release 0.10.5
+ Original commit message from CVS:
+ Release 0.10.5
+
+2006-12-12 21:09:16 +0000 David Schleef <ds@schleef.org>
+
+ gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant to in the previous checkin. see #385192. You can have...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant
+ to in the previous checkin. see #385192. You can have your
+ cheese back now.
+
+2006-12-12 20:56:58 +0000 David Schleef <ds@schleef.org>
+
+ gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads from the dereferenced integer, not the pointer itself. ...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads
+ from the dereferenced integer, not the pointer itself. Fixes
+ #385192.
+ I'm takin ur cheese!
+
+2006-12-12 10:29:32 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ * ChangeLog:
+ ChangeLog surgery: fix bug number
+ Original commit message from CVS:
+ ChangeLog surgery: fix bug number
+
+2006-12-12 10:24:40 +0000 Roland Kay <roland.kay@ox.compsoc.net>
+
+ gst/realmedia/rmdemux.c: For version 4 streams, read the extra codec data size from the header instead of assuming it...
+ Original commit message from CVS:
+ Based on patch by: Roland Kay <roland.kay at ox compsoc net>
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
+ For version 4 streams, read the extra codec data size from the
+ header instead of assuming it is always 16 (also read it from the
+ right position) (#384989). For version 4 and 5 streams, check that
+ the specified extra codec data size doesn't make us read beyond the
+ chunk boundary (#384989).
+
+2006-12-10 21:27:03 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2006-11-21 12:33:25 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Cosmetic changes: fix misleading debug statement, update comment, add cast.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf):
+ Cosmetic changes: fix misleading debug statement, update
+ comment, add cast.
+
+2006-11-21 12:15:58 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Align buffers to a 16 byte boundary so the altivec optimisations don't crash. Fixes #327350.
+ Original commit message from CVS:
+ Patch by: Sebastian Dröge <slomo@circular-chaos.org>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+ (gst_mpeg2dec_reset), (gst_mpeg2dec_alloc_sized_buf),
+ (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Align buffers to a 16 byte boundary so the altivec optimisations
+ don't crash. Fixes #327350.
+
+2006-11-20 15:52:42 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: The availability of extra codec data isn't something that warrants debug messages at WARN...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream):
+ The availability of extra codec data isn't something that
+ warrants debug messages at WARNING level (see #376958).
+
+2006-11-19 13:08:30 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Fix flow value combination; this fixes playbin/totem locking up if a VobSub file is specified as sub...
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+ (gst_dvd_demux_class_init), (gst_dvd_demux_combine_flows),
+ (gst_dvd_demux_send_subbuffer):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+ (gst_mpeg_demux_init_stream), (gst_mpeg_demux_parse_packet),
+ (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_combine_flows),
+ (gst_mpeg_demux_send_subbuffer):
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+ (gst_mpeg_parse_chain):
+ Fix flow value combination; this fixes playbin/totem locking up if
+ a VobSub file is specified as subtitle file (#334322). Flow value
+ combination should only happen once we are fairly sure we've got all
+ pads that are available for now. Since there isn't a well-specified
+ time when this is the case in MPEG, we'll just assume this is the
+ case once there has been a certain number of packets for each
+ stream we've found so far.
+
+2006-11-15 13:57:21 +0000 Jan Arne Petersen <jpetersen@jpetersen.org>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Simplify the framerate code and support more framerates. Fixes #361584.
+ Original commit message from CVS:
+ Patch by: Jan Arne Petersen <jpetersen at jpetersen dot org>
+ * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence), (handle_slice):
+ Simplify the framerate code and support more framerates. Fixes #361584.
+
+2006-11-15 11:41:39 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Fix minor memleak when creating pads from static pad templates (#369627).
+ Original commit message from CVS:
+ Patch by: Sebastian Dröge <slomo@circular-chaos.org>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init):
+ Fix minor memleak when creating pads from static pad templates (#369627).
+ * tests/check/Makefile.am:
+ * tests/check/elements/.cvsignore:
+ * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+ (cleanup_mpeg2dec), (GST_START_TEST), (mpeg2dec_suite), (main):
+ Add unit tests for mpeg2dec (#369627).
+
+2006-11-14 10:31:11 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ * ChangeLog:
+ give credit
+ Original commit message from CVS:
+ give credit
+
+2006-11-14 10:29:37 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/lame/gstlame.*: Make lame timestamp flushed eos buffer by some additional timestamp accounting. Fixes #374760.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
+ (gst_lame_change_state):
+ * ext/lame/gstlame.h:
+ Make lame timestamp flushed eos buffer by some additional timestamp
+ accounting. Fixes #374760.
+
+2006-11-13 17:01:15 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Make timestamp handling in mp3parse saner; now works for at least simple cases.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+ (gst_mp3parse_init), (gst_mp3parse_dispose),
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
+ (gst_mp3parse_change_state):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Make timestamp handling in mp3parse saner; now works for at least
+ simple cases.
+
+2006-11-13 16:23:22 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/mpegaudioparse/: Bring mp3parse into the 21st century.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/Makefile.am:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
+ (gst_mp3parse_reset), (gst_mp3parse_init), (gst_mp3parse_dispose),
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
+ (gst_mp3parse_change_state), (plugin_init):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Bring mp3parse into the 21st century.
+ Use its own debug category, use gstadapter, format nicely to 80
+ columns, and fix incorrect handling of 32 kHz and less files.
+
+2006-11-03 09:52:12 +0000 Sebastian Droege <slomo@ubuntu.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: libmpeg2 requires its output buffers to start at a 16byte aligned address or the altivec ...
+ Original commit message from CVS:
+ Patch by: Sebastian Droege <slomo at ubuntu dot com>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
+ (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ libmpeg2 requires its output buffers to start at a 16byte aligned
+ address or the altivec optimizations will explode.
+
+2006-11-02 14:43:11 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/cdio/: Move CD-TEXT utility function into common file so it can also be used by a future cdioparanoiasrc.
+ Original commit message from CVS:
+ * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext):
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
+ Move CD-TEXT utility function into common file so it can also be
+ used by a future cdioparanoiasrc.
+
+2006-10-19 10:17:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging information (fixes #340433).
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
+ Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging
+ information (fixes #340433).
+
+2006-10-16 18:07:23 +0000 Josep Torra Valles <josep@fluendo.com>
+
+ gst/: Misc. fixes for problems discovered by Forte (different return types in function declaration and definition, po...
+ Original commit message from CVS:
+ Patch by: Josep Torra Valles <josep at fluendo com>
+ * gst/iec958/ac3_padder.c: (ac3p_init):
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse__rmf),
+ (gst_rmdemux_parse_prop), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_parse_indx), (gst_rmdemux_parse_indx_data),
+ (gst_rmdemux_parse_data), (gst_rmdemux_parse_cont),
+ (gst_rmdemux_parse_packet):
+ Misc. fixes for problems discovered by Forte (different return types
+ in function declaration and definition, pointer arithmetics with
+ void pointers). Fixes #362639.
+
+2006-10-13 19:11:26 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Don't announce audio or subtitle streams that aren't really present, it makes dvddemux crea...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
+ Don't announce audio or subtitle streams that aren't really present,
+ it makes dvddemux create pads that will never carry any data, which
+ is not good.
+
+2006-10-13 14:45:11 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: Round up not allowed bitrates to the next higher allowed one (Closes: #361140).
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_set_property):
+ Round up not allowed bitrates to the next higher allowed one
+ (Closes: #361140).
+
+2006-10-13 14:19:24 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Add docs for lame and lame to docs. Specify allowed bitrates in the properties description (#361140). Canonicalise ob...
+ 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:
+ * ext/lame/gstlame.c: (gst_lame_class_init):
+ * ext/lame/gstlame.h:
+ Add docs for lame and lame to docs. Specify allowed bitrates
+ in the properties description (#361140). Canonicalise object
+ property names (ie. use hyphen instead of underscore).
+ * 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-siddec.xml:
+ Update version to CVS.
+
+2006-10-13 10:00:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Add i18n magic to lame plugin. Throw decent error message when we fail to setup the encoder (#361140, 361151); misc. ...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+ (gst_lame_set_property), (gst_lame_get_property), (gst_lame_chain),
+ (plugin_init):
+ * po/POTFILES.in:
+ Add i18n magic to lame plugin. Throw decent error message when we
+ fail to setup the encoder (#361140, 361151); misc. minor clean-ups.
+
+2006-10-10 17:02:05 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rdtdepay.c: Change caps to x-rdt, because it's not x-rtp.
+ Original commit message from CVS:
+ * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
+ (gst_rdt_depay_init), (gst_rdt_depay_setcaps),
+ (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
+ Change caps to x-rdt, because it's not x-rtp.
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet),
+ (gst_rmdemux_plugin_init):
+ Activate pad before adding to the element.
+ Return the combined stream return values after pad_alloc.
+
+2006-10-10 16:58:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Add some debugging to timestamp handling.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Add some debugging to timestamp handling.
+ Make sure we don't convert invalid timestamps.
+
+2006-10-09 12:09:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/: Active pads before adding them to the running element. Don't assert on non-BYTE format newsegment events in asf...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
+ (gst_asf_demux_setup_pad), (gst_asf_demux_process_segment):
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_get_subpicture_stream):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream),
+ (gst_mpeg_demux_get_private_stream):
+ Active pads before adding them to the running element. Don't assert
+ on non-BYTE format newsegment events in asfdemux.
+
+2006-10-05 17:07:52 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Printf format fixes.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title),
+ (gst_dvd_read_src_handle_seek_event):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_parse_data):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_loop),
+ (gst_rmdemux_parse_packet):
+ Printf format fixes.
+
+2006-10-03 10:55:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/: Added RDT depayloader.
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
+ (gst_rdt_depay_class_init), (gst_rdt_depay_init),
+ (gst_rdt_depay_setcaps), (gst_rdt_depay_chain),
+ (gst_rdt_depay_set_property), (gst_rdt_depay_get_property),
+ (gst_rdt_depay_change_state), (gst_rdt_depay_plugin_init):
+ * gst/realmedia/rdtdepay.h:
+ Added RDT depayloader.
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_plugin_init), (plugin_init):
+ Remove unused function.
+ Added some more mime-types.
+
+2006-09-28 21:44:49 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.c: If an incoming timestamp is within one sample of our current timestamp, then keep it....
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (update_timestamps):
+ If an incoming timestamp is within one sample of our current
+ timestamp, then keep it. This prevents imprecision in the
+ PTS (which only has 90khz granularity) from affecting our stream.
+
+2006-09-28 09:16:38 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegparse.c: Reflow code so that compiler doesn't complain about possible use of uninitialised vari...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
+ Reflow code so that compiler doesn't complain about possible use
+ of uninitialised variable any longer; but just in case, initialise
+ it anyway; also take object ref in query function and do peer pad
+ stuff in a more thread-safe way.
+
+2006-09-27 09:54:01 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/dvdread/dvdreadsrc.c: Init a variable to make compilers happy.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
+ Init a variable to make compilers happy.
+
+2006-09-21 13:34:59 +0000 Martin Zlomek <martin.zlomek@itonis.tv>
+
+ gst/mpegstream/: Send newsegment updates for sparse streams (#350778).
+ Original commit message from CVS:
+ Patch by: Martin Zlomek <martin dot zlomek at itonis dot tv>
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_reset),
+ (gst_dvd_demux_sync_stream_to_time):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
+ (gst_mpeg_demux_synchronise_pads),
+ (gst_mpeg_demux_sync_stream_to_time):
+ Send newsegment updates for sparse streams (#350778).
+
+2006-09-20 16:18:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ ext/dvdread/dvdreadsrc.c: fix compile warning
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
+ fix compile warning
+
+2006-09-20 16:16:18 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ bump the nano bitches
+ Original commit message from CVS:
+ bump the nano bitches
+
+2006-09-20 11:55:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: As another attempt, synaesthesia can be enabled by passing
+ Original commit message from CVS:
+ * configure.ac:
+ As another attempt, synaesthesia can be enabled by passing
+ --with-plugins="synaesthesia" to configure
+
+2006-09-20 11:12:22 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
+ Original commit message from CVS:
+ * configure.ac:
+ Don't build synaesthesia by default, until someone confirms that it
+ is okay (filed as #356882)
+
+2006-09-20 11:11:26 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
+ Original commit message from CVS:
+ * configure.ac:
+ Don't build synaesthesia by default, until someone confirms that it
+ is okay (filed as #356882)
+
+2006-09-18 12:29:09 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Port synaesthesia.
+ Original commit message from CVS:
+ * configure.ac:
+ * gst/synaesthesia/Makefile.am:
+ * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+ (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+ (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
+ (gst_synaesthesia_change_state), (plugin_init):
+ Port synaesthesia.
+
+2006-09-16 21:58:48 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ More G_OBJECT macro fixing.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c:
+ * gst/mpegstream/gstrfc2250enc.h:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ More G_OBJECT macro fixing.
+
+2006-09-15 16:14:15 +0000 Yves Lefebvre <ivanohe@abacom.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Fix initialisation dummy buffer, the offsets are relative to the start of the buffers. Fi...
+ Original commit message from CVS:
+ Patch by: Yves Lefebvre <ivanohe at abacom dot com>
+ * ext/mpeg2dec/gstmpeg2dec.c: (init_dummybuf):
+ Fix initialisation dummy buffer, the offsets are relative to the start
+ of the buffers. Fixes #356004.
+
+2006-09-12 10:14:29 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ update spec file
+ Original commit message from CVS:
+ update spec file
+
+2006-09-09 15:22:58 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Add convert query (needed for later when we just operate in time format and let the base so...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
+ Add convert query (needed for later when we just operate in time
+ format and let the base source class handle all the seeking stuff).
+
+2006-09-07 16:05:31 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfdemux.c: Erm, lets properly fix it. The only non-text tag that we support is the track-number and ...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_get_gst_tag_from_tag_name),
+ (gst_asf_demux_process_ext_content_desc):
+ Erm, lets properly fix it. The only non-text tag that we support is
+ the track-number and that is an UINT. asfdemux was returning a GValue
+ initialized as INT. Further the Track and not the TrackNumber tag
+ (the latter is a string too).
+
+2006-09-07 14:08:42 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfdemux.c: Skip tags that are unknown (was producing an uninialized GValue).
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_get_gst_tag_from_tag_name),
+ (gst_asf_demux_process_ext_content_desc):
+ Skip tags that are unknown (was producing an uninialized GValue).
+
+2006-09-01 16:21:43 +0000 from Michal Benes <michal.benes@itonis.tv>
+
+ ext/a52dec/gsta52dec.*: Add two things to a52dec: configure the exact output format for ac3 decoding through properti...
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_mode_get_type),
+ (gst_a52dec_class_init), (gst_a52dec_init), (gst_a52dec_channels),
+ (gst_a52dec_handle_frame), (gst_a52dec_change_state),
+ (gst_a52dec_set_property), (gst_a52dec_get_property):
+ * ext/a52dec/gsta52dec.h:
+ Patch from from Michal Benes <michal.benes@itonis.tv>:
+ Add two things to a52dec: configure the exact output format for ac3
+ decoding through properties, if desired.
+ By default, configure an output format preferred by downstream. Now
+ that audioconvert lists caps by preference, this means that a52dec
+ can do downmixing (iff required) rather than audioconvert, so it can
+ use the ac3 downmix levels from the bitstream.
+
+2006-08-31 13:04:31 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ Add missing GST_LIBS to the link flags
+ Original commit message from CVS:
+ * ext/lame/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdsub/Makefile.am:
+ * gst/mpegaudioparse/Makefile.am:
+ Add missing GST_LIBS to the link flags
+
+2006-08-29 13:28:41 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
+ Original commit message from CVS:
+ * configure.ac:
+ Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
+
+2006-08-27 20:46:54 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/mpegstream/gstmpegpacketize.c: fix build for debug disabled
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new):
+ fix build for debug disabled
+
+2006-08-22 15:52:16 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Use static pad templates with ANY caps for the source pads for simplicity and to avoid wa...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
+ Use static pad templates with ANY caps for the source pads for
+ simplicity and to avoid warnings when creating pads for unhandled
+ codec IDs (#351795).
+
+2006-08-16 10:34:57 +0000 Michal Benes <michal.benes@itonis.tv>
+
+ ext/mad/gstmad.c: Fix timestamping in mad by only activating a new timestamp when the previous frame has been decoded...
+ Original commit message from CVS:
+ Patch by: Michal Benes <michal dot benes at itonis dot tv>
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Fix timestamping in mad by only activating a new timestamp when the
+ previous frame has been decoded. Fixes #350723.
+ Also clean up some of the non fatal warnings when the input buffer is
+ too small to decode a header.
+
+=== release 0.10.4 ===
+
+2006-08-14 11:15:09 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * 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-rmdemux.xml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ releasing 0.10.4
+ Original commit message from CVS:
+ releasing 0.10.4
+
+2006-08-14 11:06:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ * po/vi.po:
+ Update .po files
+ Original commit message from CVS:
+ Update .po files
+
+2006-08-14 10:19:41 +0000 Wim Taymans <wim@fluendo.com>
+
+ ext/a52dec/gsta52dec.c: Instead of forwarding the event in the wrong format, unref it and set a boolean that we still...
+ Original commit message from CVS:
+ Patch by: Wim Taymans <wim at fluendo dot com>
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
+ Instead of forwarding the event in the wrong format, unref it and set
+ a boolean that we still need to send it in the streaming thread.
+ Fixes #350554
+
+2006-08-14 09:50:26 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ ext/dvdread/dvdreadsrc.c: Put debug category initialization before use of GST_DEBUG, in order to remove a fatal warni...
+ Original commit message from CVS:
+ Patch by: Edward Hervey (edward at fluendo dot com)
+ * ext/dvdread/dvdreadsrc.c: (plugin_init):
+ Put debug category initialization before use of GST_DEBUG, in order
+ to remove a fatal warning. Fixes #350895
+
+2006-08-08 13:23:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/dvdsub/gstdvdsubdec.c: Set rank to NONE for the time being until we make playbin handle subtitle pictures again (...
+ Original commit message from CVS:
+ * gst/dvdsub/gstdvdsubdec.c: (plugin_init):
+ Set rank to NONE for the time being until we make playbin handle
+ subtitle pictures again (dvdsubdec seems to be a bit shaky at
+ times when seeking, so it's probably better if it doesn't get
+ autoplugged for the time being).
+
+2006-08-07 19:01:40 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Handle audio streams with stream_version 3 properly; warn about unknown stream versions; han...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr):
+ Handle audio streams with stream_version 3 properly; warn about
+ unknown stream versions; handle unknown fourccs a tad more
+ gracefully (setting bogus caps). Also, use GST_FOURCC_ARGS
+ with GST_FOURCC_FORMAT.
+
+2006-08-07 16:25:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Error out properly if this is an interactive DVD (fixes #345694).
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
+ Error out properly if this is an interactive DVD (fixes #345694).
+
+2006-08-07 16:18:33 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/a52dec/gsta52dec.c: When the first_access is 1 or 0, we should copy the timestamp from the incoming buffer if the...
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
+ When the first_access is 1 or 0, we should copy the timestamp from
+ the incoming buffer if there is one.
+
+2006-08-07 14:01:33 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/a52dec/gsta52dec.c: Use GST_ELEMENT_ERROR for error reporting; post errors in some more places; remove superfluou...
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
+ (gst_a52dec_reneg), (gst_a52dec_handle_frame), (gst_a52dec_chain):
+ Use GST_ELEMENT_ERROR for error reporting; post errors in some
+ more places; remove superfluous newlines from debug statements.
+
+2006-08-07 09:17:01 +0000 Frédéric Riss <frederic.riss@gmail.com>
+
+ gst/dvdsub/gstdvdsubdec.c: which happens when you use macros that got changed during the last unstable cycle because ...
+ Original commit message from CVS:
+ Patch by: Frédéric Riss <frederic.riss at gmail com>
+ * gst/dvdsub/gstdvdsubdec.c: (gst_send_subtitle_frame):
+ Don't set negative durations on outgoing buffers (#350044),
+ which happens when you use macros that got changed during
+ the last unstable cycle because they were thought not to
+ be used anywhere.
+
+2006-08-06 19:47:40 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.*: Add basic support for time-based seeking; set timestamps on outgoing buffers if we have the...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_stop),
+ (gst_dvd_read_src_goto_chapter),
+ (gst_dvd_read_src_get_chapter_starts),
+ (gst_dvd_read_src_goto_title), (gst_dvd_read_src_get_next_cell),
+ (gst_dvd_read_src_get_time_for_sector),
+ (gst_dvd_read_src_get_sector_from_time), (gst_dvd_read_src_read),
+ (gst_dvd_read_src_handle_seek_event), (gst_dvd_read_src_do_seek),
+ (gst_dvd_read_src_goto_sector):
+ * ext/dvdread/dvdreadsrc.h:
+ Add basic support for time-based seeking; set timestamps on
+ outgoing buffers if we have them; create table with
+ chapter to time mapping when opening a title; rename
+ gst_dvd_read_src_get_next_cell_for() to _get_next_cell() and
+ make it take an explicit pgc argument; fix up some debugging
+ messages so that title/chapter numbers are printed as starting
+ from 1 for easier readability.
+
+2006-08-04 13:05:01 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/: Factor out some code into rmutils.[ch]; when reading strings, don't read beyond the available data; r...
+ Original commit message from CVS:
+ * gst/realmedia/Makefile.am:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_parse_cont):
+ * gst/realmedia/rmutils.c: (gst_rm_utils_read_string8),
+ (gst_rm_utils_read_string16), (gst_rm_utils_read_tags):
+ * gst/realmedia/rmutils.h:
+ Factor out some code into rmutils.[ch]; when reading
+ strings, don't read beyond the available data; read
+ metadata strings correctly (string length is 16 bits
+ here, not just 8).
+
+2006-07-31 09:53:05 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ Fix dist by including gst-libs/
+ Original commit message from CVS:
+ * Makefile.am:
+ * configure.ac:
+ * gst/asfdemux/gstasfdemux.c:
+ Fix dist by including gst-libs/
+
+2006-07-29 11:20:30 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Make custom error messages translatable.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (plugin_init):
+ * po/POTFILES.in:
+ Make custom error messages translatable.
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ Remove setlocale() call, doesn't seem to be needed or recommended for
+ plugins, at least not according to gstreamer/docs/random/i18n.
+
+2006-07-28 15:15:15 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
+ Error out when the stream is encrypted (rather than feeding
+ garbage to the decoders). Fixes #349025.
+
+2006-07-28 15:11:42 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Add/enable autofoo magic for translations.
+ Original commit message from CVS:
+ * Makefile.am:
+ * autogen.sh:
+ * configure.ac:
+ * po/POTFILES.in:
+ Add/enable autofoo magic for translations.
+
+2006-07-28 13:28:19 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Don't leak streams, strings or caps. Get rid of unnecessary getcaps() function.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
+ (gst_rmdemux_change_state), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_cont), (gst_rmdemux_descramble_cook_audio),
+ (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
+ Don't leak streams, strings or caps. Get rid of unnecessary
+ getcaps() function.
+
+2006-07-27 20:34:25 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Descramble cook audio streams before sending them to the decoder. Fixes #347292.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+ (gst_rmdemux_init), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_data),
+ (gst_rmdemux_stream_clear_cached_subpackets),
+ (gst_rmdemux_descramble_cook_audio),
+ (gst_rmdemux_descramble_dnet_audio),
+ (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
+ Descramble cook audio streams before sending them to the
+ decoder. Fixes #347292.
+ Also miscellaneous clean-ups and log-level changes.
+
+2006-07-26 17:09:04 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ ext/lame/gstlame.c: Fix lame putting lots of 0's at start of mp3. Fixes bug #348786.
+ Original commit message from CVS:
+ 2006-07-26 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+ * ext/lame/gstlame.c: (gst_lame_setup):
+ Fix lame putting lots of 0's at start of mp3. Fixes bug #348786.
+
+2006-07-21 11:01:55 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/sidplay/gstsiddec.*: Remove old metadata thing.
+ Original commit message from CVS:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ Remove old metadata thing.
+
+2006-07-15 13:33:38 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Find language codes for audio streams if they are available.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_get_ext_stream_props_for_stream),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_change_state):
+ Find language codes for audio streams if they are available.
+
+2006-07-14 13:02:53 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Parse extended stream properties objects and stream objects hidden inside them (but delay creation of ...
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_obj_stream),
+ (gst_asf_demux_process_stream),
+ (gst_asf_demux_process_language_list),
+ (gst_asf_demux_process_ext_stream_props),
+ (gst_asf_demux_process_queued_extended_stream_objects),
+ (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Parse extended stream properties objects and stream objects
+ hidden inside them (but delay creation of the appropriate
+ pads until after all the 'normal' stream objects have been
+ dealt with) (#343763). Also parse language list object.
+
+2006-07-13 11:28:32 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.*: Cleanups, use GstSegment for seeking.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+ (gst_rmdemux_finalize), (gst_rmdemux_src_event),
+ (find_seek_offset_time), (gst_rmdemux_perform_seek),
+ (gst_rmdemux_src_query), (gst_rmdemux_change_state),
+ (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
+ (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_combine_flows), (gst_rmdemux_parse_packet):
+ * gst/realmedia/rmdemux.h:
+ Cleanups, use GstSegment for seeking.
+ Fix error handling.
+ Combine flow return from all streams.
+
+2006-07-11 22:46:47 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/cdio/gstcdiocddasrc.c: Remove g_assert that shouldn't be there.
+ Original commit message from CVS:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_close):
+ Remove g_assert that shouldn't be there.
+
+2006-07-10 11:52:58 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Fix refcounting when cropping. Fixes #341677.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
+ Fix refcounting when cropping. Fixes #341677.
+
+2006-07-09 14:07:31 +0000 Grzegorz Lukasik <hauserx@gmail.com>
+
+ gst/asfdemux/gstasfdemux.c: Fix typo. Closes #347029.
+ Original commit message from CVS:
+ Patch by: Grzegorz Lukasik <hauserx at gmail dot com>
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_segment):
+ Fix typo. Closes #347029.
+
+2006-07-08 20:29:56 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Skip chunks for unknown streams properly. Fixes broken sound and/or video for files that ...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+ Skip chunks for unknown streams properly. Fixes broken sound
+ and/or video for files that have additional streams that
+ we don't recognise yet (e.g. if they are embedded in extended
+ stream properties). Partly fixes #343763.
+
+2006-07-07 19:26:40 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/: Add some more GUIDs and make debug log more readable and easier to follow when parsing the headers.
+ Original commit message from CVS:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_identify_guid),
+ (gst_asf_demux_process_header), (gst_asf_demux_push_obj),
+ (gst_asf_demux_pop_obj), (gst_asf_demux_process_object),
+ (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ Add some more GUIDs and make debug log more readable
+ and easier to follow when parsing the headers.
+
+2006-06-30 11:26:22 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.*: Rewrite seeking code and make seeking in DVDs work (#337834).
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+ (gst_dvd_read_src_is_seekable), (gst_dvd_read_src_class_init),
+ (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
+ (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event),
+ (gst_dvd_read_src_do_seek), (gst_dvd_read_src_src_event):
+ * ext/dvdread/dvdreadsrc.h:
+ Rewrite seeking code and make seeking in DVDs work (#337834).
+
+2006-06-29 14:31:55 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ autogen.sh: Check for automake-1.9 as well.
+ Original commit message from CVS:
+ * autogen.sh:
+ Check for automake-1.9 as well.
+
+2006-06-29 12:25:15 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Make check stronger.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_is_nav_pack):
+ Make check stronger.
+
+2006-06-28 11:20:03 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.*: Handle unknown codec IDs/fourccs properly (#345879); send tag events after newsegment eve...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_push_buffer):
+ * gst/asfdemux/gstasfdemux.h:
+ Handle unknown codec IDs/fourccs properly (#345879); send tag
+ events after newsegment event; fix use of GST_FOURCC_FORMAT
+ macro.
+
+2006-06-23 16:29:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/a52dec/gsta52dec.c: Call the channel positions get_type() method in plugin_init to ensure that it isn't simultane...
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (plugin_init):
+ Call the channel positions get_type() method in plugin_init
+ to ensure that it isn't simultaneously called later from
+ multiple threads.
+
+2006-06-23 12:24:56 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Also flush packetizer cache when we get a buffer that has the
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegpacketize.c:
+ (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+ Also flush packetizer cache when we get a buffer that has the
+ DISCONT flag set; update current byte position from buffer
+ offset after a flush.
+
+2006-06-23 11:22:04 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetiz...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new),
+ (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy),
+ (gst_mpeg_packetize_read):
+ * gst/mpegstream/gstmpegpacketize.h:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+ (gst_mpeg_parse_change_state):
+ Flush packetizer cache when we get a FLUSH_STOP event;
+ remove unused source pad member from packetizer; add debug
+ category for packetizer.
+
+2006-06-23 09:28:28 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/a52dec/gsta52dec.c: Treat dual-mono as stereo. It should really be output on 2 separate pads, but isn't for now.
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (plugin_init):
+ Treat dual-mono as stereo. It should really be output on 2 separate
+ pads, but isn't for now.
+
+2006-06-19 15:16:43 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Assume 4:3 DAR rather than 4:3 PAR (#345184).
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+ Assume 4:3 DAR rather than 4:3 PAR (#345184).
+
+2006-06-19 11:59:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us any PAR whatsoever (rathe...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+ Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us
+ any PAR whatsoever (rather than using 0/0, which will lead to
+ an abort later on). Fixes #345184.
+
+2006-06-17 19:35:41 +0000 Michael Dominic K <mdk@mdk.org.pl>
+
+ ext/mad/gstmad.c: Send newsegment event before calling gst_pad_alloc_buffer_and_set_caps(), makes mad behave better i...
+ Original commit message from CVS:
+ Patch by: Michael Dominic K. < mdk at mdk org pl>
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Send newsegment event before calling
+ gst_pad_alloc_buffer_and_set_caps(), makes mad behave better
+ in connection with pad blocking (#342594). While we're at it,
+ do some minor clean-ups.
+
+2006-06-17 14:48:04 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Fix --disable-external (can't set conditionals conditionally, #343602).
+ Original commit message from CVS:
+ * configure.ac:
+ Fix --disable-external (can't set conditionals conditionally,
+ #343602).
+
+2006-06-15 17:10:09 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/a52dec/Makefile.am: ... and then he said "When you go and fix the build you better make sure you have some spare ...
+ Original commit message from CVS:
+ * ext/a52dec/Makefile.am:
+ ... and then he said "When you go and fix the build you
+ better make sure you have some spare backslashes in your
+ pocket".
+
+2006-06-13 15:46:09 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/sidplay/gstsiddec.cc: Fix copyright, email addresses and descriptions.
+ Original commit message from CVS:
+ * ext/sidplay/gstsiddec.cc:
+ Fix copyright, email addresses and descriptions.
+ Use saner defaults for arguments. Fixes #344667.
+ constify some stuff.
+ Fix memleaks.
+ Add tags.
+ Fix negotiation to do mono/44100 by default.
+ Post error messages.
+ Use _scale_int where possible.
+
+2006-06-12 14:09:20 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/dvdnav/.cvsignore: More ignore
+ Original commit message from CVS:
+ * ext/dvdnav/.cvsignore:
+ More ignore
+
+2006-06-12 13:49:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ tests/check/elements/amrnbenc.c: Init memory before feeding it to the encoder to make the valgrind test succeed.
+ Original commit message from CVS:
+ * tests/check/elements/amrnbenc.c: (push_data):
+ Init memory before feeding it to the encoder to make
+ the valgrind test succeed.
+
+2006-06-12 13:27:18 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/.cvsignore: More ignore
+ Original commit message from CVS:
+ * gst/asfdemux/.cvsignore:
+ More ignore
+
+2006-06-11 20:38:54 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ .cvsignore: Ignore files generated by 'make dist'.
+ Original commit message from CVS:
+ * .cvsignore:
+ Ignore files generated by 'make dist'.
+
+2006-06-11 17:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ update build files
+ Original commit message from CVS:
+ * autogen.sh:
+ * configure.ac:
+ * ext/a52dec/Makefile.am:
+ * ext/dvdnav/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/lame/Makefile.am:
+ * ext/mad/Makefile.am:
+ * ext/mpeg2dec/Makefile.am:
+ * ext/sidplay/Makefile.am:
+ update build files
+
+2006-06-11 13:57:18 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ autogen.sh: require am17
+ Original commit message from CVS:
+ * autogen.sh:
+ require am17
+ * configure.ac:
+ * ext/annodex/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/dv/Makefile.am:
+ * ext/esd/Makefile.am:
+ * ext/flac/Makefile.am:
+ * ext/gdk_pixbuf/Makefile.am:
+ * ext/ladspa/Makefile.am:
+ * ext/libcaca/Makefile.am:
+ * ext/speex/Makefile.am:
+ * ext/taglib/Makefile.am:
+ * sys/oss/Makefile.am:
+ * sys/sunaudio/Makefile.am:
+ * sys/ximage/Makefile.am:
+ clean up build further
+
+2006-06-07 17:05:48 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Simplify and don't leak our buffer pool.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
+ (gst_mpeg2dec_reset), (clear_buffers), (handle_picture),
+ (gst_mpeg2dec_sink_convert), (gst_mpeg2dec_src_convert),
+ (gst_mpeg2dec_change_state):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Simplify and don't leak our buffer pool.
+ Use _scale_int.
+ Remove unfixed bug number from previous ChangeLog entry.
+
+2006-06-07 16:15:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Fix padtemplate as we can now do fractional framerates.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+ (gst_mpeg2dec_class_init), (gst_mpeg2dec_init),
+ (gst_mpeg2dec_finalize), (gst_mpeg2dec_reset),
+ (gst_mpeg2dec_qos_reset), (gst_mpeg2dec_alloc_buffer),
+ (gst_mpeg2dec_negotiate_format), (init_dummybuf),
+ (handle_sequence), (handle_picture), (handle_slice),
+ (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
+ (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Fix padtemplate as we can now do fractional framerates.
+ Small cleanups.
+ Use GstSegment.
+ Add simple frame dropping QoS.
+ Precalc buffer output sizes and UV offsets.
+ Always give libmpeg2 a valid fbuf when it wants one.
+ don't trust libmpeg to discard our buffers but manage it
+ ourselves.
+ Fixes #343627, #327350, #335288
+
+2006-06-05 20:57:12 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ win32/MANIFEST: Add a manifest for futures ugly win32 releases.
+ Original commit message from CVS:
+ * win32/MANIFEST:
+ Add a manifest for futures ugly win32 releases.
+ * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
+ Move bufcaps declaration at the begining of the instructions
+ block.
+
+2006-06-01 22:00:26 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+ Original commit message from CVS:
+ * ext/alsaspdif/alsaspdifsink.h:
+ * ext/amrwb/gstamrwbdec.h:
+ * ext/amrwb/gstamrwbenc.h:
+ * ext/amrwb/gstamrwbparse.h:
+ * ext/arts/gst_arts.h:
+ * ext/artsd/gstartsdsink.h:
+ * ext/audiofile/gstafparse.h:
+ * ext/audiofile/gstafsink.h:
+ * ext/audiofile/gstafsrc.h:
+ * ext/audioresample/gstaudioresample.h:
+ * ext/bz2/gstbz2dec.h:
+ * ext/bz2/gstbz2enc.h:
+ * ext/dirac/gstdiracdec.h:
+ * ext/directfb/dfbvideosink.h:
+ * ext/divx/gstdivxdec.h:
+ * ext/divx/gstdivxenc.h:
+ * ext/dts/gstdtsdec.h:
+ * ext/faac/gstfaac.h:
+ * ext/gsm/gstgsmdec.h:
+ * ext/gsm/gstgsmenc.h:
+ * ext/ivorbis/vorbisenc.h:
+ * ext/libfame/gstlibfame.h:
+ * ext/nas/nassink.h:
+ * ext/neon/gstneonhttpsrc.h:
+ * ext/polyp/polypsink.h:
+ * ext/sdl/sdlaudiosink.h:
+ * ext/sdl/sdlvideosink.h:
+ * ext/shout/gstshout.h:
+ * ext/snapshot/gstsnapshot.h:
+ * ext/sndfile/gstsf.h:
+ * ext/swfdec/gstswfdec.h:
+ * ext/tarkin/gsttarkindec.h:
+ * ext/tarkin/gsttarkinenc.h:
+ * ext/theora/theoradec.h:
+ * ext/wavpack/gstwavpackdec.h:
+ * ext/wavpack/gstwavpackparse.h:
+ * ext/xine/gstxine.h:
+ * ext/xvid/gstxviddec.h:
+ * ext/xvid/gstxvidenc.h:
+ * gst/cdxaparse/gstcdxaparse.h:
+ * gst/cdxaparse/gstcdxastrip.h:
+ * gst/colorspace/gstcolorspace.h:
+ * gst/festival/gstfestival.h:
+ * gst/freeze/gstfreeze.h:
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.h:
+ * gst/modplug/gstmodplug.h:
+ * gst/mpeg1sys/gstmpeg1systemencode.h:
+ * gst/mpeg1videoparse/gstmp1videoparse.h:
+ * gst/mpeg2sub/gstmpeg2subt.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ * gst/multifilesink/gstmultifilesink.h:
+ * gst/overlay/gstoverlay.h:
+ * gst/playondemand/gstplayondemand.h:
+ * gst/qtdemux/qtdemux.h:
+ * gst/rtjpeg/gstrtjpegdec.h:
+ * gst/rtjpeg/gstrtjpegenc.h:
+ * gst/smooth/gstsmooth.h:
+ * gst/smoothwave/gstsmoothwave.h:
+ * gst/spectrum/gstspectrum.h:
+ * gst/speed/gstspeed.h:
+ * gst/stereo/gststereo.h:
+ * gst/switch/gstswitch.h:
+ * gst/tta/gstttadec.h:
+ * gst/tta/gstttaparse.h:
+ * gst/videodrop/gstvideodrop.h:
+ * gst/xingheader/gstxingmux.h:
+ * sys/directdraw/gstdirectdrawsink.h:
+ * sys/directsound/gstdirectsoundsink.h:
+ * sys/dxr3/dxr3audiosink.h:
+ * sys/dxr3/dxr3spusink.h:
+ * sys/dxr3/dxr3videosink.h:
+ * sys/qcam/gstqcamsrc.h:
+ * sys/vcd/vcdsrc.h:
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-06-01 21:11:41 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.h:
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrnb/amrnbparse.h:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ * ext/sidplay/gstsiddec.h:
+ * gst/ac3parse/gstac3parse.h:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/gstasfmux.h:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ * gst/iec958/ac3iec.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegclock.h:
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegparse.h:
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-05-27 11:35:11 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ README: Replace current README (containing the release notes from some 0.9.x version) with a proper README taken from...
+ Original commit message from CVS:
+ * README:
+ Replace current README (containing the release notes from
+ some 0.9.x version) with a proper README taken from the core.
+
+2006-05-24 15:56:13 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/: Sortof first quick cleanup of all this mess...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_event), (gst_amrnbdec_chain):
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_sink_event), (gst_amrnbparse_chain),
+ (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
+ * ext/amrnb/amrnbparse.h:
+ Sortof first quick cleanup of all this mess...
+ Don't crap out on empty and invalid FTs but treat them as
+ empty packets, the decoder handles them fine.
+ Fixes #342222.
+
+2006-05-22 08:24:09 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasf.c: Call gst_riff_init() so the riff debug category gets set up before it is being used.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ Call gst_riff_init() so the riff debug category gets set up
+ before it is being used.
+
+2006-05-19 13:55:11 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/iec958/: Write rate into the caps, for the allowed ac3 rates. Some minor cleanups.
+ Original commit message from CVS:
+ * gst/iec958/ac3_padder.c: (ac3p_parse):
+ * gst/iec958/ac3_padder.h:
+ * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_set_property),
+ (ac3iec_chain_raw), (ac3iec_change_state):
+ * gst/iec958/ac3iec.h:
+ Write rate into the caps, for the allowed ac3 rates. Some minor
+ cleanups.
+
+2006-05-18 13:00:21 +0000 James Doc Livingston <doclivingston@gmail.com>
+
+ ext/mad/gstid3tag.c: Do tag merging correctly (#339918). Output taglists properly in debug statements too while we're...
+ Original commit message from CVS:
+ Patch by: James "Doc" Livingston <doclivingston gmail com>
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_tag_to_render):
+ Do tag merging correctly (#339918). Output taglists
+ properly in debug statements too while we're at it.
+
+2006-05-11 16:17:44 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/a52dec/gsta52dec.c: Add more debug
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
+ Add more debug
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+ (gst_dvdlpcmdec_init), (update_timestamps),
+ (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
+ (dvdlpcmdec_sink_event):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ If we have a first_access offset but no current timestamp (might
+ happen after a seek), then calculate a start time for the first
+ portion so that it will align with the timestamp given for the
+ first_access portion.
+ If a new-segment arrives with format time, store the start
+ time as a failsafe timestamp in case we never get any further
+ timestamp info (unlikely)
+ Mask out the 'frame number' section of the incoming header so
+ that we don't consider it to be changing on every buffer and
+ reset the caps constantly.
+ Use gst_util_uint64_scale for duration calculation
+
+2006-05-11 14:34:10 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.c: Fix timestamping for cases where the first_access parameter is 4.
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
+ Fix timestamping for cases where the first_access parameter is 4.
+ Ensure we don't overrun buffers in other cases.
+
+2006-05-10 14:40:03 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: Fix silly bug when reading metadata (#341254).
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_string):
+ Fix silly bug when reading metadata (#341254).
+
+2006-05-08 11:57:26 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize
+ Original commit message from CVS:
+ * autogen.sh: (CONFIGURE_DEF_OPT):
+ libtoolize on Darwin/MacOSX is called glibtoolize
+
+2006-05-06 11:38:30 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.*: Remove tag writing from lame (which was completely broken anyway, #329184). Leaving GstTagSetter ...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_get_type),
+ (gst_lame_release_memory), (gst_lame_init), (gst_lame_sink_event),
+ (gst_lame_setup), (gst_lame_change_state):
+ * ext/lame/gstlame.h:
+ Remove tag writing from lame (which was completely broken
+ anyway, #329184). Leaving GstTagSetter interface around for
+ now, albeit non-functional. Should be removed completely
+ in 0.11. Use the 'id3v2mux' plugin from -good for writing
+ tags.
+
+2006-05-06 00:18:31 +0000 Maciej Katafiasz <mathrick@mathrick.org>
+
+ * ChangeLog:
+ * ext/dvdread/dvdreadsrc.c:
+ * gst/asfdemux/gstasfdemux.c:
+ Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
+ Original commit message from CVS:
+ Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
+
+2006-05-05 08:23:39 +0000 Andres Salomon <dilinger@debian.org>
+
+ ext/lame/gstlame.c: Fix typo (comma vs. semicolon) (#340710).
+ Original commit message from CVS:
+ Patch by: Andres Salomon <dilinger at debian org>
+ * ext/lame/gstlame.c: (gst_lame_sink_event):
+ Fix typo (comma vs. semicolon) (#340710).
+
+2006-05-04 08:24:52 +0000 Lutz Müller <lutz@topfrose.de>
+
+ ext/mad/gstmad.c: Make mad the second element to support the highly useful
+ Original commit message from CVS:
+ Patch by: Lutz Müller <lutz at topfrose de>
+ * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query):
+ Make mad the second element to support the highly useful
+ FORMATS query (#340594)
+
+2006-05-02 10:28:48 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Remember the query duration format before passing it upstream since it could have been mo...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_sink_convert),
+ (gst_mpeg2dec_src_query):
+ Remember the query duration format before passing it upstream since it
+ could have been modified.
+ Add GST_WARNING_OBJECT in sink convert function to detail why the
+ conversion didn't work.
+
+2006-04-25 21:56:37 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Define GstElementDetails as const and also static (when defined as global)
+ Original commit message from CVS:
+ * ext/amrwb/gstamrwbdec.c:
+ * ext/amrwb/gstamrwbenc.c:
+ * ext/amrwb/gstamrwbparse.c:
+ * ext/arts/gst_arts.c:
+ * ext/artsd/gstartsdsink.c:
+ * ext/audiofile/gstafparse.c:
+ * ext/audiofile/gstafsink.c:
+ * ext/audiofile/gstafsrc.c:
+ * ext/audioresample/gstaudioresample.c:
+ * ext/bz2/gstbz2dec.c:
+ * ext/bz2/gstbz2enc.c:
+ * ext/cdaudio/gstcdaudio.c:
+ * ext/directfb/dfbvideosink.c:
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxenc.c:
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+ * ext/faac/gstfaac.c: (gst_faac_base_init):
+ * ext/faad/gstfaad.c:
+ * ext/gsm/gstgsmdec.c:
+ * ext/gsm/gstgsmenc.c:
+ * ext/hermes/gsthermescolorspace.c:
+ * ext/ivorbis/vorbisfile.c:
+ * ext/lcs/gstcolorspace.c:
+ * ext/libfame/gstlibfame.c:
+ * ext/libmms/gstmms.c: (gst_mms_base_init):
+ * ext/musepack/gstmusepackdec.c: (gst_musepackdec_base_init):
+ * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+ * ext/nas/nassink.c: (gst_nassink_base_init):
+ * ext/neon/gstneonhttpsrc.c:
+ * ext/sdl/sdlaudiosink.c:
+ * ext/sdl/sdlvideosink.c:
+ * ext/shout/gstshout.c:
+ * ext/snapshot/gstsnapshot.c:
+ * ext/sndfile/gstsf.c:
+ * ext/swfdec/gstswfdec.c:
+ * ext/tarkin/gsttarkindec.c:
+ * ext/tarkin/gsttarkinenc.c:
+ * ext/theora/theoradec.c:
+ * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
+ * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
+ * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
+ * gst/chart/gstchart.c:
+ * gst/colorspace/gstcolorspace.c:
+ * gst/deinterlace/gstdeinterlace.c:
+ * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
+ * gst/festival/gstfestival.c:
+ * gst/filter/gstbpwsinc.c:
+ * gst/filter/gstiir.c:
+ * gst/filter/gstlpwsinc.c:
+ * gst/freeze/gstfreeze.c:
+ * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+ * gst/librfb/gstrfbsrc.c:
+ * gst/mixmatrix/mixmatrix.c:
+ * gst/mpeg1sys/gstmpeg1systemencode.c:
+ * gst/mpeg1videoparse/gstmp1videoparse.c:
+ * gst/mpeg2sub/gstmpeg2subt.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/multifilesink/gstmultifilesink.c:
+ * gst/overlay/gstoverlay.c:
+ * gst/passthrough/gstpassthrough.c:
+ * gst/playondemand/gstplayondemand.c:
+ * gst/qtdemux/qtdemux.c:
+ * gst/rtjpeg/gstrtjpegdec.c:
+ * gst/rtjpeg/gstrtjpegenc.c:
+ * gst/smooth/gstsmooth.c:
+ * gst/smoothwave/gstsmoothwave.c:
+ * gst/spectrum/gstspectrum.c:
+ * gst/speed/gstspeed.c:
+ * gst/stereo/gststereo.c:
+ * gst/switch/gstswitch.c:
+ * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
+ * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
+ * gst/vbidec/gstvbidec.c:
+ * gst/videocrop/gstvideocrop.c:
+ * gst/videodrop/gstvideodrop.c:
+ * gst/virtualdub/gstxsharpen.c:
+ * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
+ * gst/y4m/gsty4mencode.c:
+ * sys/cdrom/gstcdplayer.c:
+ * sys/directdraw/gstdirectdrawsink.c:
+ * sys/directsound/gstdirectsoundsink.c:
+ * sys/glsink/glimagesink.c:
+ * sys/qcam/gstqcamsrc.c:
+ * sys/v4l2/gstv4l2src.c:
+ * sys/vcd/vcdsrc.c: (gst_vcdsrc_base_init):
+ * sys/ximagesrc/ximagesrc.c:
+ Define GstElementDetails as const and also static (when defined as
+ global)
+
+2006-04-25 21:47:03 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Define GstElementDetails as const and also static (when defined as global)
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c:
+ * ext/mad/gstmad.c:
+ * gst/ac3parse/gstac3parse.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ Define GstElementDetails as const and also static (when defined as
+ global)
+
+2006-04-25 21:39:40 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Define GstElementDetails as const and also static (when defined as global)
+ Original commit message from CVS:
+ * ext/aalib/gstaasink.c:
+ * ext/annodex/gstcmmldec.c:
+ * ext/annodex/gstcmmlenc.c:
+ * ext/cairo/gsttextoverlay.c:
+ * ext/cairo/gsttimeoverlay.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dv/gstdvdec.c:
+ * ext/dv/gstdvdemux.c:
+ * ext/esd/esdmon.c:
+ * ext/esd/esdsink.c:
+ * ext/flac/gstflacenc.c:
+ * ext/flac/gstflactag.c:
+ * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
+ * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
+ * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
+ * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
+ * ext/gdk_pixbuf/pixbufscale.c:
+ * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
+ * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
+ * ext/jpeg/gstjpegdec.c:
+ * ext/jpeg/gstjpegenc.c:
+ * ext/jpeg/gstsmokedec.c:
+ * ext/jpeg/gstsmokeenc.c:
+ * ext/libcaca/gstcacasink.c:
+ * ext/libmng/gstmngdec.c:
+ * ext/libmng/gstmngenc.c:
+ * ext/libpng/gstpngdec.c:
+ * ext/libpng/gstpngenc.c:
+ * ext/mikmod/gstmikmod.c:
+ * ext/raw1394/gstdv1394src.c:
+ * ext/shout2/gstshout2.c: (gst_shout2send_init):
+ * ext/shout2/gstshout2.h:
+ * ext/speex/gstspeexdec.c:
+ * ext/speex/gstspeexenc.c:
+ * gst/alpha/gstalpha.c:
+ * gst/alpha/gstalphacolor.c:
+ * gst/apetag/gstapedemux.c:
+ * gst/auparse/gstauparse.c:
+ * gst/autodetect/gstautoaudiosink.c:
+ (gst_auto_audio_sink_base_init):
+ * gst/autodetect/gstautovideosink.c:
+ (gst_auto_video_sink_base_init):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_base_init):
+ * gst/avi/gstavimux.c: (gst_avimux_base_init):
+ * gst/cutter/gstcutter.c:
+ * gst/debug/breakmydata.c:
+ * gst/debug/efence.c:
+ * gst/debug/gstnavigationtest.c:
+ * gst/debug/gstnavseek.c:
+ * gst/debug/negotiation.c:
+ * gst/debug/progressreport.c:
+ * gst/debug/testplugin.c:
+ * gst/effectv/gstaging.c:
+ * gst/effectv/gstdice.c:
+ * gst/effectv/gstedge.c:
+ * gst/effectv/gstquark.c:
+ * gst/effectv/gstrev.c:
+ * gst/effectv/gstshagadelic.c:
+ * gst/effectv/gstvertigo.c:
+ * gst/effectv/gstwarp.c:
+ * gst/flx/gstflxdec.c:
+ * gst/goom/gstgoom.c:
+ * gst/icydemux/gsticydemux.c:
+ * gst/id3demux/gstid3demux.c:
+ * gst/interleave/deinterleave.c:
+ * gst/interleave/interleave.c:
+ * gst/law/alaw-decode.c: (gst_alawdec_base_init):
+ * gst/law/alaw-encode.c: (gst_alawenc_base_init):
+ * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
+ * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
+ * gst/level/gstlevel.c:
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
+ * gst/median/gstmedian.c:
+ * gst/monoscope/gstmonoscope.c:
+ * gst/multipart/multipartdemux.c:
+ * gst/multipart/multipartmux.c:
+ * gst/oldcore/gstaggregator.c:
+ * gst/oldcore/gstfdsink.c:
+ * gst/oldcore/gstmd5sink.c:
+ * gst/oldcore/gstmultifilesrc.c:
+ * gst/oldcore/gstpipefilter.c:
+ * gst/oldcore/gstshaper.c:
+ * gst/oldcore/gststatistics.c:
+ * gst/rtp/gstasteriskh263.c:
+ * gst/rtp/gstrtpL16depay.c:
+ * gst/rtp/gstrtpL16pay.c:
+ * gst/rtp/gstrtpamrdepay.c:
+ * gst/rtp/gstrtpamrpay.c:
+ * gst/rtp/gstrtpdepay.c:
+ * gst/rtp/gstrtpgsmpay.c:
+ * gst/rtp/gstrtph263pay.c:
+ * gst/rtp/gstrtph263pdepay.c:
+ * gst/rtp/gstrtph263ppay.c:
+ * gst/rtp/gstrtpilbcdepay.c:
+ * gst/rtp/gstrtpmp4gpay.c:
+ * gst/rtp/gstrtpmp4vdepay.c:
+ * gst/rtp/gstrtpmp4vpay.c:
+ * gst/rtp/gstrtpmpadepay.c:
+ * gst/rtp/gstrtpmpapay.c:
+ * gst/rtp/gstrtppcmadepay.c:
+ * gst/rtp/gstrtppcmapay.c:
+ * gst/rtp/gstrtppcmudepay.c:
+ * gst/rtp/gstrtppcmupay.c:
+ * gst/rtp/gstrtpspeexdepay.c:
+ * gst/rtp/gstrtpspeexpay.c:
+ * gst/rtsp/gstrtpdec.c:
+ * gst/rtsp/gstrtspsrc.c:
+ * gst/smpte/gstsmpte.c:
+ * gst/udp/gstdynudpsink.c:
+ * gst/udp/gstmultiudpsink.c:
+ * gst/udp/gstudpsink.c:
+ * gst/udp/gstudpsrc.c:
+ * gst/videobox/gstvideobox.c:
+ * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
+ * gst/videofilter/gstvideobalance.c:
+ * gst/videofilter/gstvideoflip.c:
+ * gst/videofilter/gstvideotemplate.c:
+ (gst_videotemplate_base_init):
+ * gst/videomixer/videomixer.c:
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
+ (gst_wavparse_class_init), (gst_wavparse_dispose),
+ (gst_wavparse_reset), (gst_wavparse_init),
+ (gst_wavparse_perform_seek), (gst_wavparse_peek_chunk_info),
+ (gst_wavparse_peek_chunk), (gst_wavparse_stream_headers),
+ (gst_wavparse_parse_stream_init), (gst_wavparse_send_event),
+ (gst_wavparse_add_src_pad), (gst_wavparse_stream_data),
+ (gst_wavparse_chain), (gst_wavparse_srcpad_event),
+ (gst_wavparse_sink_activate), (gst_wavparse_sink_activate_pull),
+ (gst_wavparse_change_state):
+ * gst/wavparse/gstwavparse.h:
+ * sys/oss/gstossmixerelement.c:
+ * sys/oss/gstosssink.c:
+ * sys/oss/gstosssrc.c:
+ * sys/osxaudio/gstosxaudioelement.c:
+ * sys/osxaudio/gstosxaudiosink.c:
+ * sys/osxaudio/gstosxaudiosrc.c:
+ * sys/sunaudio/gstsunaudiomixer.c:
+ * sys/sunaudio/gstsunaudiosink.c:
+ Define GstElementDetails as const and also static (when defined as
+ global)
+
+2006-04-25 12:17:02 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdnav/dvdnavsrc.c: Fix name of custom event (use same as dvdreadsrc).
+ Original commit message from CVS:
+ * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_push_titlelang_event):
+ Fix name of custom event (use same as dvdreadsrc).
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_chain),
+ (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event):
+ Fix event parsing (the event name is in the structure, not the
+ name of the structure itself); also fix indentation after
+ boilerplate macro.
+
+2006-04-23 09:49:14 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstid3tag.c: Change debug category to 'id3mux'.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (plugin_init):
+ Change debug category to 'id3mux'.
+
+2006-04-22 18:49:01 +0000 Alexander Lancaster <alexl@users.sourceforge.net>
+
+ ext/mad/gstid3tag.c: When acting as a muxer, set caps on outgoing buffers and set caps on source pad (fixes #323658)....
+ Original commit message from CVS:
+ Patch by: Alexander Lancaster <alexl at users sourceforge net>
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_caps), (gst_id3_tag_init),
+ (gst_id3_tag_sink_event), (gst_id3_tag_src_link),
+ (gst_id3_tag_chain):
+ When acting as a muxer, set caps on outgoing buffers and set caps
+ on source pad (fixes #323658). Remove unused application/x-gst-tags
+ cruft from the 0.6 days.
+
+2006-04-21 20:37:43 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: .. and DEFAULT queries should work too. Use magic gst util scale functions in some places.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src),
+ (gst_mad_src_query), (gst_mad_chain):
+ .. and DEFAULT queries should work too. Use magic gst util scale
+ functions in some places.
+
+2006-04-21 19:31:47 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Fix duration query in BYTES format (#336824).
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_src_query):
+ Fix duration query in BYTES format (#336824).
+
+2006-04-21 12:40:41 +0000 Ed Catmur <ed@catmur.co.uk>
+
+ ext/lame/gstlame.c: Don't crash if we get an EOS event before the encoder has been set up (#339287).
+ Original commit message from CVS:
+ Patch by: Ed Catmur <ed at catmur dot co dot uk>
+ * ext/lame/gstlame.c: (gst_lame_sink_event):
+ Don't crash if we get an EOS event before the encoder
+ has been set up (#339287).
+
+2006-04-21 11:17:08 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/dvdread/dvdreadsrc.c: Move errors out of the normal code flow.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_start),
+ (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read),
+ (gst_dvd_read_src_create), (gst_dvd_read_src_goto_sector):
+ Move errors out of the normal code flow.
+ Don't send eos, basesrc will do that for us when needed.
+
+2006-04-21 10:50:17 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegstream/: Do state changes correctly
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_change_state):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_change_state):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_change_state):
+ Do state changes correctly
+
+2006-04-13 19:08:20 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Can't use gst_pad_alloc_buffer*() when we are going to crop the image before sending it o...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf),
+ (gst_mpeg2dec_alloc_buffer):
+ Can't use gst_pad_alloc_buffer*() when we are going to crop
+ the image before sending it out. Downstream basetransform-based
+ elements will complain about the wrong unit size otherwise
+ (when not operating in passthrough-mode at least).
+ Const-ify some static variables and do some minor clean-ups.
+ Use I420 macros for size/offsets (not really necessary in this
+ particular context, but this kind of code gets copy'n'pasted).
+
+2006-04-13 18:21:08 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegpacketize.*: g_malloc() can't fail, we don't need to handle this. Same for gst_buffer_new_and_a...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_put),
+ (read_cache):
+ * gst/mpegstream/gstmpegpacketize.h:
+ g_malloc() can't fail, we don't need to handle this. Same for
+ gst_buffer_new_and_alloc().
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+ klass->send_buffer() should have the same semantics as
+ gst_pad_push(), ie. ownership of the buffer is transfered,
+ so we never have to unref the buffer no matter what the flow
+ return value was.
+
+2006-04-12 16:21:17 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * tests/check/gst-plugins-ugly.supp:
+ one more suppression for FC4
+ Original commit message from CVS:
+ one more suppression for FC4
+
+2006-04-10 16:58:24 +0000 Michael Smith <msmith@xiph.org>
+
+ * tests/check/gst-plugins-ugly.supp:
+ The AMR encoder sucks giant sucky things through a sucky object with a giant sucking machine. More suppressions.
+ Original commit message from CVS:
+ The AMR encoder sucks giant sucky things through a sucky object with a giant
+ sucking machine. More suppressions.
+
+2006-04-10 14:47:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ add test for amrnbenc, enable test infrastructure, and fix a leak
+ Original commit message from CVS:
+ add test for amrnbenc, enable test infrastructure, and fix a leak
+ * common/check.mak:
+ allow for specifying more than one suppressions file in SUPPRESSIONS
+ * Makefile.am:
+ * tests/Makefile.am:
+ * tests/check/.cvsignore:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.cvsignore:
+ * configure.ac:
+ add tests/check
+ * tests/check/gst-plugins-ugly.supp:
+ add suppressions for libs used by -ugly
+ * tests/check/elements/amrnbenc.c: (buffer_new), (buffer_unref),
+ (setup_amrnbenc), (cleanup_amrnbenc), (push_data),
+ (GST_START_TEST), (amrnbenc_suite), (main):
+ add a simple test for encoding amr
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init):
+ fix pad template leaks
+
+2006-04-10 11:48:29 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/amrnb/amrnbenc.c: Plug big leak in AMR encoder.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+ Plug big leak in AMR encoder.
+
+2006-04-09 18:09:40 +0000 Sébastien Moutte <sebastien@moutte.net>
+
+ ext/mad/gstmad.c: move GstIndexEntry *entry variable declaration before the first instruction
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (index_seek):
+ move GstIndexEntry *entry variable declaration before
+ the first instruction
+ * ext/mad/gstmad.c:
+ remove debug macros with variable number of parameter by using
+ GST_DEBUG for WIN32
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
+ use gst_guint64_to_gdouble for conversions
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_sync_stream_to_time):
+ replace __FUNCTION__ which is not supported by MSVC by the current function name
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset):
+ remove LL suffix by using G_GINT64_CONSTANT
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead),(gst_mpeg_parse_get_rate):
+ use gst_guint64_to_gdouble for conversions
+ * gst/mpegstream/gstmpegparse.h:
+ remove LL suffix by using G_GINT64_CONSTANT
+ * win32/vs6:
+ add project files for tagac3parse, asfdemux, dvdlpcmdec, dvdsub, iec958, lame,
+ mad, mpegaudioparse, mpegstream, realmedia, synaesthesia
+
+2006-04-08 21:42:19 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init):
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_class_init):
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_class_init):
+ * ext/mad/gstmad.c: (gst_mad_class_init):
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init):
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_class_init):
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_class_init):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_class_init):
+ * gst/iec958/ac3iec.c: (ac3iec_class_init):
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_class_init):
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init):
+ * gst/mpegstream/gstmpegclock.c: (gst_mpeg_clock_class_init):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_class_init):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init):
+ * gst/synaesthesia/gstsynaesthesia.c:
+ (gst_synaesthesia_class_init):
+ Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+
+2006-04-07 09:14:26 +0000 Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+ gst/asfdemux/gstasfdemux.c: Send newsegment event only once per pad, fixes #336550.
+ Original commit message from CVS:
+ Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
+ (gst_asf_demux_push_buffer):
+ Send newsegment event only once per pad, fixes #336550.
+
+2006-04-06 11:35:26 +0000 j^ <j@bootlab.org>
+
+ Unify the long descriptions in the plugin details (#337263).
+ Original commit message from CVS:
+ Patch by: j^ <j at bootlab dot org>
+ * ext/amrwb/gstamrwbdec.c:
+ * ext/amrwb/gstamrwbenc.c:
+ * ext/amrwb/gstamrwbparse.c:
+ * ext/arts/gst_arts.c:
+ * ext/artsd/gstartsdsink.c:
+ * ext/audiofile/gstafparse.c:
+ * ext/audiofile/gstafsink.c:
+ * ext/audiofile/gstafsrc.c:
+ * ext/cdaudio/gstcdaudio.c:
+ * ext/directfb/dfbvideosink.c:
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxenc.c:
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+ * ext/faac/gstfaac.c: (gst_faac_base_init):
+ * ext/faad/gstfaad.c:
+ * ext/gsm/gstgsmdec.c:
+ * ext/gsm/gstgsmenc.c:
+ * ext/hermes/gsthermescolorspace.c:
+ * ext/ivorbis/vorbisfile.c:
+ * ext/lcs/gstcolorspace.c:
+ * ext/libfame/gstlibfame.c:
+ * ext/libmms/gstmms.c: (gst_mms_base_init):
+ * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+ * ext/nas/nassink.c: (gst_nassink_base_init):
+ * ext/neon/gstneonhttpsrc.c:
+ * ext/polyp/polypsink.c: (gst_polypsink_base_init):
+ * ext/sdl/sdlaudiosink.c:
+ * ext/sdl/sdlvideosink.c:
+ * ext/shout/gstshout.c:
+ * ext/snapshot/gstsnapshot.c:
+ * ext/sndfile/gstsf.c:
+ * ext/tarkin/gsttarkindec.c:
+ * ext/tarkin/gsttarkinenc.c:
+ * ext/theora/theoradec.c:
+ * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
+ * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
+ * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
+ * gst/chart/gstchart.c:
+ * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
+ * gst/festival/gstfestival.c:
+ * gst/filter/gstiir.c:
+ * gst/filter/gstlpwsinc.c:
+ * gst/freeze/gstfreeze.c:
+ * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+ * gst/mixmatrix/mixmatrix.c:
+ * gst/mpeg1sys/gstmpeg1systemencode.c:
+ * gst/mpeg1videoparse/gstmp1videoparse.c:
+ * gst/mpeg2sub/gstmpeg2subt.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/multifilesink/gstmultifilesink.c:
+ * gst/overlay/gstoverlay.c:
+ * gst/passthrough/gstpassthrough.c:
+ * gst/playondemand/gstplayondemand.c:
+ * gst/qtdemux/qtdemux.c:
+ * gst/rtjpeg/gstrtjpegdec.c:
+ * gst/rtjpeg/gstrtjpegenc.c:
+ * gst/smooth/gstsmooth.c:
+ * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
+ * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
+ * gst/videocrop/gstvideocrop.c:
+ * gst/videodrop/gstvideodrop.c:
+ * gst/virtualdub/gstxsharpen.c:
+ * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
+ * gst/y4m/gsty4mencode.c:
+ Unify the long descriptions in the plugin details (#337263).
+
+2006-04-05 10:02:34 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ fix version numbering
+ Original commit message from CVS:
+ fix version numbering
+
+2006-04-05 09:18:35 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * common:
+ * gst-plugins-ugly.spec.in:
+ add dvdsub plugin to spec
+ Original commit message from CVS:
+ add dvdsub plugin to spec
+
+2006-04-01 15:43:46 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ docs/plugins/: add siddec
+ Original commit message from CVS:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/inspect/plugin-siddec.xml:
+ add siddec
+ * ext/dvdnav/dvdnavsrc.c:
+ doc fixes
+
+2006-04-01 15:30:56 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * configure.ac:
+ * ext/sidplay/Makefile.am:
+ disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
+ Original commit message from CVS:
+ disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
+
+2006-04-01 14:08:36 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * docs/plugins/.gitignore:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ ignore more
+ Original commit message from CVS:
+ ignore more
+
+2006-04-01 14:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * 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-rmdemux.xml:
+ update plugin inspect files
+ Original commit message from CVS:
+ update plugin inspect files
+
+2006-04-01 10:09:10 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/mpegaudioparse/gstxingmux.c:
+ rework build; add translations for v4l2
+ Original commit message from CVS:
+ rework build; add translations for v4l2
+
+2006-04-01 09:54:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ configure.ac: rework similarly to other modules
+ Original commit message from CVS:
+ * configure.ac:
+ rework similarly to other modules
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnb.c:
+ * ext/dvdnav/dvdnavsrc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.c:
+ * ext/mad/gstid3tag.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/asfdemux/gstasf.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdsub/gstdvdsubdec.c:
+ * gst/iec958/ac3iec.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegstream/gstmpegstream.c:
+ * gst/realmedia/rmdemux.c: (plugin_init):
+ use the correct defines
+
+2006-04-01 09:53:17 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * docs/.gitignore:
+ * docs/plugins/.gitignore:
+ ignore more
+ Original commit message from CVS:
+ ignore more
+
+2006-03-31 11:13:50 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * common:
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.10.3 ===
+
+2006-03-31 11:10:46 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-iec958.xml:
+ * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+ * docs/plugins/inspect/plugin-rmdemux.xml:
+ releasing 0.10.3
+ Original commit message from CVS:
+ releasing 0.10.3
+
+2006-03-30 15:37:00 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ better/unified long descriptions
+ Original commit message from CVS:
+ * ext/aalib/gstaasink.c:
+ * ext/annodex/gstcmmldec.c:
+ * ext/annodex/gstcmmlenc.c:
+ * ext/cairo/gsttextoverlay.c:
+ * ext/cairo/gsttimeoverlay.c:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/dv/gstdvdec.c:
+ * ext/esd/esdmon.c:
+ * ext/esd/esdsink.c:
+ * ext/flac/gstflacdec.c:
+ * ext/flac/gstflacenc.c:
+ * ext/flac/gstflactag.c:
+ * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
+ * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
+ * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
+ * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
+ * ext/gdk_pixbuf/gstgdkpixbuf.c:
+ * ext/gdk_pixbuf/pixbufscale.c:
+ * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
+ * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
+ * ext/jpeg/gstjpegdec.c:
+ * ext/jpeg/gstjpegenc.c:
+ * ext/jpeg/gstsmokedec.c:
+ * ext/jpeg/gstsmokeenc.c:
+ * ext/libcaca/gstcacasink.c:
+ * ext/libmng/gstmngdec.c:
+ * ext/libmng/gstmngenc.c:
+ * ext/libpng/gstpngdec.c:
+ * ext/libpng/gstpngenc.c:
+ * ext/mikmod/gstmikmod.c:
+ * ext/raw1394/gstdv1394src.c:
+ * ext/shout2/gstshout2.c:
+ * ext/speex/gstspeexdec.c:
+ * ext/speex/gstspeexenc.c:
+ * gst/alpha/gstalpha.c:
+ * gst/alpha/gstalphacolor.c:
+ * gst/auparse/gstauparse.c:
+ * gst/autodetect/gstautoaudiosink.c:
+ (gst_auto_audio_sink_base_init):
+ * gst/autodetect/gstautovideosink.c:
+ (gst_auto_video_sink_base_init):
+ * gst/avi/gstavimux.c: (gst_avimux_base_init):
+ * gst/cutter/gstcutter.c:
+ * gst/debug/breakmydata.c:
+ * gst/debug/efence.c:
+ * gst/debug/gstnavigationtest.c:
+ * gst/debug/negotiation.c:
+ * gst/debug/progressreport.c:
+ * gst/debug/testplugin.c:
+ * gst/effectv/gstaging.c:
+ * gst/effectv/gstdice.c:
+ * gst/effectv/gstedge.c:
+ * gst/effectv/gstquark.c:
+ * gst/effectv/gstrev.c:
+ * gst/effectv/gstvertigo.c:
+ * gst/effectv/gstwarp.c:
+ * gst/flx/gstflxdec.c:
+ * gst/goom/gstgoom.c:
+ * gst/interleave/deinterleave.c:
+ * gst/interleave/interleave.c:
+ * gst/law/alaw-decode.c: (gst_alawdec_base_init):
+ * gst/law/alaw-encode.c: (gst_alawenc_base_init):
+ * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
+ * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
+ * gst/level/gstlevel.c:
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
+ * gst/median/gstmedian.c:
+ * gst/monoscope/gstmonoscope.c:
+ * gst/multipart/multipartdemux.c:
+ * gst/multipart/multipartmux.c:
+ * gst/oldcore/gstmd5sink.c:
+ * gst/oldcore/gstmultifilesrc.c:
+ * gst/oldcore/gstpipefilter.c:
+ * gst/oldcore/gstshaper.c:
+ * gst/oldcore/gststatistics.c:
+ * gst/rtp/gstasteriskh263.c:
+ * gst/rtp/gstrtpL16depay.c:
+ * gst/rtp/gstrtpL16pay.c:
+ * gst/rtp/gstrtpamrdepay.c:
+ * gst/rtp/gstrtpamrpay.c:
+ * gst/rtp/gstrtpdepay.c:
+ * gst/rtp/gstrtpgsmpay.c:
+ * gst/rtp/gstrtph263pay.c:
+ * gst/rtp/gstrtph263pdepay.c:
+ * gst/rtp/gstrtph263ppay.c:
+ * gst/rtp/gstrtpmp4gpay.c:
+ * gst/rtp/gstrtpmp4vdepay.c:
+ * gst/rtp/gstrtpmp4vpay.c:
+ * gst/rtp/gstrtpmpadepay.c:
+ * gst/rtp/gstrtpmpapay.c:
+ * gst/rtp/gstrtppcmadepay.c:
+ * gst/rtp/gstrtppcmapay.c:
+ * gst/rtp/gstrtppcmudepay.c:
+ * gst/rtp/gstrtppcmupay.c:
+ * gst/rtp/gstrtpspeexdepay.c:
+ * gst/rtp/gstrtpspeexpay.c:
+ * gst/rtsp/gstrtpdec.c:
+ * gst/smpte/gstsmpte.c:
+ * gst/videobox/gstvideobox.c:
+ * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
+ * gst/videofilter/gstvideobalance.c:
+ * gst/videofilter/gstvideoflip.c:
+ * gst/videofilter/gstvideotemplate.c:
+ (gst_videotemplate_base_init):
+ * gst/videomixer/videomixer.c:
+ * gst/wavenc/gstwavenc.c:
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init):
+ better/unified long descriptions
+ Fixed #336602
+ Some cleanups to auparse, don't send multiple newsegments.
+
+2006-03-29 11:31:55 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegparse.c: Don't unref event unconditionally after giving away ownership (gst_pad_push_event(), g...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_event):
+ Don't unref event unconditionally after giving away ownership
+ (gst_pad_push_event(), gst_pad_send_event() and
+ gst_pad_event_default() take ownership of the event
+ passed to them). Fixes warnings/crashes caused by
+ navigation events.
+
+2006-03-28 20:19:31 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegdemux.c: Don't ref NULL caps (private streams have NULL caps) (#336387); also, no need to set c...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+ Don't ref NULL caps (private streams have NULL caps) (#336387);
+ also, no need to set caps on the same buffer twice.
+
+2006-03-28 19:44:51 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Don't leak element and pad names in error messages, use
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
+ (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_get_subpicture_stream):
+ * gst/mpegstream/gstmpegdemux.c:
+ (gst_mpeg_demux_sync_stream_to_time):
+ Don't leak element and pad names in error messages, use
+ GST_DEBUG_PAD_NAME instead. Add some more debug code.
+
+2006-03-28 19:29:39 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Name the structure in the custom event with the language codes for the audio and subtitle s...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+ (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read):
+ Name the structure in the custom event with the
+ language codes for the audio and subtitle streams
+ actually like dvddemux expects it to be named.
+ Set caps on source pad and outgoing buffers.
+
+2006-03-28 16:06:05 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.*: Make xingheader property non-functional, it's broken anyway after all (use xingmux instead).
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_set_property),
+ (gst_lame_get_property), (gst_lame_setup):
+ * ext/lame/gstlame.h:
+ Make xingheader property non-functional, it's broken anyway
+ after all (use xingmux instead).
+
+2006-03-28 15:10:18 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: On EOS, flush encoder and send remaining data. Fix return value handling in sink event function.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_event):
+ On EOS, flush encoder and send remaining data. Fix
+ return value handling in sink event function.
+
+2006-03-27 14:04:08 +0000 Jürg Billeter <j@bitron.ch>
+
+ ext/dvdread/dvdreadsrc.c: Fix wrong check for started flag when setting the 'device' property.
+ Original commit message from CVS:
+ Patch by: Jürg Billeter <j at bitron dot ch>
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_set_property):
+ Fix wrong check for started flag when setting the 'device' property.
+ We want to allow it when the source is NOT started yet and ignore it
+ when the source is running.
+
+2006-03-27 10:39:03 +0000 Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+ gst/asfdemux/gstasfdemux.*: Subtract first timestamp from timestamps, so that stream starts from 0; makes live stream...
+ Original commit message from CVS:
+ Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
+ (gst_asf_demux_process_chunk):
+ * gst/asfdemux/gstasfdemux.h:
+ Subtract first timestamp from timestamps, so that
+ stream starts from 0; makes live streams that don't
+ start at 0 work again (fixes #317310, #336097).
+
+2006-03-27 10:09:43 +0000 Christian Kirbach <christian.kirbach@googlemail.com>
+
+ configure.ac: Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
+ Original commit message from CVS:
+ Patch by: Christian Kirbach
+ * configure.ac:
+ Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
+ -good. Fixes build on some systems (#331838).
+
+2006-03-24 19:47:37 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Extract more tags and also post codec name tag on the bus so this shows up in totem and naut...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_cont):
+ Extract more tags and also post codec name tag on the
+ bus so this shows up in totem and nautilus.
+
+2006-03-24 19:06:41 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: Extra data usually goes into the caps as 'codec_data', not as first buffer into the stream.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_fill_audio_packet), (gst_rmdemux_parse_packet):
+ Extra data usually goes into the caps as 'codec_data', not
+ as first buffer into the stream.
+ Need to byte swap AC3 content in realmedia files for some
+ reason (fixes #331588).
+
+2006-03-24 12:08:39 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: When operating in pull mode, post an error message on the bus when all source pads are unlin...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+ (gst_rmdemux_validate_offset), (gst_rmdemux_loop),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
+ When operating in pull mode, post an error message on the
+ bus when all source pads are unlinked or some other fatal
+ error occured (#323023). Regrade some recurring debug messages
+ to LOG level. Convert c++-style comments into C-style ones.
+
+2006-03-24 11:42:31 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.*: Handle unlinked source pads properly and stop if all source pads are unlinked (#323023).
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
+ (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
+ (gst_rmdemux_all_source_pads_unlinked),
+ (gst_rmdemux_at_least_one_stream_flowok), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_packet):
+ * gst/realmedia/rmdemux.h:
+ Handle unlinked source pads properly and stop if all source pads
+ are unlinked (#323023).
+
+2006-03-23 18:17:34 +0000 Michal Benes <michal.benes@xeris.cz>
+
+ gst/mpegstream/: Timestamps in mpeg stream are 32-bit numbers. Therefore, with a clock_freq of 90kHz this timestamp o...
+ Original commit message from CVS:
+ Patch by: Michal Benes <michal dot benes at xeris dot cz>
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
+ (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
+ (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_reset):
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+ Timestamps in mpeg stream are 32-bit numbers. Therefore, with a
+ clock_freq of 90kHz this timestamp overflows every ~13 hours. This
+ situation really happens when grabbing DVB streams. Current
+ mpegdemuxer can not handle this situation correctly and it
+ restarts counting gstreamer timestamps from zero.
+ Fixes #326598.
+
+2006-03-15 22:01:40 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/a52dec/gsta52dec.*: Fix #334550: failure to play raw AC3 files due to segment problems.
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
+ (gst_a52dec_chain_raw), (gst_a52dec_change_state):
+ * ext/a52dec/gsta52dec.h:
+ Fix #334550: failure to play raw AC3 files due to segment problems.
+
+2006-03-15 13:43:42 +0000 Christophe Fergeau <teuf@gnome.org>
+
+ ext/lame/gstlame.c: use GST_DEBUG_FUNCPTR more often.
+ Original commit message from CVS:
+ Patch by: Christophe Fergeau <teuf gnome org>
+ * ext/lame/gstlame.c: (gst_lame_release_memory),
+ (gst_lame_finalize), (gst_lame_class_init),
+ (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
+ (gst_lame_change_state):
+ Fix some memory leaks (#333345), use GST_DEBUG_FUNCPTR more often.
+
+2006-03-14 19:41:17 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Include AUDIO_CODEC tag with tags posted if input is not framed (#334258). Use _scale() util functi...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_update_info),
+ (gst_mad_sink_event), (gst_mad_change_state):
+ Include AUDIO_CODEC tag with tags posted if input is not
+ framed (#334258). Use _scale() util functions in more places.
+
+2006-03-12 11:00:33 +0000 Christophe Fergeau <teuf@gnome.org>
+
+ ext/lame/gstlame.c: mark the xing-header property as BROKEN (see http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19...
+ Original commit message from CVS:
+ 2006-03-12 Christophe Fergeau <teuf@gnome.org>
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * ext/lame/gstlame.c: (gst_lame_class_init): mark the xing-header
+ property as BROKEN (see
+ http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19 for an
+ explanation why it's broken).
+
+2006-03-11 11:12:30 +0000 Christophe Fergeau <teuf@gnome.org>
+
+ added new element to add Xing headers to MP3 files (this allows decoder to figure out the length of VBR files)
+ Original commit message from CVS:
+ 2006-03-11 Christophe Fergeau <teuf@gnome.org>
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * configure.ac:
+ * gst/xingheader/Makefile.am:
+ * gst/xingheader/gstxingmux.c:
+ * gst/xingheader/gstxingmux.h: added new element to add Xing headers
+ to MP3 files (this allows decoder to figure out the length of VBR
+ files)
+
+2006-03-07 11:19:55 +0000 Alex Lancaster <alexlan@fedoraproject.org>
+
+ ext/mad/gstid3tag.c: Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
+ Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
+ tag (#333683, patch by: Alex Lancaster).
+
+2006-03-02 20:03:00 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/: Further fancyfication.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+ (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init),
+ (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
+ (gst_amrnbenc_state_change):
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_query):
+ Further fancyfication.
+ Use _take to get writable data from the adapter.
+ Precalc packet duration.
+ Handle disconts.
+ Forward _push to upstream.
+ Post error messages when something goes wrong.
+ Remove old code in amrnbparse.
+ Don't ignore query results from upstream.
+
+2006-03-02 18:45:40 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/amrnb/amrnbenc.c: The AMR encoder writes into the audio buffers it processes, so use gst_buffer_make_writable() o...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+ The AMR encoder writes into the audio buffers it processes, so
+ use gst_buffer_make_writable() on buffers we might (they go through
+ an adapter, so there can be copying going on later anyway) be
+ encoding.
+
+2006-03-01 12:35:09 +0000 Jens Granseuer <jensgr@gmx.net>
+
+ gst/mpegstream/gstmpegparse.c: Declare variables at the beginning of a block and make
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_pad_added),
+ (gst_mpeg_parse_handle_src_query):
+ Declare variables at the beginning of a block and make
+ gcc-2.9x happy (fixes #328957; patch by: Jens Granseuer).
+
+2006-03-01 09:55:49 +0000 Fabrizio <fabrizio.ge@tiscali.it>
+
+ gst/asfdemux/gstasfdemux.c: Read packet size, sequence and padsize in right order again
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
+ Read packet size, sequence and padsize in right order again
+ (fixes #332796; patch by: Fabrizio Gennari).
+
+2006-02-28 13:50:02 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/iec958/ac3iec.c: Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
+ Original commit message from CVS:
+ * gst/iec958/ac3iec.c:
+ Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
+
+2006-02-27 18:37:47 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Make the id3tag and mad checks check for both a header and the appropriate library if the pkg-config is...
+ Original commit message from CVS:
+ * configure.ac:
+ Make the id3tag and mad checks check for both a header and the
+ appropriate library if the pkg-config is missing. (Closes #331842)
+ Split the id3tag and mad checks into 2 pieces. Sometime soon I might
+ do the same for the plugins themselves.
+
+2006-02-27 14:49:05 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Don't treat STATE_INVALID as fatal error; throw an error only after five consecutive deco...
+ Original commit message from CVS:
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+ (gst_mpeg2dec_reset), (gst_mpeg2dec_chain):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Don't treat STATE_INVALID as fatal error; throw an error
+ only after five consecutive decoding errors. Makes decoding
+ mpeg streams more robust and fixes playback of joined clips
+ (#300682).
+
+2006-02-26 22:33:33 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdnav/dvdnavsrc.h: Oops. forgot to add this one.
+ Original commit message from CVS:
+ * ext/dvdnav/dvdnavsrc.h:
+ Oops. forgot to add this one.
+
+2006-02-26 21:25:01 +0000 Julien Moutte <julien@moutte.net>
+
+ ext/Makefile.am: Fix dist-check.
+ Original commit message from CVS:
+ 2006-02-26 Julien MOUTTE <julien@moutte.net>
+ * ext/Makefile.am: Fix dist-check.
+
+2006-02-26 18:01:15 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Disable dvdnavsrc for now.
+ Original commit message from CVS:
+ * configure.ac:
+ Disable dvdnavsrc for now.
+
+2006-02-26 17:55:05 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ dvdnavsrc ported to 0.10, for the most part at least. Not quite ready for prime time yet though.
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/dvdnav/Makefile.am:
+ * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_base_init),
+ (gst_dvd_nav_src_class_init), (gst_dvd_nav_src_check_get_range),
+ (gst_dvd_nav_src_init), (gst_dvd_nav_src_finalize),
+ (gst_dvd_nav_src_is_open), (gst_dvd_nav_src_set_property),
+ (gst_dvd_nav_src_get_property), (gst_dvd_nav_src_set_clock),
+ (gst_dvd_nav_src_tca_seek), (gst_dvd_nav_src_update_streaminfo),
+ (gst_dvd_nav_src_set_domain), (gst_dvd_nav_src_update_highlight),
+ (gst_dvd_nav_src_user_op), (dvdnav_get_event_name),
+ (dvdnav_get_read_domain_name), (gst_dvd_nav_src_print_event),
+ (gst_dvd_nav_src_make_dvd_event),
+ (gst_dvd_nav_src_structure_set_uint64),
+ (gst_dvd_nav_src_push_dvd_nav_packet_event),
+ (gst_dvd_nav_src_push_clut_change_event), (read_vts_info),
+ (gst_dvd_nav_src_push_titlelang_event),
+ (gst_dvd_nav_src_process_next_block), (gst_dvd_nav_src_create),
+ (gst_dvd_nav_src_start), (gst_dvd_nav_src_stop),
+ (gst_dvd_nav_src_handle_navigation_event),
+ (gst_dvd_nav_src_handle_seek_event), (gst_dvd_nav_src_src_event),
+ (gst_dvd_nav_src_query_position), (gst_dvd_nav_src_query_duration),
+ (gst_dvd_nav_src_query), (gst_dvd_nav_src_uri_get_type),
+ (gst_dvd_nav_src_uri_get_protocols), (gst_dvd_nav_src_uri_get_uri),
+ (gst_dvd_nav_src_uri_set_uri), (gst_dvd_nav_src_uri_handler_init),
+ (gst_dvd_nav_src_do_init), (plugin_init):
+ dvdnavsrc ported to 0.10, for the most part at least. Not quite
+ ready for prime time yet though.
+
+2006-02-23 20:08:58 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/cdio/Makefile.am: Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be required for Cygwin, see #317048)
+ Original commit message from CVS:
+ * ext/cdio/Makefile.am:
+ Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be
+ required for Cygwin, see #317048)
+ * gst/rtp/gstasteriskh263.c:
+ Cygwin has includes for both the unix network socket API
+ and the windows API, but only one can be included, so fix
+ includes to only use one or the other, prefering the unxi
+ one (#317048).
+
+2006-02-22 14:54:54 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Port dvdsubdec to 0.10
+ Original commit message from CVS:
+ * configure.ac:
+ * gst/dvdsub/Makefile.am:
+ * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_base_init),
+ (gst_dvd_sub_dec_class_init), (gst_dvd_sub_dec_init),
+ (gst_dvd_sub_dec_finalize), (gst_dvd_sub_dec_src_event),
+ (gst_dvd_sub_dec_get_event_delay), (gst_dvd_sub_dec_parse_subpic),
+ (gst_get_nibble), (gst_setup_palette), (gst_get_rle_code),
+ (gst_draw_rle_line), (gst_dvd_sub_dec_merge_title),
+ (gst_send_empty_fill), (gst_send_subtitle_frame),
+ (gst_dvd_sub_dec_advance_time), (gst_dvd_sub_dec_chain),
+ (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event),
+ (plugin_init):
+ * gst/dvdsub/gstdvdsubdec.h:
+ Port dvdsubdec to 0.10
+
+2006-02-21 16:24:10 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/mpegstream/gstdvddemux.c: Push the rank up to SECONDARY+1 so that dvddemux is preferred over mpegdemux for MPEG-2...
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
+ Push the rank up to SECONDARY+1 so that dvddemux is preferred over
+ mpegdemux for MPEG-2 video streams.
+
+2006-02-20 19:16:10 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: Bump nano back to CVS
+ Original commit message from CVS:
+ * configure.ac:
+ Bump nano back to CVS
+
+=== release 0.10.2 ===
+
+2006-02-20 19:13:54 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: releasing 0.10.2, "Season to Taste"
+ Original commit message from CVS:
+ * configure.ac:
+ releasing 0.10.2, "Season to Taste"
+
+2006-02-19 23:45:34 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: releasing 0.10.1.3 prelease for 0.10.2
+ Original commit message from CVS:
+ * configure.ac:
+ releasing 0.10.1.3 prelease for 0.10.2
+
+2006-02-17 17:58:44 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/asfdemux/gstasfdemux.c: In sink event handler, release object lock again _before_ sending EOS event downstream (#...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
+ In sink event handler, release object lock again
+ _before_ sending EOS event downstream (#313838).
+
+2006-02-17 17:54:37 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * ChangeLog:
+ * gst/asfdemux/gstasf.c:
+ fix rank of asfdemux
+ Original commit message from CVS:
+ fix rank of asfdemux
+
+2006-02-17 15:08:28 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ configure.ac: releasing 0.10.1.2 prelease for 0.10.2
+ Original commit message from CVS:
+ * configure.ac:
+ releasing 0.10.1.2 prelease for 0.10.2
+
+2006-02-17 15:02:30 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ latest updates
+ Original commit message from CVS:
+ latest updates
+
+2006-02-17 11:51:12 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: When we need to crop the output buffer, make sure we create a buffer of the right size an...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_copy_i420_buffer),
+ (crop_copy_i422_buffer), (crop_buffer):
+ When we need to crop the output buffer, make sure we
+ create a buffer of the right size and respect the implicit
+ striding used for I420 elsewhere in GStreamer (#331301).
+
+2006-02-17 11:19:34 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/cdio/gstcdio.c: Init debug category (#331253).
+ Original commit message from CVS:
+ * ext/cdio/gstcdio.c: (plugin_init):
+ Init debug category (#331253).
+
+2006-02-17 10:24:56 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/gstasfdemux.c: Do not error out on non-recognized streams. Ignore them and allow playback of the other s...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream):
+ Do not error out on non-recognized streams. Ignore them and allow
+ playback of the other streams.
+
+2006-02-17 10:10:40 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.c: Add a small sanity check for LPCM reading.
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
+ Add a small sanity check for LPCM reading.
+
+2006-02-17 09:54:43 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/gstasfdemux.c: Take into account the file properties preroll value for timestamping/newsegment. It's wei...
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file):
+ Take into account the file properties preroll value for
+ timestamping/newsegment. It's weird this value was commented out.
+
+2006-02-16 17:57:59 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/asfdemux/Makefile.am: More asf makefile fixing.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ More asf makefile fixing.
+
+2006-02-16 17:16:06 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/lame/gstlame.c: Fix up lame a bit.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
+ (gst_lame_change_state):
+ Fix up lame a bit.
+ Apply patch #319782 by Gautier Portet.
+
+2006-02-16 11:14:11 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/Makefile.am: But we do need to link against the riff libraryr.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ But we do need to link against the riff libraryr.
+
+2006-02-16 11:08:51 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/asfdemux/Makefile.am: We don't want asfmux.c yet.
+ Original commit message from CVS:
+ * gst/asfdemux/Makefile.am:
+ We don't want asfmux.c yet.
+
+2006-02-16 09:50:43 +0000 Jon Trowbridge <trow@ximian.com>
+
+ ext/mad/gstmad.c: Port fixes for bugs 314771, 308772, 140237, and 302625
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_init), (scale), (gst_mad_update_info),
+ (gst_mad_sink_event), (gst_mad_check_caps_reset), (gst_mad_chain),
+ (gst_mad_change_state):
+ Port fixes for bugs 314771, 308772, 140237, and 302625
+ from 0.8 (Patch by Jonathan Matthew, Fixes #329575)
+ Use GST_EVENT_FLUSH_STOP to clear data from the current input
+ buffer, to avoid using it for any future decoding.
+
+2006-02-15 15:48:07 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping...
+ Original commit message from CVS:
+ * configure.ac:
+ * gst/asfdemux/asfheaders.c: (gst_asf_identify_guid),
+ (gst_asf_get_guid_nick):
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+ (gst_asf_demux_class_init), (gst_asf_demux_init),
+ (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
+ (gst_asf_demux_handle_src_event),
+ (gst_asf_demux_get_current_offset), (gst_asf_demux_chain),
+ (gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid),
+ (gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16),
+ (gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64),
+ (gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer),
+ (gst_asf_demux_get_bytes), (gst_asf_demux_get_string),
+ (gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file),
+ (gst_asf_demux_get_bitrate_record),
+ (gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header),
+ (gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream),
+ (gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data),
+ (gst_asf_demux_get_obj_data_correction),
+ (gst_asf_demux_get_stream_audio),
+ (gst_asf_demux_get_stream_correction),
+ (gst_asf_demux_get_stream_video),
+ (gst_asf_demux_get_stream_video_format),
+ (gst_asf_demux_get_stream), (gst_asf_demux_setup_pad),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+ (gst_asf_demux_process_stream),
+ (gst_asf_demux_get_gst_tag_from_tag_name),
+ (gst_asf_demux_commit_taglist),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_get_object_header), (gst_asf_demux_process_data),
+ (gst_asf_demux_process_header), (gst_asf_demux_process_file),
+ (gst_asf_demux_process_comment),
+ (gst_asf_demux_process_bitrate_props_object),
+ (gst_asf_demux_process_header_ext), (gst_asf_demux_process_object),
+ (gst_asf_demux_descramble_segment),
+ (gst_asf_demux_element_send_event),
+ (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
+ (gst_asf_demux_process_chunk), (gst_asf_demux_process_segment),
+ (gst_asf_demux_handle_data), (gst_asf_demux_parse_data),
+ (gst_asf_demux_get_src_query_types),
+ (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ asfdemux ported to 0.10. Does still need a bit of work (seems like
+ there's something funky going on when timestamping video frames).
+ The seeking code is likely to make Wim cry, but hey, at least it
+ compiles.
+
+2006-02-15 10:18:39 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/amrnbdec.c: Some more comments.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_setcaps),
+ (gst_amrnbdec_chain), (gst_amrnbdec_state_change):
+ Some more comments.
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
+ Applied patch from Fabrizio Gennari, fixes #330844.
+
+2006-02-14 14:57:18 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.*: Let's try to play the title the user set via the URI handler or via properties instead of a...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+ (gst_dvd_read_src_class_init), (gst_dvd_read_src_start),
+ (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
+ (gst_dvd_read_src_set_property), (gst_dvd_read_src_get_property),
+ (gst_dvd_read_src_uri_get_uri), (gst_dvd_read_src_uri_set_uri):
+ * ext/dvdread/dvdreadsrc.h:
+ Let's try to play the title the user set via the URI handler or
+ via properties instead of always playing the first title. Also,
+ Also, count title/chapter/angle number in URI and properties
+ from 1 rather than 0.
+
+2006-02-13 14:09:26 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable, otherwise GstBaseSrc will ...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
+ (gst_dvd_read_src_get_size), (gst_dvd_read_src_do_seek),
+ (gst_dvd_read_src_do_duration_query):
+ Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable,
+ otherwise GstBaseSrc will think we can operate pull_range based,
+ which we don't really, and typefinding will fail miserably.
+ Also, make seeking work somewhat (only works with flumpegdemux
+ at the moment, mpegstream needs fixing for that first).
+
+2006-02-13 14:00:35 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Only allocate buffer once we know exactly how much we need, rather than gratuitously alloca...
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
+ (gst_dvd_read_src_create), (gst_dvd_read_src_src_event):
+ Only allocate buffer once we know exactly how much we need,
+ rather than gratuitously allocating 2MB-buffers all the time
+ even if we usually need much less than that. Also, demote
+ a debug message from DEBUG to LOG level.
+
+2006-02-10 12:40:54 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/dvdread/dvdreadsrc.c: Add some more debugging and fix duration query in BYTES.
+ Original commit message from CVS:
+ * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
+ (gst_dvd_read_src_seekable), (gst_dvd_read_src_get_size),
+ (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_duration_query),
+ (gst_dvd_read_src_do_position_query):
+ Add some more debugging and fix duration query in BYTES.
+
+2006-02-09 17:27:57 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Half-baked port to 0.10. Needs some love in the seeking department, but at least it does something.
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/dvdread/Makefile.am:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/dvdread/dvdreadsrc.h:
+ Half-baked port to 0.10. Needs some love
+ in the seeking department, but at least
+ it does something.
+ * ext/dvdread/stream_labels.c:
+ * ext/dvdread/stream_labels.h:
+ Remove these (we use ISO-639 language codes internally; applications
+ that want to translate those into language names for display to the
+ user should rely on the iso-codes package for that).
+
+2006-02-06 15:55:28 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/amrnbdec.*: Fix amrnbdec, handle events, take copy from adapter since the decoder apparently writes in the ...
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+ (gst_amrnbdec_setcaps), (gst_amrnbdec_event), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbdec.h:
+ Fix amrnbdec, handle events, take copy from adapter since the decoder
+ apparently writes in the source data.
+ Use some _scale_int, and precalc duration.
+ Fix some leaks, post ERROR messages.
+
+2006-02-06 11:34:23 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ docs/plugins/: Add cdio plugin to docs.
+ Original commit message from CVS:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-good-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-good-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-cdio.xml:
+ Add cdio plugin to docs.
+ * ext/cdio/gstcdiocddasrc.c:
+ Add gtk-doc blurb.
+ * ext/cdio/gstcdio.c:
+ The plugin is called 'cdio' not 'cddio'.
+
+2006-02-04 15:22:02 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/realmedia/rmdemux.c: One source pad not being linked is not an error condition when we're still parsing the heade...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+ One source pad not being linked is not an error condition when we're
+ still parsing the header. In this case (e.g. where we don't have a
+ suitable decoder installed) just pretend everything is fine, so that
+ the demuxer will actually go on to signal no-more-pads when done
+ parsing the header, otherwise decodebin/playbin will never post the
+ appropriate error message if decoders are not available.
+
+2006-02-03 18:24:54 +0000 Edgard Lima <edgard.lima@indt.org.br>
+
+ * ChangeLog:
+ * common:
+ * ext/mad/gstid3tag.c:
+ * gst/realmedia/rmdemux.c:
+ Just make it compile with --disable-gst-debug.
+ Original commit message from CVS:
+ Just make it compile with --disable-gst-debug.
+
+2006-01-31 22:03:30 +0000 Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
+
+ ext/mad/gstmad.c: Merge patch from Radoslaw Szkodzinski (bug 326734)
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_convert_src), (scale),
+ (gst_mad_check_caps_reset), (gst_mad_chain):
+ Merge patch from Radoslaw Szkodzinski (bug 326734)
+
+2006-01-30 22:00:18 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/mad/gstid3tag.c: fixing Gdate handling enabling mux/demux mode switching adding better debug output
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach),
+ (gst_id3_tag_get_tag_to_render), (gst_id3_tag_sink_event),
+ (gst_id3_tag_src_link), (gst_id3_tag_send_tag_event),
+ (gst_id3_tag_chain):
+ fixing Gdate handling
+ enabling mux/demux mode switching
+ adding better debug output
+
+2006-01-30 18:57:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/gstmpegparse.c: If we haven't set caps on a source pad yet, the caps on the pad are NULL, not un-fixed...
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_buffer):
+ If we haven't set caps on a source pad yet, the caps on the
+ pad are NULL, not un-fixed. Set caps on outgoing buffers.
+
+2006-01-23 18:37:16 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.*: Contrary to what the const char in the lame API might suggest, lame expects us to keep the string...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_finalize), (gst_lame_class_init),
+ (gst_lame_init), (add_one_tag), (gst_lame_set_metadata):
+ * ext/lame/gstlame.h:
+ Contrary to what the const char in the lame API might suggest,
+ lame expects us to keep the strings we pass to id3tag_set_foo()
+ around; it doesn't free them either though, so we have to store
+ them somewhere and free them later when we can be sure lame
+ doesn't need them any longer.
+
+2006-01-23 15:02:04 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/lame/gstlame.c: don't pass an uninitialised string pointer to lame if we don't know how to handle the tag type, a...
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (add_one_tag):
+ Fix handling of GST_TAG_DATE (#311679), don't pass an
+ uninitialised string pointer to lame if we don't know
+ how to handle the tag type, and fix minor memory leak.
+
+2006-01-23 10:15:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Fix debug message.
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Fix debug message.
+
+2006-01-22 12:00:46 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event): Erase spurious call to gst_segment_set_newsegment.
+ Original commit message from CVS:
+ 2006-01-22 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+ Erase spurious call to gst_segment_set_newsegment.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Call
+ the superclass method when handling NEWSEGMENT events.
+ (gst_dvd_demux_handle_dvd_event): Get rid of dvd-audio-shutdown
+ and dvd-audio-restart event handling. There are currently less
+ hackish ways of handling the sparse audio stream problem.
+
+2006-01-20 14:18:20 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ fix up error domains, error strings, and use of translation
+ Original commit message from CVS:
+ 2006-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
+ * ext/dvdnav/dvdnavsrc.c: (if):
+ * ext/dvdread/stream_labels.c:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
+ fix up error domains, error strings, and use of translation
+ * po/POTFILES.in:
+ fix up this file, even though none of them are actually marked
+ for build yet.
+
+2006-01-19 21:32:05 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse): gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset) (gst_mpeg_...
+ Original commit message from CVS:
+ 2006-01-19 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
+ (gst_mpeg_parse_process_event, gst_mpeg_parse_parse_packhead)
+ (gst_mpeg_parse_change_state):
+ Make timestamp adjustment somewhat milder. Actual timestamps are
+ now sent unmodified unless an actual gap is found in the
+ stream. This should fix time display when playing most MPEG
+ files.
+
+2006-01-19 00:10:51 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/cdio/: Fix build for libcdio versions >= 76; give slightly lower rank than cdparanoia.
+ Original commit message from CVS:
+ * ext/cdio/gstcdio.c: (gst_cdio_add_cdtext_field), (plugin_init):
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_get_cdtext):
+ Fix build for libcdio versions >= 76; give slightly lower rank
+ than cdparanoia.
+
+2006-01-18 19:30:36 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Port libcdio cdda source, formerly known as cddasrc, now known as cdiocddasrc (fixes #323327). Should also read CD-TE...
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/cdio/Makefile.am:
+ * ext/cdio/gstcdio.c:
+ * ext/cdio/gstcdio.h:
+ * ext/cdio/gstcdiocddasrc.c:
+ * ext/cdio/gstcdiocddasrc.h:
+ Port libcdio cdda source, formerly known as cddasrc, now known as
+ cdiocddasrc (fixes #323327). Should also read CD-TEXT if available,
+ but that's not tested (fixes #317658).
+
+2006-01-18 09:30:00 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/mpegstream/gstmpegdemux.c: tss tss... always set caps on outgoing buffer.
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+ tss tss... always set caps on outgoing buffer.
+
+2006-01-17 14:16:52 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ update spec file
+ Original commit message from CVS:
+ update spec file
+
+2006-01-13 19:30:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.10.1 ===
+
+2006-01-13 19:25:42 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ releasing 0.10.1
+ Original commit message from CVS:
+ releasing 0.10.1
+
+2006-01-11 11:44:02 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ prerelease
+ Original commit message from CVS:
+ prerelease
+
+2006-01-10 11:43:37 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Pass unhandled queries upstream (useful e.g. for SEEKING query)
+ Original commit message from CVS:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+ * ext/mad/gstmad.c: (gst_mad_src_query):
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_query):
+ * ext/sidplay/gstsiddec.cc:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query):
+ Pass unhandled queries upstream (useful e.g. for SEEKING query)
+ (fixes #325652; based on patch by: Philippe); make rmdemux return
+ FALSE for position queries, instead of setting -1 as value and
+ returning TRUE.
+
+2006-01-05 21:36:49 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+ Original commit message from CVS:
+ 2006-01-05 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+ (gst_mpeg_parse_process_event, gst_mpeg_parse_pad_added): Don't
+ rewrite timestamps in the case segments are being set from
+ upstream, but use timestamps unmodified. Also send proper position
+ values. This allows for correct time display and makes queries
+ work in sink elements.
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+ (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer):
+ Rename flush_filter to segment_filter, which is better represents
+ what the arreibute does.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event):
+ Activate segment filtering when a timestamp discontinuity is seen.
+
+2006-01-04 15:17:15 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Don't forget that we need to send out a newsegment event after a restart even if we don't have enou...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Don't forget that we need to send out a newsegment event after a
+ restart even if we don't have enough data to decode a frame right
+ now.
+
+2005-12-30 23:51:46 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event): Use the new "audio-shutdown" and "audio-restart" DVD e...
+ Original commit message from CVS:
+ 2005-12-31 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+ Use the new "audio-shutdown" and "audio-restart" DVD events
+ instead of the "spu-still-frame" event to shutdown and restart
+ the audio pipeline.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts):
+ Check for cases where the segment-based adjustment calculation
+ would produce negative values (which result in an overflow) and
+ return GST_CLOCK_TIME_NONE instead.
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+ (gst_dvd_demux_process_event, gst_dvd_demux_send_subbuffer):
+ Add a mechanism to discard audio buffers with timestamps outside
+ the currently set segment. This was causing (sometimes serious)
+ synchronization problems after seeking in DVDs with LPCM audio,
+ since VOBUs usually contain audio material that lies outside the
+ timestamp range specified by the header.
+
+2005-12-30 16:25:05 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mad/gstid3tag.c: Remove lingering reference to GstID3Demux
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_type):
+ Remove lingering reference to GstID3Demux
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
+ Don't output debug saying padding streams are unknown type,
+ because they're not
+
+2005-12-27 19:06:08 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
+ Original commit message from CVS:
+ 2005-12-27 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
+ (gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for
+ LPCM.
+ * gstmpegdemux.h:
+ * gstmpegdemux.c (gst_mpeg_demux_get_video_stream)
+ (gst_mpeg_demux_get_audio_stream):
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream)
+ (gst_dvd_demux_get_audio_stream)
+ (gst_dvd_demux_get_subpicture_stream)
+ (gst_dvd_demux_send_subbuffer):
+ Send current* pad buffers with appropriate caps.
+
+2005-12-26 17:48:32 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/iec958/ac3iec.*: (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
+ Original commit message from CVS:
+ 2005-12-26 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/iec958/ac3iec.h:
+ * gst/iec958/ac3iec.c:
+ (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
+ (ac3iec_init, ac3iec_set_property, ac3iec_get_property): Add a
+ raw-audio property to ac3iec958 that allows setting the source pad
+ caps to raw audio instead of audio/x-iec958. This makes it
+ possible to use ac3iec958 together with the normal alsasink
+ element to drive an external receiver that autodetects AC3
+ content.
+
+2005-12-23 15:48:04 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/iec958/ac3iec.*: Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
+ Original commit message from CVS:
+ * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_setcaps),
+ (ac3iec_chain_dvd):
+ * gst/iec958/ac3iec.h:
+ Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
+
+2005-12-21 10:25:34 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: When getting a seek event, first check if the upstream element can handle it and only do ...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_event):
+ When getting a seek event, first check if the upstream element
+ can handle it and only do our own seek stuff when it can't
+ (should fix #322856).
+
+2005-12-21 09:58:43 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Really convert to BYTES format when we want to convert to bytes (use right variable; fixe...
+ Original commit message from CVS:
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * ext/mpeg2dec/gstmpeg2dec.c: (normal_seek):
+ Really convert to BYTES format when we want to convert
+ to bytes (use right variable; fixes #322856).
+
+2005-12-19 17:26:47 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ Big mpegparse clean up, second round:
+ Original commit message from CVS:
+ 2005-12-19 Martin Soto <martinsoto@users.sourceforge.net>
+ Big mpegparse clean up, second round:
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+ Send and EOS event down the audio pipeline when an still frame
+ event arrives. This prevents the pipeline from locking when a
+ still menu comes directly after a flush.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset):
+ Don't send a newsegment in reset.
+ (gst_mpeg_parse_adjust_ts): Check for invalid timestamps.
+ (gst_mpeg_parse_handle_newsegment, gst_mpeg_parse_process_event):
+ Move the code of handle_newsegment to process_event. Send a
+ NEWSEGMENT after FLUSH_STOP.
+ (gst_mpeg_parse_change_state): Send a NEWSEGMENT right after
+ moving to PAUSED.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event)
+ (gst_mpeg_demux_class_init): Don't override send_event.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
+ (gst_mpeg_demux_send_event, gst_mpeg_demux_send_subbuffer)
+ (gst_mpeg_demux_reset):
+ * gst/mpegstream/gstmpegdemux.h: Get rid of just_flushed
+ attribute.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+ Reset the mpegparse element after a flush.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment):
+ Don't forward events.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+ handle_newsegment is not a virtual method anymore.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_newsegment)
+ (gst_mpeg_parse_reset, gst_mpeg_parse_class_init):
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): Get
+ rid of send_newsegment virtual method.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Only
+ handle DVD events and call the superclass method for other event
+ types.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event): Don't
+ override process_event anymore.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_event)
+ (gst_mpeg_parse_process_event): Move actual event processing to
+ process event so that subclasses can properly override or extend
+ it.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+ Eliminate time parameter in process event.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
+ (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes)
+ (gst_mpeg_demux_send_subbuffer):
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+ (gst_mpeg_parse_parse_packhead, gst_mpeg_parse_event)
+ (gst_mpeg_parse_chain): Use the new adjust_ts method instead of
+ adding the value of the adjust attribute.
+ * gst/mpegstream/gstmpegdemux.h (struct _GstMPEGVideoStream): Get
+ rid of the adjust attribute. Now all timestamp adjustments are
+ performed by mpegparse using the current segment.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+ (gst_mpeg_parse_class_init): Implement the adjust_ts method based
+ on the adjust attribute for SCR values and the current segment.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): New
+ adjust_ts virtual method to adjust timestamps for outgoing
+ buffers.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_newsegment)
+ (gst_mpeg_demux_parse_packet): Don't override send_newsegment.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+ (gst_dvd_demux_handle_newsegment): Don't override
+ handle_newsegment.
+ (gst_dvd_demux_process_event, gst_dvd_demux_handle_dvd_event):
+ Check for DVD events in process_event instead of
+ handle_dvd_event.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
+ (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_send_event):
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_process_event)
+ (gst_mpeg_demux_send_event):
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
+ (gst_dvd_demux_handle_dvd_event):
+ Eliminate the time parameter in send_event.
+
+2005-12-18 15:08:15 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mad/gstid3tag.c: Fix typefinding in id3demux, and then remove it in favour of the new LGPL id3demux in gst-plugin...
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind),
+ (gst_id3_tag_do_caps_nego), (gst_id3_tag_chain), (plugin_init):
+ Fix typefinding in id3demux, and then remove it in favour
+ of the new LGPL id3demux in gst-plugins-good
+ * ext/mad/gstmad.c: (gst_mad_dispose):
+ dispose can run more than once.
+
+2005-12-16 21:56:32 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gst/asfdemux/gstasfmux.c: change some char* into char[]
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_file_start):
+ change some char* into char[]
+
+2005-12-15 17:06:10 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/realmedia/rmdemux.c: Remove memleak from unused GstRMDemuxStream
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+ Remove memleak from unused GstRMDemuxStream
+
+2005-12-12 19:17:11 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/mad/gstid3tag.c: Use the correct function to free typefind factory list.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
+ (gst_id3_tag_do_typefind):
+ Use the correct function to free typefind factory list.
+
+2005-12-09 18:38:53 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: For position and duration queries in TIME format, try the peer first (might be a demuxer).
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_src_query):
+ For position and duration queries in TIME format, try the peer
+ first (might be a demuxer).
+
+2005-12-08 12:45:09 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment): Properly handle non contiguous VOBUs by adding the se...
+ Original commit message from CVS:
+ 2005-12-08 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment):
+ Properly handle non contiguous VOBUs by adding the segment accum
+ field to the adjust value.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+ (gst_dvd_demux_init, gst_dvd_demux_handle_newsegment): Extend
+ handle_newsegment to prevent sending actual newsegment events and
+ use tiemstamp rewriting instead.
+ (gst_dvd_demux_handle_dvd_event): Don't send a newsegment after
+ dvd-lang-codes.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
+ (gst_mpeg_parse_event):
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+ Add a new parameter to handle_newsegment to allow controlling
+ whether newsegment events are forwarded or not.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+ (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
+ (gst_dvd_demux_reset):
+ last_end_ptm and discont_time aren't necessary anymore, since
+ timestamp adjustment is now replaced by newsegment events.
+ (gst_dvd_demux_init): Prevent MPEGParse from adjusting
+ timestamps.
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+ Don't handle dvd-nav-packet events anymore, since the are now
+ replaced by standard newsegment events.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+ (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
+ (gst_dvd_demux_change_state):
+ * gst/mpegstream/gstdvddemux.h:
+ Get rid of the ignore_next_newmedia_discont hack.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+ (gst_dvd_demux_handle_newsegment):
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
+ (gst_mpeg_demux_handle_newsegment): Don't override
+ handle_newsegment anymore. It was only necessary to handle
+ NEWMEDIA events.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
+ (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_set_cur_audio)
+ (gst_dvd_demux_set_cur_subpicture):
+ Reactivate handling of DVD events.
+ * gst/mpegstream/gstmpegparse.c (normal_seek)
+ (gst_mpeg_parse_handle_src_event)
+ (gst_mpeg_parse_handle_src_query):
+ First attempt at reenabling seek.
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+ (gst_mpeg_parse_update_streaminfo)
+ (gst_mpeg_parse_get_rate)
+ (gst_mpeg_parse_convert, gst_mpeg_parse_get_src_query_types)
+ (gst_mpeg_parse_handle_src_query):
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_new_output_pad):
+ Make queries work again.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
+ (gst_mpeg_parse_handle_newsegment)
+ (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_pad_added)
+ (gst_mpeg_parse_chain, gst_mpeg_parse_handle_src_event):
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+ Get rid of the newsegment_pending attribute, and rely instead on
+ proper timestamp adjustment.
+ * gst/mpegstream/gstmpegparse.c
+ (gst_mpeg_parse_get_src_event_masks): Erase.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init):
+ Initialize fields before creating pads to prevent the pad creation
+ callback from failing.
+ (gst_mpeg_parse_reset): Initialize new fields, and change
+ initialization order to match the order in the structure.
+ (gst_mpeg_parse_handle_newsegment): Forward new segment events
+ whenever possible, and update the current segment.
+ (gst_mpeg_parse_send_newsegment): Update the current segment and
+ pending_newsegment.
+ (gst_mpeg_parse_pad_added): Use the current segment to send
+ newsegment events to new pads.
+ (gst_mpeg_parse_chain): Properly add adjust time to sent buffers
+ and events. Properly update newsegment_pending.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+ New fields do_adjust and current_segment.
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegparse.h:
+ Rename handle_discont virtual method to handle_newsegment. Erase
+ some (already commented out support) for old NEW_MEDIA events.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+ (gst_mpeg_parse_reset, gst_mpeg_parse_handle_discont)
+ (gst_mpeg_parse_pad_added, gst_mpeg_parse_parse_packhead)
+ (gst_mpeg_parse_event, gst_mpeg_parse_chain):
+ Erase the "pending_scr" field, and replace it by a slightly
+ different handling of the current SCR. Document code blocks in
+ parse_packhead and chain.
+
+2005-12-07 11:50:10 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/mad/gstid3tag.c: g_warning() are only for really fatal warnings. If we can't decode a tag, just ignore that tag a...
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ g_warning() are only for really fatal warnings. If we can't decode a
+ tag, just ignore that tag and do a GST_WARNING.
+
+2005-12-06 19:48:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * ext/a52dec/gsta52dec.h:
+ * ext/dvdread/dvdreadsrc.h:
+ * ext/lame/gstlame.h:
+ * ext/mad/gstid3tag.c:
+ * ext/mad/gstmad.c:
+ * ext/mad/gstmad.h:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ * ext/sidplay/gstsiddec.h:
+ * gst/ac3parse/gstac3parse.c:
+ * gst/ac3parse/gstac3parse.h:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/iec958/ac3iec.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegclock.h:
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegpacketize.h:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/mpegstream/gstrfc2250enc.h:
+ * gst/realmedia/rmdemux.c:
+ * gst/realmedia/rmdemux.h:
+ * gst/synaesthesia/synaescope.c:
+ expand tabs
+ Original commit message from CVS:
+ expand tabs
+
+2005-12-05 18:12:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.10.0 ===
+
+2005-12-05 18:04:06 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ releasing 0.10.0
+ Original commit message from CVS:
+ releasing 0.10.0
+
+2005-12-05 13:03:40 +0000 Andy Wingo <wingo@pobox.com>
+
+ Update for alloc_buffer changes.
+ Original commit message from CVS:
+ 2005-12-05 Andy Wingo <wingo@pobox.com>
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_push):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+ * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_packet): Update for alloc_buffer changes.
+
+2005-12-05 09:33:32 +0000 Andy Wingo <wingo@pobox.com>
+
+ ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just id3demux and id3mux now. Fixes #323199.
+ Original commit message from CVS:
+ 2005-12-05 Andy Wingo <wingo@pobox.com>
+ * ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just
+ id3demux and id3mux now. Fixes #323199.
+
+2005-12-04 22:36:51 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ update spec file for latest changes
+ Original commit message from CVS:
+ update spec file for latest changes
+
+2005-12-02 12:28:03 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ fix silly Makefile.am bug so they link correctly again
+ Original commit message from CVS:
+ * ext/amrnb/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ fix silly Makefile.am bug so they link correctly again
+
+2005-12-01 19:18:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.9.7 ===
+
+2005-12-01 19:14:57 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ * docs/random/LICENSE:
+ * docs/random/PORTED_09:
+ releasing 0.9.7
+ Original commit message from CVS:
+ releasing 0.9.7
+
+2005-12-01 15:49:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * common:
+ * ext/amrnb/Makefile.am:
+ * gst/realmedia/Makefile.am:
+ Don't know how these escaped my eye before. Fix link flags.
+ Original commit message from CVS:
+ Don't know how these escaped my eye before. Fix link flags.
+
+2005-11-30 18:37:24 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * examples/Makefile.am:
+ * examples/capsfilter/Makefile.am:
+ * examples/capsfilter/capsfilter1.c:
+ * examples/gob/Makefile.am:
+ * examples/gob/gst-identity2.gob:
+ * examples/gstplay/.gitignore:
+ * examples/gstplay/Makefile.am:
+ * examples/gstplay/player.c:
+ * examples/indexing/.gitignore:
+ * examples/indexing/Makefile.am:
+ * examples/indexing/indexmpeg.c:
+ * examples/level/Makefile.am:
+ * examples/level/README:
+ * examples/level/demo.c:
+ * examples/level/plot.c:
+ * examples/stats/Makefile.am:
+ * examples/stats/mp2ogg.c:
+ * examples/switch/.gitignore:
+ * examples/switch/Makefile.am:
+ * examples/switch/switcher.c:
+ no examples
+ Original commit message from CVS:
+ no examples
+
+2005-11-29 11:26:35 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Ref events before sending them to multiple pads, after all gst_pad_send_event() takes ownership of e...
+ Original commit message from CVS:
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_event):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_newsegment),
+ (gst_mpeg_parse_send_event):
+ Ref events before sending them to multiple pads, after all
+ gst_pad_send_event() takes ownership of events. Don't leak
+ events that have not been handled (fixes #322745).
+
+2005-11-28 19:13:51 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+ Original commit message from CVS:
+ 2005-11-28 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+ (gst_dvd_demux_handle_dvd_event): Erase code to prevent mpegparse
+ from making timestamp adjustments. This will have to be re-added
+ in some form in the near future, but in order to do that, some nav
+ packet parsing will be necessary in mpegdemux.
+ * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+ (g_value_set_int, gst_mpeg_parse_set_property)
+ Get rid of do_adjust and use_adjust. Rename max_discont to
+ max_src_gap.
+ (gst_mpeg_parse_parse_packhead): When max_scr_gap has a value of
+ -1, no adjustment is made.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init):
+ Rename max_discont property to max_scr_gap. Erase "adjust"
+ property.
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_event): Don't
+ override send_event anymore, base class does the job.
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event):
+ Base class now does most of the work.
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_event):
+ Generalize to forwarding the event to all source pads in the
+ element.
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+ (gst_mpeg_parse_init, gst_mpeg_parse_set_clock)
+ (gst_mpeg_parse_chain, gst_mpeg_parse_get_property)
+ (gst_mpeg_parse_set_property):
+ Clock synchronization doesn't make sense anymore for a
+ demultiplexer.
+
+2005-11-28 18:54:09 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/realmedia/rmdemux.c: Don't treat normal EOS as a fatal error.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
+ Don't treat normal EOS as a fatal error.
+
+2005-11-28 15:47:01 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/mad/gstmad.c: Proper warning statements,
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Proper warning statements,
+ Don't error if the src pad isn't linked when pushing.
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_change_state):
+ Proper state_change, avoids borkage when going to READY
+
+2005-11-27 15:34:00 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ * gst-libs/Makefile.am:
+ * gst-libs/README:
+ * gst-libs/ext/.gitignore:
+ * gst-libs/gst/media-info/.gitignore:
+ * gst-libs/gst/play/.gitignore:
+ * gst-libs/gst/play/play.h:
+ * gst-libs/gst/play/play.vcproj:
+ no need for an AS_LIBTOOL call
+ Original commit message from CVS:
+ no need for an AS_LIBTOOL call
+
+2005-11-27 14:34:34 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * Makefile.am:
+ * common:
+ * gst-plugins-ugly.spec.in:
+ add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
+ Original commit message from CVS:
+ add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
+
+2005-11-25 17:02:41 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it doesn't ask us to disca...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
+ Prime libmpeg2's pumps with some null custom buffers
+ to ensure it doesn't ask us to discard garbage later yay.
+
+2005-11-25 17:01:46 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it ask us to discard garba...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
+ Prime libmpeg2's pumps with some null custom buffers
+ to ensure it ask us to discard garbage later yay.
+
+2005-11-25 14:50:19 +0000 Michael Smith <msmith@xiph.org>
+
+ ext/a52dec/gsta52dec.*: Accept AC3 in audio/x-private1-ac3 format, which includes
+ Original commit message from CVS:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
+ (gst_a52dec_sink_setcaps), (gst_a52dec_chain),
+ (gst_a52dec_chain_raw):
+ * ext/a52dec/gsta52dec.h:
+ Accept AC3 in audio/x-private1-ac3 format, which includes
+ DVD-specific headers, as well as raw AC3, for compatibility with
+ some demuxers.
+
+2005-11-25 00:03:52 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mad/gstmad.c: When pad_alloc returns other-than-GST_FLOW_OK and mad exits early, skip frame synthesis and consume...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ When pad_alloc returns other-than-GST_FLOW_OK and mad exits early,
+ skip frame synthesis and consume input data as if we'd done the
+ decode. Makes mad not error when the src pad is not connected.
+ (#319784)
+
+2005-11-24 13:58:55 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ * ChangeLog:
+ Erase old CVS conflict line.
+ Original commit message from CVS:
+ Erase old CVS conflict line.
+
+2005-11-24 13:52:49 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init) (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegm...
+ Original commit message from CVS:
+ 2005-11-23 Martin Soto <martinsoto@users.sourceforge.net>
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+ (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegment)
+ (gst_mpeg_parse_chain):
+ * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
+ (gst_mpeg_demux_send_newsegment):
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_subbuffer):
+ * gst/mpegstream/gstmpegparse.h:
+ Rename send_discont method to send_newsegment and add parameters
+ to handle actual segments. Adapt code all around to run with the
+ new name and signature.
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstdvddemux.c:
+ Convert to GST_BOILERPLATE.
+
+2005-11-24 12:23:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ fix AS_LIBTOOL call
+ Original commit message from CVS:
+ fix AS_LIBTOOL call
+
+2005-11-23 21:26:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * Makefile.am:
+ add a torture target
+ Original commit message from CVS:
+ add a torture target
+
+2005-11-23 20:05:47 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.9.6 ===
+
+2005-11-23 19:57:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ releasing 0.9.6
+ Original commit message from CVS:
+ releasing 0.9.6
+
+2005-11-23 00:26:42 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/realmedia/rmdemux.c: Fractional framerates.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+ (gst_rmdemux_src_event), (gst_rmdemux_validate_offset),
+ (find_seek_offset_bytes), (find_seek_offset_time),
+ (gst_rmdemux_perform_seek), (gst_rmdemux_src_query),
+ (gst_rmdemux_loop), (gst_rmdemux_fourcc_isplausible),
+ (gst_rmdemux_chain), (gst_rmdemux_send_event),
+ (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_parse_packet):
+ Fractional framerates.
+
+2005-11-23 00:12:24 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Use fractional framerates
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
+ (gst_mpeg2dec_negotiate_format), (handle_sequence),
+ (gst_mpeg2dec_sink_event):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Use fractional framerates
+
+2005-11-22 19:07:13 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegstream/gstmpegparse.c: set_clock returns a boolean.
+ Original commit message from CVS:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_set_clock):
+ set_clock returns a boolean.
+
+2005-11-22 18:39:36 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Fix seeking even more by sending the newsegment event with the right parameters. Should fix queryin...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Fix seeking even more by sending the newsegment event with the
+ right parameters. Should fix querying in playbin/totem after
+ a seek.
+
+2005-11-22 17:39:36 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstmad.c: Fix seeking in stand-alone mode. Fix nonexistant enum value introduced in previous commit. Improve ...
+ Original commit message from CVS:
+ * ext/mad/gstmad.c: (gst_mad_mode_get_type), (gst_mad_src_query),
+ (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
+ Fix seeking in stand-alone mode. Fix nonexistant enum value
+ introduced in previous commit. Improve debug messages here and
+ there. Actually return a proper return value in the sink event
+ handler.
+
+2005-11-22 17:15:25 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ext/lame/gstlame.c:
+ doh
+ Original commit message from CVS:
+ doh
+
+2005-11-22 17:04:38 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * ext/lame/gstlame.c:
+ * ext/mad/gstmad.c:
+ * ext/sidplay/gstsiddec.cc:
+ fix up GValueEnum
+ Original commit message from CVS:
+ fix up GValueEnum
+
+2005-11-22 12:39:29 +0000 Andy Wingo <wingo@pobox.com>
+
+ * ChangeLog:
+ * ext/lame/gstlame.c:
+ * ext/mad/gstid3tag.c:
+ * ext/sidplay/gstsiddec.cc:
+ Update for gst_tag_setter API changes.
+ Original commit message from CVS:
+ 2005-11-22 Andy Wingo <wingo@pobox.com>
+ * Update for gst_tag_setter API changes.
+
+2005-11-22 11:55:32 +0000 Andy Wingo <wingo@pobox.com>
+
+ * ChangeLog:
+ * ext/a52dec/gsta52dec.c:
+ * ext/mad/gstid3tag.c:
+ * ext/mad/gstmad.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/realmedia/rmdemux.c:
+ ext/a52dec/gsta52dec.c (gst_a52dec_sink_event) ext/mad/gstid3tag.c (gst_id3_tag_sink_event) ext/mad/gstmad.c (gst_mad...
+ Original commit message from CVS:
+ 2005-11-22 Andy Wingo <wingo@pobox.com>
+ * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event)
+ * ext/mad/gstid3tag.c (gst_id3_tag_sink_event)
+ * ext/mad/gstmad.c (gst_mad_chain)
+ * gst/mpegaudioparse/gstmpegaudioparse.c
+ (gst_mp3parse_sink_event)
+ * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+ * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_discont)
+ (gst_mpeg_parse_send_discont, gst_mpeg_parse_pad_added)
+ * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek)
+ (gst_rmdemux_chain, gst_rmdemux_add_stream): Run update-funcnames.
+
+2005-11-22 11:39:06 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/Makefile.am: libgsttagedit => libgsttag
+ Original commit message from CVS:
+ * ext/mad/Makefile.am:
+ libgsttagedit => libgsttag
+
+2005-11-21 23:50:02 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ ext/lame/gstlame.c: Don't take the stream lock
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_sink_event):
+ Don't take the stream lock
+
+2005-11-21 17:34:30 +0000 Andy Wingo <wingo@pobox.com>
+
+ ext/: Don't take the stream lock.
+ Original commit message from CVS:
+ 2005-11-21 Andy Wingo <wingo@pobox.com>
+ * ext/sidplay/gstsiddec.cc (gst_siddec_sink_event):
+ * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event):
+ * ext/mad/gstmad.c (gst_mad_sink_event):
+ * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event): Don't take the
+ stream lock.
+ * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek): Update for
+ stream lock changes.
+
+2005-11-21 16:36:44 +0000 Andy Wingo <wingo@pobox.com>
+
+ *.*: Ran scripts/update-macros. Oh yes.
+ Original commit message from CVS:
+ 2005-11-21 Andy Wingo <wingo@pobox.com>
+ * *.h:
+ * *.c: Ran scripts/update-macros. Oh yes.
+
+2005-11-21 15:12:43 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/mpegstream/: Filler events have beem removed for now.
+ Original commit message from CVS:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event):
+ Filler events have beem removed for now.
+
+2005-11-21 14:08:45 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gst/: Update for GST_FOURCC_FORMAT API change.
+ Original commit message from CVS:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
+ (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr):
+ Update for GST_FOURCC_FORMAT API change.
+
+2005-11-21 10:32:55 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/: Modifications for disapearance of GST_PAD_IS_USABLE()
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
+ (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_parse_packet):
+ Modifications for disapearance of GST_PAD_IS_USABLE()
+
+2005-11-18 16:14:00 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/iec958/ac3iec.c: Remove some setcaps brokenness.
+ Original commit message from CVS:
+ * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_chain_dvd):
+ Remove some setcaps brokenness.
+ Don't crash on bad input.
+
+2005-11-15 22:46:23 +0000 Johan Dahlin <johan@gnome.org>
+
+ ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after calling transform.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after
+ calling transform.
+ (gst_id3_tag_do_typefind): Unref caps
+ * ext/mad/gstmad.c (gst_mad_check_caps_reset): Ditto
+
+2005-11-15 21:00:44 +0000 Johan Dahlin <johan@gnome.org>
+
+ * ext/mad/gstmad.c:
+ remove accidentally commited hack
+ Original commit message from CVS:
+ remove accidentally commited hack
+
+2005-11-15 20:30:53 +0000 Johan Dahlin <johan@gnome.org>
+
+ * ext/mad/gstmad.c:
+ free pad templates
+ Original commit message from CVS:
+ free pad templates
+
+2005-11-15 14:19:38 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe; nice-ify debug message...
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice),
+ (gst_mpeg2dec_sink_event):
+ Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe;
+ nice-ify debug message in event handler; add CHECKME.
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
+ (gst_dvd_demux_send_event), (gst_dvd_demux_process_private),
+ (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset),
+ (gst_dvd_demux_sync_stream_to_time):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+ (gst_mpeg_demux_process_event), (gst_mpeg_demux_send_event),
+ (gst_mpeg_demux_handle_discont), (gst_mpeg_demux_new_output_pad),
+ (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
+ (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_process_private),
+ (gst_mpeg_demux_sync_stream_to_time),
+ (gst_mpeg_demux_handle_src_event), (gst_mpeg_demux_reset):
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+ (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_send_buffer),
+ (gst_mpeg_parse_process_event), (gst_mpeg_parse_send_discont),
+ (gst_mpeg_parse_send_event), (gst_mpeg_parse_event),
+ (gst_mpeg_parse_chain):
+ * gst/mpegstream/gstmpegparse.h:
+ Get rid of GST_PAD_IS_USABLE and fix GstFlowReturn vs. gboolean
+ return value confusion (gst_pad_push vs. gst_pad_send_event and
+ gst_pad_push_event); pass flow return values to caller;
+ miscellaneous fixes and clean-ups.
+
+2005-11-15 08:37:00 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst/mpegstream/gstdvddemux.c:
+ set rank to secondary until it works 100%
+ Original commit message from CVS:
+ set rank to secondary until it works 100%
+
+2005-11-15 07:59:58 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ add mpegstream plugin to spec file
+ Original commit message from CVS:
+ add mpegstream plugin to spec file
+
+2005-11-14 22:18:21 +0000 Martin Soto <martinsoto@users.sourceforge.net>
+
+ gst/mpegstream/Makefile.am (noinst_HEADERS): Add gstrfc2250enc.h.
+ Original commit message from CVS:
+ 2005-11-14 Martin Soto <soto@localhost.localdomain>
+ * gst/mpegstream/Makefile.am (noinst_HEADERS): Add
+ gstrfc2250enc.h.
+
+2005-11-14 21:20:21 +0000 Josef Zlomek <josef.zlomek@xeris.cz>
+
+ partially port the mpegstream plugin to GStreamer 0.9.
+ Original commit message from CVS:
+ 2005-11-14 Martin Soto <martinsoto@users.sourceforge.net>
+ * configure.ac:
+ * gst/mpegstream/Makefile.am:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegpacketize.c:
+ * gst/mpegstream/gstmpegpacketize.h:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstmpegstream.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/mpegstream/gstrfc2250enc.h:
+ Applied patch from Josef Zlomek <josef.zlomek@xeris.cz> to
+ partially port the mpegstream plugin to GStreamer 0.9.
+
+2005-11-14 17:13:20 +0000 Andy Wingo <wingo@pobox.com>
+
+ configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better debugging, allows dll builds on windows. Fixes #316076.
+ Original commit message from CVS:
+ 2005-11-14 Andy Wingo <wingo@pobox.com>
+ * configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better
+ debugging, allows dll builds on windows. Fixes #316076.
+
+2005-11-11 19:37:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ back to head
+ Original commit message from CVS:
+ back to head
+
+=== release 0.9.5 ===
+
+2005-11-11 19:35:55 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ releasing 0.9.5
+ Original commit message from CVS:
+ releasing 0.9.5
+
+2005-10-27 21:50:11 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Forward GstFlowReturn about everywhere.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
+ (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
+ (handle_sequence), (handle_picture), (handle_slice),
+ (gst_mpeg2dec_chain), (gst_mpeg2dec_src_query), (normal_seek),
+ (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
+ Forward GstFlowReturn about everywhere.
+ Handle seeking correctly.
+
+2005-10-27 17:26:13 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: Small cleanups in refcounting.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format),
+ (handle_sequence), (handle_slice), (gst_mpeg2dec_chain),
+ (gst_mpeg2dec_src_query), (gst_mpeg2dec_change_state):
+ Small cleanups in refcounting.
+
+2005-10-26 16:45:04 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/mpeg2dec/gstmpeg2dec.*: Removed lots of dubious code.
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+ (gst_mpeg2dec_dispose), (gst_mpeg2dec_reset),
+ (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
+ (handle_sequence), (handle_picture):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Removed lots of dubious code.
+ Handle flushing and seeking correctly. Still leaks though...
+
+2005-10-24 13:37:47 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * ChangeLog:
+ * configure.ac:
+ port plugins listing changes
+ Original commit message from CVS:
+ port plugins listing changes
+
+2005-10-23 23:06:09 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.9.4 ===
+
+2005-10-23 22:44:44 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * Makefile.am:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.signals:
+ * docs/plugins/inspect/plugin-a52dec.xml:
+ * docs/plugins/inspect/plugin-amrnb.xml:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.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-rmdemux.xml:
+ * gst/realmedia/rmdemux.c:
+ * po/POTFILES.in:
+ releasing 0.9.4
+ Original commit message from CVS:
+ releasing 0.9.4
+
+2005-10-23 14:32:49 +0000 Julien Moutte <julien@moutte.net>
+
+ gst/realmedia/rmdemux.c: STOPPED->FAILED
+ Original commit message from CVS:
+ 2005-10-23 Julien MOUTTE <julien@moutte.net>
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_loop): STOPPED->FAILED
+
+2005-10-21 16:22:00 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ add packaging of a52dec
+ Original commit message from CVS:
+ add packaging of a52dec
+
+2005-10-21 11:58:38 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: Set correct stream time in newsegment event.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+ (gst_rmdemux_perform_seek), (gst_rmdemux_src_query):
+ Set correct stream time in newsegment event.
+
+2005-10-20 22:43:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ext/Makefile.am:
+ fix distcheck
+ Original commit message from CVS:
+ fix distcheck
+
+2005-10-20 22:40:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * ext/Makefile.am:
+ fix distcheck
+ Original commit message from CVS:
+ fix distcheck
+
+2005-10-20 09:51:58 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/a52dec/: Re-enable CPU flags, use liboil to get them.
+ Original commit message from CVS:
+ * ext/a52dec/Makefile.am:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_base_init),
+ (gst_a52dec_class_init), (gst_a52dec_sink_event),
+ (gst_a52dec_change_state):
+ * ext/a52dec/gsta52dec.h:
+ Re-enable CPU flags, use liboil to get them.
+
+2005-10-20 09:00:30 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Port AC3 decoder to 0.9 (#318849).
+ Original commit message from CVS:
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+ * configure.ac:
+ * ext/a52dec/Makefile.am:
+ * ext/a52dec/gsta52dec.c:
+ * ext/a52dec/gsta52dec.h:
+ Port AC3 decoder to 0.9 (#318849).
+
+2005-10-20 08:30:33 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/sidplay/gstsiddec.cc: Small fixes and more error messages.
+ Original commit message from CVS:
+ * ext/sidplay/gstsiddec.cc:
+ Small fixes and more error messages.
+
+2005-10-19 16:01:35 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ API change fixen.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
+ (gst_amrnbparse_state_change):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+ * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/sidplay/gstsiddec.cc:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+ (gst_rmdemux_src_query), (gst_rmdemux_src_query_types):
+ API change fixen.
+
+2005-10-19 12:43:28 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: GST_DOC has been renamed to GST_DOCBOOK_CHECK
+ Original commit message from CVS:
+ * configure.ac:
+ GST_DOC has been renamed to GST_DOCBOOK_CHECK
+
+2005-10-19 09:47:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ configure.ac: some docs I had
+ Original commit message from CVS:
+ * configure.ac:
+ some docs I had
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+ trivial fixes
+
+2005-10-18 13:23:22 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/realmedia/rmdemux.c: segment-start/done API change.
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+ (gst_rmdemux_perform_seek):
+ segment-start/done API change.
+
+2005-10-17 17:50:45 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * common:
+ * gst/iec958/ac3iec.c:
+ Set buffer durations on IEC958 buffers.
+ Original commit message from CVS:
+ Set buffer durations on IEC958 buffers.
+
+2005-10-16 17:06:42 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ configure.ac: Fix glib check
+ Original commit message from CVS:
+ * configure.ac:
+ Fix glib check
+
+2005-10-13 19:14:25 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ ext/mad/gstid3tag.c: Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
+
+2005-10-13 15:29:56 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ examples/stats/mp2ogg.c: yes, typo fixes
+ Original commit message from CVS:
+ * examples/stats/mp2ogg.c:
+ yes, typo fixes
+
+2005-10-12 14:30:36 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition
+ Original commit message from CVS:
+ * examples/indexing/indexmpeg.c: (main):
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_init):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_is_open),
+ (dvdnavsrc_set_property), (dvdnavsrc_open), (dvdnavsrc_close),
+ (dvdnavsrc_event), (dvdnavsrc_convert), (dvdnavsrc_query):
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_set_property),
+ (dvdreadsrc_srcpad_query), (dvdreadsrc_get),
+ (dvdreadsrc_open_file), (dvdreadsrc_close_file):
+ * ext/dvdread/dvdreadsrc.h:
+ * ext/lame/gstlame.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init):
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
+ * gst/iec958/ac3iec.h:
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
+ * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init):
+ renamed GST_FLAGS macros to GST_OBJECT_FLAGS
+ moved bitshift from macro to enum definition
+
+2005-10-11 16:37:16 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ newsegment API update.
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
+ (gst_rmdemux_chain), (gst_rmdemux_add_stream):
+ newsegment API update.
+
+2005-10-06 13:14:38 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/amrnbdec.c: Mark invalid frame sizes
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c:
+ Mark invalid frame sizes
+ * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+ UNUSABLE is not to be used here, just push out stuff so
+ probes can continue linking or making the pad usable.
+
+2005-10-05 11:25:51 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/realmedia/rmdemux.c:
+ Improve seek error-resilience.
+ Original commit message from CVS:
+ Improve seek error-resilience.
+ Better error handling generally.
+
+2005-10-03 17:59:55 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * configure.ac:
+ back to head
+ Original commit message from CVS:
+ back to head
+
+=== release 0.9.3 ===
+
+2005-10-03 17:49:44 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * README:
+ * configure.ac:
+ * ext/sidplay/Makefile.am:
+ release time
+ Original commit message from CVS:
+ release time
+
+2005-09-30 16:43:12 +0000 Michael Smith <msmith@xiph.org>
+
+ * gst/realmedia/rmdemux.h:
+ Forgot to commit this file. I hate Nano.
+ Original commit message from CVS:
+ Forgot to commit this file. I hate Nano.
+
+2005-09-30 16:39:47 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * common:
+ * gst/realmedia/rmdemux.c:
+ Sanity checks and memory leak fixes for real demuxer
+ Original commit message from CVS:
+ Sanity checks and memory leak fixes for real demuxer
+
+2005-09-29 13:44:15 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/realmedia/rmdemux.c: Real demuxer fixes. Make it more bulletproof against bad data, identify a few more stream ty...
+ Original commit message from CVS:
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_src_event),
+ (gst_rmdemux_perform_seek), (gst_rmdemux_loop),
+ (gst_rmdemux_send_event), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
+ Real demuxer fixes. Make it more bulletproof against bad data,
+ identify a few more stream types.
+ Fix seeking so that it works (at least with the seek example
+ program; it still fails with totem).
+
+2005-09-26 14:41:23 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.c: Set correct caps on buffers too.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+ Set correct caps on buffers too.
+
+2005-09-26 14:31:53 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/mpegaudioparse/gstmpegaudioparse.*: Put timestamps on buffers.
+ Original commit message from CVS:
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
+ (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Put timestamps on buffers.
+
+2005-09-21 22:21:22 +0000 Flavio Oliveira <flavio.oliveira@indt.org.br>
+
+ * ChangeLog:
+ * ext/amrnb/amrnbenc.c:
+ Changed amrnbenc description, it is an encoder, not decoder.
+ Original commit message from CVS:
+ Changed amrnbenc description, it is an encoder, not decoder.
+
+2005-09-21 16:21:45 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/iec958/ac3_padder.c:
+ * gst/iec958/ac3_padder.h:
+ * gst/iec958/ac3iec.c:
+ Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers and dump the frame (as a probable sync failu...
+ Original commit message from CVS:
+ Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers
+ more accurate, and to check AC3 checksums (both of them in each frame),
+ and dump the frame (as a probable sync failure) if they don't match.
+ General code cleanup, improved comments. Changed to not construct the
+ header backwards, and not byteswap everything else. If we end up needing
+ to do little-endian output, we should swap in the element doing the
+ output (AC3 is big-endian).
+
+2005-09-20 17:37:54 +0000 Christian Schaller <uraeus@gnome.org>
+
+ * gst-plugins-ugly.spec.in:
+ fix spec file for ugly
+ Original commit message from CVS:
+ fix spec file for ugly
+
+2005-09-19 23:25:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * docs/plugins/inspect/plugin-lame.xml:
+ revert empty commit
+ Original commit message from CVS:
+ revert empty commit
+
+2005-09-19 23:24:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * docs/plugins/scan.stamp:
+ whoops, wrong files
+ Original commit message from CVS:
+ whoops, wrong files
+
+2005-09-19 23:21:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ docs/plugins/gst-plugins-ugly-plugins.*: commit missing files
+ Original commit message from CVS:
+ * docs/plugins/gst-plugins-ugly-plugins.args:
+ * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+ * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+ * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+ commit missing files
+ * docs/plugins/inspect/plugin-lame.xml:
+ update
+
+2005-09-19 16:44:13 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * Makefile.am:
+ * common:
+ * gst-plugins-ugly.spec.in:
+ add check-valgrind target
+ Original commit message from CVS:
+ add check-valgrind target
+
+2005-09-19 13:46:35 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * docs/plugins/scanobj-build.stamp:
+ add stamp
+ Original commit message from CVS:
+ add stamp
+
+2005-09-19 11:07:40 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/lame/gstlame.c: Set caps on outgoing buffers.
+ Original commit message from CVS:
+ * ext/lame/gstlame.c: (gst_lame_chain):
+ Set caps on outgoing buffers.
+
+2005-09-16 16:04:28 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * ext/lame/gstlame.c:
+ * ext/lame/gstlame.h:
+ clean up further so we don't try to set up five times for a simple pipeline
+ Original commit message from CVS:
+ clean up further so we don't try to set up five times for
+ a simple pipeline
+
+2005-09-16 15:43:08 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * common:
+ * gst/iec958/ac3iec.c:
+ Set setcaps function on sink pad, not source pad. Produce correct caps on output buffers.
+ Original commit message from CVS:
+ Set setcaps function on sink pad, not source pad. Produce correct caps
+ on output buffers.
+
+2005-09-11 17:53:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-iec958.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+ * docs/plugins/inspect/plugin-rmdemux.xml:
+ update inspect with source
+ Original commit message from CVS:
+ update inspect with source
+
+2005-09-07 13:42:44 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ ext/mad/gstid3tag.c: gsttaginterface.h -> gsttagsetter.h
+ Original commit message from CVS:
+ * ext/mad/gstid3tag.c:
+ gsttaginterface.h -> gsttagsetter.h
+
+2005-09-06 14:06:51 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * configure.ac:
+ back to HEAD
+ Original commit message from CVS:
+ back to HEAD
+
+=== release 0.9.1 ===
+
+2005-09-06 14:05:40 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * ChangeLog:
+ * NEWS:
+ * README:
+ * RELEASE:
+ * autogen.sh:
+ * configure.ac:
+ releasing 0.9.2
+ Original commit message from CVS:
+ releasing 0.9.2
+
+2005-09-06 12:00:33 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ ext/amrnb/: State change function updates.
+ Original commit message from CVS:
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_state_change):
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_state_change):
+ State change function updates.
+
+2005-09-05 17:24:20 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ ext/mpeg2dec/gstmpeg2dec.c: GST_CAT_SEEK disappeared from the public API at some point
+ Original commit message from CVS:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ GST_CAT_SEEK disappeared from the public API at some point
+
+2005-09-05 11:42:10 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/iec958/ac3_padder.c:
+ * gst/iec958/ac3_padder.h:
+ doc fixes
+ Original commit message from CVS:
+ doc fixes
+
+2005-09-04 19:28:29 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * Makefile.am:
+ * autogen.sh:
+ * common:
+ * configure.ac:
+ * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+ * docs/plugins/inspect-build.stamp:
+ * docs/plugins/inspect.stamp:
+ * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+ * docs/plugins/inspect/plugin-iec958.xml:
+ * docs/plugins/inspect/plugin-lame.xml:
+ * docs/plugins/inspect/plugin-mad.xml:
+ * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+ * docs/plugins/inspect/plugin-rmdemux.xml:
+ docs for ugly plugins
+ Original commit message from CVS:
+ docs for ugly plugins
+
+2005-09-02 18:01:33 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst-plugins-ugly.spec.in:
+ * gst/iec958/Makefile.am:
+ build fixes
+ Original commit message from CVS:
+ build fixes
+
+2005-09-02 17:04:39 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/iec958/ac3iec.c:
+ Accept audio/x-private1-a3c on sink pad
+ Original commit message from CVS:
+ Accept audio/x-private1-a3c on sink pad
+
+2005-09-02 17:01:14 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst-plugins-ugly.spec.in:
+ spec updates
+ Original commit message from CVS:
+ spec updates
+
+2005-09-02 15:43:54 +0000 Andy Wingo <wingo@pobox.com>
+
+ * examples/gstplay/player.c:
+ * examples/stats/mp2ogg.c:
+ * ext/a52dec/gsta52dec.c:
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c:
+ * ext/amrnb/amrnbparse.c:
+ * ext/dvdnav/dvdnavsrc.c:
+ * ext/dvdread/dvdreadsrc.c:
+ * ext/lame/gstlame.c:
+ * ext/mad/gstid3tag.c:
+ * ext/mad/gstmad.c:
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst/ac3parse/gstac3parse.c:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfmux.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/iec958/ac3iec.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegparse.c:
+ * gst/mpegstream/gstrfc2250enc.c:
+ * gst/realmedia/rmdemux.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ All plugins updated for element state changes.
+ Original commit message from CVS:
+ 2005-09-02 Andy Wingo <wingo@pobox.com>
+ * All plugins updated for element state changes.
+
+2005-09-02 14:19:17 +0000 Michael Smith <msmith@xiph.org>
+
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/iec958/ac3iec.c:
+ Fix return types in setcaps functions
+ Original commit message from CVS:
+ Fix return types in setcaps functions
+
+2005-09-02 13:37:13 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/iec958/ac3iec.c:
+ Changes to correctly use first_access parameter in ac3 and lpcm plugins.
+ Original commit message from CVS:
+ Changes to correctly use first_access parameter in ac3 and lpcm plugins.
+ Some general cleanups in iec958 framer.
+
+2005-09-01 21:07:34 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * m4/Makefile.am:
+ * m4/as-arts.m4:
+ * m4/esd.m4:
+ * m4/gst-alsa.m4:
+ * m4/gst-artsc.m4:
+ * m4/gst-matroska.m4:
+ * m4/ogg.m4:
+ * m4/vorbis.m4:
+ fix distcheck; remove some old m4s
+ Original commit message from CVS:
+ fix distcheck; remove some old m4s
+
+2005-09-01 17:31:21 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * configure.ac:
+ * gst/iec958/Makefile.am:
+ * gst/iec958/ac3_padder.c:
+ * gst/iec958/ac3_padder.h:
+ * gst/iec958/ac3iec.c:
+ * gst/iec958/ac3iec.h:
+ AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
+ Original commit message from CVS:
+ AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
+
+2005-09-01 11:52:34 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/dvdlpcmdec/gstdvdlpcmdec.c: Cleanups, fixed header parsing and stripping.
+ Original commit message from CVS:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_setcaps),
+ (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
+ (gst_dvdlpcmdec_change_state):
+ Cleanups, fixed header parsing and stripping.
+
+2005-09-01 11:34:39 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ Use the right bytes when parsing the LPCM dvd header
+ Original commit message from CVS:
+ Use the right bytes when parsing the LPCM dvd header
+
+2005-09-01 11:16:15 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ Return the correct values from chain function
+ Original commit message from CVS:
+ Return the correct values from chain function
+
+2005-09-01 10:04:53 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * common:
+ * docs/Makefile.am:
+ * docs/plugins/.gitignore:
+ * docs/random/ChangeLog-0.8:
+ * docs/version.entities.in:
+ adding doc stuff
+ Original commit message from CVS:
+ adding doc stuff
+
+2005-08-31 19:37:08 +0000 Michael Smith <msmith@xiph.org>
+
+ * ChangeLog:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ Restructure LPCM decoder to not expect the demuxer to parse the LPCM header; instead do this internally. Also support...
+ Original commit message from CVS:
+ Restructure LPCM decoder to not expect the demuxer to parse the LPCM
+ header; instead do this internally. Also support the old way, using
+ a different mime-type. CVS:
+
+2001-12-17 18:37:01 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ building up speed
+ Original commit message from CVS:
+ building up speed
+
--- /dev/null
+GStreamer is currently maintained by the consensus of a number
+of people, including, but not limited to:
+
+ Jan Schmidt <thaytan@noraisin.net>
+ Wim Taymans <wim.taymans@gmail.com>
+ David Schleef <ds@schleef.org>
+ Tim-Philipp Müller <tim centricular net>
+ Sebastian Dröge <slomo@coaxion.net>
+
+Maintainer-related issues should be addressed to:
+
+ gstreamer-devel@lists.freedesktop.org
--- /dev/null
+GStreamer 1.20 Release Notes
+
+GStreamer 1.20 has not been released yet. It is scheduled for release
+around October/November 2021.
+
+1.19.x is the unstable development version that is being developed in
+the git main branch and which will eventually result in 1.20, and 1.19.2
+is the current development release in that series
+
+It is expected that feature freeze will be in early October 2021,
+followed by one or two 1.19.9x pre-releases and the new 1.20 stable
+release around October/November 2021.
+
+1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
+1.10, 1.8, 1.6,, 1.4, 1.2 and 1.0 release series.
+
+See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
+version of this document.
+
+Last updated: Wednesday 22 September 2021, 18:00 UTC (log)
+
+Introduction
+
+The GStreamer team is proud to announce a new major feature release in
+the stable 1.x API series of your favourite cross-platform multimedia
+framework!
+
+As always, this release is again packed with many new features, bug
+fixes and other improvements.
+
+Highlights
+
+- this section will be completed in due course
+
+Major new features and changes
+
+Noteworthy new features and API
+
+- this section will be filled in in due course
+
+New elements
+
+- this section will be filled in in due course
+
+New element features and additions
+
+- this section will be filled in in due course
+
+Plugin and library moves
+
+- this section will be filled in in due course
+
+- There were no plugin moves or library moves in this cycle.
+
+Plugin removals
+
+The following elements or plugins have been removed:
+
+- this section will be filled in in due course
+
+Miscellaneous API additions
+
+- this section will be filled in in due course
+
+Miscellaneous performance, latency and memory optimisations
+
+- this section will be filled in in due course
+
+Miscellaneous other changes and enhancements
+
+- this section will be filled in in due course
+
+Tracing framework and debugging improvements
+
+- this section will be filled in in due course
+
+Tools
+
+- this section will be filled in in due course
+
+GStreamer RTSP server
+
+- this section will be filled in in due course
+
+GStreamer VAAPI
+
+- this section will be filled in in due course
+
+GStreamer OMX
+
+- this section will be filled in in due course
+
+GStreamer Editing Services and NLE
+
+- this section will be filled in in due course
+
+GStreamer validate
+
+- this section will be filled in in due course
+
+GStreamer Python Bindings
+
+- this section will be filled in in due course
+
+GStreamer C# Bindings
+
+- this section will be filled in in due course
+
+GStreamer Rust Bindings and Rust Plugins
+
+The GStreamer Rust bindings are released separately with a different
+release cadence that’s tied to gtk-rs, but the latest release has
+already been updated for the upcoming new GStreamer 1.20 API.
+
+gst-plugins-rs, the module containing GStreamer plugins written in Rust,
+has also seen lots of activity with many new elements and plugins.
+
+What follows is a list of elements and plugins available in
+gst-plugins-rs, so people don’t miss out on all those potentially useful
+elements that have no C equivalent.
+
+- FIXME: add new elements
+
+Rust audio plugins
+
+- audiornnoise: New element for audio denoising which implements the
+ noise removal algorithm of the Xiph RNNoise library, in Rust
+- rsaudioecho: Port of the audioecho element from gst-plugins-good
+ rsaudioloudnorm: Live audio loudness normalization element based on
+ the FFmpeg af_loudnorm filter
+- claxondec: FLAC lossless audio codec decoder element based on the
+ pure-Rust claxon implementation
+- csoundfilter: Audio filter that can use any filter defined via the
+ Csound audio programming language
+- lewtondec: Vorbis audio decoder element based on the pure-Rust
+ lewton implementation
+
+Rust video plugins
+
+- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
+ on a pure-Rust CD+G implementation, used for example by karaoke CDs
+- cea608overlay: CEA-608 Closed Captions overlay element
+- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
+ subtitles) converter
+- tttocea608: CEA-608 Closed Captions from timed-text converter
+- mccenc/mccparse: MacCaption Closed Caption format encoder and parser
+- sccenc/sccparse: Scenarist Closed Caption format encoder and parser
+- dav1dec: AV1 video decoder based on the dav1d decoder implementation
+ by the VLC project
+- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
+ encoder implementation
+- rsflvdemux: Alternative to the flvdemux FLV demuxer element from
+ gst-plugins-good, not feature-equivalent yet
+- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
+ implementations by the image-rs project
+
+Rust text plugins
+
+- textwrap: Element for line-wrapping timed text (e.g. subtitles) for
+ better screen-fitting, including hyphenation support for some
+ languages
+
+Rust network plugins
+
+- reqwesthttpsrc: HTTP(S) source element based on the Rust
+ reqwest/hyper HTTP implementations and almost feature-equivalent
+ with the main GStreamer HTTP source souphttpsrc
+- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
+- awstranscriber: Live audio to timed text transcription element using
+ the Amazon AWS Transcribe API
+
+Generic Rust plugins
+
+- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
+ on libsodium/NaCl
+- togglerecord: Recording element that allows to pause/resume
+ recordings easily and considers keyframe boundaries
+- fallbackswitch/fallbacksrc: Elements for handling potentially
+ failing (network) sources, restarting them on errors/timeout and
+ showing a fallback stream instead
+- threadshare: Set of elements that provide alternatives for various
+ existing GStreamer elements but allow to share the streaming threads
+ between each other to reduce the number of threads
+- rsfilesrc/rsfilesink: File source/sink elements as replacements for
+ the existing filesrc/filesink elements
+
+Build and Dependencies
+
+- this section will be filled in in due course
+
+gst-build
+
+- this section will be filled in in due course
+
+Cerbero
+
+Cerbero is a meta build system used to build GStreamer plus dependencies
+on platforms where dependencies are not readily available, such as
+Windows, Android, iOS and macOS.
+
+General improvements
+
+- this section will be filled in in due course
+
+macOS / iOS
+
+- this section will be filled in in due course
+
+Windows
+
+- this section will be filled in in due course
+
+Windows MSI installer
+
+- this section will be filled in in due course
+
+Linux
+
+- this section will be filled in in due course
+
+Android
+
+- this section will be filled in in due course
+
+Platform-specific changes and improvements
+
+Android
+
+- this section will be filled in in due course
+
+macOS and iOS
+
+- this section will be filled in in due course
+
+Windows
+
+- this section will be filled in in due course
+
+Linux
+
+- this section will be filled in in due course
+
+Documentation improvements
+
+- this section will be filled in in due course
+
+Possibly Breaking Changes
+
+- this section will be filled in in due course
+- MPEG-TS SCTE-35 API changes (FIXME: flesh out)
+- gst_parse_launch() and friends now error out on non-existing
+ properties on top-level bins where they would silently fail and
+ ignore those before.
+
+Known Issues
+
+- this section will be filled in in due course
+
+- There are a couple of known WebRTC-related regressions/blockers:
+
+ - webrtc: DTLS setup with Chrome is broken
+ - webrtcbin: First keyframe is usually lost
+
+Contributors
+
+- this section will be filled in in due course
+
+… and many others who have contributed bug reports, translations, sent
+suggestions or helped testing.
+
+Stable 1.20 branch
+
+After the 1.20.0 release there will be several 1.20.x bug-fix releases
+which will contain bug fixes which have been deemed suitable for a
+stable branch, but no new features or intrusive changes will be added to
+a bug-fix release usually. The 1.20.x bug-fix releases will be made from
+the git 1.20 branch, which will be a stable branch.
+
+1.20.0
+
+1.20.0 is scheduled to be released around October/November 2021.
+
+Schedule for 1.22
+
+Our next major feature release will be 1.22, and 1.21 will be the
+unstable development version leading up to the stable 1.22 release. The
+development of 1.21/1.22 will happen in the git main branch.
+
+The plan for the 1.22 development cycle is yet to be confirmed.
+
+1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
+1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
+
+------------------------------------------------------------------------
+
+These release notes have been prepared by Tim-Philipp Müller with
+contributions from …
+
+License: CC BY-SA 4.0
--- /dev/null
+GStreamer 1.19.x development series
+
+WHAT IT IS
+----------
+
+This is GStreamer, a framework for streaming media.
+
+WHERE TO START
+--------------
+
+We have a website at
+
+ https://gstreamer.freedesktop.org
+
+Our documentation, including tutorials, API reference and FAQ can be found at
+
+ https://gstreamer.freedesktop.org/documentation/
+
+You can subscribe to our mailing lists:
+
+ https://lists.freedesktop.org/mailman/listinfo/gstreamer-announce
+
+ https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
+
+We track bugs, feature requests and merge requests (patches) in GitLab at
+
+ https://gitlab.freedesktop.org/gstreamer/
+
+You can join us on IRC - #gstreamer on irc.freenode.org
+
+GStreamer 1.0 series
+--------------------
+
+Starring
+
+ GSTREAMER
+
+The core around which all other modules revolve. Base functionality and
+libraries, some essential elements, documentation, and testing.
+
+ BASE
+
+A well-groomed and well-maintained collection of GStreamer plug-ins and
+elements, spanning the range of possible types of elements one would want
+to write for GStreamer.
+
+And introducing, for the first time ever, on the development screen ...
+
+ THE GOOD
+
+ --- "Such ingratitude. After all the times I've saved your life."
+
+A collection of plug-ins you'd want to have right next to you on the
+battlefield. Shooting sharp and making no mistakes, these plug-ins have it
+all: good looks, good code, and good licensing. Documented and dressed up
+in tests. If you're looking for a role model to base your own plug-in on,
+here it is.
+
+If you find a plot hole or a badly lip-synced line of code in them,
+let us know - it is a matter of honour for us to ensure Blondie doesn't look
+like he's been walking 100 miles through the desert without water.
+
+ THE UGLY
+
+ --- "When you have to shoot, shoot. Don't talk."
+
+There are times when the world needs a color between black and white.
+Quality code to match the good's, but two-timing, backstabbing and ready to
+sell your freedom down the river. These plug-ins might have a patent noose
+around their neck, or a lock-up license, or any other problem that makes you
+think twice about shipping them.
+
+We don't call them ugly because we like them less. Does a mother love her
+son less because he's not as pretty as the other ones ? No - she commends
+him on his great personality. These plug-ins are the life of the party.
+And we'll still step in and set them straight if you report any unacceptable
+behaviour - because there are two kinds of people in the world, my friend:
+those with a rope around their neck and the people who do the cutting.
+
+ THE BAD
+
+ --- "That an accusation?"
+
+No perfectly groomed moustache or any amount of fine clothing is going to
+cover up the truth - these plug-ins are Bad with a capital B.
+They look fine on the outside, and might even appear to get the job done, but
+at the end of the day they're a black sheep. Without a golden-haired angel
+to watch over them, they'll probably land in an unmarked grave at the final
+showdown.
+
+Don't bug us about their quality - exercise your Free Software rights,
+patch up the offender and send us the patch on the fastest steed you can
+steal from the Confederates. Because you see, in this world, there's two
+kinds of people, my friend: those with loaded guns and those who dig.
+You dig.
+
+The Lowdown
+-----------
+
+ --- "I've never seen so many plug-ins wasted so badly."
+
+GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
+the chaff. Also, distributors have brought up issues about the legal status
+of some of the plug-ins we ship. To remedy this, we've divided the previous
+set of available plug-ins into four modules:
+
+- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
+ of possible types of elements; these are continuously kept up-to-date
+ with any core changes during the development series.
+
+ - We believe distributors can safely ship these plug-ins.
+ - People writing elements should base their code on these elements.
+ - These elements come with examples, documentation, and regression tests.
+
+- gst-plugins-good: a set of plug-ins that we consider to have good quality
+ code, correct functionality, our preferred license (LGPL for the plug-in
+ code, LGPL or LGPL-compatible for the supporting library).
+
+ - We believe distributors can safely ship these plug-ins.
+ - People writing elements should base their code on these elements.
+
+- gst-plugins-ugly: a set of plug-ins that have good quality and correct
+ functionality, but distributing them might pose problems. The license
+ on either the plug-ins or the supporting libraries might not be how we'd
+ like. The code might be widely known to present patent problems.
+
+ - Distributors should check if they want/can ship these plug-ins.
+ - People writing elements should base their code on these elements.
+
+- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
+ rest. They might be close to being good quality, but they're missing
+ something - be it a good code review, some documentation, a set of tests,
+ a real live maintainer, or some actual wide use.
+ If the blanks are filled in they might be upgraded to become part of
+ either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
+
+ - If the plug-ins break, you can't complain - instead, you can fix the
+ problem and send us a patch, or bribe someone into fixing them for you.
+ - New contributors can start here for things to work on.
+
+PLATFORMS
+---------
+
+- Linux is of course fully supported
+- FreeBSD is reported to work; other BSDs should work too; same for Solaris
+- MacOS works, binary 1.x packages can be built using the cerbero build tool
+- Windows works; binary 1.x packages can be built using the cerbero build tool
+ - MSys/MinGW builds
+ - Microsoft Visual Studio builds are also available and supported
+- Android works, binary 1.x packages can be built using the cerbero build tool
+- iOS works
+
+INSTALLING FROM PACKAGES
+------------------------
+
+You should always prefer installing from packages first. GStreamer is
+well-maintained for a number of distributions, including Fedora, Debian,
+Ubuntu, Mandrake, Arch Linux, Gentoo, ...
+
+Only in cases where you:
+
+ - want to hack on GStreamer
+ - want to verify that a bug has been fixed
+ - do not have a sane distribution
+
+should you choose to build from source tarballs or git.
+
+Find more information about the various packages at
+
+ https://gstreamer.freedesktop.org/download/
+
+COMPILING FROM SOURCE TARBALLS
+------------------------------
+
+- again, make sure that you really need to install from source!
+ If GStreamer is one of your first projects ever that you build from source,
+ consider taking on an easier project.
+
+- you need a recent version of Meson installed, see
+
+ http://mesonbuild.com/Getting-meson.html
+
+ and
+
+ https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
+
+- run
+
+ meson build
+ ninja -C build
+
+ to build GStreamer.
+
+- if you want to install it (not required, but what you usually want to do), run
+
+ ninja -C build install
+
+- try out a simple test:
+ gst-launch-1.0 -v fakesrc num_buffers=5 ! fakesink
+ (If you didn't install GStreamer, run `./build/tools/gst-launch-1.0`)
+
+ If it outputs a bunch of messages from fakesrc and fakesink, everything is
+ ok.
+
+ If it did not work, keep in mind that you might need to adjust the
+ PATH and/or LD_LIBRARY_PATH environment variables to make the system
+ find GStreamer in the prefix where you installed (by default that is /usr/local).
+
+- After this, you're ready to install gst-plugins, which will provide the
+ functionality you're probably looking for by now, so go on and read
+ that README.
+
+COMPILING FROM GIT
+------------------
+
+You can build an uninstalled GStreamer from git for development or testing
+purposes without affecting your system installation.
+
+Get started with:
+
+ git clone https://gitlab.freedesktop.org/gstreamer/gst-build
+ meson build
+ ninja -C build
+ ninja -C build uninstalled
+
+For more information, see the `gst-build` module and its documentation:
+
+ https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
+
+
+PLUG-IN DEPENDENCIES AND LICENSES
+---------------------------------
+
+GStreamer is developed under the terms of the LGPL (see COPYING file for
+details). Some of our plug-ins however rely on libraries which are available
+under other licenses. This means that if you are distributing an application
+which has a non-GPL compatible license (for instance a closed-source
+application) with GStreamer, you have to make sure not to distribute GPL-linked
+plug-ins.
+
+When using GPL-linked plug-ins, GStreamer is for all practical reasons
+under the GPL itself.
+
+HISTORY
+-------
+
+The fundamental design comes from the video pipeline at Oregon Graduate
+Institute, as well as some ideas from DirectMedia. It's based on plug-ins that
+will provide the various codec and other functionality. The interface
+hopefully is generic enough for various companies (ahem, Apple) to release
+binary codecs for Linux, until such time as they get a clue and release the
+source.
--- /dev/null
+=================================
+ GStreamer Static Linking README
+=================================
+
+DRAFT, April 2013
+
+
+ I. INTRODUCTION
+
+It is possible to link GStreamer libraries, plugins and applications
+statically, both in case of free/libre/open-source software applications
+and proprietary applications. On some platforms static linking may even
+be required.
+
+However, distributing statically linked binaries using GStreamer usually
+requires additional effort to stay compliant with the GNU LGPL v2.1 license.
+
+The purpose of this document is to draw attention to this fact, and to
+summarise in layman's terms what we believe is required from anyone
+distributing statically linked GStreamer binaries. Most of this also
+applies to dynamically linked GStreamer binaries.
+
+
+ II. DISCLAIMER
+
+This document is not legal advice, nor is it comprehensive. It may use
+words in ways that do not match the definition or use in the license
+text. It may even be outright wrong. Read the license text for all the
+details, it is the only legally binding document in this respect.
+
+This document is primarily concerned with the implications for the
+distribution of binaries based on LGPL-licensed software as imposed by
+the LGPL license, but there may be other restrictions to the distribution
+of such binaries, such as terms and conditions of distribution channels
+(e.g. "app stores").
+
+
+ III. THE SPIRIT OF THE LGPL LICENSE
+
+The GNU LGPL v2.1 license allows use of such-licensed software by
+proprietary applications, but still aims to ensure that at least the
+LGPL-licensed software parts remain free under all circumstances. This
+means any changes to LGPL-licensed source code must be documented and
+be made available on request to those who received binaries of the
+software. It also means that it must be possible to make changes to the
+LGPL-licensed software parts and make the application use those, as far
+as that is possible. And that recipients of an application using
+LGPL-licensed software are made aware of their rights according to the
+LGPL license.
+
+In an environment where GStreamer libraries and plugins are used as
+dynamically-loaded shared objects (DLL/.so/.dyn files), this is usually
+not a big problem, because it is fairly easy to compile a modified version
+of the GStreamer libraries or LGPL plugins, and the application will/should
+just pick up and use the modified version automatically. All that is needed
+is for the original, LGPL-licensed source code and source code modifications
+to be made available, and for a way to build the libraries or plugins for
+the platform required (usually that will be using the build system scripts
+that come with GStreamer, and using the typical build environment on the
+system in question, but where that is not the case the needed build scripts
+and/or tools would need to be provided as well).
+
+
+ IV. THINGS YOU NEED TO DO
+
+ * You must tell users of your application that you are using LGPL-licensed
+ software, which LGPL-licensed software exactly, and you must provide them
+ with a copy of the license so they know their rights under the LGPL.
+
+ * You must provide (on request) all the source code and all the changes
+ or additions you have made to the LGPL-licensed software you are using.
+
+ For GStreamer code we would recommend that the changes be provided either
+ in form of a branch in a git repository, or as a set of "git format-patch"-
+ style patches against a GStreamer release or a snapshot of a GStreamer git
+ repository. The patches should ideally say what was changed and why it
+ was changed, and there should ideally be separate patches for independent
+ changes.
+
+ * You must provide a way for users of your application to make changes to
+ the LGPL-licensed parts of the code, and re-create a full application
+ binary with the changes (using the standard toolchain and tools of the
+ target platform; if you are using a custom toolchain or custom tools
+ you must provide these and document how to use them to create a new
+ application binary).
+
+ Note that this of course does not mean that the user is allowed to
+ re-distribute the changed application. Nor does it mean that you have
+ to provide your proprietary source code - it is sufficient to provide a
+ ready-made compiled object file that can be relinked into an application
+ binary with the re-compiled LGPL components.
+
+
+ V. THINGS TO LOOK OUT FOR
+
+While most GStreamer plugins and the libraries they depend on are licensed
+under the LGPL or even more permissive licenses, that is not the case for
+all plugins and libraries used, esp. those in the gst-plugins-ugly or
+some of those in the gst-plugins-bad set of plugins.
+
+When statically linking proprietary code, care must be taken not to
+statically link plugins or libraries that are licensed under less permissive
+terms than the LGPL, such as e.g. GPL-licensed libraries.
+
+
+ VI. SPECIAL CONSIDERATIONS FOR SPECIFIC USE-CASES
+
+
+ 1. Proprietary GStreamer/GLib-based Application On iOS
+
+Let's assume an individual or a company wants to distribute a proprietary
+iOS application that is built on top of GStreamer and GLib through
+Apple's App Store. At the time of writing the Apple iPhone developer
+agreement didn’t allow the bundling of shared libraries, so distributing
+a proprietary iOS application with shared libraries is only possible using
+distribution mechanisms outside of the App Store and/or only to jailbroken
+devices, a prospect that may not appeal to our individual or company. So the
+only alternative then is to link everything statically, which means the
+obligations mentioned above come into play.
+
+
+ 2. Example: Jabber on iOS
+
+Tandberg (now Cisco) created a Jabber application for iOS, based on GStreamer.
+On request they provided an LGPL compliance bundle in form of a zip file, with
+roughly the following contents:
+
+buildapp.sh
+readme.txt
+Jabber/Jabber-Info.plist
+Jabber/libip.a [236MB binary with proprietary code]
+Jabber/main.mm
+Jabber/xcconfig/Application.xcconfig
+Jabber/xcconfig/Debug.xcconfig
+Jabber/xcconfig/Release.xcconfig
+Jabber/xcconfig/Shared.xcconfig
+Jabber/Resources/*.lproj/Localizable.strings
+Jabber/Resources/{Images,Audio,Sounds,IB,Message Styles,Emoticons,Fonts}/*
+Jabber/Resources/*
+Jabber.xcodeproj/project.pbxproj
+Jabber.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+opensource/build/config.site
+opensource/build/m4/movi.m4
+opensource/build/scripts/clean-deps.sh
+opensource/build/scripts/fixup-makefile.sh
+opensource/build/scripts/MoviMaker.py
+opensource/build.sh
+opensource/env.sh
+opensource/Makefile
+opensource/external/glib/*
+opensource/external/gstreamer/{gstreamer,gst-plugins-*}/*
+opensource/external/openssl/*
+opensource/external/proxy-libintl/*
+opensource/toolchain/darwin-x86/bin/{misc autotoools,m4,glib-mkenums,glib-genmarshal,libtool,pkg-config,etc.}
+opensource/toolchain/darwin-x86/share/{aclocal,aclocal-1.11,autoconf,automake-1.11,libtool}/*
+opensource/toolchain/darwin-x86/share/Config.pm
+opensource/toolchain/darwin-x86/share/Config.pm.movi.in
+patches/glib/glib.patch
+patches/gst-plugins-bad/gst-plugins-bad.patch
+patches/gst-plugins-base/gst-plugins-base.patch
+patches/gst-plugins-good/gst-plugins-good.patch
+patches/gstreamer/gstreamer.patch
+patches/openssl/openssl.patch
+
+readme.txt starts with "This Readme file describes how to build the Cisco
+Jabber for iPad application. You need to install Xcode, but the final package
+is built by running buildapp.sh." and describes how to build project,
+prerequisites, the procedure in detail, and a "How to Include Provisioning
+Profile Manually / Alternate Code Signing Instructions" section.
+
+
+ 3. Random Links Which May Be Of Interest
+
+[0] http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/
--- /dev/null
+This is GStreamer gst-plugins-ugly 1.19.2.
+
+GStreamer 1.19 is the development branch leading up to the next major
+stable version which will be 1.20.
+
+The 1.19 development series adds new features on top of the 1.18 series and is
+part of the API and ABI-stable 1.x release series of the GStreamer multimedia
+framework.
+
+Full release notes will one day be found at:
+
+ https://gstreamer.freedesktop.org/releases/1.20/
+
+Binaries for Android, iOS, Mac OS X and Windows will usually be provided
+shortly after the release.
+
+This module will not be very useful by itself and should be used in conjunction
+with other GStreamer modules for a complete multimedia experience.
+
+ - gstreamer: provides the core GStreamer libraries and some generic plugins
+
+ - gst-plugins-base: a basic set of well-supported plugins and additional
+ media-specific GStreamer helper libraries for audio,
+ video, rtsp, rtp, tags, OpenGL, etc.
+
+ - gst-plugins-good: a set of well-supported plugins under our preferred
+ license
+
+ - gst-plugins-ugly: a set of well-supported plugins which might pose
+ problems for distributors
+
+ - gst-plugins-bad: a set of plugins of varying quality that have not made
+ their way into one of core/base/good/ugly yet, for one
+ reason or another. Many of these are are production quality
+ elements, but may still be missing documentation or unit
+ tests; others haven't passed the rigorous quality testing
+ we expect yet.
+
+ - gst-libav: a set of codecs plugins based on the ffmpeg library. This is
+ where you can find audio and video decoders and encoders
+ for a wide variety of formats including H.264, AAC, etc.
+
+ - gstreamer-vaapi: hardware-accelerated video decoding and encoding using
+ VA-API on Linux. Primarily for Intel graphics hardware.
+
+ - gst-omx: hardware-accelerated video decoding and encoding, primarily for
+ embedded Linux systems that provide an OpenMax
+ implementation layer such as the Raspberry Pi.
+
+ - gst-rtsp-server: library to serve files or streaming pipelines via RTSP
+
+ - gst-editing-services: library an plugins for non-linear editing
+
+==== Download ====
+
+You can find source releases of gstreamer in the download
+directory: https://gstreamer.freedesktop.org/src/gstreamer/
+
+The git repository and details how to clone it can be found at
+https://gitlab.freedesktop.org/gstreamer/
+
+==== Homepage ====
+
+The project's website is https://gstreamer.freedesktop.org/
+
+==== Support and Bugs ====
+
+We have recently moved from GNOME Bugzilla to GitLab on freedesktop.org
+for bug reports and feature requests:
+
+ https://gitlab.freedesktop.org/gstreamer
+
+Please submit patches via GitLab as well, in form of Merge Requests. See
+
+ https://gstreamer.freedesktop.org/documentation/contribute/
+
+for more details.
+
+For help and support, please subscribe to and send questions to the
+gstreamer-devel mailing list (see below for details).
+
+There is also a #gstreamer IRC channel on the Freenode IRC network.
+
+==== Developers ====
+
+GStreamer source code repositories can be found on GitLab on freedesktop.org:
+
+ https://gitlab.freedesktop.org/gstreamer
+
+and can also be cloned from there and this is also where you can submit
+Merge Requests or file issues for bugs or feature requests.
+
+Interested developers of the core library, plugins, and applications should
+subscribe to the gstreamer-devel list:
+
+ https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
--- /dev/null
+GStreamer uses a *large* array of tools and libraries, most of which are
+optional. We have attempted to make sure that any code that depends on
+optional libraries doesn't get built unless you have those libraries. If
+you find this not to be the case, please, let us know by filing a bug
+report at http://bugzilla.gnome.org/.
+
+
+Required tools:
+===============
+
+An extra set of tools is required if you wish to build GStreamer out of
+git (using autogen.sh):
+
+autoconf 2.52 or better
+automake 1.5
+gettext 0.11.5
+libtool v1.4 or better
+pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
+
+Required libraries:
+===================
+
+The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
+the version that corresponds to this plugin release.
+
+Optional libraries:
+===================
+
+This file lists supporting libraries for which gst-plugins contains plugins,
+as well as their minimum version. You can find the corresponding plugins in
+ext/(library)
+
+a52dec (for the a52dec AC-3 decoder)
+ http://liba52.sourceforge.net/
+opencore-amr (for the AMR-NB decoder and encoder and the AMR-WB decoder)
+ http://sourceforge.net/projects/opencore-amr/
+libdvdread (for the dvdreadsrc)
+ http://www.dtek.chalmers.se/groups/dvd/
+ (optional: libcss for encrypted DVDs)
+mpeg2dec (for mpeg2 related plugins and dvd playback)
+ http://libmpeg2.sourceforge.net/
+liborc (for the liborc optimization library)
+ http://code.entropywave.com/download/orc/
+cdio (for the cdio CDDA CD audio source)
+ http://savannah.gnu.org/projects/libcdio/
+x264 (for the x264enc H.264 encoder)
+ http://www.videolan.org/developers/x264.html
+sidplay FIXME
--- /dev/null
+---
+short-description: Plugins from gst-plugins-ugly
+...
+
+# Plugins
+
--- /dev/null
+@GST_API_VERSION@
--- /dev/null
+{
+ "a52dec": {
+ "description": "Decodes ATSC A/52 encoded audio streams",
+ "elements": {
+ "a52dec": {
+ "author": "David I. Lehn <dlehn@users.sourceforge.net>",
+ "description": "Decodes ATSC A/52 encoded audio streams",
+ "hierarchy": [
+ "GstA52Dec",
+ "GstAudioDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Audio/Converter",
+ "long-name": "ATSC A/52 audio decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/x-ac3:\naudio/ac3:\naudio/x-private1-ac3:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/x-raw:\n format: F32LE\n layout: interleaved\n rate: [ 4000, 96000 ]\n channels: [ 1, 6 ]\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "drc": {
+ "blurb": "Use Dynamic Range Compression",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "lfe": {
+ "blurb": "LFE",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "mode": {
+ "blurb": "Decoding Mode (default 3f2r)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": " (0)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstA52DecMode",
+ "writable": true
+ }
+ },
+ "rank": "secondary"
+ }
+ },
+ "filename": "gsta52dec",
+ "license": "GPL",
+ "other-types": {
+ "GstA52DecMode": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "Mono",
+ "name": "mono",
+ "value": "1"
+ },
+ {
+ "desc": "Stereo",
+ "name": "stereo",
+ "value": "2"
+ },
+ {
+ "desc": "3 Front",
+ "name": "3f",
+ "value": "3"
+ },
+ {
+ "desc": "2 Front, 1 Rear",
+ "name": "2f1r",
+ "value": "4"
+ },
+ {
+ "desc": "3 Front, 1 Rear",
+ "name": "3f1r",
+ "value": "5"
+ },
+ {
+ "desc": "2 Front, 2 Rear",
+ "name": "2f2r",
+ "value": "6"
+ },
+ {
+ "desc": "3 Front, 2 Rear",
+ "name": "3f2r",
+ "value": "7"
+ },
+ {
+ "desc": "Dolby",
+ "name": "dolby",
+ "value": "10"
+ }
+ ]
+ }
+ },
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "amrnb": {
+ "description": "Adaptive Multi-Rate Narrow-Band",
+ "elements": {
+ "amrnbdec": {
+ "author": "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>",
+ "description": "Adaptive Multi-Rate Narrow-Band audio decoder",
+ "hierarchy": [
+ "GstAmrnbDec",
+ "GstAudioDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Audio",
+ "long-name": "AMR-NB audio decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/AMR:\n rate: 8000\n channels: 1\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 8000\n channels: 1\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "variant": {
+ "blurb": "The decoder variant",
+ "conditionally-available": false,
+ "construct": true,
+ "construct-only": false,
+ "controllable": false,
+ "default": "IF1 (0)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstAmrnbVariant",
+ "writable": true
+ }
+ },
+ "rank": "primary"
+ },
+ "amrnbenc": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Adaptive Multi-Rate Narrow-Band audio encoder",
+ "hierarchy": [
+ "GstAmrnbEnc",
+ "GstAudioEncoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstPreset"
+ ],
+ "klass": "Codec/Encoder/Audio",
+ "long-name": "AMR-NB audio encoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 8000\n channels: 1\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/AMR:\n rate: 8000\n channels: 1\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "band-mode": {
+ "blurb": "Encoding Band Mode (Kbps)",
+ "conditionally-available": false,
+ "construct": true,
+ "construct-only": false,
+ "controllable": false,
+ "default": "MR122 (7)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstAmrnbEncBandMode",
+ "writable": true
+ }
+ },
+ "rank": "secondary"
+ }
+ },
+ "filename": "gstamrnb",
+ "license": "unknown",
+ "other-types": {
+ "GstAmrnbEncBandMode": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "MR475",
+ "name": "MR475",
+ "value": "0"
+ },
+ {
+ "desc": "MR515",
+ "name": "MR515",
+ "value": "1"
+ },
+ {
+ "desc": "MR59",
+ "name": "MR59",
+ "value": "2"
+ },
+ {
+ "desc": "MR67",
+ "name": "MR67",
+ "value": "3"
+ },
+ {
+ "desc": "MR74",
+ "name": "MR74",
+ "value": "4"
+ },
+ {
+ "desc": "MR795",
+ "name": "MR795",
+ "value": "5"
+ },
+ {
+ "desc": "MR102",
+ "name": "MR102",
+ "value": "6"
+ },
+ {
+ "desc": "MR122",
+ "name": "MR122",
+ "value": "7"
+ },
+ {
+ "desc": "MRDTX",
+ "name": "MRDTX",
+ "value": "8"
+ }
+ ]
+ },
+ "GstAmrnbVariant": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "IF1",
+ "name": "IF1",
+ "value": "0"
+ },
+ {
+ "desc": "IF2",
+ "name": "IF2",
+ "value": "1"
+ }
+ ]
+ }
+ },
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "amrwbdec": {
+ "description": "Adaptive Multi-Rate Wide-Band Decoder",
+ "elements": {
+ "amrwbdec": {
+ "author": "Renato Araujo <renato.filho@indt.org.br>",
+ "description": "Adaptive Multi-Rate Wideband audio decoder",
+ "hierarchy": [
+ "GstAmrwbDec",
+ "GstAudioDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Audio",
+ "long-name": "AMR-WB audio decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/AMR-WB:\n rate: 16000\n channels: 1\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 16000\n channels: 1\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {},
+ "rank": "primary"
+ }
+ },
+ "filename": "gstamrwbdec",
+ "license": "unknown",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "asf": {
+ "description": "Demuxes and muxes audio and video in Microsofts ASF format",
+ "elements": {
+ "asfdemux": {
+ "author": "Owen Fraser-Green <owen@discobabe.net>",
+ "description": "Demultiplexes ASF Streams",
+ "hierarchy": [
+ "GstASFDemux",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Demuxer",
+ "long-name": "ASF Demuxer",
+ "pad-templates": {
+ "audio_%%u": {
+ "caps": "ANY",
+ "direction": "src",
+ "presence": "sometimes"
+ },
+ "sink": {
+ "caps": "video/x-ms-asf:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "video_%%u": {
+ "caps": "ANY",
+ "direction": "src",
+ "presence": "sometimes"
+ }
+ },
+ "rank": "secondary",
+ "signals": {}
+ },
+ "rtpasfdepay": {
+ "author": "Tim-Philipp Müller <tim centricular net>, Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Extracts ASF streams from RTP",
+ "hierarchy": [
+ "GstRtpAsfDepay",
+ "GstRTPBaseDepayload",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Depayloader/Network",
+ "long-name": "RTP ASF packet depayloader",
+ "pad-templates": {
+ "sink": {
+ "caps": "application/x-rtp:\n media: { (string)application, (string)video, (string)audio }\n payload: [ 96, 127 ]\n clock-rate: [ 1, 2147483647 ]\n encoding-name: X-ASF-PF\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-ms-asf:\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {},
+ "rank": "marginal"
+ },
+ "rtspwms": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Extends RTSP so that it can handle WMS setup",
+ "hierarchy": [
+ "GstRTSPWMS",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstRTSPExtension"
+ ],
+ "klass": "Network/Extension/Protocol",
+ "long-name": "WMS RTSP Extension",
+ "rank": "secondary"
+ }
+ },
+ "filename": "gstasf",
+ "license": "LGPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "cdio": {
+ "description": "Read audio from audio CDs",
+ "elements": {
+ "cdiocddasrc": {
+ "author": "Tim-Philipp Müller <tim centricular net>",
+ "description": "Read audio from CD using libcdio",
+ "hierarchy": [
+ "GstCdioCddaSrc",
+ "GstAudioCdSrc",
+ "GstPushSrc",
+ "GstBaseSrc",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstURIHandler"
+ ],
+ "klass": "Source/File",
+ "long-name": "CD audio source (CDDA)",
+ "pad-templates": {
+ "src": {
+ "caps": "audio/x-raw:\n format: S16LE\n layout: interleaved\n rate: 44100\n channels: 2\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "read-speed": {
+ "blurb": "Read from device at the specified speed (-1 = default)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "-1",
+ "max": "100",
+ "min": "-1",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ }
+ },
+ "rank": "secondary - 1"
+ }
+ },
+ "filename": "gstcdio",
+ "license": "GPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "dvdlpcmdec": {
+ "description": "Decode DVD LPCM frames into standard PCM",
+ "elements": {
+ "dvdlpcmdec": {
+ "author": "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>",
+ "description": "Decode DVD LPCM frames into standard PCM audio",
+ "hierarchy": [
+ "GstDvdLpcmDec",
+ "GstAudioDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Audio",
+ "long-name": "DVD LPCM Audio decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/x-private1-lpcm:\naudio/x-private2-lpcm:\naudio/x-private-ts-lpcm:\naudio/x-lpcm:\n width: { (int)16, (int)20, (int)24 }\n rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n channels: [ 1, 8 ]\n dynamic_range: [ 0, 255 ]\n emphasis: { (boolean)true, (boolean)false }\n mute: { (boolean)true, (boolean)false }\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/x-raw:\n format: { S16BE, S24BE }\n layout: interleaved\n rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n channels: [ 1, 8 ]\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {},
+ "rank": "primary"
+ }
+ },
+ "filename": "gstdvdlpcmdec",
+ "license": "LGPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "dvdread": {
+ "description": "Access a DVD with dvdread",
+ "elements": {
+ "dvdreadsrc": {
+ "author": "Erik Walthinsen <omega@cse.ogi.edu>",
+ "description": "Access a DVD title/chapter/angle using libdvdread",
+ "hierarchy": [
+ "GstDvdReadSrc",
+ "GstPushSrc",
+ "GstBaseSrc",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstURIHandler"
+ ],
+ "klass": "Source/File/DVD",
+ "long-name": "DVD Source",
+ "pad-templates": {
+ "src": {
+ "caps": "video/mpeg:\n mpegversion: 2\n systemstream: true\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "angle": {
+ "blurb": "angle",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1",
+ "max": "999",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ },
+ "chapter": {
+ "blurb": "chapter",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1",
+ "max": "999",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ },
+ "device": {
+ "blurb": "DVD device location",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "/dev/dvd",
+ "mutable": "null",
+ "readable": true,
+ "type": "gchararray",
+ "writable": true
+ },
+ "title": {
+ "blurb": "title",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1",
+ "max": "999",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ }
+ },
+ "rank": "none"
+ }
+ },
+ "filename": "gstdvdread",
+ "license": "GPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "dvdsub": {
+ "description": "DVD subtitle parser and decoder",
+ "elements": {
+ "dvdsubdec": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>, Jan Schmidt <thaytan@mad.scientist.com>",
+ "description": "Decodes DVD subtitles into AYUV video frames",
+ "hierarchy": [
+ "GstDvdSubDec",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Video",
+ "long-name": "DVD subtitle decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "subpicture/x-dvd:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-raw:\n format: { AYUV, ARGB }\n width: 720\n height: 576\n framerate: 0/1\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "none"
+ },
+ "dvdsubparse": {
+ "author": "Mark Nauwelaerts <mnauw@users.sourceforge.net>",
+ "description": "Parses and packetizes DVD subtitle streams",
+ "hierarchy": [
+ "GstDvdSubParse",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Parser/Subtitle",
+ "long-name": "DVD subtitle parser",
+ "pad-templates": {
+ "sink": {
+ "caps": "subpicture/x-dvd:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "subpicture/x-dvd:\n parsed: true\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "none"
+ }
+ },
+ "filename": "gstdvdsub",
+ "license": "LGPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "mpeg2dec": {
+ "description": "LibMpeg2 decoder",
+ "elements": {
+ "mpeg2dec": {
+ "author": "Wim Taymans <wim.taymans@chello.be>",
+ "description": "Uses libmpeg2 to decode MPEG video streams",
+ "hierarchy": [
+ "GstMpeg2dec",
+ "GstVideoDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Video",
+ "long-name": "mpeg1 and mpeg2 video decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "video/mpeg:\n mpegversion: [ 1, 2 ]\n systemstream: false\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-raw:\n format: { YV12, I420, Y42B, Y444 }\n width: [ 16, 4096 ]\n height: [ 16, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {},
+ "rank": "secondary"
+ }
+ },
+ "filename": "gstmpeg2dec",
+ "license": "GPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "realmedia": {
+ "description": "RealMedia support plugins",
+ "elements": {
+ "pnmsrc": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Receive data over the network via PNM",
+ "hierarchy": [
+ "GstPNMSrc",
+ "GstPushSrc",
+ "GstBaseSrc",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstURIHandler"
+ ],
+ "klass": "Source/Network",
+ "long-name": "PNM packet receiver",
+ "pad-templates": {
+ "src": {
+ "caps": "application/vnd.rn-realmedia:\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "location": {
+ "blurb": "Location of the PNM url to read",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "NULL",
+ "mutable": "null",
+ "readable": true,
+ "type": "gchararray",
+ "writable": true
+ }
+ },
+ "rank": "marginal"
+ },
+ "rademux": {
+ "author": "Tim-Philipp Müller <tim centricular net>",
+ "description": "Demultiplex a RealAudio file",
+ "hierarchy": [
+ "GstRealAudioDemux",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Demuxer",
+ "long-name": "RealAudio Demuxer",
+ "pad-templates": {
+ "sink": {
+ "caps": "application/x-pn-realaudio:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "ANY",
+ "direction": "src",
+ "presence": "sometimes"
+ }
+ },
+ "rank": "secondary",
+ "signals": {}
+ },
+ "rdtdepay": {
+ "author": "Lutz Mueller <lutz at topfrose dot de>, Wim Taymans <wim@fluendo.com>",
+ "description": "Extracts RealMedia from RDT packets",
+ "hierarchy": [
+ "GstRDTDepay",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Depayloader/Network",
+ "long-name": "RDT packet parser",
+ "pad-templates": {
+ "sink": {
+ "caps": "application/x-rdt:\n media: application\n clock-rate: [ 1, 2147483647 ]\n encoding-name: X-REAL-RDT\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "application/vnd.rn-realmedia:\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "marginal"
+ },
+ "rdtmanager": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Accepts raw RTP and RTCP packets and sends them forward",
+ "hierarchy": [
+ "GstRDTManager",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Parser/Network",
+ "long-name": "RTP Decoder",
+ "pad-templates": {
+ "recv_rtcp_sink_%%u": {
+ "caps": "application/x-rtcp:\n",
+ "direction": "sink",
+ "presence": "request"
+ },
+ "recv_rtp_sink_%%u": {
+ "caps": "application/x-rdt:\n",
+ "direction": "sink",
+ "presence": "request"
+ },
+ "recv_rtp_src_%%u_%%u_%%u": {
+ "caps": "application/x-rdt:\n",
+ "direction": "src",
+ "presence": "sometimes"
+ },
+ "rtcp_src_%%u": {
+ "caps": "application/x-rtcp:\n",
+ "direction": "src",
+ "presence": "request"
+ }
+ },
+ "properties": {
+ "latency": {
+ "blurb": "Amount of ms to buffer",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "200",
+ "max": "-1",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ }
+ },
+ "rank": "none",
+ "signals": {
+ "clear-pt-map": {
+ "args": [],
+ "return-type": "void",
+ "when": "last"
+ },
+ "on-bye-ssrc": {
+ "args": [
+ {
+ "name": "arg0",
+ "type": "guint"
+ },
+ {
+ "name": "arg1",
+ "type": "guint"
+ }
+ ],
+ "return-type": "void",
+ "when": "last"
+ },
+ "on-bye-timeout": {
+ "args": [
+ {
+ "name": "arg0",
+ "type": "guint"
+ },
+ {
+ "name": "arg1",
+ "type": "guint"
+ }
+ ],
+ "return-type": "void",
+ "when": "last"
+ },
+ "on-npt-stop": {
+ "args": [
+ {
+ "name": "arg0",
+ "type": "guint"
+ },
+ {
+ "name": "arg1",
+ "type": "guint"
+ }
+ ],
+ "return-type": "void",
+ "when": "last"
+ },
+ "on-timeout": {
+ "args": [
+ {
+ "name": "arg0",
+ "type": "guint"
+ },
+ {
+ "name": "arg1",
+ "type": "guint"
+ }
+ ],
+ "return-type": "void",
+ "when": "last"
+ },
+ "request-pt-map": {
+ "args": [
+ {
+ "name": "arg0",
+ "type": "guint"
+ },
+ {
+ "name": "arg1",
+ "type": "guint"
+ }
+ ],
+ "return-type": "GstCaps",
+ "when": "last"
+ }
+ }
+ },
+ "rmdemux": {
+ "author": "David Schleef <ds@schleef.org>",
+ "description": "Demultiplex a RealMedia file into audio and video streams",
+ "hierarchy": [
+ "GstRMDemux",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Demuxer",
+ "long-name": "RealMedia Demuxer",
+ "pad-templates": {
+ "audio_%%u": {
+ "caps": "ANY",
+ "direction": "src",
+ "presence": "sometimes"
+ },
+ "sink": {
+ "caps": "application/vnd.rn-realmedia:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "video_%%u": {
+ "caps": "ANY",
+ "direction": "src",
+ "presence": "sometimes"
+ }
+ },
+ "rank": "primary",
+ "signals": {}
+ },
+ "rtspreal": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Extends RTSP so that it can handle RealMedia setup",
+ "hierarchy": [
+ "GstRTSPReal",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstRTSPExtension"
+ ],
+ "klass": "Network/Extension/Protocol",
+ "long-name": "RealMedia RTSP Extension",
+ "rank": "marginal"
+ }
+ },
+ "filename": "gstrealmedia",
+ "license": "LGPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "sid": {
+ "description": "Uses libsidplay to decode .sid files",
+ "elements": {
+ "siddec": {
+ "author": "Wim Taymans <wim.taymans@gmail.com>",
+ "description": "Use libsidplay to decode SID audio tunes",
+ "hierarchy": [
+ "GstSidDec",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Audio",
+ "long-name": "Sid decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/x-sid:\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/x-raw:\n format: { S16LE, U16LE, S8, U8 }\n layout: interleaved\n rate: [ 8000, 48000 ]\n channels: [ 1, 2 ]\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "blocksize": {
+ "blurb": "Size in bytes to output per buffer",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "4096",
+ "max": "-1",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "clock": {
+ "blurb": "clock",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "pal (1)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstSidClock",
+ "writable": true
+ },
+ "filter": {
+ "blurb": "filter",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "force-speed": {
+ "blurb": "force_speed",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "measured-volume": {
+ "blurb": "measured_volume",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "memory": {
+ "blurb": "memory",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "bank-switching (32)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstSidMemory",
+ "writable": true
+ },
+ "metadata": {
+ "blurb": "Metadata",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "mutable": "null",
+ "readable": true,
+ "type": "GstCaps",
+ "writable": false
+ },
+ "mos8580": {
+ "blurb": "mos8580",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "tune": {
+ "blurb": "tune",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "100",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ }
+ },
+ "rank": "primary"
+ }
+ },
+ "filename": "gstsid",
+ "license": "GPL",
+ "other-types": {
+ "GstSidClock": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "PAL",
+ "name": "pal",
+ "value": "1"
+ },
+ {
+ "desc": "NTSC",
+ "name": "ntsc",
+ "value": "2"
+ }
+ ]
+ },
+ "GstSidMemory": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "Bank Switching",
+ "name": "bank-switching",
+ "value": "32"
+ },
+ {
+ "desc": "Transparent ROM",
+ "name": "transparent-rom",
+ "value": "33"
+ },
+ {
+ "desc": "Playsid Environment",
+ "name": "playsid-environment",
+ "value": "34"
+ }
+ ]
+ }
+ },
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "x264": {
+ "description": "libx264-based H264 plugins",
+ "elements": {
+ "x264enc": {
+ "author": "Josef Zlomek <josef.zlomek@itonis.tv>, Mark Nauwelaerts <mnauw@users.sf.net>",
+ "description": "H264 Encoder",
+ "hierarchy": [
+ "GstX264Enc",
+ "GstVideoEncoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "interfaces": [
+ "GstPreset"
+ ],
+ "klass": "Codec/Encoder/Video",
+ "long-name": "x264enc",
+ "pad-templates": {
+ "sink": {
+ "caps": "video/x-raw:\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n format: { Y444, Y42B, I420, YV12, NV12, Y444_10LE, I422_10LE, I420_10LE }\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-h264:\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n stream-format: { (string)avc, (string)byte-stream }\n alignment: au\n profile: { (string)high-4:4:4, (string)high-4:2:2, (string)high-10, (string)high, (string)main, (string)baseline, (string)constrained-baseline, (string)high-4:4:4-intra, (string)high-4:2:2-intra, (string)high-10-intra }\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "properties": {
+ "analyse": {
+ "blurb": "Partitions to consider",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "(none)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncAnalyse",
+ "writable": true
+ },
+ "aud": {
+ "blurb": "Use AU (Access Unit) delimiter",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "b-adapt": {
+ "blurb": "Automatically decide how many B-frames to use",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "b-pyramid": {
+ "blurb": "Keep some B-frames as references",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "bframes": {
+ "blurb": "Number of B-frames between I and P",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "16",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "bitrate": {
+ "blurb": "Bitrate in kbit/sec",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "2048",
+ "max": "2048000",
+ "min": "1",
+ "mutable": "playing",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "byte-stream": {
+ "blurb": "Generate byte stream format of NALU",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "cabac": {
+ "blurb": "Enable CABAC entropy coding",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "dct8x8": {
+ "blurb": "Adaptive spatial transform size",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "frame-packing": {
+ "blurb": "Set frame packing mode for Stereoscopic content",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "auto (-1)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncFramePacking",
+ "writable": true
+ },
+ "insert-vui": {
+ "blurb": "Insert VUI NAL in stream",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "interlaced": {
+ "blurb": "Interlaced material",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "intra-refresh": {
+ "blurb": "Use Periodic Intra Refresh instead of IDR frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "ip-factor": {
+ "blurb": "Quantizer factor between I- and P-frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1.4",
+ "max": "2",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "gfloat",
+ "writable": true
+ },
+ "key-int-max": {
+ "blurb": "Maximal distance between two key-frames (0 for automatic)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "2147483647",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "mb-tree": {
+ "blurb": "Macroblock-Tree ratecontrol",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "me": {
+ "blurb": "Integer pixel motion estimation method",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "hex (1)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncMe",
+ "writable": true
+ },
+ "multipass-cache-file": {
+ "blurb": "Filename for multipass cache file",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "x264.log",
+ "mutable": "null",
+ "readable": true,
+ "type": "gchararray",
+ "writable": true
+ },
+ "noise-reduction": {
+ "blurb": "Noise reduction strength",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "100000",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "option-string": {
+ "blurb": "String of x264 options (overridden by element properties) in the format \"key1=value1:key2=value2\".",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "",
+ "mutable": "null",
+ "readable": true,
+ "type": "gchararray",
+ "writable": true
+ },
+ "pass": {
+ "blurb": "Encoding pass/type",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "cbr (0)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncPass",
+ "writable": true
+ },
+ "pb-factor": {
+ "blurb": "Quantizer factor between P- and B-frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1.3",
+ "max": "2",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "gfloat",
+ "writable": true
+ },
+ "psy-tune": {
+ "blurb": "Preset name for psychovisual tuning options",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "none (0)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncPsyTune",
+ "writable": true
+ },
+ "qp-max": {
+ "blurb": "Maximum quantizer",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "51",
+ "max": "63",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "qp-min": {
+ "blurb": "Minimum quantizer",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "10",
+ "max": "63",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "qp-step": {
+ "blurb": "Maximum quantizer difference between frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "4",
+ "max": "63",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "quantizer": {
+ "blurb": "Constant quantizer or quality to apply",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "21",
+ "max": "50",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "rc-lookahead": {
+ "blurb": "Number of frames for frametype lookahead",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "40",
+ "max": "250",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ },
+ "ref": {
+ "blurb": "Number of reference frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "3",
+ "max": "16",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "sliced-threads": {
+ "blurb": "Low latency but lower efficiency threading",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "speed-preset": {
+ "blurb": "Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "medium (6)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncPreset",
+ "writable": true
+ },
+ "sps-id": {
+ "blurb": "SPS and PPS ID number",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "31",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "subme": {
+ "blurb": "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "1",
+ "max": "10",
+ "min": "1",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "sync-lookahead": {
+ "blurb": "Number of buffer frames for threaded lookahead (-1 for automatic)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "-1",
+ "max": "250",
+ "min": "-1",
+ "mutable": "null",
+ "readable": true,
+ "type": "gint",
+ "writable": true
+ },
+ "threads": {
+ "blurb": "Number of threads used by the codec (0 for automatic)",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "2147483647",
+ "min": "0",
+ "mutable": "null",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "trellis": {
+ "blurb": "Enable trellis searched quantization",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "true",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "tune": {
+ "blurb": "Preset name for non-psychovisual tuning options",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "(none)",
+ "mutable": "null",
+ "readable": true,
+ "type": "GstX264EncTune",
+ "writable": true
+ },
+ "vbv-buf-capacity": {
+ "blurb": "Size of the VBV buffer in milliseconds",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "600",
+ "max": "10000",
+ "min": "0",
+ "mutable": "playing",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
+ "weightb": {
+ "blurb": "Weighted prediction for B-frames",
+ "conditionally-available": false,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "null",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ }
+ },
+ "rank": "primary"
+ }
+ },
+ "filename": "gstx264",
+ "license": "GPL",
+ "other-types": {
+ "GstX264EncAnalyse": {
+ "kind": "flags",
+ "values": [
+ {
+ "desc": "i4x4",
+ "name": "i4x4",
+ "value": "0x00000001"
+ },
+ {
+ "desc": "i8x8",
+ "name": "i8x8",
+ "value": "0x00000002"
+ },
+ {
+ "desc": "p8x8",
+ "name": "p8x8",
+ "value": "0x00000010"
+ },
+ {
+ "desc": "p4x4",
+ "name": "p4x4",
+ "value": "0x00000020"
+ },
+ {
+ "desc": "b8x8",
+ "name": "b8x8",
+ "value": "0x00000100"
+ }
+ ]
+ },
+ "GstX264EncFramePacking": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "Automatic (use incoming video information)",
+ "name": "auto",
+ "value": "-1"
+ },
+ {
+ "desc": "checkerboard - Left and Right pixels alternate in a checkerboard pattern",
+ "name": "checkerboard",
+ "value": "0"
+ },
+ {
+ "desc": "column interleaved - Alternating pixel columns represent Left and Right views",
+ "name": "column-interleaved",
+ "value": "1"
+ },
+ {
+ "desc": "row interleaved - Alternating pixel rows represent Left and Right views",
+ "name": "row-interleaved",
+ "value": "2"
+ },
+ {
+ "desc": "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view",
+ "name": "side-by-side",
+ "value": "3"
+ },
+ {
+ "desc": "top bottom - L is on top, R on bottom",
+ "name": "top-bottom",
+ "value": "4"
+ },
+ {
+ "desc": "frame interleaved - Each frame contains either Left or Right view alternately",
+ "name": "frame-interleaved",
+ "value": "5"
+ }
+ ]
+ },
+ "GstX264EncMe": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "dia",
+ "name": "dia",
+ "value": "0"
+ },
+ {
+ "desc": "hex",
+ "name": "hex",
+ "value": "1"
+ },
+ {
+ "desc": "umh",
+ "name": "umh",
+ "value": "2"
+ },
+ {
+ "desc": "esa",
+ "name": "esa",
+ "value": "3"
+ },
+ {
+ "desc": "tesa",
+ "name": "tesa",
+ "value": "4"
+ }
+ ]
+ },
+ "GstX264EncPass": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "Constant Bitrate Encoding",
+ "name": "cbr",
+ "value": "0"
+ },
+ {
+ "desc": "Constant Quantizer",
+ "name": "quant",
+ "value": "4"
+ },
+ {
+ "desc": "Constant Quality",
+ "name": "qual",
+ "value": "5"
+ },
+ {
+ "desc": "VBR Encoding - Pass 1",
+ "name": "pass1",
+ "value": "17"
+ },
+ {
+ "desc": "VBR Encoding - Pass 2",
+ "name": "pass2",
+ "value": "18"
+ },
+ {
+ "desc": "VBR Encoding - Pass 3",
+ "name": "pass3",
+ "value": "19"
+ }
+ ]
+ },
+ "GstX264EncPreset": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "No preset",
+ "name": "None",
+ "value": "0"
+ },
+ {
+ "desc": "ultrafast",
+ "name": "ultrafast",
+ "value": "1"
+ },
+ {
+ "desc": "superfast",
+ "name": "superfast",
+ "value": "2"
+ },
+ {
+ "desc": "veryfast",
+ "name": "veryfast",
+ "value": "3"
+ },
+ {
+ "desc": "faster",
+ "name": "faster",
+ "value": "4"
+ },
+ {
+ "desc": "fast",
+ "name": "fast",
+ "value": "5"
+ },
+ {
+ "desc": "medium",
+ "name": "medium",
+ "value": "6"
+ },
+ {
+ "desc": "slow",
+ "name": "slow",
+ "value": "7"
+ },
+ {
+ "desc": "slower",
+ "name": "slower",
+ "value": "8"
+ },
+ {
+ "desc": "veryslow",
+ "name": "veryslow",
+ "value": "9"
+ },
+ {
+ "desc": "placebo",
+ "name": "placebo",
+ "value": "10"
+ }
+ ]
+ },
+ "GstX264EncPsyTune": {
+ "kind": "enum",
+ "values": [
+ {
+ "desc": "No tuning",
+ "name": "none",
+ "value": "0"
+ },
+ {
+ "desc": "Film",
+ "name": "film",
+ "value": "1"
+ },
+ {
+ "desc": "Animation",
+ "name": "animation",
+ "value": "2"
+ },
+ {
+ "desc": "Grain",
+ "name": "grain",
+ "value": "3"
+ },
+ {
+ "desc": "PSNR",
+ "name": "psnr",
+ "value": "4"
+ },
+ {
+ "desc": "SSIM",
+ "name": "ssim",
+ "value": "5"
+ }
+ ]
+ },
+ "GstX264EncTune": {
+ "kind": "flags",
+ "values": [
+ {
+ "desc": "Still image",
+ "name": "stillimage",
+ "value": "0x00000001"
+ },
+ {
+ "desc": "Fast decode",
+ "name": "fastdecode",
+ "value": "0x00000002"
+ },
+ {
+ "desc": "Zero latency",
+ "name": "zerolatency",
+ "value": "0x00000004"
+ }
+ ]
+ }
+ },
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ },
+ "xingmux": {
+ "description": "Add XING tags to mpeg audio files",
+ "elements": {
+ "xingmux": {
+ "author": "Christophe Fergeau <teuf@gnome.org>",
+ "description": "Adds a Xing header to the beginning of a VBR MP3 file",
+ "hierarchy": [
+ "GstXingMux",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Formatter/Muxer/Metadata",
+ "long-name": "MP3 Xing muxer",
+ "pad-templates": {
+ "sink": {
+ "caps": "audio/mpeg:\n mpegversion: 1\n layer: [ 1, 3 ]\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "audio/mpeg:\n mpegversion: 1\n layer: [ 1, 3 ]\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "marginal"
+ }
+ },
+ "filename": "gstxingmux",
+ "license": "LGPL",
+ "other-types": {},
+ "package": "GStreamer Ugly Plug-ins",
+ "source": "gst-plugins-ugly",
+ "tracers": {},
+ "url": "Unknown package origin"
+ }
+}
\ No newline at end of file
--- /dev/null
+build_hotdoc = false
+
+required_hotdoc_extensions = ['gst-extension']
+plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
+if gst_dep.type_name() == 'internal'
+ gst_proj = subproject('gstreamer')
+ plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
+else
+ plugins_cache_generator = find_program(join_paths(gst_dep.get_pkgconfig_variable('libexecdir'), 'gstreamer-' + api_version, 'gst-plugins-doc-cache-generator'),
+ required: false)
+endif
+
+if plugins.length() == 0
+ message('All ugly plugins have been disabled')
+elif plugins_cache_generator.found()
+ plugins_doc_dep = custom_target('ugly-plugins-doc-cache',
+ command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
+ input: plugins,
+ output: 'gst_plugins_cache.json',
+ build_always_stale: true,
+ )
+else
+ warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
+endif
+
+hotdoc_p = find_program('hotdoc', required: get_option('doc'))
+if not hotdoc_p.found()
+ message('Hotdoc not found, not building the documentation')
+ subdir_done()
+endif
+
+hotdoc_req = '>= 0.11.0'
+hotdoc_version = run_command(hotdoc_p, '--version').stdout()
+if not hotdoc_version.version_compare(hotdoc_req)
+ if get_option('doc').enabled()
+ error('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
+ else
+ message('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
+ subdir_done()
+ endif
+endif
+
+hotdoc = import('hotdoc')
+foreach extension: required_hotdoc_extensions
+ if not hotdoc.has_extensions(extension)
+ if get_option('doc').enabled()
+ error('Documentation enabled but @0@ missing'.format(extension))
+ endif
+
+ message('@0@ extension not found, not building documentation'.format(extension))
+ subdir_done()
+ endif
+endforeach
+
+build_hotdoc = true
+docconf = configuration_data()
+docconf.set('GST_API_VERSION', api_version)
+
+configure_file(input : 'gst_api_version.in',
+ output : 'gst_api_version.md',
+ configuration : docconf)
+
+root_rel = '..'
+excludes = []
+foreach f: []
+ excludes += [join_paths(meson.current_source_dir(), root_rel, '..', f)]
+endforeach
+
+libs_doc = []
+plugins_doc = []
+list_plugin_res = run_command(python3, '-c',
+'''
+import sys
+import json
+
+with open("@0@") as f:
+ print(':'.join(json.load(f).keys()), end='')
+'''.format(plugins_cache))
+
+assert(list_plugin_res.returncode() == 0,
+ 'Could not list plugins from @0@'.format(plugins_cache))
+
+foreach plugin_name: list_plugin_res.stdout().split(':')
+ plugins_doc += [hotdoc.generate_doc(plugin_name,
+ project_version: api_version,
+ sitemap: 'sitemap.txt',
+ index: 'index.md',
+ gst_index: 'index.md',
+ gst_smart_index: true,
+ gst_c_sources: [
+ join_paths(root_rel, 'sys/*/*.[ch]'),
+ join_paths(root_rel, 'ext/*/*.[ch]'),
+ join_paths(root_rel, 'gst/*/*.[ch]'),
+ ],
+ gst_c_source_filters: excludes,
+ dependencies: [gst_dep, plugins],
+ gst_order_generated_subpages: true,
+ disable_incremental_build: true,
+ gst_cache_file: plugins_cache,
+ gst_plugin_name: plugin_name,
+ )]
+endforeach
--- /dev/null
+2005-08-31 Michael Smith <msmith@fluendo.com>
+
+ * configure.ac:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+ (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link), (update_timestamps),
+ (gst_dvdlpcmdec_chain):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ Port LPCM decoder to 0.9
+
+2005-08-30 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * configure.ac:
+ Remove plugins that should have disappeared.
+
+2005-08-30 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * autogen.sh:
+ * configure.ac:
+ Make autogen work again.
+
+2005-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/aalib/Makefile.am:
+ * ext/aalib/gstaasink.c:
+ * ext/aalib/gstaasink.h:
+ * ext/cairo/Makefile.am:
+ * ext/cairo/gstcairo.c:
+ * ext/cairo/gsttextoverlay.c:
+ * ext/cairo/gsttextoverlay.h:
+ * ext/cairo/gsttimeoverlay.c:
+ * ext/cairo/gsttimeoverlay.h:
+ * ext/dv/Makefile.am:
+ * ext/dv/NOTES:
+ * ext/dv/demo-play.c:
+ * ext/dv/gstdv.c:
+ * ext/dv/gstdvdec.c:
+ * ext/dv/gstdvdec.h:
+ * ext/dv/gstdvdemux.c:
+ * ext/dv/gstdvdemux.h:
+ * ext/esd/Makefile.am:
+ * ext/esd/README:
+ * ext/esd/esdmon.c:
+ * ext/esd/esdmon.h:
+ * ext/esd/esdsink.c:
+ * ext/esd/esdsink.h:
+ * ext/esd/gstesd.c:
+ * ext/flac/Makefile.am:
+ * ext/flac/flac_compat.h:
+ * ext/flac/gstflac.c:
+ * ext/flac/gstflacdec.c:
+ * ext/flac/gstflacdec.h:
+ * ext/flac/gstflacenc.c:
+ * ext/flac/gstflacenc.h:
+ * ext/flac/gstflactag.c:
+ * ext/flac/gstflactag.h:
+ * ext/gconf/Makefile.am:
+ * ext/gconf/gconf.c:
+ * ext/gconf/gconf.h:
+ * ext/gconf/gstgconfaudiosink.c:
+ * ext/gconf/gstgconfaudiosink.h:
+ * ext/gconf/gstgconfelements.c:
+ * ext/gconf/gstgconfelements.h:
+ * ext/gconf/gstgconfvideosink.c:
+ * ext/gconf/gstgconfvideosink.h:
+ * ext/gdk_pixbuf/Makefile.am:
+ * ext/gdk_pixbuf/gst_loader.c:
+ * ext/gdk_pixbuf/gstgdkanimation.c:
+ * ext/gdk_pixbuf/gstgdkanimation.h:
+ * ext/gdk_pixbuf/gstgdkpixbuf.c:
+ * ext/gdk_pixbuf/gstgdkpixbuf.h:
+ * ext/gdk_pixbuf/pixbufscale.c:
+ * ext/gdk_pixbuf/pixbufscale.h:
+ * ext/jpeg/Makefile.am:
+ * ext/jpeg/README:
+ * ext/jpeg/gstjpeg.c:
+ * ext/jpeg/gstjpegdec.c:
+ * ext/jpeg/gstjpegdec.h:
+ * ext/jpeg/gstjpegenc.c:
+ * ext/jpeg/gstjpegenc.h:
+ * ext/jpeg/gstsmokedec.c:
+ * ext/jpeg/gstsmokedec.h:
+ * ext/jpeg/gstsmokeenc.c:
+ * ext/jpeg/gstsmokeenc.h:
+ * ext/jpeg/smokecodec.c:
+ * ext/jpeg/smokecodec.h:
+ * ext/jpeg/smokeformat.h:
+ * ext/ladspa/Makefile.am:
+ * ext/ladspa/gstladspa.c:
+ * ext/ladspa/gstladspa.h:
+ * ext/ladspa/gstsignalprocessor.c:
+ * ext/ladspa/gstsignalprocessor.h:
+ * ext/ladspa/load.c:
+ * ext/ladspa/search.c:
+ * ext/ladspa/utils.h:
+ * ext/libcaca/Makefile.am:
+ * ext/libcaca/gstcacasink.c:
+ * ext/libcaca/gstcacasink.h:
+ * ext/libmng/Makefile.am:
+ * ext/libmng/gstmng.c:
+ * ext/libmng/gstmng.h:
+ * ext/libmng/gstmngdec.c:
+ * ext/libmng/gstmngdec.h:
+ * ext/libmng/gstmngenc.c:
+ * ext/libmng/gstmngenc.h:
+ * ext/libpng/Makefile.am:
+ * ext/libpng/gstpng.c:
+ * ext/libpng/gstpng.h:
+ * ext/libpng/gstpngdec.c:
+ * ext/libpng/gstpngdec.h:
+ * ext/libpng/gstpngenc.c:
+ * ext/libpng/gstpngenc.h:
+ * ext/mikmod/Makefile.am:
+ * ext/mikmod/README:
+ * ext/mikmod/drv_gst.c:
+ * ext/mikmod/gstmikmod.c:
+ * ext/mikmod/gstmikmod.h:
+ * ext/mikmod/mikmod_reader.c:
+ * ext/mikmod/mikmod_types.c:
+ * ext/mikmod/mikmod_types.h:
+ * ext/pango/Makefile.am:
+ * ext/pango/gsttextoverlay.c:
+ * ext/pango/gsttextoverlay.h:
+ * ext/pango/gsttimeoverlay.c:
+ * ext/pango/gsttimeoverlay.h:
+ * ext/raw1394/Makefile.am:
+ * ext/raw1394/gst1394.c:
+ * ext/raw1394/gstdv1394src.c:
+ * ext/raw1394/gstdv1394src.h:
+ * ext/shout2/Makefile.am:
+ * ext/shout2/gstshout2.c:
+ * ext/shout2/gstshout2.h:
+ * ext/speex/Makefile.am:
+ * ext/speex/gstspeex.c:
+ * ext/speex/gstspeexdec.c:
+ * ext/speex/gstspeexdec.h:
+ * ext/speex/gstspeexenc.c:
+ * ext/speex/gstspeexenc.h:
+ * gst/avi/.cvsignore:
+ * gst/avi/Makefile.am:
+ * gst/avi/README:
+ * gst/avi/avi-ids.h:
+ * gst/avi/avi.vcproj:
+ * gst/avi/gstavi.c:
+ * gst/avi/gstavidemux.c:
+ * gst/avi/gstavidemux.h:
+ * gst/avi/gstavimux.c:
+ * gst/avi/gstavimux.h:
+ * gst/level/gstlevel.c: (gst_level_transform):
+ * sys/Makefile.am:
+ * sys/oss/.cvsignore:
+ * sys/oss/Makefile.am:
+ * sys/oss/gst-i18n-plugin.h:
+ * sys/oss/gstossaudio.c:
+ * sys/oss/gstossdmabuffer.c:
+ * sys/oss/gstossdmabuffer.h:
+ * sys/oss/gstosshelper.c:
+ * sys/oss/gstosshelper.h:
+ * sys/oss/gstossmixer.c:
+ * sys/oss/gstossmixer.h:
+ * sys/oss/gstossmixerelement.c:
+ * sys/oss/gstossmixerelement.h:
+ * sys/oss/gstossmixertrack.c:
+ * sys/oss/gstossmixertrack.h:
+ * sys/oss/gstosssink.c:
+ * sys/oss/gstosssink.h:
+ * sys/oss/gstosssrc.c:
+ * sys/oss/gstosssrc.h:
+ * sys/oss/oss_probe.c:
+ * sys/osxaudio/Makefile.am:
+ * sys/osxaudio/gstosxaudio.c:
+ * sys/osxaudio/gstosxaudioelement.c:
+ * sys/osxaudio/gstosxaudioelement.h:
+ * sys/osxaudio/gstosxaudiosink.c:
+ * sys/osxaudio/gstosxaudiosink.h:
+ * sys/osxaudio/gstosxaudiosrc.c:
+ * sys/osxaudio/gstosxaudiosrc.h:
+ * sys/osxvideo/Makefile.am:
+ * sys/osxvideo/cocoawindow.h:
+ * sys/osxvideo/cocoawindow.m:
+ * sys/osxvideo/osxvideosink.h:
+ * sys/osxvideo/osxvideosink.m:
+ all these plugins are moved to gst-plugins-good
+
+2005-08-28 Flavio Oliveira <flavio.oliveira@indt.org.br>
+
+ * gst/wavenc/gstwavenc.c: Ported to GStreamer 0.9.
+ Need to fix performance issues.
+
+2005-08-28 Andy Wingo <wingo@pobox.com>
+
+ * Updates for two-arg init from GST_BOILERPLATE.
+
+ * ext/ladspa/gstsignalprocessor.c (gst_signal_processor_init): Use
+ the second arg for the class, because G_OBJECT_GET_CLASS (self)
+ returns the wrong thing.
+ (gst_signal_processor_add_pad_from_template): Make pads of the
+ right type.
+
+ * ext/ladspa/gstladspa.c (gst_ladspa_class_get_param_spec): Make
+ writable param specs G_PARAM_CONSTRUCT so default values work.
+ (gst_ladspa_init): Use the second arg for the class.
+
+2005-08-26 Andy Wingo <wingo@pobox.com>
+
+ * ext/ladspa/gstladspa.c:
+ * ext/ladspa/gstladspa.h: Finish porting, still doesn't work but
+ it does compile and register. I have more features than you.
+
+ * ext/ladspa/gstsignalprocessor.h:
+ * ext/ladspa/gstsignalprocessor.c: Updates, bug fixen.
+
+2005-08-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/effectv/gstquark.c: (gst_quarktv_init),
+ (gst_quarktv_change_state):
+ do proper cleanup/creation, fixes state changes
+
+2005-08-25 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/level/gstlevel.c: (gst_level_message_new):
+ Revert unpopular change for GST_MESSAGE_SRC to GObject.
+
+2005-08-25 Andy Wingo <wingo@pobox.com>
+
+ * ext/ladspa/gstladspa.h:
+ * ext/ladspa/gstladspa.c: Halfway-ported. Doesn't compile yet.
+
+ * ext/ladspa/gstsignalprocessor.h:
+ * ext/ladspa/gstsignalprocessor.c: New files, the start of a base
+ class for DSP elements.
+
+ * configure.ac: Sort the external libs checks, add a ladspa check,
+ output the ladspa makefile.
+
+2005-08-25 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c (gst_rmdemux_loop, gst_rmdemux_chain):
+ Fixed EOS.
+ (gst_rmdemux_parse_indx_data, gst_rmdemux_parse_indx): Handle
+ malformed index headers where the packet size is incorrect.
+
+2005-08-24 Andy Wingo <wingo@pobox.com>
+
+ * ext/dv/gstdvdemux.c (gst_dvdemux_demux_frame): Send out valid
+ segment end timestamps.
+
+2005-08-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ lame and mpegaudioparse seem to work
+ * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+ (gst_video_box_transform_caps), (gst_video_box_get_unit_size):
+ update for basetransform changes
+
+2005-08-24 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/level/gstlevel.c: (gst_level_message_new):
+ GST_MESSAGE_SRC became a GObject
+
+2005-08-23 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/speex/gstspeexenc.h:
+ Fixed include path of adapter
+
+2005-08-23 Wim Taymans <wim@fluendo.com>
+
+ * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init):
+ * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
+ Fix property warning.
+
+2005-08-23 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+ (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain):
+ * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+ (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
+ * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+ (gst_rtph263penc_flush), (gst_rtph263penc_chain):
+ Small updates, RFC reference to payload encoders.
+
+2005-08-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/speex/Makefile.am:
+ * ext/speex/gstspeex.c: (plugin_init):
+ * ext/speex/gstspeexdec.c: (speex_get_query_types),
+ (gst_speex_dec_init), (speex_dec_src_query), (speex_dec_src_event),
+ (speex_dec_event), (speex_dec_chain):
+ Port speexdec. Leads to some unfamiliar warnings on console,
+ but works otherwise.
+
+2005-08-23 Andy Wingo <wingo@pobox.com>
+
+ * sys/oss/gstosssrc.c (gst_oss_src_open): Set the device-name
+ property after opening the mixer.
+
+ * sys/oss/gstosssrc.c:
+ * sys/oss/gstosssrc.h: Easy to implement a mixer, eh...
+
+ * sys/oss/gstossmixerelement.h:
+ * sys/oss/gstossmixerelement.c: Added mixer element like
+ alsamixer.
+
+ * sys/oss/Makefile.am:
+ * sys/oss/gstossaudio.c: Register the ossmixer element.
+
+ * sys/oss/gstossmixer.h:
+ * sys/oss/gstossmixer.c: Refactored to be more like alsamixer.
+
+ * sys/oss/gstossmixertrack.h:
+ * sys/oss/gstossmixertrack.c: Split out from gstossmixer.[ch],
+ like gstalsamixer.
+
+ * sys/oss/gstosssrc.c:
+ * sys/oss/gstosssink.c: Where before we used a gstosselement
+ object as a helper library, now just call functions from
+ gstosshelper.
+
+ * sys/oss/gstosshelper.h:
+ * sys/oss/gstosshelper.c: Made a real library. Removed
+ propertyprobe for now, should add it back later.
+
+ * sys/oss/gstosselement.h:
+ * sys/oss/gstosselement.c: Removed, we don't have a shared base
+ class.
+
+ * sys/oss/gstosshelper.c (gst_oss_helper_probe_caps): Search
+ higher-to-lower, makes 16 bit appear earlier in the caps, which
+ makes it preferred.
+
+ * sys/oss/gstosssrc.h:
+ * sys/oss/gstosssrc.c: Totally ported, dude.
+
+ * sys/oss/Makefile.am:
+ * sys/oss/gstossaudio.c: Add osssrc.
+
+ * sys/oss/gstosssink.c: We do native byte order.
+
+2005-08-23 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c (gst_rmdemux_src_event): Fixed bug
+ causing events to be passed wrong way.
+ (gst_rmdemux_parse_packet): Avoid accidentally skipping audio.
+
+2005-08-22 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_init),
+ (gst_id3_tag_sink_event), (gst_id3_tag_do_caps_nego),
+ (gst_id3_tag_chain), (gst_id3_tag_change_state), (plugin_init):
+ Works a bit better now, but still needs a rewrite to use
+ get_range instead of this seeking nastiness.
+
+2005-08-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/flac/Makefile.am:
+ * ext/flac/gstflac.c: (plugin_init):
+ * ext/flac/gstflacdec.c: (flacdec_get_type), (gst_flacdec_init),
+ (gst_flacdec_update_metadata), (gst_flacdec_seek),
+ (gst_flacdec_tell), (gst_flacdec_length), (gst_flacdec_read),
+ (gst_flacdec_write), (gst_flacdec_loop),
+ (gst_flacdec_get_src_query_types), (gst_flacdec_src_query),
+ (gst_flacdec_src_event), (gst_flacdec_sink_activate),
+ (gst_flacdec_sink_activate_pull), (gst_flacdec_change_state):
+ * ext/flac/gstflacdec.h:
+ Port flacdec (seeking is still slow'ish).
+
+2005-08-22 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c:
+ (gst_rmdemux_perform_seek, gst_rmdemux_parse_packet):
+ Seeking improvements.
+
+2005-08-19 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_class_init):
+ Remove get_time code that is both wrong and unneeded.
+
+2005-08-19 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+ (gst_rtph263penc_flush), (gst_rtph263penc_chain),
+ (gst_rtph263penc_set_property), (gst_rtph263penc_get_property):
+ * gst/rtp/gstrtph263penc.h:
+ Added configurable pt and ssrc, to be merged in the caps or
+ a base class...
+
+2005-08-19 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_init),
+ (gst_rtph263pdec_chain):
+ * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+ (gst_rtph263penc_flush), (gst_rtph263penc_chain):
+ Some cleanups in the h263p (de)payloaders.
+
+2005-08-19 Wim Taymans <wim@fluendo.com>
+
+ * ext/amrnb/amrnbdec.c:
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_setcaps):
+ * ext/amrnb/amrnbparse.c:
+ Update caps with audio/AMR.
+
+ * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+ (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain),
+ (gst_rtpamrdec_change_state):
+ * gst/rtp/gstrtpamrdec.h:
+ * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+ (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
+ Dont set FT headers twice, it was already in the encoded
+ bitstream.
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+ (gst_rtspsrc_close), (gst_rtspsrc_play):
+ * gst/rtsp/rtspconnection.c: (parse_line):
+ Cleanups
+
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init),
+ (gst_udpsrc_create), (gst_udpsrc_set_property),
+ (gst_udpsrc_get_property):
+ * gst/udp/gstudpsrc.h:
+ Added caps property, we need this soon to type the buffers.
+
+2005-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+ (gst_rtpamrdec_chain):
+ Fix up amr depayloader a bit.
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+ (gst_rtspsrc_close), (gst_rtspsrc_play):
+ Look for options result in Public and Allow header fields..
+ spec says Allow but some servers return Public...
+
+2005-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+ (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
+ (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property):
+ * gst/rtp/gstrtpamrenc.h:
+ Added payload_type and ssrc properties to the payloader.
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+ (gst_rtspsrc_close), (gst_rtspsrc_play):
+ Options need to be stripped and are in the Public header field.
+
+ * gst/rtsp/rtspurl.c: (rtsp_url_parse):
+ Fix url / parsing...
+
+
+2005-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/Makefile.am:
+ * gst/rtp/gstrtp.c: (plugin_init):
+ * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_get_type),
+ (gst_rtpamrdec_base_init), (gst_rtpamrdec_class_init),
+ (gst_rtpamrdec_init), (gst_rtpamrdec_chain),
+ (gst_rtpamrdec_set_property), (gst_rtpamrdec_get_property),
+ (gst_rtpamrdec_change_state), (gst_rtpamrdec_plugin_init):
+ * gst/rtp/gstrtpamrdec.h:
+ * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_get_type),
+ (gst_rtpamrenc_base_init), (gst_rtpamrenc_class_init),
+ (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
+ (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property),
+ (gst_rtpamrenc_change_state), (gst_rtpamrenc_plugin_init):
+ * gst/rtp/gstrtpamrenc.h:
+ * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_class_init),
+ (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain):
+ Added very simplistic amr payloader. depayloader does not
+ work yet.
+
+2005-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+ (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
+ (gst_rtspsrc_change_state):
+ * gst/rtsp/gstrtspsrc.h:
+ * gst/rtsp/rtspdefs.c: (rtsp_method_as_text), (rtsp_find_method):
+ * gst/rtsp/rtspdefs.h:
+ * gst/rtsp/rtsptransport.c: (rtsp_transport_parse):
+ Handle RTSP defaults better.
+ Issue OPTIONS request to figure out what we are allowed to do.
+ Make the methods a bitfield so we can easily collect supported
+ options.
+ Fix rtsp_find_method.
+ Do proper RTSP connection shutdown.
+
+2005-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/Makefile.am:
+ * gst/rtp/gstrtp-common.h:
+ * gst/rtp/gstrtp.c: (plugin_init):
+ * gst/rtp/gstrtpL16enc.h:
+ * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
+ (gst_rtpdec_class_init), (gst_rtpdec_chain_rtp),
+ (gst_rtpdec_chain_rtcp), (gst_rtpdec_change_state),
+ (gst_rtpdec_plugin_init):
+ * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_get_type),
+ (gst_rtph263pdec_base_init), (gst_rtph263pdec_class_init),
+ (gst_rtph263pdec_init), (gst_rtph263pdec_chain),
+ (gst_rtph263pdec_set_property), (gst_rtph263pdec_get_property),
+ (gst_rtph263pdec_change_state), (gst_rtph263pdec_plugin_init):
+ * gst/rtp/gstrtph263pdec.h:
+ * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_get_type),
+ (gst_rtph263penc_base_init), (gst_rtph263penc_class_init),
+ (gst_rtph263penc_init), (gst_rtph263penc_flush),
+ (gst_rtph263penc_chain), (gst_rtph263penc_set_property),
+ (gst_rtph263penc_get_property), (gst_rtph263penc_change_state),
+ (gst_rtph263penc_plugin_init):
+ * gst/rtp/gstrtph263penc.h:
+ * gst/rtp/gstrtpmpadec.c: (gst_rtpmpadec_get_type),
+ (gst_rtpmpadec_base_init), (gst_rtpmpadec_class_init),
+ (gst_rtpmpadec_init), (gst_rtpmpadec_chain),
+ (gst_rtpmpadec_set_property), (gst_rtpmpadec_get_property),
+ (gst_rtpmpadec_change_state), (gst_rtpmpadec_plugin_init):
+ * gst/rtp/gstrtpmpadec.h:
+ * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_get_type),
+ (gst_rtpmpaenc_base_init), (gst_rtpmpaenc_class_init),
+ (gst_rtpmpaenc_init), (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain),
+ (gst_rtpmpaenc_set_property), (gst_rtpmpaenc_get_property),
+ (gst_rtpmpaenc_change_state), (gst_rtpmpaenc_plugin_init):
+ * gst/rtp/gstrtpmpaenc.h:
+ * gst/rtp/rtp-packet.c:
+ * gst/rtp/rtp-packet.h:
+ Remove old code that is now in gst-libs/gst/rtp/.
+ Added some payload/depayloaders.
+
+ * gst/udp/gstudpsink.c: (gst_udpsink_class_init):
+ Fix port number range.
+
+2005-08-17 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ Added mpegaudioparse
+
+ * ext/lame/gstlame.c: (gst_lame_src_getcaps),
+ (gst_lame_src_setcaps), (gst_lame_sink_setcaps),
+ (gst_lame_sink_event), (gst_lame_chain):
+ Some cleanups.
+ Fix memleak.
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (gst_mp3parse_class_init), (gst_mp3parse_init),
+ (gst_mp3parse_chain), (gst_mp3parse_change_state):
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ Ported mpegaudioparse
+
+2005-08-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_open), (gst_rtspsrc_play):
+ Support absolute control urls too.
+
+2005-08-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
+ (gst_avi_demux_stream_header):
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_add_stream), (qtdemux_parse_tree):
+ Uncomment metadata and codec-name handling.
+
+2005-08-16 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_read_header):
+ Fix compile warning.
+
+ * ext/lame/gstlame.c: (gst_lame_class_init),
+ (gst_lame_src_getcaps), (gst_lame_src_setcaps),
+ (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
+ (gst_lame_chain), (gst_lame_change_state):
+ * ext/lame/gstlame.h:
+ Port lame plugin
+
+2005-08-16 Andy Wingo <wingo@pobox.com>
+
+ * ext/dv/gstdvdemux.c (gst_dvdemux_flush): Use gst_adapter_take so
+ we have our own copy of the data.
+ (gst_dvdemux_demux_video): Set the take() data as malloc_data so
+ it will get freed later.
+
+ * ext/raw1394/gstdv1394src.c (gst_dv1394src_iso_receive): Note
+ license info in the source code -- was only in the commit log
+ before.
+
+ * ext/dv/gstdvdec.h:
+ * ext/dv/gstdvdec.c: Only decodes systemstream=FALSE dv video --
+ old pipelines using dvdec should probably have a dvdemux first.
+
+ * ext/dv/gstdvdemux.h:
+ * ext/dv/gstdvdemux.c: Split out from dvdec, chunks the incoming
+ systemstream=TRUE data into frames, sets caps data, and spits out
+ PCM audio in addition to systemstream=FALSE video frames. Operates
+ in chain mode only for now; should make a getrange version as
+ well.
+
+ * ext/dv/gstdv.c: New file, registers the libgstdv plugin.
+
+ * ext/dv/Makefile.am: Library name changed to libgstdv. Split
+ dvdec into dvdemux and dvdec.
+
+2005-08-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_event), (gst_faad_chain):
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+ Handle _push() return values.
+
+2005-08-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_event):
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+ Fix debug.
+
+2005-08-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak),
+ (qtdemux_video_caps):
+ Forwardport from 0.8 to implement RLE.
+
+2005-08-15 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/README:
+ Added rtsp server implementation docs.
+
+2005-08-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/aalib/gstaasink.c:
+ aalib is LGPL, so this plugin can be LGPL
+ * ext/arts/gst_arts.c: (plugin_init):
+ rename, we don't like underscores
+ * ext/audiofile/gstaf.c:
+ * ext/sndfile/gstsf.c:
+ rename, we like a descriptive plugin name
+ * ext/gconf/gstgconfelements.c:
+ change description a little
+ * ext/musicbrainz/gsttrm.c:
+ musicbrainz is LGPL, so plugin can be LGPL
+ * ext/raw1394/gst1394.c:
+ rename, we like all-digit names
+ * gst/equalizer/gstiirequalizer.c:
+ * gst/fdsrc/gstfdsrc.c:
+ * gst/multifilesink/gstmultifilesink.c:
+ rename
+ * gst/virtualdub/gstvirtualdub.c:
+ use GST_PLUGIN_DEFINE
+ * sys/dxr3/dxr3init.c:
+ only uses system headers, and code is LGPL, so plugin is LGPL
+
+2005-08-13 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/mad/Makefile.am:
+ * gst/avi/Makefile.am:
+ * gst/effectv/Makefile.am:
+ * gst/udp/Makefile.am:
+ * gst/wavparse/Makefile.am:
+ Use -lgstfoo-@GST_MAJORMINOR@ instead of -lgstfoo-0.9
+
+2005-08-12 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_decode_indirect),
+ (gst_jpeg_dec_decode_direct), (gst_jpeg_dec_chain):
+ Fix decoding of pictures with certain uneven or unaligned
+ widths where jpeglib needs more horizontal padding than our
+ I420 buffers provide, resulting in blocky artifacts at the
+ left side of the picture (#164176).
+ Also make use of our shiny new GST_ROUND_N() macros.
+
+2005-08-11 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), (gst_jpeg_dec_chain),
+ (gst_jpeg_dec_change_state):
+ * ext/jpeg/gstjpegdec.h:
+ Fix crashes/invalid memory access for pictures that have a height
+ that is not a multiple of 16 (or rather: v_samp_factor * DCTSIZE).
+
+ Also fix the state change function for downwards state changes
+ (need to chain up to parent before destroying our resources, to
+ make sure pads get deactivated and our chain function isn't
+ running and using those very same resources in another thread).
+
+ The jpeg line buffer only needs to be v_samp_factor*DCTSIZE lines
+ per plane, not picture_height lines; allocate that on the stack.
+
+2005-08-10 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_stream_headers),
+ (gst_wavparse_stream_data):
+ Add some fixes from 0.8 branch: allow 24/32bps songs and
+ blockalign samples to the header-specified size, if any
+ (#311070); error out on channels==0 or bitrate==0
+ (#309043, #304588).
+
+2005-08-10 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/level/gstlevel.c: (gst_level_init), (gst_level_set_caps),
+ (gst_level_transform):
+ * gst/level/gstlevel.h:
+ remove unused MS struct member
+ don't reset the CS values for channels on every _chain, so that
+ level actually correctly calculates the RMS value. sigh.
+ calculate RMS values correctly for peak and decay peak sums;
+ before we were signalling them as if they already were amplitude
+ and not power values. sigh.
+ Remind me to not try and pretend I'm writing DSP code.
+
+2005-08-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_class_init), (gst_faad_setcaps):
+ Add debug category, remove Close() call that made it crash
+ whenever reusing, renegotiating or anything; Close() actually
+ free()s the handle and should only be called on READY->NULL.
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+ Actually set caps on buffer (in addition to pad), also.
+
+2005-08-10 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c (gst_rmdemux_sink_activate)
+ (gst_rmdemux_sink_activate_push, gst_rmdemux_sink_activate_pull)
+ (gst_rmdemux_loop, gst_rmdemux_src_event)
+ (gst_rmdemux_perform_seek, gst_rmdemux_src_query): Implemented
+ push-pull and seeking.
+
+2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_event):
+ Sign/unsign mismatch.
+ * configure.ac:
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_class_init),
+ (gst_qtdemux_init), (gst_qtdemux_get_src_query_types),
+ (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
+ (plugin_init), (gst_qtdemux_handle_sink_event),
+ (gst_qtdemux_change_state), (gst_qtdemux_loop_header),
+ (qtdemux_sink_activate), (qtdemux_sink_activate_pull),
+ (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
+ (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
+ * gst/qtdemux/qtdemux.h:
+ Half-assed port (hey, it works).
+
+2005-08-09 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
+ Fix AVI header parsing: add missing break statement after
+ GST_RIFF_INFO_LIST parsing code; gst_riff_read_chunk() has
+ already advanced the avi->offset, no need to do it twice
+ (fixes MovieOfMovies.avi).
+
+2005-08-09 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
+ (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain),
+ (gst_jpeg_dec_change_state):
+ * ext/jpeg/gstjpegdec.h:
+ Make mjpeg actually work and skip jpeg data parsing if we
+ know that the input is packetized (ie. each input buffer
+ is exactly one jpeg frame).
+
+2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+ It'd be nice if I could listen to my mp3 files, so send out an
+ initial discont, as the sink apparently wants.
+
+2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
+ (gst_avi_demux_handle_seek):
+ Fix seeking (or, well, fix threading issue where a variable was
+ set before a lock was taken and was already unset before that
+ same lock was taken and was thus no longer in existance when it
+ actually had to be used).
+
+2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
+ Mixing binary and logical operators is not going to work; fix
+ position-querying in Totem.
+
+2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_class_init),
+ (gst_faad_init), (gst_faad_setcaps), (gst_faad_srcgetcaps),
+ (gst_faad_event), (gst_faad_update_caps), (gst_faad_chain),
+ (gst_faad_change_state):
+ * ext/faad/gstfaad.h:
+ Fix negotiation (#310932) and miscellaneous other stuff. Probably
+ still needs some more work.
+
+2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
+ (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain):
+ Add setcaps() function (for mjpeg).
+
+2005-08-08 Andy Wingo <wingo@pobox.com>
+
+ * ext/esd/esdsink.c (gst_esdsink_getcaps): Seems that wierd
+ va_list caps setting function was borked. Fixed esdsink.
+
+ * sys/oss/gstosssink.c (gst_oss_sink_open, gst_oss_sink_close)
+ (gst_oss_sink_prepare, gst_oss_sink_unprepare): Update for newer
+ audiosink api.
+
+ * ext/raw1394/gstdv1394src.c (gst_dv1394src_get_property)
+ (gst_dv1394src_set_property): Style. All about the style.
+
+ * ext/esd/esdsink.c (gst_esdsink_getcaps): Return specific caps
+ only if in READY or higher (i.e., if _open() has been called.)
+ (gst_esdsink_open, gst_esdsink_close, gst_esdsink_prepare)
+ (gst_esdsink_unprepare): Update for audiosink changes.
+ (gst_esdsink_change_state): Die!
+
+2005-08-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/jpeg/Makefile.am:
+ Fix compile.
+
+2005-08-08 Tim-Philipp Müller <tim at centricular dot net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/jpeg/Makefile.am:
+ * ext/jpeg/gstjpeg.c: (plugin_init):
+ * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_get_type),
+ (gst_jpeg_dec_finalize), (gst_jpeg_dec_base_init),
+ (gst_jpeg_dec_class_init), (gst_jpeg_dec_fill_input_buffer),
+ (gst_jpeg_dec_init_source), (gst_jpeg_dec_skip_input_data),
+ (gst_jpeg_dec_resync_to_restart), (gst_jpeg_dec_term_source),
+ (gst_jpeg_dec_my_output_message), (gst_jpeg_dec_my_emit_message),
+ (gst_jpeg_dec_my_error_exit), (gst_jpeg_dec_init),
+ (is_jpeg_start_marker), (is_jpeg_end_marker),
+ (gst_jpeg_dec_find_jpeg_header), (gst_jpeg_dec_ensure_header),
+ (gst_jpeg_dec_have_end_marker),
+ (gst_jpeg_dec_parse_tag_has_entropy_segment),
+ (gst_jpeg_dec_parse_image_data), (gst_jpeg_dec_chain),
+ (gst_jpeg_dec_change_state):
+ * ext/jpeg/gstjpegdec.h:
+ Port jpegdec to 0.9; handles 'progressive loading' now, ie. input does
+ no longer need to be one single buffer.
+
+2005-08-04 Andy Wingo <wingo@pobox.com>
+
+ * sys/oss/gstossaudio.c (plugin_init): Second-class citizen.
+
+ * gst/videobox/gstvideobox.c (gst_video_box_get_size): Update for
+ API changes.
+
+ * configure.ac (DEFAULT_AUDIOSINK, DEFAULT_VIDEOSINK): Set to
+ autoaudiosink and autovideosink.
+
+2005-08-04 Edward Hervey <edward@fluendo.com>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+ (gst_avi_demux_parse_stream), (gst_avi_demux_process_next_entry):
+ You need to allocatate (len+1) characters to store a len size string.
+ Also don't stop the processing task if the output pad is not linked.
+
+2005-08-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_reset),
+ (gst_gconf_audio_sink_init), (do_toggle_element),
+ (cb_toggle_element), (gst_gconf_audio_sink_change_state):
+ * ext/gconf/gstgconfaudiosink.h:
+ * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_reset),
+ (gst_gconf_video_sink_init), (do_toggle_element),
+ (cb_toggle_element), (gst_gconf_video_sink_change_state):
+ * ext/gconf/gstgconfvideosink.h:
+ * gst/autodetect/gstautoaudiosink.c: (gst_auto_audio_sink_reset),
+ (gst_auto_audio_sink_init), (gst_auto_audio_sink_detect),
+ (gst_auto_audio_sink_change_state):
+ * gst/autodetect/gstautoaudiosink.h:
+ * gst/autodetect/gstautovideosink.c: (gst_auto_video_sink_reset),
+ (gst_auto_video_sink_init), (gst_auto_video_sink_detect),
+ (gst_auto_video_sink_change_state):
+ * gst/autodetect/gstautovideosink.h:
+ Use new ghostpad API; now they actually work in Totem, also.
+
+2005-08-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/libpng/Makefile.am:
+ Fix uninstalled build.
+
+2005-08-02 Edward Hervey <edward@fluendo.com>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/libpng/Makefile.am:
+ * ext/libpng/gstpng.c:
+ * ext/libpng/gstpngenc.c:
+ Ported pngenc , still have to port pngdec...
+
+2005-08-01 Stefan Kost <ensonic@users.sf.net>
+
+ reviewed by: <delete if not using a buddy>
+
+ * configure.ac:
+ * ext/ladspa/Makefile.am:
+ * ext/ladspa/gstladspa.c: (gst_ladspa_init), (gst_ladspa_loop),
+ (gst_ladspa_chain), (gst_ladspa_get), (plugin_init):
+ * ext/ladspa/gstladspa.h:
+ deactivate and remove dparams (libgstcontrol)
+
+2005-07-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/faad/gstfaad.c: (gst_faad_event):
+ Compile fixes.
+
+2005-07-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_event),
+ (gst_amrnbparse_loop):
+ * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event),
+ (gst_dvdec_handle_src_event), (gst_dvdec_decode_frame):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_event),
+ (gst_id3_tag_sink_event), (gst_id3_tag_chain):
+ * ext/mad/gstmad.c: (gst_mad_src_query), (index_seek),
+ (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/shout2/gstshout2.c: (gst_shout2send_event):
+ * ext/sidplay/gstsiddec.cc:
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
+ (gst_avi_demux_send_event), (gst_avi_demux_stream_header),
+ (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry):
+ * gst/goom/gstgoom.c: (gst_goom_event):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+ (gst_rmdemux_chain), (gst_rmdemux_send_event),
+ (gst_rmdemux_add_stream):
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_handle_seek),
+ (gst_wavparse_stream_headers), (gst_wavparse_stream_data),
+ (gst_wavparse_loop), (gst_wavparse_srcpad_event):
+ Various event updates and cleanups.
+
+2005-07-25 Christian Schaller <uraeus@gnome.org>
+
+
+ * gst-plugins.spec.in: add silence and videoflip
+ * gst/videofilter/Makefile.am: add missing header to noinst
+
+2005-07-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videofilter/Makefile.am:
+ * gst/videofilter/gstgamma.c: (gst_gamma_setup):
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_setup):
+ * gst/videofilter/gstvideofilter.c: (gst_videofilter_class_init),
+ (gst_videofilter_getcaps), (gst_videofilter_setcaps),
+ (gst_videofilter_init), (gst_videofilter_chain),
+ (gst_videofilter_set_property), (gst_videofilter_get_property),
+ (gst_videofilter_setup), (gst_videofilter_class_add_pad_templates):
+ * gst/videofilter/gstvideofilter.h:
+ * gst/videofilter/gstvideoflip.c: (gst_videoflip_init),
+ (gst_videoflip_set_property), (gst_videoflip_get_property),
+ (plugin_init), (gst_videoflip_setup), (gst_videoflip_planar411):
+ forward port from 0.9 and enable videoflip now that it works
+
+2005-07-23 Edward Hervey <edward@fluendo.com>
+
+ * configure.ac:
+ * gst/silence/Makefile.am:
+ * gst/silence/gstsilence.h:
+ * gst/silence/gstsilence.c:
+ Ported silence to 0.9 using GstBaseSrc ... 180 lines :)
+
+2005-07-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_src_event):
+ First try forwarding events, makes seeking in AVI files with mp3
+ audio work again.
+
+2005-07-20 Andy Wingo <wingo@pobox.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event): Signedness
+ fix.
+
+2005-07-20 Edward Hervey <edward@fluendo.com>
+
+ * configure.ac:
+ * gst/wavparse/gstwavparse.c:
+ * gst/wavparse/gstwavparse.h:
+ * gst/wavparse/Makefile.am:
+ Ported wavparse to 0.9 . Playing, seeking and state changes work.
+ Could need more loving on the headers though.
+
+2005-07-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/gconf/Makefile.am:
+ * ext/gconf/gconf.c: (gst_bin_find_unconnected_pad),
+ (gst_gconf_render_bin_from_description),
+ (gst_gconf_get_default_video_sink):
+ * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init),
+ (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_dispose),
+ (cb_toggle_element), (gst_gconf_audio_sink_change_state):
+ * ext/gconf/gstgconfelements.h:
+ * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init),
+ (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_dispose),
+ (cb_toggle_element), (gst_gconf_video_sink_change_state):
+ * gst/autodetect/gstautoaudiosink.c:
+ (gst_auto_audio_sink_base_init), (gst_auto_audio_sink_class_init),
+ (gst_auto_audio_sink_detect), (gst_auto_audio_sink_change_state):
+ * gst/autodetect/gstautovideosink.c:
+ (gst_auto_video_sink_base_init), (gst_auto_video_sink_class_init),
+ (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect):
+ Port auto/gconfsinks to 0.9. They actually appear to work here in
+ Totem as well, making them actually useful.
+
+2005-07-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/Makefile.am:
+ Fix uninstalled build.
+
+2005-07-19 Wim Taymans <wim@fluendo.com>
+
+ * sys/oss/gstosssink.c: (gst_oss_sink_get_format),
+ (gst_oss_sink_open):
+ Parse spec to set correct oss values.
+
+2005-07-19 Edgard N. A. G. Lima <edgard.lima@indt.org.br>
+
+ * configure.ac
+ * ext/Makefile.am
+ * ext/amrnb/amrnbdec.c
+ * ext/amrnb/amrnbenc.c
+ * ext/amrnb/amrnbparse.c
+ * ext/faad/gstfaad.c
+ * ext/mpeg2dec/gstmpeg2dec.c
+ Ported amrnb, faad, mpeg2dec to 0.9
+
+2005-07-19 Andy Wingo <wingo@pobox.com>
+
+ * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Set the proper
+ framerate on the outbound buffer.
+
+ * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber
+ alloc_buffer's return value.
+ (gst_dvdec_decode_frame): Handle unlinked pads with grace and
+ agility.
+
+ * ext/dv/gstdvdec.h: Fix signedness error.
+
+2005-07-19 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+ (gst_dvdec_sink_convert), (gst_dvdec_get_src_query_types),
+ (gst_dvdec_src_query), (gst_dvdec_get_sink_query_types),
+ (gst_dvdec_sink_query), (gst_dvdec_send_event),
+ (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
+ (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
+ (gst_dvdec_decode_frame), (gst_dvdec_flush), (gst_dvdec_chain):
+ * ext/dv/gstdvdec.h:
+ Implemented seeking in dvdec.
+
+2005-07-19 Andy Wingo <wingo@pobox.com>
+
+ * ext/Makefile.am: Enable dvdev and raw1394src.
+
+2005-07-18 Andy Wingo <wingo@pobox.com>
+
+ * configure.ac: Use AS_LIBTOOL_TAGS. Fix crap gettext commit
+ comment.
+
+2005-07-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_add_element),
+ (gst_rtspsrc_play):
+ Fix for core changes.
+
+2005-07-18 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
+ When returning to NORMAL state after reading tags,
+ pass on the discont event.
+
+2005-07-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+ (gst_rmdemux_change_state), (gst_rmdemux_chain),
+ (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
+ (gst_rmdemux_add_stream):
+ Send discont event before pushing first buffer.
+
+2005-07-17 Philippe Khalaf <burger@speedy.org>
+
+ * gst/fdsrc/gstfdsrc.c:
+ Removed #include <gst_private.h>
+
+2005-07-16 Philippe Khalaf <burger@speedy.org>
+
+ * gst/fdsrc/gstfdsrc.c:
+ * gst/fdsrc/gstfdsrc.h:
+ * gst/fdsrc/Makefile.am:
+ Moved fdsrc 0.9 port from gstreamer/gst/elements to here.
+
+2005-07-16 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event),
+ (gst_mad_chain):
+ Add convert function for proper timestamp calculations.
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_send_event),
+ (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
+ (gst_avi_demux_process_next_entry), (gst_avi_demux_loop):
+ Send out initial discont.
+
+2005-07-15 Wim Taymans <wim@fluendo.com>
+
+ * gst/level/gstlevel.c: (gst_level_transform):
+ * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+ (gst_video_box_get_size), (gst_video_box_transform):
+ Port to new base class.
+
+2005-07-14 Wim Taymans <wim@fluendo.com>
+
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+ (gst_dv1394src_class_init), (gst_dv1394src_init),
+ (gst_dv1394src_iso_receive), (gst_dv1394src_create),
+ (gst_dv1394src_change_state), (gst_dv1394src_query):
+ It's PUSH_SRC now.
+
+2005-07-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+ (gst_udpsrc_class_init):
+ more autistic cleanliness in functions/names/defines
+
+
+2005-07-10 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/aalib/gstaasink.c: (gst_aasink_get_type),
+ (gst_aasink_class_init), (gst_aasink_init):
+ * ext/esd/esdsink.c: (gst_esdsink_get_type),
+ (gst_esdsink_class_init):
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
+ (gst_cacasink_class_init), (gst_cacasink_init):
+ * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
+ (gst_shout2send_class_init), (gst_shout2send_init):
+ * gst/udp/gstdynudpsink.c: (gst_dynudpsink_get_type),
+ (gst_dynudpsink_class_init):
+ * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+ (gst_multiudpsink_class_init):
+ more macro splitting
+
+2005-07-08 Andy Wingo <wingo@pobox.com>
+
+ * sys/oss/: Port from THREADED+wim's fixes.
+
+ * gst/avi/Makefile.am (libgstavi_la_CFLAGS): No gettext hacks, the
+ defines come from config.h.
+
+ * autogen.sh: Run autopoint, etc.
+
+ * Makefile.am (DIST_SUBDIRS, SUBDIRS): Go into po/.
+
+ * configure.ac: Add gettext stuff.
+
+2005-07-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/videobox/gstvideobox.c: (gst_video_box_init),
+ (gst_video_box_transform_caps), (gst_video_box_set_caps):
+ Logic was reversed. Needs some more fixes in the transform
+ function to include AYUV output.
+ Moved AYUV as prefered format.
+
+2005-07-07 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/dv/Makefile.am:
+ * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
+ (gst_dvdec_get_src_query_types), (gst_dvdec_src_query),
+ (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
+ (gst_dvdec_video_getcaps), (gst_dvdec_video_setcaps),
+ (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
+ (gst_dvdec_decode_frame), (gst_dvdec_chain),
+ (gst_dvdec_change_state), (gst_dvdec_set_property),
+ (gst_dvdec_get_property), (plugin_init):
+ * ext/dv/gstdvdec.h:
+ * ext/esd/esdsink.c: (gst_esdsink_class_init):
+ Ported DVdec to 0.9.
+ Parent of esdsink is GstAudioSink.
+
+2005-07-07 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/raw1394/Makefile.am:
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+ (gst_dv1394src_class_init), (gst_dv1394src_init),
+ (gst_dv1394src_iso_receive), (gst_dv1394src_create),
+ (gst_dv1394src_change_state), (gst_dv1394src_convert),
+ (gst_dv1394src_get_query_types), (gst_dv1394src_query):
+ * ext/raw1394/gstdv1394src.h:
+ Ported the 1394 source to 0.9.
+
+2005-07-07 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_query_types):
+ * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_get_src_query_types):
+ Remove deprecated/unsed code.
+
+2005-07-06 Edward Hervey <edward@fluendo.com>
+
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
+ GST_BASESRC --> GST_BASE_SRC
+
+2005-07-05 Andy Wingo <wingo@pobox.com>
+
+ * gst/oneton: Removed (replaced by deinterleave).
+
+ * gst/adder:
+ * gst/audioconvert:
+ * gst/audiorate:
+ * gst/audioscale:
+ * gst/ffmpegcolorspace:
+ * gst/playback:
+ * gst/sine:
+ * gst/subparse:
+ * gst/tags:
+ * gst/tcp:
+ * gst/videoscale:
+ * gst/volume: Removed dirs that are now in gst-plugins-base.
+
+2005-07-05 Edward Hervey <edward@fluendo.com>
+
+ * configure.ac: (GST_PLUGINS_ALL):
+ videofilter must be compiled first, since other plugins depend ont it.
+
+2005-07-05 Andy Wingo <wingo@pobox.com>
+
+ * Way, way, way too many files:
+ Remove crack comment from the 2000 era.
+
+2005-07-05 Andy Wingo <wingo@pobox.com>
+
+ * gst/videobox/gstvideobox.c: Clean up, port to 0.9, use
+ BaseTransform.
+
+ * gst/videobox/Makefile.am: Link to base libs, include
+ plugins-base cflags, dist the README.
+
+ * configure.ac (GST_PLUGIN_ALL, AC_CONFIG_FILES): Add videobox to
+ the build.
+
+2005-07-04 Wim Taymans <wim@fluendo.com>
+
+ * gst/realmedia/rmdemux.c:
+ I don't think that piece of changelog should go there.
+
+2005-07-04 Andy Wingo <wingo@pobox.com>
+
+ * examples/level/:
+ * examples/level/Makefile.am:
+ * examples/level/README:
+ * examples/level/demo.c:
+ * examples/level/plot.c: Examples moved out of the source dir. Not
+ updated tho.
+
+ * configure.ac: Add level to the build.
+
+ * gst/level/Makefile.am:
+ * gst/level/gstlevel.h:
+ * gst/level/gstlevel.c: Cleaned up, ported to 0.9.
+
+ * ext/aalib/gstaasink.c (gst_aasink_fixate): Update for newer
+ fixate prototype.
+
+2005-07-03 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c (gst_rmdemux_add_stream),
+ (gst_rmdemux_src_getcaps), (gst_rmdemux_chain):
+ Added getcaps function no_more_pads call
+
+2005-07-01 Philippe Khalaf <burger@speedy.org>
+ * gst/udp/Makefile.am:
+ * gst/udp/gstudp.c:
+ * gst/udp/gstdynudpsink.c: (new)
+ * gst/udp/gstdynudpsink.h: (new)
+ Added new element (udpdynsink) that receives GstNetBuffers and sends the
+ udp packets to the source given in the buffer. It's used by rtpsession
+ element for now.
+ * gst/udp/gstudpsrc.c:
+ Fixed memory leak.
+
+2005-07-01 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * configure.ac:
+ * ext/mad/Makefile.am:
+ * sys/oss/Makefile.am:
+ Roll gstreamer-interfaces-0.9.pc into gstreamer-plugins-base-0.9.pc
+
+2005-07-01 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/libcaca/Makefile.am:
+ * ext/mad/Makefile.am:
+ * gst/effectv/Makefile.am:
+ * gst/udp/Makefile.am:
+ Replace GST_PLUGINS_LIBS_* with GST_PLUGINS_BASE_*
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_query),
+ (gst_id3_tag_src_event), (gst_id3_tag_sink_event),
+ (gst_id3_tag_chain), (plugin_init):
+ * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
+ Signedness warning fix, use gst_pad_get_peer instead of GST_PAD_PEER
+ in querying and event handling, because we're not holding the pad
+ lock and the peer may disappear.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_parse_subindex),
+ (gst_avi_demux_parse_index), (gst_avi_demux_massage_index):
+ Signedness warning fixes.
+
+ * gst/videofilter/gstvideotemplate.c: (plugin_init):
+ Remove gst_library_load
+
+2005-06-30 Edward Hervey <edward@fluendo.com>
+
+ * gst/avi/Makefile.am: (libgstavi_la_LIBADD):
+ Added linking to libgstriff-0.9
+
+ * ext/mad/gstmad.c: (gst_mad_src_query):
+ check the format of the upstream query and return query if it's the
+ same format as the requested one.
+
+2005-06-30 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
+ Compiler pains.
+
+2005-06-30 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * gst/avi/Makefile.am:
+ * gst/avi/gstavi.c: (plugin_init):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_get_type),
+ (gst_avi_demux_class_init), (gst_avi_demux_init),
+ (gst_avi_demux_reset), (gst_avi_demux_index_next),
+ (gst_avi_demux_index_entry_for_time),
+ (gst_avi_demux_index_entry_for_byte),
+ (gst_avi_demux_index_entry_for_frame), (gst_avi_demux_src_convert),
+ (gst_avi_demux_handle_src_query), (gst_avi_demux_handle_src_event),
+ (gst_avi_demux_parse_file_header), (gst_avi_demux_stream_init),
+ (gst_avi_demux_parse_avih), (gst_avi_demux_parse_superindex),
+ (gst_avi_demux_parse_subindex), (gst_avi_demux_read_subindexes),
+ (gst_avi_demux_parse_stream), (gst_avi_demux_parse_odml),
+ (gst_avi_demux_parse_index), (gst_avi_demux_stream_index),
+ (gst_avi_demux_stream_scan), (gst_avi_demux_massage_index),
+ (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
+ (gst_avi_demux_process_next_entry), (gst_avi_demux_stream_data),
+ (gst_avi_demux_loop), (gst_avi_demux_sink_activate),
+ (gst_avi_demux_sink_activate_pull):
+ * gst/avi/gstavidemux.h:
+ Port from -THREADED to HEAD, and fix for latest API changes of
+ the day. Keep avimux dead for now.
+
+2005-06-29 Wim Taymans <wim@fluendo.com>
+
+ * ext/shout2/gstshout2.c: (gst_shout2send_render):
+ Fix build.
+
+2005-06-29 Andy Wingo <wingo@pobox.com>
+
+ * gst/videofilter/gstvideoexample.c: Removed gst_library_load, I
+ think. Whatever this plugin actually does, that I don't know.
+
+2005-06-29 Andy Wingo <wingo@pobox.com>
+
+ * ext/mad/gstid3tag.c (gst_id3_tag_get_event_masks): Reschmoove.
+
+ * ext/mad/gstmad.c (gst_mad_get_event_masks): Remove.
+ (gst_mad_chain): Appease GCC.
+
+ * ext/libcaca/gstcacasink.c (gst_cacasink_setcaps): Signedness.
+
+ * ext/aalib/gstaasink.c (gst_aasink_fixate): Unref caps, not free.
+ (gst_aasink_scale): Signedness.
+
+ * gst/udp/gstudpsink.c (gst_udpsink_get_type): Actually add the
+ URI handler.
+
+ * gst/udp/gstudpsrc.c (gst_udpsrc_start):
+ (gst_udpsrc_create): Signedness.
+
+ * gst/rtsp/sdpmessage.c (sdp_message_parse_buffer): Thanks
+ compiler!
+ (sdp_parse_line): Signedness fix.
+
+ * configure.ac (GST_CFLAGS): GCC strikes back!!! Let the build
+ breakage ensue!!!
+
+ * gst/rtsp/gstrtspsrc.c (gst_rtspsrc_loop, gst_rtspsrc_open):
+ Signedness, unused var fixes.
+ (gst_rtspsrc_close): Unused?
+
+ * gst/realmedia/rmdemux.c (re_hexdump_bytes): Unused.
+
+ * gst/law/mulaw-encode.c (gst_mulawenc_chain): Signeness fix.
+
+ * gst/law/alaw-encode.c (alawenc_getcaps): Remove unneeded
+ declarations. Typo (probably crasher) fix.
+
+ * gst/law/mulaw-encode.c (mulawdec_getcaps):
+ * gst/law/mulaw-encode.c (mulawenc_getcaps):
+ * gst/law/alaw-decode.c (alawdec_getcaps): Same crasher fix.
+
+ * gst/goom/gstgoom.c (gst_goom_init): Hook up the event function.
+
+ * gst/effectv/gstwarp.c (gst_warptv_setup): Signedness fix.
+
+ * gst/effectv/gstdice.c (gst_dicetv_draw): Um, deferencing
+ uninitialized pointer not good.
+
+ * gst/videofilter/gstvideoexample.c (plugin_init):
+ * gst/videofilter/Makefile.am (libgstvideoexample_la_LIBADD): Link
+ to libgstvideofilter instead of gst_library_load.
+
+ * gst/alpha/gstalpha.c (gst_alpha_chroma_key_i420)
+ (gst_alpha_chroma_key_ayuv): Signedness fixen.
+
+2005-06-29 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+ (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+ (gst_rtspsrc_change_state):
+ Fix case where outpad could not be decided.
+
+2005-06-29 Andy Wingo <wingo@pobox.com>
+
+ * ext/Makefile.am (MAD_DIR): Add mad to the build.
+
+2005-06-28 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
+ Fix old RPAD macro.
+ basesrc -> base_src
+
+2005-06-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ RPAD_ -> PAD
+ Fix args in bufferalloc function call.
+ Makes the mad plugin compile again
+
+2005-06-27 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst/realmedia/rmdemux.c: Rewrote to use gstadapter. Also parses
+ audio and video header packets for known properties.
+
+2005-06-23 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+ (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+ (gst_rtspsrc_change_state):
+ * gst/rtsp/rtspurl.c: (rtsp_url_parse):
+ Make rtspsrc a live source.
+ Don't try to parse NULL urls.
+
+2005-06-23 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
+ Make udpsrc a live source.
+
+2005-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/Makefile.am:
+ Use versioned net lib.
+
+2005-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/Makefile.am:
+ Fix hack in makefile.
+
+2005-06-02 Andy Wingo <wingo@pobox.com>
+
+ * ext/mad/gstid3tag.c: Finish porting to 0.9: no more gstdata,
+ check for link functions before calling them, give
+ gst_message_new_tag its own copy of the tag list, set the parser
+ state before sending the event (because in 0.9 events are
+ processed immediately), casting fixes.
+
+ * ext/mad/Makefile.am (libgstmad_la_LDFLAGS): Link with
+ gsttagedit.
+
+2005-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/Makefile.am:
+ * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+ (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
+ (gst_multiudpsink_init), (gst_multiudpsink_finalize),
+ (gst_multiudpsink_get_times), (gst_multiudpsink_render),
+ (gst_multiudpsink_set_property), (gst_multiudpsink_init_send),
+ (gst_multiudpsink_add), (client_compare), (free_client),
+ (gst_multiudpsink_remove), (gst_multiudpsink_clear),
+ (gst_multiudpsink_get_stats):
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+ (gst_udpsrc_base_init), (gst_udpsrc_class_init),
+ (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+ (gst_udpsrc_unlock), (gst_udpsrc_stop):
+ Use NetBuffer and small cleanups.
+ Implement client removal in multiudpsink.
+
+2005-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/README:
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+ (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+ (gst_rtspsrc_change_state):
+ * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
+ (rtsp_transport_init), (parse_mode), (parse_range),
+ (rtsp_transport_parse), (rtsp_transport_free):
+ RTSP cleanups.
+
+2005-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/effectv/gstquark.c: (gst_quarktv_chain):
+ * gst/goom/gstgoom.c: (gst_goom_chain):
+ * gst/videobox/Makefile.am:
+ * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+ (gst_video_box_init), (gst_video_box_sink_setcaps),
+ (gst_video_box_chain):
+ * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
+ * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+ (gst_videorate_getcaps), (gst_videorate_setcaps),
+ (gst_videorate_init), (gst_videorate_event), (gst_videorate_chain),
+ (gst_videorate_change_state):
+ Bufferalloc changes.
+
+2005-05-25 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstmad.c: (gst_mad_chain), (gst_mad_change_state):
+ * ext/sidplay/gstsiddec.cc:
+ * gst/alpha/gstalpha.c: (gst_alpha_chain):
+ * gst/goom/gstgoom.c: (gst_goom_chain):
+ No need to take the lock anymore, core already did
+ that before calling us.
+
+2005-05-25 Wim Taymans <wim@fluendo.com>
+
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init),
+ (gst_amrnbenc_finalize), (gst_amrnbenc_chain),
+ (gst_amrnbenc_state_change):
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_query), (gst_amrnbparse_chain),
+ (gst_amrnbparse_read_header), (gst_amrnbparse_loop),
+ (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
+ Core already took the lock.
+
+2005-05-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/esd/Makefile.am:
+ Disable tcp elements and esdmon (they don't compile).
+
+2005-05-19 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * Makefile.am:
+ * ext/Makefile.am:
+ * sys/Makefile.am:
+ Make my automake version shut up about undefined variables
+ * gst/goom/gstgoom.c:
+ GstAdapter moved to base objects.
+
+2005-05-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/amrnb/Makefile.am:
+ * ext/amrnb/amrnb.c: (plugin_init):
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+ (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbenc.c: (gst_amrnbenc_get_type),
+ (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
+ (gst_amrnbenc_init), (gst_amrnbenc_finalize),
+ (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
+ (gst_amrnbenc_state_change):
+ * ext/amrnb/amrnbenc.h:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+ (gst_amrnbparse_query), (gst_amrnbparse_event),
+ (gst_amrnbparse_chain), (gst_amrnbparse_read_header),
+ (gst_amrnbparse_loop), (gst_amrnbparse_sink_activate),
+ (gst_amrnbparse_state_change):
+ * ext/amrnb/amrnbparse.h:
+ Ported AMR decoder/parse.
+ Added AMR encoder.
+
+2005-05-18 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * gst/goom/Makefile.am:
+ * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_sink_setcaps),
+ (gst_goom_src_setcaps), (gst_goom_src_negotiate), (gst_goom_event),
+ (gst_goom_chain), (gst_goom_change_state), (plugin_init):
+ Ported goom.
+ Added goom and alpha to build.
+
+2005-05-17 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * gst/alpha/Makefile.am:
+ * gst/alpha/gstalpha.c: (gst_alpha_class_init), (gst_alpha_init),
+ (gst_alpha_sink_setcaps), (gst_alpha_chain):
+ Ported alpha, remove alphacolor as functionality is in
+ ffmpegcolorspace.
+
+2005-05-17 Wim Taymans <wim@fluendo.com>
+
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_setcaps),
+ (gst_cacasink_render), (gst_cacasink_open), (gst_cacasink_close),
+ (gst_cacasink_change_state):
+ * ext/libcaca/gstcacasink.h:
+ Cleanups.
+
+2005-05-15 David Schleef <ds@schleef.org>
+
+ Move core plugins out of core. I don't mind fdsrc/fdsink
+ going back into the core; they were just disabled there, so
+ I moved them. Some of this stuff could (should) be deleted.
+ * gst/oldcore/Makefile.am:
+ * gst/oldcore/gstaggregator.c:
+ * gst/oldcore/gstaggregator.h:
+ * gst/oldcore/gstelements.c:
+ * gst/oldcore/gstfdsink.c:
+ * gst/oldcore/gstfdsink.h:
+ * gst/oldcore/gstfdsrc.c:
+ * gst/oldcore/gstfdsrc.h:
+ * gst/oldcore/gstmd5sink.c:
+ * gst/oldcore/gstmd5sink.h:
+ * gst/oldcore/gstmultifilesrc.c:
+ * gst/oldcore/gstmultifilesrc.h:
+ * gst/oldcore/gstpipefilter.c:
+ * gst/oldcore/gstpipefilter.h:
+ * gst/oldcore/gstshaper.c:
+ * gst/oldcore/gstshaper.h:
+ * gst/oldcore/gststatistics.c:
+ * gst/oldcore/gststatistics.h:
+
+2005-05-13 Christian Schaller <uraeus@gnome.org>
+
+ * ext/Makefile.am: dist esd directory
+ * gst-plugins.spec.in: add rtp plugins and esd plugin
+ * gst/effectv/Makefile.am: fix videofilter linking
+ * gst/rtp/Makefile.am: add missing headers
+ * gst/rtsp/Makefile.am: add missing headers
+
+2005-05-12 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/sidplay/gstsiddec.cc:
+ Add working plugins to build.
+ Make sidplay compile again.
+
+2005-05-12 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Fix mad and id3tag compilation again.
+
+2005-05-12 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/.cvsignore:
+ * gst/udp/Makefile.am:
+ * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+ (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
+ (gst_multiudpsink_init), (gst_multiudpsink_finalize),
+ (gst_multiudpsink_get_times), (gst_multiudpsink_render),
+ (gst_multiudpsink_set_property), (gst_multiudpsink_get_property),
+ (gst_multiudpsink_init_send), (gst_multiudpsink_close),
+ (gst_multiudpsink_add), (gst_multiudpsink_remove),
+ (gst_multiudpsink_clear), (gst_multiudpsink_get_stats),
+ (gst_multiudpsink_change_state):
+ * gst/udp/gstmultiudpsink.h:
+ * gst/udp/gstudp-marshal.list:
+ * gst/udp/gstudp.c: (plugin_init):
+ * gst/udp/gstudp.h:
+ * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
+ (gst_udpsink_base_init), (gst_udpsink_class_init),
+ (gst_udpsink_init), (gst_udpsink_set_uri),
+ (gst_udpsink_set_property), (gst_udpsink_get_property),
+ (gst_udpsink_uri_get_type), (gst_udpsink_uri_get_protocols),
+ (gst_udpsink_uri_get_uri), (gst_udpsink_uri_set_uri),
+ (gst_udpsink_uri_handler_init):
+ * gst/udp/gstudpsink.h:
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+ (gst_udpsrc_base_init), (gst_udpsrc_class_init),
+ (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+ (gst_udpsrc_unlock), (gst_udpsrc_stop):
+ * gst/udp/gstudpsrc.h:
+ Added multifdsink to send UDP to multiple addresses.
+ Cleaned up UDP source/sink elements some more.
+ Make UDP sink extends from multiudpsink.
+
+2005-05-12 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event):
+ Make queries actually work (update core first).
+
+2005-05-12 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/README:
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get_type),
+ (gst_tcpclientsrc_base_init), (gst_tcpclientsrc_class_init),
+ (gst_tcpclientsrc_init), (gst_tcpclientsrc_getcaps),
+ (gst_tcpclientsrc_stop), (gst_tcpclientsrc_eos),
+ (gst_tcpclientsrc_create), (gst_tcpclientsrc_start):
+ * gst/tcp/gsttcpclientsrc.h:
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get_type),
+ (gst_tcpserversrc_base_init), (gst_tcpserversrc_class_init),
+ (gst_tcpserversrc_init), (gst_tcpserversrc_create),
+ (gst_tcpserversrc_start), (gst_tcpserversrc_stop):
+ * gst/tcp/gsttcpserversrc.h:
+ * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get_type),
+ (gst_tcpsrc_base_init), (gst_tcpsrc_class_init), (gst_tcpsrc_init),
+ (gst_tcpsrc_create), (gst_tcpsrc_start), (gst_tcpsrc_stop):
+ * gst/tcp/gsttcpsrc.h:
+ * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
+ (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
+ (gst_udpsink_set_property), (gst_udpsink_get_property),
+ (gst_udpsink_change_state):
+ * gst/udp/gstudpsink.h:
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+ (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
+ (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+ (gst_udpsrc_stop):
+ * gst/udp/gstudpsrc.h:
+ Make UDP and TCP elements use PushSrc.
+
+
+2005-05-11 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query),
+ (index_seek), (normal_seek), (gst_mad_sink_event):
+ Port to new query API and replace gst_pad_convert()
+ and gst_pad_get_formats() usage. gstid3tag looks like
+ it needs some more love before it will work again, if
+ not a rewrite.
+
+2005-05-12 Zeeshan Ali <zeenix@gmail.com>
+
+ * gst/effectv/Makefile.am:
+ Fixed the effectv build again.
+
+2005-05-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_get_type),
+ (gst_multifdsink_base_init), (gst_multifdsink_class_init),
+ (gst_multifdsink_init), (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_render),
+ (gst_multifdsink_change_state):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
+ (gst_tcpclientsink_base_init), (gst_tcpclientsink_class_init),
+ (gst_tcpclientsink_init), (gst_tcpclientsink_render),
+ (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property),
+ (gst_tcpclientsink_change_state):
+ * gst/tcp/gsttcpclientsink.h:
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+ (gst_tcpclientsrc_init_receive):
+ * gst/tcp/gsttcpplugin.c: (plugin_init):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init):
+ * gst/tcp/gsttcpserversink.h:
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init):
+ * gst/tcp/gsttcpsink.c: (gst_tcpsink_get_type),
+ (gst_tcpsink_base_init), (gst_tcpsink_class_init),
+ (gst_tcpsink_setcaps), (gst_tcpsink_init), (gst_tcpsink_get_times),
+ (gst_tcpsink_render), (gst_tcpsink_set_property),
+ (gst_tcpsink_get_property):
+ * gst/tcp/gsttcpsink.h:
+ * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_class_init), (gst_tcpsrc_get):
+ Ported over some sink elements.
+ Sources not ported yet as they require a PushSource base class.
+
+2005-05-11 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/effectv/Makefile.am:
+ * gst/videofilter/Makefile.am:
+ Turn videofilter into a library (private for now)
+
+2005-05-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/README:
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+ (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play):
+ * gst/rtsp/rtsp.h:
+ * gst/rtsp/rtspconnection.c: (rtsp_connection_create),
+ (rtsp_connection_send), (read_line), (parse_request_line),
+ (parse_line), (read_body), (rtsp_connection_receive),
+ (rtsp_connection_free):
+ * gst/rtsp/rtspconnection.h:
+ * gst/rtsp/rtspdefs.c: (rtsp_find_method):
+ * gst/rtsp/rtspdefs.h:
+ * gst/rtsp/rtspmessage.c: (rtsp_message_set_body),
+ (rtsp_message_take_body):
+ * gst/rtsp/rtspmessage.h:
+ * gst/rtsp/rtspstream.h:
+ * gst/rtsp/sdpmessage.c: (sdp_parse_line):
+ Added README
+ Some cleanups.
+
+2005-05-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_init),
+ (gst_rtspsrc_create_stream), (gst_rtspsrc_add_element),
+ (gst_rtspsrc_set_state), (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_close),
+ (gst_rtspsrc_play), (gst_rtspsrc_change_state):
+ * gst/rtsp/gstrtspsrc.h:
+ Setup UDP sources correctly, receives raw data from RTSP
+ compliant servers now.
+
+2005-05-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtsp/.cvsignore:
+ * gst/rtsp/Makefile.am:
+ * gst/rtsp/gstrtsp.c: (plugin_init):
+ * gst/rtsp/gstrtsp.h:
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_get_type), (gst_rtspsrc_base_init),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_init),
+ (gst_rtspsrc_set_property), (gst_rtspsrc_get_property),
+ (gst_rtspsrc_create_stream), (rtspsrc_add_element),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_send), (gst_rtspsrc_open),
+ (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
+ (gst_rtspsrc_activate), (gst_rtspsrc_change_state):
+ * gst/rtsp/gstrtspsrc.h:
+ * gst/rtsp/rtsp.h:
+ * gst/rtsp/rtspconnection.c: (rtsp_connection_open),
+ (rtsp_connection_create), (append_header), (rtsp_connection_send),
+ (read_line), (read_string), (read_key), (parse_response_status),
+ (parse_line), (read_body), (rtsp_connection_receive),
+ (rtsp_connection_close):
+ * gst/rtsp/rtspconnection.h:
+ * gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_method_as_text),
+ (rtsp_header_as_text), (rtsp_status_as_text),
+ (rtsp_status_to_string), (rtsp_find_header_field):
+ * gst/rtsp/rtspdefs.h:
+ * gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
+ (rtsp_message_init_request), (rtsp_message_new_response),
+ (rtsp_message_init_response), (rtsp_message_init_data),
+ (rtsp_message_add_header), (rtsp_message_remove_header),
+ (rtsp_message_get_header), (rtsp_message_get_header_copy),
+ (rtsp_message_set_body), (rtsp_message_set_body_copy),
+ (rtsp_message_get_body), (rtsp_message_get_body_copy), (dump_mem),
+ (dump_key_value), (rtsp_message_dump):
+ * gst/rtsp/rtspmessage.h:
+ * gst/rtsp/rtspstream.h:
+ * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
+ (rtsp_transport_init), (parse_mode), (parse_range),
+ (rtsp_transport_parse), (rtsp_transport_free):
+ * gst/rtsp/rtsptransport.h:
+ * gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_free):
+ * gst/rtsp/rtspurl.h:
+ * gst/rtsp/sdp.h:
+ * gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
+ (sdp_message_clean), (sdp_message_free), (sdp_media_new),
+ (sdp_media_init), (sdp_message_set_origin),
+ (sdp_message_get_origin), (sdp_message_set_connection),
+ (sdp_message_get_connection), (sdp_message_add_bandwidth),
+ (sdp_message_add_time), (sdp_message_add_zone),
+ (sdp_message_set_key), (sdp_message_get_key),
+ (sdp_message_get_attribute_val), (sdp_message_add_attribute),
+ (sdp_message_add_media), (sdp_media_add_attribute),
+ (sdp_media_add_bandwidth), (sdp_media_add_format),
+ (sdp_media_get_attribute_val), (read_string), (read_string_del),
+ (sdp_parse_line), (sdp_message_parse_buffer), (print_media),
+ (sdp_message_dump):
+ * gst/rtsp/sdpmessage.h:
+ * gst/rtsp/test.c: (main):
+ Ported to 0.9.
+ Set up transports, init UDP ports, init RTP session managers.
+
+2005-05-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/rtp/Makefile.am:
+ * gst/rtp/gstrtp.c: (plugin_init):
+ * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
+ (gst_rtpdec_class_init), (gst_rtpdec_init), (gst_rtpdec_chain_rtp),
+ (gst_rtpdec_chain_rtcp), (gst_rtpdec_set_property),
+ (gst_rtpdec_get_property), (gst_rtpdec_change_state),
+ (gst_rtpdec_plugin_init):
+ * gst/rtp/gstrtpdec.h:
+ * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
+ (gst_udpsink_get_times), (gst_udpsink_render),
+ (gst_udpsink_change_state):
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+ (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
+ (gst_udpsrc_loop), (gst_udpsrc_set_uri), (gst_udpsrc_set_property),
+ (gst_udpsrc_get_property), (gst_udpsrc_init_receive),
+ (gst_udpsrc_activate), (gst_udpsrc_change_state),
+ (gst_udpsrc_uri_get_type), (gst_udpsrc_uri_get_protocols),
+ (gst_udpsrc_uri_get_uri), (gst_udpsrc_uri_set_uri),
+ (gst_udpsrc_uri_handler_init):
+ * gst/udp/gstudpsrc.h:
+ UDP fixes, added uri handler.
+ Added rtpdec that will manage the RTP session in the future.
+
+2005-05-10 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * PORTED_09:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/esd/Makefile.am:
+ * ext/esd/esdsink.c: (gst_esdsink_get_type),
+ (gst_esdsink_class_init), (gst_esdsink_init),
+ (gst_esdsink_dispose), (gst_esdsink_change_state),
+ (gst_caps_set_each), (gst_esdsink_getcaps), (gst_esdsink_open),
+ (gst_esdsink_close), (gst_esdsink_write), (gst_esdsink_delay),
+ (gst_esdsink_reset), (gst_esdsink_set_property),
+ (gst_esdsink_get_property), (gst_esdsink_factory_init):
+ * ext/esd/esdsink.h:
+ * ext/esd/gstesd.c: (plugin_init):
+ Ported esdsink plugin
+
+2005-05-10 Wim Taymans <wim@fluendo.com>
+
+ * gst/udp/Makefile.am:
+ * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
+ (gst_udpsink_base_init), (gst_udpsink_class_init),
+ (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
+ (gst_udpsink_set_property), (gst_udpsink_get_property),
+ (gst_udpsink_init_send), (gst_udpsink_close),
+ (gst_udpsink_change_state):
+ * gst/udp/gstudpsink.h:
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_base_init),
+ (gst_udpsrc_class_init), (gst_udpsrc_init), (gst_udpsrc_loop),
+ (gst_udpsrc_set_property), (gst_udpsrc_get_property),
+ (gst_udpsrc_init_receive), (gst_udpsrc_close),
+ (gst_udpsrc_activate), (gst_udpsrc_change_state):
+ * gst/udp/gstudpsrc.h:
+ Ported udp src/sink.
+
+2005-05-09 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * PORTED_09:
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/shout2/Makefile.am:
+ * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
+ (gst_shout2send_base_init), (gst_shout2send_class_init),
+ (gst_shout2send_init), (gst_shout2send_event),
+ (gst_shout2send_render), (gst_shout2send_set_property),
+ (gst_shout2send_get_property), (gst_shout2send_setcaps),
+ (gst_shout2send_change_state):
+ * ext/shout2/gstshout2.h:
+
+ Port shout2 plugin
+
+2005-05-08 Zeeshan Ali <zeenix@gmail.com>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/libcaca/Makefile.am:
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
+ (gst_cacasink_class_init), (gst_cacasink_get_times),
+ (gst_cacasink_setcaps), (gst_cacasink_init), (gst_cacasink_render),
+ (plugin_init):
+ * ext/libcaca/gstcacasink.h:
+ Ported the libcaca plugin.
+
+2005-05-08 Zeeshan Ali <zeenix@gmail.com>
+
+ * configure.ac:
+ * ext/mad/Makefile.am:
+ * effectv/Makefile.am:
+ Fixed a few things to enable the mad and effectv to be able to find the
+ headers in the gst-plugins-base/gst-libs and to link against the libs
+ in there.
+
+2005-05-07 Zeeshan Ali <zeenix@gmail.com>
+
+ * configure.ac:
+ Fixed the build by fixing a small mistake of Wim.
+
+2005-05-06 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/aalib/Makefile.am:
+ * ext/aalib/gstaasink.c: (gst_aasink_get_type),
+ (gst_aasink_class_init), (gst_aasink_fixate), (gst_aasink_setcaps),
+ (gst_aasink_init), (gst_aasink_get_times), (gst_aasink_render),
+ (gst_aasink_set_property), (gst_aasink_get_property),
+ (gst_aasink_open), (gst_aasink_close), (gst_aasink_change_state):
+ * ext/aalib/gstaasink.h:
+ * gst/smpte/Makefile.am:
+ * gst/smpte/gstsmpte.c: (gst_smpte_setcaps), (gst_smpte_init),
+ (gst_smpte_collected):
+ * gst/smpte/gstsmpte.h:
+ Ported 2 more plugins. usgly hack in the Makefile.am though, I'm
+ sure someone will fix it.
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * configure.ac: add sidplay
+ * ext/Makefile.am: add sidplay
+ * ext/sidplay/Makefile.am: add GST_PLUGINS_CFLAGS
+ * ext/sidplay/gstsiddec.cc: remove bytestream.h
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * configure.ac: add gst-plugins-libs
+
+2005-05-06 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sidplay/gstsiddec.h:
+ Ported sidplay.
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * configure.ac:
+ * ext/mad/Makefile.am: add linking of gstinterfaces
+ * ext/mad/gstid3tag.c: (plugin_init): remove library_load
+ * gst-plugins.spec.in:
+ * gst/effectv/Makefile.am: link to libgstvideofilter
+ * gst/effectv/gsteffectv.c: (plugin_init): same as for mad
+ * gst/videofilter/Makefile.am: make sure videoflip is not built
+
+2005-05-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_setcaps),
+ (gst_alawdec_init), (gst_alawdec_chain):
+ * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_setcaps),
+ (gst_alawenc_init), (gst_alawenc_chain):
+ * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_setcaps),
+ (gst_mulawdec_init), (gst_mulawdec_chain):
+ * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_setcaps),
+ (gst_mulawenc_init), (gst_mulawenc_chain):
+ Ported alaw and mulaw plugins to 0.9, fixed the negotiation as
+ well.
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * ext/alsa: removed plugins that are now in gst-plugins-base
+ * ext/gnomevfs:
+ * ext/theora:
+ * ext/vorbis:
+ * gst/adder:
+ * gst/audioconvert:
+ * gst/ffmpegcolorspace:
+ * gst/typefind:
+ * gst/videofilter: comment out videoflip and gamma plugins
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * gst-libs: Remove all files as this is in gst-plugins-base now
+ * gst-libs/README: add a remove informing of this move
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * PORTED_09: update to add videofilter
+ * configure.ac: re-add videofilter
+ * gst/videofilter/Makefile.am: remove videobalance (not ported yet)
+ * gst/videofilter/gstgamma.c: (gst_gamma_class_init):
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init):
+ * gst/videofilter/gstvideofilter.c: (gst_videofilter_getcaps),
+ (gst_videofilter_setcaps), (gst_videofilter_init),
+ (gst_videofilter_chain), (gst_videofilter_set_output_size):
+ * gst/videofilter/gstvideoflip.c: (gst_videoflip_class_init):
+
+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * ext/mad: ported plugin from threaded branch
+ * gst/effectv: ported plugins from threaded branch
+ * gst/law: enable law plugin as it compiles (Wim will fixor)
+
+2005-05-06 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ fix typo
+
+2005-05-05 Christian Schaller <uraeus@gnome.org>
+
+ * Update configure.ac and Makefiles to only build what is actually
+ ported and not moved into gst-plugins-base
+
+2005-02-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ hunting season on 0.9 is now OPEN
+
+2005-02-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+ Kick the hell out of gcc for not warning me about a symbol conflict.
+
+2005-02-22 Luca Ognibene <luogni@tin.it>
+
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link):
+ Don't leak caps string (fixes #168134)
+
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init),
+ (gst_jpegenc_init), (gst_jpegenc_finalize),
+ (gst_jpegenc_change_state):
+ Don't leak line buffers and context struct (fixes #168133).
+
+2005-02-21 Tim-Philipp Müller <tim at centricular dot net>
+
+ * configure.ac:
+ * ext/dirac/gstdiracdec.cc:
+ (gst_diracdec_chain):
+ Since dirac 0.5.0 the framerate in dirac is expressed as a
+ rational number. Fix build and up requirement to 0.5.0, and
+ also pass parameters to gst_diracdec_link in the right order
+ (fixes #167959).
+
+2005-02-21 Maciej Katafiasz <mathrick@freedesktop.org>
+
+ * ext/faad/gstfaad.c: (gst_faad_sinkconnect), (gst_faad_chain):
+ * ext/faad/gstfaad.h:
+ TEH LONGEST DEBUGGING SESSION EVAR is over. Fix interaction with
+ certain invalid muxed streams, where some packets will contain
+ junk after decoder data. Partially fixes #149158.
+
+2005-02-21 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
+ Make sure we only write to writable buffers
+
+2005-02-20 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data):
+ Do actually fix invalid RIFF fmt header values for alaw
+ and mulaw audio instead of just saying so.
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+ Give gst_riff_create_audio_caps_with_data() a chance to
+ fix up broken format header fields before extracting any
+ parameters from the header. (fixes #167633)
+
+2005-02-19 Martin Holters <martin.holters@gmx.de>
+
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/audioconvert/bufferframesconvert.c:
+ (buffer_frames_convert_link):
+ Don't leak othercaps. (fixes #167878)
+
+2005-02-19 Arwed v. Merkatz <v.merkatz@gmx.net>>
+
+ * configure.ac:
+ * ext/libvisual/visual.c: (gst_visual_srclink),
+ (gst_visual_change_state):
+ Support libvisual 0.2.0.
+
+2005-02-18 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_chain):
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_resync), (gst_jpegenc_chain):
+ Use same rowstrides for I420 as used everywhere else.
+
+2005-02-17 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_invert):
+ Declare variables at beginning of block and make gcc-2.95 happy
+ (fixes # 167482, patch by Gergely Nagy).
+
+ * gst/tcp/gsttcpclientsrc.c:
+ * gst/tcp/gsttcpclientsrc.h:
+ Move some includes into the header, so that struct sockaddr_in is
+ defined when it should be defined on FreeBSD as well (fixes
+ #167483).
+
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
+ Don't pass uninitialised values to setsockopt() here either.
+
+2005-02-17 Luca Ognibene <luogni at tin dot it>
+
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send):
+ Don't pass uninitialised values to setsockopt(). (fixes #167704)
+
+2005-02-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (add_sink):
+ Invert bin_add/link order to workaround deadlock in opt.
+
+2005-02-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/modplug/gstmodplug.cc:
+ Add missing break causing position queries to fail.
+
+2005-02-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate):
+ Granpos can apparently be -1, which screws up calculations...
+
+2005-02-16 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+ (gst_ximagesink_send_pending_navigation),
+ (gst_ximagesink_navigation_send_event), (gst_ximagesink_finalize),
+ (gst_ximagesink_init):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+ (gst_xvimagesink_send_pending_navigation),
+ (gst_xvimagesink_navigation_send_event),
+ (gst_xvimagesink_finalize), (gst_xvimagesink_init):
+ * sys/xvimage/xvimagesink.h:
+ Use a mutex protected list to marshal navigation
+ events into the stream thread from whichever thread
+ sends them.
+
+2005-02-15 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/speed/demo-mp3.c: (time_tick_cb), (main):
+ Display current position and track length; misc. clean-ups.
+
+ * gst/speed/gstspeed.c: (speed_get_query_types), (speed_src_query),
+ (speed_init), (speed_chain):
+ Add query function, so that the stream length and current position
+ get adjusted when queried (note that current position queries may
+ still be wrong if the audio sink returns values based on buffer
+ timestamps instead of passing on the query).
+
+2005-02-13 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+ (gst_audio_convert_channels):
+ create channel conversion matrix when linking
+ * gst/audioconvert/.cvsignore:
+ * gst/audioconvert/Makefile.am:
+ * gst/audioconvert/channelmixtest.c: (main):
+ add (ugly) test that ensures stereo <=> mono conversion works
+ correctly
+
+2005-02-13 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstchannelmix.h:
+ include missing header file
+ * gst/audioconvert/gstchannelmix.c:
+ (gst_audio_convert_fill_compatible):
+ use same sign for both channels when converting to/from compatible
+ channel. Previously used different signs made the signals cancel
+ each other out and appear like silence. (fixes #167269)
+
+2005-02-12 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/imgconvert.c:
+ Convert to and from YV12 (fixes #156379).
+
+2005-02-12 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+ (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
+ (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
+ (gst_ximagesink_expose), (gst_ximagesink_set_property),
+ (gst_ximagesink_finalize), (gst_ximagesink_init): Protect interface
+ methods from chain and negotiation and vice versa (Fixes #166142).
+ * sys/ximage/ximagesink.h: Add stream_lock.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+ (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
+ (gst_xvimagesink_expose): Check for xcontext before trying to link.
+
+2005-02-12 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_open):
+ Don't send "Hey! You gave me a NULL pointer you naughty person" as
+ error message when we can't open the DVD device (when dvdnav_open()
+ fails, src->dvdnav is NULL, so dvdnav_err_to_string() will return
+ the above). Send something more useful instead (fixes #167117).
+
+2005-02-11 Julien MOUTTE <julien@moutte.net>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
+ (gst_xvimagesink_sink_link), (gst_xvimagesink_change_state),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+ (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
+ (gst_xvimagesink_expose), (gst_xvimagesink_set_property),
+ (gst_xvimagesink_finalize), (gst_xvimagesink_init): Protect interface
+ methods from chain and negotiation and vice versa (Fixes #166142).
+ Fix a possible bug of images in the buffer pool being discarded because
+ we are looking at the wrong geometry.
+ * sys/xvimage/xvimagesink.h: Add stream_lock.
+
+2005-02-11 David Schleef <ds@schleef.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer): Change uint to
+ unsigned int. (fixes #167128)
+
+2005-02-11 David Schleef <ds@schleef.org>
+
+ * gst/librfb/Makefile.am: Testing stuff before committing is
+ for wimps... and people with fast machines. Fix stupid
+ mistake.
+
+2005-02-11 David Schleef <ds@schleef.org>
+
+ * configure.ac: Pull in librfb from my CVS tree, because it is
+ too small and annoying to be separate. Move rfbsrc plugin
+ to gst/.
+ * ext/Makefile.am:
+ * ext/librfb/Makefile.am:
+ * ext/librfb/gstrfbsrc.c:
+ * gst/librfb/Makefile.am:
+ * gst/librfb/gstrfbsrc.c:
+ * gst/librfb/rfb.c:
+ * gst/librfb/rfb.h:
+ * gst/librfb/rfbbuffer.c:
+ * gst/librfb/rfbbuffer.h:
+ * gst/librfb/rfbbytestream.c:
+ * gst/librfb/rfbbytestream.h:
+ * gst/librfb/rfbcontext.h:
+ * gst/librfb/rfbdecoder.c:
+ * gst/librfb/rfbdecoder.h:
+ * gst/librfb/rfbutil.h:
+
+2005-02-10 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/speed/Makefile.am:
+ * gst/speed/demo-mp3.c: (main):
+ * gst/speed/filter.func:
+ * gst/speed/gstspeed.c: (speed_link), (speed_parse_caps),
+ (speed_class_init), (speed_init), (speed_chain_int16),
+ (speed_chain_float32), (speed_chain), (speed_set_property),
+ (speed_get_property), (speed_change_state):
+ * gst/speed/gstspeed.h:
+ Fix speed element and make it chain-based (fixes #156467),
+ and make it handle more than one channel.
+
+2005-02-10 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_init), (gst_dtsdec_channels),
+ (gst_dtsdec_handle_event), (gst_dtsdec_handle_frame),
+ (gst_dtsdec_chain), (gst_dtsdec_change_state):
+ * ext/dts/gstdtsdec.h:
+ Don't clobber the stack constructing the channels array.
+ Make the element chain-based. DTS tracks can now be played.
+
+2005-02-09 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst-libs/gst/audio/multichannel.h:
+ * gst-libs/gst/gconf/gconf.h:
+ * gst-libs/gst/idct/idct.h:
+ * gst-libs/gst/media-info/media-info-priv.h:
+ * gst-libs/gst/play/play.h:
+ * gst-libs/gst/resample/private.h:
+ * gst-libs/gst/resample/resample.h:
+ * gst-libs/gst/riff/riff-ids.h:
+ * gst-libs/gst/video/video.h:
+ * gst-libs/gst/video/videosink.h:
+ Add G_BEGIN_DECLS and G_END_DECLS around headers where
+ missing, so that they work when included from C++ code.
+
+2005-02-09 David Schleef <ds@schleef.org>
+
+ * testsuite/gst-lint: Check for non-statically scoped
+ parent_class variables. This won't be a problem once
+ plugins are loaded with RTLD_LOCAL.
+
+2005-02-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mplex/gstmplexibitstream.cc:
+ gcc madness.
+
+2005-02-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstogmparse.c:
+ * gst/debug/gstnavigationtest.c:
+ Die, thou faulty symbol pollutors (non-static parent_class).
+
+2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mplex/gstmplexibitstream.cc:
+ Fix event handling (#165525).
+
+2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mikmod/gstmikmod.c:
+ * gst/modplug/gstmodplug.cc:
+ Add missing endianness to template (fixes #165509).
+
+2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
+ Fix wrong order of reading of optional bytes (#165290).
+
+2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ Implement FILLER event awareness.
+
+2005-02-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_convert):
+ Fix track calculations (#166208).
+
+2005-02-08 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/libpng/gstpngdec.c: (gst_pngdec_init), (gst_pngdec_chain):
+ * ext/libpng/gstpngenc.c:
+ Fix byte-order, use proper fixed caps. Fixes #164197.
+
+2005-02-08 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * configure.ac:
+ Add dvdlpcmdec
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
+ (free_all_buffers), (gst_mpeg2dec_alloc_buffer):
+ Don't push buffers if the src pad isn't negotiated yet.
+
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_buffer_to_default_format),
+ (gst_audio_convert_buffer_from_default_format):
+ Add support for 24-bit width.
+
+ * gst/dvdlpcmdec/.cvsignore:
+ * gst/dvdlpcmdec/Makefile.am:
+ * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_get_type),
+ (gst_dvdlpcmdec_base_init), (gst_dvdlpcmdec_class_init),
+ (gst_dvdlpcm_reset), (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link),
+ (gst_dvdlpcmdec_chain), (gst_dvdlpcmdec_change_state),
+ (plugin_init):
+ * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+ New decoder for rearranging DVD LPCM into our audio/x-raw-int
+ format. Needs support for the channels maps if someone can find
+ a DVD LPCM track with > 2 channels.
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_handle_dvd_event),
+ (gst_dvd_demux_send_discont), (gst_dvd_demux_handle_discont),
+ (gst_dvd_demux_get_audio_stream), (gst_dvd_demux_process_private):
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
+ (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_init_stream),
+ (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_handle_src_query):
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_reset),
+ (gst_mpeg_parse_parse_packhead), (gst_mpeg_parse_loop),
+ (gst_mpeg_parse_get_rate), (gst_mpeg_parse_convert_src),
+ (gst_mpeg_parse_handle_src_query),
+ (gst_mpeg_parse_handle_src_event):
+ Use audio/x-dvd-lpcm for LPCM output.
+ Add DTS output.
+
+2005-02-08 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/alpha/gstalphacolor.c: (gst_alpha_color_sink_link),
+ (transform_rgb), (transform_bgr), (gst_alpha_color_chain):
+ Add BGRA handling (#165736).
+
+2005-02-08 Francis Labonte <francis_labonte@hotmail.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/law/alaw-decode.c: (alawdec_link):
+ * gst/law/alaw-encode.c: (alawenc_link):
+ * gst/law/mulaw-decode.c: (mulawdec_link):
+ * gst/law/mulaw-encode.c: (mulawenc_link):
+ Fix caps memleaks (#166600).
+
+2005-02-08 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/tarkin/mem.h:
+ * ext/tarkin/wavelet.h:
+ * ext/tarkin/yuv.h:
+ * gst/ffmpegcolorspace/avcodec.h:
+ Include "_stdint.h" instead of <stdint.h>. Fixes build on
+ systems that don't have stdint.h, like Solaris9 (fixes #166631).
+
+2005-02-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_change_state):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_clear),
+ (gst_xvimagesink_change_state):
+ Clear window on PAUSED->READY instead of READY->PAUSED. Stop
+ Xv video (and thereby regenerate Xv colourkey) in clear() so
+ that PLAY -> READY -> PLAY works (fixes #162504).
+
+2005-02-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_getcaps):
+ Switch to list instead of range, since MJPEG-devices really just
+ support decimations, not any size.
+
+2005-02-05 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_open_decoder),
+ (gst_mpeg2dec_reset), (free_all_buffers),
+ (gst_mpeg2dec_alloc_buffer), (handle_sequence):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ The libmpeg2 user-allocated buffer management is awkward,
+ to say the least. Hopefully this fixes things.
+
+2005-02-04 Andy Wingo <wingo@pobox.com>
+
+ * gst/audioconvert/bufferframesconvert.c
+ (buffer_frames_convert_fixate): New function, fixates to 256
+ frames per buffer by default. (Much better than 1.)
+ (buffer_frames_convert_init): Set the fixate function for both src
+ and sink pad.
+ (buffer_frames_convert_link): After success setting nonfixed caps,
+ get the negotiated caps so we can know how many buffer-frames it
+ will be. No idea how this worked at all before.
+
+2005-02-05 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+ (gst_mpeg2dec_close_decoder), (put_buffer), (check_buffer),
+ (free_buffer), (free_all_buffers), (gst_mpeg2dec_alloc_buffer),
+ (handle_sequence), (handle_picture):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Rearrange buffer tracking and refcounting and refactor
+ a little for readability.
+
+2005-02-04 Jan Schmidt <thaytan@mad.scientist.com>
+ * sys/v4l/gstv4l.c: (plugin_init):
+ * sys/v4l/gstv4ljpegsrc.c: (gst_v4ljpegsrc_get_type),
+ (gst_v4ljpegsrc_base_init), (gst_v4ljpegsrc_class_init),
+ (gst_v4ljpegsrc_init), (gst_v4ljpegsrc_src_link),
+ (gst_v4ljpegsrc_getcaps), (gst_v4ljpegsrc_get):
+ * sys/v4l/gstv4ljpegsrc.h:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_open), (gst_v4lsrc_src_link):
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_palette_name),
+ (gst_v4lsrc_get_fps):
+ * sys/v4l/v4lsrc_calls.h:
+ Add new v4ljpegsrc for handling the ov51x hacky "I'll give
+ you jpeg inside rgb frames" driver.
+ Don't error in the v4lsrc link function, just return
+ REFUSED.
+
+2005-02-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_change_state),
+ (gst_qcamsrc_open):
+ Use GST_ELEMENT_ERROR, not g_warning, if open failed.
+
+2005-02-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
+ Change caps on MJPEG-B so it doesn't interfere with MJPEG/JPEG.
+
+2005-02-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_change_state):
+ Reset negotiated state on PAUSED->READY.
+
+2005-02-02 David Schleef <ds@schleef.org>
+
+ * configure.ac: Put DEFAULT_AUDIOSINK in config.h and use
+ whereever possible. (Fixes #165997)
+ * examples/capsfilter/capsfilter1.c: (main):
+ * examples/dynparams/filter.c: (create_ui):
+ * examples/seeking/cdparanoia.c: (get_track_info), (main):
+ * examples/seeking/chained.c: (main):
+ * examples/seeking/seek.c: (make_mod_pipeline), (make_dv_pipeline),
+ (make_wav_pipeline), (make_flac_pipeline), (make_sid_pipeline),
+ (make_vorbis_pipeline), (make_mp3_pipeline), (make_avi_pipeline),
+ (make_mpeg_pipeline), (make_mpegnt_pipeline):
+ * examples/seeking/spider_seek.c: (make_spider_pipeline):
+ * examples/switch/switcher.c: (main):
+ * ext/dv/demo-play.c: (main):
+ * ext/faad/gstfaad.c: (gst_faad_change_state):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ * ext/smoothwave/demo-osssrc.c: (main):
+ * gst-libs/gst/gconf/gconf.c: (gst_gconf_set_string),
+ (gst_gconf_render_bin_from_description),
+ (gst_gconf_get_default_audio_sink),
+ (gst_gconf_get_default_video_sink),
+ (gst_gconf_get_default_audio_src),
+ (gst_gconf_get_default_video_src),
+ (gst_gconf_get_default_visualization_element):
+ * gst/level/demo.c: (main):
+ * gst/level/plot.c: (main):
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element):
+ * gst/playback/test.c: (gen_video_element), (gen_audio_element):
+ * gst/playondemand/demo-mp3.c: (setup_pipeline):
+ * gst/sine/demo-dparams.c: (main):
+ * gst/spectrum/demo-osssrc.c: (main):
+ * gst/speed/demo-mp3.c: (main):
+ * gst/volume/demo.c: (main):
+ * testsuite/embed/embed.c: (main):
+
+2005-02-02 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_class_init),
+ (gst_tcpclientsink_finalize):
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+ (gst_tcpclientsrc_finalize):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+ (gst_tcpserversink_init), (gst_tcpserversink_finalize):
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
+ (gst_tcpserversrc_init), (gst_tcpserversrc_finalize):
+ Don't leak the hostname when shutting down.
+ In tcpserversrc, take a copy of the default hostname.
+
+2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_iso_receive):
+ Set caps to systemstream=TRUE.
+
+2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * testsuite/Makefile.am:
+ Fix more OSX buildbots.
+
+2005-02-02 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Don't send things to NULL PAD_PEERs
+
+ * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_chain):
+ Copy-on-write the incoming buffer.
+
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegclock.h:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+ (normal_seek), (gst_mpeg_demux_handle_src_event):
+ * gst/mpegstream/gstmpegdemux.h:
+ * gst/mpegstream/gstmpegpacketize.h:
+ * gst/mpegstream/gstmpegparse.c:
+ (gst_mpeg_parse_update_streaminfo), (gst_mpeg_parse_reset),
+ (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead),
+ (gst_mpeg_parse_loop), (gst_mpeg_parse_get_rate),
+ (gst_mpeg_parse_convert_src), (gst_mpeg_parse_handle_src_query),
+ (gst_mpeg_parse_handle_src_event), (gst_mpeg_parse_change_state):
+ * gst/mpegstream/gstmpegparse.h:
+ * gst/mpegstream/gstrfc2250enc.h:
+ Various changes to the way time is computed that make seeking and
+ total time estimation much better here.
+ Use G_BEGIN/END_DECLS instead of __cplusplus
+
+ * gst/videocrop/gstvideocrop.c: (gst_video_crop_chain):
+ Use gst_buffer_stamp instead of only copying the TIMESTAMP
+
+2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/subparse/gstsubparse.c:
+ Fix OSX buildbot.
+
+2005-01-31 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/theora/theoraenc.c: (theora_buffer_from_packet),
+ (theora_enc_chain), (theora_enc_change_state):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
+ (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_chain),
+ (gst_vorbisenc_change_state):
+ * ext/vorbis/vorbisenc.h:
+ Set granulepos and timestamp correctly for streams not
+ starting at 0, taking into account the initial delay.
+
+2005-01-31 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/mpegstream/gstdvddemux.c:
+ Add audio/x-dts to audio pad template caps
+
+2005-01-30 David Schleef <ds@schleef.org>
+
+ * ext/polyp/polypsink.c: (gst_polypsink_base_init),
+ (create_context), (gst_polypsink_link): Fix silly endianness
+ bug. Add some debugging. Remove float from caps; it doesn't
+ work. Attempt to get remote audio working.
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
+ Add 3IV2 fourcc.
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream), (swap_line),
+ (gst_avi_demux_invert), (gst_avi_demux_process_next_entry),
+ (gst_avi_demux_stream_data):
+ * gst/avi/gstavidemux.h:
+ Invert DIB images. Fixes #132341.
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_chain):
+ D'oh, reference the palette data, not the palette structure.
+ Fixes color distortion in #132341.
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
+ PAR can be non-fixed when not provided as argument (#162626).
+
+2005-01-29 David Moore <dcm@acm.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_loop_header):
+ Re-apply patch from #142272 that allows non-seekable sources,
+ re-proposed by Daniel Drake <dsd@gentoo.org>.
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/rtp/gstrtpgsmenc.c: (gst_rtpgsmenc_init):
+ Use the src template for creating the src pad (#162330).
+
+2005-01-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/musepack/Makefile.am:
+ * ext/musepack/gstmusepackdec.c: (gst_musepackdec_class_init),
+ (gst_musepackdec_init), (gst_musepackdec_dispose),
+ (gst_musepackdec_src_query), (gst_musepackdec_src_convert),
+ (gst_musepack_stream_init), (gst_musepackdec_loop),
+ (gst_musepackdec_change_state):
+ * ext/musepack/gstmusepackdec.cpp:
+ * ext/musepack/gstmusepackdec.h:
+ * ext/musepack/gstmusepackreader.c: (gst_musepack_reader_peek),
+ (gst_musepack_reader_read), (gst_musepack_reader_seek),
+ (gst_musepack_reader_tell), (gst_musepack_reader_get_size),
+ (gst_musepack_reader_canseek), (gst_musepack_init_reader):
+ * ext/musepack/gstmusepackreader.cpp:
+ * ext/musepack/gstmusepackreader.h:
+ Update to 1.1 API (#165446).
+
+2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/Makefile.am:
+ Unbreak buildbot.
+
+2005-01-28 Andy Wingo <wingo@pobox.com>
+
+ * ext/dv/gstdvdec.c: Change the pixel aspect ratio of dvdec output
+ to reflect a different dubious internet source. Add a reference
+ and some commentary.
+
+2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gststreamselector.c: (gst_stream_selector_init),
+ (gst_stream_selector_get_caps), (gst_stream_selector_chain):
+ * gst/playback/gststreamselector.h:
+ Be more selective when we're redoing caps negotiation from
+ within the chain function on a stream change.
+
+2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/amrnb/Makefile.am:
+ * ext/amrnb/amrnb.c: (plugin_init):
+ * ext/amrnb/amrnbdec.c: (gst_amrnbdec_get_type),
+ (gst_amrnbdec_base_init), (gst_amrnbdec_class_init),
+ (gst_amrnbdec_init), (gst_amrnbdec_link), (gst_amrnbdec_chain),
+ (gst_amrnbdec_state_change):
+ * ext/amrnb/amrnbdec.h:
+ * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
+ (gst_amrnbparse_base_init), (gst_amrnbparse_class_init),
+ (gst_amrnbparse_init), (gst_amrnbparse_formats),
+ (gst_amrnbparse_querytypes), (gst_amrnbparse_query),
+ (gst_amrnbparse_handle_event), (gst_amrnbparse_reserve),
+ (gst_amrnbparse_loop), (gst_amrnbparse_state_change):
+ * ext/amrnb/amrnbparse.h:
+ Add support for AMR-NB (mobile phone audio format; #155163, #163286).
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+ Add AMR-NB/-WB raw formats.
+ * ext/alsa/gstalsa.c: (gst_alsa_link):
+ Keep valid time when changing format.
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (qtdemux_parse_trak):
+ Add some more format-specific options (#140141, #143555, #155163).
+
+2005-01-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_blockgroup):
+ Fix logic error in timing of subtitle stream synchronization.
+ * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+ Add skip-chunk, which is found in kodak-camera streams.
+
+2005-01-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/vi.po:
+ Adding Vietnamese translation (submitted by Clytie Siddall)
+
+2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstdecodebin.c: (try_to_link_1):
+ Use realpad for signal.
+
+2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_base_init):
+ Fix category so decodebin picks it up.
+
+2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/Makefile.am:
+ * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_get_type),
+ (gst_id3demux_bin_base_init), (gst_id3demux_bin_class_init),
+ (gst_id3demux_bin_init), (gst_id3demux_bin_remove_pad),
+ (found_type), (gst_id3demux_bin_change_state):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
+ (gst_id3_tag_init), (gst_id3_tag_handle_event),
+ (gst_id3_tag_src_link), (gst_id3_tag_chain),
+ (gst_id3_tag_change_state), (plugin_init):
+ * ext/mad/gstmad.h:
+ Add id3demuxbin (which is a simple bin consisting of id3demux
+ and typefind), take over rank from id3demux, remove typefind
+ code from id3demux. Makes all broken mp3s that I know of work,
+ and thereby fixes #152688.
+
+2005-01-27 Edward Hervey <bilboed@bilboed.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_src_event):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
+ Allow seeks on audio pad, make mad forward those (#164826).
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+ Set duration (#165335).
+
+2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+ (gst_asf_demux_commit_taglist), (gst_asf_demux_process_comment),
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_change_state), (gst_asf_demux_add_audio_stream),
+ (gst_asf_demux_add_video_stream), (gst_asf_demux_setup_pad):
+ * gst/asfdemux/gstasfdemux.h:
+ Improve metadata display, e.g. if the metadata comes before the
+ streams are loaded (which is perfectly valid).
+
+2005-01-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * tools/gst-launch-ext-m.m:
+ Fix AVI/ASF pipelines (#165340).
+
+2005-01-26 Amaury Jacquot <sxpert@esitcom.org>
+ * ext/cairo/gsttextoverlay.c: include string.h and strings.h to fix
+ build failure on amd64
+
+2005-01-26 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/mad/gstid3tag.c: (mad_id3_parse_latin1_string),
+ (mad_id3_parse_comment_frame), (gst_mad_id3_to_tag_list):
+ Check environment variables GST_ID3V2_TAG_ENCODING,
+ GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
+ list of character encodings to force interpretation of non-unicode
+ strings stored in an ID3v2 tag to a particular encoding. If none
+ is specified, try to use current locale's encoding, then fall back
+ to ISO-8859-1 (which will always succeed). (Resolves #149274)
+ * gst/tags/gstid3tag.c: (gst_tag_from_id3_tag),
+ (gst_tag_extract_id3v1_string), (gst_tag_list_new_from_id3v1):
+ Check environment variables GST_ID3V1_TAG_ENCODING,
+ GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
+ list of character encodings to use in case a string encountered
+ in an ID3v1 tag is not valid UTF-8 already. If no encoding is
+ specified, try to use the current locale's encoding, then fall
+ back to ISO-8859-1 (which will always succeed).
+
+2005-01-25 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+ - on half framerate, compute the rate in advance so the comparisons
+ don't compare wrong values
+ - don't use mad_synth/frame_mute anymore, this mirrors mad_decoder
+ behaviour
+ - don't use mad_header_decode anymore, mad_frame_decode does that
+ automatically
+ - when getting rid of consumed bytes, reset the stream's skiplen
+ (fixes #163867)
+
+2005-01-26 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init)
+ Use 1/2 a second for default max_discont, as PES streams from DVB
+ seem to have larger spacings in the SCR.
+ Fix a typo.
+
+2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (group_commit):
+ Notify delayed stream-info availability.
+
+2005-01-26 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
+ (gst_a52dec_handle_event), (gst_a52dec_chain):
+ Add some debug output. Check that a discont has a valid
+ time associated.
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+ (gst_alsa_sink_loop):
+ Ignore TAG events. A little extra debug for broken timestamps.
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init), (dvdnavsrc_loop),
+ (dvdnavsrc_change_state):
+ Ensure we send a discont to engage the link before we send any
+ other events.
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_init),
+ (dvdreadsrc_finalize), (_close), (_open), (_seek_title),
+ (_seek_chapter), (seek_sector), (dvdreadsrc_get),
+ (dvdreadsrc_uri_get_uri), (dvdreadsrc_uri_set_uri):
+ Handle URI of the form dvd://title[,chapter[,angle]]. Currently only
+ dvd://title works in totem because typefinding sends a seek that ends
+ up going back to chapter 1 regardless.
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Output correct timestamps and handle disconts.
+ * ext/ogg/gstoggdemux.c: (get_relative):
+ Small guard against a null dereference.
+ * ext/pango/gsttextoverlay.c: (gst_textoverlay_finalize),
+ (gst_textoverlay_set_property):
+ Free memory when done. Don't call gst_event_filler_get_duration on
+ EOS events. Use GST_LOG and GST_WARNING instead of g_message and
+ g_warning.
+ * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_init),
+ (draw_line), (gst_smoothwave_dispose), (gst_sw_sinklink),
+ (gst_sw_srclink), (gst_smoothwave_chain):
+ Draw solid lines, prettier colours.
+ * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_init):
+ Add a default palette that'll work for some movies.
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init),
+ (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_send_discont),
+ (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset):
+ * gst/mpegstream/gstdvddemux.h:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
+ (gst_mpeg_demux_parse_syshead), (gst_mpeg_demux_parse_pes):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+ (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead):
+ * gst/mpegstream/gstmpegparse.h:
+ Use PTM/NAV events when for timestamp adjustment when connected to
+ dvdnavsrc. Don't use many discont events where one suffices.
+ * gst/playback/gstplaybasebin.c: (group_destroy),
+ (gen_preroll_element), (gst_play_base_bin_add_element):
+ * gst/playback/gstplaybasebin.h:
+ Make sure we remove subtitles from the same bin we put them in.
+ * gst/subparse/gstsubparse.c: (convert_encoding), (parse_subrip),
+ (gst_subparse_buffer_format_autodetect),
+ (gst_subparse_change_state):
+ Fix some memleaks and invalid accesses.
+ * gst/typefind/gsttypefindfunctions.c: (ogganx_type_find),
+ (oggskel_type_find), (cmml_type_find), (plugin_init):
+ Some typefind functions for Annodex v3.0 files
+ * gst/wavparse/gstwavparse.h:
+ GstRiffReadClass is the correct parent class.
+
+2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ Add extradata to huffyuv (fixes #165013).
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_vids_with_data):
+ Fix extradata extraction if it is in the chunk size.
+
+2005-01-25 Edward Hervey <bilboed@bilboed.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/effectv/gstquark.c: (gst_quarktv_class_init),
+ (gst_quarktv_change_state), (gst_quarktv_dispose):
+ Memory free'ing location fix (#164708).
+
+2005-01-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (group_commit),
+ (gen_preroll_element), (probe_triggered), (gen_source_element),
+ (setup_source), (gst_play_base_bin_change_state),
+ (gst_play_base_bin_add_element):
+ Don't block for streams.
+ * gst/playback/gststreaminfo.c: (stream_info_change_state),
+ (gst_stream_info_set_mute):
+ Use gst_pad_set_active_recursive.
+
+2005-01-25 Andy Wingo <wingo@pobox.com>
+
+ * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Fix compile
+ for #ifndef HAVE_XVIDEO.
+
+2005-01-24 Jeffrey C. Ollie
+
+ reviewed by: Maciej Katafiasz <mathrick@freedesktop.org>
+
+ * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_chain):
+ * ext/gsm/gstgsmdec.h:
+ * ext/gsm/gstgsmenc.c: (gst_gsmenc_init), (gst_gsmenc_chain):
+ * ext/gsm/gstgsmenc.h:
+ Fix rate to 8kHz as per spec, removes obscure errors when no rate
+ was given by property. Add proper buffer timestamps and offsets.
+
+2005-01-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data):
+ Audio can be <8000Hz.
+
+2005-01-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+ Explicit state change to workaround refcount bugs.
+
+2005-01-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavimux.c: (gst_avimux_write_tag),
+ (gst_avimux_riff_get_avi_header):
+ Fix...
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_element_data),
+ (gst_riff_read_element_data):
+ * gst-libs/gst/riff/riff-read.h:
+ Add _peek version (req'ed in CDXA).
+ * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_init),
+ (gst_cdxaparse_loop):
+ Fix parsing in playbin.
+ * gst/playback/gstdecodebin.c: (close_pad_link):
+ Ignore current_ pads, they cause major annoyance.
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ Safety guard.
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavimux.c: (gst_avimux_write_tag):
+ Fix padding...
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/ebml-read.c: (gst_ebml_read_buffer):
+ Allow for 0-sized buffers. Fixes length query problems in
+ starwars.mkv from the testsuite.
+
+2005-01-19 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/videobox/gstvideobox.c: (gst_video_box_copy_plane_i420),
+ (gst_video_box_i420), (gst_video_box_chain):
+ Fix row strides for I420 (fixes #163159)
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+ MPEG2 has a useful rate property, so we can actually use that.
+ For MPEG-1, continue using the bytes/time properties.
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_template_caps):
+ Add intel-h263.
+
+2005-01-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+ Fail if caps negotiation fails. Should fix #162184, and should
+ definately be in there regardless of it fixing the actual bug.
+ * gst/avi/gstavimux.c: (gst_avimux_get_type), (gst_avimux_init),
+ (gst_avimux_write_tag), (gst_avimux_riff_get_avi_header),
+ (gst_avimux_riff_get_avix_header),
+ (gst_avimux_riff_get_video_header),
+ (gst_avimux_riff_get_audio_header), (gst_avimux_write_index),
+ (gst_avimux_start_file), (gst_avimux_handle_event),
+ (gst_avimux_change_state):
+ * gst/avi/gstavimux.h:
+ Refactor structure writing to use GST_WRITE_UINT macros, add
+ metadata writing support.
+
+2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gststreaminfo.c: (gst_stream_info_dispose):
+ Elements may already be destroyed when this function is called.
+
+2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
+ More memory leak fixes (#149162).
+
+2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_add_stream):
+ Fix two memleaks.
+
+2005-01-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
+ Argh...
+
+2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
+ Fix off-by-one bug. Fixes warnings during playback of sincity.mp4
+ when fixating to six channels in Totem.
+
+2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/dvdread/dvdreadsrc.c: (get_next_cell_for):
+ Fix compile warnings on Solaris 10 buildbot
+
+2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/dvdread/dvdreadsrc.c: (_read):
+ Don't read beyond the last cell in a chapter (fixes
+ invalid memory access)
+
+2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
+
+ * ext/dvdread/stream_labels.c:
+ (dvdreadsrc_get_audio_stream_labels):
+ Use NULL for an empty GList instead of g_list_alloc(); fix
+ memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead
+ of GString (easier to bulk free later)
+
+2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_pixfmt_to_caps):
+ Fix BGRA32 caps (#164209).
+
+2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_caps_to_pixfmt):
+ alpha_mask can be RGBA/ABGR. Fixes #164265.
+
+2005-01-17 Francis Labonte <francis_labonte@hotmail.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer),
+ (gst_mpeg2dec_alloc_buffer):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ Crop if decoding size is not the actual image size (#163676).
+
+2005-01-17 Steve Baker <steve@stevebaker.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (aiff_type_find),
+ (svx_type_find), (sds_type_find), (ircam_type_find), (plugin_init):
+ Add libsndfile typefind functions (#163309).
+
+2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * tools/gst-launch-ext-m.m:
+ Add .aac, fix .m1v/.m2v (#163891).
+
+2005-01-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsaclock.c: (gst_alsa_clock_wait):
+ Sanity check, don't wait endlessly since the clock might not
+ actually run at this point (which is a deadlock). Fixes #164069.
+
+2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (probe_triggered):
+ Of course, only pause if group is done...
+
+2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (probe_triggered):
+ Thread safety.
+
+2005-01-16 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/swfdec/gstswfdec.c: (gst_swfdec_change_state):
+ Don't return state change success when the parent
+ failed.
+
+2005-01-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavimux.c: (gst_avimux_handle_event):
+ Free events (fix memleak in #162905).
+
+2005-01-15 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_caps_to_pixfmt):
+ Fix for depth = 15. Fixes #161675.
+
+2005-01-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+ Set FPS correctly, even for webcams and the like.
+ * sys/v4l/v4l_calls.c: (gst_v4l_set_chan_norm):
+ Don error on setting while capturing.
+
+2005-01-14 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/gstdvdec.c:
+ * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+ * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
+ I'm a bad boy. using /1001. to force C to do float division
+ and not integer division (as it did in my last commit)
+ Thanks to David I. Lehn for pointing this mistake.
+
+2005-01-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+ Revert Johan´s 1.35->1.36 since it breaks compat.
+
+2005-01-14 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/gstdvdec.c:
+ * ext/libfame/gstlibfame.c:
+ * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+ * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
+ replace framerate aproximations by their real value
+ (24000/1001, 30000/1001, 60000/1001)
+ Finish fixing bug #164049
+
+2005-01-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/ogg/gstoggmux.c:
+ eos/bos debugging
+ * gst/tcp/gstmultifdsink.c:
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcp.h:
+ * gst/tcp/gsttcpclientsink.c:
+ * gst/tcp/gsttcpclientsrc.c:
+ * gst/tcp/gsttcpserversink.c:
+ * gst/tcp/gsttcpserversrc.c:
+ improve reusability of elements after state changes and errors
+ make multifdsink throw away streamheaders when receiving new ones
+
+2005-01-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
+ Fix for if items are already in list...
+
+2005-01-12 Benjamin Otte <otte@gnome.org>
+
+ * gst/adder/gstadder.c: (gst_adder_loop):
+ fix adder a bit so it doesn't screw up with events as much anymore
+
+2005-01-12 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link),
+ (pixbufscale_scale), (gst_pixbufscale_chain):
+ * ext/gdk_pixbuf/pixbufscale.h:
+ Incorporate changes from Tim-Philipp Mueller <t.i.m@orange.net>
+ to ensure rowstrides are calculated the same way as
+ ffmpegcolorspace
+ Use gst_buffer_stamp instead of copying TIMESTAMP manually, so
+ that we pick up duration and offset also.
+
+2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavimux.c: (gst_avimux_class_init),
+ (gst_avimux_pad_unlink), (gst_avimux_release_pad):
+ Reusability fixes.
+
+2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
+ (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+ (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
+ (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
+ Update flags when requested.
+
+2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
+ Fix dmix.
+
+2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (gst_play_base_bin_init), (gst_play_base_bin_dispose),
+ (probe_triggered), (new_decoded_pad), (gen_source_element),
+ (gst_play_base_bin_set_property), (gst_play_base_bin_get_property):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+ (gst_play_bin_init), (group_switch), (remove_sinks), (setup_sinks),
+ (gst_play_bin_change_state):
+ Implement group-switch signal for use in apps to clear metadata
+ cache, clean up subtitle, add suburi property instead of # hack,
+ some error-out fixes.
+
+2005-01-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ Debug.
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame):
+ If we got a state change in the _get handler, don't return success.
+
+2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_my_output_message),
+ (gst_jpegdec_my_emit_message), (gst_jpegdec_init):
+ Make jpegdec quiet on MJPEG decoding
+ * gst/asfdemux/README:
+ Fix mimetypes for MJPEG and H263
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ Fix broken code generation by gcc by swapping arguments.
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+ Fix \n in debug.
+
+2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * TODO:
+ delete this file, it is by far outdated
+ * ext/alsa/gstalsa.1: remove
+ * ext/alsa/gstalsa.c: (add_rates), (add_channels), (gst_alsa_caps),
+ (gst_alsa_check_sample_rates), (gst_alsa_rates_probe),
+ (gst_alsa_get_caps):
+ Add HW probing for supported sample rates. Fixes #161704
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+ Don't crash, biatch! :).
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/musepack/gstmusepackreader.cpp:
+ * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
+ Some work on tags - still doesn't work in playbin...
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+ Handle events...
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_tree):
+ Also shove tags on kid pads.
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
+ Don't bail on unknown events.
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+ Don't crash on events before negotiation.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+ Send tags on pads, too.
+ * gst/playback/gststreamselector.c:
+ (gst_stream_selector_request_new_pad):
+ Forward events on first pad if no input was selected yet.
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (setup_substreams):
+ Don't disable streamtype if the stream doesn't exist, since
+ then playing a video after audio will disable both and nothing
+ will happen. Fixes the testsuite.
+
+2005-01-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_interface_init),
+ (gst_v4l_xoverlay_set_xwindow_id):
+ * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_interface_init),
+ (gst_v4l2_xoverlay_set_xwindow_id):
+ Add debug categories, fix overlay disabling.
+
+2005-01-10 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_get_caps):
+ * ext/alsa/gstalsa.h:
+ Add HW probing for period_count/size and buffer_size MIX/MAX
+ Adjust default/user defined value if out of bounds
+ Should fix bug #162024
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event):
+ Fix warning (#161191).
+
+2005-01-09 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dvdread/stream_labels.c:
+ (dvdreadsrc_get_audio_stream_labels):
+ Fix warning (init the good variable in switch default)
+
+2005-01-09 Koop Mast <kwm@rainbow-runner.nl>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/tta/gstttaparse.c: (gst_tta_src_event):
+ Fix gcc-2.95 compile (#163485).
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/flac/gstflacenc.c: (gst_flacenc_init),
+ (gst_flacenc_seek_callback), (gst_flacenc_write_callback),
+ (gst_flacenc_tell_callback), (gst_flacenc_chain),
+ (gst_flacenc_change_state):
+ * ext/flac/gstflacenc.h:
+ Update for API change in flac-1.1.1. Update requirement in
+ configure.ac. Fixes #162974.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (group_destroy):
+ Remove hack to get rid of assert and get rid of unlinked
+ signals properly.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (setup_source):
+ Set source to NULL so that resources are free'ed. Fixes issues
+ with playback of CDDA and similar device-accessing things.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * testsuite/embed/Makefile.am:
+ test->noinst, fix make test in buildbot.
+
+2005-01-09 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dvdread/stream_labels.c: new file
+ * ext/dvdread/stream_labels.h: new file
+ * ext/dvdread/Makefile.am:
+ * ext/dvdread/dvdreadsrc.c: (_seek_title):
+ Extract audio stream label from DVD IFO files.
+ It only dump them on the console for now, still have to
+ make playbin aware of them.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (setup_source):
+ Fix hanging subs.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+ (gen_preroll_element), (remove_groups), (setup_subtitle),
+ (gen_source_element), (setup_source):
+ * gst/playback/gstplaybasebin.h:
+ Multiple .sub files is just a stupid idea... Fix some threading
+ mistakes. Interestingly, external .sub files cause playbin to
+ hang, I don't know why... Parsing fixes contributed by François
+ Kooman <fkooman@tuxed.net>.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * testsuite/embed/Makefile.am:
+ Fix buildbot.
+
+2005-01-09 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+ (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+ (gst_pngenc_set_property):
+ * ext/libpng/gstpngenc.h:
+ Add compression level property (#163323).
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * examples/capsfilter/capsfilter1.c: (main):
+ * examples/seeking/spider_seek.c: (make_spider_pipeline):
+ * ext/dvdread/Makefile.am:
+ * ext/dvdread/demo-play:
+ * ext/dvdread/demo-play.c:
+ * gconf/gstreamer.schemas.in:
+ * gst-libs/gst/gconf/gconf.c:
+ * sys/v4l/TODO:
+ * testsuite/Makefile.am:
+ * testsuite/embed/Makefile.am:
+ * testsuite/embed/embed.c: (cb_expose), (main):
+ Remove all references to xvideosink, fix examples (#140845).
+ * gst/playback/gstplaybasebin.c: (group_destroy):
+ Apparently, disposal does not unlink - so do explicitely.
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ Add debug.
+
+2005-01-09 Maciej Katafiasz <mathrick@freedesktop.org>
+
+ * README: fix PKG_CONFIG_PATH instructions, what was there
+ previously was breaking default search path, not nice.
+ Fixes #163358
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_init),
+ (gst_audioscale_chain):
+ %#^@^#@^@#^#@^#@^@#^@#^@#^@#^#@^#@^#@^@#^#@ fix seeking
+ when resampling - how the ^@$^!@^! is this possible?!?
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+ Reset variables on READY.
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_request_new_pad),
+ (gst_matroska_mux_loop):
+ Require data before writing header.
+
+2005-01-09 Francis Labonte <francis_labonte@hotmail.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ Don't call mad_stream_sync() directly after recovering sync.
+ Fixes #151661.
+
+2005-01-09 Martin Eikermann <meiker@upb.de>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init),
+ (snapshot_handler), (gst_snapshot_sinkconnect),
+ (gst_snapshot_chain):
+ Allocate resources when required, fix recursive signal emission
+ and fix caps. Fixes #161667.
+
+2005-01-09 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps),
+ (gst_pngdec_chain):
+ Handle only 8-bppc (bits-per-pixel-component) images, better
+ error handling and correct strides. Fixes #163177.
+ * ext/libpng/gstpngenc.c: (gst_pngenc_sinklink),
+ (gst_pngenc_chain):
+ Better error handling. Fixes #163348.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_get_type),
+ (dvdnavsrc_uri_get_type), (dvdnavsrc_uri_get_protocols),
+ (dvdnavsrc_uri_get_uri), (dvdnavsrc_uri_set_uri),
+ (dvdnavsrc_uri_handler_init):
+ Add DVD-nav URI (dvdnav://) for Totem testing purposes.
+ * gst/playback/gstplaybasebin.c: (gen_source_element):
+ Add MMS to streaming URIs.
+
+2005-01-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
+ * sys/xvimage/xvimagesink.c:
+ (gst_xvimagesink_navigation_send_event):
+ Check for pad availability before sending event.
+
+2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-plugins.spec.in:
+ Add subparse.
+
+2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Since we use functions from CVS, up requirement.
+
+2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/Makefile.am:
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (group_destroy), (group_commit), (group_is_muted),
+ (gen_preroll_element), (add_stream), (unknown_type),
+ (probe_triggered), (preroll_unlinked), (mute_stream),
+ (silence_stream), (new_decoded_pad), (setup_substreams),
+ (setup_source), (get_active_source), (mute_group_type),
+ (muted_group_change_state), (set_active_source),
+ (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+ (play_base_eos), (gst_play_base_bin_change_state):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (add_sink), (setup_sinks):
+ * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
+ (gst_stream_info_dispose), (stream_info_mute_pad),
+ (stream_info_change_state), (gst_stream_info_set_mute):
+ * gst/playback/gststreamselector.c: (gst_stream_selector_get_type),
+ (gst_stream_selector_base_init), (gst_stream_selector_class_init),
+ (gst_stream_selector_init), (gst_stream_selector_dispose),
+ (gst_stream_selector_get_linked_pad),
+ (gst_stream_selector_get_caps), (gst_stream_selector_link),
+ (gst_stream_selector_get_linked_pads),
+ (gst_stream_selector_request_new_pad), (gst_stream_selector_chain):
+ * gst/playback/gststreamselector.h:
+ Adding stream selection support plus required properties for
+ applications to use this. Fully fixes #100931.
+
+2005-01-08 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstpuzzle.c: (nav_event_handler):
+ - handle nav events differently: forward every event no matter if it
+ was handled or not.
+ - translate events
+ You can now cheat by using navigationtest ! puzzle and moving the
+ mouse close to the edge of a tile. ;)
+
+2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
+ * ext/ogg/gstogmparse.c: (gst_ogm_text_parse_get_type),
+ (gst_ogm_text_parse_base_init), (gst_ogm_text_parse_init),
+ (gst_ogm_parse_get_sink_querytypes), (gst_ogm_parse_sink_convert),
+ (gst_ogm_parse_sink_query), (gst_ogm_parse_chain),
+ (gst_ogm_parse_plugin_init):
+ * ext/pango/gsttextoverlay.c: (gst_textoverlay_linkedpads),
+ (gst_textoverlay_link), (gst_textoverlay_getcaps),
+ (gst_textoverlay_event), (gst_textoverlay_video_chain),
+ (gst_textoverlay_loop), (gst_textoverlay_init), (plugin_init):
+ * ext/pango/gsttextoverlay.h:
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
+ (gst_matroska_demux_handle_seek_event),
+ (gst_matroska_demux_sync_streams),
+ (gst_matroska_demux_parse_blockgroup),
+ (gst_matroska_demux_subtitle_caps),
+ (gst_matroska_demux_plugin_init):
+ * gst/matroska/matroska-ids.h:
+ * gst/playback/gstdecodebin.c: (close_pad_link):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+ (gen_preroll_element), (remove_groups), (add_stream),
+ (new_decoded_pad), (setup_subtitles), (gen_source_element),
+ (setup_source):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gen_text_element), (setup_sinks):
+ * gst/subparse/Makefile.am:
+ * gst/subparse/gstsubparse.c: (gst_subparse_get_type),
+ (gst_subparse_base_init), (gst_subparse_class_init),
+ (gst_subparse_init), (gst_subparse_formats),
+ (gst_subparse_eventmask), (gst_subparse_event),
+ (gst_subparse_handle_event), (convert_encoding), (get_next_line),
+ (parse_mdvdsub), (parse_mdvdsub_init), (parse_subrip),
+ (parse_subrip_deinit), (parse_subrip_init), (parse_mpsub),
+ (parse_mpsub_deinit), (parse_mpsub_init),
+ (gst_subparse_buffer_format_autodetect),
+ (gst_subparse_format_autodetect), (gst_subparse_loop),
+ (gst_subparse_change_state), (gst_subparse_type_find),
+ (plugin_init):
+ * gst/subparse/gstsubparse.h:
+ * gst/typefind/gsttypefindfunctions.c: (ogmtext_type_find),
+ (plugin_init):
+ Add subtitle support, .sub parser (supports SRT and MPsub),
+ OGM text support, Matroska UTF-8 text support, deadlock fixes
+ all over the place, subtitle awareness in decodebin/playbin
+ and some fixes to textoverlay to handle subtitles in a stream
+ correctly. Fixes #100931.
+
+2005-01-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+ Check for pad availability before doing a query on it.
+
+2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/gstdvdec.c:
+ really fix bpp24/32 dvdec caps (classic rgba indeed)
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc):
+ don't send text tags if they are empty (bis repetita)
+
+2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/gstdvdec.c:
+ remove unneeded comment from dvdec
+ (related to DV 4CC codes in AVI files)
+ moved them in gstreamer/docs/random/mimetypes
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc):
+ don't send text tags if they are empty
+ fix mem leak on error path
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/imgconvert.c: (img_get_alpha_info):
+ * gst/ffmpegcolorspace/imgconvert_template.h:
+ adds BGR32 and BGRA32 to ffmpegcolorspace
+ (still bad colors, fixing it on next commit)
+ helps with dvdec outputing BGR32
+
+2005-01-08 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/gstdvdec.c:
+ Fix audio caps i just broke (missing ',')
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_get_type),
+ (gst_matroska_mux_reset):
+ Fix typo + add FIXME about old "x-gst-metadata" crap
+
+2005-01-07 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * ext/dv/demo-play.c: (main):
+ xvideosink -> xvimagesink
+ * ext/dv/gstdvdec.c:
+ change rgb 32/32 caps to 24/32 (no alpha)
+ change nb of channels to be a list (2 or 4, not 2)
+ change sample rate to be a list (32, 44.1, 48 kHz) not a range
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc):
+ Add 'date/year' to extracted metadata list
+
+2005-01-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+ The return value of fixate_to does not imply that the requested
+ value was set, so don't assume.
+
+2005-01-07 Gergely Nagy <algernon@bonehunter.rulez.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/libpng/gstpngdec.c:
+ * ext/libpng/gstpngenc.c: (gst_pngenc_base_init),
+ (gst_pngenc_sinklink), (gst_pngenc_init), (gst_pngenc_chain):
+ * ext/libpng/gstpngenc.h:
+ Alpha support (encoder; #163161), mime fixage.
+
+2005-01-07 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faac/gstfaac.c: (gst_faac_outputformat_get_type),
+ (gst_faac_class_init), (gst_faac_init), (gst_faac_srcconnect),
+ (gst_faac_set_property), (gst_faac_get_property):
+ * ext/faac/gstfaac.h:
+ Allow for ADTS output (#153434).
+
+2005-01-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+ Fix against template (#150576).
+
+2005-01-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstpuzzle.c: (draw_puzzle):
+ don't draw a puzzle if either width or height of tiles would be 0.
+
+2005-01-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstpuzzle.c: (gst_puzzle_get_type),
+ (gst_puzzle_class_init), (gst_puzzle_finalize):
+ no memleaks, please
+ (gst_puzzle_create), (gst_puzzle_init),
+ (gst_puzzle_set_property), (gst_puzzle_setup):
+ change initialization code around so we don't reshuffle on resize
+ (draw_puzzle):
+ fix another stupid typo
+
+2005-01-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstvideoimage.c: (copy_hline_YUY2):
+ fix stupid typo that borked copying on YUY2
+
+2005-01-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstpuzzle.c: (draw_puzzle):
+ fix edges when image sizes aren't multiples of tile sizes
+
+2005-01-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+ make RGB endianness work correctly
+ (gst_puzzle_show), (gst_puzzle_swap), (gst_puzzle_move):
+ refactor and fix race with initial shuffling
+ (nav_event_handler):
+ allow using the mouse to puzzle
+ (draw_puzzle):
+ insist on tiles having width and height as multiples of 4 to get
+ clean YUV image handling
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+ (gst_xvimagesink_handle_xevents), (gst_xvimagesink_buffer_alloc):
+ s/DEBUG/LOG/ for common messages
+ (gst_xvimagesink_navigation_send_event):
+ fix mouse event translation to not include screen PAR
+ * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
+ fix mouse event translation to actually work
+
+2005-01-06 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc):
+ Extract TrackNumber metadata + clean up code
+ * gst/games/gstvideoimage.c: (gst_video_image_draw_rectangle):
+ Hope this is the good fix (var used unitialised)
+
+2005-01-06 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_chain):
+ Only increment timestamp if it's valid. Fixes raw AAC streams.
+
+2005-01-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ * gst/games/Makefile.am:
+ * gst/games/gstpuzzle.c:
+ add a puzzle game with...
+ * gst/games/gstvideoimage.c:
+ * gst/games/gstvideoimage.h:
+ ... full colorspace support (that includes YUV9 and RGB16)) stolen
+ from videotestsrc and made into something that would be a nice
+ library for a lot of other plugins.
+
+2005-01-06 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * configure.ac:
+ don't compile faad plugin if a RC of 2.0 is found
+ Fixes #155346 (and FC1 buildbot)
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc):
+ try to make Solaris compiler happier
+
+2005-01-06 Paul Jack <pjack@sfaf.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init):
+ Fix segfault (#161667).
+
+2005-01-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+ Fix framerate reporting.
+
+2005-01-05 Stephane LOEUILLET <stephane.loeuillet@tiscali.fr>
+
+ * gst-libs/gst/riff/riff-ids.h:
+ * gst/wavenc/riff.h:
+ Add AMR (VBR and CBR) ids to riff.h audio codec list
+ * gst/asfdemux/gstasfdemux.c:
+ (gst_asf_demux_process_ext_content_desc),
+ (gst_asf_demux_process_object):
+ Retrieve more tags from ASF files (Genre, AlbumTitle, Artist)
+
+2005-01-05 Martin Eikermann <meiker@upb.de>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+ (gst_dvd_demux_handle_discont):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+ (gst_mpeg_demux_handle_discont):
+ Recreate pads on new-media (#160730).
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_new_pad):
+ Send discont even if manager changes timestamps (#161929).
+
+2005-01-05 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16):
+ Fix invalid memory access (#159211).
+
+2005-01-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * examples/gstplay/player.c: (main):
+ Don't iterate.
+ * examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
+ Add visualizations.
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
+ (gst_a52dec_handle_frame):
+ Set duration.
+ * ext/dvdnav/gst-dvd:
+ Add audioconvert. Fixes #161325.
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
+ Explicitely case to gint64. Possible valgrind error.
+ * gst-libs/gst/play/play.c: (caps_set), (setup_size),
+ (gst_play_tick_callback), (gst_play_change_state),
+ (gst_play_dispose), (gst_play_init), (gst_play_class_init),
+ (gst_play_set_location), (gst_play_get_location),
+ (gst_play_seek_to_time), (gst_play_set_data_src),
+ (gst_play_set_video_sink), (gst_play_set_audio_sink),
+ (gst_play_set_visualization), (gst_play_connect_visualization),
+ (gst_play_get_framerate), (gst_play_get_all_by_interface),
+ (gst_play_new):
+ Use playbin. Fixes #139749 and #147744.
+ * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
+ Add genre tag.
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
+ (audioscale_get_type), (gst_audioscale_base_init),
+ (gst_audioscale_class_init), (gst_audioscale_expand_caps),
+ (gst_audioscale_getcaps), (gst_audioscale_fixate),
+ (gst_audioscale_link), (gst_audioscale_get_buffer),
+ (gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
+ (gst_audioscale_init), (gst_audioscale_dispose),
+ (gst_audioscale_chain), (gst_audioscale_set_property),
+ (gst_audioscale_get_property), (plugin_init):
+ Indent properly.
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
+ Fix LPCM.
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
+ (qtdemux_tag_add_str), (qtdemux_tag_add_num),
+ (qtdemux_tag_add_gnre), (qtdemux_video_caps):
+ Add more metadata (fixes #162656).
+
+2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ back to cvs
+
+=== release 0.8.7 ===
+
+2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ releasing 0.8.7, "Hyperspace"
+
+2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ * gst/playback/gstplaybasebin.c:
+ Fix for #162924 - free caps after use, not before
+
+2005-01-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c:
+ * gst/wavparse/gstwavparse.c:
+ Fix for #154773 - fixes playback of small .wav files
+
+2005-01-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioscale/gstaudioscale.c:
+ Fix for #162819 - make audioscale reusable
+ Fixes playback of more than one file with playbin/totem
+
+2004-12-29 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ * gst/ffmpegcolorspace/imgconvert.c:
+ clean up the mess that made me cry and avoid needless duplication
+
+2004-12-29 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/imgconvert.c:
+ give some indication of why we're segfaulting
+
+2004-12-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Fix indentation, fix v4l2 plugin detection.
+ * ext/Makefile.am:
+ Fix libmms location (Maciej, use diff -u!).
+ * ext/alsa/gstalsa.c: (gst_alsa_init):
+ Initialize caps cache to NULL.
+ * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+ Only change state on audiosink if it exists.
+
+2004-12-28 Maciej Katafiasz <mathrick@mathrick.org>
+
+ * gst/matroska/matroska-demux.c:
+ * gst/matroska/matroska-ids.h:
+ * gst/matroska/matroska-demux.h:
+ Fix Vorbis streams failing to decode in some files, where cluster_time
+ isn't 0, because then it doesn't send codec_priv before actual data.
+ Remove time-based test and replace it with marker set on beginning of
+ new stream
+
+2004-12-28 David Schleef <ds@schleef.org>
+
+ Merge patch from Ronald fixing problems with streaming
+ text.
+ * ext/cairo/gstcairo.c: (plugin_init):
+ * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
+ (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
+ (gst_textoverlay_video_chain), (gst_textoverlay_loop),
+ (gst_textoverlay_font_init), (gst_textoverlay_init),
+ (gst_textoverlay_set_property):
+ * ext/cairo/gsttextoverlay.h:
+
+2004-12-27 David Schleef <ds@schleef.org>
+
+ * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
+ (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
+ (gst_textoverlay_video_chain), (gst_textoverlay_loop),
+ (gst_textoverlay_font_init), (gst_textoverlay_init),
+ (gst_textoverlay_set_property): Improvements to actually
+ render text as white on black outline on video, including
+ font selection and horizontal/vertical alignment. (Ronald's
+ christmas present)
+ * ext/cairo/gsttextoverlay.h:
+
+2004-12-26 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/ogg/gstogg.c:
+ * ext/ogg/gstogmparse.c:
+ fix ogm[audio/video]parse plugin registration
+ (riff won't load if bytestream is already loaded)
+
+2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/audioconvert/gstchannelmix.c:
+ fix for GLIB < 2.4
+
+2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * configure.ac:
+ disable docs again until it actually passes make distcheck.
+
+2004-12-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_type_get), (qtdemux_audio_caps):
+ * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
+ (plugin_init):
+ Add 3GP (variables name Q3GP because they can't start with a
+ number). Add samr audio fourcc (used in .3gp files), decoder
+ is work in progress. Also do a GST_WARNING instead of ERROR
+ in case of unknown nodes, to decrease output.
+
+2004-12-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ really fix dist
+
+2004-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/speex/gstspeexdec.h:
+ * ext/speex/gstspeexenc.h:
+ Fixes #158382. Make speex plugin compatible with both 1.0 and 1.1.
+ Fix detection code in configure.ac
+
+2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_blockgroup):
+ Save position, so that queries give proper return values. Don't
+ know how this could ever have worked before...
+
+2004-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ Put additional LAME check inside the conditional. Fixes #152339
+
+2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+ (gst_avi_demux_stream_scan):
+ Add some more debug. Fix logic error when setting movi offset
+ while reading index.
+
+2004-12-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+ (gst_avi_demux_stream_scan), (gst_avi_demux_handle_seek),
+ (gst_avi_demux_process_next_entry):
+ Add some debugging. Better detection of broken indexes and the
+ accompanying index recovery. No infinite loops on state changes
+ when we're still in our loopfunction.
+
+2004-12-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Fix up.
+
+2004-12-22 Archana Shah <archana.shah@wipro.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_volume):
+ Normalizing the value before setting
+ (gst_sunaudiomixer_get_volume):
+ Normalizing the value after getting. Fixes bug# 161980
+
+2004-12-22 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
+
+ * Makefile.am: Make sure docs gets disted
+ * docs/Makefile.am: Make sure all needed files get disted
+ * gst-plugins.spec.in: latest updates
+
+2004-12-22 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+ Revert patch 1.38 as clock distribution over schedulers does
+ not work correcly in the core yet.
+
+2004-12-21 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * sys/oss/README: remove this file, which predates my birth
+ (and which content is by far outdated)
+
+2004-12-20 Stefan Kost <ensonic@users.sf.net>
+
+ * Makefile.am:
+ * configure.ac:
+ * docs/Makefile.am:
+ * docs/libs/Makefile.am:
+ * docs/libs/gst-plugins-libs-docs.sgml:
+ * docs/libs/gst-plugins-libs-sections.txt:
+ * docs/libs/tmpl/gstgconf.sgml:
+ * docs/upload.mak:
+ * docs/version.entities.in:
+ Added boilerplate gtk-doc files for plugin-libs documentation.
+
+2004-12-19 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/auparse/gstauparse.c: fix int and float audio caps
+
+2004-12-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
+ g_assert() can be a macro, don't use #ifdef inside it.
+
+2004-12-19 Edward Hervey <bilboed@bilboed.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_blank_data),
+ (gst_videorate_init), (gst_videorate_chain),
+ (gst_videorate_change_state):
+ Event handling (fixes #159986).
+
+2004-12-19 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ Add BLZ0 (Blizzard's version of DivX) fourcc.
+
+2004-12-18 David Schleef <ds@schleef.org>
+
+ * gst/tta/gstttadec.c: (gst_tta_dec_link): And yet another
+ portability fix.
+
+2004-12-18 David Schleef <ds@schleef.org>
+
+ * gst/tta/ttadec.h: Disable some header code that isn't used
+ and clearly isn't portable.
+
+2004-12-18 David Schleef <ds@schleef.org>
+
+ * gst/ffmpegcolorspace/imgconvert.c: (get_pix_fmt_info),
+ (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+ (avcodec_get_pix_fmt), (avpicture_layout),
+ (avcodec_get_pix_fmt_loss), (avg_bits_per_pixel), (img_copy),
+ (get_convert_table_entry), (img_convert), (img_get_alpha_info):
+ Fix code to not use GCC extensions (and c99 extensions that
+ Forte does not like.)
+
+2004-12-19 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
+ (gst_deinterlace_chain):
+ Rowstride fixes. Fixes #161039.
+ * gst/videocrop/gstvideocrop.c: (gst_video_crop_init),
+ (gst_video_crop_get_property), (gst_video_crop_add_to_struct_val),
+ (gst_video_crop_getcaps), (gst_video_crop_link),
+ (gst_video_crop_i420), (gst_video_crop_chain),
+ (gst_video_crop_change_state):
+ Rework of negotiation. Actually works now. Fixes #158650.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_sint):
+ That was very stupid.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_blockgroup):
+ Fix possible crasher.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_uint),
+ (gst_matroska_ebmlnum_sint), (gst_matroska_demux_parse_blockgroup):
+ Lace sizes can be zero.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/musepack/gstmusepackdec.cpp:
+ Fetch error return values. Fixes #161624.
+ * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
+ Really EOS.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index):
+ Work for truncated (unfinished download etc.) files. Fixes #160514.
+
+2004-12-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ Fix for integer overflow. Makes #156001 not crash. Probably masks
+ the real bug.
+
+2004-12-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ac3parse/gstac3parse.c: (plugin_init):
+ Parsers never have ranks. Fixes #159651.
+
+2004-12-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/playback/gstdecodebin.c: (compare_ranks):
+ make sure the facotries are ordered the same every time even if they
+ have the same rank by using the name
+ * gst/playback/gstdecodebin.c: (find_compatibles):
+ make sure we don't add factories to the list twice
+
+2004-12-16 David Schleef <ds@schleef.org>
+
+ * configure.ac: look for musepack headers as musepack/*.h
+ (fixes #159847)
+ * ext/musepack/gstmusepackdec.h: use <musepack/*.h>
+ * ext/musepack/gstmusepackreader.h: same
+
+2004-12-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_auds_with_data):
+ Read extradata correctly (fixes #155879).
+
+2004-12-16 David Schleef <ds@schleef.org>
+
+ * gst/audioscale/gstaudioscale.c: allow passthru of >2 channel
+ audio. does _not_ attempt or allow conversion unless channels
+ is 1 or 2.
+
+2004-12-16 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
+
+ * tools/gst-launch-ext-m.m: fix mpeg and vob pipelines
+
+2004-12-16 David Schleef <ds@schleef.org>
+
+ * gst/audioscale/gstaudioscale.c: the resample library only
+ handles 1 or 2 channels. Change caps to compensate.
+
+2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (aac_rate_idx), (aac_profile_idx),
+ (gst_matroska_demux_audio_caps):
+ Some MPEG-AAC hacks, because else it doesn't work...
+
+2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_template_caps):
+ Add h264.
+
+2004-12-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/audio/Makefile.am:
+ Try to fix buildbot.
+
+2004-12-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gstmultifdsink.c:
+ Clean up and uniformize debugging.
+
+2004-12-16 Edward Hervey <bilboed@bilboed.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+ (gst_dvd_demux_reset), (gst_dvd_demux_change_state):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset),
+ (gst_mpeg_demux_change_state):
+ Reset on ready. Fixes 160276.
+
+2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_pad_link):
+ Fix memleak (#154815).
+
+2004-12-16 James Bowes <bowes@cs.dal.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init),
+ (gst_musicbrainz_init), (gst_musicbrainz_chain),
+ (gst_musicbrainz_set_property), (gst_musicbrainz_get_property):
+ * ext/musicbrainz/gsttrm.h:
+ Add support for using a proxy server when getting a trm id from
+ the MusicBrainz database (#149613).
+
+2004-12-16 Christophe Fergeau <teuf@gnome.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstdecodebin.c: (new_pad), (close_link):
+ * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+ Fix memleaks (#157233).
+
+2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/resample/resample.c: (gst_resample_close):
+ * gst-libs/gst/resample/resample.h:
+ * gst/audioscale/gstaudioscale.c:
+ Fix memleak (#159215).
+
+2004-12-16 Toni Willberg <toniw@iki.fi>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
+ * sys/oss/oss_probe.c: (main):
+ Check for mono/stereo support (similar to samplerate probing),
+ fixes #159433. Also add missing copyright header to oss_probe.c.
+
+2004-12-15 David Schleef <ds@schleef.org>
+
+ * configure.ac: add audioresample and cairo plugins. Remove
+ HAVE_MMX stuff, because it's not used.
+ * ext/Makefile.am: same
+ * ext/audioresample/Makefile.am: You are not ready for an
+ audio resampling element based on audioresample.
+ * ext/audioresample/gstaudioresample.c:
+ * ext/audioresample/gstaudioresample.h:
+ * ext/cairo/Makefile.am: You are not ready for overlay elements
+ based on cairo. Don't look too closely, these elements kinda
+ suck right now.
+ * ext/cairo/gstcairo.c: new
+ * ext/cairo/gsttextoverlay.c: new
+ * ext/cairo/gsttextoverlay.h: new
+ * ext/cairo/gsttimeoverlay.c: new
+ * ext/cairo/gsttimeoverlay.h: new
+ * gst-libs/gst/media-info/media-info-priv.h: fix compile
+ problem with compilers that don't support variadic macros.
+
+2004-12-15 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
+
+ Reviewed by: David Schleef <ds@schleef.org>
+
+ * sys/sunaudio/gstsunaudio.c: (plugin_init): Apply patch from
+ Bala, registering sunaudiosrc (oops!), and cleaning up code a
+ bit. Also ran indent-gst.
+ * sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_init),
+ (gst_sunaudiosrc_change_state), (gst_sunaudiosrc_get),
+ (gst_sunaudiosrc_setparams):
+
+2004-12-14 David Schleef <ds@schleef.org>
+
+ * gst/festival/gstfestival.c: (gst_festival_chain): Set the
+ output rate to 16000. Should fix #160235.
+
+2004-12-14 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+ Add typefinding for mpeg2 pes streams
+
+2004-12-13 David Schleef <ds@schleef.org>
+
+ * configure.ac: Applied patch from bug #143659, making default
+ sources and sinks OS-dependent (for Solaris), and added code
+ for OS/X.
+ * gconf/gstreamer.schemas.in: use OS-dependent sinks in gconf.
+
+2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst-libs/gst/riff/riff-media.c:
+ forgot to add h2.64 to avidemux template caps
+
+2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/wavenc/riff.h:
+ * gst-libs/gst/riff/riff-media.c:
+ * gst-libs/gst/riff/riff-ids.h:
+ * gst/avi/gstavimux.c
+ add 4CC code for VideoSoft h264 in AVI (VSSH)
+ fixes bug #160655
+ remove s323 from riff, it's quicktime specific :(
+
+2004-12-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/asfdemux/README
+ * gst/wavenc/riff.h
+ * gst-libs/gst/riff/riff-ids.h
+ * gst-libs/gst/riff/riff-media.c
+ * gst/qtdemux/qtdemux.c:
+ add new 4CC codes for h263 related codecs
+ fixes partially bug #155163
+
+2004-12-12 Christian Fredrik Kalager Schaller <christian at fluendo dot com>
+
+ * configure.ac: Update polyaudio requirement to 0.7
+ * ext/polyp/polypsink.c: (create_stream): add patch from iain (158258)
+
+2004-12-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/interleave/deinterleave.c:
+ fix my name's spelling! :)
+
+2004-12-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * AUTHORS ChangeLog
+ * gst/auparse/gstauparse.c
+ * gst/interleave/deinterleave.c
+ * gst/law/:
+ alaw-decode.c alaw-encode.c
+ mulaw-decode.c mulaw-encode.c
+ * gst/oneton/gstoneton.c
+ * sys/osxaudio/:
+ gstosxaudioelement.c gstosxaudiosink.c gstosxaudiosrc.c
+ * sys/osxvideo/:
+ cocoawindow.h cocoawindow.m
+ osxvideosink.h osxvideosink.m
+
+ put the same mail address for Zaheer Abbas Merali everywhere
+
+2004-12-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
+ Align by packetsize, and assert that we a packet available before
+ playing. The first makes webstreams work (they often include
+ trailing padding data in a packet), the second allows pausing a
+ ASF stream in totem without getting demux errors afterwards.
+
+2004-12-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (get_relative):
+ Check for non-NULL before accessing member (end-of-chain).
+
+2004-12-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+ (cdparanoia_set_property), (cdparanoia_get_property):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
+ (dvdnavsrc_set_property), (dvdnavsrc_get_property):
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+ (dvdreadsrc_init), (dvdreadsrc_set_property),
+ (dvdreadsrc_get_property):
+ * sys/vcd/vcdsrc.c: (gst_vcdsrc_class_init),
+ (gst_vcdsrc_set_property), (gst_vcdsrc_get_property):
+ Synchronize property names where not yet the case. Devices are
+ now device=X, other versions are deprecated (but still exist).
+ Also use g_free() unconditionally.
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (setup_source), (gst_play_base_bin_get_property):
+ Expose source.
+
+2004-12-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: move GCONF macro outside conditional for the am
+ conditional. Fixes #160439
+
+2004-12-08 David Schleef <ds@schleef.org>
+
+ * tools/gst-visualise-m.m: Switch to elements that currently
+ exist.
+
+2004-12-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
+ We love wrong commas.
+
+2004-12-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_handle_src_query):
+ Don't set DEFAULT, unsupported - makes length display incorrectly
+ in some cases.
+
+2004-12-07 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
+
+ * gst/monoscope/README: remove blurb about files being GPL
+ * gst/monoscope/gstmonoscope.c: Change license field to LGPL
+ * gst/monoscope/monoscope.c: Change license to BSD with explanation
+ monoscope is now effectively LGPL licensed
+
+2004-12-07 Christian Fredrik Kalager Schaller <uraeus@gnome.org>
+
+ * gst/monoscope/README: Update information to be more correct
+ * gst/monoscope/convolve.c: Relicense to LGPL
+ * gst/monoscope/convolve.h: Relicense to LGPL
+
+2004-12-06 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ set BUFFER_DURATION to correct values (mpeg1 audio frame length is fixed)
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link):
+ set default_duration for mpeg1 audio
+
+2004-12-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_close_audio):
+ * ext/alsa/gstalsa.h:
+ refactor big chunks of the core caps negotiation code to make it
+ a lot faster, because people claim it's really slow
+ (actually, just cache the getcaps when the device is opened)
+
+2004-12-06 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
+ (gst_a52dec_handle_event), (gst_a52dec_update_streaminfo),
+ (gst_a52dec_handle_frame), (gst_a52dec_chain),
+ (gst_a52dec_change_state), (plugin_init):
+ * ext/a52dec/gsta52dec.h:
+ Do something useful with timestamps. Make chain-based (since
+ there's really no reason to be loopbased).
+ * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
+ Update current_byte/frame correctly.
+
+2004-12-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags),
+ (gst_ape_demux_stream_init):
+ Forward tags, too.
+
+2004-12-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/apetag/apedemux.c: (gst_ape_demux_stream_init):
+ Let's make sure we're done typefinding when detecting tags.
+
+2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/ebml-read.c: (gst_ebml_read_class_init),
+ (gst_ebml_read_init), (gst_ebml_read_use_event),
+ (gst_ebml_read_element_id), (gst_ebml_peek_id),
+ (gst_ebml_read_seek), (gst_ebml_read_skip),
+ (gst_ebml_read_reserve), (gst_ebml_read_buffer),
+ (gst_ebml_read_master):
+ * gst/matroska/ebml-read.h:
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_contents),
+ (gst_matroska_demux_loop_stream), (gst_matroska_demux_audio_caps):
+ Disgustingly evil hack for working around INTERRUPT events and
+ their extremely annoying habit of being a pain in the ass. We
+ simply peek a cluster before reading any of it.
+
+2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/musepack/gstmusepackdec.cpp:
+ There's also floating point libmusepacks.
+
+2004-12-03 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_chanpos_from_gst),
+ (gst_faad_chanpos_to_gst), (gst_faad_chain):
+ Set DURATION even if source buffer didn't. Also use increasing
+ timestamps.
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data):
+ Block_align can have larger values than 8192.
+
+2004-12-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link):
+ * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link):
+ * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link):
+ * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link):
+ Fix caps.
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
+ Fix logic bug.
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_type_find):
+ Yay, another one.
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/esd/esdsink.c: (gst_esdsink_chain):
+ Make error actually say something useful (fixes #156798).
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_template_caps):
+ Add Intel Video 5.0 fourcc (IV50).
+
+2004-12-01 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/mad/gstmad.c: (mpg123_parse_xing_header): fix xing header
+ detection on mono and stereo mp3 files.
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+ Don't crash on EMPTY caps (e.g. when the demuxer didn't recognize
+ the contained stream).
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_srcconnect), (gst_faad_chain):
+ Oops, remove debug.
+
+2004-12-01 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/law/alaw-decode.c: (alawdec_getcaps):
+ * gst/law/mulaw-decode.c: (mulawdec_getcaps):
+ Prevent warnings when negotiating caps (fixes #159338).
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_chain):
+ Remove old leftover that shouldn't be there...
+
+2004-12-01 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
+ Don't forward DISCONT events (fixes #159684).
+
+2004-12-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (remove_sinks), (setup_sinks):
+ Unlink manually since sometimes bin disposal (and therefore
+ pad unlinking) is delayed, which will cause a new media file
+ to not be able to start playing instantly.
+
+2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gststreaminfo.c: (stream_info_mute_pad):
+ On mute of an unlinked stream, check for pad availability so
+ we don't crash on unlinked pad.
+
+2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+ (gst_avi_demux_massage_index):
+ Fix quite humiliating bug in omitting 0-sized index chunks but
+ forgetting to count them for timestamps.
+
+2004-11-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
+ Actually leave the loop if we failed to sync. Don't crash.
+
+2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_process_private):
+ * gst/mpegstream/gstdvddemux.h:
+ Fix crash (#159759). Doesn't work, though. :-(.
+
+2004-11-28 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
+ more overwriting protection due to modifying channels one by one
+ instead of all at once
+
+2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioconvert/gstchannelmix.c:
+ (gst_audio_convert_fill_normalize):
+ Normalize using absolute values.
+
+2004-11-28 Julien MOUTTE <julien@moutte.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/directfb/Makefile.am:
+ * ext/directfb/directfbvideosink.c: (gst_directfbvideosink_create),
+ (gst_directfbvideosink_get_pixel_format),
+ (gst_directfbvideosink_get_format_from_fourcc),
+ (gst_directfbvideosink_fixate), (gst_directfbvideosink_getcaps),
+ (gst_directfbvideosink_sink_link),
+ (gst_directfbvideosink_change_state),
+ (gst_directfbvideosink_chain), (gst_directfbvideosink_buffer_free),
+ (gst_directfbvideosink_buffer_alloc),
+ (gst_directfbvideosink_interface_supported),
+ (gst_directfbvideosink_interface_init),
+ (gst_directfbvideosink_navigation_send_event),
+ (gst_directfbvideosink_navigation_init),
+ (gst_directfbvideosink_set_property),
+ (gst_directfbvideosink_get_property),
+ (gst_directfbvideosink_finalize), (gst_directfbvideosink_init),
+ (gst_directfbvideosink_base_init),
+ (gst_directfbvideosink_class_init),
+ (gst_directfbvideosink_get_type), (plugin_init):
+ * ext/directfb/directfbvideosink.h: Adding a first version of
+ directfbvideosink.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): Initializing some
+ more.
+
+2004-11-28 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
+ walk the samples backwards if out_channels > in_channels so we don't
+ overwrite data
+
+2004-11-28 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioconvert/Makefile.am:
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
+ (gst_audio_convert_link), (gst_audio_convert_change_state),
+ (gst_audio_convert_channels):
+ * gst/audioconvert/gstchannelmix.c:
+ (gst_audio_convert_unset_matrix),
+ (gst_audio_convert_fill_identical),
+ (gst_audio_convert_fill_compatible),
+ (gst_audio_convert_detect_pos), (gst_audio_convert_fill_one_other),
+ (gst_audio_convert_fill_others),
+ (gst_audio_convert_fill_normalize),
+ (gst_audio_convert_fill_matrix), (gst_audio_convert_setup_matrix),
+ (gst_audio_convert_passthrough), (gst_audio_convert_mix):
+ * gst/audioconvert/gstchannelmix.h:
+ Implement a channel mixer.
+
+2004-11-28 Martin Soto <martinsoto@users.sourceforge.net>
+
+ * ext/alsa/gstalsasink.c (gst_alsa_sink_loop):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsa.c (gst_alsa_set_clock):
+ Make alsasink actually honor gst_element_set_clock and use that
+ clock instead of its internal one.
+
+2004-11-27 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/playback/gstplaybasebin.c: (setup_source): fixed a caps leak
+ (gst_play_base_bin_change_state): nullify source and decoder when
+ going from READY to NULL so that we don't try to do weird stuff with
+ them when going from NULL to READY
+ * gst/playback/gstplaybin.c: (gst_play_bin_init): use gst_object_unref
+ instead of g_object_unref
+ (gen_video_element), (gen_audio_element): more refcounting fixes, now
+ it should be correct
+ (gst_play_bin_change_state): don't call remove_sinks if we are
+ currently disposing the object
+
+2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
+ Don't forget bass if it's there. Else left channel is silent...
+
+2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_loop),
+ (gst_a52dec_change_state):
+ Don't do sample adjusting anymore, we use float audio now.
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+ Don't fixate to non-existing properties.
+
+2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_channels),
+ (gst_a52dec_change_state):
+ Advertise that we can do surround sound.
+
+2004-11-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_reneg):
+ Add buffer-frames=0.
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get_type),
+ (dvdreadsrc_init), (dvdreadsrc_get_event_mask),
+ (dvdreadsrc_get_query_types), (dvdreadsrc_get_formats),
+ (dvdreadsrc_srcpad_event), (dvdreadsrc_srcpad_query),
+ (_seek_title), (_seek_chapter), (get_next_cell_for), (_read),
+ (seek_sector), (dvdreadsrc_get), (dvdreadsrc_open_file),
+ (dvdreadsrc_change_state), (dvdreadsrc_uri_get_type),
+ (dvdreadsrc_uri_get_protocols), (dvdreadsrc_uri_get_uri),
+ (dvdreadsrc_uri_set_uri), (dvdreadsrc_uri_handler_init):
+ * ext/dvdread/dvdreadsrc.h:
+ Add seeking, querying for bytes, sectors, title, angle and
+ chapter. Handle multiple chapters. Relicense to LGPL because
+ Billy agreed on that (thanks Billy!).
+
+2004-11-27 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_dispose):
+ call parent dispose method
+
+2004-11-27 Martin Soto <martinsoto@users.sourceforge.net>
+
+ * gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
+ (gst_audio_clock_get_internal_time):
+ Fix active <-> inactive transitions: ensure time value always
+ grows and avoid abrupt value changes.
+
+2004-11-27 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * configure.ac:
+ * gst/tta/Makefile.am:
+ * gst/tta/crc32.h:
+ * gst/tta/filters.h:
+ * gst/tta/gsttta.c:
+ * gst/tta/gstttadec.c:
+ * gst/tta/gstttadec.h:
+ * gst/tta/gstttaparse.c:
+ * gst/tta/gstttaparse.h:
+ * gst/tta/ttadec.h:
+ added TTA parser and decoder
+
+2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (probe_triggered), (check_queue), (buffer_underrun),
+ (buffer_running), (buffer_overrun), (gen_source_element),
+ (setup_source):
+ * gst/playback/gstplaybasebin.h:
+ Implement buffering. Needs some more work.
+
+2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ Fix ilog mask range overflow.
+
+2004-11-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
+ Don't omit the last (which in case of dmix is the only :) )
+ channel count. Don't set channels if <= 2.
+
+2004-11-26 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element): Removed 2 obsolete comments
+
+2004-11-26 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/vorbis/oggvorbisenc.c
+ * ext/vorbis/vorbisenc.c :
+ change description fields of those plugins to differentiate them
+ (pitivi show Encoders by description, they had the same one)
+
+2004-11-25 Christophe Fergeau <teuf@gnome.org>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (gst_play_bin_dispose),
+ (gst_play_bin_set_property), (gen_video_element),
+ (gen_audio_element):
+ Refcounting fixes for provided audio-/videosinks.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element), (setup_sinks), (gst_play_bin_change_state):
+ Don't reference all sinks, but only the video- and audiosinks.
+ The vis. element should be disposed when we're done with it.
+ We don't have any reason to keep it around. This fixes warnings
+ when reusing playbin for playing multiple audio files with
+ vis. enabled. Also release audio device on pause - idea stolen
+ from Rhythmbox.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
+ (gst_a52dec_reneg), (gst_a52dec_loop), (plugin_init):
+ * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
+ * ext/alsa/gstalsaplugin.c: (plugin_init):
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_channels),
+ (gst_dtsdec_renegotiate), (gst_dtsdec_loop), (plugin_init):
+ * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chanpos_from_gst),
+ (gst_faad_chanpos_to_gst), (gst_faad_sinkconnect),
+ (gst_faad_srcgetcaps), (gst_faad_srcconnect), (gst_faad_chain),
+ (gst_faad_change_state), (plugin_init):
+ * ext/faad/gstfaad.h:
+ * ext/vorbis/vorbis.c: (plugin_init):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ * gst-libs/gst/audio/Makefile.am:
+ * gst-libs/gst/audio/audio.c: (plugin_init):
+ * gst-libs/gst/audio/multichannel.c:
+ (gst_audio_check_channel_positions),
+ (gst_audio_get_channel_positions),
+ (gst_audio_set_channel_positions),
+ (gst_audio_set_structure_channel_positions_list),
+ (add_list_to_struct), (gst_audio_set_caps_channel_positions_list),
+ (gst_audio_fixate_channel_positions):
+ * gst-libs/gst/audio/multichannel.h:
+ * gst-libs/gst/audio/testchannels.c: (main):
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_class_init), (gst_audio_convert_init),
+ (gst_audio_convert_dispose), (gst_audio_convert_getcaps),
+ (gst_audio_convert_parse_caps), (gst_audio_convert_link),
+ (gst_audio_convert_fixate), (gst_audio_convert_channels):
+ * gst/audioconvert/plugin.c: (plugin_init):
+ Surround sound support.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
+ Fix position for discont if we're close as well. Nitpicking, but
+ saves a few milliseconds of extra waiting or skipping.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter):
+ We sometimes need parsers for playback, so add those too.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * gst/apetag/Makefile.am:
+ * gst/apetag/apedemux.c: (gst_ape_demux_get_type),
+ (gst_ape_demux_base_init), (gst_ape_demux_class_init),
+ (gst_ape_demux_init), (gst_ape_demux_get_src_formats),
+ (gst_ape_demux_get_src_query_types),
+ (gst_ape_demux_handle_src_query), (gst_ape_demux_get_event_mask),
+ (gst_ape_demux_handle_src_event), (gst_ape_demux_handle_event),
+ (gst_ape_demux_typefind_peek), (gst_ape_demux_typefind_get_length),
+ (gst_ape_demux_typefind_suggest), (gst_ape_demux_typefind),
+ (gst_ape_demux_parse_tags), (gst_ape_demux_stream_init),
+ (gst_ape_demux_stream_data), (gst_ape_demux_loop),
+ (gst_ape_demux_change_state):
+ * gst/apetag/apedemux.h:
+ * gst/apetag/apetag.c: (plugin_init):
+ * gst/typefind/gsttypefindfunctions.c: (apetag_type_find),
+ (plugin_init):
+ APE v1/2 tag reader plus typefind function.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+ Remove hacks for older core. Require newer core version
+ accordingly.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/cdxaparse/Makefile.am:
+ * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_get_type),
+ (gst_cdxaparse_class_init), (gst_cdxaparse_init),
+ (gst_cdxaparse_loop), (gst_cdxaparse_change_state), (plugin_init):
+ * gst/cdxaparse/gstcdxaparse.h:
+ * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_get_type),
+ (gst_cdxastrip_base_init), (gst_cdxastrip_class_init),
+ (gst_cdxastrip_init), (gst_cdxastrip_get_src_formats),
+ (gst_cdxastrip_get_src_query_types),
+ (gst_cdxastrip_handle_src_query), (gst_cdxastrip_get_event_mask),
+ (gst_cdxastrip_handle_src_event), (gst_cdxastrip_strip),
+ (gst_cdxastrip_sync), (gst_cdxastrip_handle_event),
+ (gst_cdxastrip_chain), (gst_cdxastrip_change_state):
+ * gst/cdxaparse/gstcdxastrip.h:
+ SVCD/VCD header stripping separated from CDXA image parsing.
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+ (plugin_init):
+ Add VCD/SVCD header typefinding for VCD/SVCD.
+ * sys/vcd/vcdsrc.c: (gst_vcdsrc_get_type), (gst_vcdsrc_base_init),
+ (gst_vcdsrc_class_init), (gst_vcdsrc_init),
+ (gst_vcdsrc_set_property), (gst_vcdsrc_get_property),
+ (gst_vcdsrc_get_event_mask), (gst_vcdsrc_get_query_types),
+ (gst_vcdsrc_get_formats), (gst_vcdsrc_srcpad_event),
+ (gst_vcdsrc_srcpad_query), (gst_vcdsrc_get),
+ (gst_vcdsrc_open_file), (gst_vcdsrc_close_file),
+ (gst_vcdsrc_change_state), (gst_vcdsrc_msf),
+ (gst_vcdsrc_recalculate), (gst_vcdsrc_uri_get_type),
+ (gst_vcdsrc_uri_get_protocols), (gst_vcdsrc_uri_get_uri),
+ (gst_vcdsrc_uri_set_uri), (gst_vcdsrc_uri_handler_init):
+ * sys/vcd/vcdsrc.h:
+ Fix up, add seeking, querying, URI interface. Works in totem now.
+
+2004-11-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ back to CVS
+
+=== release 0.8.6 ===
+
+2004-11-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/it.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ releasing 0.8.6, "IOU Love"
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c:
+ Fix unplayable files error handling. Fixes #158365
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c:
+ Fix broken mp3 typefinding. Fixes #158375
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c:
+ Fix sync on broken files. Fixes #158976
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Edward Hervey <bilboed@bilboed.com>
+
+ * ext/libpng/gstpngenc.c:
+ Copy over buffer properties. Fixes #158832
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ * ext/dvdread/dvdreadsrc.c:
+ Fixes invalid reads (#158462)
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c:
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4lsrc_calls.c:
+ Probe less and cache it. Fixes #159187.
+
+2004-11-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videorate/gstvideorate.c:
+ Handle all video formats. Fixes #159186.
+
+2004-11-16 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/synaesthesia/gstsynaesthesia.c:
+ (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+ (gst_synaesthesia_dispose), (gst_synaesthesia_finalize),
+ (gst_synaesthesia_sink_link), (gst_synaesthesia_src_getcaps),
+ (gst_synaesthesia_src_link), (gst_synaesthesia_chain),
+ (gst_synaesthesia_change_state), (plugin_init):
+ Fix up synaesthesia to work under different samplerates/ buffer sizes.
+ Force 320x200 output, as that's the only thing the underlying
+ synaesthesia implementation supports. Still needs to be made
+ re-entrant.
+
+2004-11-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Fix mpeg2enc configure check (similar to mplex check below).
+
+2004-11-14 Koop Mast <kwm@rainbow-runner.nl>
+
+ reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ Fix for gcc-2.95 (fixes #158221).
+
+2004-11-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+ Re-add clock distribution hack (until new core is released).
+ Fixes #158125.
+
+2004-11-13 Arwed v. Merkatz <v.merkatz@gmx.net>
+ * configure.ac:
+ fix mplex configure check segfaulting on some systems (bug #140994)
+
+2004-11-13 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait):
+ add debugging
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ do a wait when we enter the loop func with no data available to
+ write instead of getting into an 100% CPU loop by just returning and
+ being called again by the scheduler
+
+2004-11-13 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * configure.ac:
+ * ext/libvisual/visual.c: (gst_visual_get_type),
+ (libvisual_log_handler), (gst_visual_getcaps),
+ (gst_visual_srclink), (gst_visual_change_state), (make_valid_name),
+ (plugin_init):
+ Update libvisual to 0.1.7. Link in the debug handling to gstreamer
+ * ext/smoothwave/Makefile.am:
+ * ext/smoothwave/demo-osssrc.c: (main):
+ * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_class_init),
+ (gst_smoothwave_init), (gst_smoothwave_dispose), (gst_sw_sinklink),
+ (gst_sw_srclink), (gst_smoothwave_chain), (gst_sw_change_state),
+ (plugin_init):
+ * ext/smoothwave/gstsmoothwave.h:
+ Make gstsmoothwave a working element in the 20th century.
+
+ * gst/chart/gstchart.c: (gst_chart_init), (gst_chart_srcconnect):
+ Fix incorrect link function
+
+2004-11-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/volume/gstvolume.c:
+ Allow buffer-frames=0.
+
+2004-11-12 Iain <iaingnome@gmail.com>
+
+ * configure.ac: Check for polypaudio
+
+ * ext/Makefile.am: Build the polyp dir
+
+ * ext/polyp: The polypsink sources.
+
+2004-10-30 Iain <iaingnome@gmail.com>
+
+ * gst/interleave/interleave.c (interleave_unlink): Change the src pads
+ caps to reflect the new number of channels.
+
+2004-11-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ Fix for negotiation order problem. This would show when the
+ ALSA loopfuction was called before any other function. ALSA
+ wouldn't do anything because we're not negotiated yet, leading
+ to an infinite loop. Showed in e.g. Rhythmbox. Fixes #158006.
+
+2004-11-11 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+ No warnings (#157986).
+
+2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+ Prefer apev1/2 and id3v1 (at end of file) over musepack.
+
+2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_loop_stream):
+ Signal no-more-pads (so it works in playbin).
+
+2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/musepack/gstmusepackreader.cpp:
+ Workaround for older core.
+
+2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/imgconvert.c: (yuv420p_to_yuv422):
+ Actually test for odd width/height rather than testing whether
+ a temporary variable that was 0 before we subtracted 1 is now
+ not equal to zero (which it always is).
+
+2004-11-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
+ Fix compilation if HAVE_XVIDEO is not defined
+
+2004-11-11 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+ Fix compilation if HAVE_XVIDEO is not defined
+
+2004-11-11 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/goom/gstgoom.c: (gst_goom_class_init), (gst_goom_init),
+ (gst_goom_dispose), (gst_goom_sinkconnect), (gst_goom_chain),
+ (gst_goom_change_state), (plugin_init):
+ Use the bytestream adapter so goom doesn't depend on the input
+ buffer size.
+ Add a debug category
+
+2004-11-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+ Only set hardware parameters *after* negotiation. Before
+ negotiation, it will set ANY and that seems to cause crashes
+ (see e.g. #151288, #153227).
+
+2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+ This seems to be antique leftover. It needs to pass error
+ checking.
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
+ (gst_sdlvideosink_deinitsdl), (gst_sdlvideosink_initsdl),
+ (gst_sdlvideosink_destroy), (gst_sdlvideosink_create),
+ (gst_sdlvideosink_sinkconnect), (gst_sdlvideosink_chain):
+ Fix GstXOverlay implementation (#151059).
+
+2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+ Don't assert (#157853).
+
+2004-11-10 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+ Fix bytes/samples confustion.
+ (gst_alsa_sink_mmap), (gst_alsa_sink_loop):
+ Fix for underrun (#144389).
+
+2004-11-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+ Disable halfway-seek for pending release (since it needs a new
+ core release).
+
+2004-11-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c:
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4lsrc_calls.c:
+ add autoprobe-fps property so we can separate autoprobing parts
+
+2004-11-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c:
+ * sys/v4l/v4lsrc_calls.c:
+ initialise fourcc to catch unset fourcc's, and debug
+
+2004-11-09 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/README:
+ * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
+ * gst/playback/gstplaybin.c: (gst_play_bin_init),
+ (gst_play_bin_dispose), (gst_play_bin_set_property),
+ (remove_sinks), (setup_sinks), (gst_play_bin_change_state),
+ (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
+ (gst_play_bin_get_formats), (gst_play_bin_convert),
+ (gst_play_bin_get_query_types), (gst_play_bin_query):
+ Cleanups and some more documentation.
+
+2004-11-09 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
+ (gst_cacasink_init), (gst_cacasink_chain):
+ * ext/libcaca/gstcacasink.h:
+ Cacasink inherits from VideoSink, so let that store the clock.
+
+2004-11-09 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/README:
+ * gst/playback/gstplaybasebin.c: (group_destroy), (group_is_muted),
+ (add_stream), (unknown_type), (add_element_stream), (no_more_pads),
+ (probe_triggered), (preroll_unlinked), (new_decoded_pad),
+ (gst_play_base_bin_change_state), (gst_play_base_bin_found_tag):
+ * gst/playback/gstplaybin.c: (gen_vis_element), (remove_sinks),
+ (setup_sinks):
+ * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute),
+ (gst_stream_info_is_mute), (gst_stream_info_set_property):
+ * gst/playback/gststreaminfo.h:
+ Updated README.
+ Only switch groups if all streams have muted (EOSed).
+ Send Tags in sync with the stream playback instead of in
+ the playback/preroll phase.
+ Some cleanups, free the fakesrc elements.
+
+2004-11-09 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_caps_internal):
+ buffer-frames property was missing
+ * ext/arts/gst_arts.c:
+ rate missing from sinkcaps
+ * ext/audiofile/gstafparse.c:
+ * ext/audiofile/gstafsink.c:
+ * ext/audiofile/gstafsrc.c:
+ * ext/swfdec/gstswfdec.c:
+ int audio doesn't know buffer-frames
+ * ext/cdparanoia/gstcdparanoia.c:
+ int audio doesn't know chunksize either
+ * ext/nas/nassink.c:
+ it's endianness, not endianess
+ * gst-libs/gst/audio/audio.h:
+ make float standard pad template caps really describe float
+ * gst/law/mulaw.c: (linear_factory):
+ signed only, please
+ * gst/mpegstream/gstdvddemux.c:
+ widths of 20 are not valid
+
+2004-11-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ Submitted by: Luca Ferretti <elle.uca@infinito.it>
+
+ * po/LINGUAS:
+ * po/it.po:
+ Add Italian
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/README:
+ * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
+ * gst/playback/gstplaybasebin.c: (probe_triggered),
+ (gst_play_base_bin_change_state):
+ Updated README, added more comments for fixmes etc..
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+ We can remove this hack now.
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_ayuv),
+ (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+ (gst_videomixer_blend_buffers), (gst_videomixer_loop):
+ Only mix AYUV for maximum quality.
+
+2004-11-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_demux_src_query),
+ (gst_ogg_demux_push), (gst_ogg_pad_push):
+ Let's act as if we're synchronized now! :).
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ Add some debug.
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+ (gst_alpha_set_property), (gst_alpha_sink_link),
+ (gst_alpha_set_ayuv), (gst_alpha_set_i420),
+ (gst_alpha_chroma_key_ayuv), (gst_alpha_chroma_key_i420),
+ (gst_alpha_init_params), (gst_alpha_chain):
+ Implement alpha functions for AYUV too, this increases
+ accuracy quite a bit.
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_caps_remove_format_info):
+ * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+ (shrink12), (img_get_alpha_info), (deinterlace_line),
+ (deinterlace_line_inplace):
+ * gst/ffmpegcolorspace/imgconvert_template.h:
+ Added AYUV colorspace and handle RGBA a bit more respectful.
+
+2004-11-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ Actually always send a discont (cornercase when resending the
+ same serial-tagged chain twice).
+
+2004-11-08 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_clear),
+ (gst_ximagesink_finalize):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
+ (gst_xvimagesink_finalize): Some more cleanups, leaks fixed and checks.
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/typefind/gsttypefindfunctions.c: (aac_type_find):
+ Don't segfault on NULL data.
+
+2004-11-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (unlinked):
+ * gst/playback/gstplay-marshal.list:
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (gst_play_base_bin_init), (group_create), (get_active_group),
+ (get_building_group), (group_destroy), (group_commit),
+ (queue_overrun), (remove_groups), (add_stream), (unknown_type),
+ (add_element_stream), (no_more_pads), (probe_triggered),
+ (preroll_unlinked), (new_decoded_pad), (removed_decoded_pad),
+ (state_change), (setup_source), (gst_play_base_bin_get_property),
+ (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+ (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+ (remove_sinks), (setup_sinks), (gst_play_bin_change_state):
+ Add support for chained ogg files. Prepare for playlist
+ support. This patch introduces the concept of pad groups, which
+ together compose one playable media file.
+
+2004-11-07 David Schleef <ds@schleef.org>
+
+ * testsuite/gst-lint: Check for pad templates that aren't statically
+ scoped.
+
+2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/musepack/Makefile.am:
+ * ext/musepack/gstmusepackdec.cpp:
+ * ext/musepack/gstmusepackdec.h:
+ * ext/musepack/gstmusepackreader.cpp:
+ * ext/musepack/gstmusepackreader.h:
+ Add musepack decoder.
+ * ext/faad/gstfaad.c: (gst_faad_base_init):
+ Make pad templates static.
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+ (plugin_init):
+ Add musepack typefinder, make mp3 typefinding work halfway stream,
+ which doesn't actually work yet because id3demux doesn't implement
+ _get_length().
+
+2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop):
+ Fix interrupt event handling (#144436).
+
+2004-11-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
+ Hide unused glory.
+
+2004-11-06 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/vorbis/vorbisenc.c: (raw_caps_factory):
+ Fix weird caps (#157548).
+
+2004-11-06 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/rtp/gstrtpgsmparse.c: (gst_rtpgsm_caps_nego):
+ Add missing NULL terminator (#157543).
+
+2004-11-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcp.h:
+ * gst/tcp/gsttcpclientsink.c:
+ * gst/tcp/gsttcpclientsrc.c:
+ * gst/tcp/gsttcpserversink.c:
+ * gst/tcp/gsttcpserversrc.c:
+ ports can go up to 65535. Move common defines to gsttcp.h
+
+2004-11-05 Wim Taymans <wim@fluendo.com>
+
+ * gst/videotestsrc/videotestsrc.c: (paint_setup_Y41B),
+ (paint_hline_Y41B), (paint_setup_Y42B), (paint_hline_Y42B):
+ Added two more colorspaces.
+
+2004-11-05 Wim Taymans <wim@fluendo.com>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+ (yuv422p_to_yuv422), (yuv420p_to_yuv422), (shrink12),
+ (img_convert), (deinterlace_line), (deinterlace_line_inplace):
+ More stride fixes.
+
+2004-11-05 Wim Taymans <wim@fluendo.com>
+
+ * gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add),
+ (gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain):
+ * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
+ (gst_videomixer_fill_checker), (gst_videomixer_blend_buffers),
+ (gst_videomixer_loop):
+ More stride fixes.
+
+2004-11-05 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ don't overflow data buffer. Flush not needed sync data when syncing
+ failed.
+
+2004-11-04 Wim Taymans <wim@fluendo.com>
+
+ * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+ (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
+ (gst_alpha_get_property), (gst_alpha_add), (gst_alpha_chroma_key),
+ (gst_alpha_init_params), (gst_alpha_chain),
+ (gst_alpha_change_state):
+ Updated the chroma keying algorithm with something more
+ sophisticated.
+
+2004-11-03 Wim Taymans <wim@fluendo.com>
+
+ * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
+ (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+ (gst_videomixer_blend_buffers), (gst_videomixer_loop):
+ Fix stride issues. Does not completely work for odd
+ heights.
+
+2004-11-03 Wim Taymans <wim@fluendo.com>
+
+ * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+ (gst_alpha_chroma_key), (gst_alpha_chain):
+ Fix stride issues. Does not completely work for odd
+ heights.
+
+2004-11-03 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+ * gst/videoscale/videoscale.c: (videoscale_find_by_structure):
+ leak fixes
+
+2004-11-03 Wim Taymans <wim@fluendo.com>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+ (avpicture_alloc):
+ * gst/ffmpegcolorspace/imgconvert_template.h:
+ Use correct _fill function to get correct strides.
+
+2004-11-02 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
+ (qtdemux_parse_udta), (qtdemux_tag_add), (gst_qtdemux_handle_esds):
+ Change all g_print()s to debugging. Add a bunch of consistency
+ checks.
+
+2004-11-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+ (try_to_link_1), (get_our_ghost_pad), (remove_element_chain),
+ (unlinked), (no_more_pads), (close_link):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+ (unknown_type), (add_element_stream), (new_decoded_pad),
+ (removed_decoded_pad), (setup_source):
+ * gst/playback/gststreaminfo.c: (gst_stream_info_get_type),
+ (gst_stream_info_class_init), (gst_stream_info_init),
+ (gst_stream_info_new), (gst_stream_info_dispose),
+ (stream_info_mute_pad), (gst_stream_info_set_property),
+ (gst_stream_info_get_property):
+ * gst/playback/gststreaminfo.h:
+ Fix playback of multiple files.
+ a slightly different approach to handling dynamic pad removals.
+ This one only looks at pads that we have linked.
+
+2004-11-01 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_finalize): fix an "invalid
+ free" warning from libc.
+
+2004-11-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+ (get_unconnected_element), (remove_starting_from), (pad_removed),
+ (close_link):
+ Implement support for dynamic pad changing. We listen to "live"
+ pad removals (i.e. while playing) and re-setup autoplugging
+ after that. Playbasebin/playbin need some more work for this
+ to finally work, but decodebin supports (and replugs) chained
+ ogg now.
+
+2004-11-02 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose),
+ (gst_alsa_finalize):
+ * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init),
+ (gst_cdaudio_finalize):
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+ (cdparanoia_finalize):
+ * ext/divx/gstdivxdec.c: (gst_divxdec_dispose):
+ * ext/divx/gstdivxenc.c: (gst_divxenc_dispose):
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+ (dvdreadsrc_finalize):
+ * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
+ (gst_flacdec_finalize):
+ * ext/flac/gstflacenc.c: (gst_flacenc_class_init),
+ (gst_flacenc_finalize):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init),
+ (gst_gnomevfssink_finalize):
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init),
+ (gst_gnomevfssrc_finalize):
+ * ext/libfame/gstlibfame.c: (gst_fameenc_class_init),
+ (gst_fameenc_finalize):
+ * ext/nas/nassink.c: (gst_nassink_class_init),
+ (gst_nassink_finalize):
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize),
+ (gst_sdlvideosink_class_init):
+ * ext/sndfile/gstsf.c: (gst_sf_dispose):
+ * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose):
+ * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose):
+ * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose):
+ * gst-libs/gst/xwindowlistener/xwindowlistener.c:
+ (gst_x_window_listener_dispose):
+ * gst/audioscale/gstaudioscale.c:
+ * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init),
+ (play_on_demand_finalize):
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose):
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
+ * sys/cdrom/gstcdplayer.c: (cdplayer_class_init),
+ (cdplayer_finalize):
+ * sys/glsink/glimagesink.c: (gst_glimagesink_finalize),
+ (gst_glimagesink_class_init):
+ * sys/oss/gstosselement.c: (gst_osselement_class_init),
+ (gst_osselement_finalize):
+ * sys/oss/gstosssink.c: (gst_osssink_dispose):
+ * sys/oss/gstosssrc.c: (gst_osssrc_dispose):
+ * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose):
+ Fixes a bunch of problems with finalize and dispose functions,
+ either assumptions that dispose is only called once, or not calling
+ the parent class dispose/finalize function
+
+2004-11-01 Stefan Kost <ensonic@users.sf.net>
+
+ * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link):
+ added two api precondition guards
+ use g_strdup with getenv to fix crash when using ENVVAR
+
+2004-11-01 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/esd/esdsink.c: (gst_esdsink_class_init),
+ (gst_esdsink_finalize):
+ Use a finalize function, not dispose, and more importantly,
+ call the parent class finalize function too
+
+2004-11-01 Johan Dahlin <johan@gnome.org>
+
+ * ext/ogg/gstoggdemux.c:
+ * gst/tags/gstvorbistag.c:
+ Plug leaks.
+
+2004-10-31 Benjamin Otte <otte@gnome.org>
+
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+ lotsa memleaks today. But they're all small...
+
+2004-10-31 Benjamin Otte <otte@gnome.org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ another memleak crushed
+
+2004-10-31 Benjamin Otte <otte@gnome.org>
+
+ * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
+ fix memleak
+
+2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ Hack to prevent crash when going to READY inside signal handler
+ while this function is active.
+
+2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/ffmpegcolorspace/Makefile.am:
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/common.h:
+ * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
+ * gst/ffmpegcolorspace/dsputil.h:
+ * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_get_palette), (gst_ffmpeg_set_palette),
+ (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_smpfmt_to_caps),
+ (gst_ffmpegcsp_codectype_to_caps), (gst_ffmpeg_caps_to_smpfmt),
+ (gst_ffmpeg_caps_to_pixfmt), (gst_ffmpegcsp_caps_with_codectype),
+ (gst_ffmpegcsp_avpicture_fill):
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
+ (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_get_type),
+ (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
+ (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
+ (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
+ (gst_ffmpegcsp_get_property), (gst_ffmpegcolorspace_register):
+ * gst/ffmpegcolorspace/imgconvert.c:
+ (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+ (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
+ (avpicture_get_size), (avcodec_get_pix_fmt_loss),
+ (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
+ (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
+ (yuv422_to_yuv420p), (uyvy422_to_yuv420p), (uyvy422_to_yuv422p),
+ (yuv422_to_yuv422p), (yuv422p_to_yuv422), (yuv422p_to_uyvy422),
+ (uyvy411_to_yuv411p), (yuv420p_to_yuv422), (C_JPEG_TO_CCIR),
+ (img_convert_init), (img_apply_table), (shrink41), (shrink21),
+ (shrink12), (shrink22), (shrink44), (grow21_line), (grow41_line),
+ (grow21), (grow22), (grow41), (grow44), (conv411),
+ (gif_clut_index), (build_rgb_palette), (bitcopy_n), (mono_to_gray),
+ (monowhite_to_gray), (monoblack_to_gray), (gray_to_mono),
+ (gray_to_monowhite), (gray_to_monoblack), (avpicture_alloc),
+ (avpicture_free), (is_yuv_planar), (img_convert),
+ (get_alpha_info_pal8), (img_get_alpha_info), (deinterlace_line),
+ (deinterlace_line_inplace), (deinterlace_bottom_field),
+ (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
+ * gst/ffmpegcolorspace/imgconvert_template.h:
+ * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
+ * gst/ffmpegcolorspace/mmx.h:
+ * gst/ffmpegcolorspace/utils.c: (av_mallocz), (av_strdup),
+ (av_fast_realloc), (av_mallocz_static), (av_free_static),
+ (av_freep), (avcodec_get_context_defaults),
+ (avcodec_alloc_context), (avcodec_init):
+ Sync back from gst-ffmpeg. Deprecates ffcolorspace. Adds palette
+ handling plus update from ffmpeg CVS. Large clean-up.
+
+2004-10-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/Makefile.am:
+ We need the marshallers for decodebin, too.
+
+2004-10-30 David Schleef <ds@schleef.org>
+
+ * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Make
+ quicktime typefinding work with 64-bit offsets.
+
+2004-10-30 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event):
+ Set EOS on the element when processing an EOS event.
+ * ext/speex/gstspeexdec.h:
+ * ext/speex/gstspeexenc.h:
+ Only keep a const ptr to the mode
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data),
+ (gst_riff_create_audio_template_caps):
+ Allow WMAV3, with up to 6 channels.
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_request_new_pad):
+ Don't call gst_pad_set_event_function on a sink pad.
+ * gst/mpegstream/gstdvddemux.c:
+ (gst_dvd_demux_get_subpicture_stream),
+ (gst_dvd_demux_set_cur_audio), (gst_dvd_demux_set_cur_subpicture):
+ Copy the explicit caps that were set across to the cur_* pads,
+ instead of trying to use a possibly non-existent negotiated caps.
+ Reset the type of subpicture pads to UNKNOWN after calling
+ init_stream, so that the caps get set.
+
+2004-10-29 Martin Pitt <martin.pitt@canonical.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+ Don't touch buffer if it is of size 0 (fixes #151064).
+
+2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push):
+ Synchronized discont handling.
+
+2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+ (gst_ogg_demux_push):
+ Make seeking sort-of exact again (fixes #156387).
+
+2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (unknown_type),
+ (add_element_stream), (new_decoded_pad),
+ (gst_play_base_bin_change_state):
+ * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
+ (gst_stream_info_init), (gst_stream_info_new),
+ (gst_stream_info_dispose), (gst_stream_info_get_property):
+ * gst/playback/gststreaminfo.h:
+ Make caps explicitely available. Makes testing for unsupported
+ types possible. Improves error reporting.
+
+2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_buffer_to_default_format):
+ Really don't touch read-only buffers (#156563).
+
+2004-10-29 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewd by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+ Fix memleak (#155223).
+
+2004-10-29 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/.cvsignore:
+ * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
+ (gst_multifdsink_class_init), (gst_multifdsink_init),
+ (gst_multifdsink_add), (gst_multifdsink_remove),
+ (gst_multifdsink_remove_client_link), (is_sync_frame),
+ (gst_multifdsink_new_client),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+ (gst_multifdsink_get_property):
+ * gst/tcp/gstmultifdsink.h:
+ Added burst on connect sync_method, deprecated sync_clients,
+ streamlined the sync code some more.
+
+2004-10-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (thread_error), (setup_source),
+ (gst_play_base_bin_change_state):
+ Improve error reporting.
+
+2004-10-28 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/fdsetstress.c: (mess_some_more), (run_test), (main):
+ * gst/tcp/gstfdset.c: (nearest_pow), (resize), (ensure_size),
+ (gst_fdset_new), (gst_fdset_free), (gst_fdset_set_mode),
+ (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+ (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+ (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+ (gst_fdset_wait):
+ Added more locks around fdset structures. Fixed/reworked
+ the poll array resizing code.
+ Added stress test for fdset.
+
+2004-10-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
+ fix build
+
+2004-10-28 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
+ fix link function to always query channels and query width for
+ floats
+ * configure.ac:
+ add equalizer dir
+ * gst/equalizer/Makefile.am:
+ * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_get_type),
+ (gst_iir_equalizer_base_init), (gst_iir_equalizer_class_init),
+ (gst_iir_equalizer_init), (gst_iir_equalizer_finalize),
+ (arg_to_scale), (setup_filter),
+ (gst_iir_equalizer_compute_frequencies),
+ (gst_iir_equalizer_set_property), (gst_iir_equalizer_get_property),
+ (gst_iir_equalizer_filter_inplace), (gst_iir_equalizer_setup),
+ (plugin_init):
+ add an equalizer
+
+2004-10-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ Submitted by: Kjartan Maraas <kmaraas@broadpark.no>
+
+ * po/LINGUAS:
+ * po/nb.po:
+ Added Norwegian Bokmaal translation
+
+2004-10-27 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ Don't break on options (fixes #156488).
+
+2004-10-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/cdaudio/Makefile.am:
+ * sys/Makefile.am:
+ fix build on older automake
+
+2004-10-26 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
+ (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
+ Allow a little margin when negotiating the framerate.
+
+2004-10-26 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/level/gstlevel.c:
+ synchonised naming of pads and pad-templates
+
+2004-10-26 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+ (gst_ogg_demux_handle_event), (_find_chain_get_unknown_part),
+ (_find_streams_check), (gst_ogg_demux_push):
+ Fix EOS again. Needs to be done in a better way. We should not
+ remove the pad if there is no new chained stream.
+
+2004-10-26 Iain <iaingnome@gmail.com>
+
+ * ext/ogg/gstoggdemux.c (gst_ogg_pad_new): Free the tag list.
+ * gst/audioscale/gstaudioscale.c (gst_audioscale_link): Free the copy
+ of the caps.
+ * gst/interleave/interleave.c (interleave_class_init): Hook up release
+ pad.
+ (interleave_release_pad): Remove the pad.
+ * gst/level/gstlevel.c: Allow the level to take 1 or 2 channels.
+ * sys/sunaudio/gstsunaudio.c (gst_sunaudio_setparams): Pay attention to
+ the set device.
+ * sys/xvimage/xvimagesink.c (gst_xvimagesink_get_xv_support): Free the
+ attrs
+ (gst_xvimagesink_xcontext_clear): Free the xcontext.
+ (gst_xvimagesink_finalize): Free the par.
+
+2004-10-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavimux.c: (gst_avimux_audsinkconnect),
+ (gst_avimux_stop_file):
+ First calculate the rate, and only then use it. Hdr.rate is a
+ multiple and not a derivative of hdr.scale. Scale is not the
+ same as blockalign but is solely related to rate.
+
+2004-10-26 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_init),
+ (gst_gnomevfssink_handle_event), (gst_gnomevfssink_chain):
+ Implement seeking.
+
+2004-10-25 James Henstridge <james@jamesh.id.au>
+
+ Reviewed by: David Schleef <ds@schleef.org>
+
+ * examples/gstplay/player.c: (got_stream_length), (main):
+ * examples/seeking/cdplayer.c: (update_scale):
+ * examples/seeking/seek.c: (format_value), (update_scale):
+ * examples/seeking/spider_seek.c: (format_value), (update_scale),
+ (stop_seek):
+ Build fixes on AMD64.
+
+2004-10-25 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ reviewed by: Ronald Bultje <rbultje at gnome dot org>
+
+ * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
+ Fix for some v4l cards which hang in v4lsrc
+
+2004-10-25 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_remove),
+ (gst_ogg_demux_push), (gst_ogg_chains_clear):
+ Make sure to remove the pad when a new chain is
+ encountered. Set some vars to NULL so we don't try
+ to reference freed memory.
+
+2004-10-25 Wim Taymans <wim@fluendo.com>
+
+ * examples/seeking/Makefile.am:
+ * examples/seeking/cdplayer.c: (update_scale):
+ * examples/seeking/chained.c: (unlinked), (new_pad), (main):
+ * examples/seeking/playbin.c: (make_playerbin_pipeline),
+ (format_value), (update_scale), (iterate), (start_seek),
+ (stop_seek), (print_media_info), (play_cb), (pause_cb), (stop_cb),
+ (print_usage), (main):
+ Added some more examples, update others.
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
+ * ext/speex/gstspeexdec.c: (speex_dec_chain):
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ Add codec-name metadata.
+
+2004-10-25 Takao Fujiwara <Takao.Fujiwara@Sun.COM>
+
+ Reviewd by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+ * ext/alsa/gstalsamixertrack.h:
+ * po/POTFILES.in:
+ ALSA mixer track label internationalization (#154054).
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ Export bitrate as metadata.
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+ * ext/alsa/gstalsamixertrack.h:
+ Fix names, fix loop.
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/speex/gstspeexdec.c: (gst_speex_dec_init),
+ (speex_dec_convert):
+ sinkconvert function so oggdemux can get the file length (totem).
+
+2004-10-25 James Morrison <ja2morri@csclub.uwaterloo.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+ Don't push incomplete packets.
+ * gst/typefind/gsttypefindfunctions.c: (m4a_type_find):
+ Fix MPEG-4 audio typefinding.
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/Makefile.am:
+ * sys/v4l/gstv4l.c: (plugin_init):
+ * sys/v4l/gstv4lelement.c: (gst_v4lelement_get_type),
+ (gst_v4lelement_init), (gst_v4lelement_dispose),
+ (gst_v4lelement_change_state):
+ * sys/v4l/gstv4lelement.h:
+ * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_open),
+ (gst_v4l_xoverlay_close), (idle_refresh),
+ (gst_v4l_xoverlay_set_xwindow_id):
+ * sys/v4l/gstv4lxoverlay.h:
+ * sys/v4l/v4l-overlay_calls.c:
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l2/Makefile.am:
+ * sys/v4l2/gstv4l2.c: (plugin_init):
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_type),
+ (gst_v4l2element_init), (gst_v4l2element_dispose),
+ (gst_v4l2element_change_state):
+ * sys/v4l2/gstv4l2element.h:
+ * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_open),
+ (gst_v4l2_xoverlay_close), (idle_refresh),
+ (gst_v4l2_xoverlay_set_xwindow_id):
+ * sys/v4l2/gstv4l2xoverlay.h:
+ * sys/v4l2/v4l2-overlay_calls.c:
+ * sys/v4l2/v4l2_calls.h:
+ Remove client-side overlay handling, use the X-server v4l plugin
+ for that. Nicer overlay, less code. Also make the plugin
+ compileable without X (but then without overlay, obviously).
+ Makes xwindowlistener obsolete, should we remove that?
+
+2004-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosssrc.c: (gst_osssrc_get_time), (gst_osssrc_get),
+ (gst_osssrc_src_query):
+ * sys/oss/gstosssrc.h:
+ OK, so people want offset in DEFAULT. This time, actually fix all
+ cases.
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+ Add FPS properly.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfmux.c:
+ * gst/avi/gstavimux.c:
+ Framerate.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2element_set_property):
+ Fix properties (channel, norm, frequency).
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_property):
+ Flag typo.
+ * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults):
+ No warnings.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_clear_format_list):
+ Fix hang.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2element.h:
+ Yet Another Hack (tm) for kernel header borkedness.
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
+ (gst_v4l2src_v4l2fourcc_to_caps), (gst_v4l2_fourcc_from_structure),
+ (gst_v4l2src_link), (gst_v4l2src_getcaps),
+ (gst_v4l2src_change_state):
+ * sys/v4l2/gstv4l2src.h:
+ * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_capture_init),
+ (gst_v4l2src_capture_start), (gst_v4l2src_capture_stop):
+ Fix caps, keep track of state, work.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+ Quiet.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosssrc.c: (gst_osssrc_get):
+ Don't mix bytes and samples.
+
+2004-10-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggmux.c:
+ Basic pad template which accepts OGM tracks, speex, flac, vorbis
+ and theora. Any is incorrect.
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_vidsink_link):
+ Fix caps.
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_base_init):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_base_init),
+ (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_srcconnect),
+ (gst_v4lmjpegsrc_getcaps), (gst_v4lmjpegsrc_change_state):
+ * sys/v4l/gstv4lmjpegsrc.h:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
+ (gst_v4lsrc_change_state):
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_start),
+ (gst_v4lmjpegsrc_capture_stop):
+ Fix caps. Keep track of internal state. Work.
+
+2004-10-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/Makefile.am:
+ Fix the build fixes.
+
+2004-10-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (_find_chain_seek),
+ (gst_ogg_pad_push):
+ Check for pad availability before using it.
+ * ext/ogg/gstoggdemux.c: (_find_chain_process):
+ Fix parsing of chained ogg. Needs more work on the decoder side.
+
+2004-10-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/spectrum/Makefile.am:
+ * gst/spectrum/demo-osssrc.c: (spectrum_chain), (main),
+ (idle_func):
+ Fix demo and reenable it. Yes, I'm currently playing with audio
+ analysis tools
+
+2004-10-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ We love it if files that start at zero work too...
+
+2004-10-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+ Handle files with missing EOS headers.
+
+2004-10-21 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/tcp/gsttcpserversink.c:
+ (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_init_send):
+ Zero some variables first (need for accept not to return EINVAL)
+
+2004-10-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (gst_ogg_pad_push):
+ * ext/theora/theoradec.c: (theora_dec_sink_convert),
+ (theora_dec_chain):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+ (gst_vorbis_dec_init), (vorbis_dec_convert), (vorbis_dec_chain):
+ Seeking and querying finetune.
+
+2004-10-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/raw1394/Makefile.am:
+ fix the build
+
+2004-10-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+ Wrong return.
+ * gst/playback/Makefile.am:
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
+ * gst/playback/gstplay-marshal.list:
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init):
+ Fix marshallers.
+
+2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event):
+ Silence.
+
+2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
+ (gst_ogg_pad_push):
+ Yay for non-lineair granulepos in theora.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
+ (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
+ * ext/dv/gstdvdec.h:
+ Make sure we renegotiate aspect ratio when the camera switches.
+
+2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (gst_ogg_pad_push):
+ Start at zero.
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ Skip headers. Bad idea for chained ogg, but fixes seeking.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ I swear, this is the last time I touch this.
+
+2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
+ (_read_bos_process), (gst_ogg_demux_iterate), (gst_ogg_pad_new):
+ Faster seeking.
+ * ext/theora/theoradec.c: (theora_dec_sink_convert):
+ Time-to-default conversion.
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ Don't error on unknown packets, just skip. We should probably
+ read them if we want to support chained ogg.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ Added cdaudio to wrong list.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ Revive cdaudio.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
+ (gst_dvdec_video_link), (gst_dvdec_push):
+ * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
+ (gst_smokeenc_resync), (gst_smokeenc_chain):
+ Fix mimetype on smoke encoder.
+ Add aspect ratio to dvdec. Not sure if these
+ values are correct though....
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init):
+ Fix vorbis property descriptions and ranges.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+ Really do nothing when no data is available.
+ Go to the playing state when the stream is not seekable
+ instead of failing.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/cdaudio/gstcdaudio.c: (_do_init), (gst_cdaudio_base_init),
+ (gst_cdaudio_get_event_masks), (gst_cdaudio_send_event),
+ (gst_cdaudio_query), (plugin_init), (cdaudio_uri_get_type),
+ (cdaudio_uri_get_protocols), (cdaudio_uri_get_uri),
+ (cdaudio_uri_set_uri), (cdaudio_uri_handler_init):
+ Added uri handler for cd://
+ Port to new API.
+
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+ (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (no_more_pads), (close_link), (type_found):
+ * gst/playback/gstplaybasebin.c: (gen_preroll_element),
+ (remove_prerolls), (unknown_type), (add_element_stream),
+ (new_decoded_pad), (setup_source), (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_link_stream):
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_vis_element), (remove_sinks), (setup_sinks):
+ * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+ (gst_stream_info_get_type), (gst_stream_info_class_init),
+ (gst_stream_info_init), (gst_stream_info_new),
+ (gst_stream_info_dispose), (stream_info_mute_pad),
+ (gst_stream_info_set_property), (gst_stream_info_get_property):
+ * gst/playback/gststreaminfo.h:
+ Add sink padtemplate to decodebin.
+ Added some more comments.
+ Make queue size configurable in playbasebin.
+ Added possibility to use elements as sinks (ex cdaudio).
+
+2004-10-15 Wim Taymans <wim@fluendo.com>
+
+ * ext/speex/gstspeexenc.c: (gst_speexenc_class_init),
+ (gst_speexenc_chain):
+ Fix speex timestamps so that it gets muxed properly.
+
+2004-10-15 Wim Taymans <wim@fluendo.com>
+
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+ (gst_dv1394src_base_init), (gst_dv1394src_class_init),
+ (gst_dv1394src_init), (gst_dv1394src_dispose),
+ (gst_dv1394src_iso_receive), (gst_dv1394src_discover_avc_node),
+ (gst_dv1394src_change_state), (gst_dv1394src_get_event_mask),
+ (gst_dv1394src_event), (gst_dv1394src_get_formats),
+ (gst_dv1394src_convert), (gst_dv1394src_get_query_types),
+ (gst_dv1394src_query), (gst_dv1394src_uri_get_type),
+ (gst_dv1394src_uri_get_protocols), (gst_dv1394src_uri_get_uri),
+ (gst_dv1394src_uri_set_uri), (gst_dv1394src_uri_handler_init):
+ * ext/raw1394/gstdv1394src.h:
+ Added conversion/query functions.
+ Update buffer timestamps,
+ Added signals.
+ Added uri dv:// so it might play from the firewire in playbin.
+ Fix a possible leak.
+ Added debugging.
+
+2004-10-15 Wim Taymans <wim@fluendo.com>
+
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_class_init),
+ (gst_dv1394src_init), (gst_dv1394src_set_property),
+ (gst_dv1394src_get_property), (gst_dv1394src_iso_receive),
+ (gst_dv1394src_discover_avc_node), (gst_dv1394src_change_state):
+ * ext/raw1394/gstdv1394src.h:
+ Added AV/C VTR control support needed for some cameras.
+ Added automatic port detection.
+ Added properties for selecting the channel.
+ The configure.ac script is not yet updated to reflect the
+ new libavc1394 and librom1394 dependencies.
+
+2004-10-15 Wim Taymans <wim@fluendo.com>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (qtdemux_parse), (gst_qtdemux_handle_esds):
+ An esds box is not a container.
+ Fix parsing of mp4v boxes.
+ Do not try to renegotiate fps for each frame. Need to
+ find a better method. This should fix mp4 playback.
+
+2004-10-14 David Schleef <ds@schleef.org>
+
+ * configure.ac: update for swfdec-0.3 and liboil-0.2
+ * ext/swfdec/gstswfdec.c: update for swfdec-0.3
+ * ext/swfdec/gstswfdec.h: same
+ * gst/videofilter/gstvideobalance.c: update for liboil-0.2
+ * gst/videotestsrc/videotestsrc.c: same
+
+2004-10-14 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
+ (is_sync_frame), (gst_multifdsink_new_client),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
+ Turn warnings into info.
+ Don't allow a state change in the streaming thread.
+
+2004-10-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/oggvorbisenc.c:
+ * ext/vorbis/vorbisdec.c:
+ fix template sample rate
+
+2004-10-13 Wim Taymans <wim@fluendo.com>
+
+ * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+ Decoding the header first fixes some problems in resyncing
+ in more mp3s.
+
+2004-10-12 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_vis_element), (remove_sinks), (setup_sinks):
+ Added vis plugin support, need to configure the vis
+ element to activate it.
+
+2004-10-12 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get),
+ (gst_gnomevfssrc_srcpad_query), (gst_gnomevfssrc_srcpad_event):
+ Some debug.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+ (gst_avi_demux_handle_src_event), (gst_avi_demux_read_superindex),
+ (gst_avi_demux_read_subindexes), (gst_avi_demux_add_stream),
+ (gst_avi_demux_stream_index), (gst_avi_demux_skip),
+ (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
+ (gst_avi_demux_massage_index), (gst_avi_demux_stream_header):
+ * gst/avi/gstavidemux.h:
+ Support for openDML-2.0 indx/ix## chunks. Support for broken index
+ recovery (where, if part of the index is broken, we will still read
+ the rest of the index and recover the broken part by stream
+ scanning). More broken media support. EOS workarounds. General AVI
+ braindamage headache recovery. Aspirin included.
+
+2004-10-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_open),
+ (cdparanoia_event), (cdparanoia_query):
+ Get rid of hideous lead-in.
+
+2004-10-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (setup_source):
+ Wrong var used to get g_list_next.
+
+2004-10-11 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+ (cdparanoia_get), (cdparanoia_open):
+ Report discid as metadata, add duration.
+
+2004-10-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (setup_source):
+ Cleanup the previous pipeline a little earlier for the
+ case that a source element provides raw data.
+
+2004-10-11 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ reset v1 tag offset when there is no v1 tag. Fixes id3demux always
+ consuming the last 128 bytes, even though it was valid mp3 data.
+
+2004-10-10 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
+ (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+ Change g_warnings to GST_WARNING_OBJECT and fix colourspace issue
+
+2004-10-10 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps):
+ Fix for webcams that support only specific width or height
+
+2004-10-09 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_stop_file):
+ Fix wrong discont event setup (fixes #154967).
+
+2004-10-09 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/auparse/gstauparse.c: (gst_auparse_chain):
+ Error out on invalid data (fixes #154807).
+
+2004-10-09 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/dvdread/dvdreadsrc.c: (_read):
+ Make titles > 0 work again (fixes #154834).
+
+2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_template_caps):
+ WMV3 missing in template caps.
+
+2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+ OK, so the original code was too strict. It makes random AVI files
+ hang for seconds upon opening, which is unacceptable and is far
+ beyond the original goal of getting multiple chunks for one-chunk
+ sounc stream files. So now do just that.
+
+2004-10-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (setup_source),
+ (gst_play_base_bin_change_state):
+ Actually clean up streaminfo if output fails. This would trigger
+ if, for example, there was no CD in the drive. No preroll, so
+ a streaminfo structure is created, but the subsequent state change
+ of the thread fails.
+ * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+ Don't change state if parent failed.
+
+2004-10-08 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+ (gst_play_bin_init), (gst_play_bin_get_property), (handoff),
+ (gen_video_element), (remove_sinks):
+ Add small bits of code for screenshot handling.
+
+2004-10-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybin.c: (gst_play_bin_set_property),
+ (gen_video_element), (gen_audio_element), (setup_sinks):
+ Don't assume the user provided sinks are named "sink"...
+
+2004-10-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (gen_preroll_element),
+ (unknown_type), (setup_source), (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_link_stream):
+ Do not try to autoplug sources that generate raw streams like
+ cdparanoia.
+ disconnect the preroll overrun signal when we don't need it anymore.
+
+2004-10-08 Milosz Derezynski <internalerror.rez@fhtw-berlin.de>
+
+ * ext/cdparanoia/gstcdparanoia.c: (_do_init),
+ Added reworked patch from #154903 from milosz derezynski (deadchip).
+
+2004-10-08 Wim Taymans <wim@fluendo.com>
+
+ * ext/cdparanoia/gstcdparanoia.c: (_do_init),
+ (cdparanoia_base_init), (cdparanoia_class_init), (cdparanoia_init),
+ (cdparanoia_dispose), (cdparanoia_get), (cdparanoia_change_state),
+ (cdparanoia_convert), (cdparanoia_uri_get_type),
+ (cdparanoia_uri_get_protocols), (cdparanoia_uri_get_uri),
+ (cdparanoia_uri_set_uri), (cdparanoia_uri_handler_init):
+ * ext/cdparanoia/gstcdparanoia.h:
+ This adds the cdda://<tracknum> uri.
+
+2004-10-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+ (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (no_more_pads), (close_link), (type_found):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (unknown_type), (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_link_stream):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_init),
+ (gst_play_bin_set_property), (gen_video_element),
+ (gen_audio_element), (setup_sinks):
+ * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+ (gst_stream_info_get_type), (gst_stream_info_class_init),
+ (gst_stream_info_init), (gst_stream_info_new),
+ (gst_stream_info_dispose), (stream_info_mute_pad),
+ (gst_stream_info_set_property), (gst_stream_info_get_property):
+ * gst/playback/gststreaminfo.h:
+ Reuse the audio and video bins.
+ Some internal cleanups in the stream selection code.
+
+2004-10-08 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+ (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
+ * sys/xvimage/xvimagesink.h: Reverting Ronald's changes as the issue is
+ not coming from those elements. Moreover these elements should not keep
+ the xid they have been given when in NULL state.
+
+2004-10-07 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+ (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
+ * sys/xvimage/xvimagesink.h:
+ Actually only create a new toplevel window if we're not gonna
+ embed it right after.
+
+2004-10-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream):
+ * gst/playback/gstplaybin.c: (setup_sinks):
+ Implement muting/unmuting of streams, mute streams that are not
+ used.
+
+2004-10-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/typefind/gsttypefindfunctions.c: (ac3_type_find),
+ (plugin_init):
+ Added lame audio/x-ac3 typefind function.
+
+2004-10-06 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * configure.ac:
+ bump nano to cvs
+
+=== release 0.8.5 ===
+
+2004-10-06 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ releasing 0.8.5, "Take You On"
+
+2004-10-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+ (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+ (no_more_pads), (close_link), (type_found):
+ * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+ * gst/playback/gstplaybin.c: (gen_video_element):
+ Do not signal the no_more_pads after the first pad when
+ we are plugging a non dynamic element with multiple
+ output pads (like swfdec, dvdec, ...).
+
+2004-10-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ bump for prerelease
+
+2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/wavparse/gstwavparse.c:
+ add ATRAC3 to STATIC CAPS to fix a warning
+
+ * gst/matroska/ebml-read.c:
+ * gst-libs/gst/riff/riff-read.c:
+ fix typos
+
+2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst-libs/gst/riff/riff-media.c:
+ generate caps for ATRAC3 audio streams
+
+ * gst/realmedia/rmdemux.c:
+ generate caps for ATRAC3 audio streams
+
+2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/wavparse/Makefile.am
+ * gst/wavparse/riff.h
+ * gst/wavparse/wavparse.vcproj
+ riff.h removal (unused and duplication with riff-ids.h)
+
+2004-10-06 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/wavparse/gstwavparse.h
+ remove duplicated defines for audio codec codes
+
+ * gst-libs/gst/riff/riff-ids.h
+ * gst/wavenc/riff.h:
+ add "4CC" code for ATRAC3 audio streams
+ add "4CC" code for ITU_G721_ADPCM (unused for now)
+
+2004-10-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/flx/gstflxdec.c: (gst_flxdec_init), (gst_flxdec_loop):
+ Actually _do_ negotiation. Pass gdouble as arg instead
+ of guint64 for the framerate.
+
+2004-10-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+ (find_compatibles), (close_pad_link), (try_to_link_1),
+ (no_more_pads), (close_link), (type_found):
+ * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element):
+ Set state on newly added element to READY so that negotiation
+ can happen ASAP.
+ Addes some more debug info.
+ Do not try to plug pads with multiple caps structures or ANY
+ because it is too dangerous since we do not do dynamic
+ replugging.
+
+2004-10-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ written by: Gora Mohanty <gora_mohanty@yahoo.co.in>
+
+ * po/LINGUAS:
+ * po/or.po:
+ add Oriya translation
+
+2004-10-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+ Prevent overwrite of size member. Makes audio sound crappy.
+
+2004-10-05 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+ Add rmvb to the list of known RealMedia extensions
+
+2004-10-05 Wim Taymans <wim@fluendo.com>
+
+ * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error),
+ (mngdec_openstream), (mngdec_closestream),
+ (mngdec_handle_sink_event), (mngdec_readdata),
+ (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader),
+ (mngdec_getcanvasline), (mngdec_refresh),
+ (gst_mngdec_change_state):
+ Set the framerate correctly.
+
+2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+ There was something wrong with the index massaging.
+
+2004-10-04 Wim Taymans <wim@fluendo.com>
+
+ * ext/jpeg/gstjpeg.c: (smoke_type_find), (plugin_init):
+ * ext/jpeg/gstsmokedec.c: (gst_smokedec_init),
+ (gst_smokedec_chain):
+ * ext/jpeg/gstsmokedec.h:
+ * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
+ (gst_smokeenc_init), (gst_smokeenc_resync), (gst_smokeenc_chain):
+ * ext/jpeg/gstsmokeenc.h:
+ * ext/jpeg/smokecodec.c: (smokecodec_encode_new),
+ (smokecodec_decode_new), (smokecodec_info_free),
+ (smokecodec_set_quality), (smokecodec_get_quality),
+ (smokecodec_set_threshold), (smokecodec_get_threshold),
+ (smokecodec_set_bitrate), (smokecodec_get_bitrate),
+ (find_best_size), (abs_diff), (put), (smokecodec_encode_id),
+ (smokecodec_encode), (smokecodec_parse_id),
+ (smokecodec_parse_header), (smokecodec_decode):
+ * ext/jpeg/smokecodec.h:
+ * ext/jpeg/smokeformat.h:
+ Updated smoke, new bitstream, allows embedding in ogg.
+
+2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
+ Fix seeking in some files. All this code is no longer needed (and
+ actually breaks stuff) because we now synchronize the full index
+ right when reading the header.
+
+2004-10-04 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ configure update for libmng.
+
+2004-10-04 Wim Taymans <wim@fluendo.com>
+
+ * ext/libmng/Makefile.am:
+ * ext/libmng/gstmng.c: (plugin_init):
+ * ext/libmng/gstmng.h:
+ * ext/libmng/gstmngdec.c: (gst_mngdec_get_type),
+ (gst_mngdec_base_init), (gst_mngdec_class_init),
+ (gst_mngdec_sinklink), (gst_mngdec_init), (gst_mngdec_src_getcaps),
+ (gst_mngdec_loop), (gst_mngdec_get_property),
+ (gst_mngdec_set_property), (mngdec_error), (mngdec_openstream),
+ (mngdec_closestream), (mngdec_handle_sink_event),
+ (mngdec_readdata), (mngdec_gettickcount), (mngdec_settimer),
+ (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh),
+ (gst_mngdec_change_state):
+ * ext/libmng/gstmngdec.h:
+ * ext/libmng/gstmngenc.c: (gst_mngenc_get_type),
+ (mng_caps_factory), (raw_caps_factory), (gst_mngenc_base_init),
+ (gst_mngenc_class_init), (gst_mngenc_sinklink), (gst_mngenc_init),
+ (gst_mngenc_chain), (gst_mngenc_get_property),
+ (gst_mngenc_set_property):
+ * ext/libmng/gstmngenc.h:
+ Added basic MNG decoder. Needs more work. The encoder does
+ not work yet.
+
+2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_handle_sink_event),
+ (gst_rmdemux_loop), (gst_rmdemux_add_stream),
+ (gst_rmdemux_parse_mdpr), (gst_rmdemux_dump_mdpr):
+ Don't hang on length=0 chunks. Some negotiation fixes. Signal
+ no-more-pads.
+
+2004-10-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ you need at least 1.0.4 of speex
+
+2004-10-04 Iain <iaingnome@gmail.com>
+
+ * ext/speex/gstspeexdec.h: Revert the includes changes.
+
+ * ext/speex/gstspeexenc.[ch]: Revert the includes changes.
+
+2004-09-30 Iain <iaingnome@gmail.com>
+
+ * sys/sunaudio/gstsunaudio.c (gst_sunaudiosink_open): Use the device
+ found during init or set as a property instead of hardcoding /dev/audio
+
+2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+ (gst_rmdemux_init), (gst_rmdemux_handle_sink_event),
+ (gst_rmdemux_loop), (gst_rmdemux_add_stream), (re_hexdump_bytes),
+ (re_dump_pascal_string), (gst_rmdemux_dump__rmf),
+ (gst_rmdemux_dump_prop), (gst_rmdemux_parse_mdpr),
+ (gst_rmdemux_dump_mdpr), (gst_rmdemux_dump_indx),
+ (gst_rmdemux_dump_data):
+ Use debug category, fix EOS handling. filesrc ! rmdemux now
+ works.
+
+2004-10-04 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+ (gst_avi_demux_stream_scan), (sort), (gst_avi_demux_massage_index),
+ (gst_avi_demux_stream_header), (gst_avi_demux_stream_data):
+ Improve allocation, cutting and sorting of the index. How takes a
+ few seconds instead of minutes.
+
+2004-10-03 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
+ fixed compilation
+
+2004-10-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_template_caps):
+ Add wing commander format mimetype/fourccs.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+ Don't crash if some value is 0.
+
+2004-10-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_template_caps):
+ Add DIB fourcc (raw, palettized 8-bit RGB).
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_vids_with_data):
+ Oops, fix strf_data reading bug.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+ Use a non-NULL tag.
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+ Time for hacks. Sorry Dave. At least one quicktime movie (a
+ trailer) that I've encountered contains multiple video tracks.
+ One of those is the actual video track, the other are one-frame
+ tracks (images). Unfortunately, the number of frames according
+ to the trak header is 1 for each, so that doesn't help. So
+ instead, I look at the duration and discard tracks with a
+ duration shorter than 20% of the length of the stream. Better
+ than nothing.
+
+2004-10-01 Christian Schaller <christian@fluendo.com>
+
+ * ext/ivorbis/vorbis.c:
+ Patch from Phil Blundell (Bug 152341)
+
+2004-10-01 Wim Taymans <wim@fluendo.com>
+
+ * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init),
+ (speex_dec_get_formats), (speex_dec_convert),
+ (speex_dec_src_query), (speex_dec_src_event), (speex_dec_event),
+ (speex_dec_chain), (gst_speexdec_get_property),
+ (gst_speexdec_set_property):
+ Small cleanups.
+
+2004-10-01 Wim Taymans <wim@fluendo.com>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_class_init),
+ (gst_wavparse_stream_init), (gst_wavparse_fmt),
+ (gst_wavparse_other), (gst_wavparse_loop),
+ (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
+ (gst_wavparse_srcpad_event):
+ * gst/wavparse/gstwavparse.h:
+ Added some more debugging info.
+ Fix the case where the length of the file is 0.
+ Make sure we seek to sample borders.
+
+2004-10-01 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/README:
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
+ (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (no_more_pads), (close_link), (type_found):
+ Add some debug info to decodebin, update README
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/dvdnav/dvdnavsrc.c: (dvdnav_handle_navigation_event):
+ Don't use g_print(); use GST_DEBUG().
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_queue_pads):
+ Handle EOS properly.
+
+2004-10-01 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_sinkconnect),
+ (gst_faad_chain), (gst_faad_change_state):
+ * ext/faad/gstfaad.h:
+ Allow playback of raw (unframed) MPEG AAC files (#148993).
+
+2004-10-01 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+ Throw error if we didn't recognize the stream. Fixes #152289.
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
+ Fix negotiation.
+
+2004-10-01 Francis Labonte <francis_labonte@hotmail.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+ Fix memleak.
+
+2004-10-01 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
+
+ Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_setparams):
+ Solve #152805.
+ * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_mute):
+ Solve 152806.
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_audio_caps_with_data):
+ Add codec_data handling (like asfdemux used to do).
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
+ Use riff-media for caps creation instead of our own (mostly
+ broken) copy of its functions.
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_capture):
+ Don't actually error out if we get another return value than
+ -EINVAL. Opposite to what I first thought, drivers have random
+ return values for this, although -EINVAL is the expected return
+ value. Since this is not fatal, we shouldn't use
+ GST_ELEMENT_ERROR() but just GST_ERROR_OBJECT().
+
+2004-10-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+ (dvdreadsrc_init), (dvdreadsrc_dispose), (dvdreadsrc_set_property),
+ (dvdreadsrc_get_property), (_open), (_seek), (_read),
+ (dvdreadsrc_get), (dvdreadsrc_open_file),
+ (dvdreadsrc_change_state):
+ Fix. Don't do one big huge loop around the whole DVD, that will
+ cache all data and thus eat sizeof(dvd) (several GB) before we
+ see something.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+ Actually NULL'ify event after using it.
+ * gst/matroska/ebml-read.c: (gst_ebml_read_use_event),
+ (gst_ebml_read_handle_event), (gst_ebml_read_element_id),
+ (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+ (gst_ebml_read_seek), (gst_ebml_read_skip):
+ Handle events.
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+ (gst_dvd_demux_init), (gst_dvd_demux_get_audio_stream),
+ (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_plugin_init):
+ Fix timing (this will probably break if I seek using menus, but
+ I didn't get there yet). VOBs and normal DVDs should now work.
+ Add a mpeg2-only pad with high rank so this get autoplugged for
+ MPEG-2 movies.
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_base_init),
+ (gst_mpeg_demux_class_init), (gst_mpeg_demux_init),
+ (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream),
+ (gst_mpeg_demux_get_private_stream), (gst_mpeg_demux_parse_packet),
+ (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_plugin_init):
+ Use this as second rank for MPEG-1 and MPEG-2. Still use this for
+ MPEG-1 but use dvddemux for MPEG-2.
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
+ (gst_mpeg_parse_init), (gst_mpeg_parse_new_pad),
+ (gst_mpeg_parse_parse_packhead):
+ Timing. Only add pad template if it exists. Add sink template from
+ class and not from ourselves. This means we will always use the
+ correct sink template even if it is not the one defined in this
+ file.
+
+2004-09-29 Wim Taymans <wim@fluendo.com>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_packet),
+ (gst_mpeg_demux_parse_pes):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+ Fix playback of mpeg again, timestamps where screwed up by
+ patch 1.61.
+
+2004-09-29 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_src_query):
+ Only return true if we actually filled something in. Prevents
+ player applications from showing a random length for flac files.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
+ (gst_riff_read_use_event), (gst_riff_read_handle_event),
+ (gst_riff_read_seek), (gst_riff_read_skip), (gst_riff_read_strh),
+ (gst_riff_read_strf_vids_with_data),
+ (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_iavs):
+ OK, ok, so I implemented event handling. Apparently it's normal
+ that we receive random events at random points without asking
+ for it.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+ (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_handle_src_event), (gst_avi_demux_stream_index),
+ (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
+ (gst_avi_demux_massage_index), (gst_avi_demux_stream_header),
+ (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry),
+ (gst_avi_demux_stream_data), (gst_avi_demux_loop):
+ * gst/avi/gstavidemux.h:
+ Implement non-lineair chunk handling and subchunk processing.
+ The first solves playback of AVI files where the audio and video
+ data of individual buffers that we read are not synchronized.
+ This should not happen according to the wonderful AVI specs, but
+ of course it does happen in reality. It is also a prerequisite for
+ the second. Subchunk processing allows us to cut chunks in small
+ pieces and process each of these pieces separately. This is
+ required because I've seen several AVI files with incredibly large
+ audio chunks, even some files with only one audio chunk for the
+ whole file. This allows for proper playback including seeking.
+ This patch is supposed to fix all AVI A/V sync issues.
+ * gst/flx/gstflxdec.c: (gst_flxdec_class_init),
+ (flx_decode_chunks), (flx_decode_color), (gst_flxdec_loop):
+ Work.
+ * gst/modplug/gstmodplug.cc:
+ Proper return value setting for the query() function.
+ * gst/playback/gstplaybasebin.c: (setup_source):
+ Being in non-playing state (after, e.g., EOS) is not necessarily
+ a bad thing. Allow for that. This fixes playback of short files.
+ They don't actually playback fully now, because the clock already
+ runs. This means that small files (<500kB) with a small length
+ (<2sec) will still not or barely play. Other files, such as mod
+ or flx, will work correctly, however.
+
+2004-09-28 Wim Taymans <wim@fluendo.com>
+
+ * ext/speex/gstspeex.c: (plugin_init):
+ * ext/speex/gstspeexdec.c: (gst_speex_dec_base_init),
+ (gst_speex_dec_class_init), (speex_dec_get_formats),
+ (speex_get_event_masks), (speex_get_query_types),
+ (gst_speex_dec_init), (speex_dec_convert), (speex_dec_src_query),
+ (speex_dec_src_event), (speex_dec_event), (speex_dec_chain),
+ (gst_speexdec_get_property), (gst_speexdec_set_property),
+ (speex_dec_change_state):
+ * ext/speex/gstspeexdec.h:
+ * ext/speex/gstspeexenc.c: (gst_speexenc_get_formats),
+ (gst_speexenc_get_type), (speex_caps_factory), (raw_caps_factory),
+ (gst_speexenc_base_init), (gst_speexenc_class_init),
+ (gst_speexenc_sinkconnect), (gst_speexenc_convert_src),
+ (gst_speexenc_convert_sink), (gst_speexenc_get_query_types),
+ (gst_speexenc_src_query), (gst_speexenc_init),
+ (gst_speexenc_get_tag_value), (comment_init), (comment_add),
+ (gst_speexenc_metadata_set1), (gst_speexenc_set_metadata),
+ (gst_speexenc_setup), (gst_speexenc_buffer_from_data),
+ (gst_speexenc_push_buffer), (gst_speexenc_set_header_on_caps),
+ (gst_speexenc_chain), (gst_speexenc_get_property),
+ (gst_speexenc_set_property), (gst_speexenc_change_state):
+ * ext/speex/gstspeexenc.h:
+ Rewrote speex encoder, make sure it can be embedded in ogg.
+ Implemented speex decoder.
+
+2004-09-28 Christian Schaller <christian@fluendo.com>
+
+ * configure.ac:
+ Remove kioslave plugin. Markey is brewing a new working one
+ * ext/Makefile.am: Remove kioslave plugin
+ * ext/kio: remove
+ * gst-plugins.spec.in: remove kio plugin from spec
+
+2004-09-27 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
+ (is_sync_frame), (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_new_client),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients):
+ * gst/tcp/gstmultifdsink.h:
+ Make syncing to keyframes actually work for new clients and lagging
+ clients.
+
+2004-09-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/debug/gstnavigationtest.c: (gst_navigationtest_class_init),
+ (gst_navigationtest_handle_src_event), (draw_box_planar411),
+ (gst_navigationtest_planar411), (gst_navigationtest_change_state):
+ * gst/debug/gstnavigationtest.h:
+ make navigationtest display button-press and button-release events
+
+2004-09-26 Iain <iaingnome@gmail.com>
+
+ * gst/interleave/interleave.c (all_channels_new_media): Checks if all
+ the channels have received a new media event.
+ (interleave_buffered_loop): Compresses a new media event on all
+ channels into one.
+
+2004-09-26 Iain <iaingnome@gmail.com>
+
+ * gst/wavenc/gstwavenc.c (gst_wavenc_chain): Company says we need to
+ call the sinkpad's default event handler and not the srcpads. He also
+ says this is confusing :)
+ (gst_wavenc_stop_file): Company says that seek events only go upstream
+ we should send a discontinuous downstream instead.
+
+2004-09-25 Christian Schaller <christian@fluendo.com>
+
+ * Update SPEC file to be usable in conjunction with Fedora Core,
+ Fedora.us and freshrpms packages
+ * Fix typo in multifilesrc test Makefile
+
+2004-09-24 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+ Only signal the no_more_pads signal when we have
+ added the stream to our list.
+
+2004-09-24 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (remove_prerolls),
+ (new_decoded_pad):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (setup_sinks):
+ Don't try to preroll or decode more than one audio/video
+ track.
+
+2004-09-24 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+ Throw error if we failed to find a suitable output. This should
+ throw an error if we successfully set up a pipeline (e.g. because
+ we recognized a media file) but found no decodable streams in it
+ (e.g. because it contains only media stream types for which we
+ have no decoders, or because it's not a media type).
+
+2004-09-23 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/dirac/Makefile.am:
+ * ext/dirac/gstdirac.cc:
+ * ext/dirac/gstdiracdec.cc:
+ * ext/dirac/gstdiracdec.h:
+ Do something. Don't actually know if this works because I don't
+ have a demuxer yet.
+ * ext/gsm/gstgsmdec.c: (gst_gsmdec_getcaps):
+ Add channels=1 to caps returned from _getcaps().
+ * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_get_type),
+ (gst_ogm_video_parse_get_type), (gst_ogm_audio_parse_base_init),
+ (gst_ogm_video_parse_base_init), (gst_ogm_parse_init),
+ (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init),
+ (gst_ogm_parse_sink_convert), (gst_ogm_parse_chain),
+ (gst_ogm_parse_change_state):
+ Separate between audio/video so ogmaudioparse actually uses the
+ audio pad templates. Both audio and video work now, including
+ autoplugging. Also use sometimes-srcpad hack.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+ Handle events better. Don't hang on infinite loops.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_class_init),
+ (gst_avi_demux_init), (gst_avi_demux_reset),
+ (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_stream_header), (gst_avi_demux_stream_data),
+ (gst_avi_demux_change_state):
+ * gst/avi/gstavidemux.h:
+ Improve A/V sync. Still not perfect.
+ * gst/matroska/ebml-read.c: (gst_ebml_read_seek),
+ (gst_ebml_read_skip):
+ Handle events better.
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+ (gst_qtdemux_loop_header), (qtdemux_parse_trak),
+ (qtdemux_audio_caps):
+ Add IMA4. Improve event handling. Save offset after a seek when
+ the headers are at the end of the file so that we don't end up in
+ an infinite loop.
+ * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+ Add low-priority typefind support for files with no length.
+
+2004-09-23 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * testsuite/multifilesink/Makefile.am:
+ fix typo
+
+2004-09-22 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls): Fix
+ mistakes from thaytan's patches.
+
+2004-09-23 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
+ For completeness, XSync in the destroy function as xvimage does.
+
+2004-09-23 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
+ Correct caps negotiation
+ * gst/volume/gstvolume.c: (volume_chain_float),
+ (volume_chain_int16):
+ Modify debug output to be little more informative
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_destroy):
+ Add XSync calls after detaching from the shared memory segment to
+ avoid a crash.
+
+2004-09-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+ (gst_ogg_mux_next_buffer), (gst_ogg_mux_loop):
+ * ext/vorbis/vorbis.c: (plugin_init):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
+ (gst_vorbisenc_chain):
+ * ext/vorbis/vorbisenc.h:
+ remove explicit newmedia support from oggmux and vorbisenc
+ add debug category to vorbisenc
+ * gst/multifilesink/gstmultifilesink.c:
+ (gst_multifilesink_class_init), (gst_multifilesink_init),
+ (gst_multifilesink_dispose), (gst_multifilesink_set_location),
+ (gst_multifilesink_set_property), (gst_multifilesink_next_file),
+ (gst_multifilesink_handle_event), (gst_multifilesink_chain),
+ (plugin_init):
+ * gst/multifilesink/gstmultifilesink.h:
+ add support for streamheader in multifilesink
+
+2004-09-22 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (_read_var_length), (_read_guid),
+ (gst_asf_demux_process_segment), (gst_asf_demux_handle_data),
+ (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event):
+ Prevent infinite loops. More correct error reporting.
+ * gst/auparse/gstauparse.c: (gst_auparse_chain):
+ Error out if negotiation fails.
+ * gst/playback/gstplaybasebin.c: (setup_source),
+ (gst_play_base_bin_change_state), (gst_play_base_bin_error),
+ (gst_play_base_bin_found_tag):
+ Error/tag forwarding. Pre-roll fixes for source errors on state
+ changes (e.g. "file does not exist") to prevent hangs.
+
+2004-09-21 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * testsuite/multifilesink/Makefile.am:
+ * testsuite/multifilesink/lame_test.c: (gst_newmedia_base_init),
+ (gst_newmedia_class_init), (gst_newmedia_init),
+ (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+ (newfile_signal), (test_signal), (main):
+ * testsuite/multifilesink/multifilesrc_test.c: (main):
+ * testsuite/multifilesink/oggtheora_test.c:
+ (gst_newmedia_base_init), (gst_newmedia_class_init),
+ (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
+ (test_format), (newfile_signal), (test_signal), (main):
+ * testsuite/multifilesink/oggvorbis_test.c:
+ (gst_newmedia_base_init), (gst_newmedia_class_init),
+ (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
+ (test_format), (newfile_signal), (test_signal), (main):
+ * testsuite/multifilesink/wavenc_test.c: (gst_newmedia_base_init),
+ (gst_newmedia_class_init), (gst_newmedia_init),
+ (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+ (newfile_signal), (test_signal), (main):
+ New media tests
+
+2004-09-20 Christian Schaller <christian@fluendo.com>
+
+ * Fix mikmod license to LGPL as they have relicensed
+ * Move Dirac and Effectv into LGPL section of README_license
+
+2004-09-20 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_check_caps_reset),
+ (gst_mad_change_state):
+ Allow for mp3 rate/channels changes. However, only very
+ conservatively. Reason that we *have* to enable this is smiply
+ because the mad find_sync() function is not good enough, it will
+ regularly sync on random data as valid frames and therefore make
+ us provide random caps as *final* caps of the stream. The best fix
+ I could think of is to simply require several of the same stream
+ changes in a row before we change caps.
+ The actual testcase that works now is #
+ * ext/ogg/Makefile.am:
+ * ext/ogg/gstogg.c: (plugin_init):
+ * ext/ogg/gstogmparse.c:
+ OGM support (video only for now; I need an audio sample file).
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+ (gst_asf_demux_process_stream), (gst_asf_demux_video_caps),
+ (gst_asf_demux_add_video_stream):
+ WMV extradata.
+ * gst/playback/gstplaybasebin.c: (unknown_type):
+ Don't error out on single unknown-types after all. It's wrong.
+ If we found type of video and audio but not of a subtitle stream,
+ it will still error out (which is unwanted). Will find a better fix
+ later on.
+ * gst/typefind/gsttypefindfunctions.c: (ogmvideo_type_find),
+ (ogmaudio_type_find), (plugin_init):
+ OGM support.
+
+2004-09-20 Johan Dahlin <johan@gnome.org>
+
+ * ext/jpeg/gstjpegdec.c (gst_jpegdec_chain): Allocate the buffer
+ after setting caps.
+
+2004-09-19 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_init), (gst_wavenc_chain):
+ * gst/wavenc/gstwavenc.h:
+ Added newmedia support to wavenc
+
+2004-09-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (gst_fdset_fd_has_closed),
+ (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
+ (gst_fdset_fd_can_write), (gst_fdset_wait):
+ * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type),
+ (gst_multifdsink_init), (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_get_stats),
+ (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_handle_clients),
+ (gst_multifdsink_close), (gst_multifdsink_change_state):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+ (gst_tcpserversink_removed):
+ Small cleanups in fdset.c
+ Use a hastable to map fd to the client structure for faster
+ lookup in _remove and get_stats.
+ Added virtual function to close the fds.
+ Handle clients even when the select/poll call was unblocked because
+ of a command.
+ Implement syncing to keyframe in the recovery procedure.
+
+2004-09-16 Iain <iaingnome@gmail.com>
+
+ * gst/audioconvert/gstaudioconvert.c (_fixate_caps_to_int): Free the
+ try caps.
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream):
+ Caps are only set if the type of the stream is unknown, but this
+ is initialized in ->init_stream(), so set to UNKNOWN after calling
+ ->init_stream() so that capsnego starts.
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_stream_data):
+ Just hardcode for raw audio then. AVI audio sucks.
+
+2004-09-15 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
+ * gst/matroska/matroska-mux.c: (audiosink_templ),
+ (gst_matroska_mux_audio_pad_link):
+ * gst/typefind/gsttypefindfunctions.c: (tta_caps), (plugin_init):
+ Use audio/x-ttafile for tta files and audio/x-tta for raw tta frames.
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_stream_data):
+ Try to fix a/v sync issues.
+
+2004-09-15 David Schleef <ds@schleef.org>
+
+ * configure.ac: remove NASM check, since we don't use it. Update
+ dirac check to 0.4
+ * ext/dirac/gstdiracdec.cc: update to current 0.4 API
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ Initialized variables.
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_loop_header), (qtdemux_parse), (qtdemux_parse_trak),
+ (gst_qtdemux_handle_esds), (qtdemux_audio_caps): Fix seeking, add
+ SVQ3 format
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_add_stream), (gst_avi_demux_stream_data):
+ * gst/avi/gstavidemux.h:
+ Fix for compressed audio (mp3) timestamp generation. How did this
+ ever work?
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
+ Volume is a double not a float.
+
+2004-09-15 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
+ Don't close the fd in multifdsink as we didn't open it in the
+ first place. Some cleanups.
+
+2004-09-15 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+ Fix the case where the muxer would mark pages as delta
+ frames when they are not (vorbis only ogg).
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c: (state_change), (setup_source),
+ (gst_play_base_bin_change_state):
+ Handle the case where we failed to setup a clear pipeline. This
+ will throw an error (or EOS, another nice case) and if you don't
+ catch that, the app will wait for the signal forever (and thus
+ hang).
+
+2004-09-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssink.c:
+ (gst_gnomevfssink_uri_get_protocols):
+ * ext/gnomevfs/gstgnomevfssrc.c:
+ (gst_gnomevfssrc_uri_get_protocols):
+ * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+ * ext/gnomevfs/gstgnomevfsuri.h:
+ Use _uri_new() instead of _open(), so it doesn't take as long and
+ Christophe's computer won't hang.
+ * gst/playback/gstplaybasebin.c: (unknown_type):
+ Throw error on unknown media type, so apps actually display it.
+
+2004-09-14 Brian Cameron <brian.cameron@sun.com
+
+ * tools/gst-launch-ext-m.m: Changed ~ to $ENV{HOME} to allow
+ this script to work on Solaris since bash shell handles echo
+ differenly than bash.
+
+2004-09-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstplaybasebin.c: (queue_overrun), (no_more_pads),
+ (setup_source), (gst_play_base_bin_set_property),
+ (gst_play_base_bin_add_element):
+ * gst/playback/gstplaybin.c: (gst_play_bin_send_event):
+ Some more work on making sure seeking pauses the pipeline and
+ that changing the uri actually does something.
+
+2004-09-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (gst_fdset_wait):
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_close):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send),
+ (gst_tcpserversink_close):
+ Be a bit more paranoid when freeing memory.
+
+2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
+ (qtdemux_parse_trak):
+ Don't crash by dividing by zero (see sample movie in #126922).
+
+2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+ Don't touch non-existing data (fixes crash on file in #140147).
+
+2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybasebin.c:
+ (gst_play_base_bin_dispose), (gst_play_base_bin_set_property):
+ Handle double disposals, and proper change of URIs.
+
+2004-09-13 Martin Eikermann <meiker@upb.de>
+
+ * gst/mpegstream/gstmpegparse.c:
+ fix synchronistation for streams recorded from digital PCR
+ fixes bug #119376
+
+2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/Makefile.am:
+ * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_get_type),
+ (gst_gnomevfssink_dispose), (gst_gnomevfssink_init),
+ (gst_gnomevfssink_uri_get_type),
+ (gst_gnomevfssink_uri_get_protocols),
+ (gst_gnomevfssink_uri_get_uri), (gst_gnomevfssink_uri_set_uri),
+ (gst_gnomevfssink_uri_handler_init),
+ (gst_gnomevfssink_set_property), (gst_gnomevfssink_get_property),
+ (gst_gnomevfssink_open_file), (gst_gnomevfssink_close_file):
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_type),
+ (gst_gnomevfssrc_init), (gst_gnomevfssrc_dispose),
+ (gst_gnomevfssrc_uri_get_type),
+ (gst_gnomevfssrc_uri_get_protocols), (gst_gnomevfssrc_uri_get_uri),
+ (gst_gnomevfssrc_uri_set_uri), (gst_gnomevfssrc_uri_handler_init),
+ (gst_gnomevfssrc_set_property), (gst_gnomevfssrc_get_property),
+ (gst_gnomevfssrc_open_file), (gst_gnomevfssrc_close_file):
+ * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+ * ext/gnomevfs/gstgnomevfsuri.h:
+ Add URI support to Gnome-VFS plugins. Tries to load a fixed list
+ of fake URIs to see which this version of Gnome-VFS likes, and
+ uses that for the Gst-URI interface. Makes playbin support http://
+ streams. Also fix up some stupid behaviour in gnomevfssrc.
+
+2004-09-13 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
+ (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+ (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
+ (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
+ Update mixer (to sync with other sessions) if we try to obtain
+ a new value. This makes alsamixer work accross applications.
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+ Only call sync functions if we're running, else alsalib asserts.
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
+ Sometimes fails to compile. Possibly a gcc bug.
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element):
+ Add a reference to an application-provided object, because we lose
+ this same reference if we add it to the bin. If we don't do this,
+ we can only use this object once and thus crash if we go from
+ ready to playing, back to ready and back to playing again.
+ Also add an audioscale element because several cheap soundcards -
+ like mine - don't support all samplerates.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+ (gst_ximagesink_xcontext_clear), (gst_ximagesink_change_state):
+ Fix wrong order or PAR calls. Makes automatically obtained PAR
+ from the X server atually being used.
+
+2004-09-12 David Schleef <ds@schleef.org>
+
+ Fixes: #151879, #151881, #151882, #151883, #151884, #151886,
+ #151887, #152102, #152247.
+ * examples/indexing/indexmpeg.c: 64-bit warning fixes.
+ * examples/seeking/cdparanoia.c: same
+ * examples/seeking/cdplayer.c: same
+ * examples/seeking/seek.c: same
+ * examples/seeking/spider_seek.c: same
+ * examples/seeking/vorbisfile.c: same
+ * examples/stats/mp2ogg.c: same
+ * ext/esd/esdsink.c: (gst_esdsink_class_init),
+ (gst_esdsink_dispose): Dispose of element properly.
+ * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_seek): 64-bit warning
+ fixes.
+ * ext/nas/nassink.c: (gst_nassink_class_init),
+ (gst_nassink_dispose): Dispose of element correctly.
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_chain): Fix leak.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+ (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
+ Fix 64-bit warning.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
+ Fix 64-bit warning.
+
+2004-09-12 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * configure.ac : change speex detection as 1.1.6 now uses
+ .pc/pkg-config and they changed their headers location.
+
+2004-09-09 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/matroska-mux.h:
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset),
+ (gst_matroska_mux_start), (gst_matroska_mux_finish),
+ (gst_matroska_mux_write_data):
+ Write multiple blocks/frames per cluster.
+ Write meta-seek information (seek heads).
+
+2004-09-09 Scott Wheeler <wheeler@kde.org>
+
+ * gst/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_set_property), (gst_play_bin_get_property),
+ (gen_audio_element), (gen_audio_element):
+ Add a volume element / property to the pipeline.
+
+2004-09-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/videomixer/videomixer.c: (gst_videomixer_blend_buffers):
+ Copy timestamps from the master pad to the output buffers.
+
+2004-09-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/raw1394/gstdv1394src.c:
+ throw errors when applicable
+
+2004-09-01 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/ebml-ids.h:
+ * gst/matroska/ebml-read.c: (gst_ebml_read_date):
+ * gst/matroska/ebml-write.c: (gst_ebml_write_date):
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_finish):
+ automatically convert unix time <-> ebml time when reading/writing
+ a date, use gst_ebml_write_uint to write CUETIME,
+ not gst_ebml_write_date.
+ * gst/matroska/matroska-ids.h:
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_create_uid),
+ (gst_matroska_mux_reset), (gst_matroska_mux_audio_pad_link),
+ (gst_matroska_mux_track_header), (gst_matroska_mux_start),
+ (gst_matroska_mux_write_data):
+ Write track and segment UIDs, write muxing date, write
+ TRACKDEFAULTDURATION for TTA audio, write BLOCKDURATION if known.
+ Create cues for audio only files.
+
+2004-08-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+ Re-commit ALSA switches.
+ * gst/adder/gstadder.c: (gst_adder_loop):
+ 64-bit fix (#151416).
+ * gst/debug/progressreport.c: (gst_progressreport_report):
+ 64-bit fix (#151419).
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_contents):
+ 64-bit fix (#151420).
+ * gst/playback/test3.c: (update_scale):
+ 64-bit fix (#151421).
+
+2004-08-31 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ bump nano to cvs
+
+=== release 0.8.4 ===
+
+2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: releasing 0.8.4, "Alias"
+
+2004-08-31 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/theora/Makefile.am:
+ fix makefile. Fixes #151462.
+
+2004-08-30 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_wait):
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+ (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write):
+ * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
+ Fix some memory leaks.
+
+2004-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ Patch by: David Schleef
+
+ * configure.ac:
+ * sys/Makefile.am:
+ rename our detection macro for V4L2. Fixes #151236.
+
+2004-08-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ Patch by: David Schleef
+
+ * configure.ac:
+ check to define LAMEPRESET. Fixes #151232.
+
+2004-08-27 David Schleef <ds@schleef.org>
+
+ * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),
+ (gst_glimagesink_xwindow_new), (gst_glimagesink_xcontext_get),
+ (gst_glimagesink_fixate): Move local variable declarations to
+ make gcc-2.95 happy.
+
+2004-08-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ bump nano for prerelease
+
+2004-08-27 David Schleef <ds@schleef.org>
+
+ * sys/sunaudio/Makefile.am: Add sunaudiosrc patch from Bala
+ * sys/sunaudio/gstsunaudiosrc.c:
+ * sys/sunaudio/gstsunaudiosrc.h:
+
+2004-08-27 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/ebml-read.c: (gst_ebml_peed_id), (gst_ebml_read_element_id),
+ handle EOS correctly
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_video_pad_link):
+ * gst/matroska/matroska-mux.h:
+ added BITMAPINFOHEADER structure, mux video/x-divx and video/x-xvid in
+ VFW compatibility mode
+
+2004-08-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Zaheer Abbas Merali
+
+ * ext/ogg/gstoggmux.c:
+ * ext/vorbis/vorbisenc.c:
+ * ext/vorbis/vorbisenc.h:
+ handle NEWMEDIA
+
+2004-08-26 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/ebml-write.c: (gst_ebml_write_float),
+ fix byte order reversion on little endian machines.
+ * gst/matroska/matroska-mux.c: (audiosink_templ),
+ (gst_matroska_mux_audio_pad_link):
+ add TTA codec to the list of supported codecs.
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_init),
+ (gst_matroska_mux_start), (gst_matroska_mux_finish),
+ (gst_matroska_mux_write_data):
+ * gst/matroska/matroska-mux.h:
+ write segment duration correctly, write muxing app string, fixes bugs
+ #140897 and #140898.
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_loop),
+ wait for all pads to be negotiated before starting to mux.
+
+2004-08-26 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain):
+ * ext/lame/gstlame.h:
+ Added new media support to lame
+
+2004-08-25 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup),
+ send vorbis headers at the beginning of a stream, fixes bug #141554.
+ Interpret BLOCKDURATION and set buffer duration accordingly, fixes
+ bug #148950.
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps),
+ (gst_matroska_demux_plugin_init):
+ * gst/matroska/matroska-ids.h:
+ enable demuxing of TTA audio streams, fixes bug #148951.
+ * gst/typefind/gsttypefindfunctions.c: (tta_type_find), (plugin_init),
+ enable typefinding for TTA audio files, fixes bug #148711.
+ * ext/xvid/gstxviddec.c: (gst_xviddec_chain),
+ set XVID_LOWDELAY flag for decoding so xvid always returns an image,
+ fixes playback of packed bitstream and xvid with bframes, bug #135407.
+
+2004-08-24 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+ (gst_riff_read_element_data), (gst_riff_read_seek),
+ (gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
+ #144616, patch reviewed by Ronald and committed by Christophe Fergeau
+ <teuf@gnome.org>
+
+2004-08-23 Iain <iaingnome@gmail.com>
+
+ * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM
+ tags. They appear to be handled differently to normal.
+ (tag_list_to_id3_tag_foreach): Ditto.
+
+2004-08-22 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+ Make sure we never send -1 granulepos.
+
+2004-08-20 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_loop):
+ I will accept bitchslappings with non sharp objects.
+
+2004-08-20 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ Clean up the test for lame presets
+
+2004-08-19 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ * ext/lame/Makefile.am:
+ * ext/lame/gstlame.c: (gst_lame_class_init),
+ (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
+ Only enable lame presets if version of lame has presets in API
+
+2004-08-19 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_init), (gst_udpsrc_get):
+ * gst/udp/gstudpsrc.h:
+ Don't call gst_pad_push in a get function. Fixes #150449
+
+2004-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_set_mode),
+ (gst_fdset_get_mode), (gst_fdset_add_fd), (gst_fdset_remove_fd),
+ (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+ (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+ (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+ (gst_fdset_wait):
+ * gst/tcp/gstfdset.h:
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write):
+ * gst/tcp/gstmultifdsink.h:
+ Some extra checks in gstfdset.
+ Only use send() when the fd is a socket. Don't try to
+ read from write only fds.
+
+2004-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (gst_fdset_add_fd), (gst_fdset_remove_fd),
+ (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+ (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+ (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+ (gst_fdset_wait):
+ Add more locking and bounds checking.
+
+2004-08-18 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_wait):
+ Realloc test fdset in the lock and right before starting
+ the poll call. Bump the limit to 4096.
+
+2004-08-17 David Schleef <ds@schleef.org>
+
+ * sys/sunaudio/Makefile.am:
+ * sys/sunaudio/gstsunaudio.c: Fix caps to handle full range
+ of rates and channels. Make debugging less obnoxious.
+
+ Patch from Balamurali Viswanathan implementing a mixer for
+ Sun audio. (bug #144091):
+ * sys/sunaudio/gstsunelement.c:
+ * sys/sunaudio/gstsunelement.h:
+ * sys/sunaudio/gstsunmixer.c:
+ * sys/sunaudio/gstsunmixer.h:
+
+2004-08-17 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/audioscale/gstaudioscale.c:
+ * gst/audioscale/gstaudioscale.h:
+ made audioscale resample from any sample rate to any sample rate
+
+2004-08-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/libpng/gstpngdec.c:
+ error out on unsupported types
+
+2004-08-17 Iain <iaingnome@gmail.com>
+
+ * ext/flac/gstflacenc.c (gst_flacenc_update_quality): Only set the
+ mid_side and loose_mid_side properties if its a stereo stream.
+
+2004-08-17 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+ (theora_get_formats), (theora_dec_src_convert),
+ (theora_dec_sink_convert), (theora_dec_src_query),
+ (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
+ Add a debug line.
+
+2004-08-17 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate),
+ (gst_ogg_pad_push):
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+ (gst_ogg_mux_request_new_pad), (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_buffer_from_page), (gst_ogg_mux_push_page),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+ Mark delta units in the muxer.
+ Try to decode the packet after an out-of-sync error from
+ libogg.
+
+2004-08-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_init), (gst_multifdsink_add),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_set_property), (gst_multifdsink_get_property):
+ * gst/tcp/gstmultifdsink.h:
+ Added option to send a keyframe to clients as the first buffer.
+ Make timeout property writable.
+
+2004-08-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch by: Wim Taymans
+
+ * gst/tcp/gstfdset.c:
+ * gst/tcp/gstmultifdsink.c:
+ fix index comparison, should include 0
+
+2004-08-16 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_new),
+ (gst_fdset_add_fd), (gst_fdset_remove_fd),
+ (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+ (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+ (gst_fdset_wait):
+ copy when reallocing for poll so the select arguments don't get
+ changed during the call
+
+2004-08-16 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_border_mode_get_type),
+ (gst_theora_enc_class_init), (theora_enc_sink_link),
+ (theora_buffer_from_packet), (theora_enc_chain):
+ Fix bug where buffers were not marked as keyframes
+ correctly.
+
+2004-08-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
+ (gst_lame_preset_get_type), (gst_lame_class_init):
+ describe the enum values for vbr mode and presets more verbosely
+
+2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_mode_get_type),
+ (gst_lame_quality_get_type), (gst_lame_padding_get_type),
+ (gst_lame_preset_get_type), (gst_lame_class_init), (gst_lame_init),
+ (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
+ * ext/lame/gstlame.h:
+ add preset property to lame so it can use lame presets
+
+2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_get_property):
+ whoops forgot break, thanks teuf
+
+2004-08-13 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
+ (gst_lame_class_init), (gst_lame_src_getcaps),
+ (gst_lame_sink_link), (gst_lame_init), (gst_lame_set_property),
+ (gst_lame_get_property), (gst_lame_setup):
+ * ext/lame/gstlame.h:
+ fix lame's broken vbr stuff, allow it to resample if need be, and also
+ make xing header optional
+
+2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_src_getcaps), (gst_lame_init):
+ added getcaps function so samplerate doesnt get fixated to silly values
+
+2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_src_link):
+ revert previous fix
+
+2004-08-12 Johan Dahlin <johan@gnome.org>
+
+ * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Remove bogus
+ checks. Doesn't matter what state we are in. Interfaces are a
+ compile time thing, not runtime. It also broke the python bindings.
+
+2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_src_link):
+ made source pad link function check if sinkpad is ok..fixes the problem
+ where core fixates the output rate of lame stupidly
+
+2004-08-12 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_fixate):
+ * sys/v4l/v4l_calls.c:
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_set_capture):
+ fix fixate function to handle nonsimple caps.
+ remove bogus check in _link
+ cleanups
+
+2004-08-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init):
+ set default compression ratio parameter to 0.0 so bitrate parameter
+ works :)
+
+2004-08-11 David Schleef <ds@schleef.org>
+
+ * gst/tcp/gstfdset.c: Fix compile problem on OS/X.
+
+2004-08-11 David Schleef <ds@schleef.org>
+
+ * gst/mpeg1sys/gstmpeg1systemencode.c: Oops, this was correct
+ before.
+
+2004-08-11 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/video/videosink.h: Change copyright block to LGPL.
+
+2004-08-11 David Schleef <ds@schleef.org>
+
+ * ext/pango/gsttextoverlay.c: Add copyright block and fix plugin
+ license field
+ * gst-libs/gst/idct/Makefile.am: Remove mmx/sse code
+ * gst-libs/gst/video/gstvideosink.c: Change copyright block to
+ LGPL.
+ * gst/auparse/gstauparse.c: Fix plugin license field.
+ * gst/monoscope/gstmonoscope.c: Fix plugin license field.
+ * gst/mpeg1sys/gstmpeg1systemencode.c: Fix plugin license field.
+ * gst/rtp/gstrtp.c: Fix plugin license field.
+
+2004-08-11 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/gstfdset.c: (gst_fdset_mode_get_type), (nearest_pow),
+ (ensure_size), (gst_fdset_new), (gst_fdset_free),
+ (gst_fdset_set_mode), (gst_fdset_get_mode), (gst_fdset_add_fd),
+ (gst_fdset_remove_fd), (gst_fdset_fd_ctl_write),
+ (gst_fdset_fd_ctl_read), (gst_fdset_fd_has_closed),
+ (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
+ (gst_fdset_fd_can_write), (gst_fdset_wait):
+ * gst/tcp/gstfdset.h:
+ * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
+ (gst_multifdsink_class_init), (gst_multifdsink_init),
+ (gst_multifdsink_add), (gst_multifdsink_remove),
+ (gst_multifdsink_clear), (gst_multifdsink_get_stats),
+ (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_client_queue_data),
+ (gst_multifdsink_client_queue_caps),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+ (gst_multifdsink_get_property), (gst_multifdsink_init_send),
+ (gst_multifdsink_close):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+ (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_handle_wait), (gst_tcpserversink_init_send),
+ (gst_tcpserversink_close):
+ * gst/tcp/gsttcpserversink.h:
+ Abstracted away the select call, implemented poll (yes we ran into
+ the 1024 limit in production).
+
+2004-08-11 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcpplugin.c:
+ improve debuggging, remove assert
+
+2004-08-10 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
+ (gst_client_status_get_type), (gst_multifdsink_class_init),
+ (gst_multifdsink_init), (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+ (gst_multifdsink_get_property):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcp-marshal.list:
+ Starting to prepare for specifying buffer time in other units
+ than buffers. Expose remove reason in signal.
+
+2004-08-10 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_clear),
+ (gst_multifdsink_remove_client_link),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_client_queue_data),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients),
+ (gst_multifdsink_chain), (gst_multifdsink_close):
+ * gst/tcp/gstmultifdsink.h:
+ Added more debugging info. Changed the way clients are
+ removed from the lists. Fixed a bug where a bad file descriptor
+ could cause many clients to be removed.
+
+2004-08-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/videotestsrc/gstvideotestsrc.c: (generate_capslist):
+ allow all pixel-aspect-ratios, not just 1:1
+
+2004-08-09 David Schleef <ds@schleef.org>
+
+ * sys/glsink/ARB_multitexture.h: Remove old files.
+ * sys/glsink/EXT_paletted_texture.h:
+ * sys/glsink/NV_register_combiners.h:
+ * sys/glsink/gstgl_nvimage.c:
+ * sys/glsink/gstgl_pdrimage.c:
+ * sys/glsink/gstgl_rgbimage.c:
+ * sys/glsink/gstglsink.c:
+ * sys/glsink/gstglsink.h:
+ * sys/glsink/gstglxwindow.c:
+ * sys/glsink/regcomb_yuvrgb.c:
+
+2004-08-09 David Schleef <ds@schleef.org>
+
+ Patch from Gernot Ziegler <gz@lysator.liu.se> rewriting the
+ GL sink plugin. (Bug #147302)
+
+ * configure.ac: Test for OpenGL
+ * sys/Makefile.am: Use test for OpenGL
+ * sys/glsink/Makefile.am:
+ * sys/glsink/glimagesink.c: rewrite
+ * sys/glsink/glimagesink.h: rewrite
+
+2004-08-09 David Schleef <ds@schleef.org>
+
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_base_init): Only allow
+ sane framerates.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get): same
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support): same
+ * testsuite/gst-lint: Test for G_GUINT64_FORMAT usage near gettext.
+
+2004-08-09 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_get_stats),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+ Do a bit more logging, make the client_read code more robust.
+
+2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init_source),
+ (gst_jpegdec_fill_input_buffer), (gst_jpegdec_skip_input_data),
+ (gst_jpegdec_resync_to_restart), (gst_jpegdec_term_source),
+ (gst_jpegdec_init), (gst_jpegdec_chain):
+ * gst/multipart/multipartdemux.c: (gst_multipart_demux_init),
+ (gst_multipart_demux_chain), (gst_multipart_demux_change_state):
+ cleanups, debugging fixes and memleak plugging
+
+2004-08-09 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+ (theora_get_formats), (theora_dec_src_convert),
+ (theora_dec_sink_convert), (theora_dec_src_query),
+ (theora_dec_src_event), (theora_dec_event), (theora_dec_chain),
+ (theora_dec_change_state):
+ Don't crash on missing header packets.
+
+2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/sq.po:
+ Added Albanian translation (Laurent Dhima)
+ * po/cs.po:
+ updated
+
+2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/lame/gstlame.c:
+ fix/add debugging
+
+2004-08-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c:
+ * sys/xvimage/xvimagesink.c:
+ assign all TOO_LAZY's to a real category. Thanks to Warthy Warthog.
+
+2004-08-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_get_stats),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+ Make sure we don't try to read more from a client that what
+ ioctl says us or we deadlock.
+
+2004-08-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_src_link),
+ (gst_videotestsrc_change_state), (gst_videotestsrc_src_query),
+ (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
+ decouple running_time and n_frames so it can handle changing
+ framerate while running
+
+2004-08-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/nl.po:
+ * po/sv.po:
+ updated translations
+
+2004-08-04 Benjamin Otte <otte@gnome.org>
+
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_get_capslist), (generate_capslist),
+ (plugin_init):
+ generate the list of supported caps at startup and reuse it instead
+ of always generating it
+
+2004-07-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link):
+ whoops, last checkin broke normal build
+
+2004-08-03 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume),
+ (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
+ (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
+ (gst_alsa_mixer_get_option):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnav_get_event_name),
+ (dvdnavsrc_print_event):
+ * ext/ogg/gstoggdemux.c: (_find_chain_process), (gst_ogg_print):
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_pad_link),
+ (gst_ogg_mux_pad_unlink):
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link),
+ (gst_multipart_mux_pad_unlink):
+ * gst/videofilter/gstvideobalance.c:
+ (gst_videobalance_colorbalance_set_value):
+ * gst/videomixer/videomixer.c: (gst_videomixer_pad_link),
+ (gst_videomixer_pad_unlink):
+ * po/uk.po:
+ * sys/oss/gstossmixer.c:
+ * sys/v4l/gstv4lcolorbalance.c:
+ * sys/v4l/gstv4ltuner.c:
+ * sys/v4l/v4lsrc_calls.c:
+ * sys/v4l2/gstv4l2colorbalance.c:
+ * sys/v4l2/gstv4l2tuner.c:
+ compile fixes for --disable-gst-debug, G_DISABLE_ASSERT and friends
+
+2004-08-03 Benjamin Otte <otte@gnome.org>
+
+ * examples/dynparams/filter.c: (ui_control_create):
+ * examples/gstplay/player.c: (print_tag):
+ * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad):
+ * ext/gdk_pixbuf/gstgdkanimation.c:
+ (gst_gdk_animation_iter_may_advance):
+ * ext/jack/gstjack.c: (gst_jack_request_new_pad):
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
+ (tag_list_to_id3_tag_foreach), (gst_id3_tag_handle_event):
+ * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_tag_value):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value):
+ * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
+ * gst-libs/gst/media-info/media-info-test.c: (print_tag):
+ * gst/sine/demo-dparams.c: (main):
+ * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
+ * testsuite/alsa/formats.c: (create_pipeline):
+ * testsuite/alsa/sinesrc.c: (sinesrc_force_caps), (sinesrc_get):
+ fixes for G_DISABLE_ASSERT and friends
+ * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
+ (mp3_type_frame_length_from_header), (mp3_type_find),
+ (plugin_init):
+ require mp3 typefinding to have at least MIN_HEADERS valid headers
+ add typefinding for AAC adts files
+
+2004-08-04 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * sys/ximage/ximagesink.c:
+ (gst_ximagesink_calculate_pixel_aspect_ratio):
+ * sys/xvimage/xvimagesink.c:
+ (gst_xvimagesink_calculate_pixel_aspect_ratio):
+ Make sure we calculate pixel-aspect-ratio using floating point maths
+
+2004-08-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/uk.po:
+ updated translation
+
+2004-08-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get):
+ add debugging for display PAR calculation
+
+2004-08-02 David Schleef <ds@schleef.org>
+
+ * configure.ac: Fix mikmod CFLAGS.
+
+2004-07-27 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioscale/gstaudioscale.c:
+ - fix templates to only support S16, it's the only format that works
+ - make caps nego code use try_set_caps_nonfixed and fixation instead
+ of try_set_caps twice, which is not nice for autopluggers
+ - change rank to secondary, so autopluggers can pick it up after
+ audioconvert
+
+2004-08-02 Iain <iain@prettypeople.org>
+
+ * gst/interleave/interleave.c (interleave_init),
+ (interleave_request_new_pad),
+ (interleave_pad_removed),
+ (interleave_buffered_loop): Use the real pad count, not the artificial
+ one.
+
+2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: bump nano back to development
+
+=== release 0.8.3 ===
+
+2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: releasing 0.8.3, "Water"
+
+2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/xvimage/xvimagesink.c:
+ (gst_xvimagesink_calculate_pixel_aspect_ratio),
+ (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_change_state), (gst_xvimagesink_buffer_alloc),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+ (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+ * sys/xvimage/xvimagesink.h:
+ apply similar PAR fixes as to ximagesink
+
+2004-08-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch from: Benjamin Otte
+
+ * ext/lame/gstlame.c: (gst_lame_src_link), (gst_lame_init):
+ add link function to lame. Fixes #148986.
+
+2004-08-02 Johan Dahlin <johan@gnome.org>
+
+ * gst/multipart/multipartmux.c (gst_multipart_mux_next_buffer):
+ fix debugging log
+
+2004-07-30 David Schleef <ds@schleef.org>
+
+ * gst/videomixer/Makefile.am: Fix things that should have been
+ fixed in the last checkin.
+
+2004-07-30 David Schleef <ds@schleef.org>
+
+ * gst/multipart/Makefile.am: Fix things that should have been
+ fixed in the last checkin.
+
+2004-07-30 David Schleef <ds@schleef.org>
+
+ * testsuite/multifilesink/Makefile.am: Fix unused variable.
+
+2004-07-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ bump nano for prerelease
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/nl.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ updates
+
+2004-07-30 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_remove),
+ (gst_multifdsink_clear), (gst_multifdsink_get_stats),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+ * gst/tcp/gstmultifdsink.h:
+ Recover from a select with a bad file descriptor by removing
+ the client.
+
+2004-07-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ fix requirement of core
+ * gst-libs/gst/play/play.c: (gst_play_error_plugin),
+ (gst_play_pipeline_setup):
+ don't use colorspace element. do use hermescolorspace element.
+ make macro to get a colorspace element.
+ mark strings for translation.
+ * po/POTFILES.in:
+ add play.c
+ * po/af.po:
+ * po/az.po:
+ * po/cs.po:
+ * po/en_GB.po:
+ * po/hu.po:
+ * po/nl.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/uk.po:
+ update translations
+
+2004-07-30 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/libpng/gstpngenc.c: (gst_pngenc_class_init):
+ fix default for newmedia flag
+
+2004-07-30 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+ (gst_theora_dec_init), (theora_get_formats),
+ (theora_dec_src_convert), (theora_dec_sink_convert),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+ (theora_dec_chain), (theora_dec_set_property),
+ (theora_dec_get_property):
+ * ext/theora/theoraenc.c: (gst_border_mode_get_type),
+ (gst_theora_enc_class_init), (gst_theora_enc_init),
+ (theora_enc_sink_link), (theora_enc_chain),
+ (theora_enc_set_property), (theora_enc_get_property):
+ Added cropping option to theora decoder.
+ Added border option to theora encoder.
+
+2004-07-30 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+ (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+ (gst_pngenc_set_property):
+ * ext/libpng/gstpngenc.h:
+ Added newmedia support to pngenc so now gst-launch-0.8 videotestsrc ! ffmpegcolorspace ! pngenc snapshot=false newmedia=true ! multifilesink location=blah%d.png works as expected
+
+2004-07-30 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (theora_enc_sink_link), (theora_enc_chain),
+ (theora_enc_set_property), (theora_enc_get_property):
+ Fix encoding of non-multiple-of-16 video.
+
+2004-07-29 David Schleef <ds@schleef.org>
+
+ * configure.ac: make test for audiofile more strict
+
+2004-07-25 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+ give different names to typefind functions
+
+2004-07-28 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_calculate_pixel_aspect_ratio),
+ (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
+ (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
+ (gst_ximagesink_set_xwindow_id), (gst_ximagesink_set_property),
+ (gst_ximagesink_get_property), (gst_ximagesink_init):
+ * sys/ximage/ximagesink.h:
+ allocate PAR's dynamically.
+ use autodetected PAR if no object-set PAR is given.
+ add workaround for directfb's X not setting physical size.
+ fix to xvimagesink will follow tomorrow.
+
+2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
+ * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
+ (gst_shout2send_get_type), (gst_shout2send_set_clock),
+ (gst_shout2send_class_init), (gst_shout2send_init),
+ (set_shout_metadata), (gst_shout2send_set_metadata),
+ (gst_shout2send_chain), (gst_shout2send_set_property),
+ (gst_shout2send_get_property), (gst_shout2send_connect),
+ (gst_shout2send_change_state):
+ * ext/shout2/gstshout2.h:
+ - fix for sending mp3 audio to icecast2 server, if pad link function not
+ called before PAUSED state
+ - added option to use GStreamer clock sync (as opposed to libshout's own sync)
+ - added tagging support for mp3 audio broadcasted
+ * gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
+ debug info
+
+2004-07-28 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+ (gst_ogg_demux_push):
+ Return query failure when we don't know the length of
+ an ogg stream insteda of returning TRUE with a bogus value.
+
+2004-07-28 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (theora_get_formats),
+ (theora_dec_src_convert), (theora_dec_sink_convert),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+ (theora_dec_chain):
+ Don't screw up the 1 Chroma for 1 luma sample situation when we
+ have an odd offset/width by adding a black border in those cases.
+
+2004-07-28 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (theora_get_formats),
+ (theora_dec_src_convert), (theora_dec_sink_convert),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+ (theora_dec_chain):
+ * ext/theora/theoraenc.c: (theora_enc_sink_link):
+ Added first attempt at cropping of the image as required by the
+ theora spec. We need more properties in the caps (offset_x,
+ offset_y,stride) to implement this correctly.
+
+2004-07-28 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dvdnav/README:
+ Update the README to use dvddemux
+ * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
+ Ensure getcaps returns a subset of the template caps
+ * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_base_init),
+ (gst_mpeg2subt_init):
+ Ensure getcaps returns a subset of the template caps
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+ (gst_dvd_demux_init), (gst_dvd_demux_get_video_stream),
+ (gst_dvd_demux_get_subpicture_stream),
+ (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_set_cur_subpicture):
+ * gst/mpegstream/gstdvddemux.h:
+ Set the explicit caps on the current_video pad before pushing
+ anything
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream):
+ Free caps used to gst_pad_set_explicit_caps, which takes a const
+ GstCaps *
+
+2004-07-28 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: update GStreamer requirement to 0.8.4 because of
+ GstFraction.
+
+2004-07-28 Wim Taymans <wim@fluendo.com>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt),
+ (gst_wavparse_handle_seek), (gst_wavparse_srcpad_event):
+ Add the pad to the element after setting up the caps. This
+ makes it a lot easier to autoplug.
+
+2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/median/gstmedian.c:
+ * gst/mpeg2subt/gstmpeg2subt.c:
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegpacketize.c:
+ * gst/rtjpeg/gstrtjpeg.c:
+ * gst/rtjpeg/gstrtjpegdec.c:
+ * gst/rtjpeg/gstrtjpegenc.c:
+ * gst/sine/gstsinesrc.c:
+ * gst/smooth/gstsmooth.c:
+ * gst/smpte/gstsmpte.c:
+ * gst/smpte/gstsmpte.h:
+ * gst/stereo/gststereo.c:
+ * gst/videofilter/gstgamma.c:
+ * gst/videofilter/gstvideobalance.c:
+ * gst/videofilter/gstvideofilter.c:
+ * gst/videofilter/gstvideoflip.c:
+ * gst/videoscale/gstvideoscale.c:
+ * gst/videoscale/videoscale.c:
+ * gst/videotestsrc/gstvideotestsrc.c:
+ * gst/videotestsrc/videotestsrc.c:
+ * gst/wavenc/gstwavenc.c:
+ * gst/wavparse/gstwavparse.c:
+ fix local includes and 64 bits constants
+
+2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
+
+ * win32/gst.sln:
+ * gst-libs/gst/*/*.vcproj:
+ * gst/*/*.vcproj:
+ more working plugins
+
+2004-07-27 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * testsuite/alsa/Makefile.am:
+ * testsuite/alsa/srcstate.c:
+ add test for alsasrc changing state
+
+2004-07-27 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/silence/gstsilence.c: (gst_silence_init), (gst_silence_link),
+ (gst_silence_get):
+ * gst/silence/gstsilence.h:
+ fix silence generation for 16bit raw audio
+
+2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_metadata),
+ (gst_matroska_demux_video_caps), (gst_matroska_demux_plugin_init):
+ * gst/mpegaudio/common.c:
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_class_init),
+ (gst_videoscale_getcaps), (gst_videoscale_link),
+ (gst_videoscale_src_fixate), (gst_videoscale_init),
+ (gst_videoscale_finalize):
+ * gst/videoscale/gstvideoscale.h:
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_get_capslist):
+ * gst/wavenc/gstwavenc.c:
+ * sys/oss/gstossmixer.c: (fill_labels):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_calculate_pixel_aspect_ratio),
+ (gst_ximagesink_xcontext_get), (gst_ximagesink_fixate),
+ (gst_ximagesink_getcaps), (gst_ximagesink_sink_link),
+ (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
+ (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+ (gst_ximagesink_init), (gst_ximagesink_class_init):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c:
+ (gst_xvimagesink_calculate_pixel_aspect_ratio),
+ (gst_xvimagesink_xcontext_get), (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+ (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+ * sys/xvimage/xvimagesink.h:
+ first batch of pixel aspect ratio commits.
+
+2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_chain):
+ * gst/ffmpegcolorspace/imgconvert.c: (avpicture_fill):
+ handle stride, needs work if we want to move stride handling
+ upstream, but works correctly for our purposes.
+
+2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videoscale/README:
+ add testing examples
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_link),
+ (gst_videoscale_chain):
+ * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+ (gst_videoscale_get_size):
+ add get_size function that handles stride like videotestsrc.
+ fixes conversion for YUV formats for as much as I can test them.
+
+2004-07-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+ (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+ (gst_xvimagesink_xvimage_put):
+ further cleanups, logging, error handling and synchronizing
+
+2004-07-27 Wim Taymans <wim@fluendo.com>
+
+ * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+ (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
+ (gst_videomixer_pad_set_property),
+ (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
+ (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+ (gst_videomixer_class_init), (gst_videomixer_init),
+ (gst_videomixer_getcaps), (gst_videomixer_request_new_pad),
+ (gst_videomixer_blend_ayuv_i420), (pad_zorder_compare),
+ (gst_videomixer_sort_pads), (gst_videomixer_fill_checker),
+ (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
+ (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
+ (gst_videomixer_loop), (plugin_init):
+ Be a nicer negotiation citizen and provide a getcaps function on
+ the srcpad. This also fixes a crash when resizing.
+
+2004-07-27 Julien MOUTTE <julien@moutte.net>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new): Some fixes to image size calculation.
+
+2004-07-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
+ * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+ (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+ (gst_pngenc_set_property):
+ * ext/libpng/gstpngenc.h:
+ Added snapshot property to pngenc.
+ removed g_print from pngdec
+
+2004-07-27 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/ac3parse/ac3parse.vcproj
+ * gst/adder/adder.vcproj
+ * gst/alpha/alpha.vcproj
+ * gst/alpha/alphacolor.vcproj
+ * gst/asfdemux/asf.vcproj
+ * gst/audioconvert/audioconvert.vcproj
+ * gst/audiorate/audiorate.vcproj
+ * gst/audioscale/audioscale.vcproj
+ * gst/auparse/auparse.vcproj
+ * gst/avi/avi.vcproj
+ * gst/cdxaparse/cdxaparse.vcproj
+ * gst/chart/chart.vcproj
+ * gst/colorspace/colorspace.vcproj
+ * gst/cutter/cutter.vcproj
+ * gst/debug/debug.vcproj
+ * gst/debug/efence.vcproj
+ * gst/debug/navigationtest.vcproj
+ * gst/deinterlace/deinterlace.vcproj
+ * gst/effectv/effectv.vcproj
+ * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
+ * gst/filter/filter.vcproj
+ * gst/flx/flxdec.vcproj
+ * gst/goom/goom.vcproj
+ * gst/interleave/interleave.vcproj
+ * gst/law/alaw.vcproj
+ * gst/law/mulaw.vcproj
+ * gst/matroska/matroska.vcproj
+ * gst/median/median.vcproj
+ * gst/mixmatrix/mixmatrix.vcproj
+ * gst/mpeg1sys/mpeg1systemencode.vcproj
+ * gst/mpeg1videoparse/mp1videoparse.vcproj
+ * gst/mpeg2sub/mpeg2subt.vcproj
+ * gst/mpegaudio/mpegaudio.vcproj
+ * gst/mpegaudioparse/mpegaudioparse.vcproj
+ * gst/mpegstream/mpegstream.vcproj
+ * gst/multifilesink/multifilesink.vcproj
+ * gst/multipart/multipart.vcproj
+ * gst/oneton/oneton.vcproj
+ * gst/overlay/overlay.vcproj
+ * gst/passthrough/passthrough.vcproj
+ * gst/qtdemux/qtdemux.vcproj
+ * gst/realmedia/rmdemux.vcproj
+ * gst/rtjpeg/rtjpeg.vcproj
+ * gst/rtp/rtp.vcproj
+ * gst/silence/silence.vcproj
+ * gst/sine/sinesrc.vcproj
+ * gst/smooth/smooth.vcproj
+ * gst/smpte/smpte.vcproj
+ * gst/spectrum/spectrum.vcproj
+ * gst/speed/speed.vcproj
+ * gst/stereo/stereo.vcproj
+ * gst/switch/switch.vcproj
+ * gst/tags/tagedit.vcproj
+ * gst/tcp/tcp.vcproj
+ * gst/typefind/typefindfunctions.vcproj
+ * gst/udp/udp.vcproj
+ * gst/videobox/videobox.vcproj
+ * gst/videocrop/videocrop.vcproj
+ * gst/videodrop/videodrop.vcproj
+ * gst/videofilter/gamma.vcproj
+ * gst/videofilter/videobalance.vcproj
+ * gst/videofilter/videofilter.vcproj
+ * gst/videofilter/videoflip.vcproj
+ * gst/videoflip/videoflip.vcproj
+ * gst/videomixer/videomixer.vcproj
+ * gst/videorate/videorate.vcproj
+ * gst/videoscale/videoscale.vcproj
+ * gst/videotestsrc/videotestsrc.vcproj
+ * gst/virtualdub/virtualdub.vcproj
+ * gst/volenv/volenv.vcproj
+ * gst/volume/volume.vcproj
+ * gst/wavenc/wavenc.vcproj
+ * gst/wavparse/wavparse.vcproj
+ * gst/y4m/y4menc.vcproj
+ * gst-libs/gst/audio/audio.vcproj
+ * gst-libs/gst/audio/audiofilter.vcproj
+ * gst-libs/gst/colorbalance/colorbalance.vcproj
+ * gst-libs/gst/idct/idtc.vcproj
+ * gst-libs/gst/media-info/media-info.vcproj
+ * gst-libs/gst/mixer/mixer.vcproj
+ * gst-libs/gst/navigation/navigation.vcproj
+ * gst-libs/gst/play/play.vcproj
+ * gst-libs/gst/propertyprobe/propertyprobe.vcproj
+ * gst-libs/gst/resample/resample.vcproj
+ * gst-libs/gst/riff/riff.vcproj
+ * gst-libs/gst/tuner/tuner.vcproj
+ * gst-libs/gst/video/video.vcproj
+ * gst-libs/gst/xoverlay/xoverlay.vcproj
+ avoid problems with math.h, fix release dependancy
+ rename GStreamer-0.8.lib to libgstreamer.lib
+
+2004-07-27 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate): When
+ the atom is not available we have to unlock the mutex. Fixes #148023
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst-libs/gst/media-info/media-info.h:
+ issue for a vararg macro with MSVC
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/effectv/effectv.vcproj
+ * gst-libs/gst/idct/idct.vcproj:
+ * gst-libs/gst/media-info/media-info.vcproj:
+ * gst-libs/gst/navigation/navigation.vcproj:
+ * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
+ * gst-libs/gst/video/video.vcproj:
+ * gst-libs/gst/xoverlay/xoverlay.vcproj:
+ fixes for build problems
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst-libs/gst/audio/audio.def:
+ * gst-libs/gst/audio/riff.def:
+ add some definitions needed by plugins
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/asfdemux/gstasfmux.c
+ Fix some 64 bits constants to be glib friendly
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/ac3parse/gstac3parse.c
+ * gst/audioscale/gstaudioscale.c
+ * gst/auparse/gstauparse.c
+ * gst/colorspace/gstcolorspace.c
+ * gst/colorspace/yuv2rgb.h
+ local include fixes
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * win32/gst.sln
+ add more plugins to the build
+
+2004-07-26 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+ (gst_ximagesink_ximage_new): Some more fixes to image size calculation.
+
+2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
+ (gst_level_set_property), (gst_level_get_property),
+ (gst_level_base_init), (gst_level_class_init):
+ add debugging categories. cleanups.
+
+2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+ (gst_videoscale_planar411), (gst_videoscale_planar400),
+ (gst_videoscale_packed422), (gst_videoscale_packed422rev),
+ (gst_videoscale_scale_nearest_str1),
+ (gst_videoscale_scale_nearest_str2),
+ (gst_videoscale_scale_nearest_str4),
+ (gst_videoscale_scale_nearest_16bit),
+ (gst_videoscale_scale_nearest_24bit):
+ fixed stride issues
+ tested with 320x240 -> 321, 322, 324 x240
+ tested with YV12, I420, YUY2, UYVY
+ fixed packed422rev (don't think it could have worked before)
+ by testing with UYVY
+
+2004-07-26 Benjamin Otte <otte@gnome.org>
+
+ * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_init),
+ (gst_lame_chain), (gst_lame_setup), (gst_lame_change_state),
+ (plugin_init):
+ add debugging category, add error checks like checking return values
+ of setup calls, make sure it still works after
+ PLAYING=>NULL=>PLAYING, fix encoding of mono streams
+
+2004-07-26 Wim Taymans <wim@fluendo.com>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+ (gst_mpeg_demux_get_audio_stream),
+ (gst_mpeg_demux_process_private):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_data):
+ Check for error codes from the negotiation functions. Make sure
+ we really set the pad caps when a new pad is created.
+
+2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_caps_to_pix_fmt):
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_pad_link):
+ don't make function do two things at the same time without reason.
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/ac3parse/ac3parse.vcproj
+ * gst/adder/adder.vcproj
+ * gst/alpha/alpha.vcproj
+ * gst/alpha/alphacolor.vcproj
+ * gst/asfdemux/asf.vcproj
+ * gst/audioconvert/audioconvert.vcproj
+ * gst/audiorate/audiorate.vcproj
+ * gst/audioscale/audioscale.vcproj
+ * gst/auparse/auparse.vcproj
+ * gst/avi/avi.vcproj
+ * gst/cdxaparse/cdxaparse.vcproj
+ * gst/chart/chart.vcproj
+ * gst/colorspace/colorspace.vcproj
+ * gst/cutter/cutter.vcproj
+ * gst/debug/debug.vcproj
+ * gst/debug/efence.vcproj
+ * gst/debug/navigationtest.vcproj
+ * gst/deinterlace/deinterlace.vcproj
+ * gst/effectv/effectv.vcproj
+ * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
+ * gst/filter/filter.vcproj
+ * gst/flx/flxdec.vcproj
+ * gst/goom/goom.vcproj
+ * gst/interleave/interleave.vcproj
+ * gst/law/alaw.vcproj
+ * gst/law/mulaw.vcproj
+ * gst/matroska/matroska.vcproj
+ * gst/median/median.vcproj
+ * gst/mixmatrix/mixmatrix.vcproj
+ * gst/mpeg1sys/mpeg1systemencode.vcproj
+ * gst/mpeg1videoparse/mp1videoparse.vcproj
+ * gst/mpeg2sub/mpeg2subt.vcproj
+ * gst/mpegaudio/mpegaudio.vcproj
+ * gst/mpegaudioparse/mpegaudioparse.vcproj
+ * gst/mpegstream/mpegstream.vcproj
+ * gst/multifilesink/multifilesink.vcproj
+ * gst/multipart/multipart.vcproj
+ * gst/oneton/oneton.vcproj
+ * gst/overlay/overlay.vcproj
+ * gst/passthrough/passthrough.vcproj
+ * gst/qtdemux/qtdemux.vcproj
+ * gst/realmedia/rmdemux.vcproj
+ * gst/rtjpeg/rtjpeg.vcproj
+ * gst/rtp/rtp.vcproj
+ * gst/silence/silence.vcproj
+ * gst/sine/sinesrc.vcproj
+ * gst/smooth/smooth.vcproj
+ * gst/smpte/smpte.vcproj
+ * gst/spectrum/spectrum.vcproj
+ * gst/speed/speed.vcproj
+ * gst/stereo/stereo.vcproj
+ * gst/switch/switch.vcproj
+ * gst/tags/tagedit.vcproj
+ * gst/tcp/tcp.vcproj
+ * gst/typefind/typefindfunctions.vcproj
+ * gst/udp/udp.vcproj
+ * gst/videobox/videobox.vcproj
+ * gst/videocrop/videocrop.vcproj
+ * gst/videodrop/videodrop.vcproj
+ * gst/videofilter/gamma.vcproj
+ * gst/videofilter/videobalance.vcproj
+ * gst/videofilter/videofilter.vcproj
+ * gst/videofilter/videoflip.vcproj
+ * gst/videoflip/videoflip.vcproj
+ * gst/videomixer/videomixer.vcproj
+ * gst/videorate/videorate.vcproj
+ * gst/videoscale/videoscale.vcproj
+ * gst/videotestsrc/videotestsrc.vcproj
+ * gst/virtualdub/virtualdub.vcproj
+ * gst/volenv/volenv.vcproj
+ * gst/volume/volume.vcproj
+ * gst/wavenc/wavenc.vcproj
+ * gst/wavparse/wavparse.vcproj
+ * gst/y4m/y4menc.vcproj
+ more plugins supported under windows
+
+2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+ (gst_ximagesink_ximage_put), (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_chain), (gst_ximagesink_buffer_alloc):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc):
+ Add debugging statements. Use the sizes as returned by the
+ *CreateImage calls.
+
+2004-07-26 Johan Dahlin <johan@gnome.org>
+
+ * gst/tcp/gsttcpclientsrc.c (gst_tcpclientsrc_get): Make sure that
+ the pad is negotiated.
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c (gst_ffmpegcolorspace_chain): Ditto
+
+2004-07-26 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst-libs/gst/colorbalance/colorbalance.vcproj:
+ * gst-libs/gst/idct/idct.vcproj:
+ * gst-libs/gst/media-info/media-info.vcproj:
+ * gst-libs/gst/mixer/mixer.vcproj:
+ * gst-libs/gst/navigation/navigation.vcproj:
+ * gst-libs/gst/play/play.vcproj:
+ * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
+ * gst-libs/gst/resample/resample.vcproj:
+ * gst-libs/gst/tuner/tuner.vcproj:
+ * gst-libs/gst/video/video.vcproj:
+ * gst-libs/gst/xoverlay/xoverlay.vcproj:
+ more plugins supported under windows
+
+2004-07-25 Iain <iain@prettypeople.org>
+
+ * gst/wavparse/gstwavparse.c (gst_wavparse_fmt): Set the caps on the
+ pad now rather than when the pad is created because state changes wipe
+ explicit caps (fixes #148043).
+
+2004-07-25 Sebastien Cote <sc5@hermes.usherb.ca>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstmad.c:
+ fix mad plugin crashing on Sun (fixes #148289)
+
+2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/avi/avi.def:
+ * gst/avi/avi.vcproj:
+ * gst/matroska/matroska.def:
+ * gst/matroska/matroska.vcproj:
+ remove unused .def files
+
+2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst-libs/gst/audio/gstaudiofilter.c:
+ Clean the local include
+
+2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
+
+ * win32/gst.sln:
+ * gst-libs/gst/audio/audio.def:
+ * gst-libs/gst/audio/audio.vcproj:
+ * gst-libs/gst/audio/audiofilter.vcproj:
+ * gst-libs/gst/audio/riff.def:
+ * gst-libs/gst/audio/riff.vcproj:
+ * gst-libs/gst/gst-libs.def:
+ * gst-libs/gst/gst-libs.vcproj:
+ * gst/avi/avi.vcproj:
+ * gst/avi/avi.vcproj:
+ Copy the files where needed after building, cleaner projects
+
+2004-07-25 Steve Lhomme <steve.lhomme@free.fr>
+
+ * gst/matroska/ebml-write.c:
+ Fix some 64 bits constants to be glib friendly
+
+2004-07-24 Steve Lhomme <steve.lhomme@free.fr>
+
+ * win32/gst.sln:
+ * gst-libs/gst/gst-libs.def:
+ * gst-libs/gst/gst-libs.vcproj:
+ * gst/matroska/matroska.def:
+ * gst/matroska/matroska.vcproj:
+ Add the preliminary canvas to build plugins on Win32
+
+2004-07-23 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ don't enfore negotiation from source side, it breaks
+ sinesrc ! audioconvert ! osssink
+
+2004-07-22 David Schleef <ds@schleef.org>
+
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init): Add typefind
+ for ELF files, since they can easily be recognized as audio/mpeg.
+ (bug #147441)
+
+2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+ (gst_videoscale_planar411), (gst_videoscale_scale_nearest_32bit),
+ (gst_videoscale_scale_nearest_24bit),
+ (gst_videoscale_scale_nearest_16bit):
+ fix 16bit and 24bit for stride (24bit might need testing)
+ don't pretend we do more than one algorithm
+
+2004-07-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ * gst/Makefile.am:
+ * gst/multifilesink/Makefile.am:
+ * gst/multifilesink/gstmultifilesink.c:
+ (gst_multifilesink_get_formats),
+ (gst_multifilesink_get_query_types), (_do_init),
+ (gst_multifilesink_base_init), (gst_multifilesink_class_init),
+ (gst_multifilesink_init), (gst_multifilesink_dispose),
+ (gst_multifilesink_set_location), (gst_multifilesink_set_property),
+ (gst_multifilesink_get_property), (gst_multifilesink_open_file),
+ (gst_multifilesink_close_file), (gst_multifilesink_next_file),
+ (gst_multifilesink_pad_query), (gst_multifilesink_handle_event),
+ (gst_multifilesink_chain), (gst_multifilesink_change_state),
+ (gst_multifilesink_uri_get_type),
+ (gst_multifilesink_uri_get_protocols),
+ (gst_multifilesink_uri_get_uri), (gst_multifilesink_uri_set_uri),
+ (gst_multifilesink_uri_handler_init), (plugin_init):
+ * gst/multifilesink/gstmultifilesink.h:
+ * testsuite/Makefile.am:
+ * testsuite/multifilesink/Makefile.am:
+ * testsuite/multifilesink/fakesrc_test.c: (gst_newmedia_base_init),
+ (gst_newmedia_class_init), (gst_newmedia_init),
+ (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+ (newfile_signal), (test_signal), (main):
+ multifilesink plugin for creating new files every time a new media
+ discontinuity event occurs
+
+2004-07-22 Wim Taymans <wim@fluendo.com>
+
+ * gst/alpha/Makefile.am:
+ * gst/alpha/gstalphacolor.c: (gst_alpha_color_get_type),
+ (gst_alpha_color_base_init), (gst_alpha_color_class_init),
+ (gst_alpha_color_init), (gst_alpha_color_set_property),
+ (gst_alpha_color_get_property), (gst_alpha_color_sink_link),
+ (transform), (gst_alpha_color_chain),
+ (gst_alpha_color_change_state), (plugin_init):
+ Stupid plugin to to RGBA to AYUV conversion because none of
+ the colorspace plugins can handle that yet.
+
+2004-07-22 Wim Taymans <wim@fluendo.com>
+
+ * examples/seeking/seek.c: (update_scale), (main):
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
+ (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
+ (gst_decode_bin_init), (gst_decode_bin_dispose),
+ (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+ (no_more_pads), (close_link), (type_found),
+ (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+ (plugin_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+ (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+ (gst_play_base_bin_dispose), (queue_overrun),
+ (gen_preroll_element), (remove_prerolls), (unknown_type),
+ (no_more_pads), (new_stream), (setup_source),
+ (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+ (play_base_eos), (gst_play_base_bin_change_state),
+ (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_unlink_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element):
+ * gst/playback/gststreaminfo.h:
+ More playback updates, attempt to fix things after the state change
+ breakage.
+
+2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videoscale/videoscale.c: (gst_videoscale_planar411),
+ (gst_videoscale_scale_nearest_16bit):
+ comment algorithm
+
+2004-07-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_class_init), (gst_videotestsrc_src_link),
+ (gst_videotestsrc_init), (gst_videotestsrc_get),
+ (gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
+ (gst_videotestsrc_get_property):
+ * gst/videotestsrc/gstvideotestsrc.h:
+ * gst/videotestsrc/videotestsrc.c:
+ * gst/videotestsrc/videotestsrc.h:
+ cleanup and commenting
+
+2004-07-21 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
+ (gst_ogg_demux_get_formats), (gst_ogg_demux_src_query),
+ (gst_ogg_demux_src_event), (gst_ogg_demux_src_convert),
+ (gst_ogg_demux_handle_event), (gst_ogg_demux_seek_before),
+ (_find_chain_get_unknown_part), (_find_streams_check),
+ (gst_ogg_demux_push), (gst_ogg_pad_push):
+ * ext/theora/theoradec.c: (theora_get_formats),
+ (theora_dec_src_convert), (theora_dec_sink_convert),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+ (theora_dec_chain):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+ (vorbis_dec_convert), (vorbis_dec_src_query),
+ (vorbis_dec_src_event), (vorbis_dec_event):
+ More seeking fixes, oggdemux now supports seeking to time and
+ uses the downstream element to convert granulepos to time.
+ Seeking in theora-only ogg files now works.
+
+2004-07-21 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (gst_theora_dec_init),
+ (theora_get_formats), (theora_get_event_masks),
+ (theora_get_query_types), (theora_dec_src_convert),
+ (theora_dec_sink_convert), (theora_dec_src_query),
+ (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+ (vorbis_get_event_masks), (vorbis_get_query_types),
+ (gst_vorbis_dec_init), (vorbis_dec_convert),
+ (vorbis_dec_src_query), (vorbis_dec_src_event), (vorbis_dec_event):
+ Added query/convert/formats functions to vorbis and theora decoders
+ so that the outside world can use them too. Fixed seeking on an
+ ogg/theora/vorbis file by disabling the seeking seeking on the
+ theora srcpad.
+
+2004-07-21 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+ (gst_ximagesink_renegotiate_size), (gst_ximagesink_sink_link),
+ (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id): Optimize
+ images creation for both elements. We don't create the image on caps
+ nego or renego, we just destroy the internal one if present if it does
+ not match the needs. The chain function takes care of creating a new
+ image when needed.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+ (gst_xvimagesink_xwindow_decorate), (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
+ (gst_xvimagesink_set_xwindow_id): Additionally xvimage now contains
+ the image format information. The buffer pool checks for the context
+ image format and discard images with different formats.
+ * sys/xvimage/xvimagesink.h: Adding im_format in the xvimage structure.
+
+2004-07-21 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_chain):
+ no point in doing any chaining if the pad we want to push from
+ isn't usable.
+
+2004-07-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data):
+ Fix double end-to-native symbol conversion (#148021).
+
+2004-07-20 David Schleef <ds@schleef.org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
+ Don't use an Atom that doesn't exist.
+
+2004-07-20 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_get_stats),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer):
+ * gst/tcp/gstmultifdsink.h:
+ More multifdsink stats. Avoid deadlock by releasing locks
+ before sending out a signal.
+
+2004-07-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/hu.po:
+ added Hungarian translation (Laszlo Dvornik)
+
+2004-07-20 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer):
+ * gst/tcp/gsttcp-marshal.list:
+ Fixed the stupid marshal definition.
+
+2004-07-20 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_init), (gst_multifdsink_add),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_queue_buffer), (gst_multifdsink_chain),
+ (gst_multifdsink_set_property), (gst_multifdsink_get_property),
+ (gst_multifdsink_init_send):
+ * gst/tcp/gstmultifdsink.h:
+ Added more stats, added timeout for a client, fixed some typos
+ and added some comments.
+
+2004-07-20 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+ (gst_multifdsink_add), (gst_multifdsink_get_stats),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_write):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcp-marshal.list:
+ Added get_stats method that returns a GValueArray of
+ stats values.
+
+2004-07-19 Benjamin Otte <otte@gnome.org>
+
+ * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
+ make sure longname, description and author are valid UTF-8
+
+2004-07-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_change_state),
+ (gst_ximagesink_set_property):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state),
+ (gst_xvimagesink_set_property):
+ make sure SYNCHRONOUS is respected after getting the X context
+
+2004-07-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_handle_src_event),
+ (gst_matroska_demux_parse_blockgroup):
+ * gst/matroska/matroska-ids.h:
+ add BlockReference tag and ignore it to clear out log.
+ ignore NAVIGATION events to clear out log.
+
+2004-07-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
+ (gst_matroska_demux_add_stream):
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_class_init):
+ add debug categories
+
+2004-07-16 Wim Taymans <wim@fluendo.com>
+
+ * ext/libpng/Makefile.am:
+ * ext/libpng/gstpng.c: (plugin_init):
+ * ext/libpng/gstpngdec.c: (user_error_fn), (user_warning_fn),
+ (gst_pngdec_get_type), (gst_pngdec_base_init),
+ (gst_pngdec_class_init), (gst_pngdec_sinklink), (gst_pngdec_init),
+ (gst_pngdec_src_getcaps), (user_read_data), (gst_pngdec_chain):
+ * ext/libpng/gstpngdec.h:
+ Added png decoder.
+
+2004-07-16 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
+ (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_new),
+ (gst_ximagesink_ximage_destroy), (gst_ximagesink_sink_link),
+ (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
+ (gst_ximagesink_buffer_alloc):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+ (gst_xvimagesink_buffer_alloc):
+ * sys/xvimage/xvimagesink.h: Getting the 2 video sinks synchronized
+ again. Using internal data pointer of the x(v)image to store image's
+ data to be coherent with the buffer alloc mechanism. Investigated the
+ image destruction code to be sure that everything gets freed correctly.
+
+2004-07-16 Wim Taymans <wim@fluendo.com>
+
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_vids_with_data),
+ (gst_riff_read_strf_auds_with_data):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+ Make sure we don't create 0 sized subbuffers in riff-read.
+ Signal the no more pads signal after reading the avi header.
+
+2004-07-16 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
+ (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
+ (gst_decode_bin_init), (gst_decode_bin_dispose),
+ (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+ (no_more_pads), (close_link), (type_found),
+ (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+ (gst_decode_bin_change_state), (plugin_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+ (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+ (gst_play_base_bin_dispose), (queue_overrun),
+ (gen_preroll_element), (remove_prerolls), (unknown_type),
+ (no_more_pads), (new_stream), (setup_source),
+ (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+ (play_base_eos), (gst_play_base_bin_change_state),
+ (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_unlink_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybasebin.h:
+ Better error recovery. Added configurable preroll queue size. Faster
+ detection of no-more-pads.
+
+2004-07-16 Wim Taymans <wim@fluendo.com>
+
+ * gst-libs/gst/video/video.h:
+ Added 32 bits RGBA. Not sure if we should use another mime-type
+ for alpha rgb. Currently the presence of the alpha_mask property
+ signals an alpha channel.
+
+2004-07-16 Wim Taymans <wim@fluendo.com>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+ FPS seems to be 0.0 to MAX everywhere else.
+
+2004-07-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ mp42/mp43 (no caps) exist too.
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_video_caps):
+ Set pixel_width/height; we've got them in-caps.
+ * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+ * gst/wavparse/gstwavparse.c: (plugin_init):
+ Both are valid primary.
+ * sys/oss/gstossmixer.c:
+ Remove i18n hack and enable translations.
+
+2004-07-15 Benjamin Otte <otte@gnome.org>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
+ fix for non-shm xv. Original patch by Tim Ringenbach (fixes #147248)
+
+2004-07-15 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+ (gst_alsa_sw_params_dump), (gst_alsa_hw_params_dump),
+ (gst_alsa_close_audio):
+ disable some of the debugging code for now. Writing debugging to a
+ buffer is broken in current alsalib releases.
+
+2004-07-12 Benjamin Otte <otte@gnome.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
+ use bufferpools
+
+2004-07-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+ (theora_dec_src_query), (theora_dec_event):
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
+ add debugging categories. Remove \n's.
+
+2004-07-13 Johan Dahlin <johan@gnome.org>
+
+ * gst/playback/gstplaybin.c (gst_play_bin_set_property)
+ (gst_play_bin_get_property): Impl.
+
+2004-07-13 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_seek_before):
+ When trying to find the stream length, seek back N pages
+ instead of just one, where N is the number of streams in
+ the current chain.
+
+2004-07-13 Wim Taymans <wim@fluendo.com>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_audio_caps_with_data),
+ (gst_riff_create_audio_caps),
+ (gst_riff_create_audio_template_caps):
+ * gst-libs/gst/riff/riff-media.h:
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_vids_with_data),
+ (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_auds):
+ * gst-libs/gst/riff/riff-read.h:
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+ (gst_avi_demux_add_stream):
+ Set codec_data on caps for avidemuxer.
+
+2004-07-12 David Schleef <ds@schleef.org>
+
+ * configure.ac: Fix test for Objective C
+
+2004-07-12 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_get_capslist),
+ (gst_gdk_pixbuf_chain):
+ Add svg and pcx to template caps, and ensure that getcaps returns a
+ subset of the template caps.
+ Copy each row manually for output, as gdkpixbuf may pad the
+ rowstride to a 32-bit word boundary.
+
+2004-07-12 Wim Taymans <wim@fluendo.com>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+ (gst_riff_create_video_template_caps):
+ Fix the template caps to include some more media types.
+
+2004-07-12 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+ (compare_ranks), (print_feature), (gst_decode_bin_init),
+ (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (new_pad), (close_link), (type_found),
+ (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+ (gst_decode_bin_change_state), (plugin_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+ (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+ (gst_play_base_bin_dispose), (queue_overrun),
+ (gen_preroll_element), (remove_prerolls), (no_more_pads),
+ (new_stream), (setup_source), (gst_play_base_bin_set_property),
+ (gst_play_base_bin_get_property), (play_base_eos),
+ (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_unlink_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+ (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_dispose), (gst_play_bin_set_property),
+ (gst_play_bin_get_property), (gen_video_element),
+ (gen_audio_element), (remove_sinks), (setup_sinks),
+ (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
+ (gst_play_bin_send_event), (gst_play_bin_get_formats),
+ (gst_play_bin_convert), (gst_play_bin_get_query_types),
+ (gst_play_bin_query), (plugin_init):
+ * gst/playback/test4.c: (main):
+ More fixes on reusing of the element.
+
+2004-07-11 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstmad.c: (normal_seek):
+ allow seeking for other methods than just SET
+
+2004-07-11 Andy Wingo <wingo@pobox.com>
+
+ * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_link): For
+ float, "any" caps -> buffer_frames=[0,MAX].
+
+ * gst/interleave/interleave.c (interleave_getcaps): Seems the core
+ doesn't intersect our caps with the template any more. Do it
+ ourselves.
+ (interleave_buffered_loop): Use g_newa instead of malloc/free.
+
+2004-07-09 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+ (compare_ranks), (print_feature), (gst_decode_bin_init),
+ (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (new_pad), (close_link), (type_found),
+ (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+ (gst_decode_bin_change_state), (plugin_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+ (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+ (gst_play_base_bin_dispose), (queue_overrun),
+ (gen_preroll_element), (remove_prerolls), (no_more_pads),
+ (new_stream), (setup_source), (gst_play_base_bin_set_property),
+ (gst_play_base_bin_get_property), (play_base_eos),
+ (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_unlink_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+ (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_dispose), (gst_play_bin_set_property),
+ (gst_play_bin_get_property), (gen_video_element),
+ (gen_audio_element), (remove_sinks), (setup_sinks),
+ (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
+ (gst_play_bin_send_event), (gst_play_bin_get_formats),
+ (gst_play_bin_convert), (gst_play_bin_get_query_types),
+ (gst_play_bin_query), (plugin_init):
+ * gst/playback/test4.c: (main):
+ Work on object reuse and seeking.
+
+2004-07-09 Wim Taymans <wim@fluendo.com>
+
+ * examples/seeking/seek.c: (iterate):
+ Don't consume all CPU in the idle loop.
+
+2004-07-09 Wim Taymans <wim@fluendo.com>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_new_output_pad),
+ (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_process_private):
+ Add pad to element *after* setting the pad functions so that
+ the scheduler can use the correct ones.
+
+2004-07-09 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (theora_dec_from_granulepos),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_chain):
+ Sync to keyframe after seek
+
+2004-07-09 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+ (gst_alsa_sink_loop), (gst_alsa_sink_change_state):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_change_state):
+ * ext/libvisual/visual.c: (gst_visual_change_state):
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_change_state):
+ * ext/theora/theoradec.c: (theora_dec_change_state):
+ * ext/theora/theoraenc.c: (theora_enc_change_state):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_change_state):
+ * gst-libs/gst/navigation/navigation.c:
+ * gst/adder/gstadder.c: (gst_adder_change_state):
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
+ (gst_audio_convert_get_buffer):
+ * gst/multipart/multipartdemux.c:
+ (gst_multipart_demux_change_state):
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_change_state):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+ * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+ * gst/videoscale/gstvideoscale.c:
+ (gst_videoscale_handle_src_event):
+ * gst/volume/gstvolume.c: (volume_chain_int16):
+ don't assert in state change, this should be done by the base
+ GstElement class.
+ various debugging fixes.
+
+2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * configure.ac:
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+ (gst_play_dispose), (gst_play_set_location),
+ (gst_play_set_data_src), (gst_play_set_video_sink),
+ (gst_play_set_audio_sink), (gst_play_set_visualization),
+ (gst_play_connect_visualization), (gst_play_get_sink_element),
+ (gst_play_get_all_by_interface):
+ * gst-libs/gst/play/play.h:
+ add new method to get elements implementing an interface.
+ add various error logging
+
+2004-07-08 Wim Taymans <wim@fluendo.com>
+
+ * examples/seeking/seek.c: (make_dv_pipeline), (make_avi_pipeline),
+ (make_mpeg_pipeline), (make_mpegnt_pipeline),
+ (make_playerbin_pipeline), (query_durations_elems),
+ (query_durations_pads), (query_positions_elems),
+ (query_positions_pads), (update_scale), (iterate), (stop_seek),
+ (main):
+ Added playbin seeking example.
+
+2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * gst-libs/gst/play/play.c: (gst_play_set_location),
+ (gst_play_set_data_src), (gst_play_set_video_sink),
+ (gst_play_set_audio_sink), (gst_play_set_visualization),
+ (gst_play_connect_visualization), (gst_play_get_framerate):
+ use a macro to look up elements from hash table
+
+2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+ (gst_play_get_length_callback), (gst_play_set_location),
+ (gst_play_seek_to_time), (gst_play_set_data_src),
+ (gst_play_set_video_sink), (gst_play_set_audio_sink),
+ (gst_play_set_visualization), (gst_play_connect_visualization),
+ (gst_play_get_sink_element):
+ - add debugging info
+ - fix looking up sink elements by iterating over complete caps
+ - put everything except for source and autoplugger in a complete bin
+
+2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_drain_audio):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_flush_one_pad),
+ (gst_alsa_sink_check_event), (gst_alsa_sink_mmap),
+ (gst_alsa_sink_write), (gst_alsa_sink_loop):
+ * ext/alsa/gstalsasink.h:
+ - add debugging info
+ - clean up schizophrenia of data/buffer/event
+ - fix double event unref error
+
+2004-07-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/Makefile.am:
+ Add headers to noinst
+
+2004-07-08 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * tools/gst-launch-ext-m.m:
+ * tools/gst-launch-ext.1.in:
+ convert to the third millenium
+
+2004-07-07 David Schleef <ds@schleef.org>
+
+ * sys/dxr3/Makefile.am: noinst_SOURCES should be nodist_SOURCES
+
+2004-07-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/Makefile.am:
+ * gst/playback/README:
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+ (compare_ranks), (print_feature), (gst_decode_bin_init),
+ (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (new_pad), (close_link), (type_found),
+ (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+ (plugin_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+ (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+ (gst_play_base_bin_dispose), (rebuild_pipeline), (queue_overrun),
+ (gen_preroll_element), (no_more_pads), (new_stream),
+ (setup_source), (gst_play_base_bin_set_property),
+ (gst_play_base_bin_get_property), (gst_play_base_bin_change_state),
+ (gst_play_base_bin_add_element),
+ (gst_play_base_bin_remove_element),
+ (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+ (gst_play_base_bin_unlink_stream),
+ (gst_play_base_bin_get_streaminfo):
+ * gst/playback/gstplaybasebin.h:
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+ (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_dispose), (gst_play_bin_set_property),
+ (gst_play_bin_get_property), (gen_video_element),
+ (gen_audio_element), (setup_sinks), (gst_play_bin_change_state),
+ (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
+ (gst_play_bin_get_formats), (gst_play_bin_convert),
+ (gst_play_bin_get_query_types), (gst_play_bin_query),
+ (plugin_init):
+ * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+ (gst_stream_info_get_type), (gst_stream_info_class_init),
+ (gst_stream_info_init), (gst_stream_info_new),
+ (gst_stream_info_dispose), (gst_stream_info_set_property),
+ (gst_stream_info_get_property):
+ * gst/playback/gststreaminfo.h:
+ * gst/playback/test.c: (gen_video_element), (gen_audio_element),
+ (main):
+ * gst/playback/test2.c: (main):
+ * gst/playback/test3.c: (update_scale), (main):
+ More playbin fixes. Added README. Do better element filtering.
+ Added base class to preroll media. Added test apps.
+
+2004-07-07 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_flush_decoder):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ various debugging improvements. Reset stream to next picture
+ instead of sequence header, otherwise seeks cannot work.
+
+2004-07-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
+ (gst_video_box_class_init), (gst_video_box_set_property),
+ (gst_video_box_i420), (gst_video_box_ayuv), (gst_video_box_chain):
+ Use pad_alloc where possible.
+
+2004-07-07 Wim Taymans <wim@fluendo.com>
+
+ * sys/oss/gstosselement.c: (gst_osselement_reset),
+ (gst_osselement_parse_caps):
+ * sys/oss/gstosselement.h:
+ * sys/oss/gstosssrc.c: (gst_osssrc_get):
+ Fix offset on osssrc.
+
+2004-07-07 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theora.c: (plugin_init):
+ * ext/theora/theoradec.c: (theora_dec_from_granulepos),
+ (theora_dec_src_query), (theora_dec_chain):
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (theora_enc_sink_link), (theora_buffer_from_packet),
+ (theora_push_packet), (theora_enc_chain):
+ Fix theora granulepos calculation.
+ Fix overflow in duration/position calculation.
+ Bump rank to PRIMARY for theoradec.
+ Use granulepos of last packet to calculate position.
+ Set keyframe flag on buffers when needed.
+
+2004-07-06 David Schleef <ds@schleef.org>
+
+ * gst/playback/Makefile.am: 'test' in bin_PROGRAMS? Are you
+ serious? (Fixed, obviously.)
+
+2004-07-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/cs.po:
+ added Czech translation (Miloslav Trmac)
+
+2004-07-05 Wim Taymans <wim@fluendo.com>
+
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+ (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
+ (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+ (close_link), (type_found), (gst_decode_bin_set_property),
+ (gst_decode_bin_get_property), (gst_decode_bin_get_event_masks),
+ (gst_decode_bin_send_event), (gst_decode_bin_get_formats),
+ (gst_decode_bin_convert), (gst_decode_bin_get_query_types),
+ (gst_decode_bin_query), (plugin_init):
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+ (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_dispose), (rebuild_pipeline), (get_audio_element),
+ (get_video_element), (new_pad), (setup_source),
+ (gst_play_bin_set_property), (gst_play_bin_get_property),
+ (gst_play_bin_change_state), (gst_play_bin_add_element),
+ (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
+ (gst_play_bin_send_event), (gst_play_bin_get_formats),
+ (gst_play_bin_convert), (gst_play_bin_get_query_types),
+ (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
+ * gst/playback/test.c: (main):
+ More fixes, cleaned up playbin, make it use decodebin. Added
+ threaded property to playbin.
+
+2004-07-05 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * gst/playback/Makefile.am:
+ * gst/playback/decodetest.c: (main):
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+ (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+ (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
+ (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+ (close_link), (type_found), (gst_decode_bin_set_property),
+ (gst_decode_bin_get_property), (gst_decode_bin_change_state),
+ (gst_decode_bin_get_event_masks), (gst_decode_bin_send_event),
+ (gst_decode_bin_get_formats), (gst_decode_bin_convert),
+ (gst_decode_bin_get_query_types), (gst_decode_bin_query),
+ (plugin_init):
+ * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+ (gst_play_bin_class_init), (gst_play_bin_init),
+ (gst_play_bin_dispose), (gen_default_output), (rebuild_pipeline),
+ (collect_sink_pads), (find_compatibles), (close_pad_link),
+ (try_to_link_1), (new_pad), (close_link), (type_found),
+ (setup_source), (gst_play_bin_set_property),
+ (gst_play_bin_get_property), (gst_play_bin_factory_filter),
+ (compare_ranks), (gst_play_bin_collect_factories),
+ (gst_play_bin_change_state), (gst_play_bin_add_element),
+ (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
+ (gst_play_bin_send_event), (gst_play_bin_get_formats),
+ (gst_play_bin_convert), (gst_play_bin_get_query_types),
+ (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
+ * gst/playback/test.c: (main):
+ Added some playback helper elements and some test apps, very alpha
+ still.
+
+2004-07-04 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
+ only restart audio when we indeed have an xrun to fix repeated
+ xruns. Fix suggested by Giuliano Pochini.
+
+2004-07-03 David Schleef <ds@schleef.org>
+
+ * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper): Disable
+ call to gst_debug_log() if debugging is disabled (bug #145118)
+
+2004-07-03 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
+ use our own functions for restarting the alsa device.
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ I should apply patches myself - use MIN for the third argument, not
+ the second, this fixes seeking
+
+2004-07-02 David Schleef <ds@schleef.org>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
+ (gst_flacdec_write): Actually, GST_PAD_CAPS() has nothing to
+ do with the logic.
+
+2004-07-02 David Schleef <ds@schleef.org>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_write): Set duration on
+ output buffers. Fix logic mistake. (bug #144866)
+
+2004-07-02 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/xoverlay/Makefile.am: xoverlay no longer depends
+ on X. (bug #144753)
+
+2004-07-02 David Schleef <ds@schleef.org>
+
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_setup),
+ (gst_wavenc_stop_file): Switch to GST_WRITE_UINT32_LE macros
+ (bug #144624)
+ * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
+ (gst_osselement_rate_probe_check): Add another workaround for
+ buggy drivers (bug #145336)
+
+2004-07-02 David Schleef <ds@schleef.org>
+
+ * gst/tcp/gstmultifdsink.c: (gst_multifdsink_handle_client_write):
+ Most systems don't have MSG_NOSIGNAL.
+
+2004-07-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/tuner/Makefile.am:
+ (hopefully) fix both install and dist and make error message useful.
+ needs testing across automakes.
+
+2004-07-02 Benjamin Otte <otte@gnome.org>
+
+ * ext/ogg/gstogg.c: (plugin_init):
+ we require bytestream now
+ * ext/ogg/gstoggdemux.c:
+ huge diff to implement chain setup in a fast and generic way. This
+ improves tag reading and startup of huge files (read: Theora videos)
+ quite a bit. It probably contains bugs, too, so please test.
+ Seeking is not improved to the fast method.
+
+2004-06-29 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ * ext/ogg/gstoggmux.c:
+ Fix memleak in oggdemux when running unconnected pads.
+ doc update in mux, start working on keyframe mode.
+
+2004-06-29 Benjamin Otte <otte@gnome.org>
+
+ * sys/oss/gstosssink.c:
+ * sys/oss/gstosssrc.c:
+ advertise correct template caps - we indeed do non-native endianness
+ and 8bit audio has no endianness
+ * sys/ximage/ximagesink.c: (gst_ximagesink_getcaps):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps):
+ avoid (wrong) duplications in getcaps function and return
+ template caps
+
+2004-06-29 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+ (gst_multifdsink_class_init), (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_clear),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_client_queue_data),
+ (gst_multifdsink_client_queue_caps),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+ (gst_multifdsink_init_send), (gst_multifdsink_close):
+ Fix wrong GList iteration that could crash the server when
+ more then 2 clients disconnect at the same time. Read all the
+ pending commands in one batch to recover from command storms under
+ very heavy load.
+
+2004-06-28 Wim Taymans <wim@fluendo.com>
+
+ * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+ (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
+ (gst_videomixer_pad_set_property),
+ (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
+ (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+ (gst_videomixer_class_init), (gst_videomixer_init),
+ (gst_videomixer_request_new_pad), (gst_videomixer_blend_ayuv_i420),
+ (pad_zorder_compare), (gst_videomixer_sort_pads),
+ (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+ (gst_videomixer_fill_queues), (gst_videomixer_blend_buffers),
+ (gst_videomixer_update_queues), (gst_videomixer_loop),
+ (plugin_init):
+ Avoid divide by zero, choose masterpad as the pad with the highest
+ framerate.
+
+2004-06-27 Julien Moutte <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
+ (gst_ximagesink_xwindow_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
+ (gst_xvimagesink_xwindow_new): I prefer locking the mutex in the
+ function directly. We might want to call it from somewhere else one day.
+
+2004-06-27 Julien Moutte <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
+ (gst_ximagesink_xwindow_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
+ (gst_xvimagesink_xwindow_new): Trying to fix the random behaviour of
+ window decorations.
+
+2004-06-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
+ (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
+ (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state),
+ (gst_dvdec_set_property), (gst_dvdec_get_property):
+ * ext/dv/gstdvdec.h:
+ Implement drop_factor property to lower the framerate with
+ a factor.
+
+2004-06-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/tuner/Makefile.am:
+ unbreak Company's fix that didn't install the -enum.h files
+
+2004-06-27 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_push), (gst_dvdec_loop),
+ (gst_dvdec_change_state):
+ * ext/dv/gstdvdec.h:
+ Fix timestamp, duration and offset of the buffers.
+
+2004-06-27 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+ (gst_multifdsink_class_init), (gst_multifdsink_add),
+ (gst_multifdsink_remove), (gst_multifdsink_clear),
+ (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_client_queue_data),
+ (gst_multifdsink_client_queue_caps),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+ (gst_multifdsink_init_send), (gst_multifdsink_close):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcpserversink.c:
+ (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_handle_select), (gst_tcpserversink_close):
+ More multifdsink fixes, more recovery policy fixes.
+ Removed stupid g_print
+
+2004-06-26 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+ (gst_multifdsink_get_type), (gst_multifdsink_base_init),
+ (gst_multifdsink_class_init), (gst_multifdsink_init),
+ (gst_multifdsink_debug_fdset), (gst_multifdsink_client_remove),
+ (gst_multifdsink_handle_client_read),
+ (gst_multifdsink_client_queue_data),
+ (gst_multifdsink_client_queue_caps),
+ (gst_multifdsink_client_queue_buffer),
+ (gst_multifdsink_handle_client_write),
+ (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+ (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+ (gst_multifdsink_chain), (gst_multifdsink_set_property),
+ (gst_multifdsink_get_property), (gst_multifdsink_init_send),
+ (gst_multifdsink_close), (gst_multifdsink_change_state):
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcpplugin.c: (plugin_init):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_get_type),
+ (gst_tcpserversink_class_init), (gst_tcpserversink_init),
+ (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_handle_select),
+ (gst_tcpserversink_set_property), (gst_tcpserversink_get_property),
+ (gst_tcpserversink_init_send), (gst_tcpserversink_close):
+ * gst/tcp/gsttcpserversink.h:
+ Added multifdsink, made tcpserversink a subclass of fdsink, removed
+ one of the locks, added recovery policy to multifdsink.
+
+2004-06-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_chain):
+ fix decision for when getting frames with same timestamp
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+ (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+ (gst_v4lsrc_get_property):
+ * sys/v4l/gstv4lsrc.h:
+ add latency offset property
+
+2004-06-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_chain),
+ (plugin_init):
+ fix debugging. add category.
+
+2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+ fix wrong offsets
+
+2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+ (gst_alsa_src_get_time), (gst_alsa_src_loop),
+ (gst_alsa_src_change_state):
+ return a time that is in sync with the element's processing
+
+2004-06-25 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+ (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_client_remove),
+ (gst_tcpserversink_handle_client_read),
+ (gst_tcpserversink_client_queue_data),
+ (gst_tcpserversink_client_queue_caps),
+ (gst_tcpserversink_client_queue_buffer),
+ (gst_tcpserversink_handle_client_write),
+ (gst_tcpserversink_queue_buffer),
+ (gst_tcpserversink_handle_clients), (gst_tcpserversink_thread),
+ (gst_tcpserversink_chain), (gst_tcpserversink_set_property),
+ (gst_tcpserversink_get_property), (gst_tcpserversink_init_send),
+ (gst_tcpserversink_close):
+ * gst/tcp/gsttcpserversink.h:
+ Serversink rewrite. Really do non blocking writes to clients and
+ maintain an internal queue to handle slower clients while not
+ disturbing fast clients.
+
+2004-06-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+ better debug, don't override OFFSET and OFFSET_END
+
+2004-06-25 Iain <iain@prettypeople.org>
+
+ * gst-libs/gst/media-info/media-info-priv.c (gmi_set_mime): Add
+ name=source for the wavparse pipeline.
+
+2004-06-24 Johan Dahlin <johan@gnome.org>
+
+ * ext/theora/theoraenc.c (theora_enc_chain): Call
+ gst_pad_try_set_caps instead of gst_pad_set_explicit_caps so the
+ streamheader caps are set correctly.
+
+2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisenc.c: (raw_caps_factory),
+ (gst_vorbisenc_setup), (gst_vorbisenc_set_property):
+ respect minimum bitrate; same could be done for max bitrate
+
+2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisenc.c: (raw_caps_factory),
+ (gst_vorbisenc_setup):
+ fix sample rate range
+
+2004-06-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_class_init),
+ (gst_oggvorbisenc_setup):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init),
+ (gst_vorbisenc_setup):
+ resolve ambiguities in code and description
+
+2004-06-24 Wim Taymans <wim@fluendo.com>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_start), (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+ (gst_alsa_src_update_avail), (gst_alsa_src_loop):
+ Use alsa trigger_tstamp to get the timestamp of the first
+ sample in the buffer for more precise sync. Some cleanups.
+
+2004-06-24 Wim Taymans <wim@fluendo.com>
+
+ * gst/audiorate/gstaudiorate.c: (gst_audiorate_link),
+ (gst_audiorate_init), (gst_audiorate_chain),
+ (gst_audiorate_set_property), (gst_audiorate_get_property):
+ * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+ (gst_videorate_chain):
+ Added some logging, fixed an overflow bug in videorate.
+
+2004-06-24 Benjamin Otte <otte@gnome.org>
+
+ * ext/kio/Makefile.am:
+ fix for builddir != srcdir and distcheck
+
+2004-06-24 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/tuner/Makefile.am:
+ * gst/tcp/Makefile.am:
+ * sys/dxr3/Makefile.am:
+ don't include -enumtypes.[ch] or -marshal.[ch] files in the disted
+ tarball.
+ Also add all *.list files that were missing.
+ * Makefile.am:
+ add a distcheck hook to ensure the above doesn't happen again.
+
+2004-06-23 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * ext/Makefile.am: s/DTS_DIR=dvdread/DTS_DIR=dts/
+
+2004-06-23 Colin Walters <walters@redhat.com>
+
+ * m4/Makefile.am: Distribute gst-fionread.m4.
+
+2004-06-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: back to dev
+
+2004-06-23 Wim Taymans <wim@fluendo.com>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
+ (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+ (gst_alsa_sink_loop), (gst_alsa_sink_get_time):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+ (gst_alsa_src_get_time), (gst_alsa_src_update_avail),
+ (gst_alsa_src_loop):
+ Add clock to alsasrc. Take new capture timestamp when
+ restarting after an overrun. Split up some functions between
+ alsasrc and alsasink.
+
+=== release 0.8.2 ===
+
+2004-06-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
+ (gst_alsa_change_state), (gst_alsa_update_avail),
+ (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ merge back changes from release
+
+2004-06-23 Wim Taymans <wim@fluendo.com>
+
+ * gst/audiorate/gstaudiorate.c: (gst_audiorate_class_init),
+ (gst_audiorate_init), (gst_audiorate_chain),
+ (gst_audiorate_set_property), (gst_audiorate_get_property):
+ Implement sample dropping and notify
+
+2004-06-22 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (theora_enc_sink_link), (theora_buffer_from_packet),
+ (theora_push_packet), (theora_enc_chain):
+ Some cleanups, make sure the timestamps are correct.
+
+2004-06-22 Wim Taymans <wim@fluendo.com>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_time), (gst_alsa_clock_update),
+ (gst_alsa_change_state), (gst_alsa_update_avail),
+ (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+ Cleanups, take queued samples into account when reporting
+ the time.
+
+2004-06-22 Wim Taymans <wim@fluendo.com>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+ (gst_videorate_init):
+ Initialize the property as well.
+
+2004-06-22 Wim Taymans <wim@fluendo.com>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+ (gst_videorate_init), (gst_videorate_chain),
+ (gst_videorate_set_property), (gst_videorate_get_property):
+ Add property to make videorate silent.
+ Add property to prefer new frames over old ones.
+
+2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/osxvideo/Makefile.am:
+ Workaround so that the osxvideo .so file gets linked with the
+ Cocoa, OpenGL and QuickTime frameworks
+
+2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * sys/osxaudio/Makefile.am:
+ Workaround so that the osxaudio .so file gets linked with the
+ CoreAudio framework
+
+2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ Whoops, my fault...fixed build issues
+
+2004-06-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ Add objective-c support if running in Darwin/Mac OS X
+ * sys/Makefile.am:
+ * sys/osxvideo:
+ * sys/osxvideo/Makefile.am:
+ * sys/osxvideo/osxvideosink.h:
+ * sys/osxvideo/osxvideosink.m:
+ * sys/osxvideo/cocoawindow.h:
+ * sys/osxvideo/cocoawindow.m:
+ Add osxvideosink, a cocoa-based osx video sink
+
+
+2004-06-19 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/dvdnav/gst-dvd:
+ Grab the gconf key from the right spot
+ * gst/debug/gstnavseek.c: (gst_navseek_init),
+ (gst_navseek_segseek), (gst_navseek_handle_src_event),
+ (gst_navseek_chain):
+ * gst/debug/gstnavseek.h:
+ Add 's', 'e' and 'l' keypresses to navseek to define the start,end
+ and loop parameters of a segment seek.
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_init),
+ (gst_videotestsrc_get_event_masks),
+ (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
+ * gst/videotestsrc/gstvideotestsrc.h:
+ Add seeking support to videotestsrc
+ Initialise the timestamp_offset variable.
+
+2004-06-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/sidplay/gstsiddec.cc:
+ Fix negotiation and set correct end offset.
+
+2004-06-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: branch and prerelease
+
+2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init),
+ (gst_tcpclientsrc_getcaps), (gst_tcpclientsrc_get),
+ (gst_tcpclientsrc_init_receive):
+ * gst/tcp/gsttcpclientsrc.h:
+ read caps when connecting to server for GDP so we set them correctly
+
+2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videorate/gstvideorate.c: (gst_videorate_chain):
+ notify drops and duplicates
+ * gst/videoscale/videoscale.c: (videoscale_get_structure):
+ no good reason to limit ourselves to 100x100
+
+2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+ (gst_v4lsrc_open), (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
+ (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+ (gst_v4lsrc_get_property):
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+ (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
+ (gst_v4l_set_audio):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame),
+ (gst_v4lsrc_try_capture):
+ * sys/v4l/v4lsrc_calls.h:
+ change try_palette to more general try_capture
+ add autoprobe option so we can turn off autoprobing
+ various fixes
+
+2004-06-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ add videorate
+ * sys/ximage/ximagesink.c: (gst_ximagesink_finalize),
+ (gst_ximagesink_class_init):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_finalize),
+ (gst_xvimagesink_class_init):
+ run them as finalize, not dispose, since dispose can be invoked
+ multiple times
+
+2004-06-17 Wim Taymans <wim@fluendo.com>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
+ (gst_alsa_get_time), (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_init), (gst_alsa_src_loop),
+ (gst_alsa_src_change_state):
+ * ext/alsa/gstalsasrc.h:
+ Make the xrun code timestamp and offset the buffers correctly.
+ moved the clock to the base class, use alsa methods to get time.
+ Do correct timestamping on outgoing buffers.
+
+2004-06-17 Wim Taymans <wim@fluendo.com>
+
+ * gst/audiorate/Makefile.am:
+ * gst/audiorate/gstaudiorate.c: (gst_audiorate_get_type),
+ (gst_audiorate_base_init), (gst_audiorate_class_init),
+ (gst_audiorate_link), (gst_audiorate_init), (gst_audiorate_chain),
+ (gst_audiorate_set_property), (gst_audiorate_get_property),
+ (gst_audiorate_change_state), (plugin_init):
+ Added an audiorate converter that fills in gaps.
+
+2004-06-17 Johan Dahlin <johan@gnome.org>
+
+ * ext/tcp/*: Revert Zaheer changes, to make things actually work again.
+
+2004-06-16 Wim Taymans <wim@fluendo.com>
+
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
+ (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
+ (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+ (gst_v4lsrc_get_property):
+ * sys/v4l/gstv4lsrc.h:
+ Added a copy mode to v4lsrc where it will output a copied version
+ of its internal hardware buffer.
+ Fix the wrong FLAG_SET usage. The flags are integers, not bits, you
+ can't | them.
+
+2004-06-16 Wim Taymans <wim@fluendo.com>
+
+ * sys/oss/gstosssrc.c: (gst_osssrc_get):
+ Timestamp fixes.
+
+2004-06-16 Wim Taymans <wim@fluendo.com>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
+ (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
+ (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+ (gst_v4lsrc_get_property):
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+ Added a sync mode enum property to control v4lsrc timestamp method
+ Removed the use-fixed-fps property and moved functionality in
+ the enum.
+ Don't error on an error value from v4l-conf, it might not always
+ be a real error.
+
+2004-06-16 Wim Taymans <wim@fluendo.com>
+
+ * gst/videorate/Makefile.am:
+ * gst/videorate/gstvideorate.c: (gst_videorate_get_type),
+ (gst_videorate_base_init), (gst_videorate_class_init),
+ (gst_videorate_getcaps), (gst_videorate_link),
+ (gst_videorate_init), (gst_videorate_chain),
+ (gst_videorate_set_property), (gst_videorate_get_property),
+ (gst_videorate_change_state), (plugin_init):
+ Added a video timestamp corrector.
+
+2004-06-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ fixed a potential leak with previous commit
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+
+2004-06-15 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+ Added missing refcount, fixes bug #144425
+ Cheers Tim for finding the bug
+
+2004-06-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4l.c: (plugin_init):
+ * sys/v4l/gstv4lcolorbalance.c:
+ * sys/v4l/gstv4lcolorbalance.h:
+ * sys/v4l/gstv4lelement.c:
+ * sys/v4l/gstv4lelement.h:
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+ * sys/v4l/gstv4lmjpegsink.h:
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+ * sys/v4l/gstv4lmjpegsrc.h:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
+ (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
+ (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/gstv4ltuner.c:
+ * sys/v4l/gstv4ltuner.h:
+ * sys/v4l/gstv4lxoverlay.c:
+ * sys/v4l/gstv4lxoverlay.h:
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
+ (gst_v4l_set_window), (gst_v4l_enable_overlay):
+ * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+ (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
+ (gst_v4l_set_audio):
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+ (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_sync_frame),
+ (gst_v4lmjpegsink_set_buffer), (gst_v4lmjpegsink_set_playback),
+ (gst_v4lmjpegsink_playback_init),
+ (gst_v4lmjpegsink_playback_start), (gst_v4lmjpegsink_get_buffer),
+ (gst_v4lmjpegsink_play_frame), (gst_v4lmjpegsink_wait_frame),
+ (gst_v4lmjpegsink_playback_stop),
+ (gst_v4lmjpegsink_playback_deinit):
+ * sys/v4l/v4lmjpegsink_calls.h:
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
+ (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_buffer),
+ (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
+ (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_capture_start),
+ (gst_v4lmjpegsrc_grab_frame), (gst_v4lmjpegsrc_requeue_frame),
+ (gst_v4lmjpegsrc_capture_stop), (gst_v4lmjpegsrc_capture_deinit):
+ * sys/v4l/v4lmjpegsrc_calls.h:
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+ (gst_v4lsrc_sync_frame), (gst_v4lsrc_set_capture),
+ (gst_v4lsrc_capture_init), (gst_v4lsrc_capture_start),
+ (gst_v4lsrc_grab_frame), (gst_v4lsrc_requeue_frame),
+ (gst_v4lsrc_capture_stop), (gst_v4lsrc_capture_deinit),
+ (gst_v4lsrc_try_palette):
+ * sys/v4l/v4lsrc_calls.h:
+ bunch of paranoia cleanups
+
+2004-06-14 David Schleef <ds@schleef.org>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_init),
+ (cdparanoia_get), (cdparanoia_open), (cdparanoia_change_state):
+ Send discont events and change timestamps appropriately when
+ we get a seek event. (bug #144240)
+ * ext/cdparanoia/gstcdparanoia.h:
+
+2004-06-14 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: Use snd_pcm_hw_params_set_rate _near instead of
+ snd_pcm_hw_params_set_rate since the latter fails for no good
+ reason on some setups.
+
+2004-06-14 David Schleef <ds@schleef.org>
+
+ * gst/volume/demo.c: (value_changed_callback): exp10() is not
+ standard. Thank you for playing.
+
+2004-06-14 Wim Taymans <wim@fluendo.com>
+
+ * gst/ffmpegcolorspace/imgconvert.c: (img_convert):
+ Patch 1.3 broke the ordering of the colorspace info and
+ made the plugin basically work by coincidence, reordered
+ the info.
+
+2004-06-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/lame/gstlame.c:
+ * ext/mad/gstmad.c:
+ sync caps. Make sure mad can only output a list of rates, not
+ a full range. In the future, have three caps lists for each of the
+ mpeg versions. Change mpegversion to a double as well.
+
+2004-06-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/volume/.cvsignore:
+ * gst/volume/Makefile.am:
+ * gst/volume/demo.c: (value_changed_callback), (idler),
+ (setup_gui), (main):
+ added small demo app
+
+2004-06-13 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/esd/esdsink.c: (gst_esdsink_change_state):
+ * ext/esd/esdsink.h:
+ Close the esd connection on pause, because esd will just wait -
+ blocking all other esd clients indefinitely.
+
+2004-06-12 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/tags/gstvorbistag.c: replaced a g_warning which I added in my
+ previous commit with GST_DEBUG
+
+2004-06-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ add a header check for a dvdread header in dvdnav. Fixes #133002
+
+2004-06-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
+ * gst/tcp/gsttcpclientsink.h:
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
+ * gst/tcp/gsttcpclientsrc.h:
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init),
+ (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_init_send):
+ * gst/tcp/gsttcpserversink.h:
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
+ * gst/tcp/gsttcpserversrc.h:
+ Modified the tcp plugins so they are portable (IPv4,IPv6, any future
+ version of IP)
+
+2004-06-12 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * configure.ac:
+ Added ogg library so that OSX detects libtheora properly
+
+2004-06-11 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoradec.c: (theora_dec_chain),
+ (theora_dec_change_state):
+ Don't try to decode frames before we received a keyframe.
+
+2004-06-11 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
+ (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
+ (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
+ Added property to set the maximum delay of a page.
+
+2004-06-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
+ (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
+ (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
+ Added max-delay property to control the maximum amount
+ of data to put in one page.
+
+2004-06-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (gst_theora_enc_init), (theora_enc_sink_link),
+ (theora_buffer_from_packet), (theora_enc_set_property),
+ (theora_enc_get_property):
+ Set duration on encoded buffer, added some more properties
+
+2004-06-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+ (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+ * ext/theora/theoraenc.c: (theora_enc_chain):
+ Fix refcounting bugs
+
+2004-06-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+ (gst_asf_demux_loop), (gst_asf_demux_process_file),
+ (gst_asf_demux_process_data), (gst_asf_demux_handle_data),
+ (gst_asf_demux_process_object), (gst_asf_demux_get_stream),
+ (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event),
+ (gst_asf_demux_handle_src_event), (gst_asf_demux_handle_src_query),
+ (gst_asf_demux_change_state):
+ * gst/asfdemux/gstasfdemux.h:
+ You know Chimaira? "I - HATE - EVERYTHING". Yeah, that's what this
+ feels like. I think we should set a new requirement for demuxers
+ from now on to implement sane loop functions, data loops, query
+ and seek functions before first commit into CVS. And this commit
+ fixes all of the above.
+
+2004-06-10 Christophe Fergeau <teuf@gnome.org>
+
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add): make sure parsed
+ vorbis comments are properly encoded in UTF-8 before adding them
+ to a GstTagList
+
+2004-06-09 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (add_channels):
+ handle min <= max correctly
+ * ext/alsa/gstalsa.c: (gst_alsa_fixate_to_mimetype),
+ (gst_alsa_fixate_field_nearest_int), (gst_alsa_fixate):
+ add fixation functions so we fixate correctly. No preferring of alaw
+ anymore because it's the first structure.
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsa.c: (gst_alsa_sw_params_dump),
+ (gst_alsa_hw_params_dump):
+ add functions to ease debugging in alsalib
+ * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
+ (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
+ (gst_alsa_start_audio):
+ only specify hw params if we really setup a format (fixes #134007 -
+ or at least works around it)
+
+2004-06-09 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+ (gst_ogg_mux_next_buffer), (gst_ogg_mux_buffer_from_page),
+ (gst_ogg_mux_push_page), (gst_ogg_mux_get_headers),
+ (gst_ogg_mux_set_header_on_caps), (gst_ogg_mux_send_headers),
+ (gst_ogg_mux_loop):
+ Use stream caps to setup the initial pages in the ogg stream.
+ Correctly set the streamheader caps on the srcpad.
+
+2004-06-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
+ (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
+ (gst_v4lsrc_getcaps):
+ * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+ (gst_v4l_get_picture), (gst_v4l_get_audio), (gst_v4l_set_audio):
+ add querying of fps lists for webcams. Negotiating to a framerate
+ now works.
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/theora/theoraenc.c: (theora_buffer_from_packet),
+ (theora_push_buffer), (theora_push_packet),
+ (theora_set_header_on_caps), (theora_enc_chain):
+ mark buffers and put on streamheader, raw theora streaming
+ now works too, whee
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
+ (gst_tcp_gdp_read_caps):
+ do a looping read for caps and GDP headers too
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get):
+ return EOS instead of NULL in _get
+
+2004-06-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
+ (gst_tcp_gdp_read_caps), (gst_tcp_gdp_write_header),
+ (gst_tcp_gdp_write_caps):
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
+ (gst_tcpserversrc_gdp_read_header), (gst_tcpserversrc_get):
+ Memory leak fixes
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/Makefile.am:
+ * ext/vorbis/vorbis.c: (plugin_init):
+ * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_base_init),
+ (gst_vorbis_parse_class_init), (gst_vorbis_parse_init),
+ (vorbis_parse_set_header_on_caps), (vorbis_parse_chain),
+ (vorbis_parse_change_state):
+ * ext/vorbis/vorbisparse.h:
+ adding a vorbisparse element that marks the buffers, streaming
+ raw vorbis using GDP now works, whee
+
+2004-06-08 Wim Taymans <wim@fluendo.com>
+
+ * ext/jpeg/Makefile.am:
+ * ext/jpeg/README:
+ * ext/jpeg/gstjpeg.c: (plugin_init):
+ * ext/jpeg/gstsmokedec.c: (gst_smokedec_get_type),
+ (gst_smokedec_base_init), (gst_smokedec_class_init),
+ (gst_smokedec_init), (gst_smokedec_link), (gst_smokedec_chain):
+ * ext/jpeg/gstsmokedec.h:
+ * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_get_type),
+ (gst_smokeenc_base_init), (gst_smokeenc_class_init),
+ (gst_smokeenc_init), (gst_smokeenc_getcaps), (gst_smokeenc_link),
+ (gst_smokeenc_resync), (gst_smokeenc_chain),
+ (gst_smokeenc_set_property), (gst_smokeenc_get_property):
+ * ext/jpeg/gstsmokeenc.h:
+ * ext/jpeg/smokecodec.c: (smokecodec_init_destination),
+ (smokecodec_flush_destination), (smokecodec_term_destination),
+ (smokecodec_init_source), (smokecodec_fill_input_buffer),
+ (smokecodec_skip_input_data), (smokecodec_resync_to_restart),
+ (smokecodec_term_source), (smokecodec_encode_new),
+ (smokecodec_decode_new), (smokecodec_info_free),
+ (smokecodec_set_quality), (smokecodec_get_quality),
+ (smokecodec_set_threshold), (smokecodec_get_threshold),
+ (smokecodec_set_bitrate), (smokecodec_get_bitrate),
+ (find_best_size), (abs_diff), (put), (smokecodec_encode),
+ (smokecodec_parse_header), (smokecodec_decode):
+ * ext/jpeg/smokecodec.h:
+ Added a new simple jpeg based codec
+
+2004-06-08 Wim Taymans <wim@fluendo.com>
+
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+ (gst_multipart_mux_loop):
+ Fix memory leak
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_client_remove),
+ (gst_tcpserversink_handle_client_read), (gst_tcp_buffer_write),
+ (gst_tcpserversink_handle_client_write), (gst_tcpserversink_chain),
+ (gst_tcpserversink_init_send), (gst_tcpserversink_close):
+ * gst/tcp/gsttcpserversink.h:
+ take streamheader into account
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/level/Makefile.am:
+ * gst/level/gstlevel.c: (gst_level_class_init):
+ clean up marshal generation
+
+2004-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
+ (gst_tcpclientsink_class_init), (gst_tcpclientsink_init),
+ (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property):
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+ (gst_tcpclientsrc_init), (gst_tcpclientsrc_set_property),
+ (gst_tcpclientsrc_get_property):
+ * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+ (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+ (gst_tcpserversink_handle_client_read),
+ (gst_tcpserversink_handle_client_write),
+ (gst_tcpserversink_set_property), (gst_tcpserversink_get_property):
+ * gst/tcp/gsttcpserversink.h:
+ add signals client-added and client-removed
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
+ (gst_tcpserversrc_init), (gst_tcpserversrc_set_property),
+ (gst_tcpserversrc_get_property):
+ uniformized, change default protocol to NONE
+ * gst/tcp/gsttcp-marshal.list: added
+2004-06-07 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ handle discont events if they happen before caps nego
+
+2004-06-07 Wim Taymans <wim@fluendo.com>
+
+ * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
+ (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
+ (gst_multipart_demux_plugin_init):
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+ (gst_multipart_mux_init), (gst_multipart_mux_loop),
+ (gst_multipart_mux_change_state):
+ Small updates, fix a memleak
+
+2004-06-07 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * configure.ac: OSS portability
+ * ext/arts/gst_arts.c: idem
+ * sys/oss/gstosselement.c: idem
+ * sys/oss/gstossmixer.c: idem
+ * sys/oss/gstosssink.c: idem
+ * sys/oss/gstosssrc.c: idem
+ * sys/oss/oss_probe.c: idem
+ - check for soundcard.h in different places for some BSD
+
+2004-06-07 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * AUTHORS:
+ Add me to the authors file
+ * configure.ac:
+ Increase the libdv requirement to >= version 0.100
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+ (gst_dvdec_src_query), (gst_dvdec_handle_sink_event),
+ (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state):
+ * ext/dv/gstdvdec.h:
+ Add support for the new_media flag when sending DISCONT events
+ Make the querying work when video pad is not linked
+
+2004-06-07 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init):
+ create a NULL-initialized array of pads, so we don't think they
+ exist already. (fixes #143130)
+
+2004-06-07 Benjamin Otte <otte@gnome.org>
+
+ * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init),
+ (mixmatrix_resize), (gst_mixmatrix_set_all_caps),
+ (gst_mixmatrix_request_new_pad), (gst_mixmatrix_loop):
+ don't use // coments
+
+2004-06-07 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_samples_to_timestamp):
+ cast to GstClockTime to get higher granularity
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ use gst_element_set_time_delay to get the exact time
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ use the negotiated rate instead of the current frame's rate which
+ might be wrong because of bit errors. This avoids emitting totally
+ bogus timestamps and screwing sync.
+ (fixes #143454)
+
+2004-06-07 Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * gst/adder/gstadder.c: (gst_adder_loop):
+ properly error out when no negotiation has happened yet. (fixes
+ #143032)
+
+2004-06-06 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+ forward correctly transformed offset in discont events. Based on
+ patch by Arwed v. Merkatz. (fixes #142851)
+
+2004-06-06 David Schleef <ds@schleef.org>
+
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c: that's
+ G_HAVE_GNUC_VARARGS, not G_HAVE_GNU_VARARGS. Should fix compile
+ problems on several systems.
+
+2004-06-06 Benjamin Otte <otte@gnome.org>
+
+ * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
+ use explicit caps on the srcpad
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ properly error out if caps couldn't be set (fixes #142764)
+
+2004-06-06 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
+ (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
+ (gst_alsa_start_audio):
+ - don't call set_periods_integer anymore, it breaks the
+ configuration randomly
+ - call snd_pcm_hw_params_set_access directly instead of using masks
+ - don't fail if the sw_params can't be set, just use the default
+ params and hope it works. Alsalib has weird issues when you touch
+ sw_params and does no proper error reporting about what failed.
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+ (gst_alsa_close_audio):
+ make our alsa debugging go via gst debugging and not conditionally
+ defined
+ * ext/alsa/gstalsa.h:
+ add ALSA_DEBUG_FLUSH macro
+ * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper),
+ (plugin_init):
+ wrap alsa errors to be printed via the gst debugging system and not
+ spammed to stderr
+
+2004-06-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_init),
+ (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
+ (gst_qtdemux_handle_sink_event), (gst_qtdemux_change_state),
+ (gst_qtdemux_loop_header), (qtdemux_dump_mvhd),
+ (qtdemux_parse_trak):
+ * gst/qtdemux/qtdemux.h:
+ Bitch. Also known as seeking, querying & co.
+ * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+ (gst_osssink_change_state):
+ * sys/oss/gstosssink.h:
+ Resyncing is for weenies, this hack is no longer needed and was
+ broken anyway (since it - unintendedly - always leaves resync to
+ TRUE).
+
+2004-06-05 Andrew Turner <zxombie@hotpop.com>
+
+ * gst/tcp/gsttcp.c: portability (Solaris 10/FreeBSD)
+ * gst/tcp/gsttcpclientsrc.h: idem
+ - define MSG_NOSIGNAL if not done
+ - include unistd.h for off_t
+ (fixes #143749)
+
+2004-06-05 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ * ext/kio/Makefile.am:
+ check for qt's moc preprocessor explicitly and use it
+
+2004-06-03 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
+ don't get a signal for EPIPE on socket writes
+ (somebody check if this works on other platforms)
+
+2004-06-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+ check error condition on available samples correctly
+
+2004-06-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_time):
+ avoid a segfault
+ * gst/tcp/gsttcp.c: (gst_tcp_socket_write), (gst_tcp_socket_read),
+ (gst_tcp_gdp_read_header), (gst_tcp_gdp_read_caps):
+ * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
+ (gst_tcpserversrc_gdp_read_header):
+ use ssize_t over size_t since the former is signed and thus the
+ check for error codes can work
+
+2004-06-02 Wim Taymans <wim@fluendo.com>
+
+ reviewed by: Johan
+
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+ (gst_multipart_mux_loop):
+ Oops
+
+2004-06-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+ (gst_multipart_mux_init), (gst_multipart_mux_loop),
+ (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
+ (gst_multipart_mux_change_state):
+ Added configurable boundary specifier, added the value as a
+ caps field as well.
+
+2004-06-02 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcpclientsrc.c:
+ * gst/tcp/gsttcpclientsrc.h:
+ * gst/tcp/gsttcpserversrc.c:
+ - portability fix, to compile on OSX
+ (fixes #143146)
+
+ * sys/osxaudio/gstosxaudioelement.c:
+ * sys/osxaudio/gstosxaudiosink.c:
+ * sys/osxaudio/gstosxaudiosrc.c:
+ - compilation warnings on OSX
+ (fixes #143153)
+
+2004-06-02 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/vorbis/vorbisdec.c : sign warning fixes
+
+ * gst-libs/gst/mixer/mixertrack.c :
+ do no use defines which are glib 2.4 specific
+
+2004-06-01 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/flac/gstflactag.c: strip ending framing bit from vorbiscomment
+ buffer since libflac doesn't expect it (reports a sync error when
+ it encounters that)
+
+
+2004-06-01 Owen Fraser-Green <owen@discobabe.net>
+
+ * gst-libs/gst/mixer/mixertrack.h: Changed struct syntax
+ * gst-libs/gst/mixer/mixertrack.c:
+ (gst_mixer_track_get_property), (get_mixer_track_init),
+ (get_mixer_track_get_property): Added property accessors
+ * gst-libs/gst/mixer/mixeroptions.h: Changed struct syntax
+ * gst-libs/gst/mixer/mixeroptions.c:
+ (gst_mixer_options_get_values): Added
+ * gst-libs/gst/mixer/mixer.h: Changed GstMixerClass syntax
+ * gst-libs/gst/mixer/mixer.c: Fixed comment
+
+
+2004-06-01 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
+ improve error messages on open
+
+
+2004-06-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+ check if v4l-conf is in path
+
+2004-06-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
+ change assert to a more readable error message
+
+2004-05-31 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst-libs/gst/tuner/tunerchannel.h:
+ - add a freq_multiplicator field to make the conversion
+ between internal frequency unit and Hz
+ * sys/v4l/gstv4lelement.c:
+ * sys/v4l2/gstv4l2element.c:
+ - change default video device to /dev/video0
+ * sys/v4l/v4l_calls.c:
+ * sys/v4l2/v4l2_calls.c:
+ - we only expose frequency to the user in Hz instead of
+ bastard v4lX unit (either 62.5kHz or 62.5Hz)
+
+2004-05-31 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ Initialise b_o_s and e_o_s variables
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ Add some unusual fourcc's from mplayer avi's
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_plugin_init):
+ Make the muxer have rank GST_RANK_NONE, so it doesn't mess up
+ autoplugging.
+
+2004-05-28 Wim Taymans <wim@fluendo.com>
+
+ * configure.ac:
+ * gst/alpha/Makefile.am:
+ * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+ (gst_alpha_get_type), (gst_alpha_base_init),
+ (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
+ (gst_alpha_get_property), (gst_alpha_sink_link), (gst_alpha_add),
+ (gst_alpha_chroma_key), (gst_alpha_chain),
+ (gst_alpha_change_state), (plugin_init):
+ A plugin to add an alpha channel to I420 video. Can optionally do
+ chroma keying.
+ * gst/multipart/Makefile.am:
+ * gst/multipart/multipart.c: (plugin_init):
+ * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
+ (gst_multipart_demux_class_init), (gst_multipart_demux_init),
+ (gst_multipart_demux_finalize), (gst_multipart_demux_handle_event),
+ (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
+ (gst_multipart_demux_change_state),
+ (gst_multipart_demux_plugin_init):
+ * gst/multipart/multipartmux.c: (gst_multipart_mux_get_type),
+ (gst_multipart_mux_base_init), (gst_multipart_mux_class_init),
+ (gst_multipart_mux_get_sink_event_masks), (gst_multipart_mux_init),
+ (gst_multipart_mux_sinkconnect), (gst_multipart_mux_pad_link),
+ (gst_multipart_mux_pad_unlink),
+ (gst_multipart_mux_request_new_pad),
+ (gst_multipart_mux_handle_src_event),
+ (gst_multipart_mux_next_buffer), (gst_multipart_mux_compare_pads),
+ (gst_multipart_mux_queue_pads), (gst_multipart_mux_loop),
+ (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
+ (gst_multipart_mux_change_state), (gst_multipart_mux_plugin_init):
+ A Multipart demuxer/muxer. Not sure if it violates specs. Used to
+ send multipart jpeg images to a browser.
+ * gst/videobox/Makefile.am:
+ * gst/videobox/README:
+ * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
+ (gst_video_box_get_type), (gst_video_box_base_init),
+ (gst_video_box_class_init), (gst_video_box_init),
+ (gst_video_box_set_property), (gst_video_box_get_property),
+ (gst_video_box_sink_link), (gst_video_box_i420),
+ (gst_video_box_ayuv), (gst_video_box_chain),
+ (gst_video_box_change_state), (plugin_init):
+ Crops or adds borders around an image. can do alpha channel
+ borders as well.
+ * gst/videomixer/Makefile.am:
+ * gst/videomixer/README:
+ * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+ (gst_videomixer_pad_base_init), (gst_videomixer_pad_class_init),
+ (gst_videomixer_pad_get_sink_event_masks),
+ (gst_videomixer_pad_get_property),
+ (gst_videomixer_pad_set_property),
+ (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_link),
+ (gst_videomixer_pad_unlink), (gst_videomixer_pad_init),
+ (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+ (gst_videomixer_base_init), (gst_videomixer_class_init),
+ (gst_videomixer_init), (gst_videomixer_request_new_pad),
+ (gst_videomixer_handle_src_event),
+ (gst_videomixer_blend_ayuv_i420), (gst_videomixer_fill_checker),
+ (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
+ (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
+ (gst_videomixer_loop), (gst_videomixer_get_property),
+ (gst_videomixer_set_property), (gst_videomixer_change_state),
+ (plugin_init):
+ Generic video mixer plugin, can handle multiple inputs all with
+ different framerates and video sizes. Is fully alpha channel
+ aware.
+
+2004-05-27 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ Select first track as master track. Not sure how else to handle
+ that...
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer):
+ Discard discont events. Should fix #142962.
+
+2004-05-26 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/Makefile.am:
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init),
+ (gst_alsa_mixer_build_list), (gst_alsa_mixer_get_volume),
+ (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
+ (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
+ (gst_alsa_mixer_get_option):
+ * ext/alsa/gstalsamixer.h:
+ * ext/alsa/gstalsamixeroptions.c:
+ (gst_alsa_mixer_options_get_type),
+ (gst_alsa_mixer_options_class_init), (gst_alsa_mixer_options_init),
+ (gst_alsa_mixer_options_new):
+ * ext/alsa/gstalsamixeroptions.h:
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+ * ext/alsa/gstalsamixertrack.h:
+ Add enumerations (as GstMixerOptions). Make correct distinction
+ between input/output tracks. Add capture/playback private flag.
+ Use flag to decide on whether to set capture or playback volumes
+ or switches. Use playback and record switches.
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/mixer/mixer-marshal.list:
+ * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init),
+ (gst_mixer_set_option), (gst_mixer_get_option),
+ (gst_mixer_mute_toggled), (gst_mixer_record_toggled),
+ (gst_mixer_volume_changed), (gst_mixer_option_changed):
+ * gst-libs/gst/mixer/mixer.h:
+ * gst-libs/gst/mixer/mixeroptions.c: (gst_mixer_options_get_type),
+ (gst_mixer_options_class_init), (gst_mixer_options_init),
+ (gst_mixer_options_dispose):
+ * gst-libs/gst/mixer/mixeroptions.h:
+ Add GstMixerOptions.
+ * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+ Rename Audio Mixer to OSS Mixer (similar to Alsa Mixer). Fix
+ broken device detection on computers with multiple OSS sound
+ cards.
+
+2004-05-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+ fixate nicely even when the peer is not negotiating
+
+2004-05-25 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_parse_caps):
+ make sure we don't allow depth > width
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+ fixate endianness to G_BYTE_ORDER as default
+ * gst/audioscale/gstaudioscale.c:
+ we don't handle another endianness as host-endianness
+
+2004-05-25 David Schleef <ds@schleef.org>
+
+ * gst/ffmpegcolorspace/mem.c: malloc() is in stdlib.h, not malloc.h
+
+2004-05-24 Benjamin Otte <otte@gnome.org>
+
+ * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
+ (gst_oggvorbisenc_setup):
+ properly fail when we can't setup the vorbis encoder due to
+ unsupported settings
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
+ (gst_vorbisenc_setup):
+ same
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ fix case where warnings occured when one pad was unlinked while the
+ other's link function was called
+
+2004-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/Makefile.am:
+ use GST_ENABLE_NEW
+
+2004-05-24 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/resample/private.h:
+ don't use optimizations that are #if 0'ed
+
+2004-05-24 Wim Taymans <wim@fluendo.com>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
+ Fix potential division by zero error and hopefully get
+ the position query right to get correct timestamps on avi
+ audio.
+
+2004-05-24 Wim Taymans <wim@fluendo.com>
+
+ * gst/videoscale/videoscale.c: (gst_videoscale_scale_nearest),
+ (gst_videoscale_scale_nearest_str2),
+ (gst_videoscale_scale_nearest_str4),
+ (gst_videoscale_scale_nearest_32bit),
+ (gst_videoscale_scale_nearest_24bit),
+ (gst_videoscale_scale_nearest_16bit):
+ Fix the scaling algorithm and avoid a buffer overflow.
+ removed the while loop in the scaling function as it
+ was used for point sampling only.
+
+2004-05-24 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
+ (gst_id3_tag_class_init), (gst_id3_tag_init),
+ (gst_id3_tag_set_property), (gst_id3_tag_get_tag_to_render),
+ (gst_id3_tag_handle_event), (gst_id3_tag_do_caps_nego),
+ (gst_id3_tag_send_tag_event):
+ lots of fixes to make id3mux work and id3demux work correctly
+
+2004-05-24 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/Makefile.am:
+ add rules to build shout2send (was removed by accident
+ when this module was no more marked experimental/broken)
+
+2004-05-24 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ * ext/shout2/gstshout2.c:
+ * ext/shout2/gstshout2.h:
+ adding a "connection problem" signal to shout2send
+ (fixes #142954)
+
+2004-05-21 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/kio/kioreceiver.cpp:
+ * ext/kio/kioreceiver.h:
+ fix sign comparison issues
+
+2004-05-21 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/cdxaparse/gstcdxaparse.c:
+ * gst/cdxaparse/gstcdxaparse.h:
+ some renaming
+ add some checks/sanity
+ prepare for seek addition
+
+ * sys/sunaudio/gstsunaudio.c:
+ remove exported dupe init function
+
+2004-05-21 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_get_formats),
+ (gst_dvdec_src_convert), (gst_dvdec_sink_convert):
+ Fix format conversion and position querying.
+ * gst/debug/progressreport.c: (gst_progressreport_report):
+ Don't output a bogus total value that we didn't query.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+ Always set XV_AUTOPAINT_COLORKEY to true. Fixes xvimagesink showing
+ only a blank window after xine has been used.
+
+2004-05-21 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * m4/as-arts.m4:
+ sync with upstream version to fix test on FC2
+ readd with -ko to preserve Id header
+
+2004-05-20 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * configure.ac:
+ test for FIONREAD ioctl in sys/filio.h for Solaris compat.
+ * gst/tcp/gsttcpclientsrc.c: idem
+ * gst/tcp/gsttcpserversink.c: idem
+ * gst/tcp/gsttcpserversrc.c: idem
+ * m4/gst-fionread.m4: idem
+
+ * sys/sunaudio/gstsunaudio.c: change category to Sink/Audio
+
+ * configure.ac: enable speex plugin for speex 1.1.5+
+ * ext/speex/gstspeexenc.c: fix cast warning
+
+ * ext/esd/README: fix typo
+
+2004-05-20 David Schleef <ds@schleef.org>
+
+ * configure.ac: Minor cosmetic change to convince the buildbot to
+ reautogen.
+ * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_class_init),
+ (gst_sunaudiosink_init), (gst_sunaudiosink_getcaps),
+ (gst_sunaudiosink_pad_link), (gst_sunaudiosink_chain),
+ (gst_sunaudiosink_setparams), (gst_sunaudiosink_open),
+ (gst_sunaudiosink_close), (gst_sunaudiosink_change_state),
+ (gst_sunaudiosink_set_property), (gst_sunaudiosink_get_property):
+ More hacking. Plays audio now.
+
+2004-05-20 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ * sys/Makefile.am:
+
+2004-05-20 David Schleef <ds@schleef.org>
+
+ * sys/osxaudio/Makefile.am: New OS X audio plugin by Zaheer Abbas Merali
+ * sys/osxaudio/gstosxaudio.c:
+ * sys/osxaudio/gstosxaudioelement.c:
+ * sys/osxaudio/gstosxaudioelement.h:
+ * sys/osxaudio/gstosxaudiosink.c:
+ * sys/osxaudio/gstosxaudiosink.h:
+ * sys/osxaudio/gstosxaudiosrc.c:
+ * sys/osxaudio/gstosxaudiosrc.h:
+
+2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_set_header_on_caps),
+ (gst_vorbisenc_chain):
+ put the codec headers on the caps as streamheader as well as
+ pushing them out
+
+2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
+ (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_push_buffer),
+ (gst_vorbisenc_push_packet), (gst_vorbisenc_chain):
+ split up push_packet into two functions
+
+2004-05-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/.cvsignore:
+ ignore enums
+ * gst/tcp/Makefile.am:
+ * gst/tcp/README:
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcp.h:
+ * gst/tcp/gsttcpclientsink.c:
+ * gst/tcp/gsttcpclientsink.h:
+ * gst/tcp/gsttcpclientsrc.c:
+ * gst/tcp/gsttcpclientsrc.h:
+ * gst/tcp/gsttcpplugin.c:
+ * gst/tcp/gsttcpserversink.c:
+ * gst/tcp/gsttcpserversink.h:
+ * gst/tcp/gsttcpserversrc.c:
+ * gst/tcp/gsttcpserversrc.h:
+ add new tcp elements
+
+2004-05-19 Wim Taymans <wim@fluendo.com>
+
+ * gst/law/mulaw-conversion.c: (mulaw_encode):
+ Fix overflow bug in ulaw encoding.
+
+2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstmad.c: (gst_mad_handle_event):
+ don't unref the event twice
+
+2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ remove -Wno-sign-compare
+
+2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ remove -DG_DISABLE_DEPRECATED. It's not usable without workarounds
+ if you want to work against glib 2.2 and 2.4
+
+2004-05-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tcp/Makefile.am:
+ * gst/tcp/gsttcp.c:
+ * gst/tcp/gsttcp.h:
+ * gst/tcp/gsttcpsink.h:
+ * gst/tcp/gsttcpsrc.h:
+ gsttcp -> gsttcpplugin + CVS surgery in preparation for tcp merge
+
+2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/debug/tests.c: (md5_get_value):
+ fix segfault on gst-inspect
+
+2004-05-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/debug/testplugin.c:
+ * gst/debug/tests.c:
+ * gst/debug/tests.h:
+ add new extensible and configurable testing element. Current tests
+ include buffer count, stream length, timestamp/duration matching and
+ md5.
+ * gst/debug/Makefile.am:
+ * gst/debug/gstdebug.c: (plugin_init):
+ add infrastructure for new element
+
+2004-05-19 Johan Dahlin <johan@gnome.org>
+
+ * ext/dv/gstdvdec.c (gst_dvdec_quality_get_type): Add proper
+ ending of the array. Fixes gst-inspect segfault on ppc.
+
+2004-05-19 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/dirac/gstdiracdec.cc : change category to Codec/Decoder/Video
+
+ * m4/a52.m4 : don't fix a test that should fail with current a52dec lib
+
+2004-05-18 David Schleef <ds@schleef.org>
+
+ * gst/ffmpegcolorspace/imgconvert.c: (img_convert): Fixes for
+ warnings (bugs, actually) noticed by gcc but not forte.
+
+2004-05-18 David Schleef <ds@schleef.org>
+
+ * sys/sunaudio/Makefile.am:
+ * sys/sunaudio/gstsunaudio.c: New sunaudiosink
+
+2004-05-18 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+ (gst_qtdemux_loop_header): Patch from dcm@acm.org (David Moore)
+ to allow qtdemux to use non-seekable streams. (bug #142272)
+
+2004-05-18 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16),
+ (gst_resample_sinc_ft_float): Remove use of static temporary
+ buffer. This code was obviously not supposed to last long, but
+ it's stuck in our ABI, so it required a little hack to make it
+ ABI-compatible. Fixes #142585.
+ * gst-libs/gst/resample/resample.h: same.
+
+2004-05-18 David Schleef <ds@schleef.org>
+
+ * configure.ac: Add sunaudio
+ * examples/Makefile.am: make gstplay depend on gconf
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Remove c99-isms
+ * gst/ffmpegcolorspace/imgconvert.c: (build_rgb_palette),
+ (convert_table_lookup), (img_convert): remove c99-isms
+ * gst/ffmpegcolorspace/imgconvert_template.h: make a constant
+ unsigned, to fix a warning on Solaris
+ * gst/mpeg1sys/systems.c: bcopy->memcpy
+ * gst/rtjpeg/RTjpeg.c: (RTjpeg_yuvrgb8): bcopy->memcpy
+ * sys/Makefile.am: Add sunaudio
+
+2004-05-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type), (gst_ogg_mux_init),
+ (gst_ogg_mux_sinkconnect), (gst_ogg_mux_request_new_pad),
+ (gst_ogg_mux_next_buffer), (gst_ogg_mux_push_page),
+ (gst_ogg_mux_compare_pads), (gst_ogg_mux_queue_pads),
+ (gst_ogg_mux_loop):
+ Fix an ugly memleak where the muxer didn't flush enough ogg
+ pages. This also resulted in badly muxed ogg files.
+
+2004-05-18 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/asfdemux/asfheaders.c :
+ * gst/asfdemux/asfheaders.h :
+ * gst/asfdemux/gstasfdemux.c :
+ - fix ASF_OBJ_PADDING guid
+ - add 3 new object guids (language list, metadata,
+ extended stream properties)
+ - add a function to parse extended header objects
+
+2004-05-18 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+ remove leftover debugging g_print
+
+2004-05-17 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_handle_event):
+ Fix for when the first format in a discont event is not a
+ byte-based one. Should fix #137710.
+
+2004-05-18 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * m4/a52.m4 : fix compilation with -Wall -Werror
+ * m4/libfame.m4 : idem
+ * m4/libmikmod.m4 : idem
+
+2004-05-17 Benjamin Otte <otte@gnome.org>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+ signal the new tags before giving up the reference
+
+2004-05-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/shout2/gstshout2.c:
+ use application/ogg instead of application/x-ogg (patch by Patrick
+ Guimond, fixes #142432)
+ * sys/oss/gstosselement.c: (gst_osselement_reset),
+ (gst_osselement_sync_parms):
+ don't set fragment size unless specified (fixes #142493)
+
+2004-05-17 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * configure.ac : fix compilation of v4l2src with "-Wall -Werror"
+ fixes #142664
+
+2004-05-17 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ compute offsets correctly for internal buffers so timestamps are set
+ correctly when we can't seek. Also handle cases where there are no
+ offsets. (based on a patch by David Moore, fixes #142507)
+
+2004-05-17 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ use correct variable when determining amount of data to skip so we
+ don't skip into the void and segfault
+
+2004-05-16 Benjamin Otte <otte@gnome.org>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+ Hi, I'm a memleak
+
+2004-05-16 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/asfdemux/gstasfdemux.c:
+ - fix a mem leak and always propagate tags
+ - add WMV3 to known video codecs (but no decoder yet)
+ - replace "surplus data" at end of audio header for what
+ it is : codec specific data
+ - fix a typo
+
+2004-05-16 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ reviewed by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/audio/audioclock.c:
+ Fix wrong return type (#142205).
+
+2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_init):
+ Ignore CRCs by default (fixes #142566).
+
+2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
+ (gst_alsa_mixer_close), (gst_alsa_mixer_supported),
+ (gst_alsa_mixer_build_list), (gst_alsa_mixer_free_list),
+ (gst_alsa_mixer_change_state), (gst_alsa_mixer_list_tracks),
+ (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+ (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record):
+ Fix for cases where we fail to attach to a mixer.
+
+2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+ Don't touch events after not owning them anymore.
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
+ (gst_wavparse_fmt), (gst_wavparse_other),
+ (gst_wavparse_handle_seek), (gst_wavparse_loop),
+ (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
+ (gst_wavparse_srcpad_event):
+ * gst/wavparse/gstwavparse.h:
+ Add seeking, fix querying.
+
+2004-05-16 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+ - process comments even if they don't end with \0\0
+ g_convert would ignore them if present and works well without them
+
+2004-05-16 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_caps), (gst_alsa_get_caps):
+ simplify caps
+
+2004-05-16 Benjamin Otte <otte@gnome.org>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+ don't write to memory we might not write to - g_convert does that
+ for us anyway (fixes #142613)
+ (gst_asf_demux_audio_caps):
+ comment out gst_util_dump_mem
+
+2004-05-16 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ compute correct expected timestamps after seek (broken since
+ last commit)
+ * ext/gdk_pixbuf/pixbufscale.c: (pixbufscale_init):
+ rename element and debugging category to gdkpixbufscale
+
+2004-05-16 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ add error checking to snd_pcm_delay and remove duplicate call to
+ snd_pcm_delay that caused issues (see inline code comments)
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+ make more readable and fix return value when snd_pcm_delay fails
+ (fixes #142586)
+
+2004-05-15 Jan Schmidt <thaytan@mad.scientisti.com>
+ * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_method_get_type),
+ (gst_pixbufscale_get_type), (gst_pixbufscale_base_init),
+ (gst_pixbufscale_class_init), (gst_pixbufscale_getcaps),
+ (gst_pixbufscale_link), (gst_pixbufscale_init),
+ (gst_pixbufscale_handle_src_event), (pixbufscale_scale),
+ (gst_pixbufscale_chain), (gst_pixbufscale_set_property),
+ (gst_pixbufscale_get_property), (pixbufscale_init):
+ * ext/gdk_pixbuf/pixbufscale.h:
+ Add these files I forgot earlier
+
+2004-05-15 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/gdk_pixbuf/Makefile.am:
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+ * ext/gdk_pixbuf/gstgdkpixbuf.h:
+ Add new pixbufscale element to scale RGB video
+ using gdk_pixbuf, because gdk_pixbuf does BILINEAR
+ and HYPER interpolation correctly.
+ * ext/theora/theoraenc.c: (theora_enc_chain),
+ Discard buffer and return if explicit caps could not be set
+ (theora_enc_get_property):
+ Make _get return kbps for the bitrate consistent with
+ the _set function.
+
+
+2004-05-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/libvisual/visual.c: (gst_visual_chain):
+ add missing visual_audio_analyze
+
+2004-05-14 David Schleef <ds@schleef.org>
+
+ * ext/esd/esdsink.c: (gst_esdsink_chain): Fix crash when ESD
+ is killed while we're playing.
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse): call
+ gst_element_no_more_pads().
+
+2004-05-14 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst-libs/gst/riff/riff-read.c :
+ - fix INFO tag extraction in RIFF/AVI files
+ because gst_event_unref (event) also freed taglist
+ - avoid a mem leak
+
+2004-05-13 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/mad/gstid3tag.c : move from "Codec/(Dem/M)uxer" to "Codec/(Dem/M)uxer/Audio"
+ * gst/wavenc/gstwavenc.c : move from "Codec/Encoder/Audio" to "Codec/Muxer/Audio"
+
+ * gst/auparse/gstauparse.c :
+ - add code (commented for now) to support audio/x-adpcm on src pad
+ (we have no decoder for those layout yet)
+
+ * gst/cdxaparse/gstcdxaparse.c :
+ * gst/cdxaparse/gstcdxaparse.h :
+ - partial rewrite using RiffRead (ripped iain's wavparse code)
+
+ * gst/rtp/gstrtpL16enc.c : typo
+ * gst/rtp/gstrtpgsmenc.c : typo
+
+2004-05-13 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ check for exact version of libvisual, it's not supposed to be
+ API/ABI stable yet
+
+2004-05-13 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
+ signal no-more-pads
+
+2004-05-13 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_src_convert)
+ Report which format was used for GST_FORMAT_DEFAULT
+ * gst/debug/Makefile.am:
+ * gst/debug/gstdebug.c: (plugin_init):
+ * gst/debug/progressreport.c: (gst_progressreport_base_init),
+ (gst_progressreport_class_init), (gst_progressreport_init),
+ (gst_progressreport_report), (gst_progressreport_set_property),
+ (gst_progressreport_get_property), (gst_progressreport_chain),
+ (gst_progressreport_plugin_init):
+ Add progressreport element for testing.
+
+2004-05-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_change_state):
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
+ (gst_v4lsrc_grab_frame):
+ add more debugging
+ send a discont at start
+
+2004-05-12 Colin Walters <walters@redhat.com>
+
+ * gst/asfdemux/gstasfdemux.c (gst_asf_demux_process_segment): Avoid
+ inflooping if we can't find a chunk. Or in other words, don't blow
+ chunks if we don't have a chunk to blow.
+
+2004-05-13 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_get):
+ Remove old debug output
+ * ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
+ (gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
+ (gst_dvdec_set_property), (gst_dvdec_get_property):
+ Change the quality setting to an enum, so it works from gst-launch
+ Don't renegotiate a non-linked pad. Allows audio only decoding.
+ * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
+ (gst_deinterlace_link), (gst_deinterlace_init):
+ * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+ (gst_videodrop_link):
+ Some caps negotiation fixes
+
+2004-05-12 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/tarkin/gsttarkin.c :
+ - Change RANK from NONE to PRIMARY
+ * ext/gdk_pixbuf/gstgdkpixbuf.c :
+ - Change RANK from NONE to MARGINAL
+ * ext/divx/gstdivxenc.c :
+ - Change RANK from PRIMARY to NONE (encoder/spider issue)
+
+2004-05-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
+ (gst_vorbisenc_push_packet):
+ copy a function that was added between 1.0 and 1.0.1 until we
+ depend on worthwhile features of post-1.0
+
+2004-05-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ enable shout2 by default
+ * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
+ (gst_shout2send_base_init), (gst_shout2send_init),
+ (gst_shout2send_connect), (gst_shout2send_change_state):
+ * ext/shout2/gstshout2.h:
+ make this work again. Based on a patch by Zaheer Abbas Merali (fixes
+ #142262)
+ * ext/theora/theora.c: (plugin_init):
+ don't set rank on encoders
+
+2004-05-11 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+ Use codec_data property instead of flag1 and flag2 for wma
+
+2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/cdxaparse/gstcdxaparse.c :
+ - Add mpegversion to CAPS to make it link
+ - Rank is as GST_RANK_SECONDARY instead of NONE
+ * gst/auparse/gstauparse.c :
+ - Document all audio encoding we can encounter from Solaris 9
+ headers and libsndfile information.
+ - Increase max. rate from 48000 to 192000 (to match other elements)
+ - Don't try to play junk data between header and samples
+
+2004-05-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/libvisual/visual.c: (gst_visual_getcaps):
+ use the right caps depending on endianness (I hope)
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_plugin_init):
+ use GST_RANK_NONE for all non-decoding elements or spider gets
+ mighty confused
+
+2004-05-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+ Fix some odd cases and fix BE metadata parsing of unicode16 text.
+
+2004-05-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/switch/gstswitch.c: (gst_switch_release_pad),
+ (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
+ (gst_switch_loop), (gst_switch_get_type):
+ whoever that was: DO NOT IMPORT PRIVATE SYMBOLS THAT ARE NOT IN
+ HEADERS. Had to be said.
+
+2004-05-10 David Schleef <ds@schleef.org>
+
+ * configure.ac: Add prototype Dirac support.
+ * ext/Makefile.am:
+ * ext/dirac/Makefile.am:
+ * ext/dirac/gstdirac.cc:
+ * ext/dirac/gstdiracdec.cc:
+
+2004-05-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/auparse/gstauparse.c: (gst_auparse_class_init),
+ (gst_auparse_init), (gst_auparse_chain),
+ (gst_auparse_change_state):
+ Hack around spider. Remove me some day please.
+
+2004-05-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/auparse/gstauparse.c: (gst_auparse_chain):
+ Fix for some uninitialized variables in previous patch, also
+ makes it work. Fixes #142286 while we're at it.
+
+2004-05-11 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/auparse/gstauparse.c:
+ fixes a-law, adds mu-law, linear pcm (8,16,24,32), ieee (32, 64)
+ only unsupported formats are ADPCM/CCITT G.72x
+ reviewed by Ronald
+ * gst-libs/gst/audio/audio.h: adds 24bit depth to PCM (x-raw-int)
+
+2004-05-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/vorbis/Makefile.am:
+ * ext/vorbis/README:
+ * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_formats),
+ (oggvorbisenc_get_type), (vorbis_caps_factory), (raw_caps_factory),
+ (gst_oggvorbisenc_base_init), (gst_oggvorbisenc_class_init),
+ (gst_oggvorbisenc_sinkconnect), (gst_oggvorbisenc_convert_src),
+ (gst_oggvorbisenc_convert_sink),
+ (gst_oggvorbisenc_get_query_types), (gst_oggvorbisenc_src_query),
+ (gst_oggvorbisenc_init), (gst_oggvorbisenc_get_tag_value),
+ (gst_oggvorbisenc_metadata_set1), (gst_oggvorbisenc_set_metadata),
+ (get_constraints_string), (update_start_message),
+ (gst_oggvorbisenc_setup), (gst_oggvorbisenc_write_page),
+ (gst_oggvorbisenc_chain), (gst_oggvorbisenc_get_property),
+ (gst_oggvorbisenc_set_property), (gst_oggvorbisenc_change_state):
+ * ext/vorbis/oggvorbisenc.h:
+ * ext/vorbis/vorbis.c: (plugin_init):
+ * ext/vorbis/vorbisenc.c: (vorbis_caps_factory),
+ (raw_caps_factory), (gst_vorbisenc_class_init),
+ (gst_vorbisenc_init), (gst_vorbisenc_setup),
+ (gst_vorbisenc_push_packet), (gst_vorbisenc_chain),
+ (gst_vorbisenc_get_property), (gst_vorbisenc_set_property):
+ * ext/vorbis/vorbisenc.h:
+ Added a raw vorbis encoder to be used with the oggmuxer.
+ We still need the old encoder for some gnome applications,
+ read the README to find out how that works.
+ The raw encoder is called "rawvorbisenc" until 0.9.
+
+2004-05-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/ogg/gstogg.c: (plugin_init):
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init),
+ (gst_ogg_print):
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type),
+ (gst_ogg_mux_base_init), (gst_ogg_mux_class_init),
+ (gst_ogg_mux_get_sink_event_masks), (gst_ogg_mux_init),
+ (gst_ogg_mux_sinkconnect), (gst_ogg_mux_pad_link),
+ (gst_ogg_mux_pad_unlink), (gst_ogg_mux_request_new_pad),
+ (gst_ogg_mux_handle_src_event), (gst_ogg_mux_next_buffer),
+ (gst_ogg_mux_push_page), (gst_ogg_mux_compare_pads),
+ (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop),
+ (gst_ogg_mux_get_property), (gst_ogg_mux_set_property),
+ (gst_ogg_mux_change_state), (gst_ogg_mux_plugin_init):
+ Added an ogg muxer.
+ Small typo fixes in the demuxer.
+
+2004-05-10 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
+ (theora_enc_change_state), (theora_enc_set_property),
+ (theora_enc_get_property):
+ Mark the last packet with an EOS flag which is not really needed
+ in gstreamer.
+ Do some better video framerate initialisation.
+ Update the buffer timestamp.
+
+2004-05-10 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_change_state):
+ Return the result of the parent state change call
+
+2004-05-10 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * gst/law/alaw.c : alawdec should be registered with type ALAWDEC, not ALAWENC
+ * gst/law/alaw-decode.c : put audio/x-alaw on pads, instead of audio/x-mulaw
+ * gst/law/alaw-encode.c : (idem)
+ * ext/a52dec/gsta52dec.c : mark audio/a52, audio/ac3 as deprecated in a comment
+ * gst/ac3parse/gstac3parse.c : audio/ac3 => audio/x-ac3
+ * gst/realmedia/rmdemux.c : audio/a52 => audio/x-ac3
+
+2004-05-09 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+ don't use a fixed buffer size when writing variable length data to
+ it. Fixes memory corruption and makes alsasrc work
+
+2004-05-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssink.c:
+ (_gst_boolean_allow_overwrite_accumulator),
+ (gst_gnomevfssink_class_init), (gst_gnomevfssink_open_file):
+ Run glib's default signal handler (??) in RUN_CLEANUP rather than
+ RUN_LAST, and don't use that to set the accumulator value because
+ then it's always FALSE.
+
+2004-05-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_audio_caps),
+ (gst_riff_create_audio_template_caps):
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+ Fix for unaligned RIFF files (i.e. where all the chunks together
+ in a LIST chunk are not of the same size as the size given in
+ the LIST chunk header). Fixes several odd WAVE files. Also fix
+ ADPCM (block_align property) in audio, so that wavparse based
+ on this works now as it used to stand-alone.
+
+2004-05-09 Edward Hervey <bilboed@bilboed.com>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/a52dec/gsta52dec.c:
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxenc.c:
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+ * ext/faac/gstfaac.c: (gst_faac_base_init):
+ * ext/faad/gstfaad.c: (gst_faad_base_init):
+ * ext/ivorbis/vorbisfile.c:
+ * ext/lame/gstlame.c:
+ * ext/libfame/gstlibfame.c:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+ * ext/sidplay/gstsiddec.cc:
+ * ext/speex/gstspeexdec.c:
+ * ext/speex/gstspeexenc.c:
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ correct klasses. Mostly s,Codec/(Audio|Video),\1/Codec,
+ (fixes #142193)
+
+2004-05-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (device_list),
+ (gst_alsa_class_probe_devices):
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
+ Fix alsa oddness in mixer after the combination of using mixer
+ in source/sink elements and using hw:x,y instead of just hw:x.
+
+2004-05-09 Benjamin Otte <otte@gnome.org>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_destroy_sourcepad),
+ (gst_wavparse_create_sourcepad):
+ make PAUSED=>READY=>PAUSED=READY work by not destroying NULL
+ sourcepads
+
+2004-05-09 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ allow discont events before caps nego
+
+2004-05-08 Benjamin Otte <otte@gnome.org>
+
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+ don't leak events
+
+2004-05-08 Benjamin Otte <otte@gnome.org>
+
+ * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
+ (gst_level_change_state), (gst_level_init):
+ * gst/level/gstlevel.h:
+ figure out if we're initialized directly instead of keeping a
+ variable that's wrong in 90% of cases
+ don't initialize pads and then leak them and use a new unitialized
+ pad. (fixes #142084)
+ these were bugs so n00bish I didn't find them for an hour :/
+
+2004-05-08 Iain <iain@prettypeople.org>
+
+ * gst/wavparse/gstwavparse.[ch]: Rewrote to use RiffRead instead.
+ * gst-libs/gst/riff/riff-read.c (gst_riff_read_peek_head): Unstatic it
+ (gst_riff_read_element_data): Ditto, and added a got_bytes argument to
+ return the length that was read.
+ (gst_riff_read_strf_auds): Allow fmt tags as well.
+
+2004-05-07 David Schleef <ds@schleef.org>
+
+ * ext/faad/gstfaad.c: (gst_faad_sinkconnect): HACK to correct
+ signed char assumption in faad.h.
+
+2004-05-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps):
+ Missing break, detected by Daniel Gazard <daniel.gazard@free.fr>.
+
+2004-05-07 Colin Walters <walters@redhat.com>
+
+ * gst/volume/gstvolume.c (gst_volume_dispose): Unref dpman.
+ * ext/flac/gstflacdec.c (gst_flacdec_dispose): Add dispose
+ function.
+ * gst/audioscale/gstaudioscale.c (gst_audioscale_dispose):
+ Add dispose function.
+
+2004-05-08 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/dv/gstdvdec.c: (gst_dvdec_video_link):
+ Fix caps nego and pad templates. RGB mode caps should
+ work now.
+ * ext/dvdnav/gst-dvd:
+ Move mpeg2dec inside the thread because otherwise the
+ queue rejects cap changes mid-stream
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
+ (gst_mpeg2dec_flush_decoder):
+ For mpeg2dec > 0.4.0, call the flush function instead of
+ manually extracting all in-flight frames.
+ * ext/raw1394/gstdv1394src.c: (gst_dv1394src_factory),
+ (gst_dv1394src_init), (gst_dv1394src_iso_receive):
+ Change mime type video/dv go video/x-dv to match the
+ rest of gst-plugins
+
+2004-05-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_type),
+ (gst_alsa_sink_class_init):
+ * ext/alsa/gstalsasink.h:
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_type),
+ (gst_alsa_src_class_init):
+ * ext/alsa/gstalsasrc.h:
+ Make alsasink/src a subclass of alsamixer so that mixer stuff
+ shows up in gst-rec. Needs some finetuning.
+
+2004-05-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/lame/gstlame.c: (gst_lame_chain):
+ simplify
+ * ext/mad/gstmad.c: (gst_mad_handle_event):
+ fix event leak
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+ be able to detect mp3 files < 4096 bytes
+
+2004-05-06 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+ (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
+ (theora_enc_set_property), (theora_enc_get_property):
+ Also encode the first frame, cleanup some code.
+
+2004-05-06 Wim Taymans <wim@fluendo.com>
+
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ Forward events first before deciding that negotiation was
+ not performed.
+
+2004-05-06 Wim Taymans <wim@fluendo.com>
+
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+ First process the events before deciding that negotiation
+ was not performed.
+
+2004-05-06 Wim Taymans <wim@fluendo.com>
+
+ * ext/theora/Makefile.am:
+ * ext/theora/theora.c: (plugin_init):
+ * ext/theora/theoradec.c: (theora_dec_change_state):
+ * ext/theora/theoraenc.c: (gst_theora_enc_base_init),
+ (gst_theora_enc_class_init), (gst_theora_enc_init),
+ (theora_enc_sink_link), (theora_enc_event), (theora_push_packet),
+ (theora_enc_chain), (theora_enc_change_state),
+ (theora_enc_set_property), (theora_enc_get_property):
+ Added a theora encoder, grouped the encoder and decoder into the
+ same plugin.
+
+2004-05-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+ (gst_jpegenc_chain):
+ fix DURATION on outgoing buffers
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
+ debug using time formats
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+ (gst_xvimagesink_sink_link):
+ windows with width/height 0 generate X errors, so don't allow them
+
+2004-05-05 Wim Taymans <wim@fluendo.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
+ (gst_mpeg2dec_base_init), (gst_mpeg2dec_init),
+ (gst_mpeg2dec_negotiate_format):
+ * ext/mpeg2dec/gstmpeg2dec.h:
+ removed the static pad template so that we can add the
+ more accurate framerate value to the caps.
+
+
+2004-05-04 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ check for kdemacros.h, too (should fix #141821)
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
+ don't crash if no header was sent, but nicely error out (fixes part
+ of #141554)
+
+2004-05-04 Wim Taymans <wim@fluendo.com>
+
+ * ext/mpeg2enc/gstmpeg2enc.cc: (gst_mpeg2enc_dispose): call the
+ parent dispose function to avoid segfault on destroy.
+
+2004-05-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+ (plugin_init):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_sink_link):
+ clean up debugging caps
+ also recreate xvimage when format has changed
+
+2004-05-04 Benjamin Otte <otte@gnome.org>
+
+ * ext/libvisual/Makefile.am:
+ * ext/libvisual/visual.c: (gst_visual_class_init),
+ (gst_visual_init), (gst_visual_dispose), (gst_visual_getcaps),
+ (gst_visual_srclink), (gst_visual_chain),
+ (gst_visual_change_state), (plugin_init):
+ use a GstAdapter to correctly adapt buffer sizes - allows using a
+ framerate
+
+2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/gstv4lelement.h:
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps), (gst_v4lsrc_getcaps),
+ (gst_v4lsrc_buffer_free):
+ * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+ (gst_v4lsrc_sync_frame), (gst_v4lsrc_grab_frame),
+ (gst_v4lsrc_requeue_frame):
+ move some debugging categories around
+ query for fps index and set accordingly if found
+
+2004-05-03 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/lame/gstlame.c:
+ correct defaults that lame_init puts out of range
+
+2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/divx/gstdivxenc.c: (gst_divxenc_get_type),
+ (gst_divxenc_class_init):
+ fix range since -1 is the default
+ * gst/mpeg1sys/gstmpeg1systemencode.c:
+ (gst_mpeg1_system_encode_get_type), (gst_system_encode_multiplex):
+ * gst/rtjpeg/gstrtjpegdec.c: (gst_rtjpegdec_get_type),
+ (gst_rtjpegdec_chain):
+ * gst/rtjpeg/gstrtjpegenc.c: (gst_rtjpegenc_get_type),
+ (gst_rtjpegenc_chain):
+ * sys/qcam/gstqcamsrc.c: (gst_autoexp_mode_get_type),
+ (gst_qcamsrc_get_type), (gst_qcamsrc_change_state):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_get_type):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get_type):
+ * sys/v4l/gstv4lsrc.c:
+ * sys/v4l/v4l_calls.c: (gst_v4l_open):
+ * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init):
+ * sys/vcd/vcdsrc.c: (vcdsrc_get_type), (vcdsrc_get):
+ remove gst_info calls
+
+2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * po/af.po:
+ * po/az.po:
+ * po/en_GB.po:
+ * po/nl.po:
+ * po/sr.po:
+ * po/sv.po:
+ Updated translations
+
+2004-05-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+ refactor/comment code
+
+2004-05-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/Makefile.am:
+ * gst/asfdemux/asfheaders.c:
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasf.c: (plugin_init):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_type),
+ (gst_asf_demux_base_init), (gst_asf_demux_process_comment),
+ (gst_asf_demux_setup_pad):
+ * gst/asfdemux/gstasfdemux.h:
+ * gst/asfdemux/gstasfmux.c:
+ * gst/asfdemux/gstasfmux.h:
+ Add tagging support to demuxer, split out registration in its own
+ file instead of in demux (hacky), and prevent having some tables
+ in our memory multiple times (in asfheaders.h).
+
+2004-05-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_metadata):
+ * gst/matroska/matroska-ids.h:
+ Basic tag reading support.
+
+2004-04-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
+ Really detect ac-3 audio.
+ * gst/typefind/gsttypefindfunctions.c: (matroska_type_find):
+ really detect matroska files (off-by-1).
+
+2004-04-30 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_type_get),
+ (qtdemux_dump_stsz), (qtdemux_dump_stco), (qtdemux_dump_co64),
+ (qtdemux_dump_unknown), (qtdemux_parse_tree), (qtdemux_parse_udta),
+ (qtdemux_tag_add), (get_size), (gst_qtdemux_handle_esds): More qtdemux
+ hackage -- parse a lot more atoms, extract a few tags. One might even
+ mistake this for tag support. Maybe it is.
+ * gst/qtdemux/qtdemux.h:
+
+2004-04-30 Colin Walters <walters@verbum.org>
+
+ * ext/alsa/gstalsasink.c (gst_alsa_sink_mmap): Plug a memleak.
+
+2004-04-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_getcaps):
+ remove broken nego fix
+
+2004-04-30 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/libvisual/Makefile.am:
+ * ext/libvisual/visual.c:
+ add initial support for libvisual (http://libvisual.sourceforge.net)
+ libvisual is still quite alpha, so expect crashes in there :)
+
+2004-04-29 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream), (qtdemux_parse),
+ (qtdemux_parse_trak), (get_size), (gst_qtdemux_handle_esds): Hacked
+ up qtdemux to make it spit out codec_data. Do _not_ look at this
+ code; you will no longer respect me.
+
+2004-04-29 Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+ * ext/alsa/gstalsa.c : (gst_alsa_class_probe_devices)
+ * ext/alsa/gstalsa.h :
+ change alsa pcm device discovery to find more than 1 device
+ per card. code review by Ronald.
+
+2004-04-29 David Schleef <ds@schleef.org>
+
+ * sys/oss/gstosselement.c: (gst_osselement_rate_probe_check):
+ Add a check for a driver bug on FreeBSD. (bug #140565)
+
+2004-04-29 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_get_type):
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+ (gst_jpegenc_getcaps):
+ move format setting to inner loop
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_getcaps):
+ use GST_PAD_CAPS if available so that we use already negotiated
+ caps
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (qtdemux_parse_moov), (qtdemux_parse):
+ extra debugging
+ * sys/qcam/qcam-Linux.c: (qc_lock_wait), (qc_unlock):
+ * sys/qcam/qcam-os.c: (qc_lock_wait), (qc_unlock):
+ move hardcoded path to DEFINE
+
+2004-04-28 David Schleef <ds@schleef.org>
+
+ * gst/speed/gstspeed.c: (speed_parse_caps): Fix caps parsing.
+ (bug #140064)
+
+2004-04-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+ Don't probe for playback device if we're a source element. Fixes
+ #139658.
+
+2004-04-29 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+ (gst_id3_tag_chain):
+ rewrite buffer offset
+
+2004-04-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/dts/Makefile.am:
+ * ext/dts/gstdtsdec.c: (gst_dtsdec_get_type),
+ (gst_dtsdec_base_init), (gst_dtsdec_class_init), (gst_dtsdec_init),
+ (gst_dtsdec_channels), (gst_dtsdec_renegotiate),
+ (gst_dtsdec_handle_event), (gst_dtsdec_update_streaminfo),
+ (gst_dtsdec_loop), (gst_dtsdec_change_state),
+ (gst_dtsdec_set_property), (gst_dtsdec_get_property),
+ (plugin_init):
+ * ext/dts/gstdtsdec.h:
+ New DTS decoder.
+ * ext/faad/gstfaad.c: (gst_faad_sinkconnect),
+ (gst_faad_srcconnect):
+ Add ESDS atom handling (.m4a).
+
+2004-04-27 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c: (plugin_init):
+ Remove comment that makes no sense.
+ * ext/mad/gstid3tag.c: (gst_id3_tag_set_property):
+ Fix for obvious typo that resulted in warnings during gst-register.
+ * ext/xvid/gstxviddec.c: (gst_xviddec_src_link),
+ (gst_xviddec_sink_link):
+ Fix caps negotiation a bit better.
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+ We call this 'codec_data', not 'esds'.
+
+2004-04-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/monoscope/gstmonoscope.c:
+ make sure we only provide 256x128
+ * gst/monoscope/monoscope.c: (monoscope_init):
+ assert size of 256x128
+
+2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_fixate),
+ (gst_v4lsrc_getcaps), (gst_v4lsrc_buffer_free):
+ fixate to max width and height of device
+
+2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * sys/v4l/gstv4l.c:
+ * sys/v4l/gstv4lsrc.c:
+ * sys/v4l/v4l_calls.c:
+ * sys/v4l/v4lsrc_calls.c:
+ fix for qc-usb driver which fakes having more than one buffer
+ by handing the same buffer twice, which confused GStreamer's/v4lsrc
+ buffer_free override
+ add debugging
+
+2004-04-27 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_class_init), (gst_videotestsrc_change_state),
+ (gst_videotestsrc_init), (gst_videotestsrc_get),
+ (gst_videotestsrc_set_property), (gst_videotestsrc_get_property):
+ * gst/videotestsrc/gstvideotestsrc.h:
+ add num-buffers property
+
+ 2004-04-26 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (plugin_init):
+ set id3mux rank to NONE so it doesn't confuse spider
+ require audio/mpeg,mpegversion=1 in id3mux
+
+2004-04-26 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ detect faad correctly as non-working if it's indeed non-working
+
+2004-04-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+ (gst_jpegenc_class_init), (gst_jpegenc_getcaps):
+ fix _getcaps so it only negotiates to its supported format
+
+2004-04-25 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+ fix memleak
+
+2004-04-23 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+ audio/x-raw-int with height rules! not. Now it's depth.
+
+2004-04-22 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_create_sourcepad),
+ (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
+ (gst_wavparse_loop):
+ Missing variable initialization. Add handling of DVI ADPCM. Fix
+ mis-parsing of LIST chunks. This works around a bug where we mis-
+ parse non-aligning LIST chunks (so LIST chunks where the contents
+ don't align with the actual LIST size). The correct fix is to use
+ rifflib, I'm not going to fix wavparse - too much work. All this
+ fixes #104878.
+
+2004-04-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/shout/gstshout.c: (gst_icecastsend_change_state):
+ fix shoutcast not working (fixes #140844)
+
+2004-04-22 Benjamin Otte <otte@gnome.org>
+
+ * ext/hermes/gsthermescolorspace.c:
+ (gst_hermes_colorspace_caps_remove_format_info):
+ * gst/colorspace/gstcolorspace.c:
+ (gst_colorspace_caps_remove_format_info):
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_caps_remove_format_info):
+ s/gst_caps_simplify/gst_caps_do_simplify/
+
+2004-04-22 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ mpegversion is an int
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
+ don't try to create pad templates with NULL caps, use any caps
+ instead.
+
+2004-04-20 David Schleef <ds@schleef.org>
+
+ * ext/sdl/Makefile.am: Link against libgstinterfaces, not
+ libgstxoverlay. jmmv@menta.net (Julio M. Merino Vidal)
+ (bug #140384)
+
+2004-04-20 Daniel Gazard <daniel.gazard@epita.fr>
+
+ reviewed by David Schleef
+
+ * ext/mad/gstid3tag.c: Add stdlib.h
+ * gst/rtp/gstrtpgsmenc.c: same
+ * gst/tags/gstid3tag.c: same
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Fix GST_DISABLE_LOADSAVE
+ * gst/tcp/gsttcpsink.c: (gst_tcpsink_sink_link): Adjust
+ GST_DISABLE_LOADSAVE use.
+ * gst/udp/gstudpsink.c: (gst_udpsink_sink_link): Likewise.
+ * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get): Likewise.
+ * ext/gnomevfs/gstgnomevfssrc.c: Include <stdlib.h> (needed by
+ atol(3)).
+ * sys/oss/gstosselement.h: Include <sys/types.h> (needed for dev_t).
+ * gst/tags/gstvorbistag.c: Include <stdlib.h> (needed by
+ strtoul(3)).
+ * gst/rtp/gstrtpL16enc.c: Include <stdlib.h> (needed by random(3)).
+ * ext/mad/Makefile.am: (libgstmad_la_CFLAGS): Add $(MAD_CFLAGS)
+ $(ID3_CFLAGS).
+ * ext/libfame/Makefile.am: (libgstlibfame_la_CFLAGS): Add
+ $(LIBFAME_CFLAGS).
+
+2004-04-20 David Schleef <ds@schleef.org>
+
+ * gst/realmedia/rmdemux.c: This was supposed to part of the
+ last checkin. Same idea.
+
+2004-04-20 Daniel Gazard <daniel.gazard@epita.fr>
+
+ reviewed by David Schleef
+
+ * configure.ac: bump required gstreamer version to 0.8.1.1
+ because of following changes [--ds]
+
+ * gst-libs/gst/riff/riff-read.c: Include gst/gstutils.h.
+ (gst_riff_peek_head, gst_riff_peek_list, gst_riff_read_list)
+ (gst_riff_read_header): Use GST_READ_UINT*
+ macros to access possibly unaligned memory.
+
+ * gst/typefind/gsttypefindfunctions.c: Include gst/gstutils.h.
+ (mp3_type_find): Use GST_READ_UINT*
+ macros to access possibly unaligned memory.
+ (mp3_type_find, mpeg1_parse_header, qt_type_find)
+ (speex_type_find): Likewise
+
+ * gst/tags/gstvorbistag.c: (ADVANCE): Likewise
+
+ * gst/qtdemux/qtdemux.c: Include stdlib.h (needed by realloc).
+ (QTDEMUX_GUINT32_GET, QTDEMUX_GUINT16_GET, QTDEMUX_FP32_GET)
+ (QTDEMUX_FP16_GET, QTDEMUX_FOURCC_GET)
+ (gst_qtdemux_loop_header, gst_qtdemux_loop_header)
+ (qtdemux_node_dump_foreach, qtdemux_tree_get_child_by_type)
+ (qtdemux_tree_get_sibling_by_type): Use GST_READ_UINT*
+ macros to access possibly unaligned memory.
+
+ * gst/mpegstream/gstmpegpacketize.c: (parse_generic, parse_chunk):
+ Likewise.
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead)
+ (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes): Likewise.
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ Likewise.
+
+ * gst/mpeg2sub/gstmpeg2subt.c: (GST_BUFFER_DATA)
+ (gst_mpeg2subt_chain_subtitle): Likewise.
+
+ * gst/mpeg1videoparse/gstmp1videoparse.c: (mp1videoparse_parse_seq)
+ (gst_mp1videoparse_time_code, gst_mp1videoparse_real_chain):
+ Likewise.
+
+ * gst/mpeg1sys/buffer.c: (mpeg1mux_buffer_update_audio_info):
+ Likewise.
+
+ * gst/cdxaparse/gstcdxaparse.c: (gst_bytestream_peek_bytes):
+ Likewise.
+
+ * gst/asfdemux/gstasfdemux.c: (_read_var_length, _read_uint):
+ Likewise.
+
+2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ update required version of GStreamer because of GST_TIME_FORMAT
+
+2004-04-20 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_init):
+ remove leftover g_print
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ don't try setting only a subset of the caps. We don't want to kill
+ autoplugging on purpose
+
+2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/ximage/ximagesink.c: (plugin_init):
+ * sys/xvimage/xvimagesink.c: (plugin_init):
+ add debugging categories
+
+2004-04-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/en_GB.po:
+ * po/LINGUAS:
+ Adding en_GB translation (Gareth Owen)
+
+2004-04-20 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+ (qtdemux_parse), (qtdemux_type_get), (qtdemux_dump_mvhd),
+ (qtdemux_dump_tkhd), (qtdemux_dump_stsd), (qtdemux_dump_unknown),
+ (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
+ A number of new features and hacks to extract the esds atom and
+ put it into the caps. (bug #137724)
+
+2004-04-19 David Schleef <ds@schleef.org>
+
+ * gconf/Makefile.am: Fix for non-GNU make
+ * gst-libs/gst/Makefile.am: Change directory order to handle
+ GstPlay linking with gstinterfaces
+ * gst-libs/gst/audio/make_filter: make use of tr portable
+ * gst-libs/gst/play/Makefile.am: Add intended \
+ * gst-libs/gst/xwindowlistener/xwindowlistener.c:
+ (gst_xwin_set_clips): Switch to ISO variadic macro. Use a
+ function prototype instead of void *.
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Switch to ISO variadic
+ macro.
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_chain): wrap NULL in GST_ELEMENT_ERROR call
+ * gst/videofilter/make_filter: make use of tr portable
+ * pkgconfig/Makefile.am: Remove GNU extension in Makefile target
+
+2004-04-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/uk.po:
+ Added Ukrainian translation (Maxim V. Dziumanenko)
+
+2004-04-18 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_getcaps),
+ (gst_gsmdec_link), (gst_gsmdec_chain):
+ Fix capsnego, simplify chain function slightly.
+ * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+ Add GSM.
+
+2004-04-18 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+ (gst_wavparse_destroy_sourcepad), (gst_wavparse_create_sourcepad),
+ (gst_wavparse_parse_fmt), (gst_wavparse_change_state):
+ Hack to make wavparse work with spider (always -> sometimes pad).
+ Fixes #135862 && #140411.
+
+2004-04-18 Benjamin Otte <otte@gnome.org>
+
+ * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
+ (gst_osselement_rate_probe_check),
+ (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate):
+ get rid of \n in debug output
+
+2004-04-17 Iain <iain@prettypeople.org>
+
+ * gst/wavparse/gstwavparse.c (gst_wavparse_loop): Allow all events,
+ not just EOS.
+
+2004-04-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
+ (gst_id3_tag_class_init), (gst_id3_tag_get_caps),
+ (gst_id3_tag_add_src_pad), (gst_id3_tag_init),
+ (gst_id3_tag_set_property), (gst_id3_tag_do_caps_nego),
+ (gst_id3_tag_src_link), (gst_id3_tag_chain),
+ (gst_id3_tag_change_state), (plugin_init):
+ deprecate id3tag element and replace with id3demux/id3mux.
+ great side effect: this ugly file is now even uglier, yay!
+ * ext/mad/gstmad.h:
+ remove non-available function
+ update for new get_type
+
+2004-04-17 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ require mpeg2dec >= 0.4.0
+
+2004-04-17 Benjamin Otte <otte@gnome.org>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+ (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
+ (gst_xvimagesink_set_xwindow_id):
+ call GST_ELEMENT_ERROR whenever get_xcontext fails. Includes
+ assorted cleanup fixes.
+
+2004-04-16 David Schleef <ds@schleef.org>
+
+ * sys/ximage/ximagesink.h: Compile fix for FreeBSD. (bug #140268)
+ * sys/xvimage/xvimagesink.h: same
+
+2004-04-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
+ Fix GST_ELEMENT_ERROR with (NULL)
+
+2004-04-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data):
+ Add div[3456] as fourccs for DivX 3 (fixes #140137).
+
+2004-04-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c:
+ (gst_riff_create_video_caps_with_data),
+ (gst_riff_create_video_caps), (gst_riff_create_audio_caps),
+ (gst_riff_create_video_template_caps),
+ (gst_riff_create_audio_template_caps):
+ * gst-libs/gst/riff/riff-media.h:
+ * gst-libs/gst/riff/riff-read.c:
+ (gst_riff_read_strf_vids_with_data), (gst_riff_read_strf_vids):
+ * gst-libs/gst/riff/riff-read.h:
+ * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+ Add MS RLE support. I added some functions to read out strf chunks
+ into strf chunks and the data behind it. This is usually color
+ palettes (as in RLE, but also in 8-bit RGB). Also use those during
+ caps creation. Lastly, add ADPCM (similar to wavparse - which
+ should eventually be rifflib based).
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
+ (gst_matroska_demux_init), (gst_matroska_demux_reset):
+ * gst/matroska/matroska-demux.h:
+ Remove placeholders for some prehistoric tagging system. Didn't add
+ support for any tag system really anyway.
+ * gst/qtdemux/qtdemux.c:
+ Add support for audio/x-m4a (MPEG-4) through spider.
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+ (gst_wavparse_loop):
+ ADPCM support (#135862). Increase max. buffer size because we
+ cannot split buffers for ADPCM (screws references) and I've seen
+ files with 2048 byte chunks. 4096 seems safe for now.
+
+2004-04-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: bump nano to 1
+
+=== release 0.8.1 ===
+
+2004-04-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: releasing 0.8.1, "Comforting Sounds"
+
+2004-04-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+ Fix typo in divxversion (3 instead of 4 for "DIVX" fourcc).
+ Fixes #140058
+
+2004-04-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
+ lower rank of dvddemux so that it's not used for mpeg playback.
+
+2004-04-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ save libs correctly when checking mad
+
+2004-04-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mad/gstid3tag.c: (plugin_init):
+ lower rank of id3tag as proposed by Benjamin. Fixes #139926.
+
+2004-04-13 David Schleef <ds@schleef.org>
+
+ * common/m4/gst-feature.m4: Call -config scripts with
+ --plugin-libs if it is supported.
+ * gst/avi/gstavimux.c: (gst_avimux_vidsinkconnect): sequences of
+ JPEG images are image/jpeg.
+ * gst/debug/Makefile.am:
+ * gst/debug/negotiation.c: (gst_negotiation_class_init),
+ (gst_negotiation_getcaps), (gst_negotiation_pad_link),
+ (gst_negotiation_update_caps), (gst_negotiation_get_property),
+ (gst_negotiation_plugin_init): Add a property that acts like
+ filter caps.
+ * testsuite/gst-lint: Move license checking to be a standard
+ test.
+
+2004-04-13 David Schleef <ds@schleef.org>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_reset): Fix memleak.
+ patch from Sebastien Cote (bug #139958)
+
+2004-04-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * examples/gstplay/Makefile.am:
+ * examples/gstplay/player.c: (main):
+ make the commandline player example use gconf settings
+
+2004-04-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
+ (gst_cacasink_sinkconnect), (gst_cacasink_init),
+ (gst_cacasink_chain), (gst_cacasink_open), (gst_cacasink_close):
+ init/end library during state transition, not object
+ creation/disposal. get rid of custom dispose handler.
+
+
+2004-04-12 Christian Schaller <Uraeus@gnome.org>
+
+ * sys/oss/gstosselement.c: s/lstat/stat/ from freeBSD, since it can
+ be a symlink
+
+2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_data):
+ Handle JUNK chunks inside data section. Prevents warnings.
+
+2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+ (gst_riff_create_video_template_caps):
+ Add MS video v1.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+ (gst_avi_demux_stream_data):
+ Add support for "rec-list" chunks.
+
+2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+ Fix another codecname mismatch.
+
+2004-04-11 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+ Fix divx caps mismatch and move from video/x-jpeg to image/jpeg
+ so that MJPEG plays back.
+
+2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+ (gst_mp1videoparse_real_chain), (gst_mp1videoparse_change_state):
+ * gst/mpeg1videoparse/gstmp1videoparse.h:
+ Fix for some slight mis-cuts in buffer parsing, and for some
+ potential overflows or faults-causers. Adds disconts. Also fixes
+ #139105 while we're at it.
+
+2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * sys/v4l2/gstv4l2element.h:
+ Workaround for missing struct v4l2_buffer declaration in Suse 9
+ and Mandrake 10 linux/videodev2.h header file (#135919).
+
+2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
+ Bail out if no filename was given.
+
+2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps),
+ (gst_v4l2_fourcc_from_structure):
+ Add Y41B/Y42B YUV formats (see #125732), fix Y41P (was typo'ed to
+ Y41B somewhere).
+
+2004-04-09 Benjamin Otte <otte@gnome.org>
+
+ * ext/gnomevfs/gstgnomevfssink.c:
+ (_gst_boolean_allow_overwrite_accumulator),
+ (gst_gnomevfssink_class_init):
+ fix erase signal - if any handler returns false the file will not be
+ overwritten. If no handler is connected, the file will not be
+ overwritten either.
+ renamed signal to "allow-overwrite"
+ * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
+ free string when adding it to ID3 failed
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+ unref event when done
+ * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+ free caps
+ * gst/typefind/gsttypefindfunctions.c:
+ (mpeg_video_stream_type_find):
+ fix invalid read
+
+2004-04-08 David Schleef <ds@schleef.org>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_register): Change rank to PRIMARY.
+
+2004-04-08 David Schleef <ds@schleef.org>
+
+ * gst/colorspace/gstcolorspace.c: Don't advertise a conversion
+ we don't support (bug #139532)
+
+2004-04-07 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mad/gstmad.c: (gst_mad_handle_event),
+ (gst_mad_check_caps_reset), (gst_mad_chain),
+ (gst_mad_change_state):
+ only set explicit caps if they haven't been set before for
+ this stream. MPEG-audio sample rate/channels aren't allowed
+ to change in-stream.
+ Fixes #139382
+
+2004-04-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_base_init),
+ (_gst_boolean_did_something_accumulator),
+ (gst_gnomevfssink_class_init), (gst_gnomevfssink_dispose),
+ (gst_gnomevfssink_init), (gst_gnomevfssink_set_property),
+ (gst_gnomevfssink_get_property), (gst_gnomevfssink_open_file),
+ (gst_gnomevfssink_close_file), (gst_gnomevfssink_chain),
+ (gst_gnomevfssink_change_state):
+ Fix erase signal. Don't erase by default. Remove handoff signal.
+ Remove erase property. Don't segfault. General cleanup.
+
+2004-04-07 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/gconf/test-gconf.c: (main):
+ add missing gst_init
+
+2004-04-07 Benjamin Otte <otte@gnome.org>
+
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
+ free the mutexes, too
+
+2004-04-07 Benjamin Otte <otte@gnome.org>
+
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
+ actually free the URI string
+ * ext/mad/gstid3tag.c: (gst_id3_tag_src_event):
+ compute offset correctly when passing discont events
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+ don't leak discont events
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
+ add some missing breaks so caps aren't copied randomly
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream):
+ if we realloc memory, we better use it
+
+2004-04-06 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstmad.c: (normal_seek):
+ fix GST_FORMAT_TIME usage
+
+2004-04-05 David Schleef <ds@schleef.org>
+
+ * ext/kio/kiosrc.cpp: Undefine KDE_DEPRECATED so we can use
+ a deprecated function (hack!)
+
+2004-04-05 Benjamin Otte <otte@gnome.org>
+
+ * ext/esd/esdmon.c: (gst_esdmon_get):
+ fix nonterminated vararg and memleak
+
+2004-04-05 Benjamin Otte <otte@gnome.org>
+
+ * ext/ladspa/gstladspa.c: (gst_ladspa_class_init),
+ (gst_ladspa_init), (gst_ladspa_force_src_caps),
+ (gst_ladspa_set_property), (gst_ladspa_get_property),
+ (gst_ladspa_instantiate), (gst_ladspa_activate),
+ (gst_ladspa_deactivate), (gst_ladspa_loop), (gst_ladspa_chain):
+ clean up debugging
+
+2004-04-05 Stefan Kost <kost@imn.htwk-leipzig.de>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/ladspa/gstladspa.c: (gst_ladspa_class_init):
+ check for broken LADSPA parameters (fixes #138635)
+
+2004-04-05 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps):
+ advertise buffer-frames correctly on sinkpads
+
+2004-04-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mad/gstmad.c: (gst_mad_get_type), (gst_mad_layer_get_type),
+ (gst_mad_mode_get_type), (gst_mad_emphasis_get_type),
+ (gst_mad_get_event_masks), (gst_mad_get_query_types), (index_seek),
+ (normal_seek), (gst_mad_src_event), (gst_mad_handle_event),
+ (gst_mad_check_caps_reset), (gst_mad_chain):
+ add more debugging, only reset caps when we're not in error state
+
+2004-04-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mad/gstmad.c: add debugging category, comment + cleanups
+
+2004-04-05 Julio M. Merino Vidal <jmmv@menta.net>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ fix == in test(1) operator
+
+2004-04-05 Julio M. Merino Vidal <jmmv@menta.net>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ fix --export-symblos-regex to a working regex.
+
+2004-04-04 Benjamin Otte <otte@gnome.org>
+
+ * sys/oss/.cvsignore:
+ add for oss_probe
+
+2004-04-03 Tim-Phillip Müller <t.i.m@zen.co.uk>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+ add missing 'new_media' argument (fixes #138168)
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_handle_seek_event):
+ add vararg terminator (fixes #138169)
+
+2004-04-02 David Schleef <ds@schleef.org>
+
+ * ext/gdk_pixbuf/Makefile.am: Make sure gstgdkanimation.h is
+ disted (bug #138914)
+
+2004-04-01 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state),
+ (gst_alsa_close_audio):
+ handle case better where a soundcard can't pause
+ * ext/ogg/gstoggdemux.c:
+ don't crash when we get events but don't have pads yet
+
+2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
+ throw an error if we couldn't probe any caps.
+
+2004-04-01 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dvdnav/gst-dvd:
+ Add a really simple sample DVD player
+
+2004-04-01 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_get_type), (gst_a52dec_init),
+ (gst_a52dec_push), (gst_a52dec_handle_event),
+ (gst_a52dec_update_streaminfo), (gst_a52dec_loop),
+ (gst_a52dec_change_state):
+ * ext/a52dec/gsta52dec.h:
+ Use a debug category, Output timestamps correctly
+ Emit tag info, Handle events, tell liba52dec about cpu
+ capabilities so it can use MMX etc.
+ * ext/dv/gstdvdec.c: (gst_dvdec_loop), (gst_dvdec_change_state):
+ Fix a crasher accessing invalid memory
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init),
+ (dvdnavsrc_update_highlight), (dvdnavsrc_loop),
+ (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
+ (dvdnavsrc_event), (dvdnavsrc_get_formats), (dvdnavsrc_convert),
+ (dvdnavsrc_query):
+ Some support for byte-format seeking.
+ Small fixes for still frames and menu button overlays
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
+ (gst_mpeg2dec_alloc_buffer):
+ Use a debug category. Adjust the report level of several items to
+ LOG. Call mpeg2_custom_fbuf to mark our buffers as 'custom buffers'
+ so it doesn't lose the GstBuffer pointer
+ * gst/debug/Makefile.am:
+ * gst/debug/gstdebug.c: (plugin_init):
+ * gst/debug/gstnavseek.c: (gst_navseek_get_type),
+ (gst_navseek_base_init), (gst_navseek_class_init),
+ (gst_navseek_init), (gst_navseek_seek),
+ (gst_navseek_handle_src_event), (gst_navseek_set_property),
+ (gst_navseek_get_property), (gst_navseek_chain),
+ (gst_navseek_plugin_init):
+ * gst/debug/gstnavseek.h:
+ Add the navseek debug element for seeking back and forth in a
+ video stream using arrow keys.
+ * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_get_type),
+ (gst_mpeg2subt_base_init), (gst_mpeg2subt_class_init),
+ (gst_mpeg2subt_init), (gst_mpeg2subt_finalize),
+ (gst_mpeg2subt_getcaps_video), (gst_mpeg2subt_link_video),
+ (gst_mpeg2subt_handle_video), (gst_mpeg2subt_src_event),
+ (gst_mpeg2subt_parse_header), (gst_get_nibble),
+ (gst_setup_palette), (gst_get_rle_code), (gst_draw_rle_line),
+ (gst_merge_uv_data), (gst_mpeg2subt_merge_title),
+ (gst_update_still_frame), (gst_mpeg2subt_handle_subtitle),
+ (gst_mpeg2subt_handle_dvd_event), (gst_mpeg2subt_loop):
+ * gst/mpeg2sub/gstmpeg2subt.h:
+ Pretty much a complete rewrite. Now a loopbased element. May still
+ require work to properly synchronise subtitle buffers.
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private),
+ (gst_dvd_demux_send_subbuffer):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+ Don't attempt to create subbuffers of size 0
+ Reduce a couple of error outputs to warnings.
+ * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect),
+ (gst_y4mencode_chain):
+ Output the y4m frame header correctly.
+
+2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
+ throw errors instead of allowing SIGFPE
+
+2004-04-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_string),
+ (gst_gconf_render_bin_from_key):
+ leak plugging and style fixing
+
+2004-03-31 David Schleef <ds@schleef.org>
+
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_expand_value),
+ (gst_audioscale_getcaps): Fix getcaps to expand and union lists.
+ (bug #138225)
+ * gst/debug/Makefile.am:
+ * gst/debug/breakmydata.c: (gst_break_my_data_plugin_init):
+ * gst/debug/gstdebug.c: (plugin_init): Merge elements into one
+ plugin.
+ * gst/debug/negotiation.c: (gst_gst_negotiation_get_type),
+ (gst_negotiation_base_init), (gst_negotiation_class_init),
+ (gst_negotiation_init), (gst_negotiation_getcaps),
+ (gst_negotiation_pad_link), (gst_negotiation_chain),
+ (gst_negotiation_set_property), (gst_negotiation_get_property),
+ (gst_negotiation_plugin_init): New element to talk about random
+ negotiation things happening in a pipeline.
+
+2004-03-31 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
+ fix integer addition with help of Stefan Kost
+
+2004-03-31 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/nl.po: updated Dutch translation (Elros Cyriatan)
+
+2004-03-30 David Schleef <ds@schleef.org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer),
+ (gst_mpeg2dec_negotiate_format): Handle Y42B-format MPEG
+ video, patch from Matthew.Spencer@eu.sony.com (Matthew Spencer)
+ (bug #137504)
+ * ext/mpeg2dec/gstmpeg2dec.h:
+
+2004-03-30 David Schleef <ds@schleef.org>
+
+ * ext/gdk_pixbuf/Makefile.am: Remove spurious rules. (bug #136527)
+
+2004-03-30 David Schleef <ds@schleef.org>
+
+ * tools/gst-launch-ext-m.m: Applied patch from gnome@flyn.org (W.
+ Michael Petullo) to handle .mov
+
+2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
+ (gst_osselement_rate_check_rate):
+ probe caps correctly for sound cards that only support one format
+
+2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/kio/kiosrc.cpp: (process_events):
+ update handling event processing if inside KDE - untested
+
+2004-03-29 David Schleef <ds@schleef.org>
+
+ * ext/hermes/gsthermescolorspace.c: (plugin_init): decrease rank
+ by 2 to not interfere with other colorspaces.
+ * ext/pango/gsttextoverlay.c: (plugin_init): change rank to NONE
+ * gst/colorspace/gstcolorspace.c: (plugin_init): decrease rank by
+ one to not interfere with ffmpeg_colorspace.
+
+2004-03-29 David Schleef <ds@schleef.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_fixate): Don't fixate fields that
+ aren't in the caps.
+ * gst/sine/gstsinesrc.c: change rate caps to [1,MAX]
+ * gst/videocrop/gstvideocrop.c: (plugin_init): Change rank to NONE.
+
+2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/riff/riff-media.c:
+ fail on error, don't try to set stuff on NULL caps
+
+2004-03-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/kio/Makefile.am:
+ * ext/kio/kioreceiver.cpp:
+ * ext/kio/kioreceiver.h:
+ * ext/kio/kiosrc.cpp:
+ * ext/kio/kiosrc.h:
+ add experimental kiosrc plugin
+ * ext/alsa/gstalsaplugin.c: (plugin_init):
+ initialize debugging category only when we're sure registering the
+ plugins worked.
+
+2004-03-29 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * examples/gstplay/player.c: (main):
+ * gst-libs/gst/play/play.c: (gst_play_class_init),
+ (gst_play_set_location), (gst_play_set_data_src),
+ (gst_play_set_video_sink), (gst_play_set_audio_sink),
+ (gst_play_set_visualization), (gst_play_connect_visualization):
+ check return values of element_set_state and return FALSE where
+ failed
+
+2004-03-29 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+ try harder to check if an event is really a discont
+
+2004-03-29 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS: adding Azerbaijani (Mətin Əmirov)
+ * po/az.po:
+
+2004-03-28 Benjamin Otte <otte@gnome.org>
+
+ * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+ (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
+ get rid of non-standard "..." ranges in case statements.
+
+2004-03-27 Martin Soto <martinsoto@users.sourceforge.net>
+
+ * gst/mpegstream/gstmpegdemux.c:
+ * gst/mpegstream/gstmpegdemux.h: Complete overhaul. All DVD
+ specific functionality split to the new dvddemux element.
+ * gst/mpegstream/gstdvddemux.c:
+ * gst/mpegstream/gstdvddemux.h: New demultiplexer for DVD (VOB)
+ streams, derived from mpegdemux.
+ * gst/mpegstream/gstmpegparse.c: Discontinuity handling cleaned
+ up. SCR based timestamp rewriting can be turned off (will probably
+ completely disappear soon).
+ * ext/dvdnav/dvdnavsrc.c: Changes resulting from a few months
+ hacking. General cleanup. All printf statements replaced by
+ debugging messages. Almost complete libdvdnav support.
+ (dvdnavsrc_class_init): Got rid of unnecessary signals (replaced
+ by events. New properties for audio and subpicture languages.
+ (dvdnavsrc_update_highlight): Now uses events.
+ (dvdnavsrc_user_op): Cleaned up.
+ (dvdnavsrc_get): Renamed to dvdnavsrc_loop (element is now loop
+ based). Lots of cleanup, and propper support for most libdvdnav
+ events.
+ (dvdnavsrc_make_dvd_event): New function.
+ (dvdnavsrc_make_dvd_nav_packet_event): New function.
+ (dvdnavsrc_make_clut_change_event): New function.
+
+2004-03-26 Benjamin Otte <otte@gnome.org>
+
+ * gst/typefind/gsttypefindfunctions.c: (theora_type_find):
+ fix bug where typefinding would claim it's theora whenever less then
+ 7 bytes of data were available
+
+2004-03-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link),
+ (gst_alawdec_base_init), (gst_alawdec_class_init),
+ (gst_alawdec_init), (gst_alawdec_chain):
+ * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link),
+ (gst_alawenc_base_init), (gst_alawenc_class_init),
+ (gst_alawenc_init), (gst_alawenc_chain):
+ * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link),
+ (gst_mulawdec_base_init), (gst_mulawdec_class_init),
+ (gst_mulawdec_init), (gst_mulawdec_chain):
+ * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link),
+ (gst_mulawenc_base_init), (gst_mulawenc_class_init),
+ (gst_mulawenc_init), (gst_mulawenc_chain):
+ Fix capsnego in all four, remove the unused property functions and
+ simplify the chain functions slightly. I guess we could use macros
+ or something similar for those, since the code is so similar, but
+ I'm currently too lazy...
+
+2004-03-24 David Schleef <ds@schleef.org>
+
+ * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
+ (gst_osselement_close_audio), (gst_osselement_probe_caps),
+ (gst_osselement_get_format_structure),
+ (gst_osselement_rate_probe_check), (gst_osselement_rate_add_range),
+ (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate),
+ (gst_osselement_rate_int_compare): Add code to handle rate probing
+ (bug #120883)
+ * sys/oss/gstosselement.h: same
+ * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_getcaps):
+ Use rate probing provided by osselement.
+ * sys/oss/gstosssrc.c: (gst_osssrc_init), (gst_osssrc_getcaps): same
+
+2004-03-24 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/xvid/gstxvidenc.c: (gst_xvidenc_set_property),
+ (gst_xvidenc_get_property):
+ ulong/int mess-up.
+
+2004-03-24 David Schleef <ds@schleef.org>
+
+ * ext/speex/gstspeexdec.c: (gst_speexdec_base_init),
+ (gst_speexdec_init):
+ * ext/speex/gstspeexenc.c: (gst_speexenc_base_init),
+ (gst_speexenc_init): Create the pad template correctly (from
+ the static pad template, not a NULL pointer.)
+
+2004-03-25 Benjamin Otte <otte@gnome.org>
+
+ * gst/debug/Makefile.am:
+ * gst/debug/breakmydata.c:
+ add element that quasi-randomly changes bytes in the stream.
+ Intended use is robustness checking of demuxers and decoders in
+ media tests.
+
+2004-03-24 Benjamin Otte <otte@gnome.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+ (gst_alsa_probe_hw_params):
+ * ext/alsa/gstalsa.h:
+ debugging output fixes
+
+2004-03-24 Benjamin Otte <otte@gnome.org>
+
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_set_property):
+ don't g_return_if_fail if element is PLAYING, fail silently as every
+ other element.
+ * gst/effectv/gstquark.c: (gst_quarktv_chain):
+ only fix needed for cast lvalue issues in gst-plugins
+ * gst/volenv/gstvolenv.c: (gst_volenv_init):
+ add proxy_getcaps
+
+2004-03-24 Benjamin Otte <otte@gnome.org>
+
+ * gst/level/gstlevel.c: (gst_level_init):
+ add proxying getcaps function, so level doesn't advertise impossible
+ caps
+
+2004-03-24 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+ (gst_qtdemux_loop_header), (qtdemux_parse_moov), (qtdemux_parse),
+ (qtdemux_node_dump_foreach), (qtdemux_dump_mvhd),
+ (qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
+ (qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
+ (qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
+ (qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
+ (qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
+ (qtdemux_parse_tree), (qtdemux_parse_trak): Fix debugging
+ messages. Divide the chunk size by the compression ratio
+ (needed for MACE audio)
+
+2004-03-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ Fix buffer overflow read error.
+
+2004-03-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.h:
+ Remove unused entry.
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+ Add cinepak.
+ * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+ (gst_videodrop_link), (gst_videodrop_chain):
+ Fix, sort of. Was horribly broken with new capsnego. Bah...
+
+2004-03-23 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * gst/typefind/gsttypefindfunctions.c: (ape_type_find),
+ (plugin_init):
+ Add a monkeysaudio typefind function
+
+2004-03-23 Johan Dahlin <johan@gnome.org>
+
+ * gst-libs/gst/play/play.c (gst_play_audio_fixate)
+ (gst_play_video_fixate): Check so the structure has the field
+ before trying to fixate them, this makes it possible to have
+ fakesinks for video and audio output without printing errors on
+ the output console.
+
+2004-03-22 David Schleef <ds@schleef.org>
+
+ * sys/oss/Makefile.am:
+ * sys/oss/oss_probe.c: (main), (probe_check), (add_range),
+ (check_rate), (add_rate): Rate probing test app.
+
+2004-03-21 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+ (_fixate_caps_to_int), (gst_audio_convert_fixate):
+ add a fixation function that pretty much does the right thing (fixes
+ #137556)
+
+2004-03-20 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * configure.ac: GST_PACKAGE default: s/GStreamer/GStreamer Plugins/
+
+2004-03-20 Tim-Phillip Müller <t.i.m@zen.co.uk>
+
+ reviewed by: Benjamin Otte <otte@gnome.org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ terminate gst_event_new_discontinuous correctly (fixes parts of
+ #137711)
+
+2004-03-19 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/Makefile.am: Enable xoverlay unconditionally,
+ since it doesn't depend on X, and it's part of our ABI.
+
+2004-03-19 Iain <iain@prettypeople.org>
+
+ * gst/interleave/deinterleave.c (deinterleave_sink_link): Use the
+ is_int in the structure, not the local variable.
+
+2004-03-19 David Schleef <ds@schleef.org>
+
+ * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_change_state),
+ (gst_rfbsrc_init), (gst_rfbsrc_getcaps), (gst_rfbsrc_fixate),
+ (gst_rfbsrc_link), (gst_rfbsrc_paint_rect), (gst_rfbsrc_get):
+ Improvements in caps negotiation.
+
+2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/af.po:
+ adding Afrikaans (Petri Jooste)
+
+2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_chain):
+ throw error instead of g_critical (#137588)
+
+2004-03-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am:
+ * configure.ac:
+ dist common and m4 correctly
+ * po/sv.po:
+
+2004-03-17 David Schleef <ds@schleef.org>
+
+ * pkgconfig/gstreamer-media-info.pc.in: Add Version.
+ (bug #137348)
+
+2004-03-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/sv.po:
+ adding Swedish translation (Christian Rose)
+
+2004-03-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * Makefile.am: use release.mak
+
+2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * common/ChangeLog:
+ * common/gst-autogen.sh:
+ add some explanation about the version detection
+ * configure.ac:
+ fix X check
+
+2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: bump nano to 1
+
+=== release 0.8.0 ===
+
+2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: release 0.8.0, "Pharmaceutical Itch"
+
+2004-03-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ update libtool version
+ * gst-libs/gst/media-info/Makefile.am:
+ actually use libtool version
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: fix speex detection to work with 1.0 but not 1.1
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * gst-plugins.spec.in:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-gconf-uninstalled.pc.in:
+ * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+ * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+ * pkgconfig/gstreamer-libs.pc.in:
+ * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
+ * pkgconfig/gstreamer-play-uninstalled.pc.in:
+ * pkgconfig/gstreamer-plugins-uninstalled.pc.in:
+ * pkgconfig/gstreamer-plugins.pc.in:
+ remove @VERSION@ from some of the pc files since core and plugins
+ are decoupled.
+ created gstreamer-plugins.pc as it's a better name, but keeping
+ -libs around for now to get fixes upstream done first.
+
+2004-03-15 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/play.c: (gst_play_get_framerate),
+ (gst_play_get_sink_element): First draft of gst_play_get_framerate.
+ * gst-libs/gst/play/play.h:
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * *.c, *.cc: don't mix tabs and spaces
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
+ use the new ffmpegcolorspace
+ * gst-plugins.spec.in:
+ package new colorspace and media-info
+ * configure.ac:
+ * pkgconfig/Makefile.am:
+ fix some more disting issues
+ * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
+ * pkgconfig/gstreamer-media-info.pc.in:
+ generate media-info pc files
+
+2004-03-15 Johan Dahlin <johan@gnome.org>
+
+ * *.h: Revert indenting
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ adding ffmpegcolorspace element
+ * gst/ffmpegcolorspace/Makefile.am:
+ * gst/ffmpegcolorspace/avcodec.h:
+ * gst/ffmpegcolorspace/common.h:
+ * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
+ * gst/ffmpegcolorspace/dsputil.h:
+ * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+ (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_pix_fmt_to_caps),
+ (gst_ffmpeg_caps_to_pix_fmt):
+ * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ (gst_ffmpegcolorspace_caps_remove_format_info),
+ (gst_ffmpegcolorspace_getcaps), (gst_ffmpegcolorspace_pad_link),
+ (gst_ffmpegcolorspace_get_type), (gst_ffmpegcolorspace_base_init),
+ (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_init),
+ (gst_ffmpegcolorspace_chain), (gst_ffmpegcolorspace_change_state),
+ (gst_ffmpegcolorspace_set_property),
+ (gst_ffmpegcolorspace_get_property),
+ (gst_ffmpegcolorspace_register):
+ * gst/ffmpegcolorspace/imgconvert.c:
+ (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+ (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
+ (avpicture_get_size), (avcodec_get_pix_fmt_loss),
+ (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
+ (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
+ (yuv422_to_yuv420p), (yuv422_to_yuv422p), (yuv422p_to_yuv422),
+ (C_JPEG_TO_CCIR), (img_convert_init), (img_apply_table),
+ (shrink41), (shrink21), (shrink12), (shrink22), (shrink44),
+ (grow21_line), (grow41_line), (grow21), (grow22), (grow41),
+ (grow44), (conv411), (gif_clut_index), (build_rgb_palette),
+ (bitcopy_n), (mono_to_gray), (monowhite_to_gray),
+ (monoblack_to_gray), (gray_to_mono), (gray_to_monowhite),
+ (gray_to_monoblack), (avpicture_alloc), (avpicture_free),
+ (is_yuv_planar), (img_convert), (get_alpha_info_pal8),
+ (img_get_alpha_info), (deinterlace_line),
+ (deinterlace_line_inplace), (deinterlace_bottom_field),
+ (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
+ * gst/ffmpegcolorspace/imgconvert_template.h:
+ * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
+ * gst/ffmpegcolorspace/mmx.h:
+ * gst/ffmpegcolorspace/utils.c: (avcodec_init):
+ adding ffmpegcolorspace element supplied by Ronald after cleaning
+ up and pulling in the right bits of upstream source.
+ I'm sure a better C/compiler wizard could do some cleaning up (for
+ example use GLIB's malloc stuff), but as a first pass this
+ works very well
+
+2004-03-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/alsa/gstalsa.h:
+ I assume Ronald forgot to commit the change to have cardname
+ as a struct member. Expect some public spanking at the next
+ opportunity.
+
+2004-03-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_property),
+ (gst_alsa_open_audio), (gst_alsa_close_audio):
+ * ext/alsa/gstalsa.c:
+ Don't open the device if we're a mixer (= padless).
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_class_init),
+ (gst_alsa_mixer_init), (gst_alsa_mixer_open),
+ (gst_alsa_mixer_close), (gst_alsa_mixer_change_state):
+ Open mixer during state change rather than during object
+ initialization. Also, get a device name. Currently in a somewhat
+ hackish fashion, but I didn't really find something better.
+
+2004-03-14 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * *.c, *.h: run gst-indent
+
+2004-03-14 Benjamin Otte <otte@gnome.org>
+
+ * gst/modplug/gstmodplug.cc:
+ * gst/modplug/gstmodplug.h:
+ set correct timestamps on outgoing buffers
+
+2004-03-14 Benjamin Otte <otte@gnome.org>
+
+ * gst/modplug/gstmodplug.cc:
+ handle events - don't do crap when a discont arrives that's not
+ necessary
+ This allows correct loading and playback of mods in Rhythmbox
+
+2004-03-14 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ * gst-libs/gst/gconf/Makefile.am:
+ * pkgconfig/Makefile.am:
+ move gstreamer-gconf pkgconfig files to pkgconfig/ dir. Make sure
+ they get rebuilt properly
+ * configure.ac:
+ when checking for vorbis, try pkgconfig first.
+ * gst/modplug/gstmodplug.cc:
+ add fixate function
+
+2004-03-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+ Fix for obvious mistake, where we first shift the offset and then
+ read a samplesize element assuming the old offset. Note that this
+ part still has something weird, i.e. my movies containing those
+ don't actually play well, but at least there's something that looks
+ like sound now.
+
+2004-03-14 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/typefind/gsttypefindfunctions.c: (speex_type_find),
+ (plugin_init):
+ Add a typefind function for speex format
+
+2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps),
+ (gst_asf_demux_setup_pad):
+ Use 25fps as our "fake" fps value (marked for fixage in 0.9.x)
+ instead of 0. Reason is simple: some elements have a fps range
+ of 1-max instead of 0-max. So now ASF video actually works.
+
+2004-03-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * po/LINGUAS:
+ * po/sr.po:
+ adding serbian as a language
+
+2004-03-13 Benjamin Otte <otte@gnome.org>
+
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+ return taglist correctly from _get function, don't gst_pad_push it.
+ (fixes #137042)
+
+2004-03-13 Jan Schmidt <thaytan@mad.scientist.com>
+ * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+
+2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_free_list):
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_class_init),
+ (gst_alsa_mixer_track_new):
+ * ext/alsa/gstalsamixertrack.h:
+ Fix ancient leftovers... MixerTrack is a GObject.
+
+2004-03-13 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+ * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+ Don't block during probing...
+
+2004-03-12 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_type), (gst_alsa_class_init),
+ (gst_alsa_get_property), (gst_alsa_probe_get_properties),
+ (gst_alsa_class_probe_devices), (gst_alsa_class_list_devices),
+ (gst_alsa_probe_probe_property), (gst_alsa_probe_needs_probe),
+ (gst_alsa_probe_get_values), (gst_alsa_probe_interface_init),
+ (gst_alsa_open_audio), (gst_alsa_close_audio):
+ * ext/alsa/gstalsa.h:
+ Add propertyprobe interface implementation, add some device-name
+ property, all this so that it looks good in gnome-volume-control.
+
+2004-03-12 David Schleef <ds@schleef.org>
+
+ * configure.ac: the Hermes library controls hermescolorspace, not
+ colorspace.
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+ (gst_mpeg2dec_init): minor pet peeve: disable code with #ifdef,
+ not /* */
+ * ext/sdl/sdlvideosink.c: Change XID to unsigned long.
+ * ext/sdl/sdlvideosink.h: ditto.
+ * gst/colorspace/gstcolorspace.c: Fix old comments about Hermes
+
+2004-03-12 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_set_xwindow_id),
+ (gst_x_overlay_got_xwindow_id):
+ * gst-libs/gst/xoverlay/xoverlay.h:
+ replace XID with unsigned long to get rid of the xlibs dependency in
+ XOverlay (fixes #137004)
+
+2004-03-13 Jan Schmidt <thaytan@mad.scientist.com>
+ * gst/effectv/gstaging.c: (gst_agingtv_base_init),
+ (gst_agingtv_setup):
+ * gst/effectv/gstdice.c: (gst_dicetv_get_type),
+ (gst_dicetv_base_init), (gst_dicetv_class_init),
+ (gst_dicetv_setup), (gst_dicetv_init), (gst_dicetv_draw):
+ * gst/effectv/gstedge.c: (gst_edgetv_get_type),
+ (gst_edgetv_base_init), (gst_edgetv_class_init), (gst_edgetv_init),
+ (gst_edgetv_setup), (gst_edgetv_rgb32):
+ * gst/effectv/gsteffectv.c:
+ * gst/effectv/gstquark.c: (gst_quarktv_link), (gst_quarktv_init),
+ (gst_quarktv_set_property):
+ * gst/effectv/gstrev.c: (gst_revtv_get_type),
+ (gst_revtv_base_init), (gst_revtv_class_init), (gst_revtv_init),
+ (gst_revtv_setup), (gst_revtv_rgb32):
+ * gst/effectv/gstshagadelic.c: (gst_shagadelictv_get_type),
+ (gst_shagadelictv_base_init), (gst_shagadelictv_class_init),
+ (gst_shagadelictv_init), (gst_shagadelictv_setup),
+ (gst_shagadelictv_rgb32):
+ * gst/effectv/gstvertigo.c: (gst_vertigotv_get_type),
+ (gst_vertigotv_base_init), (gst_vertigotv_class_init),
+ (gst_vertigotv_setup), (gst_vertigotv_init), (gst_vertigotv_rgb32):
+ * gst/effectv/gstwarp.c:
+ Port everything that can be ported to videofilter and fix up the caps.
+ Can someone with a big-endian machine please check these?
+
+2004-03-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_get_time),
+ (gst_osssink_chain), (gst_osssink_change_state):
+ Latest fixes for A/V sync, audio playback and such. This is about
+ all... MPEG playback issues are mostly related to the async build-
+ up of MPEG files, I cannot fix that. Use basicgthread to solve it.
+
+2004-03-10 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ patch from: Stephane Loeuillet
+
+ * configure.ac:
+ use pkg-config for some libraries, falling back to the old .m4 way
+ (fixes #131270)
+ * m4/libdv.m4:
+ removed
+
+2004-03-10 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * tools/Makefile.am:
+ * tools/Makefile.in:
+ * tools/gst-launch-ext-m.m:
+ * tools/gst-launch-ext.1.in:
+ * tools/gst-visualise-m.m:
+ * tools/gst-visualise.1:
+ * tools/gst-visualise.1.in:
+ reorganizing generation of script tools
+
+2004-03-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c:
+ Downgrade priority. We prefer ffdec_mpeg4.
+ * ext/faad/gstfaad.c: (gst_faad_srcgetcaps), (gst_faad_srcconnect),
+ (gst_faad_chain), (gst_faad_change_state):
+ Fix capsnego. Doesn't work for some sounds because we don't have
+ a 5:1 to stereo element.
+ * ext/xvid/gstxvid.c: (plugin_init):
+ Add priority.
+ * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+ (gst_osssink_change_state):
+ Add discont handling.
+
+2004-03-09 Colin Walters <walters@verbum.org>
+
+ * gst/audioconvert/gstaudioconvert.c: Fix typo in width 8
+ conversion.
+
+2004-03-09 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
+ the signals take 2 arguments
+
+2004-03-09 David Schleef <ds@schleef.org>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad),
+ (gst_alsa_fixate): Add fixate function. (bug #136686)
+ * ext/alsa/gstalsa.h:
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_init):
+
+2004-03-09 Benjamin Otte <otte@gnome.org>
+
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_init), (gst_mikmod_loop),
+ (gst_mikmod_change_state):
+ * ext/mikmod/gstmikmod.h:
+ make mikmod's loop function not loop infinitely and call
+ gst_element_yield anymore
+ * gst/modplug/gstmodplug.cc:
+ fix pad negotiation (fixes #136590)
+
+2004-03-09 David Schleef <ds@schleef.org>
+
+ * ext/lcs/Makefile.am: Fix so that the lcs colorspace plugin
+ doesn't conflict with the internal colorspace plugin.
+ * gst-libs/gst/audio/make_filter: Use `` instead of $() to
+ satisfy the crappy-ass shell shipped by a certain vendor.
+ * gst/videofilter/make_filter: same (bug #135299)
+
+2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: bump nano to 1
+
+=== release 0.7.6 ===
+
+2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.in: releasing 0.7.6, "There"
+
+2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * pkgconfig/gstreamer-play-uninstalled.pc.in:
+ * pkgconfig/gstreamer-play.pc.in:
+ synchronize the two
+
+2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_base_init),
+ (cdparanoia_open), (cdparanoia_event):
+ fix/add error handling
+ * po/POTFILES.in:
+ add cdparanoia source
+ * tools/Makefile.am:
+ make scripts executable
+
+2004-03-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/vorbis/Makefile.am:
+ * sys/Makefile.am:
+ remove id3types, vorbisfile and xvideosink from the build (#133783)
+
+2004-03-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+ Fix metadata read crash (#136537).
+
+2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
+ * gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
+ adding mime types, fixing the one-stop function
+
+2004-03-08 Christian Schaller <Uraeus@gnome.org>
+
+ * ext/nas/nassink.c and /ext/nas/nassink.h:
+ More NAS love from Arwed von Merkatz
+ So lets all sing 'Can you feel the NAS tonight'
+
+2004-03-08 Christian Schaller <Uraeus@gnome.org>
+
+ * tools/gst-launch-ext.in:
+ Replace vorbisfile with oggdemux/vorbisdec/audioconvert
+
+2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+ (gst_mpeg2dec_init):
+ remove the user_data pad for now, because it is being used in
+ fixating causing MPEG playback to fixate on 1000 Hz for playback.
+ If someone knows how to fix this properly, please do.
+
+2004-03-08 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+ (gst_osssink_get_time):
+ add a warning, IMO this won't get triggered anymore, remove later
+
+2004-03-07 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (qtdemux_video_caps): Added Cinepak
+ format (bug #136470)
+
+2004-03-07 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/Makefile.am:
+ * gst-libs/gst/media-info/Makefile.am:
+ * gst-libs/gst/media-info/media-info-priv.c: (found_tag_callback),
+ (error_callback), (gst_media_info_error_create),
+ (gst_media_info_error_element), (gmip_init), (gmip_reset),
+ (gmi_clear_decoder), (gmip_find_type_pre), (gmip_find_type):
+ * gst-libs/gst/media-info/media-info-priv.h:
+ * gst-libs/gst/media-info/media-info-test.c: (main):
+ * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
+ (gst_media_info_class_init), (gst_media_info_instance_init),
+ (gst_media_info_set_source), (gst_media_info_read_with_idler),
+ (gst_media_info_read_idler), (gst_media_info_read):
+ * gst-libs/gst/media-info/media-info.h:
+ fixed, should work now
+
+2004-03-07 Christian Schaller <Uraeus@gnome.org>
+
+ * ext/nas/nassink.c:
+ A bunch of NAS fixes from Arwed von Merkatz
+
+2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
+ (qtdemux_parse_trak):
+ Fix crash (j might be greater than n_samples, in which case we're
+ writing outside the allocated space for the array) and memleak.
+
+2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosssink.c: (gst_osssink_chain):
+ And another caller that couldn't handle delay < 0 (unsigned
+ integer overflow). Video now continues playing on an audio
+ buffer underrun, and the clock continues working. Audio still
+ stalls.
+
+2004-03-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+ (gst_osssink_get_time):
+ get_delay() may return values lower than 0. In those cases, we
+ should not actually cast to *unsigned* int64, that will break
+ stuff horribly. In my case, it screwed up A/V sync in movies
+ in totem rather badly.
+
+2004-03-06 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/faac/gstfaac.c: (gst_faac_chain):
+ * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+ * ext/libpng/gstpngenc.c: (user_write_data):
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+ * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
+ Fix several misuse of gst_buffer_merge (it doesn't take ownership
+ of any buffer), should fix some leaks. I hope I didn't unref buffers
+ that shouldn't be...
+
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
+ (deep_notify_callback), (tag_flag_score), (found_tag_callback),
+ (error_callback), (gmi_reset), (gmi_seek_to_track),
+ (gmi_get_decoder), (gmi_set_mime), (gmip_find_type_pre),
+ (gmip_find_type_post), (gmip_find_stream_post),
+ (gmip_find_track_streaminfo_post):
+ * gst-libs/gst/media-info/media-info-priv.h:
+ * gst-libs/gst/media-info/media-info-test.c: (print_tag),
+ (info_print), (main):
+ * gst-libs/gst/media-info/media-info.c:
+ (gst_media_info_error_create), (gst_media_info_error_element),
+ (gst_media_info_instance_init), (gst_media_info_get_property),
+ (gst_media_info_new), (gst_media_info_set_source),
+ (gst_media_info_read_idler), (gst_media_info_read):
+ * gst-libs/gst/media-info/media-info.h:
+ first pass at making this work again. This seems to work on
+ tagged ogg/vorbis and mp3 files.
+
+2004-03-06 Benjamin Otte <otte@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ fix huge leak: gst_buffer_merge doesn't unref the first argument
+ itself.
+
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_update_info):
+ report layer/mode/emphasis
+
+2004-03-06 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/mad/gstmad.c: (gst_mad_chain): fixed caps leak
+
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
+ signal serial
+
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbis.c: (plugin_init):
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+ (gst_vorbis_dec_init), (vorbis_dec_event):
+ add debug category
+ make vorbisdec handle _BYTE and _TIME queries
+
+2004-03-06 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/mad/gstmad.c: (gst_mad_chain): send the average bitrate read
+ from the xing header
+
+2004-03-06 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps),
+ (gst_audio_convert_link), (gst_audio_convert_change_state),
+ (gst_audio_convert_buffer_from_default_format):
+ do conversions from/to float correctly, fix some caps nego errors,
+ export correct supported caps in template and getcaps, use correct
+ caps in try_set_caps functions
+
+2004-03-06 Christophe Fergeau <teuf@gnome.org>
+
+ For some reason, I only committed a ChangeLog entry yesterday and
+ not the corresponding code...
+ * ext/mad/gstmad.c: Fix detection of Xing headers
+ * gst/tags/gstid3tag.c: Changes to support TLEN tags
+
+2004-03-06 Benjamin Otte <otte@gnome.org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_get_pad_by_pad),
+ (gst_ogg_demux_src_query):
+ make sure to handle the case where there's no current chain
+ gracefully.
+
+2004-03-05 David Schleef <ds@schleef.org>
+
+ * ext/aalib/gstaasink.c: (gst_aasink_fixate), (gst_aasink_init):
+ Add fixate function. (bug #131128)
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
+ (gst_sdlvideosink_fixate): Add fixate function.
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ Fix attempt to print a non-pointer using GST_PTR_FORMAT.
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt):
+ Fix missing break that was causing ulaw to be interpreted as
+ raw int.
+
+2004-03-05 David Schleef <ds@schleef.org>
+
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
+ Fix code that ignores return value of gst_buffer_merge().
+ (bug #114560)
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_segment):
+ * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice): same
+ * testsuite/gst-lint: Check for above.
+
+2004-03-05 David Schleef <ds@schleef.org>
+
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Check for unfixed
+ caps and throw an element error. (bug #136334)
+
+2004-03-05 David Schleef <ds@schleef.org>
+
+ * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
+ (gst_faad_chain): Fix negotiation.
+ * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
+ key and button events.
+ * gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
+ dung heap of code.
+ * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
+ depends on gconf
+ * gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+ (gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
+ function to encourage better negotiation, particularly between
+ audioconvert and osssink.
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
+ * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak): Make some debugging
+ more important.
+ * gst/typefind/gsttypefindfunctions.c: Fix mistake in flash
+ typefinding.
+ * gst/vbidec/vbiscreen.c: Add glib header
+ * pkgconfig/gstreamer-play.pc.in: Depends on gst-interfaces.
+
+2004-03-06 Christophe Fergeau <teuf@users.sourceforge.net>
+
+ * ext/mad/gstmad.c: Fix detection of Xing headers
+ * gst/tags/gstid3tag.c: Changes to support TLEN tags
+
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+ (gst_wavparse_pad_convert), (gst_wavparse_pad_query):
+ debug updates
+
+2004-03-06 Christophe Fergeau <teuf@gnome.org>
+
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ * ext/mad/gstmad.c: (gst_mad_init), (is_xhead),
+ (mpg123_parse_xing_header), (gst_mad_chain): parse Xing header in vbr
+ files, and report the parsed length as a GST_TAG_DURATION tag.
+ * gst/tags/gstid3tag.c: support TLEN (duration) tag
+
+2004-03-05 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_channels):
+ convert channels correctly. convert correctly to unsigned.
+
+2004-03-05 Julien MOUTTE <julien@moutte.net>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state): Check if
+ we have a window before clearing it.
+
+2004-03-05 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_change_state): Check if we
+ have a window before clearing it.
+
+2004-03-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gconf/gstreamer.schemas.in:
+ * gst-libs/gst/gconf/Makefile.am:
+ version installation path the same way as for 0.6
+ * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+ * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+ * pkgconfig/gstreamer-play-uninstalled.pc.in:
+ remove comment that was fixed
+
+2004-03-05 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_formats),
+ (gst_qtdemux_src_convert), (gst_qtdemux_get_src_query_types),
+ (gst_qtdemux_get_event_mask), (gst_qtdemux_handle_src_query),
+ (gst_qtdemux_handle_src_event), (gst_qtdemux_add_stream):
+ Add prototype code for handling seeking and querying.
+
+2004-03-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * examples/gstplay/player.c: (main):
+ Initialize variables to NULL. Prevents a segfault because the
+ (uninitialized) variable is not NULL, resulting in a crash on
+ trying to reach error->message.
+
+2004-03-05 Benjamin Otte <otte@gnome.org>
+
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_buffer_to_default_format):
+ make float=>int conversion work correctly even in cornercases.
+
+2004-03-04 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * debian/README.Debian:
+ * debian/build-deps:
+ * debian/changelog:
+ * debian/control:
+ * debian/control.in:
+ * debian/copyright:
+ * debian/gstreamer-a52dec.files:
+ * debian/gstreamer-aa.files:
+ * debian/gstreamer-alsa.files:
+ * debian/gstreamer-alsa.manpages:
+ * debian/gstreamer-arts.files:
+ * debian/gstreamer-artsd.files:
+ * debian/gstreamer-audiofile.files:
+ * debian/gstreamer-avifile.files:
+ * debian/gstreamer-cdparanoia.files:
+ * debian/gstreamer-colorspace.files:
+ * debian/gstreamer-doc.files:
+ * debian/gstreamer-dv.files:
+ * debian/gstreamer-dvd.files:
+ * debian/gstreamer-esd.files:
+ * debian/gstreamer-festival.files:
+ * debian/gstreamer-flac.files:
+ * debian/gstreamer-gconf.conffiles:
+ * debian/gstreamer-gconf.files:
+ * debian/gstreamer-gconf.postinst:
+ * debian/gstreamer-gnomevfs.files:
+ * debian/gstreamer-gsm.files:
+ * debian/gstreamer-http.files:
+ * debian/gstreamer-jack.files:
+ * debian/gstreamer-jpeg.files:
+ * debian/gstreamer-mad.files:
+ * debian/gstreamer-mikmod.files:
+ * debian/gstreamer-misc.files:
+ * debian/gstreamer-mpeg2dec.files:
+ * debian/gstreamer-oss.files:
+ * debian/gstreamer-plugin-apps.files:
+ * debian/gstreamer-plugin-apps.manpages:
+ * debian/gstreamer-plugin-libs-dev.files:
+ * debian/gstreamer-plugin-libs.files:
+ * debian/gstreamer-plugin-template.postinst:
+ * debian/gstreamer-plugin-template.postrm:
+ * debian/gstreamer-sdl.files:
+ * debian/gstreamer-sid.files:
+ * debian/gstreamer-vorbis.files:
+ * debian/gstreamer-x.files:
+ * debian/mk.control:
+ * debian/rules:
+ Debian package info not maintained here.
+
+2004-03-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/aalib/gstaasink.c: (gst_aasink_class_init):
+ * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init):
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init):
+ * ext/divx/gstdivxenc.c: (gst_divxenc_class_init):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init):
+ * ext/gsm/gstgsmenc.c: (gst_gsmenc_class_init):
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init):
+ * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init):
+ * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
+ * ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init):
+ * gst-libs/gst/colorbalance/colorbalance.c:
+ (gst_color_balance_class_init):
+ * gst-libs/gst/colorbalance/colorbalancechannel.c:
+ (gst_color_balance_channel_class_init):
+ * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
+ * gst-libs/gst/play/play.c: (gst_play_class_init):
+ * gst-libs/gst/propertyprobe/propertyprobe.c:
+ (gst_property_probe_iface_init):
+ * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init):
+ * gst-libs/gst/tuner/tunerchannel.c:
+ (gst_tuner_channel_class_init):
+ * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init):
+ * gst/cutter/gstcutter.c: (gst_cutter_class_init):
+ * gst/effectv/gstvertigo.c: (gst_vertigotv_class_init):
+ * sys/cdrom/gstcdplayer.c: (cdplayer_class_init):
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_class_init):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_class_init):
+ fix signals to use - instead of _
+ * ext/libcaca/gstcacasink.h:
+ * ext/sdl/sdlvideosink.h:
+ fix header rename
+
+2004-03-04 David Schleef <ds@schleef.org>
+
+ * testsuite/gst-lint: Add a check for bad signal names.
+
+2004-03-04 <kost@imn.htwk-leipzig.de>
+
+ reviewed by David Schleef
+
+ * gst/videofilter/gstgamma.c: (gst_gamma_rgb32): Fix typo that
+ modified the alpha channel and caused a warning. (bug #136192)
+
+2004-04-03 Christian Schaller <Uraeus@gnome.org>
+
+ * gst-plugins.spec.in:
+ Change names of plugins to actually be correct. Try to keep things
+ alphabetical to avoid getting beat up by Thomas
+
+2004-03-03 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_default_video_sink):
+ Using ximagesink as a default if no gconf key found. We should
+ probably consider using alsasink instead of osssink for the audio
+ part.
+
+2004-03-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ fix --with-plugins, don't think it ever worked before
+ * gst-plugins.spec.in:
+ even more updates
+
+2004-03-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/sdl/sdlvideosink.h:
+ * sys/ximage/ximagesink.h:
+ * sys/xvideo/xvideosink.h:
+ * sys/xvimage/xvimagesink.h:
+ Fix for move of gstvideosink.h -> videosink.h.
+
+2004-03-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/xwindowlistener/Makefile.am:
+ this is a plugin library, not a library
+
+2004-03-01 David Schleef <ds@schleef.org>
+
+ * AUTHORS: Added some names. Add yourself if you're still
+ missing.
+
+2004-03-01 David Schleef <ds@schleef.org>
+
+ * MAINTAINERS: Add
+
+2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-plugins.spec.in: clean up spec file
+
+2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/video/Makefile.am:
+ * gst-libs/gst/video/gstvideosink.c:
+ * gst-libs/gst/video/gstvideosink.h:
+ rename gstvideosink.h to videosink.h to match other headers
+ * gst/mixmatrix/Makefile.am:
+ fix plugin filename
+ * gst/tags/Makefile.am: fix plugin filename
+
+2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/tags/Makefile.am: fix plugin filename
+
+2004-03-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * examples/gstplay/player.c: (got_time_tick), (main):
+ add error handler
+ display time_tick more readably
+ * gst/mixmatrix/Makefile.am:
+ fix plugin file name
+
+2004-02-29 Christophe Fergeau <teuf@gnome.org>
+
+ * sys/oss/gstosselement.c: (gst_osselement_probe),
+ (device_combination_append), (gst_osselement_class_probe_devices):
+ * sys/oss/gstosselement.h:
+ Reworked enumeration of oss dsps and mixers so that gst-mixer works
+ on my system using alsa oss emulation, fixes bug #135597
+
+2004-02-29 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videodrop/gstvideodrop.c: (gst_videodrop_init),
+ (gst_videodrop_chain), (gst_videodrop_change_state):
+ * gst/videodrop/gstvideodrop.h:
+ Work based on timestamp of input data, not based on the expected
+ framerate from the input. The consequence is that this element now
+ not only scales framerates, but also functions as a framerate
+ corrector or framerate stabilizer/constantizer.
+
+2004-02-27 David Schleef <ds@schleef.org>
+
+ patches from jmmv@menta.net (Julio M. Merino Vidal)
+
+ * gst/interleave/deinterleave.c: (deinterleave_chain): Fix
+ GST_ELEMENT_ERROR call (bug #135634)
+ * gst/interleave/interleave.c: (interleave_buffered_loop),
+ (interleave_bytestream_loop): Don't use alloca() (bug #135640)
+ * sys/cdrom/gstcdplayer_ioctl_bsd.h: Fix ioctls on NetBSD (bug #135645)
+ * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+ (gst_osssink_chain): Fix ioctls on NetBSD. (bug #135644)
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_sync_next_frame),
+ (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
+ (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_requeue_frame):
+ Fix GST_ELEMENT_ERROR call.
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_palette): Fix
+ GST_ELEMENT_ERROR call.
+
+2004-02-27 Benjamin Otte <otte@gnome.org>
+
+ * gst-libs/gst/audio/audio.h:
+ add macro to make sure header isn't included twice
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+ don't use gst_buffer_free
+ * gst/playondemand/filter.func:
+ don't use gst_data_free. Free data only once.
+
+2004-02-26 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/tuner/Makefile.am:
+ * gst/level/Makefile.am: -marshal.[ch] and -enum.[ch] files
+ should not be disted, -marshal.h files should not be installed,
+ and -enum.h files _should_ be installed. Fix to make this the
+ case.
+
+=== release 0.7.5 ===
+
+2004-02-26 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: release 0.7.5, "Under The Sea"
+
+2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+ (gst_audio_convert_change_state), (gst_audio_convert_get_buffer):
+ * gst/videoscale/gstvideoscale.c:
+ * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+ assorted debug/warning fixes
+
+2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
+ (gst_videoscale_init), (gst_videoscale_chain),
+ (gst_videoscale_set_property), (plugin_init):
+ * gst/videoscale/gstvideoscale.h:
+ * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+ (gst_videoscale_scale_rgb), (gst_videoscale_planar411),
+ (gst_videoscale_planar400), (gst_videoscale_packed422),
+ (gst_videoscale_packed422rev), (gst_videoscale_32bit),
+ (gst_videoscale_24bit), (gst_videoscale_16bit),
+ (gst_videoscale_bilinear), (gst_videoscale_bicubic),
+ (gst_videoscale_scale_plane_slow),
+ (gst_videoscale_scale_point_sample),
+ (gst_videoscale_scale_nearest),
+ (gst_videoscale_scale_nearest_str2),
+ (gst_videoscale_scale_nearest_str4),
+ (gst_videoscale_scale_nearest_32bit),
+ (gst_videoscale_scale_nearest_24bit),
+ (gst_videoscale_scale_nearest_16bit):
+ add debugging category and use it properly
+ fix use of GST_PTR_FORMAT
+
+2004-02-25 Andy Wingo <wingo@pobox.com>
+
+ * gst/interleave/interleave.c (interleave_buffered_loop): Always
+ push only when channel->buffer is NULL. Prevents segfaults doing
+ the state change after a nonlocal exit, like a scheme exception.
+
+ * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_getcaps):
+ Handle the case where the intersected caps is empty.
+
+2004-02-25 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/law/mulaw-decode.c: (mulawdec_link):
+ * gst/law/mulaw.c: (plugin_init):
+ fix mulawdec so it actually works again
+
+2004-02-24 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ reviewed by: David Schleef <ds@schleef.org>
+
+ * gst/videofilter/gstgamma.c: (gst_gamma_class_init),
+ (gst_gamma_init), (gst_gamma_set_property),
+ (gst_gamma_get_property), (gst_gamma_calculate_tables),
+ (gst_gamma_rgb24), (gst_gamma_rgb32): Adds gamma correction
+ for RGB, with separate r g and b correction factors. (#131167)
+
+2004-02-24 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+ only signal tags for bitrate if they're > 0 (#134894)
+
+2004-02-24 David Schleef <ds@schleef.org>
+
+ * gst/qtdemux/qtdemux.c: (plugin_init), (gst_qtdemux_loop_header),
+ (qtdemux_parse_moov), (qtdemux_parse), (qtdemux_node_dump_foreach),
+ (qtdemux_dump_mvhd), (qtdemux_dump_tkhd), (qtdemux_dump_elst),
+ (qtdemux_dump_mdhd), (qtdemux_dump_hdlr), (qtdemux_dump_vmhd),
+ (qtdemux_dump_dref), (qtdemux_dump_stsd), (qtdemux_dump_stts),
+ (qtdemux_dump_stss), (qtdemux_dump_stsc), (qtdemux_dump_stsz),
+ (qtdemux_dump_stco), (qtdemux_dump_co64), (qtdemux_dump_dcom),
+ (qtdemux_dump_cmvd), (qtdemux_parse_tree), (qtdemux_parse_trak):
+ Cleanups. Convert g_prints to GST_LOGs. Add qtdemux debug
+ category. Attempt to fix timestamp calculation.
+
+2004-02-24 Johan Dahlin <johan@gnome.org>
+
+ * gst-libs/gst/gconf/gconf.c: Add \n to g_print error messages
+
+2004-02-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * gconf/Makefile.am:
+ * gconf/gstreamer.schemas:
+ * gst-libs/gst/gconf/Makefile.am:
+ * gst-libs/gst/gconf/gconf.c:
+ version gconf schemas and install locations
+
+2004-02-23 Benjamin Otte <otte@gnome.org>
+
+ * ext/xine/xineinput.c: (gst_xine_input_dispose):
+ (gst_xine_input_subclass_init):
+ call parent dispose.
+ change pad template for CD reader correctly
+ * ext/xine/Makefile.am:
+ * ext/xine/gstxine.h:
+ * ext/xine/xine.c: (plugin_init):
+ * ext/xine/xineaudiosink.c:
+ wrap audio sinks, too
+ * gst-libs/gst/resample/private.h:
+ * gst-libs/gst/resample/resample.c: (gst_resample_init),
+ (gst_resample_reinit), (gst_resample_scale),
+ (gst_resample_nearest_s16), (gst_resample_bilinear_s16),
+ (gst_resample_sinc_slow_s16), (gst_resample_sinc_s16),
+ (gst_resample_sinc_ft_s16), (gst_resample_nearest_float),
+ (gst_resample_bilinear_float), (gst_resample_sinc_slow_float),
+ (gst_resample_sinc_float), (gst_resample_sinc_ft_float):
+ * gst-libs/gst/resample/resample.h:
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
+ (gst_audioscale_class_init), (gst_audioscale_link),
+ (gst_audioscale_get_buffer), (gst_audioscale_init),
+ (gst_audioscale_chain), (gst_audioscale_set_property),
+ (gst_audioscale_get_property):
+ * gst/audioscale/gstaudioscale.h:
+ s/resample_*/gst_resample_*/i to not clobber namespaces
+
+2004-02-23 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+ (gst_riff_create_audio_caps), (gst_riff_create_iavs_caps),
+ (gst_riff_create_video_template_caps),
+ (gst_riff_create_audio_template_caps),
+ (gst_riff_create_iavs_template_caps):
+ * gst-libs/gst/riff/riff-media.h:
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+ (gst_asf_demux_audio_caps), (gst_asf_demux_add_audio_stream),
+ (gst_asf_demux_video_caps), (gst_asf_demux_add_video_stream):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
+ (gst_matroska_demux_video_caps), (gst_matroska_demux_audio_caps),
+ (gst_matroska_demux_plugin_init): First batch implementing audio and
+ video codec tags in demuxers.
+
+2004-02-22 Benjamin Otte <otte@gnome.org>
+
+ * ext/xine/Makefile.am:
+ * ext/xine/gstxine.h:
+ * ext/xine/xine.c: (plugin_init):
+ * ext/xine/xineinput.c:
+ add input plugin wrapper. Playback from files, http, mms and cdda
+ works.
+ * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
+ remove leftover G_GNUC_UNUSED
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream),
+ (gst_asf_demux_identify_guid):
+ improve debugging output
+
+2004-02-22 Benjamin Otte <otte@gnome.org>
+
+ reported by: Padraig O'Briain <padraig.obriain@sun.com>
+
+ * autogen.sh:
+ replace test -e with test -x for mkinstalldirs to be more portable.
+ (fixes #134816)
+
+2004-02-22 Benjamin Otte <otte@gnome.org>
+
+ reported by: Stefan Kost <kost@imn.htwk-leipzig.de>
+
+ * gst/audioconvert/gstaudioconvert.c: (plugin_init):
+ set rank to PRIMARY
+ * gst/volume/gstvolume.c: (plugin_init):
+ set rank to NONE
+ fixes #134960
+
+2004-02-22 Julio M. Merino Vidal <jmmv@menta.net>
+
+ reviewed by Benjamin Otte <otte@gnome.org>
+
+ * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+ escape NULL strings in GST_ELEMENT_ERROR properly (fixes #135116)
+
+2004-02-22 Benjamin Otte <otte@gnome.org>
+
+ * configure.ac:
+ export [_]*{gst,Gst,GST}.* symbols from plugins
+
+2004-02-22 Christophe Fergeau <teuf@gnome.org>
+
+ reviewed by: Benjamin Otte <otte@gnome.org>
+
+ * ext/lame/gstlame.c: (add_one_tag):
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
+ (gst_vorbisenc_metadata_set1):
+ * gst/tags/gstid3tag.c:
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
+ apply fixes from bugs #135042 (lame can't write tags) and #133817
+ (add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)
+
+2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
+
+ * configure.ac: Export only gst_plugin_desc from plugins.
+ Note that this change only makes any effect with Linux using libtool
+ 1.5.2 or higher. Otherwise it is silently ignored, but it would build
+ fine. And don't try to have several versions of libtool in different
+ directories.
+
+2004-02-20 Andy Wingo <wingo@pobox.com>
+
+ * gst/intfloat/, gst/oneton: Removed, replaced by audioconvert and
+ interleave respectively.
+
+ * gst/interleave/deinterleave.c: New plugin: deinterleave
+ (replaces on oneton).
+ * gst/interleave/interleave.c: New plugin: interleave.
+ * gst/interleave/plugin.h: Support file.
+ * gst/interleave/plugin.c: Support file.
+
+ * configure.ac: Remove intfloat and oneton, add interleave.
+
+ * ext/sndfile/gstsf.c: Handle events better.
+
+ * gst/audioconvert/gstaudioconvert.c: Change to support int2float
+ and float2int operation. int2float has scheduling problems as
+ noted in in2float_chain.
+
+2004-02-20 Benjamin Otte <otte@gnome.org>
+
+ * ext/xine/Makefile.am:
+ * ext/xine/gstxine.h:
+ * ext/xine/xine.c:
+ * ext/xine/xineaudiodec.c:
+ * ext/xine/xinecaps.c:
+ add first version of xine plugin wrapper. Currently only wraps the
+ QDM2 win32 DLL, and even that only in proof-of-concept quality.
+ * configure.ac:
+ * ext/Makefile.am:
+ add xine plugin wrapper, disabled by default. Use --enable-xine to
+ build. Note that it'll segfault on gst-register if you don't remove
+ the goom and tvtime post plugins from xine.
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+ (qtdemux_parse), (qtdemux_parse_trak), (qtdemux_audio_caps):
+ add extradata parsing for QDM2.
+ change around debugging prints.
+
+2004-02-19 Benjamin Otte <otte@gnome.org>
+
+ * ext/lame/gstlame.c: (gst_lame_chain):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+ use gst_tag_list_insert when you want to insert tags
+
+2004-02-18 David Schleef <ds@schleef.org>
+
+ * configure.ac: Move massink to gst-rotten
+ * ext/Makefile.am:
+ * ext/mas/Makefile.am:
+ * ext/mas/massink.c:
+ * ext/mas/massink.h:
+
+2004-02-18 David Schleef <ds@schleef.org>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init): Disable gdk_pixbuf
+ typefinding, since it seems to be worse than nothing.
+ * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Add ftyp
+ atom to recognize .mp4 and .m4a files as video/quicktime.
+
+2004-02-18 David Schleef <ds@schleef.org>
+
+ * gst/sine/demo-dparams.c: (quit_live),
+ (dynparm_log_value_changed), (dynparm_value_changed), (main):
+ Use double dparams, not float.
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+ (gst_sinesrc_init): Change sync default to FALSE, since multiple
+ sync'd elements don't really work correctly.
+ * gst/volume/gstvolume.c: (volume_class_init), (volume_init),
+ (volume_update_volume), (volume_get_property): Change dparam
+ to double.
+
+2004-02-18 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c:
+ (gst_ximagesink_xwindow_update_geometry),
+ (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_change_state), (gst_ximagesink_expose),
+ (gst_ximagesink_init): Rework the way software video scaling works. So
+ now we check on each chain call if the video frames are feeling the
+ window. If not we try to renegotiate caps. On failure we memorize that
+ and we won't try again for that PLAYING sessions.
+ * sys/ximage/ximagesink.h: Adding a boolean to store the caps renego
+ failure.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): initialize the
+ synchronous flag.
+
+2004-02-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
+ break up _link so we can give a better debug message for errors
+
+2004-02-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+ set up debug category
+
+2004-02-18 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_handle_xevents), (gst_ximagesink_expose): Reorganizing
+ the way renegotiation work. The event handling function is not taking
+ care of external windows and renegotiate method check for pad flags
+ NEGOTIATING. Should fix : #133209
+
+2004-02-17 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_expose): Checking if the
+ pad is negotiating before trying renegotiation.
+
+2004-02-17 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
+ pass on all possible mime types as typefind hints
+
+2004-02-17 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new): Fix a
+ possible SHM leak if we crash. All other apps using XShm are doing
+ that.
+
+2004-02-17 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_expose): Renegotiate size on expose.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_expose): Update window
+ size on expose.
+
+2004-02-16 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * testsuite/alsa/sinesrc.c:
+ cosmetic fix to fix compile issue with gcc 2.95.4
+
+2004-02-16 Julien MOUTTE <julien@moutte.net>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+ (gst_alsa_timestamp_to_bytes): Alsa should trigger an error if it
+ failed opening the audio device.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+ (gst_ximagesink_ximage_destroy), (gst_ximagesink_ximage_put),
+ (gst_ximagesink_xwindow_new), (gst_ximagesink_xwindow_destroy),
+ (gst_ximagesink_xwindow_resize), (gst_ximagesink_xwindow_clear),
+ (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_xcontext_get), (gst_ximagesink_xcontext_clear),
+ (gst_ximagesink_change_state), (gst_ximagesink_chain),
+ (gst_ximagesink_set_xwindow_id): Clearing window in READY TO PAUSED.
+ Removing some useless g_return_if_fail like wingo suggested.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+ (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xvimage_put),
+ (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
+ (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_xwindow_clear),
+ (gst_xvimagesink_update_colorbalance),
+ (gst_xvimagesink_handle_xevents), (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_xcontext_clear),
+ (gst_xvimagesink_get_fourcc_from_caps),
+ (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
+ (gst_xvimagesink_set_xwindow_id),
+ (gst_xvimagesink_colorbalance_list_channels),
+ (gst_xvimagesink_colorbalance_set_value),
+ (gst_xvimagesink_colorbalance_get_value): Clearing window in READY TO
+ PAUSED. Removing some useless g_return_if_fail like wingo suggested.
+
+2004-02-16 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
+ throw error when not negotiated instead of asserting
+
+2004-02-15 Julien MOUTTE <julien@moutte.net>
+
+ * gst/switch/gstswitch.c: (gst_switch_loop): More fixes for
+ correct data refcounting.
+
+2004-02-15 Julien MOUTTE <julien@moutte.net>
+
+ * gst/switch/gstswitch.c: (gst_switch_change_state),
+ (gst_switch_class_init): Cleaning the sinkpads correctly on state
+ change, mostly the EOS flag.
+
+2004-02-15 Julien MOUTTE <julien@moutte.net>
+
+ * examples/gstplay/player.c: (got_eos), (main): Adding some
+ output for debugging.
+ * gst-libs/gst/play/play.c: (gst_play_state_change): Stop our
+ timeouts if we go to any state different from PLAYING.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek): Fix some
+ more EOS bugs in riff lib.
+
+2004-02-14 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/play.c: (gst_play_connect_visualization): Disable
+ visualization until i find a way to fix switch correctly.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head): Fix a bug when
+ EOS arrives.
+ * gst/switch/gstswitch.c: (gst_switch_release_pad),
+ (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
+ (gst_switch_loop), (gst_switch_dispose), (gst_switch_class_init):
+ Reworked switch to get a more correct behaviour with events and refing
+ of data stored in sinkpads.
+ * gst/switch/gstswitch.h: Adding an eos flag for every sinkpad so that
+ we don't pull from a pad in EOS.
+
+2004-02-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ remove v1 tag even if we can't read it (makes sure we don't detect
+ it again)
+
+2004-02-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait),
+ (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsa.h:
+ try xrun recovery when wait failed. Make xrun recovery function
+ return TRUE/FALSE to indicate success. (might fix #134354)
+
+2004-02-13 David Schleef <ds@schleef.org>
+
+ * gst/sine/demo-dparams.c: (dynparm_log_value_changed),
+ (dynparm_value_changed), (main): Convert from float to double.
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_init): same.
+
+2004-02-13 David Schleef <ds@schleef.org>
+
+ * gst/silence/gstsilence.c: (gst_silence_class_init),
+ (gst_silence_set_clock), (gst_silence_get),
+ (gst_silence_set_property), (gst_silence_get_property):
+ * gst/silence/gstsilence.h: Add sync property.
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+ (gst_sinesrc_init), (gst_sinesrc_set_clock), (gst_sinesrc_get),
+ (gst_sinesrc_set_property), (gst_sinesrc_get_property):
+ * gst/sine/gstsinesrc.h: Add sync property.
+
+2004-02-13 David Schleef <ds@schleef.org>
+
+ * gst/intfloat/gstint2float.c: (conv_f32_s16),
+ (gst_int2float_chain_gint16): Change stdint usage to glib types.
+
+2004-02-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * gst-libs/ext/Makefile.am:
+ move ffmpeg plugin to gst-ffmpeg module
+
+2004-02-13 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac: use GST_ARCH to detect architecture
+
+2004-02-12 Julien MOUTTE <julien@moutte.net>
+
+ * gst/vbidec/vbiscreen.c: Fixing thomasvs fixes. Missing header.
+
+2004-02-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
+ classify LADSPA plugins based on number of src/sink pads
+ (#133663, Stefan Kost)
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_init):
+ fix dparams registration
+ (#133528, Stefan Kost)
+ * gst/vbidec/vbiscreen.c: (vbiscreen_set_current_cell):
+ fix use of isprint and use g_ascii_isprint instead
+ (#133316, Stefan Kost)
+
+2004-02-11 David Schleef <ds@schleef.org>
+
+ Convert a few inner loops to use liboil. This is currently
+ optional, and is only enabled if liboil is present (duh!).
+ * configure.ac: Check for liboil-0.1
+ * gst/intfloat/Makefile.am:
+ * gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
+ (gst_int2float_chain_gint16):
+ * gst/videofilter/Makefile.am:
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
+ (tablelookup_u8), (gst_videobalance_planar411):
+ * gst/videotestsrc/Makefile.am:
+ * gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
+ * gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
+ (paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
+ (paint_hline_RGB565), (paint_hline_xRGB1555):
+
+2004-02-11 David Schleef <ds@schleef.org>
+
+ * ext/lcs/gstcolorspace.c: (colorspace_find_lcs_format),
+ (gst_colorspace_caps_get_fourcc), (colorspace_setup_converter),
+ (gst_colorspace_getcaps), (gst_colorspace_link),
+ (gst_colorspace_base_init), (gst_colorspace_init),
+ (gst_colorspace_chain), (gst_colorspace_change_state),
+ (plugin_init): Merge Ronald's patch (bug #117897) and update
+ for new caps and negotiation. Seems to work, although it
+ shows off bugs in lcs.
+
+2004-02-11 David Schleef <ds@schleef.org>
+
+ * ext/alsa/Makefile.am: Fix linking against libgstinterfaces.
+ (bug #133886) Noticed by bugs@leroutier.net (Stephane LOEUILLET)
+
+2004-02-11 David Schleef <ds@schleef.org>
+
+ * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_class_init),
+ (gst_rfbsrc_change_state), (gst_rfbsrc_init),
+ (gst_rfbsrc_set_property), (gst_rfbsrc_get_property):
+ Add server and port properties
+
+2004-02-11 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * m4/a52.m4:
+ * m4/aalib.m4:
+ * m4/as-ffmpeg.m4:
+ * m4/as-liblame.m4:
+ * m4/as-slurp-ffmpeg.m4:
+ * m4/check-libheader.m4:
+ * m4/esd.m4:
+ * m4/freetype2.m4:
+ * m4/gconf-2.m4:
+ * m4/glib.m4:
+ * m4/gst-alsa.m4:
+ * m4/gst-artsc.m4:
+ * m4/gst-ivorbis.m4:
+ * m4/gst-matroska.m4:
+ * m4/gst-sdl.m4:
+ * m4/gst-shout2.m4:
+ * m4/gst-sid.m4:
+ * m4/gtk.m4:
+ * m4/libdv.m4:
+ * m4/libfame.m4:
+ * m4/libmikmod.m4:
+ * m4/ogg.m4:
+ * m4/vorbis.m4:
+ fix underquotedness of macros (#133800)
+ * m4/as-avifile.m4:
+ * m4/xmms.m4:
+ removed because no longer used
+
+2004-02-11 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ require gettext 0.11.5 so ulonglong.m4 gets checked out and copied
+ by autopoint (fixes #132996)
+
+2004-02-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_base_init):
+ * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_base_init):
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_base_init):
+ * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_base_init):
+ fix memleaks
+
+2004-02-11 David Schleef <ds@schleef.org>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+ (gst_gdk_pixbuf_chain): Fix logic bug causing spurious errors.
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_base_init),
+ (gst_jpegdec_init), (gst_jpegdec_chain): Fix negotiation.
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_base_init),
+ (gst_jpegenc_class_init), (gst_jpegenc_init),
+ (gst_jpegenc_getcaps), (gst_jpegenc_link), (gst_jpegenc_resync),
+ (gst_jpegenc_chain), (gst_jpegenc_set_property),
+ (gst_jpegenc_get_property): Fix negotiation. Add some properties.
+ * ext/jpeg/gstjpegenc.h: Fix negotiation.
+
+2004-02-10 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
+ (gst_mikmod_srcfixate), (gst_mikmod_srclink), (gst_mikmod_loop):
+ * ext/mikmod/gstmikmod.h:
+ fix caps negotiation in mikmod
+ * ext/ogg/gstoggdemux.c: (gst_ogg_print):
+ output debug information
+
+2004-02-08 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/navigation/Makefile.am:
+ * gst-libs/gst/xoverlay/Makefile.am:
+ remove unused GST_OPT_CFLAGS from Makefiles
+ include X_CFLAGS and X_LIBS in xoverlay. (#131948)
+
+2004-02-07 David Schleef <ds@schleef.org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_handle_event): Don't
+ push events to pads that haven't been created (#133508)
+
+2004-02-07 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+ (gst_dvdec_sink_convert), (gst_dvdec_handle_sink_event),
+ (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
+ (gst_dvdec_loop), (gst_dvdec_change_state):
+ Second attempt at committing a working dvdec element.
+
+2004-02-06 David Schleef <ds@schleef.org>
+
+ Build fixes for OS X: (see #129600)
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_strh),
+ (gst_riff_read_strf_vids), (gst_riff_read_strf_auds),
+ (gst_riff_read_strf_iavs):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+ (gst_avi_demux_stream_odml):
+ * gst/playondemand/Makefile.am:
+ * gst/rtp/rtp-packet.c:
+
+2004-02-05 David Schleef <ds@schleef.org>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_loop): Revert
+ last change, because it Just Doesn't Compile.
+
+2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+ skip undecodable id3v2 tag instead of keeping it
+
+2004-02-05 David Schleef <ds@schleef.org>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+ Unref leaked buffer. (Noticed by Ronald)
+
+2004-02-05 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+ Sync requires with other checks. >= vs =.
+
+2004-02-06 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
+ (gst_dvdec_video_link), (gst_dvdec_loop):
+ * ext/dv/gstdvdec.h:
+ rework the caps negotiation so that dvdec works again instead
+ of just segfaulting.
+
+=== release 0.7.4 ===
+
+2004-02-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * NEWS: GStreamer Plugins 0.7.4 "For Great Justice" released
+ * configure.ac: changed for release
+
+2004-02-05 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in:
+ * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+ * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+ * pkgconfig/gstreamer-play-uninstalled.pc.in:
+ reworked patch by David Lehn to fix libdir and includedir for
+ uninstalled libraries
+ removed play and gconf from gstreamer-libs since they have their
+ own pkgconfig files
+
+2004-02-04 David Schleef <ds@schleef.org>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt): Fix a caps
+ memleak.
+
+2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+ use correct GST_TAG_ENCODER tag
+
+2004-02-05 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+ be sure to stop the clock when going to paused
+ * sys/oss/gstosssink.c: (gst_osssink_change_state):
+ reset number of transmitted when going to ready.
+ fixes #132935
+
+2004-02-05 Charles Schmidt <cschmidt2@emich.edu>
+
+ reviewed by Benjamin Otte
+
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ extract track count (fixes #133410)
+
+2004-02-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
+ that should be !=, not == (fixes #132519)
+
+2004-02-04 David Schleef <ds@schleef.org>
+
+ Make sure set_explicit_caps() is called before adding pad.
+ * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+ * gst/id3/gstid3types.c: (gst_id3types_loop):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+
+2004-02-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ bump nano to 2, first prerelease
+ put back AM_PROG_LIBTOOL
+
+2004-02-04 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * testsuite/alsa/Makefile.am:
+ these are user test apps, not automatic testsuite tests
+
+2004-02-04 David Schleef <ds@schleef.org>
+
+ Convert GST_DEBUG_CAPS() to GST_DEBUG():
+ * gst/mpeg1videoparse/gstmp1videoparse.c:
+ (mp1videoparse_parse_seq):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+ * sys/xvideo/gstxwindow.c: (_gst_xwindow_new):
+ * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
+ (gst_xvideosink_getcaps):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+ * testsuite/gst-lint: more tests
+
+2004-02-04 David Schleef <ds@schleef.org>
+
+ Replace use of GST_PAD_FORMATS_FUNCTION() and similar macros
+ with the code that they would expand to.
+ * ext/flac/gstflacdec.c: (gst_flacdec_get_src_formats),
+ (gst_flacdec_get_src_query_types),
+ (gst_flacdec_get_src_event_masks):
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_formats),
+ (gst_gnomevfssrc_get_query_types),
+ (gst_gnomevfssrc_get_event_mask):
+
+2004-02-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+ (gst_sinesrc_dispose):
+ fix memleak by properly disposing sinesrc
+
+2004-02-04 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_expose):
+ * gst-libs/gst/xoverlay/xoverlay.h: Adding the _expose method to tell
+ an overlay to redraw the image because it has been exposed.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy),
+ (gst_ximagesink_ximage_put), (gst_ximagesink_expose),
+ (gst_ximagesink_xoverlay_init), (gst_ximagesink_init):
+ * sys/ximage/ximagesink.h: Implement expose method from XOverlay
+ interface
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_destroy),
+ (gst_xvimagesink_xvimage_put), (gst_xvimagesink_expose),
+ (gst_xvimagesink_xoverlay_init), (gst_xvimagesink_init):
+ * sys/xvimage/xvimagesink.h: Implement expose method from XOverlay
+ interface
+
+2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
+ more memleak fixage
+
+2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+ * gst/typefind/gsttypefindfunctions.c:
+ fix memleaks shown by gst-typefind
+
+2004-02-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * common/glib-gen.mak:
+ add hack rule to touch .Plo files
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/tuner/Makefile.am:
+ remove glib_root variable
+
+2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream):
+ set explicit caps before adding the element, so the autopluggers can
+ plug correctly.
+ * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+ (mpeg2_sys_type_find), (mpeg1_sys_type_find),
+ (mpeg_video_type_find), (mpeg_video_stream_type_find),
+ (dv_type_find):
+ fix memleaks in typefind functions. gst_type_find_suggest takes a const
+ argument.
+
+2004-02-03 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/colorbalance/colorbalance-marshal.list:
+ * gst-libs/gst/colorbalance/colorbalance.c:
+ * gst-libs/gst/colorbalance/colorbalance.h:
+ * gst-libs/gst/colorbalance/colorbalancemarshal.list:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/mixer/mixer-marshal.list:
+ * gst-libs/gst/mixer/mixer.c:
+ * gst-libs/gst/mixer/mixer.h:
+ * gst-libs/gst/mixer/mixermarshal.list:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/play/play.h:
+ * gst-libs/gst/tuner/Makefile.am:
+ * gst-libs/gst/tuner/tuner-marshal.list:
+ * gst-libs/gst/tuner/tuner.c:
+ * gst-libs/gst/tuner/tuner.h:
+ * gst-libs/gst/tuner/tunermarshal.list:
+ use new glib-gen.mak snippet to clean up Makefile.am
+ fix various bugs in Makefile.am's
+
+2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
+ handle chain parsing correctly in the multichain case
+ * ext/theora/theoradec.c: (gst_theora_dec_init), (_theora_ilog),
+ (theora_dec_from_granulepos), (theora_dec_to_granulepos),
+ (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+ (theora_dec_chain):
+ handle events and queries correctly
+
+2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * .cvsignore:
+ Ignore generated file _stdint.h.
+
+2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * gst-libs/gst/colorbalance/Makefile.am:
+ * gst-libs/gst/colorbalance/colorbalance.h:
+ * gst-libs/gst/mixer/Makefile.am:
+ * gst-libs/gst/mixer/mixer.h:
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/play/play.h:
+ * gst-libs/gst/tuner/Makefile.am:
+ * gst-libs/gst/tuner/tuner.h:
+ Generate enum type code with glib-mkenums.
+ * gst-libs/gst/colorbalance/.cvsignore:
+ * gst-libs/gst/mixer/.cvsignore:
+ * gst-libs/gst/play/.cvsignore:
+ * gst-libs/gst/tuner/.cvsignore:
+ Ignore generated files.
+
+2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * gst-libs/gst/audio/.cvsignore:
+ Ignore generated file.
+ * gst-libs/gst/audio/Makefile.am:
+ Do not install example filter.
+
+2004-02-03 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * examples/switch/.cvsignore:
+ Ignore generated file.
+
+2004-02-03 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * common/m4/ax_create_stdint_h.m4:
+ * configure.ac:
+ add AX_CREATE_STDINT_H to get correct type definitions for a52dec in
+ _stdint.h.
+ * Makefile.am:
+ remove generated _stdint.h in DISTCLEANFILES
+ * ext/a52dec/gsta52dec.c:
+ include _stdint.h for a52dec. (should fix #133064)
+
+2004-02-02 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add),
+ (gst_tag_to_vorbis_comments):
+ Add replaygain support to vorbistag
+
+2004-02-02 Jeremy Simon <jesimon@libertysurf.fr>
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
+ (gst_ffmpeg_caps_to_extradata):
+ Fix SVQ3 caps flag properties
+ Use glib macro for bytes swap
+
+2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
+ * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+ * ext/sndfile/gstsf.c: (plugin_init):
+ * gst/avi/gstavi.c: (plugin_init):
+ * sys/dxr3/dxr3init.c: (plugin_init):
+ * sys/oss/gstossaudio.c: (plugin_init):
+ * sys/v4l/gstv4l.c: (plugin_init):
+ * sys/v4l2/gstv4l2.c: (plugin_init):
+ remove textdomain calls
+ * po/nl.po:
+ update Dutch translation
+
+2004-02-02 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+ (gst_play_set_audio_sink): Moving volume in the audio thread for
+ instantaneous volume change. Maybe i will add another volume in front
+ of visualization later, not sure yet though.
+
+2004-02-02 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+ (gst_ximagesink_handle_xevents): Better X events handling, only take
+ the latest events for configure and motion.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents): same.
+
+2004-02-02 Jon Trowbridge <trow@gnu.org>
+
+ reviewed by: David Schleef <ds@schleef.org>
+
+ Fix memory leaks:
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_register):
+
+2004-02-02 David Schleef <ds@schleef.org>
+
+ code cleanup. Change bzero() to memset(). Remove duplicate ; at ends
+ of lines.
+ * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_event):
+ * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+ * ext/xvid/gstxviddec.c: (gst_xviddec_src_link):
+ * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+ * gst/effectv/gstedge.c: (gst_edgetv_sinkconnect):
+ * gst/effectv/gstvertigo.c: (gst_vertigotv_sinkconnect):
+ * gst/intfloat/float22int.c: (gst_float2_2_int_getcaps),
+ (gst_float2_2_int_link):
+ * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
+ * gst/rtjpeg/RTjpeg.c: (RTjpeg_init_mcompress):
+ * gst/tcp/gsttcpsink.c: (gst_tcpsink_init_send):
+ * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_init_receive):
+ * gst/udp/gstudpsink.c: (gst_udpsink_init_send):
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_init_receive):
+ * sys/v4l/gstv4lelement.c: (gst_v4lelement_init):
+ * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_set_capture):
+ * testsuite/gst-lint: Add tests for bzero and ;;
+
+2004-02-02 David Schleef <ds@schleef.org>
+
+ * gst/debug/efence.c: Add fallback if MAP_ANONYMOUS isn't defined.
+
+2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/aalib/gstaasink.c: (gst_aasink_open):
+ * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+ * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
+ (gst_afsink_close_file):
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
+ (gst_afsrc_close_file):
+ * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+ * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+ * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
+ * ext/esd/esdmon.c: (gst_esdmon_get):
+ * ext/esd/esdsink.c: (gst_esdsink_chain), (gst_esdsink_open_audio):
+ * ext/faac/gstfaac.c: (gst_faac_chain):
+ * ext/faad/gstfaad.c: (gst_faad_chain):
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
+ * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+ * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
+ * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
+ (gst_flacdec_loop):
+ * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+ * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+ (gst_gnomevfssink_close_file):
+ * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
+ (gst_gnomevfssrc_open_file):
+ * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
+ * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
+ * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+ (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mplex/gstmplex.cc:
+ * ext/mplex/gstmplexibitstream.cc:
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
+ (gst_ogg_demux_push):
+ * ext/raw1394/gstdv1394src.c:
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
+ (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
+ * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
+ (gst_sf_loop):
+ * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
+ * ext/swfdec/gstswfdec.c: (gst_swfdec_loop):
+ * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
+ * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+ * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
+ * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
+ * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+ (gst_riff_read_element_data), (gst_riff_read_seek),
+ (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
+ * gst/adder/gstadder.c: (gst_adder_loop):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
+ (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
+ (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+ * gst/avi/gstavimux.c: (gst_avimux_stop_file):
+ * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+ * gst/goom/gstgoom.c: (gst_goom_chain):
+ * gst/id3/gstid3types.c: (gst_id3types_loop):
+ * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
+ * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
+ * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
+ * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+ (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+ (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
+ (gst_ebml_read_float), (gst_ebml_read_header):
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
+ (gst_matroska_demux_parse_blockgroup):
+ * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+ * gst/oneton/gstoneton.c: (gst_oneton_chain):
+ * gst/silence/gstsilence.c: (gst_silence_get):
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+ * gst/smpte/gstsmpte.c: (gst_smpte_loop):
+ * gst/speed/gstspeed.c: (speed_loop):
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+ * gst/volenv/gstvolenv.c: (gst_volenv_chain):
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+ (gst_wavparse_loop):
+ * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
+ (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
+ (dxr3audiosink_close):
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
+ (dxr3videosink_close), (dxr3videosink_write_data):
+ * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+ * sys/oss/gstosssink.c: (gst_osssink_chain):
+ * sys/oss/gstosssrc.c: (gst_osssrc_get):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
+ (gst_v4l_set_window), (gst_v4l_enable_overlay):
+ * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
+ (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
+ (gst_v4l_get_frequency), (gst_v4l_set_frequency),
+ (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
+ (gst_v4l_set_audio):
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+ (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
+ (gst_v4lmjpegsink_playback_init),
+ (gst_v4lmjpegsink_playback_start):
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+ (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
+ (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
+ * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
+ (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
+ * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+ (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
+ (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
+ (gst_v4l2_get_output), (gst_v4l2_set_output),
+ (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
+ (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
+ (gst_v4l2_set_attribute):
+ * sys/v4l2/v4l2_calls.h:
+ * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
+ (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
+ (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
+ (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
+ (gst_v4l2src_capture_stop):
+ * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+ (gst_ximagesink_chain):
+ * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
+ (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
+ (gst_xvideosink_xwindow_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_chain):
+
+2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/volume/gstvolume.c: (gst_volume_set_volume),
+ (gst_volume_get_volume), (volume_class_init), (volume_init),
+ (volume_chain_int16), (volume_update_volume):
+ * gst/volume/gstvolume.h:
+ make code more readable by removing magic numbers
+ make mixer interface export 0-100 range
+ make it internally map to 0.0-1.0 range so users don't distort
+ output by putting the sliders at full volume
+
+2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.c: (gst_play_tick_callback),
+ (gst_play_state_change), (gst_play_seek_to_time):
+ block the tick callback for 0.5 secs after doing a seek
+
+2004-02-02 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.c: (gst_play_new):
+ check for GError
+
+2004-02-01 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/play.c: (gst_play_seek_to_time),
+ (gst_play_new): Accepting NULL GError, blocking time tick while seeking.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+ (gst_ximagesink_chain), (gst_ximagesink_init): s/sinkconnect/sink_link
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+ (gst_xvimagesink_chain), (gst_xvimagesink_init): s/sinkconnect/sink_link
+
+2004-02-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.ac:
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+ check for a function added in vorbis 1.1
+
+2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
+ (gst_alsa_drain_audio), (gst_alsa_stop_audio):
+ really start/stop clock only on PLAYING <=> PAUSED
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ remove \n from debugging lines
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
+ make it work when seeking does not
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+ reset on DISCONT
+
+2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start):
+ start clock on PAUSED=>PLAYING, not later
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ extract correct time for different discont formats
+ (gst_alsa_sink_get_time):
+ don't segfault when no format is negotiated yet, just return 0
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+ (gst_ogg_demux_handle_event), (gst_ogg_demux_push),
+ (gst_ogg_pad_push):
+ handle flush and discont events correctly
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
+ handle discont events correctly
+
+2004-01-31 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.c: (gst_play_error_quark),
+ (gst_play_error_create), (gst_play_error_plugin),
+ (gst_play_pipeline_setup), (gst_play_init), (gst_play_new):
+ * gst-libs/gst/play/play.h:
+ add error handling during creation
+ * examples/gstplay/player.c: (main):
+ use new gst_play_new
+
+
+2004-01-31 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/theora/theoradec.c: (theora_dec_chain):
+ make comments work
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
+ (vorbis_dec_src_event), (vorbis_dec_chain):
+ add encoder tag, fix tag reading to be more error tolerant, change
+ BITRATE to NOMINAL_BITRATE, add debugging, don't unref events after
+ gst_pad_event_default.
+ * gst/tags/gstvorbistag.c:
+ (gst_tag_list_from_vorbiscomment_buffer):
+ undefine function specific define at end of function
+
+2004-01-31 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * ext/flac/gstflac.c: (plugin_init):
+ * ext/flac/gstflacdec.c: (gst_flacdec_class_init):
+ * ext/flac/gstflacdec.h:
+ * ext/flac/gstflacenc.h:
+ Fix typos
+
+2004-01-30 David I. Lehn <dlehn@users.sourceforge.net>
+
+ * examples/gstplay/player.c: s/gstplay.h/play.h/
+
+2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/Makefile.am:
+ * gst-libs/gst/play/gstplay.c:
+ * gst-libs/gst/play/gstplay.h:
+ * gst-libs/gst/play/play.c:
+ more surgery, operation complete
+
+2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/play/play.old.c:
+ * gst-libs/gst/play/play.old.h:
+ after CVS surgery by moving, remove
+ * gst-libs/gst/play/playpipelines.c:
+ remove
+
+ * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
+ add negotiation error
+
+2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+ (gst_ogg_demux_push):
+ add some seeking debug info
+ send a flush when seeking
+
+2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ use AC_C_INLINE
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/theora/Makefile.am:
+ * ext/theora/theoradec.c:
+ add theora video decoder. Does just do simple decoding for now and
+ has been tested against Theora cvs only. It only works when theora
+ is compiled with --enable-static.
+ * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+ always reset packetno on DISCONT
+
+2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+ Fix audio.
+
+2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegaudioparse/gstmpegaudioparse.c:
+ (mp3_type_frame_length_from_header):
+ Fix header parsing - stolen from ffmpeg (thank you! :) ).
+
+2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/esd/esdsink.c: (gst_esdsink_init):
+ Since we have static pad template caps, we don't need to negotiate;
+ either the core errors out or we know the format.
+
+2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+ (gst_riff_read_seek):
+ * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+ (gst_ebml_read_seek):
+ Fix event handling.
+
+2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
+ removee video/x-theora from vp3 decoder, it doesn't handle raw
+ theora streams
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init):
+ fix bug with finalizing element that never went to PAUSED
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
+ length and position queries were swapped
+ * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init),
+ (vorbis_dec_from_granulepos), (vorbis_dec_src_query),
+ (vorbis_dec_src_event):
+ implement querying time and bytes
+
+2004-01-30 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * just about every source file:
+ gst_element_error -> GST_ELEMENT_ERROR
+
+2004-01-29 Julien MOUTTE <julien@moutte.net>
+
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get): Fixing seeking
+ emiting FLUSH and even before DISCONT.
+ * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): Fix seeking to
+ get the best instant seeking as possible yay!
+
+2004-01-29 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpeg1videoparse/gstmp1videoparse.c:
+ (gst_mp1videoparse_real_chain):
+ Committed wrong version last week... Grr... Didn't notice until now.
+
+2004-01-29 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new): Emit the
+ have_xwindow_id signal in xwindow_create.
+
+2004-01-29 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ogg/gstoggdemux.c:
+ lots of changes - mainly support for chained bitstreams, seeking,
+ querying and bugfixes of course
+ * ext/vorbis/Makefile.am:
+ * ext/vorbis/vorbisdec.c:
+ * ext/vorbis/vorbisdec.h:
+ add vorbisdec raw vorbis decoder
+ * ext/vorbis/vorbis.c: (plugin_init):
+ register vorbisdec as PRIMARY, vorbisfile as SECONDARY
+ * gst/intfloat/Makefile.am:
+ * gst/intfloat/float22int.c:
+ * gst/intfloat/float22int.h:
+ * gst/intfloat/gstintfloatconvert.c: (plugin_init):
+ add float2intnew plugin. It converts multichannel interleaved float to
+ multichannel interleaved int. The name should probably be changed.
+ * gst/typefind/gsttypefindfunctions.c: (theora_type_find),
+ (plugin_init):
+ add typefinding for raw theora video so oggdemux can detect it.
+
+2004-01-28 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): seek on video
+ sink element first.
+ * gst/videoscale/gstvideoscale.c:
+ (gst_videoscale_handle_src_event): Fixing src event handler.
+
+2004-01-28 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+ (gst_v4lsrc_open), (gst_v4lsrc_close),
+ (gst_v4lsrc_palette_to_caps), (gst_v4lsrc_srcconnect),
+ (gst_v4lsrc_getcaps), (gst_v4lsrc_set_clock):
+ * sys/v4l/gstv4lsrc.h:
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_start),
+ (gst_v4lsrc_grab_frame), (gst_v4lsrc_capture_stop):
+ Implement resizing... Hack. But that's why v4l is b0rked...
+
+2004-01-28 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+ (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy),
+ (gst_ximagesink_ximage_put), (gst_ximagesink_xwindow_new),
+ (gst_ximagesink_xwindow_destroy):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+ (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
+ (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_get_xv_support),
+ (gst_xvimagesink_xcontext_get): Removing some useless debugs messages,
+ correctly cleaning the image created to check xshm calls on succes,
+ added a lot of XSync calls in X11 functions, and fixed a segfault when
+ no image format was defined before negotiation happened.
+
+2004-01-28 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_query_func):
+ use gst_element_get_time to get correct time
+
+2004-01-28 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
+ (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_destroy),
+ (gst_ximagesink_xcontext_get), (gst_ximagesink_class_init):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xerror),
+ (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xcontext_get): Our
+ X plugins are now able to detect that XShm calls will fail even if the
+ server claims that it has XShm support (remote displays most of the
+ time). We then log the error as a GST_DEBUG and set use_shm to FALSE
+ so that we use non XShm functions. This feature is almost useless for
+ xvimagesink as Xv is not supported on remote displays anyway, but
+ it might happen than even on the local display XShm calls fail.
+
+2004-01-27 David Schleef <ds@schleef.org>
+
+ * ext/esd/esdsink.c: (gst_esdsink_class_init), (gst_esdsink_init),
+ (gst_esdsink_link), (gst_esdsink_get_time), (gst_esdsink_chain),
+ (gst_esdsink_change_state): Fix sync issues in esdsink. Also
+ changed esdsink to only use 44100,16,2, since esd sucks at rate
+ conversion and esdsink has had difficulty negotiating.
+
+2004-01-27 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback),
+ (gst_play_seek_to_time): Fixing the way to get current position.
+
+2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/oss/gstosssink.c: (gst_osssink_sink_query):
+ use gst_element_get_time to get correct time
+
+2004-01-27 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_set_location): The easiest
+ fix ever... Inverting 2 lines of code make spider autoplug correctly
+ tagged mp3 !
+
+2004-01-27 David Schleef <ds@schleef.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ Use gst_pad_try_set_caps_nonfixed().
+
+2004-01-27 David Schleef <ds@schleef.org>
+
+ * gst/ac3parse/gstac3parse.c: update to checklist 5
+ * gst/adder/gstadder.c: rewrite negotiation. update to checklist 5
+ * gst/audioconvert/gstaudioconvert.c: update to checklist 5
+ * gst/audioscale/gstaudioscale.c: same
+ * gst/auparse/gstauparse.c: same
+ * gst/avi/gstavidemux.c: same
+
+2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
+ stop processing after EOS
+
+2004-01-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/asfdemux/asfheaders.h:
+ * gst/asfdemux/gstasfdemux.c:
+ * gst/asfdemux/gstasfmux.c: (gst_asfmux_put_guid),
+ (gst_asfmux_put_string), (gst_asfmux_put_wav_header),
+ (gst_asfmux_put_vid_header), (gst_asfmux_put_bmp_header):
+ lot's of fixes to make data extraction simpler and get the code
+ architecture and compiler independant. Add debugging category
+ * gst/goom/gstgoom.c: (gst_goom_change_state):
+ reset channel count on PAUSED=>READY, not READY=>PAUSED
+
+2004-01-26 Colin Walters <walters@verbum.org>
+
+ * ext/gnomevfs/gstgnomevfssrc.c (gst_gnomevfssrc_get): Remove ugly
+ code to pull a bigger buffer in iradio mode. This as a side effect
+ makes typefinding work.
+
+2004-01-26 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
+ Fix SVQ3 decoding on PPC
+
+2004-01-26 Julien MOUTTE <julien@moutte.net>
+
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Dunno how
+ that one managed to stay there... Fixed.
+
+2004-01-26 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
+ (gst_ffmpeg_caps_to_extradata), (gst_ffmpeg_caps_to_pixfmt):
+ * gst/qtdemux/qtdemux.c: (plugin_init), (qtdemux_parse_trak),
+ (qtdemux_video_caps):
+ * gst/qtdemux/qtdemux.h:
+ Add SVQ3 specific flags to qtdemux and ffmpeg
+
+2004-01-26 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/audio/audio.h:
+ remove buffer-frames from audio caps
+ * gst/audioconvert/gstaudioconvert.c:
+ fix plugin to really work.
+
+2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/mixer/mixer.c:
+ * gst-libs/gst/propertyprobe/propertyprobe.c:
+ * gst-libs/gst/tuner/tuner.c: (gst_tuner_find_norm_by_name),
+ (gst_tuner_find_channel_by_name):
+ * gst-libs/gst/tuner/tuner.h:
+ Add gtk-doc style comments. Also fix a function name.
+
+2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c: (gst_divxdec_init),
+ (gst_divxdec_negotiate):
+ Fix for new capsnego - also fixes gst-player with divxdec.
+
+2004-01-25 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+ (gst_play_identity_handoff), (gst_play_set_location),
+ (gst_play_set_visualization), (gst_play_connect_visualization): Another
+ try in visualization implementation. Still have an issue with switch
+ blocking when pulling from video_queue and only audio comes out of
+ spider.
+ * gst/switch/gstswitch.c: (gst_switch_release_pad),
+ (gst_switch_poll_sinkpads), (gst_switch_class_init): Implementing pad
+ release method. And check if the pad is usable before pulling.
+
+2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose),
+ (gst_videobalance_init),
+ (gst_videobalance_colorbalance_list_channels),
+ (gst_videobalance_colorbalance_set_value),
+ (gst_videobalance_colorbalance_get_value),
+ (gst_videobalance_update_properties),
+ (gst_videobalance_update_tables_planar411),
+ (gst_videobalance_planar411):
+ * gst/videofilter/gstvideobalance.h:
+ Implement lookup-tables. +/- 10x faster.
+
+2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+ (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
+ The index reading was broken. The rest worked fine, but the whole
+ goal of my rewrite was to make avidemux readable, and this was
+ not at all readable. Please use typed variables.
+
+2004-01-25 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+ Additional pad usability check.
+ * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+ (mp1videoparse_find_next_gop), (gst_mp1videoparse_time_code),
+ (gst_mp1videoparse_real_chain):
+ Fix MPEG video stream parsing. The original plugin had several
+ issues, including not timestamping streams where the source was
+ not timestamped (this happens with PTS values in mpeg system
+ streams, but MPEG video is also a valid stream on its own so
+ that needs timestamps too). We use the display time code for that
+ for now. Also, if one incoming buffer contains multiple valid
+ frames, we push them all on correctly now, including proper EOS
+ handling. Lastly, several potential segfaults were fixed, and we
+ properly sync on new sequence/gop headers to include them in next,
+ not previous frames (since they're header for the next frame, not
+ the previous). Also see #119206.
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain),
+ (bpf_from_header):
+ Move caps setting so we only do it after finding several valid
+ MPEG-1 fraes sequentially, not right after the first one (which
+ might be coincidental).
+ * gst/typefind/gsttypefindfunctions.c: (mpeg1_sys_type_find),
+ (mpeg_video_type_find), (mpeg_video_stream_type_find),
+ (plugin_init):
+ Add unsynced MPEG video stream typefinding, and change some
+ probability values so we detect streams rightly. The idea is as
+ follows: I can have an unsynced system stream which contains
+ video. In the current code, I would randomly get a type for either
+ system or video stream type found, because the probabilities are
+ being calculated rather randomly. I now use fixed values, so we
+ always prefer system stream if that was found (and that is how it
+ should be). If no system stream was found, we can still identity the stream as video-only.
+
+2004-01-23 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+ (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
+ don't write to buffer. Extract data without the need of
+ __attribute__ ((packed))
+
+2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header),
+ (mpeg1_sys_type_find):
+ Fix MPEG-1 stream typefinding.
+
+2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+ Fix typefinding for MPEG-1 system streams, similar to MPEG-2.
+
+2004-01-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/esd/esdsink.c: (gst_esdsink_open_audio):
+ * ext/esd/gstesd.c: (plugin_init):
+ private debugging, better error reporting
+
+2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
+ (gst_riff_read_init), (gst_riff_read_change_state):
+ * gst-libs/gst/riff/riff-read.h:
+ Remove stuff fromold metadata system.
+
+2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ogg/gstoggdemux.c:
+ Fix wrong file comment.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
+ Add metadata reading properly.
+
+2004-01-23 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/Makefile.am:
+ Fix nas DIST_SUBDIRS
+ Uraeus:
+ Fix bug where make distcheck doesn't get run on adding stuff to
+ the build.
+
+2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c: (gst_divxdec_init), (gst_divxdec_setup):
+ * ext/divx/gstdivxdec.h:
+ Fix divx3 ("msmpeg4") playback using divxdec.
+
+2004-01-23 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/typefind/gsttypefindfunctions.c:
+ (mp3_type_frame_length_from_header): fix bug in length computation
+ (mp3_type_find): improve debugging output
+
+2004-01-23 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+ (gst_play_set_location), (gst_play_seek_to_time),
+ (gst_play_set_audio_sink), (gst_play_set_visualization),
+ (gst_play_connect_visualization), (gst_play_get_sink_element): Reworked
+ the pipeline from scratch. Visualization is back and switch went out as
+ i realized it was not possible to use the way i wanted.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_imagepool_clear),
+ (gst_ximagesink_change_state), (gst_ximagesink_dispose): Move xcontext
+ clearing in state change from READY to NULL. So that one can clean the
+ X ressources keeping the element.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_imagepool_clear), (gst_xvimagesink_change_state),
+ (gst_xvimagesink_colorbalance_set_value),
+ (gst_xvimagesink_colorbalance_get_value),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_dispose),
+ (gst_xvimagesink_init): Same xcontext cleaning than ximagesink in state
+ change from READY to NULL and fixed some stupid bugs in colorbalance
+ get/set values. Also added the following feature : when nobody tries to
+ set some values to the colorbalance levels before the xcontext is
+ grabbed, then when creating channels list from Xv attributes we set the
+ internal values to the Xv defaults. This way we handle buggy Xv drivers
+ that set default hue values far from the middle of the range (Thanks
+ to Jon Trowbridge for pointing that issue).
+ * sys/xvimage/xvimagesink.h: Adding a cb_changed boolean to know if
+ colorbalance levels have been set before xcontext is grabbed.
+
+2004-01-22 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+ Fix the ossmixer case where we shouldn't open /dev/dsp* because
+ it might block operations (which is bad for a mixer).
+
+2004-01-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
+ (deep_notify_callback), (gmi_set_decoder), (gmi_clear_decoder),
+ (gmip_find_type_pre):
+ * gst-libs/gst/media-info/media-info-priv.h:
+ * gst-libs/gst/media-info/media-info.c:
+ (gst_media_info_instance_init), (gst_media_info_read_idler):
+ add fakesink to get caps on decoder src pad again
+ fix callback prototype to match new have_type signal signature
+
+2004-01-22 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/adder/gstadder.c: (gst_adder_link):
+ fix non-compile and cut-n-paste code
+
+2004-01-21 David Schleef <ds@schleef.org>
+
+ * ext/swfdec/gstswfdec.c: (gst_swfdec_video_getcaps),
+ (gst_swfdec_video_link), (copy_image), (gst_swfdec_loop),
+ (gst_swfdec_init), (gst_swfdec_change_state):
+ * ext/swfdec/gstswfdec.h:
+ Fix negotiation.
+ * gst/adder/gstadder.c: (gst_adder_link), (gst_adder_init),
+ (gst_adder_request_new_pad): Fix negotiation.
+ * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_src_fixate):
+ Add a fixate function.
+ * gst/intfloat/gstfloat2int.c:
+ * gst/intfloat/gstfloat2int.h:
+ * gst/intfloat/gstint2float.c:
+ * gst/intfloat/gstint2float.h:
+ Completely rewrite the negotiation. Doesn't quite work yet,
+ due to some buffer-frames problem.
+
+2004-01-21 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/gnomevfs/gstgnomevfssrc.c:
+ * sys/v4l2/v4l2_calls.h:
+ fix includes for distcheck
+
+2004-01-21 Christian Schaller <uraeus@gnome.org>
+
+ * ext/nas/
+ Add libnas (network audio system) plugin, patch from Arwed von Merkatz
+ based on earlier patch from Laurent Vivier
+
+2004-01-20 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
+ Fix wma caps property
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+ Fix typo (flags1 and flags2)
+
+2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/media-info/media-info-priv.c:
+ (deep_notify_callback), (gmi_seek_to_track), (gmi_get_decoder),
+ (gmip_find_type_pre), (gmip_find_type), (gmip_find_stream_post),
+ (gmip_find_stream), (gmip_find_track_metadata),
+ (gmip_find_track_streaminfo_post), (gmip_find_track_streaminfo),
+ (gmip_find_track_format):
+ * gst-libs/gst/media-info/media-info-priv.h:
+ * gst-libs/gst/media-info/media-info-test.c: (main):
+ * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
+ (gst_media_info_read_idler), (gst_media_info_read):
+ * gst-libs/gst/media-info/media-info.h:
+ register debugging category and use it for debugging
+
+2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/vorbis/vorbisfile.c: (gst_vorbisfile_update_streaminfo),
+ (gst_vorbisfile_new_link):
+ signal streaminfo through tags
+
+2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mplex/gstmplex.cc:
+ * ext/mplex/gstmplexibitstream.cc:
+ g++ doesn't like NULL in our i18n/error macros, should be
+ either (NULL) or ("").
+
+2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/dxr3/dxr3audiosink.c:
+ * sys/dxr3/dxr3init.c:
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_close):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_close):
+ Fix more error error error errors (missing includes here).
+
+2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+ fix thomas' error errors.
+
+2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ fix error errors.
+
+2004-01-20 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+ * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+ Fix for new error system.
+
+2004-01-20 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+ fix for new error reporting
+
+2004-01-20 David Schleef <ds@schleef.org>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
+ (gst_ximagesink_set_xwindow_id): Change to using a framerate
+ of [1,100] instead of [0,MAX], since 0 isn't handled correctly,
+ and neither is 100+, most likely.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+ (gst_xvimagesink_getcaps): same
+
+2004-01-19 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * configure.ac:
+ Up version requirement to 2.0.3 (not yet released) to avoid symbol
+ clashes with ffmpeg.
+
+2004-01-20 Julien MOUTTE <julien@moutte.net>
+
+ * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
+ (gst_switch_init): Fixed switch element : proxying link and setting
+ caps from src to sink on request.
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+ * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
+ (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
+ fix element_error
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l2/v4l2_calls.h:
+ element_error fixes
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/gst-i18n-plugin.h:
+ add locale.h
+ remove config.h inclusion
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * autogen.sh:
+ adding autopoint invocation
+ * Makefile.am:
+ * configure.ac:
+ * gst-libs/gst/gettext.h:
+ adding gettext bits
+ * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
+ * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+ (gst_gnomevfssink_close_file):
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_open_file):
+ * ext/sndfile/gstsf.c: (gst_sf_loop), (plugin_init):
+ * gst-libs/gst/gst-i18n-plugin.h:
+ * gst/avi/gstavi.c: (plugin_init):
+ * sys/dxr3/dxr3init.c: (plugin_init):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_write_data):
+ * sys/oss/gstossaudio.c: (plugin_init):
+ * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+ * sys/v4l/gstv4l.c: (plugin_init):
+ * sys/v4l/v4l_calls.c: (gst_v4l_open):
+ * sys/v4l2/gstv4l2.c: (plugin_init):
+ * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+ (gst_v4l2_fill_lists), (gst_v4l2_get_norm), (gst_v4l2_set_norm),
+ (gst_v4l2_get_input), (gst_v4l2_set_input), (gst_v4l2_get_output),
+ (gst_v4l2_set_output), (gst_v4l2_get_frequency),
+ (gst_v4l2_set_frequency), (gst_v4l2_signal_strength),
+ (gst_v4l2_get_attribute), (gst_v4l2_set_attribute):
+ make sure locale and translation domain are set
+ fix translated strings
+ * po/.cvsignore:
+ * po/LINGUAS:
+ * po/Makevars:
+ * po/POTFILES.in:
+ * po/nl.po:
+ put translation files into place
+ * sys/xvideo/imagetest.c: (main):
+ * ext/dv/demo-play.c: (main):
+ fix unnecessary translations
+
+2004-01-19 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+ * ext/sndfile/gstsf.c:
+ * gst/avi/gstavimux.c:
+ * ext/audiofile/gstafsink.c:
+ * ext/audiofile/gstafsrc.c:
+ * ext/gnomevfs/gstgnomevfssink.c:
+ * ext/gnomevfs/gstgnomevfssrc.c:
+ * sys/oss/gstosselement.c:
+ * sys/v4l/v4l_calls.h:
+ fix i18n include
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+ (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
+ (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
+ (gst_v4l2_get_output), (gst_v4l2_set_output),
+ (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
+ (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
+ (gst_v4l2_set_attribute):
+ update to new error handling
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ext/sidplay/gstsiddec.cc:
+ * gst/modplug/gstmodplug.cc:
+ parenthese NULL because C++ seems angry about it
+
+2004-01-19 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/gst-i18n-plugin.h:
+ add skeleton i18n stuff, but needs to be further implemented
+
+2004-01-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * examples/gstplay/player.c: (main):
+ * ext/aalib/gstaasink.c: (gst_aasink_open):
+ * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+ * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
+ (gst_afsink_close_file):
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
+ (gst_afsrc_close_file):
+ * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+ * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
+ * ext/esd/esdmon.c: (gst_esdmon_get):
+ * ext/esd/esdsink.c: (gst_esdsink_chain):
+ * ext/faac/gstfaac.c: (gst_faac_chain):
+ * ext/faad/gstfaad.c: (gst_faad_chain):
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
+ * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+ * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
+ * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
+ (gst_flacdec_loop):
+ * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+ * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+ (gst_gnomevfssink_close_file):
+ * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
+ (gst_gnomevfssrc_open_file):
+ * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
+ * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
+ * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
+ * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+ (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
+ * ext/mad/gstmad.c: (gst_mad_chain):
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+ * ext/mplex/gstmplex.cc:
+ * ext/mplex/gstmplexibitstream.cc:
+ * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
+ (gst_ogg_demux_push), (gst_ogg_pad_push):
+ * ext/raw1394/gstdv1394src.c:
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
+ (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
+ * ext/sidplay/gstsiddec.cc:
+ * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
+ (gst_sf_loop):
+ * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
+ * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
+ * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+ * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
+ * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
+ * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
+ * gst-libs/gst/Makefile.am:
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+ (gst_riff_read_element_data), (gst_riff_read_seek),
+ (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
+ * gst/adder/gstadder.c: (gst_adder_parse_caps), (gst_adder_loop):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
+ (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
+ * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
+ (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+ * gst/avi/gstavimux.c: (gst_avimux_stop_file):
+ * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+ * gst/goom/gstgoom.c: (gst_goom_chain):
+ * gst/id3/gstid3types.c: (gst_id3types_loop):
+ * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
+ * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
+ * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+ (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+ (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
+ (gst_ebml_read_float), (gst_ebml_read_header):
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
+ (gst_matroska_demux_parse_blockgroup):
+ * gst/modplug/gstmodplug.cc:
+ * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+ * gst/oneton/gstoneton.c: (gst_oneton_chain):
+ * gst/silence/gstsilence.c: (gst_silence_get):
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+ * gst/smpte/gstsmpte.c: (gst_smpte_loop):
+ * gst/speed/gstspeed.c: (speed_loop):
+ * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+ * gst/volenv/gstvolenv.c: (gst_volenv_chain):
+ * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+ (gst_wavparse_loop):
+ * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
+ (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
+ (dxr3audiosink_close):
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
+ (dxr3videosink_close), (dxr3videosink_write_data):
+ * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+ * sys/oss/gstosselement.h:
+ * sys/oss/gstosssink.c: (gst_osssink_get_type), (gst_osssink_init),
+ (gst_osssink_chain):
+ * sys/oss/gstosssrc.c: (gst_osssrc_get):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
+ * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_window),
+ (gst_v4l_enable_overlay):
+ * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
+ (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
+ (gst_v4l_get_frequency), (gst_v4l_set_frequency),
+ (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
+ (gst_v4l_set_audio):
+ * sys/v4l/v4l_calls.h:
+ * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+ (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
+ (gst_v4lmjpegsink_playback_init),
+ (gst_v4lmjpegsink_playback_start):
+ * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
+ (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_capture),
+ (gst_v4lmjpegsrc_set_capture_m), (gst_v4lmjpegsrc_capture_init),
+ (gst_v4lmjpegsrc_requeue_frame):
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+ (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
+ (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
+ * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
+ (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
+ (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
+ (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
+ (gst_v4l2src_capture_stop):
+ * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+ (gst_ximagesink_chain):
+ * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
+ (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
+ (gst_xvideosink_xwindow_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_chain):
+ use new error signal, function and categories
+
+2004-01-18 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/musicbrainz/gsttrm.c:
+ * ext/musicbrainz/gsttrm.h:
+ * ext/musicbrainz/Makefile.am:
+ Add a trm plugin
+
+2004-01-18 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_set_property),
+ (gst_ximagesink_get_property), (gst_ximagesink_class_init): Adding
+ synchronous property for debugging.
+ * sys/ximage/ximagesink.h: Adding the synchronous boolean flag.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_set_property): Moving a pointer declaration to a
+ smaller block, fixing indent.
+
+2004-01-16 David Schleef <ds@schleef.org>
+
+ * gst/videofilter/gstvideobalance.c: Fix regression; changing a
+ property affects the video stream.
+ * sys/xvimage/xvimagesink.c:
+ * sys/xvimage/xvimagesink.h:
+ Add synchronous property for debugging. Should probably be
+ disabled in non-CVS builds. Make sure that the Xv attribute
+ exists before we set it (crash!). Fix a silly float bug that
+ caused colorbalance to just not work.
+
+2004-01-17 Christian Schaller <Uraeus@gnome.org>
+
+ * tools/gst-launch-ext.in - update for new plugins
+
+2004-01-16 David Schleef <ds@schleef.org>
+
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect): Fix use of
+ already-freed caps.
+
+2994-01-16 Christian Schaller <Uraeus@gnome.org>
+
+ * Update spec for new colorspace plugin and libcaca plugin
+ * Fix compilation of libcaca plugin (clock -> id)
+
+2004-01-16 Julien MOUTTE <julien@moutte.net>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_update_colorbalance),
+ (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
+ (gst_xvimagesink_set_xwindow_id),
+ (gst_xvimagesink_colorbalance_set_value),
+ (gst_xvimagesink_colorbalance_get_value),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+ (gst_xvimagesink_init), (gst_xvimagesink_class_init): Implementing
+ correct colorbalance properties. They can now be set when the element
+ is still in NULL state. The values will be committed to the Xv Port
+ when xcontext is initialized.
+ * sys/xvimage/xvimagesink.h: Added hue, saturation, contrast,
+ brightness int values in the GstXvImagesink structure.
+
+2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst-libs/gst/Makefile.am:
+ restructure so having local patches works easier.
+
+2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mpeg2enc/Makefile.am:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+ Bugfix with respect to EOS handling.
+
+2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
+ Link with right caps (else, it segfaults).
+ * ext/mplex/gstmplexjob.cc:
+ Fix for slight API change in 1.6.1.93 release of mjpegtools.
+
+2004-01-15 David Schleef <ds@schleef.org>
+
+ * gst-libs/gst/audio/Makefile.am:
+ Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c
+ from the template.
+ * gst-libs/gst/audio/gstaudiofilter.c:
+ * gst-libs/gst/audio/gstaudiofilter.h:
+ Add bytes_per_sample and size and n_samples calculation.
+ * gst-libs/gst/audio/gstaudiofilterexample.c:
+ Remove, now autogenerated.
+ * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+ Moved from gstaudiofilterexample, object name changed, code added
+ so that it actually works.
+ * gst-libs/gst/audio/make_filter:
+ Script to build an audiofilter subclass from the template.
+ * gst/colorspace/Makefile.am:
+ * gst/colorspace/yuv2yuv.c:
+ Remove file, since it's GPL, and we don't use it.
+
+2004-01-15 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Making both of
+ them use the buffer free function to test how the buffer was allocated.
+
+2004-01-15 David Schleef <ds@schleef.org>
+
+ * ext/esd/esdsink.c: (gst_esdsink_class_init): Remove property
+ that handles osssink fallback.
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
+ (gst_audio_convert_getcaps):
+ * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+ Add audio/x-qdm2 for QDM2 audio.
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+ * gst/sine/gstsinesrc.h: Add example of how to implement tags.
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+ Decrease minimum size to 16x16.
+ * gst/wavparse/gstwavparse.c:
+ Convert disabled pad template caps to new caps.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_chain): Throw element error when display cannot
+ be opened. Increase minimum framerate to 1.0. Check the data
+ free function on a buffer to make sure it is the type we expect
+ before manipulating it.
+
+2004-01-15 Julien MOUTTE <julien@moutte.net>
+
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
+ (gst_videobalance_colorbalance_set_value): Implement passthru if
+ settings are in the middle.
+ * tools/gst-launch-ext.in: Stop using xvideosink, use ximagesink.
+
+2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/videofilter/Makefile.am:
+ * gst/volume/Makefile.am:
+ Since we use videofilter symbols, link to it.
+
+2004-01-15 Julien MOUTTE <julien@moutte.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init): Setting
+ mixer interface type to HARDWARE.
+ * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init): Adding a default
+ type to SOFTWARE.
+ * gst-libs/gst/mixer/mixer.h: Adding mixer interface type and macro.
+ * gst-libs/gst/mixer/mixertrack.h: Adding mixertrack flag SOFTWARE.
+ * gst/volume/gstvolume.c: (gst_volume_interface_supported),
+ (gst_volume_interface_init), (gst_volume_list_tracks),
+ (gst_volume_set_volume), (gst_volume_get_volume),
+ (gst_volume_set_mute), (gst_volume_mixer_init),
+ (gst_volume_dispose), (gst_volume_get_type), (volume_class_init),
+ (volume_init): Implementing mixer interface.
+ * gst/volume/gstvolume.h: Adding tracklist for mixer interface.
+ * sys/oss/gstosselement.c: (gst_osselement_get_type),
+ (gst_osselement_change_state): Removing some trailing commas in
+ structures.
+ * sys/oss/gstossmixer.c: (gst_ossmixer_interface_init): Setting mixer
+ interface type to HARDWARE.
+ * sys/v4l/gstv4lcolorbalance.c:
+ (gst_v4l_color_balance_interface_init): Setting colorbalance interface
+ type to HARDWARE.
+ * sys/v4l2/gstv4l2colorbalance.c:
+ (gst_v4l2_color_balance_interface_init): Setting colorbalance
+ interface type to HARDWARE.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): use exactly the
+ same code than ximagesink for event handling.
+
+2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/snapshot/Makefile.am:
+ * ext/snapshot/gstsnapshot.c: (gst_snapshot_sinkconnect),
+ (gst_snapshot_chain):
+ * ext/snapshot/gstsnapshot.h:
+ This has to be a joke... Snapshot should be connected to a tee,
+ colorspace element before it and EOS after that, where the other
+ src of the tee receives normal data.
+ The current way is *wrong*.
+
+2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/hermes/gsthermescolorspace.c:
+ Fix another compile error. Same as below.
+
+2004-01-15 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/colorspace/gstcolorspace.c:
+ * gst/colorspace/yuv2yuv.c: (gst_colorspace_yuy2_to_i420),
+ (gst_colorspace_i420_to_yv12):
+ Fix compiling... Didn't test if it actually works.
+
+2004-01-15 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ * gst/colorspace/Makefile.am:
+ * gst/colorspace/gstcolorspace.c:
+ * gst/colorspace/gstcolorspace.h:
+ * gst/colorspace/yuv2rgb.c:
+ * gst/colorspace/yuv2rgb.h:
+ Duplicate the ext/hermes colorspace plugin, and remove Hermes
+ code and GPL code. Fix for new caps negotiation. Rewrite
+ much of the format handling code, and some of the conversion
+ code. Basically, rewrote almost everything. This element
+ handles I420, YV12 to RGB conversions.
+ * ext/hermes/Makefile.am:
+ * ext/hermes/gsthermescolorspace.c:
+ Rename colorspace to hermescolorspace. Fix negotiation issues.
+ Remove non-Hermes related code. This element handles lots of
+ RGB to RGB conversions, but no YUV.
+ * ext/hermes/gstcolorspace.c:
+ * ext/hermes/gstcolorspace.h:
+ * ext/hermes/rgb2yuv.c:
+ * ext/hermes/yuv2rgb.c:
+ * ext/hermes/yuv2rgb.h:
+ * ext/hermes/yuv2rgb_mmx16.s:
+ * ext/hermes/yuv2yuv.c:
+ * ext/hermes/yuv2yuv.h:
+ Remove old code.
+
+2004-01-14 Colin Walters <walters@verbum.org>
+
+ * ext/mad/gstid3tag.c (gst_id3_tag_chain): Don't nego caps if
+ they've already been.
+
+2004-01-15 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
+ assume tag mode when pad is not connected
+
+2004-01-15 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ Don't update the time of the clock
+ (gst_alsa_sink_loop):
+ sync to the clock given to alsasink, not the own clock
+ * sys/oss/gstosssink.c: (gst_osssink_chain):
+ sync to the clock
+ (gst_osssink_change_state):
+ activate the clock
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
+ remove bogus code that made DISCONT events unhandled
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
+ explicitly case to double in _set_simple. (fixes 2nd warning in bug
+ #131502)
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_read_object_header),
+ (gst_asf_demux_handle_sink_event), (gst_asf_demux_audio_caps),
+ (gst_asf_demux_add_audio_stream), (gst_asf_demux_video_caps):
+ convert g_warning because of wrong asf data to GST_WARNINGs (fixes
+ 2nd warning in bug #131502)
+
+2004-01-14 Julien MOUTTE <julien@moutte.net>
+
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
+ (gst_videobalance_colorbalance_set_value),
+ (gst_videobalance_colorbalance_get_value): Fixing videobalance ranges
+ for colorbalance interface implementation.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+ (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+ (gst_ximagesink_dispose), (gst_ximagesink_init),
+ (gst_ximagesink_class_init): Adding DISPLAY property.
+ * sys/ximage/ximagesink.h: Adding display_name to store display.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+ (gst_xvimagesink_dispose), (gst_xvimagesink_init),
+ (gst_xvimagesink_class_init): Adding DISPLAY property and colorbalance
+ properties (they still need polishing though for gst-launch use : no
+ xcontext yet, i ll do that tomorrow).
+ * sys/xvimage/xvimagesink.h: Adding display_name to store display.
+
+2004-01-14 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+ (gst_play_set_location), (gst_play_set_visualization): Preparing
+ switch integration, adding videobalance in the pipeline.
+
+2004-01-14 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/colorbalance/colorbalance.c:
+ (gst_color_balance_class_init): Adding a default type.
+ * gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access
+ the type.
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type),
+ (gst_videobalance_dispose), (gst_videobalance_class_init),
+ (gst_videobalance_init), (gst_videobalance_interface_supported),
+ (gst_videobalance_interface_init),
+ (gst_videobalance_colorbalance_list_channels),
+ (gst_videobalance_colorbalance_set_value),
+ (gst_videobalance_colorbalance_get_value),
+ (gst_videobalance_colorbalance_init): Implementing colorbalance
+ interface.
+ * gst/videofilter/gstvideobalance.h: Adding colorbalance channels
+ list.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a
+ bug which was triggering a BadAccess X error when setting an overlay
+ before pad was really negotiated.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init):
+ Using the colorbalance type macro.
+
+2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
+ (gst_flacenc_chain):
+ handle tags correctly
+ * gst/tags/gstid3tag.c: (gst_tag_list_new_from_id3v1):
+ extract ID3v1 tags correctly
+
+2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/typefind/gsttypefindfunctions.c: (matroska_type_find),
+ (plugin_init):
+ Improve matroska typefinding for odd-typed headers...
+
+2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
+ Fix for using incremental number on padnames.
+
+2004-01-14 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxenc.c:
+ Set category to divx4linux instead of divx (too generic).
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+ (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
+ (gst_wavparse_loop), (gst_wavparse_change_state):
+ * gst/wavparse/gstwavparse.h:
+ fix parsing of WAV files with non-standard fmt-tag size and fix
+ skipping of unrecognized chunks... Someone please fix this thing
+ to use rifflib so all this is automated.
+ * sys/v4l/Makefile.am:
+ * sys/v4l2/Makefile.am:
+ Add X_CFLAGS because we depend on X (for overlay).
+
+2004-01-14 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Don't issue a timestamp unless we tagged the frame
+ with a PTS.
+
+2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback):
+ Query the audio element to get the time, not the clock. We're
+ interested in the element's time here.
+
+2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/aalib/gstaasink.c: (gst_aasink_chain):
+ * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+ * ext/esd/esdsink.c: (gst_esdsink_chain):
+ * ext/libcaca/gstcacasink.c: (gst_cacasink_chain):
+ * ext/mas/massink.c: (gst_massink_chain):
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_chain):
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_index),
+ (gst_matroska_demux_parse_metadata):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop),
+ (gst_mpeg_parse_release_locks):
+ * gst/tcp/gsttcpsink.c: (gst_tcpsink_chain):
+ * gst/udp/gstudpsink.c: (gst_udpsink_chain):
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+ * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+ (gst_osssink_change_state):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+ * sys/xvideo/xvideosink.c: (gst_xvideosink_chain),
+ (gst_xvideosink_release_locks):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
+ use element time.
+ * ext/alsa/gstalsaclock.c: (gst_alsa_clock_start),
+ (gst_alsa_clock_stop):
+ * gst-libs/gst/audio/audioclock.c: (gst_audio_clock_set_active),
+ (gst_audio_clock_get_internal_time):
+ simplify for use with new clocking code.
+ * testsuite/alsa/Makefile.am:
+ * testsuite/alsa/sinesrc.c: (sinesrc_init), (sinesrc_force_caps):
+ fix testsuite for new caps system
+
+2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
+ * ext/flac/gstflacenc.c: (add_one_tag):
+ length is already host endian, no need to convert. Fixes playback of
+ tagged files on PPC. (bug #128384)
+
+2004-01-13 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/colorbalance/colorbalance.h: Adding a type to the
+ colorbalance interface stating if it is hardware based or software
+ based.
+ * gst/videofilter/gstvideobalance.c: (gst_videobalance_planar411):
+ Removing a trailing comma.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_colorbalance_init): Integrating a patch from Jon
+ Trowbridge <trow@ximian.com> querying Xv adaptor for min/max value as
+ the documentation seems to be wrong on the -1000 to 1000 interval.
+
+2004-01-12 David Schleef <ds@schleef.org>
+
+ * gst/debug/efence.c: (gst_efence_init), (gst_efence_chain),
+ (gst_efence_buffer_alloc), (gst_fenced_buffer_new),
+ (gst_fenced_buffer_default_free), (gst_fenced_buffer_default_copy):
+ Fix negotiation. Add a bufferalloc function for the sink pad,
+ and generally clean up some of the code.
+
+2004-01-12 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/colorbalance/colorbalancechannel.c:
+ (gst_color_balance_channel_dispose): Adding safety check in dispose
+ method.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_xcontext_clear),
+ (gst_xvimagesink_interface_supported),
+ (gst_xvimagesink_colorbalance_list_channels),
+ (gst_xvimagesink_colorbalance_set_value),
+ (gst_xvimagesink_colorbalance_get_value),
+ (gst_xvimagesink_colorbalance_init), (gst_xvimagesink_get_type):
+ Adding colorbalance interface support to set XV parameters such as
+ HUE, BRIGHTNESS, CONTRAST, SATURATION.
+ * sys/xvimage/xvimagesink.h: Adding the channels list for colorbalance
+ interface.
+
+2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_get_type),
+ (gst_audio_convert_class_init), (gst_audioconvert_getcaps),
+ (gst_audio_convert_init), (gst_audio_convert_set_property),
+ (gst_audio_convert_get_property), (gst_audio_convert_chain),
+ (gst_audio_convert_link),
+ (gst_audio_convert_buffer_to_default_format),
+ (gst_audio_convert_buffer_from_default_format), (plugin_init):
+ - implement _getcaps and use it
+ - improve linking
+ - remove float caps since no float conversion is actually done
+ - remove properties and arguments that were to be used for rate
+ conversion
+
+2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-libs/gst/audio/audio.c: (_gst_audio_structure_set_list),
+ (gst_audio_structure_set_int):
+ * gst-libs/gst/audio/audio.h:
+ add helper functions for _getcaps matching the standard audio
+ templates
+
+2004-01-12 David Schleef <ds@schleef.org>
+
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+ Test that pad is negotiated before getting its caps.
+
+2004-01-12 Julien MOUTTE <julien@moutte.net>
+
+ * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element): When
+ analyzing the pads of an element the bin is mostly in READY state so
+ no caps were negotiated. This helper function needs to work with
+ _get_caps directly then. I was not freeing them though, added that to
+ fix the mem leak.
+
+2004-01-12 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Fixing the
+ direct put buffers detection. I prefer checking GST_BUFFER_PRIVATE
+ than the free_func.
+
+2004-01-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * sys/oss/gstossaudio.c: (plugin_init):
+ * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+ * sys/oss/gstosselement.h:
+ make an oss debugging category
+ make failure more descriptive
+
+2004-01-11 David Schleef <ds@schleef.org>
+
+ * ext/ffmpeg/gstffmpeg.c:
+ * ext/ffmpeg/gstffmpegcodecmap.c:
+ * ext/ffmpeg/gstffmpegdec.c:
+ * ext/ffmpeg/gstffmpegenc.c:
+ * ext/ffmpeg/gstffmpegprotocol.c:
+ * ext/gdk_pixbuf/gstgdkanimation.c:
+ * ext/jpeg/gstjpeg.c:
+ * ext/libpng/gstpng.c:
+ * ext/mpeg2dec/perftest.c:
+ * ext/speex/gstspeex.c:
+ * gst-libs/gst/resample/dtos.c:
+ * gst/intfloat/gstintfloatconvert.c:
+ * gst/oneton/gstoneton.c:
+ * gst/rtjpeg/RTjpeg.c:
+ * gst/rtp/gstrtp.c:
+ * sys/dxr3/dxr3init.c:
+ * sys/glsink/gstgl_nvimage.c:
+ * sys/glsink/gstgl_pdrimage.c:
+ * sys/glsink/gstglsink.c:
+ * testsuite/gst-lint:
+ Make sure everybody wraps #include "config.h" in #ifdef HAVE_CONFIG_H
+
+2004-01-11 David Schleef <ds@schleef.org>
+
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_set_caps):
+ * ext/faac/gstfaac.c: (gst_faac_sinkconnect):
+ * ext/gdk_pixbuf/gstgdkanimation.c:
+ (gst_gdk_animation_iter_create_pixbuf):
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+ (gst_gdk_pixbuf_chain):
+ * ext/gdk_pixbuf/gstgdkpixbuf.h:
+ * ext/jack/gstjack.c: (gst_jack_change_state):
+ * ext/xvid/gstxviddec.c: (gst_xviddec_sink_link):
+ * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element):
+ * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
+ * gst/videofilter/gstvideofilter.c:
+ (gst_videofilter_set_output_size):
+ Remove all usage of gst_pad_get_caps(), and replace it with
+ gst_pad_get_allowed_caps() or gst_pad_get_negotiated_cap().
+
+2004-01-11 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ * ext/Makefile.am: Fixes to make ext/libcaca compile.
+ * ext/divx/gstdivxdec.c:
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+ (gst_gdk_pixbuf_init), (gst_gdk_pixbuf_chain): Make gdkpixbufdec
+ handle images that span multiple buffers. Now work with both
+ filesrc ! gdkpixbufdec and qtdemux ! gdkpixbufdec.
+ * ext/gdk_pixbuf/gstgdkpixbuf.h:
+ * ext/libcaca/gstcacasink.h: Fixes needed due to recent
+ video/video.h changes
+ * ext/xvid/gstxvid.c: (gst_xvid_csp_to_caps): same
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+ (gst_v4lmjpegsrc_buffer_free): Use buffer free function instead
+ of GstData free function.
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
+ same.
+
+2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/v4l2/gstv4l2element.c: (gst_v4l2element_class_init),
+ (gst_v4l2element_dispose), (gst_v4l2element_set_property),
+ (gst_v4l2element_get_property):
+ * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults), (gst_v4l2_open):
+ add norm, channel and frequency properties.
+ * sys/v4l2/gstv4l2tuner.c:
+ fixes for tuner interface changes
+ * sys/v4l2/gstv4l2element.h:
+ * sys/v4l2/gstv4l2src.c:
+ * sys/v4l2/gstv4l2src.h:
+ * sys/v4l2/v4l2src_calls.c:
+ * sys/v4l2/v4l2src_calls.h:
+ rework v4l2src to work with saa1734 cards and allow mmaped buffers.
+
+2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init),
+ (gst_tuner_find_norm_by_name), (gst_v4l2_find_channel_by_name),
+ (gst_tuner_channel_changed), (gst_tuner_norm_changed),
+ (gst_tuner_frequency_changed), (gst_tuner_signal_changed):
+ * gst-libs/gst/tuner/tuner.h:
+ GObjects aren't const.
+ Add find_by_name functions.
+ Add checks to _changed functions.
+ * sys/v4l/gstv4ltuner.c: (gst_v4l_tuner_get_channel),
+ (gst_v4l_tuner_get_norm):
+ Fixes for above.
+
+2004-01-12 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/video/video.h:
+ Fix caps template names to be understandable.
+ Prefix everything with GST_VIDEO.
+ * ext/aalib/gstaasink.c:
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxenc.c:
+ * ext/gdk_pixbuf/gstgdkpixbuf.c:
+ * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
+ * ext/jpeg/gstjpegdec.c: (raw_caps_factory):
+ * ext/jpeg/gstjpegenc.c: (raw_caps_factory):
+ * ext/libcaca/gstcacasink.c:
+ * ext/libpng/gstpngenc.c: (raw_caps_factory):
+ * ext/snapshot/gstsnapshot.c:
+ * ext/swfdec/gstswfdec.c:
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ * gst/chart/gstchart.c:
+ * gst/deinterlace/gstdeinterlace.c:
+ * gst/effectv/gsteffectv.c:
+ * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+ * gst/goom/gstgoom.c:
+ * gst/median/gstmedian.c:
+ * gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
+ (gst_monoscope_srcconnect), (gst_monoscope_chain):
+ * gst/overlay/gstoverlay.c:
+ * gst/smooth/gstsmooth.c:
+ * gst/smpte/gstsmpte.c:
+ * gst/synaesthesia/gstsynaesthesia.c:
+ * gst/videocrop/gstvideocrop.c:
+ * gst/videodrop/gstvideodrop.c:
+ * gst/y4m/gsty4mencode.c:
+ * sys/qcam/gstqcamsrc.c:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
+ Make them work with new video.h file.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+ (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+ (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
+ Make it work with new buffer allocation system.
+
+2004-01-11 Julien MOUTTE <julien@moutte.net>
+
+ * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the
+ pad_alloc_buffer implementation to use ->srcpad
+ * ext/hermes/gstcolorspace.c: (gst_colorspace_chain): Fixing the
+ pad_alloc_buffer implementation to use ->srcpad
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Fixing the
+ pad_alloc_buffer implementation to use ->srcpad
+ * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+ (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
+ (gst_ximagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
+ a reference to everything we need.
+ * sys/ximage/ximagesink.h: adding a reference to the sink in the image.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+ (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+ (gst_xvimagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
+ a reference to everything we need.
+ * sys/xvimage/xvimagesink.h: adding a reference to the sink in the image
+
+2004-01-11 David Schleef <ds@schleef.org>
+
+ * ext/divx/gstdivxenc.c: remove bogus gst_caps_is_fixed() test
+ * gst/debug/efence.c: (gst_efence_chain), (gst_fenced_buffer_new),
+ (gst_fenced_buffer_default_copy): Fix for rename of buffer private
+ structure members.
+ * gst/effectv/gstwarp.c: (gst_warptv_setup): Don't reset the time
+ value during a resize/renegotiation.
+ * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain): use
+ gst_pad_alloc_buffer();
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+ (gst_v4lmjpegsrc_buffer_free): Fix for rename of buffer private
+ structure members.
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
+ Fix for rename of buffer private structure members.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+ (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
+ Fix for rename of buffer private structure members.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+ (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
+ Fix for rename of buffer private structure members.
+
+2004-01-11 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+ reviewed by: David Schleef <ds@schleef.org>
+
+ * gst/videofilter/Makefile.am:
+ * gst/videofilter/gstgamma.c: Gamma correction filter. Modified
+ from the patch by ds to fit in with recent make_filter changes.
+
+2004-01-11 Julien MOUTTE <julien@moutte.net>
+
+ * configure.ac: Adding examples/switch/Makefile
+ * examples/Makefile.am: Adding examples/switch
+ * examples/switch/Makefile.am: Adding switcher example.
+ * examples/switch/switcher.c: (got_eos), (idle_iterate),
+ (switch_timer), (main): Adding an example demonstrating switch usage
+ with 2 videotestsrc showing different patterns.
+ * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
+ (gst_switch_init): Fixing switch with the new caps system.
+
+2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/video/video.h:
+ Fix 32bit caps. Issue remaining: The macro names are chosen poorly.
+ They should probably be like
+ GST_VIDEO_PAD_TEMPLATE_CAPS_{RGB,BGR,RGBx,BGRx}.
+
+2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (qtdemux_parse_trak):
+ fix audio chunk size/timestamp calculation
+
+2004-01-11 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
+ fix SVQ3 caps
+
+2004-01-11 Steve Baker <steve@stevebaker.org>
+
+ * gst/effectv/gstaging.c: (gst_agingtv_get_type),
+ (gst_agingtv_base_init), (gst_agingtv_class_init),
+ (gst_agingtv_init), (gst_agingtv_setup), (gst_agingtv_rgb32),
+ (gst_agingtv_set_property), (gst_agingtv_get_property):
+ Port agingTV to videofilter
+
+2004-01-09 Julien MOUTTE <julien@moutte.net>
+
+ * ext/hermes/gstcolorspace.c: (gst_colorspace_chain):
+ Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+
+2004-01-09 Julien MOUTTE <julien@moutte.net>
+
+ * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain):
+ Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+ * gst-libs/gst/xoverlay/xoverlay.c:
+ (gst_x_overlay_got_desired_size): Updating doc for the xid being 0.
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
+ Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+ Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+ (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc),
+ (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init): Implementing
+ the bufferalloc_function to replace bufferpools, fixing the XOverlay
+ interface implementation to handle xid being 0 and fix some bugs
+ triggered by Benjamin's testcase.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+ (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc),
+ (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init): Implementing
+ the bufferalloc_function to replace bufferpools, fixing the XOverlay
+ interface implementation to handle xid being 0 and fix some bugs
+ triggered by Benjamin's testcase.
+
+2004-01-09 David Schleef <ds@schleef.org>
+
+ * ext/librfb/gstrfbsrc.c: Hacking. Added actual decoding and
+ mouse pointer events. It works.
+
+2004-01-09 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxenc.c: (gst_divxenc_init):
+ Use explicit caps - fix capsnego.
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ Remove macro-inside-macro which caused compile errors.
+ * gst-libs/gst/riff/riff-read.c: (gst_riff_read_header):
+ Error out if it's not a RIFF file. Else we error out without
+ gst_element_error() which is not good...
+
+2004-01-08 David Schleef <ds@schleef.org>
+
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
+ Fix pad_link function to handle formats that ffmpeg returns
+ as multiple caps structures.
+ * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
+ Only complain if source buffer is _smaller_ than expected.
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_init),
+ (gst_videoscale_handle_src_event): Resize navigation events
+ when passing them upstream.
+ * gst/videotestsrc/gstvideotestsrc.c:
+ * gst/videotestsrc/gstvideotestsrc.h:
+ * gst/videotestsrc/videotestsrc.c:
+ * gst/videotestsrc/videotestsrc.h:
+ Rewrite many of the buffer painting functions to handle odd
+ sizes (for many formats, size%4!=0 or size%8!=0). Most have
+ been verified to work with my video card.
+ * testsuite/gst-lint: Add check for elements calling
+ gst_pad_get_caps() instead of gst_pad_get_allowed_caps().
+
+2004-01-08 David Schleef <ds@schleef.org>
+
+ * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+ (gst_videodrop_link), (gst_videodrop_init): Fix negotiation.
+
+2004-01-08 Julien MOUTTE <julien@moutte.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents): A
+ configure event is not emiting the desired size signal. That fixes
+ aspect ratio issues with gst-player.
+
+2004-01-08 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/median/gstmedian.c: (gst_median_link), (gst_median_init):
+ Fix capsnego.
+
+2004-01-08 Julien MOUTTE <julien@moutte.net>
+
+ * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_create): Using XOverlay
+ public method to fire size signal.
+
+2004-01-07 Julien MOUTTE <julien@moutte.net>
+
+ * examples/gstplay/Makefile.am: Adding the interface library.
+ * gst-libs/gst/play/Makefile.am: Adding the interface library.
+ * gst-libs/gst/play/gstplay.c: (gst_play_set_video_sink): Connecting to the XOverlay size signal instead of GstVideoSink.
+ * gst-libs/gst/play/gstplay.h: Including the XOverlay interface to check
+ GST_IS_X_OVERLAY before signal connect.
+ * gst-libs/gst/video/gstvideosink.c: (gst_videosink_class_init):
+ Removing the have_video_size signal.
+ * gst-libs/gst/video/gstvideosink.h: Removing the have_video_size signal
+ and associated public method.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_sinkconnect): Using XOverlay public method to fire size
+ signal.
+ * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
+ (gst_xvideosink_xwindow_new): Using XOverlay public method to fire size
+ signal.
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sinkconnect):
+ Using XOverlay public method to fire size signal.
+
+2004-01-07 David Schleef <ds@schleef.org>
+
+ * gst/videofilter/Makefile.am:
+ * gst/videofilter/gstvideotemplate.c:
+ * gst/videofilter/make_filter:
+ Create gstvideoexample.c in a srcdir!=builddir friendly way.
+ Convert make_filter to /bin/sh script.
+
+2004-01-07 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/modplug/gstmodplug.cc: fix element description
+
+2004-01-07 Julien MOUTTE <julien@moutte.net>
+
+ * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
+ (got_video_size): Adding some new lines in g_print calls.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+ (gst_ximagesink_xwindow_destroy), (gst_ximagesink_xwindow_resize),
+ (gst_ximagesink_handle_xevents), (gst_ximagesink_fixate),
+ (gst_ximagesink_sinkconnect), (gst_ximagesink_change_state),
+ (gst_ximagesink_chain), (gst_ximagesink_buffer_new),
+ (gst_ximagesink_set_xwindow_id), (gst_ximagesink_get_desired_size):
+ Complete code review, reverting some stuff i disagree with, adding
+ some fixes : time synchronization on invalid timestamps, renegotiation
+ of private window.
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_destroy),
+ (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_handle_xevents),
+ (gst_xvimagesink_get_xv_support), (gst_xvimagesink_xcontext_get),
+ (gst_xvimagesink_fixate), (gst_xvimagesink_sinkconnect),
+ (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
+ (gst_xvimagesink_buffer_new),
+ (gst_xvimagesink_navigation_send_event),
+ (gst_xvimagesink_set_xwindow_id),
+ (gst_xvimagesink_get_desired_size),
+ (gst_xvimagesink_xoverlay_init): Complete code review, reverting some
+ stuff i disagree with, adding some fixes : Renegotiation of private
+ window, implementing get_desired_size.
+
+2004-01-07 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/audiofile/gstafsink.c: (gst_afsink_init), (gst_afsink_chain),
+ (gst_afsink_handle_event):
+ * ext/jpeg/gstjpegenc.c: (gst_jpegenc_init):
+ * gst/avi/gstavimux.c: (gst_avimux_request_new_pad):
+ * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_init):
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_init):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_init):
+ Fix for instantiate-test (see core). Also remove dead code from
+ jpegenc (which still needs fixing, but that's lower on my TODO
+ list...).
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+ Never return NULL as caps.
+
+2004-01-07 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/librfb/Makefile.am:
+ * ext/librfb/gstrfbsrc.c:
+ New source plugin based on librfb-0.1. RFB (remote framebuffer)
+ is the protocol used by VNC.
+
+2004-01-07 David Schleef <ds@schleef.org>
+
+ * gst/videofilter/gstvideotemplate.c:
+ * gst/videofilter/gstvideotemplate.h:
+ * gst/videofilter/make_filter:
+ Merge videotemplate header into source file.
+ * gst/effectv/Makefile.am:
+ * gst/effectv/gsteffectv.c: (plugin_init):
+ * gst/effectv/gstwarp.c:
+ Make warpTV a subclass of videofilter.
+
+2004-01-07 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+ Add guard against invalid utf-8 conversions in mad. Just in case.
+
+2004-01-07 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
+ Fix for bug shown by poisoning
+
+2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+ (gst_v4lmjpegsrc_buffer_free):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
+ (gst_v4lsrc_srcconnect), (gst_v4lsrc_getcaps), (gst_v4lsrc_get),
+ (gst_v4lsrc_buffer_free):
+ Fix for removed bufferpools.
+
+2004-01-07 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+ Fix caps negotiation.
+
+ * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
+ (dvdnavsrc_update_buttoninfo), (dvdnavsrc_get),
+ (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
+ (dvdnavsrc_event):
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ * gst-libs/gst/navigation/navigation.c:
+ (gst_navigation_send_key_event), (gst_navigation_send_mouse_event):
+ * gst-libs/gst/navigation/navigation.h:
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_handle_src_event):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+ Super-simple first version of mouse and keyboard events. Clicking
+ on a DVD menu now works, although it may not take you where you
+ expected.
+
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_src_fixate):
+ These fixate functions were broken - they never actually
+ fixated :)
+
+2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/shout/gstshout.c: (gst_icecastsend_base_init),
+ (gst_icecastsend_init):
+ fix for new caps system.
+ * gst-libs/gst/mixer/mixertrack.h:
+ * sys/oss/gstossmixer.c: (gst_ossmixer_build_list):
+ Add 'master track' flag (for tools like ACME that only want to
+ change the main volume).
+
+2004-01-07 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/xvid/gstxvid.c: (gst_xvid_structure_to_csp),
+ (gst_xvid_csp_to_caps):
+ * ext/xvid/gstxviddec.c: (gst_xviddec_src_getcaps):
+ * ext/xvid/gstxvidenc.c:
+ ifdef out ARGB type when it isn't available
+ in xvidcore 1.0.0beta2
+
+2004-01-06 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+ When we have received a new SCR right in the first buffer after
+ a seek (so in the same cycle that handles the discont), we should
+ handle the buffer instead of unreffing it, else we lose data.
+
+2004-01-06 Iain <iain@prettypeople.org>
+
+ * gst/intfloat/gstint2float.c (gst_int2float_link): Set the
+ buffer-frames caps too.
+
+ * gst/oneton/gstoneton.c (gst_oneton_sink_connect): Only create the new
+ caps that we need, don't destroy them all and rebuild them. And when
+ creating src pads, use the src pad template rather than the sink...
+
+2004-01-05 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+ Add pad to element *after* setting functions such as event handler.
+ Without this, the scheduler (opt) will link pads, set the event
+ handler from the default event function (dispatcher in gstpad.c)
+ and *after* that, we will set our own event function, which will
+ thus never be used (and thus mpegdemux doesn't handle events).
+
+2004-01-04 David Schleef <ds@schleef.org>
+
+ Fix the fixate functions to handle new prototype:
+ * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_videotestsrc_src_fixate):
+ * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_fixate):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate):
+
+2004-01-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/ximage/ximagesink.h:
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+ (gst_ximagesink_xwindow_destroy), (gst_ximagesink_sinkconnect),
+ (gst_ximagesink_change_state), (gst_ximagesink_set_xwindow_id),
+ (gst_ximagesink_xoverlay_init):
+ assorted fixes to make (re)embedding work
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect),
+ (gst_ximagesink_get_desired_size):
+ implement desired size additions to XOverlay
+
+2004-01-04 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init),
+ (gst_x_overlay_got_xwindow_id), (gst_x_overlay_get_desired_size),
+ (gst_x_overlay_got_desired_size):
+ * gst-libs/gst/xoverlay/xoverlay.h:
+ Add optional "desired size" signal and querying.
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_blockgroup):
+ Fix EBML-laced block parsing. Diffs are relative to previous
+ lace, not the first lace. Thanks to Mosu from the Matroska
+ team for detecting this.
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+ (gst_wavparse_parse_fmt), (gst_wavparse_getcaps),
+ (gst_wavparse_handle_sink_event), (gst_wavparse_loop),
+ (gst_wavparse_change_state):
+ * gst/wavparse/gstwavparse.h:
+ Quickfix for capsnego.
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/wavenc/gstwavenc.c: (set_property), (gst_wavenc_init):
+ Fix indenting, fix pad creation.
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/xvid/gstxviddec.c: (gst_xviddec_init),
+ (gst_xviddec_src_getcaps), (gst_xviddec_src_link),
+ (gst_xviddec_sink_link):
+ Implement src_getcaps() so proper size caps is negotiated.
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/flac/gstflacdec.c: (gst_flacdec_loop):
+ Finish flac decoder on EOS. See #116178.
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_src_getcaps),
+ (gst_matroska_demux_add_stream):
+ * gst/matroska/matroska-ids.h:
+ Add getcaps() function to fix capsnego...
+
+2004-01-04 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+ (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+ Fix more integer overflows. Again, see #126967.
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mpeg2dec/gstmpeg2dec.c:
+ Add support for mpeg2dec-0.4.0 (released two weeks ago). See
+ #130416.
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ * ext/xvid/gstxvid.c: (gst_xvid_init), (gst_xvid_error),
+ (gst_xvid_structure_to_csp), (gst_xvid_csp_to_caps):
+ * ext/xvid/gstxvid.h:
+ * ext/xvid/gstxviddec.c: (gst_xviddec_class_init),
+ (gst_xviddec_init), (gst_xviddec_setup), (gst_xviddec_chain),
+ (gst_xviddec_src_link), (gst_xviddec_sink_link),
+ (gst_xviddec_change_state):
+ * ext/xvid/gstxviddec.h:
+ * ext/xvid/gstxvidenc.c: (gst_xvidenc_profile_get_type),
+ (gst_xvidenc_base_init), (gst_xvidenc_class_init),
+ (gst_xvidenc_init), (gst_xvidenc_setup), (gst_xvidenc_chain),
+ (gst_xvidenc_link), (gst_xvidenc_set_property),
+ (gst_xvidenc_get_property), (gst_xvidenc_change_state):
+ * ext/xvid/gstxvidenc.h:
+ Update xvid plugin to latest xvid (1.0.0-beta3) API.
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/rtp/rtp-packet.c:
+ Add sys/types.h include, since OS X doesn't define in_addr_t
+ in netinet/in.h, like it does on Linux (see #129600).
+
+2004-01-03 Thomas Canty <tommydal@optushome.com.au>
+
+ reviewed by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_dispose):
+ Correct logic of dispose function (see #129306).
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
+ (gst_mpeg_parse_init):
+ * gst/mpegstream/gstmpegparse.h:
+ Remove clock (which was never provided, i.e. dead code), and
+ also fix integer overflows at high PTS values (see #126967).
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/flac/gstflacdec.c:
+ * ext/libpng/gstpngenc.h:
+ * ext/mikmod/gstmikmod.h:
+ OS X fixes (see #126628).
+
+2004-01-02 David Schleef <ds@schleef.org>
+
+ * ext/alsa/gstalsasrc.c: (gst_alsa_src_pad_factory),
+ (gst_alsa_src_base_init): Remove bogus "src" request pad.
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_base_init),
+ (gst_mpeg_parse_class_init): Move pad template registration
+ to class_init, since the derived class (mpegdemux) doesn't
+ want them.
+
+2004-01-03 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/Makefile.am:
+ * sys/xvideo/Makefile.am:
+ * sys/xvimage/Makefile.am:
+ Move interface libs from LDFLAGS to LIBADD, fix relocation errors
+ after installation (see #127664).
+
+2004-01-02 David Schleef <ds@schleef.org>
+
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_init),
+ (gst_ffmpegenc_connect): Negotiation fixes.
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+ Remove inappropriate gst_caps_free().
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+ Reenable Ronald's internal resize code, since the core handles
+ it correctly now.
+
+2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_init):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init), (gst_v4lsrc_init):
+ Fix pad template stuff.
+
+2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/matroska/ebml-read.c: (gst_ebml_read_sint):
+ * gst/matroska/ebml-write.c: (gst_ebml_write_sint):
+ fix signed integer reading/writing.
+
+2004-01-02 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/README:
+ Remove outdated document
+
+2004-01-03 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/cutter/gstcutter.c: (gst_cutter_init):
+ src pad was being created twice - oops.
+
+2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+ Comment out internal resize. It doesn't handle the resulting
+ XEvent internally, does another try_set_caps() which leads to
+ a really nice loop.
+ Real fix will come when Julien and Dave are awake. ;).
+
+2004-01-02 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ fix const/nonconst compile issue.
+
+2004-01-02 David Schleef <ds@schleef.org>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate),
+ (gst_xvimagesink_sinkconnect), (gst_xvimagesink_init):
+ Add fixate function and a check for bad formats.
+
+2004-01-01 David Schleef <ds@schleef.org>
+
+ Negotiation fixes:
+ * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link),
+ (gst_audiofilter_init):
+ * gst/debug/efence.c: (gst_efence_init):
+ * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
+ (gst_deinterlace_init):
+ * gst/volume/gstvolume.c: (volume_connect):
+
+2004-01-01 David Schleef <ds@schleef.org>
+
+ Convert elements to use gst_pad_use_explicit_caps() where
+ appropriate:
+ * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_reneg):
+ * ext/audiofile/gstafparse.c: (gst_afparse_init),
+ (gst_afparse_open_file):
+ * ext/audiofile/gstafsrc.c: (gst_afsrc_init),
+ (gst_afsrc_open_file):
+ * ext/esd/esdmon.c: (gst_esdmon_init), (gst_esdmon_get):
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
+ (gst_ffmpegdec_chain):
+ * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+ * ext/flac/gstflacdec.c: (gst_flacdec_init), (gst_flacdec_write):
+ * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_init),
+ (gst_gdk_pixbuf_chain):
+ * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init), (gst_jpegdec_link),
+ (gst_jpegdec_chain):
+ * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+ * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
+ (gst_mikmod_negotiate):
+ * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+ (gst_mpeg2dec_negotiate_format):
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+ * ext/speex/gstspeexdec.c: (gst_speexdec_init),
+ (gst_speexdec_sinkconnect):
+ * ext/swfdec/gstswfdec.c: (gst_swfdec_loop), (gst_swfdec_init):
+ * ext/vorbis/vorbisfile.c: (gst_vorbisfile_init),
+ (gst_vorbisfile_new_link):
+ * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init),
+ (gst_ac3parse_chain):
+ * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream),
+ (gst_asf_demux_setup_pad):
+ * gst/auparse/gstauparse.c: (gst_auparse_init),
+ (gst_auparse_chain):
+ * gst/id3/gstid3types.c: (gst_id3types_loop):
+ * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
+ * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+ (mp1videoparse_parse_seq):
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
+ (bpf_from_header):
+ * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+ (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_lpcm_set_caps):
+ * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+ (gst_mpeg_parse_send_data):
+ * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+ (gst_qtdemux_add_stream):
+ * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+ (gst_wavparse_parse_fmt):
+
+2004-01-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Fix configure check for mpeg2enc. We need 1.6.1.93 instead of
+ 1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and
+ it therefore uses the wrong include paths. Too bad... Note
+ that 1.6.1.93 is not release yet. ;).
+ Also add a check for mplex, which is now using the lib'ified
+ mplex from mjpegtools, too.
+ * ext/ffmpeg/gstffmpegcodecmap.c:
+ Add codec_tag for 3ivx/xvid. For xvid, this should fix playback
+ issues. I don't think ffmpeg handles 3ivx correctly, so this
+ probably won't work. But it won't hurt either.
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect),
+ (gst_ffmpegdec_chain):
+ * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect),
+ (gst_ffmpegenc_chain_audio):
+ Fix memleak in audio encoding. Close codec if open fails, this
+ calls the cleanup routines so we can re-use the context.
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ Fix pad template names/types, fix memory issue with getcaps().
+ * ext/mpeg2enc/gstmpeg2encoder.cc:
+ * ext/mpeg2enc/gstmpeg2encoder.hh:
+ Fix compile issue with new caps system (const thingy).
+ * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+ * ext/mpeg2enc/gstmpeg2encpicturereader.hh:
+ We read a first frame right on initing, so that we have a caps
+ when we init the output. This caps is cached in padprivate and
+ read as first frame.
+ * ext/mplex/Makefile.am:
+ * ext/mplex/gstmplex.cc:
+ * ext/mplex/gstmplex.h:
+ * ext/mplex/gstmplex.hh:
+ * ext/mplex/gstmplexibitstream.cc:
+ * ext/mplex/gstmplexibitstream.hh:
+ * ext/mplex/gstmplexjob.cc:
+ * ext/mplex/gstmplexjob.hh:
+ * ext/mplex/gstmplexoutputstream.cc:
+ * ext/mplex/gstmplexoutputstream.hh:
+ We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin
+ had issues, didn't do capsnego, supported only a subset of the
+ mplex features and required a mplex fork in our local CVS. Plus
+ that it worked agaist a very old mplex version. Rewriting was
+ faster than updating it.
+ * gst-libs/ext/Makefile.am:
+ * gst-libs/ext/mplex/INSTRUCT:
+ * gst-libs/ext/mplex/Makefile.am:
+ * gst-libs/ext/mplex/README:
+ * gst-libs/ext/mplex/TODO:
+ * gst-libs/ext/mplex/ac3strm_in.cc:
+ * gst-libs/ext/mplex/audiostrm.hh:
+ * gst-libs/ext/mplex/audiostrm_out.cc:
+ * gst-libs/ext/mplex/aunit.hh:
+ * gst-libs/ext/mplex/bits.cc:
+ * gst-libs/ext/mplex/bits.hh:
+ * gst-libs/ext/mplex/buffer.cc:
+ * gst-libs/ext/mplex/buffer.hh:
+ * gst-libs/ext/mplex/fastintfns.h:
+ * gst-libs/ext/mplex/format_codes.h:
+ * gst-libs/ext/mplex/inputstrm.cc:
+ * gst-libs/ext/mplex/inputstrm.hh:
+ * gst-libs/ext/mplex/lpcmstrm_in.cc:
+ * gst-libs/ext/mplex/mjpeg_logging.cc:
+ * gst-libs/ext/mplex/mjpeg_logging.h:
+ * gst-libs/ext/mplex/mjpeg_types.h:
+ * gst-libs/ext/mplex/mpastrm_in.cc:
+ * gst-libs/ext/mplex/mpegconsts.cc:
+ * gst-libs/ext/mplex/mpegconsts.h:
+ * gst-libs/ext/mplex/mplexconsts.hh:
+ * gst-libs/ext/mplex/multplex.cc:
+ * gst-libs/ext/mplex/outputstream.hh:
+ * gst-libs/ext/mplex/padstrm.cc:
+ * gst-libs/ext/mplex/padstrm.hh:
+ * gst-libs/ext/mplex/stillsstream.cc:
+ * gst-libs/ext/mplex/stillsstream.hh:
+ * gst-libs/ext/mplex/systems.cc:
+ * gst-libs/ext/mplex/systems.hh:
+ * gst-libs/ext/mplex/vector.cc:
+ * gst-libs/ext/mplex/vector.hh:
+ * gst-libs/ext/mplex/videostrm.hh:
+ * gst-libs/ext/mplex/videostrm_in.cc:
+ * gst-libs/ext/mplex/videostrm_out.cc:
+ * gst-libs/ext/mplex/yuv4mpeg.cc:
+ * gst-libs/ext/mplex/yuv4mpeg.h:
+ * gst-libs/ext/mplex/yuv4mpeg_intern.h:
+ * gst-libs/ext/mplex/yuv4mpeg_ratio.cc:
+ We don't fork mjpegtools' mplex in our CVS anymore.
+ * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps),
+ (gst_avi_demux_add_stream):
+ * gst/avi/gstavidemux.h:
+ Add getcaps() function for proper caps nego. This makes some
+ parts of AVI playback/reading work.
+ * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+ Resize window on new capsnego. This is probably wrong, but
+ I'm still committing it because with current capsnego, the
+ first successfull capsnego is auto-fixated, therefore rounded
+ down to the lowest values in the caps. this results in a 16x16
+ XWindow that is not reized when real capsnego finishes.
+ Dave, I see more cases of this, do you know a proper solution?
+ * tools/gst-launch-ext.in:
+ Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
+
+2003-12-31 David Schleef <ds@schleef.org>
+
+ * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_get):
+ Change gst_pad_proxy_link() to gst_pad_try_set_caps()
+
+2003-12-30 David Schleef <ds@schleef.org>
+
+ * ext/ffmpeg/gstffmpegcolorspace.c:
+ (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
+ (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_init),
+ (gst_ffmpegcsp_chain): Negotiation fixes
+ * ext/mad/gstmad.c: (gst_mad_chain): Negotiation fixes
+ * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
+ (gst_audio_convert_link), (gst_audio_convert_channels):
+ * gst/audioscale/gstaudioscale.c: (gst_audioscale_getcaps),
+ (gst_audioscale_link), (gst_audioscale_get_buffer),
+ (gst_audioscale_chain): Negotiation fixes
+ * gst/audioscale/gstaudioscale.h:
+ * gst/videofilter/gstvideofilter.c:
+ (gst_videofilter_format_get_structure), (gst_videofilter_getcaps),
+ (gst_videofilter_link), (gst_videofilter_init),
+ (gst_videofilter_set_output_size), (gst_videofilter_setup),
+ (gst_videofilter_find_format_by_structure):
+ * gst/videofilter/gstvideofilter.h: Negotiation fixes
+ * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
+ (gst_videoscale_link):
+ * gst/videoscale/videoscale.c: (videoscale_get_structure),
+ (videoscale_find_by_structure), (gst_videoscale_setup):
+ * gst/videoscale/videoscale.h: Negotiation fixes
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_fixate), (gst_ximagesink_init): Add a fixate
+ function, restrict resizing to a multiple of 4 (hack until
+ everyone supports odd sizes correctly).
+
+2003-12-29 Colin Walters <walters@verbum.org>
+
+ * ext/esd/esdsink.c (gst_esdsink_link): Fix typo; get depth instead of
+ signed.
+
+2003-12-30 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * ext/sndfile/gstsf.c: (gst_sf_loop):
+ Fix warning about discarding const qualifier
+
+2003-12-27 Jeremy Simon <jesimon@libertysurf.fr>
+
+ * gst/cutter/gstcutter.c:
+ * gst/videoscale/gstvideoscale.c:
+ * gst/volenv/gstvolenv.c:
+ * gst-libs/gst/audio/audio.c:
+ * gst-libs/gst/video/video.c:
+ Fix warnings
+
+2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
+ Don't send ALSA debugging to stderr.
+ * ext/alsa/gstalsa.h:
+ Use GST_WARNING instead of g_warning when ALSA functions fail.
+
+2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+ Free XVAdapterInfo correctly.
+
+2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
+ (gst_id3_tag_do_caps_nego), (gst_id3_tag_src_link):
+ Make id3tag use correct caps nego.
+
+2003-12-27 Amaury Jacquot <sxpert@esitcom.org>
+
+ * ext/ivorbis/vorbis.c:
+ * ext/ivorbis/vorbisenc.h:
+ * ext/ivorbis/vorbisfile.c:
+ Modify so that it uses the new caps things
+
+2003-12-27 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * testsuite/spider/spider1.c: (main):
+ * testsuite/spider/spider2.c: (main):
+ * testsuite/spider/spider3.c: (main):
+ Make tests compile again. They probably don't work.
+
+2003-12-24 Colin Walters <walters@verbum.org>
+
+ * sys/oss/gstosssink.c (gst_osssink_sink_fixate): Return NULL if
+ we can't fixate the caps anymore.
+
+2003-12-23 David Schleef <ds@schleef.org>
+
+ * gst/volume/gstvolume.c: (volume_init): Proxy getcaps.
+ * sys/oss/gstosssink.c: (gst_osssink_init),
+ (gst_osssink_sink_fixate): Add fixate function.
+
+2003-12-24 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c:
+ * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_getcaps),
+ (gst_ffmpegcsp_srcconnect_func), (gst_ffmpegcsp_sinkconnect),
+ (gst_ffmpegcsp_srcconnect), (gst_ffmpegcsp_get_type),
+ (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
+ (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
+ (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
+ (gst_ffmpegcsp_get_property), (gst_ffmpegcsp_register):
+ fix typo in RGB masks, and move back to "old" colorspace
+ capsnego code until whoever wrote this new crap has actually
+ tested it so that it works.
+ And yes, this works, keep it that way please.
+
+2003-12-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * ext/divx/gstdivxdec.c: (gst_divxdec_base_init),
+ (gst_divxdec_init), (gst_divxdec_negotiate):
+ * ext/divx/gstdivxdec.h:
+ * ext/divx/gstdivxenc.c: (gst_divxenc_base_init),
+ (gst_divxenc_init):
+ * ext/faac/gstfaac.c: (gst_faac_base_init), (gst_faac_init),
+ (gst_faac_sinkconnect), (gst_faac_srcconnect):
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mpeg2enc/gstmpeg2encoder.cc:
+ * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+ * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_base_init),
+ (dxr3audiosink_init), (dxr3audiosink_pcm_sinklink):
+ * sys/dxr3/dxr3spusink.c: (dxr3spusink_base_init),
+ (dxr3spusink_init):
+ * sys/dxr3/dxr3videosink.c: (dxr3videosink_base_init),
+ (dxr3videosink_init):
+ Fix caps breakage after Dave's caps branch merge.
+
+2003-12-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+ Fix for 24bpp display.
+
+2003-12-23 Colin Walters <walters@verbum.org>
+
+ * ext/gnomevfs/gstgnomevfssink.c: Add ARG_HANDLE property that takes
+ a GnomeVFSHandle directly.
+
+2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/volume/Makefile.am:
+ * gst/volume/gstvolume.c: (volume_connect), (volume_parse_caps),
+ (volume_base_init), (volume_init):
+ Reenable volume element and fix to work with new caps stuff.
+ Rhythmbox needs this.
+
+2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/qtdemux/qtdemux.c: (plugin_init):
+ qtdemux requires bytestream
+
+2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_link):
+ Fix remaining caps handling errors due to CAPS merge.
+
+2003-12-22 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_init),
+ (gst_faad_sinkconnect), (gst_faad_srcgetcaps),
+ (gst_faad_srcconnect):
+ Port to new caps system.
+
+2003-12-21 Julien MOUTTE <julien@moutte.net>
+
+ * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
+ (got_video_size), (main): using g_print instead of g_message.
+ * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup): Fixing EOS
+ signal which was not emitted because of "switch" element added to the
+ bin but not connected. (Removing from the bin temporarily)
+
+2003-12-21 Julien MOUTTE <julien@moutte.net>
+
+ * configure.ac: X_DISPLAY_MISSING is set to 1 if AC_PATH_XTRA fails to
+ find X development files. I don't understand the previous tests and
+ they fail on my debian/ppc unstable. This one works.
+ * examples/gstplay/player.c: (main): Set the pipeline to READY before
+ exiting.
+ * gst-libs/gst/play/gstplay.c: (gst_play_get_length_callback),
+ (gst_play_set_video_sink), (gst_play_set_audio_sink),
+ (gst_play_set_visualization): Add some safety checks in set_ methods
+ and state_change. This was throwing some ugly CRITICAL messages when
+ pipeline was getting disposed and casts were failing.
+
+2003-12-21 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+ * configure.ac:
+ Improve mpeg2enc detection. This is for distributions that do
+ ship mjpegtools, but without mpeg2enc. Also does object check
+ for might there ever be ABI incompatibility.
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ Add Andrew as second maintainer (he's helping me), and also add
+ an error if no caps was set. This happens if I pull before capsnego
+ and that's something I should solve sometime else.
+ * gst/matroska/matroska-demux.c:
+ (gst_matroska_demux_parse_blockgroup):
+ Fix time parsing.
+ * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link),
+ (gst_matroska_mux_track_header):
+ Add caps to templates.
+ * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory):
+ Add mpegversion=1 to prevent confusion with MPEG/AAC.
+ * gst/mpegstream/gstmpegdemux.c:
+ Remove layer since it causes warnings about unfixed caps.
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+ Fix obvious typo (we error out if caps were set, we should of
+ course error out if *no* caps were set).
+ * sys/oss/gstosselement.c: (gst_osselement_convert):
+ Fix format conversion, we confused bits/bytes.
+ * sys/oss/gstosselement.h:
+ Improve documentation for 'bps'.
+ * sys/v4l/TODO:
+ Remove stuff about plugins that need removing - this was done
+ ages ago.
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init),
+ (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert),
+ (gst_v4lsrc_src_query):
+ * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
+ (gst_v4l2src_src_convert), (gst_v4l2src_src_query):
+ Add get_query_types(), get_formats() and query() functions.
+
+2003-12-21 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins
+ * moved CVS to freedesktop.org
+
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
--- /dev/null
+When porting a plugin start with 0.8 CVS head, not the old code in this module. There are many bugfixes which have gone into 0.8 which you want to keep.
+
+List of ported plugins (update when you commit a ported plugin):
+effectv (wim)
+mad (wim)
+videofilter (wim)
+aalib (wim)
+libcaca (zeeshan)
+law (wim)
+shout2 (zaheer) - not fully tested
+esdsink (arwed)
+
+osssink is partially done in the threaded branch (wim)
+
+- Remember that some plugins are already ported and now in the gst-plugins-base module.
+
+When you have ported a plugin remember to copy the relevant parts from configure.ac.orig into configure.ac and re-enable it in the Makefile.am files.
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-a52dec
+ * @title: a52dec
+ *
+ * Dolby Digital (AC-3) audio decoder.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 dvdreadsrc title=1 ! mpegpsdemux ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Play audio part of a dvd title.
+ * |[
+ * gst-launch-1.0 filesrc location=abc.ac3 ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decode and play a stand alone AC-3 file.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <gst/gst.h>
+
+#include <a52dec/a52.h>
+#if !defined(A52_ACCEL_DETECT)
+# include <a52dec/mm_accel.h>
+#endif
+#include "gsta52dec.h"
+
+#if HAVE_ORC
+#include <orc/orc.h>
+#endif
+
+#ifdef LIBA52_DOUBLE
+#define SAMPLE_WIDTH 64
+#define SAMPLE_FORMAT GST_AUDIO_NE(F64)
+#define SAMPLE_TYPE GST_AUDIO_FORMAT_F64
+#else
+#define SAMPLE_WIDTH 32
+#define SAMPLE_FORMAT GST_AUDIO_NE(F32)
+#define SAMPLE_TYPE GST_AUDIO_FORMAT_F32
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (a52dec_debug);
+#define GST_CAT_DEFAULT (a52dec_debug)
+
+/* A52Dec args */
+enum
+{
+ ARG_0,
+ ARG_DRC,
+ ARG_MODE,
+ ARG_LFE,
+};
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-ac3; audio/ac3; audio/x-private1-ac3")
+ );
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " SAMPLE_FORMAT ", "
+ "layout = (string) interleaved, "
+ "rate = (int) [ 4000, 96000 ], " "channels = (int) [ 1, 6 ]")
+ );
+
+static gboolean a52_element_init (GstPlugin * plugin);
+
+#define gst_a52dec_parent_class parent_class
+G_DEFINE_TYPE (GstA52Dec, gst_a52dec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (a52dec, a52_element_init);
+
+static gboolean gst_a52dec_start (GstAudioDecoder * dec);
+static gboolean gst_a52dec_stop (GstAudioDecoder * dec);
+static gboolean gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps);
+static GstFlowReturn gst_a52dec_parse (GstAudioDecoder * dec,
+ GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_a52dec_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * buffer);
+
+static GstFlowReturn gst_a52dec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static void gst_a52dec_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_a52dec_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+#define GST_TYPE_A52DEC_MODE (gst_a52dec_mode_get_type())
+static GType
+gst_a52dec_mode_get_type (void)
+{
+ static GType a52dec_mode_type = 0;
+ static const GEnumValue a52dec_modes[] = {
+ {A52_MONO, "Mono", "mono"},
+ {A52_STEREO, "Stereo", "stereo"},
+ {A52_3F, "3 Front", "3f"},
+ {A52_2F1R, "2 Front, 1 Rear", "2f1r"},
+ {A52_3F1R, "3 Front, 1 Rear", "3f1r"},
+ {A52_2F2R, "2 Front, 2 Rear", "2f2r"},
+ {A52_3F2R, "3 Front, 2 Rear", "3f2r"},
+ {A52_DOLBY, "Dolby", "dolby"},
+ {0, NULL, NULL},
+ };
+
+ if (!a52dec_mode_type) {
+ a52dec_mode_type = g_enum_register_static ("GstA52DecMode", a52dec_modes);
+ }
+ return a52dec_mode_type;
+}
+
+static void
+gst_a52dec_class_init (GstA52DecClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstAudioDecoderClass *gstbase_class;
+ guint cpuflags = 0;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+ gstbase_class = (GstAudioDecoderClass *) klass;
+
+ gobject_class->set_property = gst_a52dec_set_property;
+ gobject_class->get_property = gst_a52dec_get_property;
+
+ gstbase_class->start = GST_DEBUG_FUNCPTR (gst_a52dec_start);
+ gstbase_class->stop = GST_DEBUG_FUNCPTR (gst_a52dec_stop);
+ gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_a52dec_set_format);
+ gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_a52dec_parse);
+ gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_a52dec_handle_frame);
+
+ /**
+ * GstA52Dec::drc
+ *
+ * Set to true to apply the recommended Dolby Digital dynamic range compression
+ * to the audio stream. Dynamic range compression makes loud sounds
+ * softer and soft sounds louder, so you can more easily listen
+ * to the stream without disturbing other people.
+ */
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DRC,
+ g_param_spec_boolean ("drc", "Dynamic Range Compression",
+ "Use Dynamic Range Compression", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstA52Dec::mode
+ *
+ * Force a particular output channel configuration from the decoder. By default,
+ * the channel downmix (if any) is chosen automatically based on the downstream
+ * capabilities of the pipeline.
+ */
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODE,
+ g_param_spec_enum ("mode", "Decoder Mode", "Decoding Mode (default 3f2r)",
+ GST_TYPE_A52DEC_MODE, A52_3F2R,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstA52Dec::lfe
+ *
+ * Whether to output the LFE (Low Frequency Emitter) channel of the audio stream.
+ */
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LFE,
+ g_param_spec_boolean ("lfe", "LFE", "LFE", TRUE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
+ gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
+ gst_element_class_set_static_metadata (gstelement_class,
+ "ATSC A/52 audio decoder", "Codec/Decoder/Audio/Converter",
+ "Decodes ATSC A/52 encoded audio streams",
+ "David I. Lehn <dlehn@users.sourceforge.net>");
+
+ GST_DEBUG_CATEGORY_INIT (a52dec_debug, "a52dec", 0,
+ "AC3/A52 software decoder");
+
+ /* If no CPU instruction based acceleration is available, end up using the
+ * generic software djbfft based one when available in the used liba52 */
+#ifdef MM_ACCEL_DJBFFT
+ klass->a52_cpuflags = MM_ACCEL_DJBFFT;
+#elif defined(A52_ACCEL_DETECT)
+ klass->a52_cpuflags = A52_ACCEL_DETECT;
+#else
+ klass->a52_cpuflags = 0;
+#endif
+
+#if HAVE_ORC && !defined(A52_ACCEL_DETECT)
+ cpuflags = orc_target_get_default_flags (orc_target_get_by_name ("mmx"));
+ if (cpuflags & ORC_TARGET_MMX_MMX)
+ klass->a52_cpuflags |= MM_ACCEL_X86_MMX;
+ if (cpuflags & ORC_TARGET_MMX_3DNOW)
+ klass->a52_cpuflags |= MM_ACCEL_X86_3DNOW;
+ if (cpuflags & ORC_TARGET_MMX_MMXEXT)
+ klass->a52_cpuflags |= MM_ACCEL_X86_MMXEXT;
+#endif
+
+ GST_LOG ("CPU flags: a52=%08x, orc=%08x", klass->a52_cpuflags, cpuflags);
+
+ gst_type_mark_as_plugin_api (GST_TYPE_A52DEC_MODE, 0);
+}
+
+static void
+gst_a52dec_init (GstA52Dec * a52dec)
+{
+ a52dec->request_channels = A52_CHANNEL;
+ a52dec->dynamic_range_compression = FALSE;
+
+ a52dec->state = NULL;
+ a52dec->samples = NULL;
+
+ gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+ (a52dec), TRUE);
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (a52dec));
+
+ /* retrieve and intercept base class chain.
+ * Quite HACKish, but that's dvd specs/caps for you,
+ * since one buffer needs to be split into 2 frames */
+ a52dec->base_chain = GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (a52dec));
+ gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (a52dec),
+ GST_DEBUG_FUNCPTR (gst_a52dec_chain));
+}
+
+static gboolean
+gst_a52dec_start (GstAudioDecoder * dec)
+{
+ GstA52Dec *a52dec = GST_A52DEC (dec);
+ GstA52DecClass *klass;
+ static GMutex init_mutex;
+
+ GST_DEBUG_OBJECT (dec, "start");
+
+ klass = GST_A52DEC_CLASS (G_OBJECT_GET_CLASS (a52dec));
+ g_mutex_lock (&init_mutex);
+#if defined(A52_ACCEL_DETECT)
+ a52dec->state = a52_init ();
+ /* This line is just to avoid being accused of not using klass */
+ a52_accel (klass->a52_cpuflags & A52_ACCEL_DETECT);
+#else
+ a52dec->state = a52_init (klass->a52_cpuflags);
+#endif
+ g_mutex_unlock (&init_mutex);
+
+ if (!a52dec->state) {
+ GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), LIBRARY, INIT, (NULL),
+ ("failed to initialize a52 state"));
+ return FALSE;
+ }
+
+ a52dec->samples = a52_samples (a52dec->state);
+ a52dec->bit_rate = -1;
+ a52dec->sample_rate = -1;
+ a52dec->stream_channels = A52_CHANNEL;
+ a52dec->using_channels = A52_CHANNEL;
+ a52dec->level = 1;
+ a52dec->bias = 0;
+ a52dec->flag_update = TRUE;
+
+ /* call upon legacy upstream byte support (e.g. seeking) */
+ gst_audio_decoder_set_estimate_rate (dec, TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+gst_a52dec_stop (GstAudioDecoder * dec)
+{
+ GstA52Dec *a52dec = GST_A52DEC (dec);
+
+ GST_DEBUG_OBJECT (dec, "stop");
+
+ a52dec->samples = NULL;
+ if (a52dec->state) {
+ a52_free (a52dec->state);
+ a52dec->state = NULL;
+ }
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_a52dec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
+ gint * _offset, gint * len)
+{
+ GstA52Dec *a52dec;
+ const guint8 *data;
+ gint av, size;
+ gint length = 0, flags, sample_rate, bit_rate;
+ GstFlowReturn result = GST_FLOW_EOS;
+
+ a52dec = GST_A52DEC (bdec);
+
+ size = av = gst_adapter_available (adapter);
+ data = (const guint8 *) gst_adapter_map (adapter, av);
+
+ /* find and read header */
+ bit_rate = a52dec->bit_rate;
+ sample_rate = a52dec->sample_rate;
+ flags = 0;
+ while (size >= 7) {
+ length = a52_syncinfo ((guint8 *) data, &flags, &sample_rate, &bit_rate);
+
+ if (length == 0) {
+ /* shift window to re-find sync */
+ data++;
+ size--;
+ } else if (length <= size) {
+ GST_LOG_OBJECT (a52dec, "Sync: frame size %d", length);
+ result = GST_FLOW_OK;
+ break;
+ } else {
+ GST_LOG_OBJECT (a52dec, "Not enough data available (needed %d had %d)",
+ length, size);
+ break;
+ }
+ }
+ gst_adapter_unmap (adapter);
+
+ *_offset = av - size;
+ *len = length;
+
+ return result;
+}
+
+static gint
+gst_a52dec_channels (int flags, GstAudioChannelPosition * pos)
+{
+ gint chans = 0;
+
+ if (flags & A52_LFE) {
+ chans += 1;
+ if (pos) {
+ pos[0] = GST_AUDIO_CHANNEL_POSITION_LFE1;
+ }
+ }
+ flags &= A52_CHANNEL_MASK;
+ switch (flags) {
+ case A52_3F2R:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+ pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+ pos[4 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+ }
+ chans += 5;
+ break;
+ case A52_2F2R:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+ pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+ }
+ chans += 4;
+ break;
+ case A52_3F1R:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+ pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+ }
+ chans += 4;
+ break;
+ case A52_2F1R:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+ }
+ chans += 3;
+ break;
+ case A52_3F:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+ pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ }
+ chans += 3;
+ break;
+ case A52_CHANNEL: /* Dual mono. Should really be handled as 2 src pads */
+ case A52_STEREO:
+ case A52_DOLBY:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ }
+ chans += 2;
+ break;
+ case A52_MONO:
+ if (pos) {
+ pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_MONO;
+ }
+ chans += 1;
+ break;
+ default:
+ /* error, caller should post error message */
+ return 0;
+ }
+
+ return chans;
+}
+
+static gboolean
+gst_a52dec_reneg (GstA52Dec * a52dec)
+{
+ gint channels;
+ gboolean result = FALSE;
+ GstAudioChannelPosition from[6], to[6];
+ GstAudioInfo info;
+
+ channels = gst_a52dec_channels (a52dec->using_channels, from);
+
+ if (!channels)
+ goto done;
+
+ GST_INFO_OBJECT (a52dec, "reneg channels:%d rate:%d",
+ channels, a52dec->sample_rate);
+
+ memcpy (to, from, sizeof (GstAudioChannelPosition) * channels);
+ gst_audio_channel_positions_to_valid_order (to, channels);
+ gst_audio_get_channel_reorder_map (channels, from, to,
+ a52dec->channel_reorder_map);
+
+ gst_audio_info_init (&info);
+ gst_audio_info_set_format (&info,
+ SAMPLE_TYPE, a52dec->sample_rate, channels, (channels > 1 ? to : NULL));
+
+ if (!gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (a52dec), &info))
+ goto done;
+
+ result = TRUE;
+
+done:
+ return result;
+}
+
+static void
+gst_a52dec_update_streaminfo (GstA52Dec * a52dec)
+{
+ GstTagList *taglist;
+
+ taglist = gst_tag_list_new_empty ();
+ gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE,
+ (guint) a52dec->bit_rate, NULL);
+
+ gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist,
+ GST_TAG_MERGE_REPLACE);
+ gst_tag_list_unref (taglist);
+}
+
+static GstFlowReturn
+gst_a52dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buffer)
+{
+ GstA52Dec *a52dec;
+ gint channels, i;
+ gboolean need_reneg = FALSE;
+ gint chans;
+ gint length = 0, flags, sample_rate, bit_rate;
+ GstMapInfo map;
+ GstFlowReturn result = GST_FLOW_OK;
+ GstBuffer *outbuf;
+ const gint num_blocks = 6;
+
+ a52dec = GST_A52DEC (bdec);
+
+ /* no fancy draining */
+ if (G_UNLIKELY (!buffer))
+ return GST_FLOW_OK;
+
+ /* parsed stuff already, so this should work out fine */
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ g_assert (map.size >= 7);
+
+ /* re-obtain some sync header info,
+ * should be same as during _parse and could also be cached there,
+ * but anyway ... */
+ bit_rate = a52dec->bit_rate;
+ sample_rate = a52dec->sample_rate;
+ flags = 0;
+ length = a52_syncinfo (map.data, &flags, &sample_rate, &bit_rate);
+ g_assert (length == map.size);
+
+ /* update stream information, renegotiate or re-streaminfo if needed */
+ need_reneg = FALSE;
+ if (a52dec->sample_rate != sample_rate) {
+ GST_DEBUG_OBJECT (a52dec, "sample rate changed");
+ need_reneg = TRUE;
+ a52dec->sample_rate = sample_rate;
+ }
+
+ if (flags) {
+ if (a52dec->stream_channels != (flags & (A52_CHANNEL_MASK | A52_LFE))) {
+ GST_DEBUG_OBJECT (a52dec, "stream channel flags changed, marking update");
+ a52dec->flag_update = TRUE;
+ }
+ a52dec->stream_channels = flags & (A52_CHANNEL_MASK | A52_LFE);
+ }
+
+ if (bit_rate != a52dec->bit_rate) {
+ a52dec->bit_rate = bit_rate;
+ gst_a52dec_update_streaminfo (a52dec);
+ }
+
+ /* If we haven't had an explicit number of channels chosen through properties
+ * at this point, choose what to downmix to now, based on what the peer will
+ * accept - this allows a52dec to do downmixing in preference to a
+ * downstream element such as audioconvert.
+ */
+ if (a52dec->request_channels != A52_CHANNEL) {
+ flags = a52dec->request_channels;
+ } else if (a52dec->flag_update) {
+ GstCaps *caps;
+
+ a52dec->flag_update = FALSE;
+
+ caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (a52dec));
+ if (caps && gst_caps_get_size (caps) > 0) {
+ GstCaps *copy = gst_caps_copy_nth (caps, 0);
+ GstStructure *structure = gst_caps_get_structure (copy, 0);
+ gint orig_channels = flags ? gst_a52dec_channels (flags, NULL) : 6;
+ gint fixed_channels = 0;
+ const int a52_channels[6] = {
+ A52_MONO,
+ A52_STEREO,
+ A52_STEREO | A52_LFE,
+ A52_2F2R,
+ A52_2F2R | A52_LFE,
+ A52_3F2R | A52_LFE,
+ };
+
+ /* Prefer the original number of channels, but fixate to something
+ * preferred (first in the caps) downstream if possible.
+ */
+ gst_structure_fixate_field_nearest_int (structure, "channels",
+ orig_channels);
+
+ if (gst_structure_get_int (structure, "channels", &fixed_channels)
+ && fixed_channels <= 6) {
+ if (fixed_channels < orig_channels)
+ flags = a52_channels[fixed_channels - 1];
+ } else {
+ flags = a52_channels[5];
+ }
+
+ gst_caps_unref (copy);
+ } else if (flags)
+ flags = a52dec->stream_channels;
+ else
+ flags = A52_3F2R | A52_LFE;
+
+ if (caps)
+ gst_caps_unref (caps);
+ } else {
+ flags = a52dec->using_channels;
+ }
+
+ /* process */
+ flags |= A52_ADJUST_LEVEL;
+ a52dec->level = 1;
+ if (a52_frame (a52dec->state, map.data, &flags, &a52dec->level, a52dec->bias)) {
+ gst_buffer_unmap (buffer, &map);
+ GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
+ ("a52_frame error"), result);
+ goto exit;
+ }
+ gst_buffer_unmap (buffer, &map);
+
+ channels = flags & (A52_CHANNEL_MASK | A52_LFE);
+ if (a52dec->using_channels != channels) {
+ need_reneg = TRUE;
+ a52dec->using_channels = channels;
+ }
+
+ /* negotiate if required */
+ if (need_reneg) {
+ GST_DEBUG_OBJECT (a52dec,
+ "a52dec reneg: sample_rate:%d stream_chans:%d using_chans:%d",
+ a52dec->sample_rate, a52dec->stream_channels, a52dec->using_channels);
+ if (!gst_a52dec_reneg (a52dec))
+ goto failed_negotiation;
+ }
+
+ if (a52dec->dynamic_range_compression == FALSE) {
+ a52_dynrng (a52dec->state, NULL, NULL);
+ }
+
+ flags &= (A52_CHANNEL_MASK | A52_LFE);
+ chans = gst_a52dec_channels (flags, NULL);
+ if (!chans)
+ goto invalid_flags;
+
+ /* handle decoded data;
+ * each frame has 6 blocks, one block is 256 samples, ea */
+ outbuf =
+ gst_buffer_new_and_alloc (256 * chans * (SAMPLE_WIDTH / 8) * num_blocks);
+
+ gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
+ {
+ guint8 *ptr = map.data;
+ for (i = 0; i < num_blocks; i++) {
+ if (a52_block (a52dec->state)) {
+ /* also marks discont */
+ GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
+ ("error decoding block %d", i), result);
+ if (result != GST_FLOW_OK) {
+ gst_buffer_unmap (outbuf, &map);
+ gst_buffer_unref (outbuf);
+ goto exit;
+ }
+ } else {
+ gint n, c;
+ gint *reorder_map = a52dec->channel_reorder_map;
+
+ for (n = 0; n < 256; n++) {
+ for (c = 0; c < chans; c++) {
+ ((sample_t *) ptr)[n * chans + reorder_map[c]] =
+ a52dec->samples[c * 256 + n];
+ }
+ }
+ }
+ ptr += 256 * chans * (SAMPLE_WIDTH / 8);
+ }
+ }
+ gst_buffer_unmap (outbuf, &map);
+
+ result = gst_audio_decoder_finish_frame (bdec, outbuf, 1);
+
+exit:
+ return result;
+
+ /* ERRORS */
+failed_negotiation:
+ {
+ GST_ELEMENT_ERROR (a52dec, CORE, NEGOTIATION, (NULL), (NULL));
+ return GST_FLOW_ERROR;
+ }
+invalid_flags:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+ ("Invalid channel flags: %d", flags));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static gboolean
+gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
+{
+ GstA52Dec *a52dec = GST_A52DEC (bdec);
+ GstStructure *structure;
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ if (structure && gst_structure_has_name (structure, "audio/x-private1-ac3"))
+ a52dec->dvdmode = TRUE;
+ else
+ a52dec->dvdmode = FALSE;
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_a52dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstA52Dec *a52dec = GST_A52DEC (parent);
+ GstFlowReturn ret = GST_FLOW_OK;
+ gint first_access;
+
+ if (a52dec->dvdmode) {
+ gsize size;
+ guint8 data[2];
+ gint offset;
+ gint len;
+ GstBuffer *subbuf;
+
+ size = gst_buffer_get_size (buf);
+ if (size < 2)
+ goto not_enough_data;
+
+ gst_buffer_extract (buf, 0, data, 2);
+ first_access = (data[0] << 8) | data[1];
+
+ /* Skip the first_access header */
+ offset = 2;
+
+ if (first_access > 1) {
+ /* Length of data before first_access */
+ len = first_access - 1;
+
+ if (len <= 0 || offset + len > size)
+ goto bad_first_access_parameter;
+
+ subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
+ ret = a52dec->base_chain (pad, parent, subbuf);
+ if (ret != GST_FLOW_OK) {
+ gst_buffer_unref (buf);
+ goto done;
+ }
+
+ offset += len;
+ len = size - offset;
+
+ if (len > 0) {
+ subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+
+ ret = a52dec->base_chain (pad, parent, subbuf);
+ }
+ gst_buffer_unref (buf);
+ } else {
+ /* first_access = 0 or 1, so if there's a timestamp it applies to the first byte */
+ subbuf =
+ gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset,
+ size - offset);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+ gst_buffer_unref (buf);
+ ret = a52dec->base_chain (pad, parent, subbuf);
+ }
+ } else {
+ ret = a52dec->base_chain (pad, parent, buf);
+ }
+
+done:
+ return ret;
+
+/* ERRORS */
+not_enough_data:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+ ("Insufficient data in buffer. Can't determine first_acess"));
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+bad_first_access_parameter:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+ ("Bad first_access parameter (%d) in buffer", first_access));
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+}
+
+static void
+gst_a52dec_set_property (GObject * object, guint prop_id, const GValue * value,
+ GParamSpec * pspec)
+{
+ GstA52Dec *src = GST_A52DEC (object);
+
+ switch (prop_id) {
+ case ARG_DRC:
+ GST_OBJECT_LOCK (src);
+ src->dynamic_range_compression = g_value_get_boolean (value);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case ARG_MODE:
+ GST_OBJECT_LOCK (src);
+ src->request_channels &= ~A52_CHANNEL_MASK;
+ src->request_channels |= g_value_get_enum (value);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case ARG_LFE:
+ GST_OBJECT_LOCK (src);
+ src->request_channels &= ~A52_LFE;
+ src->request_channels |= g_value_get_boolean (value) ? A52_LFE : 0;
+ GST_OBJECT_UNLOCK (src);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_a52dec_get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
+{
+ GstA52Dec *src = GST_A52DEC (object);
+
+ switch (prop_id) {
+ case ARG_DRC:
+ GST_OBJECT_LOCK (src);
+ g_value_set_boolean (value, src->dynamic_range_compression);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case ARG_MODE:
+ GST_OBJECT_LOCK (src);
+ g_value_set_enum (value, src->request_channels & A52_CHANNEL_MASK);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case ARG_LFE:
+ GST_OBJECT_LOCK (src);
+ g_value_set_boolean (value, src->request_channels & A52_LFE);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gboolean
+a52_element_init (GstPlugin * plugin)
+{
+#if HAVE_ORC
+ orc_init ();
+#endif
+
+ return gst_element_register (plugin, "a52dec", GST_RANK_SECONDARY,
+ GST_TYPE_A52DEC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (a52dec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ a52dec,
+ "Decodes ATSC A/52 encoded audio streams",
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_A52DEC_H__
+#define __GST_A52DEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_A52DEC \
+ (gst_a52dec_get_type())
+#define GST_A52DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_A52DEC,GstA52Dec))
+#define GST_A52DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_A52DEC,GstA52DecClass))
+#define GST_IS_A52DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_A52DEC))
+#define GST_IS_A52DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_A52DEC))
+
+typedef struct _GstA52Dec GstA52Dec;
+typedef struct _GstA52DecClass GstA52DecClass;
+
+struct _GstA52Dec {
+ GstAudioDecoder element;
+
+ GstPadChainFunction base_chain;
+
+ gboolean dvdmode;
+ gboolean flag_update;
+ int prev_flags;
+
+ /* stream properties */
+ int bit_rate;
+ int sample_rate;
+ int stream_channels;
+ int request_channels;
+ int using_channels;
+
+ gint channel_reorder_map[6];
+
+ sample_t level;
+ sample_t bias;
+ gboolean dynamic_range_compression;
+ sample_t *samples;
+ a52_state_t *state;
+};
+
+struct _GstA52DecClass {
+ GstAudioDecoderClass parent_class;
+
+ guint32 a52_cpuflags;
+};
+
+GType gst_a52dec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (a52dec);
+
+#ifndef A52_MONO
+#define A52_MONO 1
+#endif
+#ifndef A52_STEREO
+#define A52_STEREO 2
+#endif
+#ifndef A52_3F
+#define A52_3F 3
+#endif
+#ifndef A52_2F1R
+#define A52_2F1R 4
+#endif
+#ifndef A52_3F1R
+#define A52_3F1R 5
+#endif
+#ifndef A52_2F2R
+#define A52_2F2R 6
+#endif
+#ifndef A52_3F2R
+#define A52_3F2R 7
+#endif
+#ifndef A52_DOLBY
+#define A52_DOLBY 10
+#endif
+
+G_END_DECLS
+
+#endif /* __GST_A52DEC_H__ */
--- /dev/null
+if get_option('a52dec').disabled()
+ subdir_done()
+endif
+
+a52_dep = cc.find_library('a52', required : get_option('a52dec'))
+have_a52_h = cc.has_header_symbol('a52dec/a52.h', 'a52_init', prefix : '#include <stdint.h>')
+if not have_a52_h and get_option('a52dec').enabled()
+ error('a52dec plugin enabled but a52.h not found')
+endif
+
+if a52_dep.found() and have_a52_h
+ a52dec = library('gsta52dec',
+ 'gsta52dec.c',
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstaudio_dep, orc_dep, a52_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(a52dec, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [a52dec]
+endif
--- /dev/null
+[_presets_]
+version=0.10
+element-name=GstAmrnbEnc
+
+[enhance-size]
+_meta/comment=Maximize compression, lowest bitrate
+band-mode=0
+
+[enhance-quality]
+_meta/comment=Maximize quality, highest bitrate
+band-mode=7
--- /dev/null
+Compiling AMRNB:
+================
+
+To compile the amrnb plugin, you need the opencore-amrnb development package.
+If your distribution does not provide this package, you can download the
+source code from "http://sourceforge.net/projects/opencore-amr".
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrnbdec.h"
+#include "amrnbenc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gboolean ret = FALSE;
+
+ ret |= GST_ELEMENT_REGISTER (amrnbdec, plugin);
+ ret |= GST_ELEMENT_REGISTER (amrnbenc, plugin);
+
+ return ret;
+}
+
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ amrnb,
+ "Adaptive Multi-Rate Narrow-Band",
+ plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
+ GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrnbdec
+ * @title: amrnbdec
+ * @see_also: #GstAmrnbEnc, #GstAmrParse
+ *
+ * AMR narrowband decoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrnbdec ! audioconvert ! audioresample ! autoaudiosink
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrnbdec.h"
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) 8000," "channels = (int) 1")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrnbdec_debug);
+#define GST_CAT_DEFAULT gst_amrnbdec_debug
+
+static const gint block_size_if1[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5,
+ 0, 0, 0, 0, 0, 0, 0
+};
+
+static const gint block_size_if2[16] = { 12, 13, 15, 17, 18, 20, 25, 30, 5,
+ 0, 0, 0, 0, 0, 0, 0
+};
+
+static GType
+gst_amrnb_variant_get_type (void)
+{
+ static GType gst_amrnb_variant_type = 0;
+ static const GEnumValue gst_amrnb_variant[] = {
+ {GST_AMRNB_VARIANT_IF1, "IF1", "IF1"},
+ {GST_AMRNB_VARIANT_IF2, "IF2", "IF2"},
+ {0, NULL, NULL},
+ };
+ if (!gst_amrnb_variant_type) {
+ gst_amrnb_variant_type =
+ g_enum_register_static ("GstAmrnbVariant", gst_amrnb_variant);
+ }
+ return gst_amrnb_variant_type;
+}
+
+#define GST_AMRNB_VARIANT_TYPE (gst_amrnb_variant_get_type())
+
+#define VARIANT_DEFAULT GST_AMRNB_VARIANT_IF1
+enum
+{
+ PROP_0,
+ PROP_VARIANT
+};
+
+static void gst_amrnbdec_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_amrnbdec_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static gboolean gst_amrnbdec_start (GstAudioDecoder * dec);
+static gboolean gst_amrnbdec_stop (GstAudioDecoder * dec);
+static gboolean gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
+static GstFlowReturn gst_amrnbdec_parse (GstAudioDecoder * dec,
+ GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_amrnbdec_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * buffer);
+
+#define gst_amrnbdec_parent_class parent_class
+G_DEFINE_TYPE (GstAmrnbDec, gst_amrnbdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (amrnbdec, "amrnbdec", GST_RANK_PRIMARY,
+ GST_TYPE_AMRNBDEC);
+
+static void
+gst_amrnbdec_class_init (GstAmrnbDecClass * klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+
+ object_class->set_property = gst_amrnbdec_set_property;
+ object_class->get_property = gst_amrnbdec_get_property;
+
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+
+ gst_element_class_set_static_metadata (element_class, "AMR-NB audio decoder",
+ "Codec/Decoder/Audio",
+ "Adaptive Multi-Rate Narrow-Band audio decoder",
+ "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
+
+ base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbdec_start);
+ base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbdec_stop);
+ base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbdec_set_format);
+ base_class->parse = GST_DEBUG_FUNCPTR (gst_amrnbdec_parse);
+ base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbdec_handle_frame);
+
+ g_object_class_install_property (object_class, PROP_VARIANT,
+ g_param_spec_enum ("variant", "Variant",
+ "The decoder variant", GST_AMRNB_VARIANT_TYPE,
+ VARIANT_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+ GST_DEBUG_CATEGORY_INIT (gst_amrnbdec_debug, "amrnbdec", 0,
+ "AMR-NB audio decoder");
+
+ gst_type_mark_as_plugin_api (GST_AMRNB_VARIANT_TYPE, 0);
+}
+
+static void
+gst_amrnbdec_init (GstAmrnbDec * amrnbdec)
+{
+ gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrnbdec), TRUE);
+ gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+ (amrnbdec), TRUE);
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrnbdec));
+}
+
+static gboolean
+gst_amrnbdec_start (GstAudioDecoder * dec)
+{
+ GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+
+ GST_DEBUG_OBJECT (dec, "start");
+ if (!(amrnbdec->handle = Decoder_Interface_init ()))
+ return FALSE;
+
+ amrnbdec->rate = 0;
+ amrnbdec->channels = 0;
+
+ return TRUE;
+}
+
+static gboolean
+gst_amrnbdec_stop (GstAudioDecoder * dec)
+{
+ GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+
+ GST_DEBUG_OBJECT (dec, "stop");
+ Decoder_Interface_exit (amrnbdec->handle);
+
+ return TRUE;
+}
+
+static void
+gst_amrnbdec_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstAmrnbDec *self = GST_AMRNBDEC (object);
+
+ switch (prop_id) {
+ case PROP_VARIANT:
+ self->variant = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static void
+gst_amrnbdec_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstAmrnbDec *self = GST_AMRNBDEC (object);
+
+ switch (prop_id) {
+ case PROP_VARIANT:
+ g_value_set_enum (value, self->variant);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static gboolean
+gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+ GstStructure *structure;
+ GstAmrnbDec *amrnbdec;
+ GstAudioInfo info;
+
+ amrnbdec = GST_AMRNBDEC (dec);
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* get channel count */
+ gst_structure_get_int (structure, "channels", &amrnbdec->channels);
+ gst_structure_get_int (structure, "rate", &amrnbdec->rate);
+
+ /* create reverse caps */
+ gst_audio_info_init (&info);
+ gst_audio_info_set_format (&info,
+ GST_AUDIO_FORMAT_S16, amrnbdec->rate, amrnbdec->channels, NULL);
+
+ return gst_audio_decoder_set_output_format (dec, &info);
+}
+
+static GstFlowReturn
+gst_amrnbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
+ gint * offset, gint * length)
+{
+ GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+ guint8 head[1];
+ guint size;
+ gboolean sync, eos;
+ gint block, mode;
+
+ size = gst_adapter_available (adapter);
+ if (size < 1)
+ return GST_FLOW_ERROR;
+
+ gst_audio_decoder_get_parse_state (dec, &sync, &eos);
+
+ /* need to peek data to get the size */
+ gst_adapter_copy (adapter, head, 0, 1);
+
+ /* get size */
+ switch (amrnbdec->variant) {
+ case GST_AMRNB_VARIANT_IF1:
+ mode = (head[0] >> 3) & 0x0F;
+ block = block_size_if1[mode] + 1;
+ break;
+ case GST_AMRNB_VARIANT_IF2:
+ mode = head[0] & 0x0F;
+ block = block_size_if2[mode] + 1;
+ break;
+ default:
+ g_assert_not_reached ();
+ return GST_FLOW_ERROR;
+ break;
+ }
+
+ GST_DEBUG_OBJECT (amrnbdec, "mode %d, block %d", mode, block);
+
+ if (block > size)
+ return GST_FLOW_EOS;
+
+ *offset = 0;
+ *length = block;
+
+ return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_amrnbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
+{
+ GstAmrnbDec *amrnbdec;
+ GstMapInfo inmap, outmap;
+ GstBuffer *out;
+
+ amrnbdec = GST_AMRNBDEC (dec);
+
+ /* no fancy flushing */
+ if (!buffer || !gst_buffer_get_size (buffer))
+ return GST_FLOW_OK;
+
+ gst_buffer_map (buffer, &inmap, GST_MAP_READ);
+
+ /* get output */
+ out = gst_buffer_new_and_alloc (160 * 2);
+ /* decode */
+ gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+ Decoder_Interface_Decode (amrnbdec->handle, inmap.data,
+ (gint16 *) outmap.data, 0);
+ gst_buffer_unmap (out, &outmap);
+
+ gst_buffer_unmap (buffer, &inmap);
+
+ return gst_audio_decoder_finish_frame (dec, out, 1);
+}
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_AMRNBDEC_H__
+#define __GST_AMRNBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include <opencore-amrnb/interf_dec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRNBDEC \
+ (gst_amrnbdec_get_type())
+#define GST_AMRNBDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBDEC, GstAmrnbDec))
+#define GST_AMRNBDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBDEC, GstAmrnbDecClass))
+#define GST_IS_AMRNBDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBDEC))
+#define GST_IS_AMRNBDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBDEC))
+
+typedef struct _GstAmrnbDec GstAmrnbDec;
+typedef struct _GstAmrnbDecClass GstAmrnbDecClass;
+
+typedef enum
+{
+ GST_AMRNB_VARIANT_IF1,
+ GST_AMRNB_VARIANT_IF2
+} GstAmrnbVariant;
+
+struct _GstAmrnbDec {
+ GstAudioDecoder element;
+
+ GstAmrnbVariant variant;
+
+ /* library handle */
+ void *handle;
+
+ /* output settings */
+ gint channels, rate;
+};
+
+struct _GstAmrnbDecClass {
+ GstAudioDecoderClass parent_class;
+};
+
+GType gst_amrnbdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrnbdec);
+
+G_END_DECLS
+
+#endif /* __GST_AMRNBDEC_H__ */
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrnbenc
+ * @title: amrnbenc
+ * @see_also: #GstAmrnbDec, #GstAmrnbParse
+ *
+ * AMR narrowband encoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.wav ! wavparse ! audioconvert ! audioresample ! amrnbenc ! filesink location=abc.amr
+ * ]|
+ * Please note that the above stream misses the header, that is needed to play
+ * the stream.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrnbenc.h"
+
+static GType
+gst_amrnbenc_bandmode_get_type (void)
+{
+ static GType gst_amrnbenc_bandmode_type = 0;
+ static const GEnumValue gst_amrnbenc_bandmode[] = {
+ {MR475, "MR475", "MR475"},
+ {MR515, "MR515", "MR515"},
+ {MR59, "MR59", "MR59"},
+ {MR67, "MR67", "MR67"},
+ {MR74, "MR74", "MR74"},
+ {MR795, "MR795", "MR795"},
+ {MR102, "MR102", "MR102"},
+ {MR122, "MR122", "MR122"},
+ {MRDTX, "MRDTX", "MRDTX"},
+ {0, NULL, NULL},
+ };
+ if (!gst_amrnbenc_bandmode_type) {
+ gst_amrnbenc_bandmode_type =
+ g_enum_register_static ("GstAmrnbEncBandMode", gst_amrnbenc_bandmode);
+ }
+ return gst_amrnbenc_bandmode_type;
+}
+
+#define GST_AMRNBENC_BANDMODE_TYPE (gst_amrnbenc_bandmode_get_type())
+
+#define BANDMODE_DEFAULT MR122
+enum
+{
+ PROP_0,
+ PROP_BANDMODE
+};
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) 8000," "channels = (int) 1")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrnbenc_debug);
+#define GST_CAT_DEFAULT gst_amrnbenc_debug
+
+static gboolean gst_amrnbenc_start (GstAudioEncoder * enc);
+static gboolean gst_amrnbenc_stop (GstAudioEncoder * enc);
+static gboolean gst_amrnbenc_set_format (GstAudioEncoder * enc,
+ GstAudioInfo * info);
+static GstFlowReturn gst_amrnbenc_handle_frame (GstAudioEncoder * enc,
+ GstBuffer * in_buf);
+
+#define gst_amrnbenc_parent_class parent_class
+G_DEFINE_TYPE (GstAmrnbEnc, gst_amrnbenc, GST_TYPE_AUDIO_ENCODER);
+GST_ELEMENT_REGISTER_DEFINE (amrnbenc, "amrnbenc", GST_RANK_SECONDARY,
+ GST_TYPE_AMRNBENC);
+
+static void
+gst_amrnbenc_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstAmrnbEnc *self = GST_AMRNBENC (object);
+
+ switch (prop_id) {
+ case PROP_BANDMODE:
+ self->bandmode = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static void
+gst_amrnbenc_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstAmrnbEnc *self = GST_AMRNBENC (object);
+
+ switch (prop_id) {
+ case PROP_BANDMODE:
+ g_value_set_enum (value, self->bandmode);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static void
+gst_amrnbenc_class_init (GstAmrnbEncClass * klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
+
+ object_class->set_property = gst_amrnbenc_set_property;
+ object_class->get_property = gst_amrnbenc_get_property;
+
+ base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbenc_start);
+ base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbenc_stop);
+ base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbenc_set_format);
+ base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbenc_handle_frame);
+
+ g_object_class_install_property (object_class, PROP_BANDMODE,
+ g_param_spec_enum ("band-mode", "Band Mode",
+ "Encoding Band Mode (Kbps)", GST_AMRNBENC_BANDMODE_TYPE,
+ BANDMODE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+
+ gst_element_class_set_static_metadata (element_class, "AMR-NB audio encoder",
+ "Codec/Encoder/Audio",
+ "Adaptive Multi-Rate Narrow-Band audio encoder",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ GST_DEBUG_CATEGORY_INIT (gst_amrnbenc_debug, "amrnbenc", 0,
+ "AMR-NB audio encoder");
+
+ gst_type_mark_as_plugin_api (GST_AMRNBENC_BANDMODE_TYPE, 0);
+}
+
+static void
+gst_amrnbenc_init (GstAmrnbEnc * amrnbenc)
+{
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (amrnbenc));
+}
+
+static gboolean
+gst_amrnbenc_start (GstAudioEncoder * enc)
+{
+ GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
+
+ GST_DEBUG_OBJECT (amrnbenc, "start");
+
+ if (!(amrnbenc->handle = Encoder_Interface_init (0)))
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_amrnbenc_stop (GstAudioEncoder * enc)
+{
+ GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
+
+ GST_DEBUG_OBJECT (amrnbenc, "stop");
+
+ Encoder_Interface_exit (amrnbenc->handle);
+
+ return TRUE;
+}
+
+static gboolean
+gst_amrnbenc_set_format (GstAudioEncoder * enc, GstAudioInfo * info)
+{
+ GstAmrnbEnc *amrnbenc;
+ GstCaps *copy;
+
+ amrnbenc = GST_AMRNBENC (enc);
+
+ /* parameters already parsed for us */
+ amrnbenc->rate = GST_AUDIO_INFO_RATE (info);
+ amrnbenc->channels = GST_AUDIO_INFO_CHANNELS (info);
+
+ /* we do not really accept other input, but anyway ... */
+ /* this is not wrong but will sound bad */
+ if (amrnbenc->channels != 1) {
+ g_warning ("amrnbdec is only optimized for mono channels");
+ }
+ if (amrnbenc->rate != 8000) {
+ g_warning ("amrnbdec is only optimized for 8000 Hz samplerate");
+ }
+
+ /* create reverse caps */
+ copy = gst_caps_new_simple ("audio/AMR",
+ "channels", G_TYPE_INT, amrnbenc->channels,
+ "rate", G_TYPE_INT, amrnbenc->rate, NULL);
+
+ gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (amrnbenc), copy);
+ gst_caps_unref (copy);
+
+ /* report needs to base class: hand one frame at a time */
+ gst_audio_encoder_set_frame_samples_min (enc, 160);
+ gst_audio_encoder_set_frame_samples_max (enc, 160);
+ gst_audio_encoder_set_frame_max (enc, 1);
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_amrnbenc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
+{
+ GstAmrnbEnc *amrnbenc;
+ GstFlowReturn ret;
+ GstBuffer *out;
+ GstMapInfo in_map, out_map;
+ gsize out_size;
+
+ amrnbenc = GST_AMRNBENC (enc);
+
+ g_return_val_if_fail (amrnbenc->handle, GST_FLOW_FLUSHING);
+
+ /* we don't deal with squeezing remnants, so simply discard those */
+ if (G_UNLIKELY (buffer == NULL)) {
+ GST_DEBUG_OBJECT (amrnbenc, "no data");
+ return GST_FLOW_OK;
+ }
+
+ gst_buffer_map (buffer, &in_map, GST_MAP_READ);
+
+ if (G_UNLIKELY (in_map.size < 320)) {
+ gst_buffer_unmap (buffer, &in_map);
+ GST_DEBUG_OBJECT (amrnbenc, "discarding trailing data of %" G_GSIZE_FORMAT
+ " bytes", in_map.size);
+ return gst_audio_encoder_finish_frame (enc, NULL, -1);
+ }
+
+ /* get output, max size is 32 */
+ out = gst_buffer_new_and_alloc (32);
+ /* AMR encoder actually writes into the source data buffers it gets */
+ /* should be able to handle that with what we are given */
+
+ gst_buffer_map (out, &out_map, GST_MAP_WRITE);
+ /* encode */
+ out_size =
+ Encoder_Interface_Encode (amrnbenc->handle, amrnbenc->bandmode,
+ (short *) in_map.data, out_map.data, 0);
+ gst_buffer_unmap (out, &out_map);
+ gst_buffer_resize (out, 0, out_size);
+ gst_buffer_unmap (buffer, &in_map);
+
+ GST_LOG_OBJECT (amrnbenc, "output data size %" G_GSIZE_FORMAT, out_size);
+
+ if (out_size) {
+ ret = gst_audio_encoder_finish_frame (enc, out, 160);
+ } else {
+ /* should not happen (without dtx or so at least) */
+ GST_WARNING_OBJECT (amrnbenc, "no encoded data; discarding input");
+ gst_buffer_unref (out);
+ ret = gst_audio_encoder_finish_frame (enc, NULL, -1);
+ }
+
+ return ret;
+}
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_AMRNBENC_H__
+#define __GST_AMRNBENC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudioencoder.h>
+
+#include <opencore-amrnb/interf_enc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRNBENC \
+ (gst_amrnbenc_get_type())
+#define GST_AMRNBENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBENC, GstAmrnbEnc))
+#define GST_AMRNBENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBENC, GstAmrnbEncClass))
+#define GST_IS_AMRNBENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBENC))
+#define GST_IS_AMRNBENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBENC))
+
+typedef struct _GstAmrnbEnc GstAmrnbEnc;
+typedef struct _GstAmrnbEncClass GstAmrnbEncClass;
+
+struct _GstAmrnbEnc {
+ GstAudioEncoder element;
+
+ /* library handle */
+ void *handle;
+
+ /* input settings */
+ gint channels, rate;
+ gint duration;
+
+ /* property */
+ enum Mode bandmode;
+};
+
+struct _GstAmrnbEncClass {
+ GstAudioEncoderClass parent_class;
+};
+
+GType gst_amrnbenc_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrnbenc);
+
+G_END_DECLS
+
+#endif /* __GST_AMRNBENC_H__ */
--- /dev/null
+amrnb_dep = dependency('opencore-amrnb', version : '>= 0.1.3', required : get_option('amrnb'))
+
+if amrnb_dep.found()
+ amrnb = library('gstamrnb',
+ ['amrnb.c', 'amrnbdec.c', 'amrnbenc.c'],
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstaudio_dep, amrnb_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(amrnb, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [amrnb]
+ install_data(sources: 'GstAmrnbEnc.prs', install_dir: presetdir)
+endif
--- /dev/null
+Compiling AMRWB decoder:
+========================
+
+To compile the amrwbdec plugin, you need the opencore-amrwb development
+package. If your distribution does not provide this package, you can
+download the source code from "http://sourceforge.net/projects/opencore-amr".
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) Decoder plugin
+ * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrwbdec.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (amrwbdec, plugin);
+}
+
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ amrwbdec,
+ "Adaptive Multi-Rate Wide-Band Decoder",
+ plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
+ GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrwbdec
+ * @title: amrwbdec
+ * @see_also: #GstAmrwbEnc
+ *
+ * AMR wideband decoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrwbdec ! audioconvert ! audioresample ! autoaudiosink
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/audio/audio.h>
+
+#include "amrwbdec.h"
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/AMR-WB, "
+ "rate = (int) 16000, " "channels = (int) 1")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) 16000, " "channels = (int) 1")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrwbdec_debug);
+#define GST_CAT_DEFAULT gst_amrwbdec_debug
+
+#define L_FRAME16k 320 /* Frame size at 16kHz */
+
+static const unsigned char block_size[16] =
+ { 18, 24, 33, 37, 41, 47, 51, 59, 61,
+ 6, 0, 0, 0, 0, 1, 1
+};
+
+static gboolean gst_amrwbdec_start (GstAudioDecoder * dec);
+static gboolean gst_amrwbdec_stop (GstAudioDecoder * dec);
+static gboolean gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
+static GstFlowReturn gst_amrwbdec_parse (GstAudioDecoder * dec,
+ GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_amrwbdec_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * buffer);
+
+#define gst_amrwbdec_parent_class parent_class
+G_DEFINE_TYPE (GstAmrwbDec, gst_amrwbdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (amrwbdec, "amrwbdec",
+ GST_RANK_PRIMARY, GST_TYPE_AMRWBDEC);
+
+static void
+gst_amrwbdec_class_init (GstAmrwbDecClass * klass)
+{
+ GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+
+ gst_element_class_set_static_metadata (element_class, "AMR-WB audio decoder",
+ "Codec/Decoder/Audio",
+ "Adaptive Multi-Rate Wideband audio decoder",
+ "Renato Araujo <renato.filho@indt.org.br>");
+
+ base_class->start = GST_DEBUG_FUNCPTR (gst_amrwbdec_start);
+ base_class->stop = GST_DEBUG_FUNCPTR (gst_amrwbdec_stop);
+ base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrwbdec_set_format);
+ base_class->parse = GST_DEBUG_FUNCPTR (gst_amrwbdec_parse);
+ base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrwbdec_handle_frame);
+
+ GST_DEBUG_CATEGORY_INIT (gst_amrwbdec_debug, "amrwbdec", 0,
+ "AMR-WB audio decoder");
+}
+
+static void
+gst_amrwbdec_init (GstAmrwbDec * amrwbdec)
+{
+ gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrwbdec), TRUE);
+ gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+ (amrwbdec), TRUE);
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrwbdec));
+}
+
+static gboolean
+gst_amrwbdec_start (GstAudioDecoder * dec)
+{
+ GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+
+ GST_DEBUG_OBJECT (dec, "start");
+ if (!(amrwbdec->handle = D_IF_init ()))
+ return FALSE;
+
+ amrwbdec->rate = 0;
+ amrwbdec->channels = 0;
+
+ return TRUE;
+}
+
+static gboolean
+gst_amrwbdec_stop (GstAudioDecoder * dec)
+{
+ GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+
+ GST_DEBUG_OBJECT (dec, "stop");
+ D_IF_exit (amrwbdec->handle);
+
+ return TRUE;
+}
+
+static gboolean
+gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+ GstStructure *structure;
+ GstAmrwbDec *amrwbdec;
+ GstAudioInfo info;
+
+ amrwbdec = GST_AMRWBDEC (dec);
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* get channel count */
+ gst_structure_get_int (structure, "channels", &amrwbdec->channels);
+ gst_structure_get_int (structure, "rate", &amrwbdec->rate);
+
+ /* create reverse caps */
+ gst_audio_info_init (&info);
+ gst_audio_info_set_format (&info,
+ GST_AUDIO_FORMAT_S16, amrwbdec->rate, amrwbdec->channels, NULL);
+
+ gst_audio_decoder_set_output_format (dec, &info);
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_amrwbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
+ gint * offset, gint * length)
+{
+ GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+ guint8 header[1];
+ guint size;
+ gboolean sync, eos;
+ gint block, mode;
+
+ size = gst_adapter_available (adapter);
+ if (size < 1)
+ return GST_FLOW_ERROR;
+
+ gst_audio_decoder_get_parse_state (dec, &sync, &eos);
+
+ /* need to peek data to get the size */
+ gst_adapter_copy (adapter, header, 0, 1);
+ mode = (header[0] >> 3) & 0x0F;
+ block = block_size[mode];
+
+ GST_DEBUG_OBJECT (amrwbdec, "mode %d, block %d", mode, block);
+
+ if (block) {
+ if (block > size)
+ return GST_FLOW_EOS;
+ *offset = 0;
+ *length = block;
+ } else {
+ /* no frame yet, skip one byte */
+ GST_LOG_OBJECT (amrwbdec, "skipping byte");
+ *offset = 1;
+ return GST_FLOW_EOS;
+ }
+
+ return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_amrwbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
+{
+ GstAmrwbDec *amrwbdec;
+ GstBuffer *out;
+ GstMapInfo inmap, outmap;
+
+ amrwbdec = GST_AMRWBDEC (dec);
+
+ /* no fancy flushing */
+ if (!buffer || !gst_buffer_get_size (buffer))
+ return GST_FLOW_OK;
+
+ /* the library seems to write into the source data, hence the copy. */
+ /* should be no problem */
+ gst_buffer_map (buffer, &inmap, GST_MAP_READ);
+
+ /* get output */
+ out = gst_buffer_new_and_alloc (sizeof (gint16) * L_FRAME16k);
+ gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+
+ /* decode */
+ D_IF_decode (amrwbdec->handle, (unsigned char *) inmap.data,
+ (short int *) outmap.data, _good_frame);
+
+ gst_buffer_unmap (out, &outmap);
+ gst_buffer_unmap (buffer, &inmap);
+
+ /* send out */
+ return gst_audio_decoder_finish_frame (dec, out, 1);
+}
--- /dev/null
+/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) plugin
+ * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_AMRWBDEC_H__
+#define __GST_AMRWBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include <opencore-amrwb/dec_if.h>
+#include <opencore-amrwb/if_rom.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRWBDEC \
+ (gst_amrwbdec_get_type())
+#define GST_AMRWBDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRWBDEC, GstAmrwbDec))
+#define GST_AMRWBDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRWBDEC, GstAmrwbDecClass))
+#define GST_IS_AMRWBDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRWBDEC))
+#define GST_IS_AMRWBDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRWBDEC))
+
+typedef struct _GstAmrwbDec GstAmrwbDec;
+typedef struct _GstAmrwbDecClass GstAmrwbDecClass;
+
+/**
+ * GstAmrwbDec:
+ *
+ * Opaque data structure.
+ */
+struct _GstAmrwbDec {
+ GstAudioDecoder element;
+
+ /* library handle */
+ void *handle;
+
+ /* output settings */
+ gint channels, rate;
+};
+
+struct _GstAmrwbDecClass {
+ GstAudioDecoderClass parent_class;
+};
+
+GType gst_amrwbdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrwbdec);
+
+G_END_DECLS
+
+#endif /* __GST_AMRWBDEC_H__ */
--- /dev/null
+amrwb_dep = dependency('opencore-amrwb', version : '>= 0.1.3', required : get_option('amrwbdec'))
+
+if amrwb_dep.found()
+ amrwbdec = library('gstamrwbdec',
+ ['amrwb.c', 'amrwbdec.c'],
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstaudio_dep, amrwb_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(amrwbdec, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [amrwbdec]
+endif
--- /dev/null
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+#define GST_CAT_DEFAULT gst_cdio_debug
+
+static gboolean plugin_init (GstPlugin * plugin);
+
+/* cdio headers redefine VERSION etc., so do this here before including them */
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ cdio,
+ "Read audio from audio CDs",
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+
+#include "gstcdio.h"
+#include "gstcdiocddasrc.h"
+
+void
+gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+ cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+{
+ const gchar *vars[] = { "GST_CDTEXT_TAG_ENCODING", "GST_TAG_ENCODING", NULL };
+ const gchar *txt;
+ gchar *txt_utf8;
+
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ txt = cdtext_get_const (cdtext, field, track);
+#else
+ txt = cdtext_get_const (field, cdtext);
+#endif
+ if (txt == NULL || *txt == '\0') {
+ GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+ return;
+ }
+
+ /* The character encoding is not specified, and there is no provision
+ * for indicating in the CD-Text data which encoding is in use.. */
+ txt_utf8 = gst_tag_freeform_string_to_utf8 (txt, -1, vars);
+
+ if (txt_utf8 == NULL) {
+ GST_WARNING_OBJECT (src, "CD-TEXT %s could not be converted to UTF-8, "
+ "try setting the GST_CDTEXT_TAG_ENCODING or GST_TAG_ENCODING "
+ "environment variable", gst_tag);
+ return;
+ }
+
+ /* FIXME: beautify strings (they might be all uppercase for example)? */
+
+ if (*p_tags == NULL)
+ *p_tags = gst_tag_list_new_empty ();
+
+ gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt_utf8, NULL);
+
+ GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt_utf8);
+ g_free (txt_utf8);
+}
+
+GstTagList *
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
+{
+ GstTagList *tags = NULL;
+
+#else
+gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+{
+ GstTagList *tags = NULL;
+ cdtext_t *t;
+
+ t = cdio_get_cdtext (cdio, track);
+ if (t == NULL) {
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+ return NULL;
+ }
+#endif
+
+ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
+ GST_TAG_ARTIST, &tags);
+ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
+ &tags);
+
+ return tags;
+}
+
+void
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
+ GstTagList * tags)
+{
+#else
+gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+{
+ cdtext_t *t;
+
+ t = cdio_get_cdtext (cdio, 0);
+ if (t == NULL) {
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+ return;
+ }
+#endif
+
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
+ GST_TAG_ALBUM_ARTIST, &tags);
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
+ &tags);
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
+ &tags);
+ GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+}
+
+void
+gst_cdio_log_handler (cdio_log_level_t level, const char *msg)
+{
+ const gchar *level_str[] = { "DEBUG", "INFO", "WARN", "ERROR", "ASSERT" };
+ const gchar *s;
+
+ s = level_str[CLAMP (level, 1, G_N_ELEMENTS (level_str)) - 1];
+ GST_DEBUG ("CDIO-%s: %s", s, GST_STR_NULL (msg));
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (cdiocddasrc, plugin);
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_CDIO_H__
+#define __GST_CDIO_H__
+
+#include <gst/gst.h>
+#include <cdio/cdio.h>
+#include <cdio/cdtext.h>
+#include <cdio/logging.h>
+
+#if LIBCDIO_VERSION_NUM <= 83 && LIBCDIO_VERSION_NUM >= 76
+ #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
+ #define CDTEXT_FIELD_GENRE CDTEXT_GENRE
+ #define CDTEXT_FIELD_TITLE CDTEXT_TITLE
+#endif
+
+
+void gst_cdio_add_cdtext_field (GstObject * src,
+ cdtext_t * cdtext,
+ track_t track,
+ cdtext_field_t field,
+ const gchar * gst_tag,
+ GstTagList ** p_tags);
+
+GstTagList * gst_cdio_get_cdtext (GstObject * src,
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ cdtext_t * t,
+#else
+ CdIo * cdio,
+#endif
+ track_t track);
+
+void gst_cdio_add_cdtext_album_tags (GstObject * src,
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ cdtext_t * t,
+#else
+ CdIo * cdio,
+#endif
+ GstTagList * tags);
+void gst_cdio_log_handler (cdio_log_level_t level, const char *msg);
+
+#endif /* __GST_CDIO_H__ */
+
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-cdiocddasrc
+ * @title: cdiocddasrc
+ * @see_also: GstCdParanoiaSrc, GstAudioCdSrc
+ *
+ * cdiocddasrc reads and extracts raw audio from Audio CDs. It can operate
+ * in one of two modes:
+ *
+ * * treat each track as a separate stream, counting time from the start
+ * of the track to the end of the track and posting EOS at the end of
+ * a track, or
+ * * treat the entire disc as one stream, counting time from the start of
+ * the first track to the end of the last track, posting EOS only at
+ * the end of the last track.
+ *
+ * With a recent-enough version of libcdio, the element will extract
+ * CD-TEXT if this is supported by the CD-drive and CD-TEXT information
+ * is available on the CD. The information will be posted on the bus in
+ * form of a tag message.
+ *
+ * When opened, the element will also calculate a CDDB disc ID and a
+ * MusicBrainz disc ID, which applications can use to query online
+ * databases for artist/title information. These disc IDs will also be
+ * posted on the bus as part of the tag messages.
+ *
+ * cdiocddasrc supports the GstUriHandler interface, so applications can use
+ * playbin with cdda://<track-number> URIs for playback (they will have
+ * to connect to playbin's notify::source signal and set the device on the
+ * cd source in the notify callback if they want to set the device property).
+ * Applications should use seeks in "track" format to switch between different
+ * tracks of the same CD (passing a new cdda:// URI to playbin involves opening
+ * and closing the CD device, which is much slower).
+ *
+ * ## Example launch line
+ *
+ * |[
+ * gst-launch-1.0 cdiocddasrc track=5 device=/dev/cdrom ! audioconvert ! vorbisenc ! oggmux ! filesink location=track5.ogg
+ * ]|
+ * This pipeline extracts track 5 of the audio CD and encodes it into an
+ * Ogg/Vorbis file.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstcdio.h"
+#include "gstcdiocddasrc.h"
+
+#include <gst/gst.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#define SAMPLES_PER_SECTOR (CDIO_CD_FRAMESIZE_RAW / sizeof (gint16))
+
+#define DEFAULT_READ_SPEED -1
+
+enum
+{
+ PROP_0 = 0,
+ PROP_READ_SPEED
+};
+
+GST_DEBUG_CATEGORY (gst_cdio_debug);
+
+
+G_DEFINE_TYPE (GstCdioCddaSrc, gst_cdio_cdda_src, GST_TYPE_AUDIO_CD_SRC);
+#define _do_init \
+ GST_DEBUG_CATEGORY_INIT (gst_cdio_debug, "cdio", 0, "libcdio elements"); \
+ cdio_log_set_handler (gst_cdio_log_handler);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (cdiocddasrc, "cdiocddasrc",
+ GST_RANK_SECONDARY - 1, GST_TYPE_CDIO_CDDA_SRC, _do_init);
+
+static void gst_cdio_cdda_src_finalize (GObject * obj);
+static void gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static GstBuffer *gst_cdio_cdda_src_read_sector (GstAudioCdSrc * src,
+ gint sector);
+static gboolean gst_cdio_cdda_src_open (GstAudioCdSrc * src,
+ const gchar * device);
+static void gst_cdio_cdda_src_close (GstAudioCdSrc * src);
+
+#if 0
+static gchar *
+gst_cdio_cdda_src_get_default_device (GstAudioCdSrc * audiocdsrc)
+{
+ GstCdioCddaSrc *src;
+ gchar *default_device, *ret;
+
+ src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+ /* src->cdio may be NULL here */
+ default_device = cdio_get_default_device (src->cdio);
+
+ ret = g_strdup (default_device);
+ free (default_device);
+
+ GST_LOG_OBJECT (src, "returning default device: %s", GST_STR_NULL (ret));
+
+ return ret;
+}
+
+static gchar **
+gst_cdio_cdda_src_probe_devices (GstAudioCdSrc * audiocdsrc)
+{
+ char **devices, **ret, **d;
+
+ /* FIXME: might return the same hardware device twice, e.g.
+ * as /dev/cdrom and /dev/dvd - gotta do something more sophisticated */
+ devices = cdio_get_devices (DRIVER_DEVICE);
+
+ if (devices == NULL)
+ goto no_devices;
+
+ if (*devices == NULL)
+ goto empty_devices;
+
+ ret = g_strdupv (devices);
+ for (d = devices; *d != NULL; ++d) {
+ GST_DEBUG_OBJECT (audiocdsrc, "device: %s", GST_STR_NULL (*d));
+ free (*d);
+ }
+ free (devices);
+
+ return ret;
+
+ /* ERRORS */
+no_devices:
+ {
+ GST_DEBUG_OBJECT (audiocdsrc, "no devices found");
+ return NULL;
+ }
+empty_devices:
+ {
+ GST_DEBUG_OBJECT (audiocdsrc, "empty device list found");
+ free (devices);
+ return NULL;
+ }
+}
+#endif
+
+static GstBuffer *
+gst_cdio_cdda_src_read_sector (GstAudioCdSrc * audiocdsrc, gint sector)
+{
+ GstCdioCddaSrc *src;
+ guint8 *data;
+
+ src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+ data = g_malloc (CDIO_CD_FRAMESIZE_RAW);
+
+ /* can't use pad_alloc because we can't return the GstFlowReturn (FIXME 0.11) */
+ if (cdio_read_audio_sector (src->cdio, data, sector) != 0)
+ goto read_failed;
+
+ if (src->swap_le_be) {
+ gint16 *pcm_data = (gint16 *) data;
+ gint i;
+
+ for (i = 0; i < SAMPLES_PER_SECTOR; ++i)
+ pcm_data[i] = GUINT16_SWAP_LE_BE (pcm_data[i]);
+ }
+
+ return gst_buffer_new_wrapped (data, CDIO_CD_FRAMESIZE_RAW);
+
+ /* ERRORS */
+read_failed:
+ {
+ GST_WARNING_OBJECT (src, "read at sector %d failed!", sector);
+ GST_ELEMENT_ERROR (src, RESOURCE, READ,
+ (_("Could not read from CD.")),
+ ("cdio_read_audio_sector at %d failed: %s", sector,
+ g_strerror (errno)));
+ g_free (data);
+ return NULL;
+ }
+}
+
+static gboolean
+gst_cdio_cdda_src_do_detect_drive_endianness (GstCdioCddaSrc * src, gint from,
+ gint to)
+{
+ gint16 pcm_data[SAMPLES_PER_SECTOR], last_pcm_ne, last_pcm_oe;
+ gdouble ne_sumd0, ne_sumd1, ne_factor;
+ gdouble oe_sumd0, oe_sumd1, oe_factor;
+ gdouble diff;
+ gint sector;
+ gint i;
+
+ ne_sumd0 = ne_sumd1 = 0.0;
+ oe_sumd0 = oe_sumd1 = 0.0;
+ last_pcm_ne = 0;
+ last_pcm_oe = 0;
+
+ GST_LOG_OBJECT (src, "checking sector %d to %d", from, to);
+
+ for (sector = from; sector < to; ++sector) {
+ if (cdio_read_audio_sector (src->cdio, pcm_data, sector) != 0)
+ goto read_failed;
+
+ /* only evaluate samples for left channel */
+ for (i = 0; i < SAMPLES_PER_SECTOR; i += 2) {
+ gint16 pcm;
+
+ /* Native endianness first */
+ pcm = pcm_data[i];
+ ne_sumd0 += abs (pcm);
+ ne_sumd1 += abs (pcm - last_pcm_ne);
+ last_pcm_ne = pcm;
+
+ /* other endianness next */
+ pcm = GUINT16_SWAP_LE_BE (pcm);
+ oe_sumd0 += abs (pcm);
+ oe_sumd1 += abs (pcm - last_pcm_oe);
+ last_pcm_oe = pcm;
+ }
+
+ }
+
+ ne_factor = (ne_sumd1 / ne_sumd0);
+ oe_factor = (oe_sumd1 / oe_sumd0);
+ diff = ne_factor - oe_factor;
+
+ GST_DEBUG_OBJECT (src, "Native: %.2f, Other: %.2f, diff: %.2f",
+ ne_factor, oe_factor, diff);
+
+ if (diff > 0.5) {
+ GST_INFO_OBJECT (src, "Drive produces samples in other endianness");
+ src->swap_le_be = TRUE;
+ return TRUE;
+ } else if (diff < -0.5) {
+ GST_INFO_OBJECT (src, "Drive produces samples in host endianness");
+ src->swap_le_be = FALSE;
+ return TRUE;
+ } else {
+ GST_INFO_OBJECT (src, "Inconclusive, assuming host endianness");
+ src->swap_le_be = FALSE;
+ return FALSE;
+ }
+
+/* ERRORS */
+read_failed:
+ {
+ GST_WARNING_OBJECT (src, "could not read sector %d", sector);
+ src->swap_le_be = FALSE;
+ return FALSE;
+ }
+}
+
+static void
+gst_cdio_cdda_src_detect_drive_endianness (GstCdioCddaSrc * src, gint first,
+ gint last)
+{
+ gint from, to;
+
+ GST_INFO ("Detecting drive endianness");
+
+ /* try middle of disc first */
+ from = (first + last) / 2;
+ to = MIN (from + 10, last);
+ if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+ return;
+
+ /* if that was inconclusive, try other places */
+ from = (first + last) / 4;
+ to = MIN (from + 10, last);
+ if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+ return;
+
+ from = (first + last) * 3 / 4;
+ to = MIN (from + 10, last);
+ if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+ return;
+
+ /* if that's still inconclusive, we give up and assume host endianness */
+ return;
+}
+
+static gboolean
+notcdio_track_is_audio_track (const CdIo * p_cdio, track_t i_track)
+{
+ return (cdio_get_track_format (p_cdio, i_track) == TRACK_FORMAT_AUDIO);
+}
+
+static gboolean
+gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+{
+ GstCdioCddaSrc *src;
+ discmode_t discmode;
+ gint first_track, num_tracks, i;
+ gint first_audio_sector = 0, last_audio_sector = 0;
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ cdtext_t *cdtext;
+#endif
+
+ src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+ g_assert (device != NULL);
+ g_assert (src->cdio == NULL);
+
+ GST_LOG_OBJECT (src, "trying to open device %s", device);
+
+ if (!(src->cdio = cdio_open (device, DRIVER_UNKNOWN)))
+ goto open_failed;
+
+ discmode = cdio_get_discmode (src->cdio);
+ GST_LOG_OBJECT (src, "discmode: %d", (gint) discmode);
+
+ if (discmode != CDIO_DISC_MODE_CD_DA && discmode != CDIO_DISC_MODE_CD_MIXED)
+ goto not_audio;
+
+ first_track = cdio_get_first_track_num (src->cdio);
+ num_tracks = cdio_get_num_tracks (src->cdio);
+
+ if (num_tracks <= 0 || first_track < 0)
+ return TRUE; /* base class will generate 'has no tracks' error */
+
+ if (src->read_speed != -1)
+ cdio_set_speed (src->cdio, src->read_speed);
+
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ cdtext = cdio_get_cdtext (src->cdio);
+
+ if (NULL == cdtext)
+ GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
+ else
+ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
+ audiocdsrc->tags);
+#else
+ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+ audiocdsrc->tags);
+#endif
+
+ GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+
+ for (i = 0; i < num_tracks; ++i) {
+ GstAudioCdSrcTrack track = { 0, };
+ gint len_sectors;
+
+ len_sectors = cdio_get_track_sec_count (src->cdio, i + first_track);
+
+ track.num = i + first_track;
+ track.is_audio = notcdio_track_is_audio_track (src->cdio, i + first_track);
+
+ /* Note: LSN/LBA confusion all around us; in any case, this does
+ * the right thing here (for cddb id calculations etc. as well) */
+ track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+ track.end = track.start + len_sectors - 1; /* -1? */
+
+ if (track.is_audio) {
+ first_audio_sector = MIN (first_audio_sector, track.start);
+ last_audio_sector = MAX (last_audio_sector, track.end);
+ }
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+ if (NULL != cdtext)
+ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
+ i + first_track);
+#else
+ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+ i + first_track);
+#endif
+
+ gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+ }
+
+ /* Try to detect if we need to byte-order swap the samples coming from the
+ * drive, which might be the case if the CD drive operates in a different
+ * endianness than the host CPU's endianness (happens on e.g. Powerbook G4) */
+ gst_cdio_cdda_src_detect_drive_endianness (src, first_audio_sector,
+ last_audio_sector);
+
+ return TRUE;
+
+ /* ERRORS */
+open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open CD device for reading.")),
+ ("cdio_open() failed: %s", g_strerror (errno)));
+ return FALSE;
+ }
+not_audio:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Disc is not an Audio CD.")), ("discmode: %d", (gint) discmode));
+
+ cdio_destroy (src->cdio);
+ src->cdio = NULL;
+ return FALSE;
+ }
+}
+
+static void
+gst_cdio_cdda_src_close (GstAudioCdSrc * audiocdsrc)
+{
+ GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+ if (src->cdio) {
+ cdio_destroy (src->cdio);
+ src->cdio = NULL;
+ }
+}
+
+static void
+gst_cdio_cdda_src_init (GstCdioCddaSrc * src)
+{
+ src->read_speed = DEFAULT_READ_SPEED; /* don't need atomic access here */
+ src->cdio = NULL;
+}
+
+static void
+gst_cdio_cdda_src_finalize (GObject * obj)
+{
+ GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (obj);
+
+ if (src->cdio) {
+ cdio_destroy (src->cdio);
+ src->cdio = NULL;
+ }
+
+ G_OBJECT_CLASS (gst_cdio_cdda_src_parent_class)->finalize (obj);
+}
+
+static void
+gst_cdio_cdda_src_class_init (GstCdioCddaSrcClass * klass)
+{
+ GstAudioCdSrcClass *audiocdsrc_class = GST_AUDIO_CD_SRC_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = gst_cdio_cdda_src_set_property;
+ gobject_class->get_property = gst_cdio_cdda_src_get_property;
+ gobject_class->finalize = gst_cdio_cdda_src_finalize;
+
+ audiocdsrc_class->open = gst_cdio_cdda_src_open;
+ audiocdsrc_class->close = gst_cdio_cdda_src_close;
+ audiocdsrc_class->read_sector = gst_cdio_cdda_src_read_sector;
+#if 0
+ audiocdsrc_class->probe_devices = gst_cdio_cdda_src_probe_devices;
+ audiocdsrc_class->get_default_device = gst_cdio_cdda_src_get_default_device;
+#endif
+
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_READ_SPEED,
+ g_param_spec_int ("read-speed", "Read speed",
+ "Read from device at the specified speed (-1 = default)", -1, 100,
+ DEFAULT_READ_SPEED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_set_static_metadata (element_class,
+ "CD audio source (CDDA)", "Source/File",
+ "Read audio from CD using libcdio",
+ "Tim-Philipp Müller <tim centricular net>");
+}
+
+static void
+gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
+
+ switch (prop_id) {
+ case PROP_READ_SPEED:{
+ gint speed;
+
+ speed = g_value_get_int (value);
+ g_atomic_int_set (&src->read_speed, speed);
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
+
+ switch (prop_id) {
+ case PROP_READ_SPEED:{
+ gint speed;
+
+ speed = g_atomic_int_get (&src->read_speed);
+ g_value_set_int (value, speed);
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_CDIO_CDDA_SRC_H__
+#define __GST_CDIO_CDDA_SRC_H__
+
+#include <gst/audio/gstaudiocdsrc.h>
+#include <cdio/cdio.h>
+
+#define GST_TYPE_CDIO_CDDA_SRC (gst_cdio_cdda_src_get_type ())
+#define GST_CDIO_CDDA_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrc))
+#define GST_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrcClass))
+#define GST_IS_CDIO_CDDA_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CDIO_CDDA_SRC))
+#define GST_IS_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CDIO_CDDA_SRC))
+
+typedef struct _GstCdioCddaSrc GstCdioCddaSrc;
+typedef struct _GstCdioCddaSrcClass GstCdioCddaSrcClass;
+
+struct _GstCdioCddaSrc
+{
+ GstAudioCdSrc audiocdsrc;
+
+ gint read_speed; /* ATOMIC */
+
+ gboolean swap_le_be; /* Drive produces samples in other endianness */
+
+ CdIo *cdio; /* NULL if not open */
+};
+
+struct _GstCdioCddaSrcClass
+{
+ GstAudioCdSrcClass audiocdsrc_class;
+};
+
+GType gst_cdio_cdda_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (cdiocddasrc);
+
+#endif /* __GST_CDIO_CDDA_SRC_H__ */
+
--- /dev/null
+cdio_dep = dependency('libcdio', version : '>= 0.76', required : get_option('cdio'))
+
+if cdio_dep.found()
+ cdio = library('gstcdio',
+ ['gstcdio.c', 'gstcdiocddasrc.c'],
+ c_args : ugly_args,
+ include_directories : [configinc, libsinc],
+ dependencies : [gstaudio_dep, gsttag_dep, cdio_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(cdio, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [cdio]
+endif
--- /dev/null
+Various Info
+============
+
+http://dvd.sourceforge.net/
--- /dev/null
+#!/bin/sh
+AUDIOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/audiosink`
+VIDEOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/videosink`
+gst-launch dvdreadsrc ! dvddemux name=demux .video_00 ! \
+ { queue ! mpeg2dec ! videoconvert ! videoscale ! $VIDEOSINK } \
+ { demux.audio_00 ! queue ! a52dec ! audioconvert ! audioscale ! $AUDIOSINK }
--- /dev/null
+/* GStreamer DVD title source
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2001 Billy Biggs <vektor@dumbterm.net>.
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "dvdreadsrc.h"
+
+#include <gmodule.h>
+
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY_STATIC (gstgst_dvd_read_src_debug);
+#define GST_CAT_DEFAULT (gstgst_dvd_read_src_debug)
+
+enum
+{
+ ARG_0,
+ ARG_DEVICE,
+ ARG_TITLE,
+ ARG_CHAPTER,
+ ARG_ANGLE
+};
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/mpeg, mpegversion=2, systemstream=(boolean)true"));
+
+static GstFormat title_format;
+static GstFormat angle_format;
+static GstFormat sector_format;
+static GstFormat chapter_format;
+
+static gboolean gst_dvd_read_src_start (GstBaseSrc * basesrc);
+static gboolean gst_dvd_read_src_stop (GstBaseSrc * basesrc);
+static GstFlowReturn gst_dvd_read_src_create (GstPushSrc * pushsrc,
+ GstBuffer ** buf);
+static gboolean gst_dvd_read_src_src_query (GstBaseSrc * basesrc,
+ GstQuery * query);
+static gboolean gst_dvd_read_src_src_event (GstBaseSrc * basesrc,
+ GstEvent * event);
+static gboolean gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title,
+ gint angle);
+static gboolean gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src,
+ gint chapter);
+static gboolean gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, gint angle);
+static void gst_dvd_read_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_dvd_read_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static GstEvent *gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
+ const guint32 * clut);
+static gboolean gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size);
+static gboolean gst_dvd_read_src_do_seek (GstBaseSrc * src, GstSegment * s);
+static gint64 gst_dvd_read_src_convert_timecode (dvd_time_t * time);
+static gint gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src,
+ pgc_t * pgc, gint cell);
+static GstClockTime gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src,
+ guint sector);
+static gint gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src,
+ GstClockTime ts);
+
+static void gst_dvd_read_src_uri_handler_init (gpointer g_iface,
+ gpointer iface_data);
+static gboolean dvdread_element_init (GstPlugin * plugin);
+
+#define gst_dvd_read_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstDvdReadSrc, gst_dvd_read_src, GST_TYPE_PUSH_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ gst_dvd_read_src_uri_handler_init));
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (dvdreadsrc, dvdread_element_init);
+
+static void
+gst_dvd_read_src_finalize (GObject * object)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+
+ g_free (src->location);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_dvd_read_src_init (GstDvdReadSrc * src)
+{
+ src->dvd = NULL;
+ src->vts_file = NULL;
+ src->vmg_file = NULL;
+ src->dvd_title = NULL;
+
+ src->location = g_strdup ("/dev/dvd");
+ src->first_seek = TRUE;
+ src->new_seek = TRUE;
+ src->new_cell = TRUE;
+ src->change_cell = FALSE;
+ src->uri_title = 1;
+ src->uri_chapter = 1;
+ src->uri_angle = 1;
+
+ src->title_lang_event_pending = NULL;
+ src->pending_clut_event = NULL;
+
+ gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
+ gst_pad_set_caps (GST_BASE_SRC_PAD (src),
+ gst_static_pad_template_get_caps (&srctemplate));
+}
+
+static gboolean
+gst_dvd_read_src_is_seekable (GstBaseSrc * src)
+{
+ return TRUE;
+}
+
+static void
+gst_dvd_read_src_class_init (GstDvdReadSrcClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+ GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
+ GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
+
+ gobject_class->finalize = gst_dvd_read_src_finalize;
+ gobject_class->set_property = gst_dvd_read_src_set_property;
+ gobject_class->get_property = gst_dvd_read_src_get_property;
+
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE,
+ g_param_spec_string ("device", "Device",
+ "DVD device location", NULL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TITLE,
+ g_param_spec_int ("title", "title", "title",
+ 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CHAPTER,
+ g_param_spec_int ("chapter", "chapter", "chapter",
+ 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ANGLE,
+ g_param_spec_int ("angle", "angle", "angle",
+ 1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
+
+ gst_element_class_set_static_metadata (gstelement_class, "DVD Source",
+ "Source/File/DVD",
+ "Access a DVD title/chapter/angle using libdvdread",
+ "Erik Walthinsen <omega@cse.ogi.edu>");
+
+ gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvd_read_src_start);
+ gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvd_read_src_stop);
+ gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_query);
+ gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_event);
+ gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_dvd_read_src_do_seek);
+ gstbasesrc_class->is_seekable =
+ GST_DEBUG_FUNCPTR (gst_dvd_read_src_is_seekable);
+
+ gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_dvd_read_src_create);
+
+ title_format = gst_format_register ("title", "DVD title");
+ angle_format = gst_format_register ("angle", "DVD angle");
+ sector_format = gst_format_register ("sector", "DVD sector");
+ chapter_format = gst_format_register ("chapter", "DVD chapter");
+}
+
+static gboolean
+gst_dvd_read_src_start (GstBaseSrc * basesrc)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+
+ g_return_val_if_fail (src->location != NULL, FALSE);
+
+ GST_DEBUG_OBJECT (src, "Opening DVD '%s'", src->location);
+
+ if ((src->dvd = DVDOpen (src->location)) == NULL)
+ goto open_failed;
+
+ /* Load the video manager to find out the information about the titles */
+ GST_DEBUG_OBJECT (src, "Loading VMG info");
+
+ if (!(src->vmg_file = ifoOpen (src->dvd, 0)))
+ goto ifo_open_failed;
+
+ src->tt_srpt = src->vmg_file->tt_srpt;
+
+ src->title = src->uri_title - 1;
+ src->chapter = src->uri_chapter - 1;
+ src->angle = src->uri_angle - 1;
+
+ if (!gst_dvd_read_src_goto_title (src, src->title, src->angle))
+ goto title_open_failed;
+
+ if (!gst_dvd_read_src_goto_chapter (src, src->chapter))
+ goto chapter_open_failed;
+
+ src->new_seek = FALSE;
+ src->change_cell = TRUE;
+
+ src->first_seek = TRUE;
+
+ return TRUE;
+
+ /* ERRORS */
+open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD")),
+ ("DVDOpen(%s) failed: %s", src->location, g_strerror (errno)));
+ return FALSE;
+ }
+ifo_open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD")),
+ ("ifoOpen() failed: %s", g_strerror (errno)));
+ return FALSE;
+ }
+title_open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD title %d"), src->uri_title), (NULL));
+ return FALSE;
+ }
+chapter_open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Failed to go to chapter %d of DVD title %d"),
+ src->uri_chapter, src->uri_title), (NULL));
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_dvd_read_src_stop (GstBaseSrc * basesrc)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+
+ if (src->vts_file) {
+ ifoClose (src->vts_file);
+ src->vts_file = NULL;
+ }
+ if (src->vmg_file) {
+ ifoClose (src->vmg_file);
+ src->vmg_file = NULL;
+ }
+ if (src->dvd_title) {
+ DVDCloseFile (src->dvd_title);
+ src->dvd_title = NULL;
+ }
+ if (src->dvd) {
+ DVDClose (src->dvd);
+ src->dvd = NULL;
+ }
+ src->new_cell = TRUE;
+ src->new_seek = TRUE;
+ src->change_cell = FALSE;
+ src->chapter = 0;
+ src->title = 0;
+ src->need_newsegment = TRUE;
+ src->vts_tmapt = NULL;
+ if (src->title_lang_event_pending) {
+ gst_event_unref (src->title_lang_event_pending);
+ src->title_lang_event_pending = NULL;
+ }
+ if (src->pending_clut_event) {
+ gst_event_unref (src->pending_clut_event);
+ src->pending_clut_event = NULL;
+ }
+ if (src->chapter_starts) {
+ g_free (src->chapter_starts);
+ src->chapter_starts = NULL;
+ }
+
+ GST_LOG_OBJECT (src, "closed DVD");
+
+ return TRUE;
+}
+
+static void
+cur_title_get_chapter_pgc (GstDvdReadSrc * src, gint chapter, gint * p_pgn,
+ gint * p_pgc_id, pgc_t ** p_pgc)
+{
+ pgc_t *pgc;
+ gint pgn, pgc_id;
+
+ g_assert (chapter >= 0 && chapter < src->num_chapters);
+
+ pgc_id = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgcn;
+ pgn = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgn;
+ pgc = src->vts_file->vts_pgcit->pgci_srp[pgc_id - 1].pgc;
+
+ *p_pgn = pgn;
+ *p_pgc_id = pgc_id;
+ *p_pgc = pgc;
+}
+
+static void
+cur_title_get_chapter_bounds (GstDvdReadSrc * src, gint chapter,
+ gint * p_first_cell, gint * p_last_cell)
+{
+ pgc_t *pgc;
+ gint pgn, pgc_id, pgn_next_ch;
+
+ g_assert (chapter >= 0 && chapter < src->num_chapters);
+
+ cur_title_get_chapter_pgc (src, chapter, &pgn, &pgc_id, &pgc);
+
+ *p_first_cell = pgc->program_map[pgn - 1] - 1;
+
+ /* last cell is used as a 'up to boundary', not 'up to and including',
+ * i.e. it is the first cell not included in the chapter range */
+ if (chapter == (src->num_chapters - 1)) {
+ *p_last_cell = pgc->nr_of_cells;
+ } else {
+ pgn_next_ch = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter + 1].pgn;
+ *p_last_cell = pgc->program_map[pgn_next_ch - 1] - 1;
+ }
+
+ GST_DEBUG_OBJECT (src, "Chapter %d bounds: %d %d (within %d cells)",
+ chapter, *p_first_cell, *p_last_cell, pgc->nr_of_cells);
+}
+
+static gboolean
+gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src, gint chapter)
+{
+ gint i;
+ const guint8 *palette;
+
+ /* make sure the chapter number is valid for this title */
+ if (chapter < 0 || chapter >= src->num_chapters) {
+ GST_WARNING_OBJECT (src, "invalid chapter %d (only %d available)",
+ chapter, src->num_chapters);
+ chapter = CLAMP (chapter, 0, src->num_chapters - 1);
+ }
+
+ /* determine which program chain we want to watch. This is
+ * based on the chapter number */
+ cur_title_get_chapter_pgc (src, chapter, &src->pgn, &src->pgc_id,
+ &src->cur_pgc);
+ cur_title_get_chapter_bounds (src, chapter, &src->start_cell,
+ &src->last_cell);
+
+ GST_LOG_OBJECT (src, "Opened chapter %d - cell %d-%d", chapter + 1,
+ src->start_cell, src->last_cell);
+
+ /* retrieve position */
+ src->cur_pack = 0;
+ for (i = 0; i < chapter; i++) {
+ gint c1, c2;
+
+ cur_title_get_chapter_bounds (src, i, &c1, &c2);
+
+ while (c1 < c2) {
+ src->cur_pack +=
+ src->cur_pgc->cell_playback[c1].last_sector -
+ src->cur_pgc->cell_playback[c1].first_sector;
+ ++c1;
+ }
+ }
+
+ /* prepare reading for new cell */
+ src->new_cell = TRUE;
+ src->next_cell = src->start_cell;
+
+ src->chapter = chapter;
+
+ if (src->pending_clut_event)
+ gst_event_unref (src->pending_clut_event);
+
+ /* Work around GCC 9 compiler warning here about taking address of packed
+ * member, which may result in an unaligned pointer access */
+ palette = (const guint8 *) src->cur_pgc->palette;
+ src->pending_clut_event =
+ gst_dvd_read_src_make_clut_change_event (src, (const guint32 *) palette);
+
+ return TRUE;
+}
+
+static void
+gst_dvd_read_src_get_chapter_starts (GstDvdReadSrc * src)
+{
+ GstClockTime uptohere;
+ guint c;
+
+ g_free (src->chapter_starts);
+ src->chapter_starts = g_new (GstClockTime, src->num_chapters);
+
+ uptohere = (GstClockTime) 0;
+ for (c = 0; c < src->num_chapters; ++c) {
+ GstClockTime chapter_duration = 0;
+ gint cell_start, cell_end, cell;
+ gint pgn, pgc_id;
+ pgc_t *pgc;
+
+ cur_title_get_chapter_pgc (src, c, &pgn, &pgc_id, &pgc);
+ cur_title_get_chapter_bounds (src, c, &cell_start, &cell_end);
+
+ cell = cell_start;
+ while (cell < cell_end) {
+ dvd_time_t *cell_duration;
+
+ cell_duration = &pgc->cell_playback[cell].playback_time;
+ chapter_duration += gst_dvd_read_src_convert_timecode (cell_duration);
+ cell = gst_dvd_read_src_get_next_cell (src, pgc, cell);
+ }
+
+ src->chapter_starts[c] = uptohere;
+
+ GST_INFO_OBJECT (src, "[%02u] Chapter %02u starts at %" GST_TIME_FORMAT
+ ", dur = %" GST_TIME_FORMAT ", cells %d-%d", src->title + 1, c + 1,
+ GST_TIME_ARGS (uptohere), GST_TIME_ARGS (chapter_duration),
+ cell_start, cell_end);
+
+ uptohere += chapter_duration;
+ }
+}
+
+static gboolean
+gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title, gint angle)
+{
+ GstStructure *s;
+ gchar lang_code[3] = { '\0', '\0', '\0' }, *t;
+ pgc_t *pgc0;
+ gint title_set_nr;
+ gint num_titles;
+ gint pgn0, pgc0_id;
+ gint i;
+
+ /* make sure our title number is valid */
+ num_titles = src->tt_srpt->nr_of_srpts;
+ GST_INFO_OBJECT (src, "There are %d titles on this DVD", num_titles);
+ if (title < 0 || title >= num_titles)
+ goto invalid_title;
+
+ src->num_chapters = src->tt_srpt->title[title].nr_of_ptts;
+ GST_INFO_OBJECT (src, "Title %d has %d chapters", title + 1,
+ src->num_chapters);
+
+ /* make sure the angle number is valid for this title */
+ src->num_angles = src->tt_srpt->title[title].nr_of_angles;
+ GST_LOG_OBJECT (src, "Title %d has %d angles", title + 1, src->num_angles);
+ if (angle < 0 || angle >= src->num_angles) {
+ GST_WARNING_OBJECT (src, "Invalid angle %d (only %d available)",
+ angle, src->num_angles);
+ angle = CLAMP (angle, 0, src->num_angles - 1);
+ }
+
+ /* load the VTS information for the title set our title is in */
+ title_set_nr = src->tt_srpt->title[title].title_set_nr;
+ src->vts_file = ifoOpen (src->dvd, title_set_nr);
+ if (src->vts_file == NULL)
+ goto ifo_open_failed;
+
+ src->ttn = src->tt_srpt->title[title].vts_ttn;
+ src->vts_ptt_srpt = src->vts_file->vts_ptt_srpt;
+
+ /* interactive title? */
+ if (src->num_chapters > 0 &&
+ src->vts_ptt_srpt->title[src->ttn - 1].ptt[0].pgn == 0) {
+ goto commands_only_pgc;
+ }
+
+ /* we've got enough info, time to open the title set data */
+ src->dvd_title = DVDOpenFile (src->dvd, title_set_nr, DVD_READ_TITLE_VOBS);
+ if (src->dvd_title == NULL)
+ goto title_open_failed;
+
+ GST_INFO_OBJECT (src, "Opened title %d, angle %d", title + 1, angle);
+ src->title = title;
+ src->angle = angle;
+
+ /* build event */
+
+ if (src->title_lang_event_pending) {
+ gst_event_unref (src->title_lang_event_pending);
+ src->title_lang_event_pending = NULL;
+ }
+
+ s = gst_structure_new ("application/x-gst-dvd",
+ "event", G_TYPE_STRING, "dvd-lang-codes", NULL);
+
+ /* so we can filter out invalid/unused streams (same for all chapters) */
+ cur_title_get_chapter_pgc (src, 0, &pgn0, &pgc0_id, &pgc0);
+
+ /* audio */
+ for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_audio_streams; i++) {
+ const audio_attr_t *a;
+
+ /* audio stream present? */
+ if (pgc0 != NULL && (pgc0->audio_control[i] & 0x8000) == 0)
+ continue;
+
+ a = &src->vts_file->vtsi_mat->vts_audio_attr[i];
+
+ t = g_strdup_printf ("audio-%d-format", i);
+ gst_structure_set (s, t, G_TYPE_INT, (int) a->audio_format, NULL);
+ g_free (t);
+ t = g_strdup_printf ("audio-%d-stream", i);
+ gst_structure_set (s, t, G_TYPE_INT, (int) i, NULL);
+ g_free (t);
+
+ if (a->lang_type) {
+ t = g_strdup_printf ("audio-%d-language", i);
+ lang_code[0] = (a->lang_code >> 8) & 0xff;
+ lang_code[1] = a->lang_code & 0xff;
+ gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
+ g_free (t);
+ } else {
+ lang_code[0] = '\0';
+ }
+
+ GST_INFO_OBJECT (src, "[%02d] Audio %02d: lang='%s', format=%d",
+ src->title + 1, i, lang_code, (gint) a->audio_format);
+ }
+
+ /* subtitle */
+ for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_subp_streams; i++) {
+ const subp_attr_t *u;
+ const video_attr_t *v;
+ gint sid;
+
+ /* subpicture stream present? */
+ if (pgc0 != NULL && (pgc0->subp_control[i] & 0x80000000) == 0)
+ continue;
+
+ u = &src->vts_file->vtsi_mat->vts_subp_attr[i];
+ v = &src->vts_file->vtsi_mat->vts_video_attr;
+
+ sid = i;
+ if (pgc0 != NULL) {
+ if (v->display_aspect_ratio == 0) /* 4:3 */
+ sid = (pgc0->subp_control[i] >> 24) & 0x1f;
+ else if (v->display_aspect_ratio == 3) /* 16:9 */
+ sid = (pgc0->subp_control[i] >> 8) & 0x1f;
+ }
+
+ if (u->type) {
+ t = g_strdup_printf ("subpicture-%d-language", i);
+ lang_code[0] = (u->lang_code >> 8) & 0xff;
+ lang_code[1] = u->lang_code & 0xff;
+ gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
+ g_free (t);
+ t = g_strdup_printf ("subpicture-%d-stream", i);
+ gst_structure_set (s, t, G_TYPE_INT, (int) sid, NULL);
+ g_free (t);
+ t = g_strdup_printf ("subpicture-%d-format", i);
+ gst_structure_set (s, t, G_TYPE_INT, (int) 0, NULL);
+ g_free (t);
+ } else {
+ lang_code[0] = '\0';
+ }
+
+ GST_INFO_OBJECT (src, "[%02d] Subtitle %02d: lang='%s', type=%d",
+ src->title + 1, sid, lang_code, u->type);
+ }
+
+ src->title_lang_event_pending =
+ gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s);
+
+ /* dump seek tables */
+ src->vts_tmapt = src->vts_file->vts_tmapt;
+ if (src->vts_tmapt) {
+ gint i, j;
+
+ GST_LOG_OBJECT (src, "nr_of_tmaps = %d", src->vts_tmapt->nr_of_tmaps);
+ for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
+ GST_LOG_OBJECT (src, "======= Table %d ===================", i);
+ GST_LOG_OBJECT (src, "Offset relative to VTS_TMAPTI: %d",
+ src->vts_tmapt->tmap_offset[i]);
+ GST_LOG_OBJECT (src, "Time unit (seconds) : %d",
+ src->vts_tmapt->tmap[i].tmu);
+ GST_LOG_OBJECT (src, "Number of entries : %d",
+ src->vts_tmapt->tmap[i].nr_of_entries);
+ for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; j++) {
+ guint64 time;
+
+ time = (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
+ GST_LOG_OBJECT (src, "Time: %" GST_TIME_FORMAT " VOBU "
+ "Sector: 0x%08x %s", GST_TIME_ARGS (time),
+ src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff,
+ (src->vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : "");
+ }
+ }
+ } else {
+ GST_WARNING_OBJECT (src, "no vts_tmapt - seeking will suck");
+ }
+
+ gst_dvd_read_src_get_chapter_starts (src);
+
+ return TRUE;
+
+ /* ERRORS */
+invalid_title:
+ {
+ GST_WARNING_OBJECT (src, "Invalid title %d (only %d available)",
+ title, num_titles);
+ return FALSE;
+ }
+ifo_open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD title %d"), title_set_nr),
+ ("ifoOpen(%d) failed: %s", title_set_nr, g_strerror (errno)));
+ return FALSE;
+ }
+title_open_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD title %d"), title_set_nr),
+ ("Can't open title VOBS (VTS_%02d_1.VOB)", title_set_nr));
+ return FALSE;
+ }
+commands_only_pgc:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ (_("Could not open DVD title %d. Interactive titles are not supported "
+ "by this element"), title_set_nr),
+ ("Commands-only PGC, not supported, use rsndvdbin"));
+ return FALSE;
+ }
+}
+
+/* FIXME: double-check this function, compare against original */
+static gint
+gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src, pgc_t * pgc, gint cell)
+{
+ /* Check if we're entering an angle block. */
+ if (pgc->cell_playback[cell].block_type != BLOCK_TYPE_ANGLE_BLOCK)
+ return (cell + 1);
+
+ while (pgc->cell_playback[cell].block_mode != BLOCK_MODE_LAST_CELL)
+ ++cell;
+
+ return cell + 1;
+}
+
+/* Returns true if the pack is a NAV pack */
+static gboolean
+gst_dvd_read_src_is_nav_pack (const guint8 * data, gint lbn, dsi_t * dsi_pack)
+{
+ if (GST_READ_UINT32_BE (data + 0x26) != 0x000001BF)
+ return FALSE;
+
+ /* Check that this is substream 0 (PCI) */
+ if (data[0x2c] != 0)
+ return FALSE;
+
+ if (GST_READ_UINT32_BE (data + 0x400) != 0x000001BF)
+ return FALSE;
+
+ /* Check that this is substream 1 (DSI) */
+ if (data[0x406] != 1)
+ return FALSE;
+
+ /* Check sizes of PCI and DSI packets */
+ if (GST_READ_UINT16_BE (data + 0x2a) != 0x03d4)
+ return FALSE;
+
+ if (GST_READ_UINT16_BE (data + 0x404) != 0x03fa)
+ return FALSE;
+
+ /* Read the DSI packet into the provided struct and check it */
+ navRead_DSI (dsi_pack, (unsigned char *) data + DSI_START_BYTE);
+ if (lbn != dsi_pack->dsi_gi.nv_pck_lbn)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* find time for sector from index, returns NONE if there is no exact match */
+static GstClockTime
+gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src, guint sector)
+{
+ gint i, j;
+
+ if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps == 0)
+ return GST_CLOCK_TIME_NONE;
+
+ for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
+ for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; ++j) {
+ if ((src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff) == sector)
+ return (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
+ }
+ }
+
+ if (sector == 0)
+ return (GstClockTime) 0;
+
+ return GST_CLOCK_TIME_NONE;
+}
+
+/* returns the sector in the index at (or before) the given time, or -1 */
+static gint
+gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src, GstClockTime ts)
+{
+ gint sector, j;
+
+ if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps < src->ttn)
+ return -1;
+
+ sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[0] & 0x7fffffff;
+
+ for (j = 0; j < src->vts_tmapt->tmap[src->ttn - 1].nr_of_entries; ++j) {
+ GstClockTime entry_time;
+
+ entry_time =
+ (guint64) src->vts_tmapt->tmap[src->ttn - 1].tmu * (j + 1) * GST_SECOND;
+ if (entry_time <= ts) {
+ sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[j] & 0x7fffffff;
+ }
+ if (entry_time >= ts) {
+ return sector;
+ }
+ }
+
+ if (ts == 0)
+ return 0;
+
+ return -1;
+}
+
+typedef enum
+{
+ GST_DVD_READ_OK = 0,
+ GST_DVD_READ_ERROR = -1,
+ GST_DVD_READ_EOS = -2,
+ GST_DVD_READ_AGAIN = -3
+} GstDvdReadReturn;
+
+static GstDvdReadReturn
+gst_dvd_read_src_read (GstDvdReadSrc * src, gint angle, gint new_seek,
+ GstBuffer ** p_buf)
+{
+ GstBuffer *buf;
+ GstSegment *seg;
+ guint8 oneblock[DVD_VIDEO_LB_LEN];
+ dsi_t dsi_pack;
+ guint next_vobu, cur_output_size;
+ gint len;
+ gint retries;
+ gint64 next_time;
+ GstMapInfo map;
+
+ seg = &(GST_BASE_SRC (src)->segment);
+
+ /* playback by cell in this pgc, starting at the cell for our chapter */
+ if (new_seek)
+ src->cur_cell = src->start_cell;
+
+again:
+
+ if (src->cur_cell >= src->last_cell) {
+ /* advance to next chapter */
+ if (src->chapter == (src->num_chapters - 1) ||
+ (seg->format == chapter_format && seg->stop != -1 &&
+ src->chapter == (seg->stop - 1))) {
+ GST_DEBUG_OBJECT (src, "end of chapter segment");
+ goto eos;
+ }
+
+ GST_INFO_OBJECT (src, "end of chapter %d, switch to next",
+ src->chapter + 1);
+
+ ++src->chapter;
+ gst_dvd_read_src_goto_chapter (src, src->chapter);
+
+ return GST_DVD_READ_AGAIN;
+ }
+
+ if (src->new_cell || new_seek) {
+ if (!new_seek) {
+ src->cur_cell = src->next_cell;
+ if (src->cur_cell >= src->last_cell) {
+ GST_LOG_OBJECT (src, "last cell in chapter");
+ goto again;
+ }
+ }
+
+ /* take angle into account */
+ if (src->cur_pgc->cell_playback[src->cur_cell].block_type
+ == BLOCK_TYPE_ANGLE_BLOCK)
+ src->cur_cell += angle;
+
+ /* calculate next cell */
+ src->next_cell =
+ gst_dvd_read_src_get_next_cell (src, src->cur_pgc, src->cur_cell);
+
+ /* we loop until we're out of this cell */
+ src->cur_pack = src->cur_pgc->cell_playback[src->cur_cell].first_sector;
+ src->new_cell = FALSE;
+ GST_DEBUG_OBJECT (src, "Starting new cell %d @ pack %d", src->cur_cell,
+ src->cur_pack);
+ }
+
+ if (src->cur_pack >= src->cur_pgc->cell_playback[src->cur_cell].last_sector) {
+ src->new_cell = TRUE;
+ GST_LOG_OBJECT (src, "Beyond last sector for cell %d, going to next cell",
+ src->cur_cell);
+ return GST_DVD_READ_AGAIN;
+ }
+
+ /* read NAV packet */
+ retries = 0;
+nav_retry:
+ retries++;
+
+ len = DVDReadBlocks (src->dvd_title, src->cur_pack, 1, oneblock);
+ if (len != 1)
+ goto read_error;
+
+ if (!gst_dvd_read_src_is_nav_pack (oneblock, src->cur_pack, &dsi_pack)) {
+ GST_LOG_OBJECT (src, "Skipping nav packet @ pack %d", src->cur_pack);
+ src->cur_pack++;
+
+ if (retries < 2000) {
+ goto nav_retry;
+ } else {
+ GST_LOG_OBJECT (src, "No nav packet @ pack %d after 2000 blocks",
+ src->cur_pack);
+ goto read_error;
+ }
+ }
+
+ /* determine where we go next. These values are the ones we
+ * mostly care about */
+ cur_output_size = dsi_pack.dsi_gi.vobu_ea + 1;
+
+ /* If we're not at the end of this cell, we can determine the next
+ * VOBU to display using the VOBU_SRI information section of the
+ * DSI. Using this value correctly follows the current angle,
+ * avoiding the doubled scenes in The Matrix, and makes our life
+ * really happy.
+ *
+ * Otherwise, we set our next address past the end of this cell to
+ * force the code above to go to the next cell in the program. */
+ if (dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL) {
+ next_vobu = src->cur_pack + (dsi_pack.vobu_sri.next_vobu & 0x7fffffff);
+ } else {
+ next_vobu = src->cur_pgc->cell_playback[src->cur_cell].last_sector + 1;
+ }
+
+ g_assert (cur_output_size < 1024);
+
+ /* create the buffer (TODO: use buffer pool?) */
+ buf =
+ gst_buffer_new_allocate (NULL, cur_output_size * DVD_VIDEO_LB_LEN, NULL);
+
+ GST_LOG_OBJECT (src, "Going to read %u sectors @ pack %d", cur_output_size,
+ src->cur_pack);
+
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ /* read in and output cursize packs */
+ len =
+ DVDReadBlocks (src->dvd_title, src->cur_pack, cur_output_size, map.data);
+
+ if (len != cur_output_size)
+ goto block_read_error;
+
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_resize (buf, 0, cur_output_size * DVD_VIDEO_LB_LEN);
+ /* GST_BUFFER_OFFSET (buf) = priv->cur_pack * DVD_VIDEO_LB_LEN; */
+ GST_BUFFER_TIMESTAMP (buf) =
+ gst_dvd_read_src_get_time_for_sector (src, src->cur_pack);
+
+ *p_buf = buf;
+
+ GST_LOG_OBJECT (src, "Read %u sectors", cur_output_size);
+
+ src->cur_pack = next_vobu;
+
+ next_time = GST_BUFFER_TIMESTAMP (buf);
+ if (GST_CLOCK_TIME_IS_VALID (next_time) && seg->format == GST_FORMAT_TIME &&
+ GST_CLOCK_TIME_IS_VALID (seg->stop) &&
+ next_time > seg->stop + 5 * GST_SECOND) {
+ GST_DEBUG_OBJECT (src, "end of TIME segment");
+ goto eos;
+ }
+
+ return GST_DVD_READ_OK;
+
+ /* ERRORS */
+eos:
+ {
+ GST_INFO_OBJECT (src, "Reached end-of-segment/stream - EOS");
+ return GST_DVD_READ_EOS;
+ }
+read_error:
+ {
+ GST_ERROR_OBJECT (src, "Read failed for block %d", src->cur_pack);
+ return GST_DVD_READ_ERROR;
+ }
+block_read_error:
+ {
+ GST_ERROR_OBJECT (src, "Read failed for %d blocks at %d",
+ cur_output_size, src->cur_pack);
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_unref (buf);
+ return GST_DVD_READ_ERROR;
+ }
+}
+
+/* we don't cache the result on purpose */
+static gboolean
+gst_dvd_read_descrambler_available (void)
+{
+ GModule *module;
+ gpointer sym;
+ gsize res;
+
+ module = g_module_open ("libdvdcss", 0);
+ if (module != NULL) {
+ res = g_module_symbol (module, "dvdcss_open", &sym);
+ g_module_close (module);
+ } else {
+ res = FALSE;
+ }
+
+ return res;
+}
+
+static GstFlowReturn
+gst_dvd_read_src_create (GstPushSrc * pushsrc, GstBuffer ** p_buf)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (pushsrc);
+ GstPad *srcpad;
+ gint res;
+
+ g_return_val_if_fail (src->dvd != NULL, GST_FLOW_ERROR);
+
+ srcpad = GST_BASE_SRC (src)->srcpad;
+
+ if (src->need_newsegment) {
+ GstSegment seg;
+
+ gst_segment_init (&seg, GST_FORMAT_BYTES);
+ seg.start = src->cur_pack * DVD_VIDEO_LB_LEN;
+ seg.stop = -1;
+ seg.time = 0;
+ gst_pad_push_event (srcpad, gst_event_new_segment (&seg));
+ src->need_newsegment = FALSE;
+ }
+
+ if (src->new_seek) {
+ gst_dvd_read_src_goto_title (src, src->title, src->angle);
+ gst_dvd_read_src_goto_chapter (src, src->chapter);
+
+ src->new_seek = FALSE;
+ src->change_cell = TRUE;
+ }
+
+ if (src->title_lang_event_pending) {
+ gst_pad_push_event (srcpad, src->title_lang_event_pending);
+ src->title_lang_event_pending = NULL;
+ }
+
+ if (src->pending_clut_event) {
+ gst_pad_push_event (srcpad, src->pending_clut_event);
+ src->pending_clut_event = NULL;
+ }
+
+ /* read it in */
+ do {
+ res = gst_dvd_read_src_read (src, src->angle, src->change_cell, p_buf);
+ } while (res == GST_DVD_READ_AGAIN);
+
+ switch (res) {
+ case GST_DVD_READ_ERROR:{
+ /* FIXME: figure out a way to detect if scrambling is the problem */
+ if (!gst_dvd_read_descrambler_available ()) {
+ GST_ELEMENT_ERROR (src, RESOURCE, READ,
+ (_("Could not read DVD. This may be because the DVD is encrypted "
+ "and a DVD decryption library is not installed.")), (NULL));
+ } else {
+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")),
+ (NULL));
+ }
+ return GST_FLOW_ERROR;
+ }
+ case GST_DVD_READ_EOS:{
+ return GST_FLOW_EOS;
+ }
+ case GST_DVD_READ_OK:{
+ src->change_cell = FALSE;
+ return GST_FLOW_OK;
+ }
+ default:
+ break;
+ }
+
+ g_return_val_if_reached (GST_FLOW_EOS);
+}
+
+static void
+gst_dvd_read_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+ gboolean started;
+
+ GST_OBJECT_LOCK (src);
+ started = GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED);
+
+ switch (prop_id) {
+ case ARG_DEVICE:{
+ if (started) {
+ g_warning ("%s: property '%s' needs to be set before the device is "
+ "opened", GST_ELEMENT_NAME (src), pspec->name);
+ break;
+ }
+
+ g_free (src->location);
+ /* clear the filename if we get a NULL (is that possible?) */
+ if (g_value_get_string (value) == NULL) {
+ src->location = g_strdup ("/dev/dvd");
+ } else {
+ src->location = g_value_dup_string (value);
+ }
+ break;
+ }
+ case ARG_TITLE:
+ src->uri_title = g_value_get_int (value);
+ if (started) {
+ src->title = src->uri_title - 1;
+ src->new_seek = TRUE;
+ }
+ break;
+ case ARG_CHAPTER:
+ src->uri_chapter = g_value_get_int (value);
+ if (started) {
+ src->chapter = src->uri_chapter - 1;
+ src->new_seek = TRUE;
+ }
+ break;
+ case ARG_ANGLE:
+ src->uri_angle = g_value_get_int (value);
+ if (started) {
+ src->angle = src->uri_angle - 1;
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+
+ GST_OBJECT_UNLOCK (src);
+}
+
+static void
+gst_dvd_read_src_get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+
+ GST_OBJECT_LOCK (src);
+
+ switch (prop_id) {
+ case ARG_DEVICE:
+ g_value_set_string (value, src->location);
+ break;
+ case ARG_TITLE:
+ g_value_set_int (value, src->uri_title);
+ break;
+ case ARG_CHAPTER:
+ g_value_set_int (value, src->uri_chapter);
+ break;
+ case ARG_ANGLE:
+ g_value_set_int (value, src->uri_angle);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+
+ GST_OBJECT_UNLOCK (src);
+}
+
+static gboolean
+gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size)
+{
+ gboolean ret = FALSE;
+
+ if (src->dvd_title) {
+ gssize blocks;
+
+ blocks = DVDFileSize (src->dvd_title);
+ if (blocks >= 0) {
+ *size = (gint64) blocks *DVD_VIDEO_LB_LEN;
+
+ ret = TRUE;
+ } else {
+ GST_WARNING_OBJECT (src, "DVDFileSize(%p) failed!", src->dvd_title);
+ }
+ }
+
+ return ret;
+}
+
+/*** Querying and seeking ***/
+
+static gboolean
+gst_dvd_read_src_handle_seek_event (GstDvdReadSrc * src, GstEvent * event)
+{
+ GstSeekFlags flags;
+ GstSeekType cur_type, end_type;
+ gint64 new_off, total;
+ GstFormat format;
+ GstPad *srcpad;
+ gboolean query_ok;
+ gdouble rate;
+
+ gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &new_off,
+ &end_type, NULL);
+
+ if (rate <= 0.0) {
+ GST_DEBUG_OBJECT (src, "cannot do backwards playback yet");
+ return FALSE;
+ }
+
+ if (end_type != GST_SEEK_TYPE_NONE) {
+ if ((format != chapter_format && format != GST_FORMAT_TIME) ||
+ end_type != GST_SEEK_TYPE_SET) {
+ GST_DEBUG_OBJECT (src, "end seek type not supported");
+ return FALSE;
+ }
+ }
+
+ if (cur_type != GST_SEEK_TYPE_SET) {
+ GST_DEBUG_OBJECT (src, "only SEEK_TYPE_SET is supported");
+ return FALSE;
+ }
+
+ if (format == angle_format) {
+ GST_OBJECT_LOCK (src);
+ if (new_off < 0 || new_off >= src->num_angles) {
+ GST_OBJECT_UNLOCK (src);
+ GST_DEBUG_OBJECT (src, "invalid angle %d, only %d available",
+ src->num_angles, src->num_angles);
+ return FALSE;
+ }
+ src->angle = (gint) new_off;
+ GST_OBJECT_UNLOCK (src);
+ GST_DEBUG_OBJECT (src, "switched to angle %d", (gint) new_off + 1);
+ return TRUE;
+ }
+
+ if (format != chapter_format && format != title_format &&
+ format != GST_FORMAT_BYTES && format != GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (src, "unsupported seek format %d (%s)", format,
+ gst_format_get_name (format));
+ return FALSE;
+ }
+
+ if (format == GST_FORMAT_BYTES) {
+ GST_DEBUG_OBJECT (src, "Requested seek to byte %" G_GUINT64_FORMAT,
+ new_off);
+ } else if (format == GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (src, "Requested seek to time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (new_off));
+ if (gst_dvd_read_src_get_sector_from_time (src, new_off) < 0) {
+ GST_DEBUG_OBJECT (src, "Can't find sector for requested time");
+ return FALSE;
+ }
+ }
+
+ srcpad = GST_BASE_SRC_PAD (src);
+
+ /* check whether the seek looks reasonable (ie within possible range) */
+ if (format == GST_FORMAT_BYTES) {
+ GST_OBJECT_LOCK (src);
+ query_ok = gst_dvd_read_src_get_size (src, &total);
+ GST_OBJECT_UNLOCK (src);
+ } else {
+ query_ok = gst_pad_query_duration (srcpad, format, &total);
+ }
+
+ if (!query_ok) {
+ GST_DEBUG_OBJECT (src, "Failed to query duration in format %s",
+ gst_format_get_name (format));
+ return FALSE;
+ }
+
+ GST_DEBUG_OBJECT (src, "Total %s: %12" G_GINT64_FORMAT,
+ gst_format_get_name (format), total);
+ GST_DEBUG_OBJECT (src, "Seek to %s: %12" G_GINT64_FORMAT,
+ gst_format_get_name (format), new_off);
+
+ if (new_off >= total) {
+ GST_DEBUG_OBJECT (src, "Seek position out of range");
+ return FALSE;
+ }
+
+ /* set segment to seek format; this allows us to use the do_seek
+ * virtual function and let the base source handle all the tricky
+ * stuff for us. We don't use the segment internally anyway */
+ /* FIXME: can't take the stream lock here - what to do? */
+ GST_OBJECT_LOCK (src);
+ GST_BASE_SRC (src)->segment.format = format;
+ GST_BASE_SRC (src)->segment.start = 0;
+ GST_BASE_SRC (src)->segment.stop = total;
+ GST_BASE_SRC (src)->segment.duration = total;
+ GST_OBJECT_UNLOCK (src);
+
+ return GST_BASE_SRC_CLASS (parent_class)->event (GST_BASE_SRC (src), event);
+}
+
+static void
+gst_dvd_read_src_get_sector_bounds (GstDvdReadSrc * src, gint * first,
+ gint * last)
+{
+ gint c1, c2, tmp;
+ cur_title_get_chapter_bounds (src, 0, &c1, &tmp);
+ cur_title_get_chapter_bounds (src, src->num_chapters - 1, &tmp, &c2);
+ *first = src->cur_pgc->cell_playback[c1].first_sector;
+ *last = src->cur_pgc->cell_playback[c2].last_sector;
+}
+
+static gboolean
+gst_dvd_read_src_do_seek (GstBaseSrc * basesrc, GstSegment * s)
+{
+ GstDvdReadSrc *src;
+
+ src = GST_DVD_READ_SRC (basesrc);
+
+ GST_DEBUG_OBJECT (src, "Seeking to %s: %12" G_GINT64_FORMAT,
+ gst_format_get_name (s->format), s->position);
+
+ /* Ignore the first seek to 0, as it breaks starting playback
+ * from another chapter by seeking back to sector 0 */
+ if (src->first_seek && s->format == GST_FORMAT_BYTES && s->start == 0) {
+ src->first_seek = FALSE;
+ return TRUE;
+ }
+
+ if (s->format == sector_format || s->format == GST_FORMAT_BYTES
+ || s->format == GST_FORMAT_TIME) {
+ guint old;
+
+ old = src->cur_pack;
+
+ if (s->format == sector_format) {
+ gint first, last;
+ gst_dvd_read_src_get_sector_bounds (src, &first, &last);
+ GST_DEBUG_OBJECT (src, "Format is sector, seeking to %" G_GINT64_FORMAT,
+ s->position);
+ src->cur_pack = s->position;
+ if (src->cur_pack < first)
+ src->cur_pack = first;
+ if (src->cur_pack > last)
+ src->cur_pack = last;
+ } else if (s->format == GST_FORMAT_TIME) {
+ gint sector;
+ GST_DEBUG_OBJECT (src, "Format is time");
+
+ sector = gst_dvd_read_src_get_sector_from_time (src, s->position);
+
+ GST_DEBUG_OBJECT (src, "Time %" GST_TIME_FORMAT " => sector %d",
+ GST_TIME_ARGS (s->position), sector);
+
+ /* really shouldn't happen, we've checked this earlier ... */
+ g_return_val_if_fail (sector >= 0, FALSE);
+
+ src->cur_pack = sector;
+ } else {
+ /* byte format */
+ gint first, last;
+ gst_dvd_read_src_get_sector_bounds (src, &first, &last);
+ GST_DEBUG_OBJECT (src, "Format is byte");
+ src->cur_pack = s->position / DVD_VIDEO_LB_LEN;
+ if (((gint64) src->cur_pack * DVD_VIDEO_LB_LEN) != s->position) {
+ GST_LOG_OBJECT (src, "rounded down offset %" G_GINT64_FORMAT " => %"
+ G_GINT64_FORMAT, s->position,
+ (gint64) src->cur_pack * DVD_VIDEO_LB_LEN);
+ }
+ src->cur_pack += first;
+ }
+
+ if (!gst_dvd_read_src_goto_sector (src, src->angle)) {
+ GST_DEBUG_OBJECT (src, "seek to sector 0x%08x failed", src->cur_pack);
+ src->cur_pack = old;
+ return FALSE;
+ }
+
+ GST_LOG_OBJECT (src, "seek to sector 0x%08x ok", src->cur_pack);
+ } else if (s->format == chapter_format) {
+ if (!gst_dvd_read_src_goto_chapter (src, (gint) s->position)) {
+ GST_DEBUG_OBJECT (src, "seek to chapter %d failed",
+ (gint) s->position + 1);
+ return FALSE;
+ }
+ GST_INFO_OBJECT (src, "seek to chapter %d ok", (gint) s->position + 1);
+ src->chapter = s->position;
+ } else if (s->format == title_format) {
+ if (!gst_dvd_read_src_goto_title (src, (gint) s->position, src->angle) ||
+ !gst_dvd_read_src_goto_chapter (src, 0)) {
+ GST_DEBUG_OBJECT (src, "seek to title %d failed", (gint) s->position);
+ return FALSE;
+ }
+ src->title = (gint) s->position;
+ src->chapter = 0;
+ GST_INFO_OBJECT (src, "seek to title %d ok", src->title + 1);
+ } else {
+ g_return_val_if_reached (FALSE);
+ }
+
+ src->need_newsegment = TRUE;
+ return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_src_event (GstBaseSrc * basesrc, GstEvent * event)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+ gboolean res;
+
+ GST_LOG_OBJECT (src, "handling %s event", GST_EVENT_TYPE_NAME (event));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEEK:
+ res = gst_dvd_read_src_handle_seek_event (src, event);
+ break;
+ default:
+ res = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+ break;
+ }
+
+ return res;
+}
+
+static GstEvent *
+gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
+ const guint32 * clut)
+{
+ GstStructure *structure;
+ gchar name[16];
+ gint i;
+
+ structure = gst_structure_new ("application/x-gst-dvd",
+ "event", G_TYPE_STRING, "dvd-spu-clut-change", NULL);
+
+ /* Create a separate field for each value in the table. */
+ for (i = 0; i < 16; i++) {
+ g_snprintf (name, sizeof (name), "clut%02d", i);
+ gst_structure_set (structure, name, G_TYPE_INT, (int) clut[i], NULL);
+ }
+
+ /* Create the DVD event and put the structure into it. */
+ return gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, structure);
+}
+
+static gint64
+gst_dvd_read_src_convert_timecode (dvd_time_t * time)
+{
+ gint64 ret_time;
+ const gint64 one_hour = 3600 * GST_SECOND;
+ const gint64 one_min = 60 * GST_SECOND;
+
+ g_return_val_if_fail ((time->hour >> 4) < 0xa
+ && (time->hour & 0xf) < 0xa, -1);
+ g_return_val_if_fail ((time->minute >> 4) < 0x7
+ && (time->minute & 0xf) < 0xa, -1);
+ g_return_val_if_fail ((time->second >> 4) < 0x7
+ && (time->second & 0xf) < 0xa, -1);
+
+ ret_time = ((time->hour >> 4) * 10 + (time->hour & 0xf)) * one_hour;
+ ret_time += ((time->minute >> 4) * 10 + (time->minute & 0xf)) * one_min;
+ ret_time += ((time->second >> 4) * 10 + (time->second & 0xf)) * GST_SECOND;
+
+ return ret_time;
+}
+
+static gboolean
+gst_dvd_read_src_do_duration_query (GstDvdReadSrc * src, GstQuery * query)
+{
+ GstFormat format;
+ gint64 val = 0;
+
+ gst_query_parse_duration (query, &format, NULL);
+
+ switch (format) {
+ case GST_FORMAT_TIME:{
+ if (src->cur_pgc == NULL)
+ return FALSE;
+ val = gst_dvd_read_src_convert_timecode (&src->cur_pgc->playback_time);
+ if (val < 0)
+ return FALSE;
+ break;
+ }
+ case GST_FORMAT_BYTES:{
+ if (!gst_dvd_read_src_get_size (src, &val))
+ return FALSE;
+ break;
+ }
+ default:{
+ if (format == sector_format) {
+ val = DVDFileSize (src->dvd_title);
+ } else if (format == title_format) {
+ val = src->tt_srpt->nr_of_srpts;
+ } else if (format == chapter_format) {
+ val = src->num_chapters;
+ } else if (format == angle_format) {
+ val = src->tt_srpt->title[src->title].nr_of_angles;
+ } else {
+ GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
+ format, gst_format_get_name (format));
+ return FALSE;
+ }
+ break;
+ }
+ }
+
+ GST_LOG_OBJECT (src, "duration = %" G_GINT64_FORMAT " %s", val,
+ gst_format_get_name (format));
+
+ gst_query_set_duration (query, format, val);
+ return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_do_position_query (GstDvdReadSrc * src, GstQuery * query)
+{
+ GstFormat format;
+ gint64 val;
+
+ gst_query_parse_position (query, &format, NULL);
+
+ switch (format) {
+ case GST_FORMAT_BYTES:{
+ val = (gint64) src->cur_pack * DVD_VIDEO_LB_LEN;
+ break;
+ }
+ default:{
+ if (format == sector_format) {
+ val = src->cur_pack;
+ } else if (format == title_format) {
+ val = src->title;
+ } else if (format == chapter_format) {
+ val = src->chapter;
+ } else if (format == angle_format) {
+ val = src->angle;
+ } else {
+ GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
+ format, gst_format_get_name (format));
+ return FALSE;
+ }
+ break;
+ }
+ }
+
+ GST_LOG_OBJECT (src, "position = %" G_GINT64_FORMAT " %s", val,
+ gst_format_get_name (format));
+
+ gst_query_set_position (query, format, val);
+ return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_do_convert_query (GstDvdReadSrc * src, GstQuery * query)
+{
+ GstFormat src_format, dest_format;
+ gboolean ret = FALSE;
+ gint64 src_val, dest_val = -1;
+
+ gst_query_parse_convert (query, &src_format, &src_val, &dest_format, NULL);
+
+ if (src_format == dest_format) {
+ dest_val = src_val;
+ ret = TRUE;
+ goto done;
+ }
+
+ /* Formats to consider: TIME, DEFAULT, BYTES, title, chapter, sector.
+ * Note: title and chapter are counted as starting from 0 here, just like
+ * in the context of seek events. Another note: DEFAULT format is undefined */
+
+ if (src_format == GST_FORMAT_BYTES) {
+ src_format = sector_format;
+ src_val /= DVD_VIDEO_LB_LEN;
+ }
+
+ if (src_format == sector_format) {
+ /* SECTOR => xyz */
+ if (dest_format == GST_FORMAT_TIME && src_val < G_MAXUINT) {
+ dest_val = gst_dvd_read_src_get_time_for_sector (src, (guint) src_val);
+ ret = (dest_val >= 0);
+ } else if (dest_format == GST_FORMAT_BYTES) {
+ dest_val = src_val * DVD_VIDEO_LB_LEN;
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+ } else if (src_format == title_format) {
+ /* TITLE => xyz */
+ if (dest_format == GST_FORMAT_TIME) {
+ /* not really true, but we use this to trick the base source into
+ * handling seeks in title-format for us (the source won't know that
+ * we changed the title in this case) (changing titles should really
+ * be done with an interface rather than a seek, but for now we're
+ * stuck with this mechanism. Fix in 0.11) */
+ dest_val = (GstClockTime) 0;
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+ } else if (src_format == chapter_format) {
+ /* CHAPTER => xyz */
+ if (dest_format == GST_FORMAT_TIME) {
+ if (src->num_chapters >= 0 && src_val < src->num_chapters) {
+ dest_val = src->chapter_starts[src_val];
+ ret = TRUE;
+ }
+ } else if (dest_format == sector_format) {
+ } else {
+ ret = FALSE;
+ }
+ } else if (src_format == GST_FORMAT_TIME) {
+ /* TIME => xyz */
+ if (dest_format == sector_format || dest_format == GST_FORMAT_BYTES) {
+ dest_val = gst_dvd_read_src_get_sector_from_time (src, src_val);
+ ret = (dest_val >= 0);
+ if (dest_format == GST_FORMAT_BYTES)
+ dest_val *= DVD_VIDEO_LB_LEN;
+ } else if (dest_format == chapter_format) {
+ if (src->chapter_starts != NULL) {
+ gint i;
+
+ for (i = src->num_chapters - 1; i >= 0; --i) {
+ if (src->chapter_starts && src->chapter_starts[i] >= src_val) {
+ dest_val = i;
+ ret = TRUE;
+ break;
+ }
+ }
+ } else {
+ ret = FALSE;
+ }
+ } else {
+ ret = FALSE;
+ }
+ } else {
+ ret = FALSE;
+ }
+
+done:
+
+ if (ret) {
+ gst_query_set_convert (query, src_format, src_val, dest_format, dest_val);
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_dvd_read_src_src_query (GstBaseSrc * basesrc, GstQuery * query)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+ gboolean res = TRUE;
+
+ GST_LOG_OBJECT (src, "handling %s query", GST_QUERY_TYPE_NAME (query));
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_DURATION:
+ GST_OBJECT_LOCK (src);
+ if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+ res = gst_dvd_read_src_do_duration_query (src, query);
+ } else {
+ GST_DEBUG_OBJECT (src, "query failed: not started");
+ res = FALSE;
+ }
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case GST_QUERY_POSITION:
+ GST_OBJECT_LOCK (src);
+ if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+ res = gst_dvd_read_src_do_position_query (src, query);
+ } else {
+ GST_DEBUG_OBJECT (src, "query failed: not started");
+ res = FALSE;
+ }
+ GST_OBJECT_UNLOCK (src);
+ break;
+ case GST_QUERY_CONVERT:
+ GST_OBJECT_LOCK (src);
+ if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+ res = gst_dvd_read_src_do_convert_query (src, query);
+ } else {
+ GST_DEBUG_OBJECT (src, "query failed: not started");
+ res = FALSE;
+ }
+ GST_OBJECT_UNLOCK (src);
+ break;
+ default:
+ res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, int angle)
+{
+ gint seek_to = src->cur_pack;
+ gint chapter, next, cur, i;
+
+ /* retrieve position */
+ src->cur_pack = 0;
+ GST_DEBUG_OBJECT (src, "Goto sector %d, angle %d, within %d chapters",
+ seek_to, angle, src->num_chapters);
+
+ for (i = 0; i < src->num_chapters; i++) {
+ gint c1, c2;
+
+ cur_title_get_chapter_bounds (src, i, &c1, &c2);
+ GST_DEBUG_OBJECT (src, " Looking in chapter %d, bounds: %d %d", i, c1, c2);
+
+ for (next = cur = c1; cur < c2;) {
+ gint first = src->cur_pgc->cell_playback[cur].first_sector;
+ gint last = src->cur_pgc->cell_playback[cur].last_sector;
+ GST_DEBUG_OBJECT (src, "Cell %d sector bounds: %d %d", cur, first, last);
+ cur = next;
+ if (src->cur_pgc->cell_playback[cur].block_type == BLOCK_TYPE_ANGLE_BLOCK)
+ cur += angle;
+ next = gst_dvd_read_src_get_next_cell (src, src->cur_pgc, cur);
+ /* seeking to 0 should end up at first chapter in any case */
+ if ((seek_to >= first && seek_to <= last) || (seek_to == 0 && i == 0)) {
+ GST_DEBUG_OBJECT (src, "Seek target found in chapter %d", i);
+ chapter = i;
+ goto done;
+ }
+ }
+ }
+
+ GST_DEBUG_OBJECT (src, "Seek to sector %u failed", seek_to);
+
+ return FALSE;
+
+done:
+ {
+ /* so chapter $chapter and cell $cur contain our sector
+ * of interest. Let's go there! */
+ GST_INFO_OBJECT (src, "Seek succeeded, going to chapter %u, cell %u",
+ chapter + 1, cur);
+
+ gst_dvd_read_src_goto_chapter (src, chapter);
+ src->cur_cell = cur;
+ src->next_cell = next;
+ src->new_cell = FALSE;
+ src->cur_pack = seek_to;
+
+ return TRUE;
+ }
+}
+
+
+/*** URI interface ***/
+
+static GstURIType
+gst_dvd_read_src_uri_get_type (GType type)
+{
+ return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_dvd_read_src_uri_get_protocols (GType type)
+{
+ static const gchar *protocols[] = { "dvd", NULL };
+
+ return protocols;
+}
+
+static gchar *
+gst_dvd_read_src_uri_get_uri (GstURIHandler * handler)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
+ gchar *uri;
+
+ GST_OBJECT_LOCK (src);
+ uri = g_strdup_printf ("dvd://%d,%d,%d", src->uri_title, src->uri_chapter,
+ src->uri_angle);
+ GST_OBJECT_UNLOCK (src);
+
+ return uri;
+}
+
+static gboolean
+gst_dvd_read_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
+{
+ GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
+
+ /* parse out the new t/c/a and seek to them */
+ {
+ gchar *location = NULL;
+ gchar **strs;
+ gchar **strcur;
+ gint pos = 0;
+
+ location = gst_uri_get_location (uri);
+
+ GST_OBJECT_LOCK (src);
+
+ src->uri_title = 1;
+ src->uri_chapter = 1;
+ src->uri_angle = 1;
+
+ if (!location)
+ goto empty_location;
+
+ strcur = strs = g_strsplit (location, ",", 0);
+ while (strcur && *strcur) {
+ gint val;
+
+ if (!sscanf (*strcur, "%d", &val))
+ break;
+
+ if (val <= 0) {
+ g_warning ("Invalid value %d in URI '%s'. Must be 1 or greater",
+ val, location);
+ break;
+ }
+
+ switch (pos) {
+ case 0:
+ src->uri_title = val;
+ break;
+ case 1:
+ src->uri_chapter = val;
+ break;
+ case 2:
+ src->uri_angle = val;
+ break;
+ }
+
+ strcur++;
+ pos++;
+ }
+
+ if (pos > 0 && GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+ src->title = src->uri_title - 1;
+ src->chapter = src->uri_chapter - 1;
+ src->angle = src->uri_angle - 1;
+ src->new_seek = TRUE;
+ }
+
+ g_strfreev (strs);
+ g_free (location);
+
+ empty_location:
+
+ GST_OBJECT_UNLOCK (src);
+ }
+
+ return TRUE;
+}
+
+static void
+gst_dvd_read_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+ iface->get_type = gst_dvd_read_src_uri_get_type;
+ iface->get_protocols = gst_dvd_read_src_uri_get_protocols;
+ iface->get_uri = gst_dvd_read_src_uri_get_uri;
+ iface->set_uri = gst_dvd_read_src_uri_set_uri;
+}
+
+static gboolean
+dvdread_element_init (GstPlugin * plugin)
+{
+ GST_DEBUG_CATEGORY_INIT (gstgst_dvd_read_src_debug, "dvdreadsrc", 0,
+ "DVD reader element based on dvdreadsrc");
+
+#ifdef ENABLE_NLS
+ GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+ LOCALEDIR);
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+ return gst_element_register (plugin, "dvdreadsrc", GST_RANK_NONE,
+ GST_TYPE_DVD_READ_SRC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (dvdreadsrc, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ dvdread,
+ "Access a DVD with dvdread",
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer DVD title source
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2001> Billy Biggs <vektor@dumbterm.net>.
+ * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_DVD_READ_SRC_H__
+#define __GST_DVD_READ_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+#include <dvdread/dvd_reader.h>
+#include <dvdread/ifo_types.h>
+#include <dvdread/ifo_read.h>
+#include <dvdread/nav_read.h>
+#include <dvdread/nav_print.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_READ_SRC (gst_dvd_read_src_get_type())
+#define GST_DVD_READ_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_READ_SRC,GstDvdReadSrc))
+#define GST_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_READ_SRC,GstDvdReadSrcClass))
+#define GST_IS_DVD_READ_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_READ_SRC))
+#define GST_IS_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_READ_SRC))
+
+typedef struct _GstDvdReadSrc GstDvdReadSrc;
+typedef struct _GstDvdReadSrcClass GstDvdReadSrcClass;
+
+struct _GstDvdReadSrc {
+ GstPushSrc pushsrc;
+
+ /* location */
+ gchar *location;
+
+ gboolean first_seek;
+ gboolean new_seek;
+ gboolean change_cell;
+
+ gboolean new_cell;
+
+ gint uri_title; /* set via the URI handler or properties, */
+ gint uri_chapter; /* otherwise not touched; these values */
+ gint uri_angle; /* start from 1 */
+
+ gint title; /* current position while open, set to the */
+ gint chapter; /* URI-set values in ::start(). these */
+ gint angle; /* values start from 0 */
+
+ gint start_cell, last_cell, cur_cell;
+ gint cur_pack;
+ gint next_cell;
+ dvd_reader_t *dvd;
+ ifo_handle_t *vmg_file;
+
+ /* title stuff */
+ gint ttn;
+ tt_srpt_t *tt_srpt;
+ ifo_handle_t *vts_file;
+ vts_ptt_srpt_t *vts_ptt_srpt;
+ vts_tmapt_t *vts_tmapt;
+ dvd_file_t *dvd_title;
+ gint num_chapters;
+ gint num_angles;
+
+ GstClockTime *chapter_starts; /* start time of chapters within title */
+
+ /* which program chain to watch (based on title and chapter number) */
+ pgc_t *cur_pgc;
+ gint pgc_id;
+ gint pgn;
+
+ gboolean need_newsegment;
+ GstEvent *title_lang_event_pending;
+ GstEvent *pending_clut_event;
+};
+
+struct _GstDvdReadSrcClass {
+ GstPushSrcClass parent_class;
+};
+
+GType gst_dvd_read_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdreadsrc);
+
+G_END_DECLS
+
+#endif /* __GST_DVD_READ_SRC_H__ */
+
--- /dev/null
+dvdread_dep = dependency('dvdread', version : '>= 0.5.0', required : get_option('dvdread'))
+
+if gmodule_dep.found() and dvdread_dep.found()
+ dvdread = library('gstdvdread',
+ ['dvdreadsrc.c'],
+ c_args : ugly_args,
+ include_directories : [configinc, libsinc],
+ dependencies : [gstbase_dep, gmodule_dep, dvdread_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(dvdread, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [dvdread]
+endif
--- /dev/null
+subdir('a52dec')
+subdir('amrnb')
+subdir('amrwbdec')
+subdir('cdio')
+subdir('dvdread')
+subdir('mpeg2dec')
+subdir('sidplay')
+subdir('x264')
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <string.h>
+
+#include <inttypes.h>
+
+#include "gstmpeg2dec.h"
+
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+/* 16byte-aligns a buffer for libmpeg2 */
+#define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15)))
+
+GST_DEBUG_CATEGORY_STATIC (mpeg2dec_debug);
+#define GST_CAT_DEFAULT mpeg2dec_debug
+GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
+
+/* Send a warning message about decoding errors after receiving this many
+ * STATE_INVALID return values from mpeg2_parse. -1 means never.
+ */
+#define WARN_THRESHOLD (5)
+
+static GstStaticPadTemplate sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/mpeg, "
+ "mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) false")
+ );
+
+static GstStaticPadTemplate src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw, "
+ "format = (string) { YV12, I420, Y42B, Y444 }, "
+ "width = (int) [ 16, 4096 ], "
+ "height = (int) [ 16, 4096 ], "
+ "framerate = (fraction) [ 0/1, 2147483647/1 ]")
+ );
+
+#define gst_mpeg2dec_parent_class parent_class
+G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_VIDEO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (mpeg2dec, "mpeg2dec", GST_RANK_SECONDARY,
+ GST_TYPE_MPEG2DEC);
+
+static void gst_mpeg2dec_finalize (GObject * object);
+
+/* GstVideoDecoder base class method */
+static gboolean gst_mpeg2dec_open (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_close (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder,
+ GstVideoCodecState * state);
+static gboolean gst_mpeg2dec_flush (GstVideoDecoder * decoder);
+static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder);
+static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
+ GstVideoCodecFrame * frame);
+static gboolean gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder,
+ GstQuery * query);
+
+static void gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec);
+static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec,
+ GstVideoCodecFrame * in_frame, GstVideoFrame * in_vframe);
+
+static void
+gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass);
+
+ gobject_class->finalize = gst_mpeg2dec_finalize;
+
+ gst_element_class_add_static_pad_template (element_class,
+ &src_template_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template_factory);
+ gst_element_class_set_static_metadata (element_class,
+ "mpeg1 and mpeg2 video decoder", "Codec/Decoder/Video",
+ "Uses libmpeg2 to decode MPEG video streams",
+ "Wim Taymans <wim.taymans@chello.be>");
+
+ video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_mpeg2dec_open);
+ video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close);
+ video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start);
+ video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop);
+ video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_mpeg2dec_flush);
+ video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format);
+ video_decoder_class->handle_frame =
+ GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame);
+ video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_mpeg2dec_finish);
+ video_decoder_class->decide_allocation =
+ GST_DEBUG_FUNCPTR (gst_mpeg2dec_decide_allocation);
+
+ GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0,
+ "MPEG-2 Video Decoder");
+ GST_DEBUG_CATEGORY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
+}
+
+static void
+gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec)
+{
+ gst_video_decoder_set_packetized (GST_VIDEO_DECODER (mpeg2dec), TRUE);
+ gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (mpeg2dec), TRUE);
+ gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
+ (mpeg2dec), TRUE);
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (mpeg2dec));
+
+ /* initialize the mpeg2dec acceleration */
+}
+
+static void
+gst_mpeg2dec_finalize (GObject * object)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (object);
+
+ if (mpeg2dec->decoder) {
+ GST_DEBUG_OBJECT (mpeg2dec, "closing decoder");
+ mpeg2_close (mpeg2dec->decoder);
+ mpeg2dec->decoder = NULL;
+ }
+
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+ g_free (mpeg2dec->dummybuf[3]);
+ mpeg2dec->dummybuf[3] = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_mpeg2dec_open (GstVideoDecoder * decoder)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ mpeg2_accel (MPEG2_ACCEL_DETECT);
+ if ((mpeg2dec->decoder = mpeg2_init ()) == NULL)
+ return FALSE;
+ mpeg2dec->info = mpeg2_info (mpeg2dec->decoder);
+
+ return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_close (GstVideoDecoder * decoder)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ if (mpeg2dec->decoder) {
+ mpeg2_close (mpeg2dec->decoder);
+ mpeg2dec->decoder = NULL;
+ mpeg2dec->info = NULL;
+ }
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+ return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ /* Save input state to be used as reference for output state */
+ if (mpeg2dec->input_state)
+ gst_video_codec_state_unref (mpeg2dec->input_state);
+ mpeg2dec->input_state = gst_video_codec_state_ref (state);
+
+ return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_start (GstVideoDecoder * decoder)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_stop (GstVideoDecoder * decoder)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ mpeg2_reset (mpeg2dec->decoder, 0);
+ mpeg2_skip (mpeg2dec->decoder, 1);
+
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+ if (mpeg2dec->input_state)
+ gst_video_codec_state_unref (mpeg2dec->input_state);
+ mpeg2dec->input_state = NULL;
+
+ if (mpeg2dec->downstream_pool) {
+ gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
+ gst_object_unref (mpeg2dec->downstream_pool);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_flush (GstVideoDecoder * decoder)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ /* reset the initial video state */
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+ mpeg2_reset (mpeg2dec->decoder, 1);
+ mpeg2_skip (mpeg2dec->decoder, 1);
+
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+ if (mpeg2dec->downstream_pool)
+ gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_mpeg2dec_finish (GstVideoDecoder * decoder)
+{
+ return GST_FLOW_OK;
+}
+
+static GstBufferPool *
+gst_mpeg2dec_create_generic_pool (GstAllocator * allocator,
+ GstAllocationParams * params, GstCaps * caps, guint size, guint min,
+ guint max, GstStructure ** out_config)
+{
+ GstBufferPool *pool;
+ GstStructure *config;
+
+ pool = gst_video_buffer_pool_new ();
+ config = gst_buffer_pool_get_config (pool);
+
+ gst_buffer_pool_config_set_allocator (config, allocator, params);
+ gst_buffer_pool_config_set_params (config, caps, size, min, max);
+ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+ *out_config = config;
+ return pool;
+}
+
+static gboolean
+gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
+{
+ GstMpeg2dec *dec = GST_MPEG2DEC (decoder);
+ GstBufferPool *pool;
+ guint size, min, max;
+ GstStructure *config, *down_config = NULL;
+ GstAllocator *allocator;
+ GstAllocationParams params;
+ gboolean update_allocator;
+ gboolean has_videometa = FALSE;
+ GstCaps *caps;
+
+ /* Get rid of ancient pool */
+ if (dec->downstream_pool) {
+ gst_buffer_pool_set_active (dec->downstream_pool, FALSE);
+ gst_object_unref (dec->downstream_pool);
+ dec->downstream_pool = NULL;
+ }
+
+ /* Get negotiated allocation caps */
+ gst_query_parse_allocation (query, &caps, NULL);
+
+ /* Set allocation parameters to guarantee 16-byte aligned output buffers */
+ if (gst_query_get_n_allocation_params (query) > 0) {
+ gst_query_parse_nth_allocation_param (query, 0, &allocator, ¶ms);
+ update_allocator = TRUE;
+ } else {
+ allocator = NULL;
+ gst_allocation_params_init (¶ms);
+ update_allocator = FALSE;
+ }
+
+ params.align = MAX (params.align, 15);
+
+ if (update_allocator)
+ gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms);
+ else
+ gst_query_add_allocation_param (query, allocator, ¶ms);
+
+ /* Now chain up to the parent class to guarantee that we can
+ * get a buffer pool from the query */
+ if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
+ query)) {
+ if (allocator)
+ gst_object_unref (allocator);
+ return FALSE;
+ }
+
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+
+ config = gst_buffer_pool_get_config (pool);
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_META);
+ has_videometa = TRUE;
+ }
+
+ if (dec->need_alignment) {
+ /* If downstream does not support video meta, we will have to copy, keep
+ * the downstream pool to avoid double copying */
+ if (!has_videometa) {
+ dec->downstream_pool = pool;
+ pool = NULL;
+ down_config = config;
+ config = NULL;
+ min = 2;
+ max = 0;
+ }
+
+ /* In case downstream support video meta, but the downstream pool does not
+ * have alignment support, discard downstream pool and use video pool */
+ else if (!gst_buffer_pool_has_option (pool,
+ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
+ gst_object_unref (pool);
+ pool = NULL;
+ gst_structure_free (config);
+ config = NULL;
+ }
+
+ if (!pool)
+ pool = gst_mpeg2dec_create_generic_pool (allocator, ¶ms, caps, size,
+ min, max, &config);
+
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+ gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
+ }
+
+ if (allocator)
+ gst_object_unref (allocator);
+
+ /* If we are copying out, we'll need to setup and activate the other pool */
+ if (dec->downstream_pool) {
+ if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config)) {
+ down_config = gst_buffer_pool_get_config (dec->downstream_pool);
+ if (!gst_buffer_pool_config_validate_params (down_config, caps, size, min,
+ max)) {
+ gst_structure_free (down_config);
+ goto config_failed;
+ }
+
+ if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config))
+ goto config_failed;
+ }
+
+ if (!gst_buffer_pool_set_active (dec->downstream_pool, TRUE))
+ goto activate_failed;
+ }
+
+ /* Now configure the pool, if the pool had made some changes, it will
+ * return FALSE. Validate the changes ...*/
+ if (!gst_buffer_pool_set_config (pool, config)) {
+ config = gst_buffer_pool_get_config (pool);
+
+ /* Check basic params */
+ if (!gst_buffer_pool_config_validate_params (config, caps, size, min, max)) {
+ gst_structure_free (config);
+ goto config_failed;
+ }
+
+ /* If needed, check that resulting alignment is still valid */
+ if (dec->need_alignment) {
+ GstVideoAlignment valign;
+
+ if (!gst_buffer_pool_config_get_video_alignment (config, &valign)) {
+ gst_structure_free (config);
+ goto config_failed;
+ }
+
+ if (valign.padding_left != 0 || valign.padding_top != 0
+ || valign.padding_right < dec->valign.padding_right
+ || valign.padding_bottom < dec->valign.padding_bottom) {
+ gst_structure_free (config);
+ goto config_failed;
+ }
+ }
+
+ if (!gst_buffer_pool_set_config (pool, config))
+ goto config_failed;
+ }
+
+ /* For external pools, we need to check strides */
+ if (!GST_IS_VIDEO_BUFFER_POOL (pool) && has_videometa) {
+ GstBuffer *buffer;
+ const GstVideoFormatInfo *finfo;
+ GstVideoMeta *vmeta;
+ gint uv_stride;
+
+ if (!gst_buffer_pool_set_active (pool, TRUE))
+ goto activate_failed;
+
+ if (gst_buffer_pool_acquire_buffer (pool, &buffer, NULL) != GST_FLOW_OK) {
+ gst_buffer_pool_set_active (pool, FALSE);
+ goto acquire_failed;
+ }
+
+ vmeta = gst_buffer_get_video_meta (buffer);
+ finfo = gst_video_format_get_info (vmeta->format);
+
+ /* Check that strides are compatible. In this case, we can scale the
+ * stride directly since all the pixel strides for the formats we support
+ * is 1 */
+ uv_stride = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, 1, vmeta->stride[0]);
+ if (uv_stride != vmeta->stride[1] || uv_stride != vmeta->stride[2]) {
+ gst_buffer_pool_set_active (pool, FALSE);
+ gst_object_unref (pool);
+
+ pool = gst_mpeg2dec_create_generic_pool (allocator, ¶ms, caps, size,
+ min, max, &config);
+
+ if (dec->need_alignment) {
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+ gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
+ }
+
+ /* Generic pool don't fail on _set_config() */
+ gst_buffer_pool_set_config (pool, config);
+ }
+
+ gst_buffer_unref (buffer);
+ }
+
+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+ gst_object_unref (pool);
+
+ return TRUE;
+
+config_failed:
+ gst_object_unref (pool);
+ GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+ ("Failed to configure buffer pool"),
+ ("Configuration is most likely invalid, please report this issue."));
+ return FALSE;
+
+activate_failed:
+ gst_object_unref (pool);
+ GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+ ("Failed to activate buffer pool"), (NULL));
+ return FALSE;
+
+acquire_failed:
+ gst_object_unref (pool);
+ GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+ ("Failed to acquire a buffer"), (NULL));
+ return FALSE;
+}
+
+static GstFlowReturn
+gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstVideoCodecFrame * in_frame,
+ GstVideoFrame * input_vframe)
+{
+ GstVideoCodecState *state;
+ GstVideoInfo *info;
+ GstVideoInfo *dinfo;
+ GstVideoFrame output_frame;
+ GstFlowReturn ret;
+ GstBuffer *buffer = NULL;
+
+ state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (dec));
+ info = &state->info;
+ dinfo = &dec->decoded_info;
+
+ GST_CAT_LOG_OBJECT (CAT_PERFORMANCE, dec,
+ "Copying input buffer %ux%u (%" G_GSIZE_FORMAT ") to output buffer "
+ "%ux%u (%" G_GSIZE_FORMAT ")", dinfo->width, dinfo->height,
+ dinfo->size, info->width, info->height, info->size);
+
+ ret = gst_buffer_pool_acquire_buffer (dec->downstream_pool, &buffer, NULL);
+ if (ret != GST_FLOW_OK)
+ goto beach;
+
+ if (!gst_video_frame_map (&output_frame, info, buffer, GST_MAP_WRITE))
+ goto map_fail;
+
+ if (in_frame->output_buffer)
+ gst_buffer_unref (in_frame->output_buffer);
+ in_frame->output_buffer = buffer;
+
+ if (!gst_video_frame_copy (&output_frame, input_vframe))
+ goto copy_failed;
+
+ gst_video_frame_unmap (&output_frame);
+
+ GST_BUFFER_FLAGS (in_frame->output_buffer) =
+ GST_BUFFER_FLAGS (input_vframe->buffer);
+
+beach:
+ gst_video_codec_state_unref (state);
+
+ return ret;
+
+map_fail:
+ {
+ GST_ERROR_OBJECT (dec, "Failed to map output frame");
+ gst_video_codec_state_unref (state);
+ return GST_FLOW_ERROR;
+ }
+
+copy_failed:
+ {
+ GST_ERROR_OBJECT (dec, "Failed to copy output frame");
+ gst_video_frame_unmap (&output_frame);
+ gst_video_codec_state_unref (state);
+ return GST_FLOW_ERROR;
+ }
+}
+
+typedef struct
+{
+ gint id;
+ GstVideoFrame frame;
+} GstMpeg2DecBuffer;
+
+static void
+gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec)
+{
+ GList *l;
+ while ((l = g_list_first (mpeg2dec->buffers))) {
+ GstMpeg2DecBuffer *mbuf = l->data;
+ gst_video_frame_unmap (&mbuf->frame);
+ g_slice_free (GstMpeg2DecBuffer, mbuf);
+ mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
+ }
+}
+
+static void
+gst_mpeg2dec_save_buffer (GstMpeg2dec * mpeg2dec, gint id,
+ GstVideoFrame * frame)
+{
+ GstMpeg2DecBuffer *mbuf;
+
+ GST_LOG_OBJECT (mpeg2dec, "Saving local info for frame %d", id);
+
+ mbuf = g_slice_new0 (GstMpeg2DecBuffer);
+ mbuf->id = id;
+ mbuf->frame = *frame;
+
+ mpeg2dec->buffers = g_list_prepend (mpeg2dec->buffers, mbuf);
+}
+
+static gint
+gst_mpeg2dec_buffer_compare (GstMpeg2DecBuffer * mbuf, gconstpointer id)
+{
+ if (mbuf->id == GPOINTER_TO_INT (id))
+ return 0;
+ return -1;
+}
+
+static void
+gst_mpeg2dec_discard_buffer (GstMpeg2dec * mpeg2dec, gint id)
+{
+ GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
+ (GCompareFunc) gst_mpeg2dec_buffer_compare);
+
+ if (l) {
+ GstMpeg2DecBuffer *mbuf = l->data;
+ gst_video_frame_unmap (&mbuf->frame);
+ g_slice_free (GstMpeg2DecBuffer, mbuf);
+ mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
+ GST_LOG_OBJECT (mpeg2dec, "Discarded local info for frame %d", id);
+ } else {
+ GST_WARNING ("Could not find buffer %d, will be leaked until next reset",
+ id);
+ }
+}
+
+static GstVideoFrame *
+gst_mpeg2dec_get_buffer (GstMpeg2dec * mpeg2dec, gint id)
+{
+ GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
+ (GCompareFunc) gst_mpeg2dec_buffer_compare);
+
+ if (l) {
+ GstMpeg2DecBuffer *mbuf = l->data;
+ return &mbuf->frame;
+ }
+
+ return NULL;
+}
+
+static void
+init_dummybuf (GstMpeg2dec * mpeg2dec)
+{
+ g_free (mpeg2dec->dummybuf[3]);
+
+ /* libmpeg2 needs 16 byte aligned buffers... care for this here */
+ mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->decoded_info.size + 15);
+ mpeg2dec->dummybuf[0] = ALIGN_16 (mpeg2dec->dummybuf[3]);
+ mpeg2dec->dummybuf[1] =
+ mpeg2dec->dummybuf[0] +
+ GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 1);
+ mpeg2dec->dummybuf[2] =
+ mpeg2dec->dummybuf[0] +
+ GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 2);
+}
+
+static GstFlowReturn
+handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstClockTime latency;
+ const mpeg2_sequence_t *sequence;
+ GstVideoCodecState *state;
+ GstVideoInfo *vinfo;
+ GstVideoFormat format;
+
+ sequence = info->sequence;
+
+ if (sequence->frame_period == 0)
+ goto invalid_frame_period;
+
+ /* mpeg2 video can only be from 16x16 to 4096x4096. Everything
+ * else is a corrupted file */
+ if (sequence->width > 4096 || sequence->width < 16 ||
+ sequence->height > 4096 || sequence->height < 16)
+ goto invalid_size;
+
+ GST_DEBUG_OBJECT (mpeg2dec,
+ "widthxheight: %dx%d , decoded_widthxheight: %dx%d",
+ sequence->picture_width, sequence->picture_height, sequence->width,
+ sequence->height);
+
+ gst_video_alignment_reset (&mpeg2dec->valign);
+
+ if (sequence->picture_width < sequence->width ||
+ sequence->picture_height < sequence->height) {
+ GST_DEBUG_OBJECT (mpeg2dec, "we need to crop");
+ mpeg2dec->valign.padding_right = sequence->width - sequence->picture_width;
+ mpeg2dec->valign.padding_bottom =
+ sequence->height - sequence->picture_height;
+ mpeg2dec->need_alignment = TRUE;
+ } else if (sequence->picture_width == sequence->width ||
+ sequence->picture_height == sequence->height) {
+ GST_DEBUG_OBJECT (mpeg2dec, "no cropping needed");
+ mpeg2dec->need_alignment = FALSE;
+ } else {
+ goto invalid_picture;
+ }
+
+ /* get subsampling */
+ if (sequence->chroma_width < sequence->width) {
+ /* horizontally subsampled */
+ if (sequence->chroma_height < sequence->height) {
+ /* and vertically subsamples */
+ format = GST_VIDEO_FORMAT_I420;
+ } else {
+ format = GST_VIDEO_FORMAT_Y42B;
+ }
+ } else {
+ /* not subsampled */
+ format = GST_VIDEO_FORMAT_Y444;
+ }
+
+ state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (mpeg2dec),
+ format, sequence->picture_width, sequence->picture_height,
+ mpeg2dec->input_state);
+ vinfo = &state->info;
+
+ /* If we don't have a valid upstream PAR override it */
+ if (GST_VIDEO_INFO_PAR_N (vinfo) == 1 &&
+ GST_VIDEO_INFO_PAR_D (vinfo) == 1 &&
+ sequence->pixel_width != 0 && sequence->pixel_height != 0) {
+ guint pixel_width, pixel_height;
+
+ if (mpeg2_guess_aspect (sequence, &pixel_width, &pixel_height)) {
+ vinfo->par_n = pixel_width;
+ vinfo->par_d = pixel_height;
+ }
+ GST_DEBUG_OBJECT (mpeg2dec, "Setting PAR %d x %d",
+ vinfo->par_n, vinfo->par_d);
+ }
+ vinfo->fps_n = 27000000;
+ vinfo->fps_d = sequence->frame_period;
+
+ if (!(sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE))
+ vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
+ else
+ vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+ vinfo->chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2;
+ vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
+
+ if (sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION) {
+ /* do color description */
+ switch (sequence->colour_primaries) {
+ case 1:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
+ break;
+ case 5:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
+ break;
+ case 6:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
+ break;
+ case 7:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
+ break;
+ /* 0 forbidden */
+ /* 2 unspecified */
+ /* 3 reserved */
+ /* 8-255 reserved */
+ default:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
+ break;
+ }
+ /* matrix coefficients */
+ switch (sequence->matrix_coefficients) {
+ case 1:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC;
+ break;
+ case 5:
+ case 6:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
+ break;
+ case 7:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M;
+ break;
+ /* 0 forbidden */
+ /* 2 unspecified */
+ /* 3 reserved */
+ /* 8-255 reserved */
+ default:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN;
+ break;
+ }
+ /* transfer characteristics */
+ switch (sequence->transfer_characteristics) {
+ case 1:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22;
+ break;
+ case 5:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28;
+ break;
+ case 6:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+ break;
+ case 7:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M;
+ break;
+ case 8:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10;
+ break;
+ /* 0 forbidden */
+ /* 2 unspecified */
+ /* 3 reserved */
+ /* 9-255 reserved */
+ default:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN;
+ break;
+ }
+ }
+
+ GST_DEBUG_OBJECT (mpeg2dec,
+ "sequence flags: %d, frame period: %d, frame rate: %d/%d",
+ sequence->flags, sequence->frame_period, vinfo->fps_n, vinfo->fps_d);
+ GST_DEBUG_OBJECT (mpeg2dec, "profile: %02x, colour_primaries: %d",
+ sequence->profile_level_id, sequence->colour_primaries);
+ GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d",
+ sequence->transfer_characteristics, sequence->matrix_coefficients);
+ GST_DEBUG_OBJECT (mpeg2dec,
+ "FLAGS: CONSTRAINED_PARAMETERS:%d, PROGRESSIVE_SEQUENCE:%d",
+ sequence->flags & SEQ_FLAG_CONSTRAINED_PARAMETERS,
+ sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
+ GST_DEBUG_OBJECT (mpeg2dec, "FLAGS: LOW_DELAY:%d, COLOUR_DESCRIPTION:%d",
+ sequence->flags & SEQ_FLAG_LOW_DELAY,
+ sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION);
+
+ /* Save the padded video information */
+ mpeg2dec->decoded_info = *vinfo;
+ gst_video_info_align (&mpeg2dec->decoded_info, &mpeg2dec->valign);
+
+ /* Mpeg2dec has 2 frame latency to produce a picture and 1 frame latency in
+ * it's parser */
+ latency = gst_util_uint64_scale (3 * GST_SECOND, vinfo->fps_d, vinfo->fps_n);
+ gst_video_decoder_set_latency (GST_VIDEO_DECODER (mpeg2dec), latency,
+ latency);
+
+ if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (mpeg2dec)))
+ goto negotiation_fail;
+
+ gst_video_codec_state_unref (state);
+
+ mpeg2_custom_fbuf (mpeg2dec->decoder, 1);
+
+ init_dummybuf (mpeg2dec);
+
+ /* Pump in some null buffers, because otherwise libmpeg2 doesn't
+ * initialise the discard_fbuf->id */
+ mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+ mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+ mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+ return ret;
+
+invalid_frame_period:
+ {
+ GST_WARNING_OBJECT (mpeg2dec, "Frame period is 0!");
+ return GST_FLOW_ERROR;
+ }
+invalid_size:
+ {
+ GST_ERROR_OBJECT (mpeg2dec, "Invalid frame dimensions: %d x %d",
+ sequence->width, sequence->height);
+ return GST_FLOW_ERROR;
+ }
+
+invalid_picture:
+ {
+ GST_ERROR_OBJECT (mpeg2dec, "Picture dimension bigger then frame: "
+ "%d x %d is bigger then %d x %d", sequence->picture_width,
+ sequence->picture_height, sequence->width, sequence->height);
+ return GST_FLOW_ERROR;
+ }
+
+
+negotiation_fail:
+ {
+ GST_WARNING_OBJECT (mpeg2dec, "Failed to negotiate with downstream");
+ gst_video_codec_state_unref (state);
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstFlowReturn
+handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info,
+ GstVideoCodecFrame * frame)
+{
+ GstVideoDecoder *decoder = (GstVideoDecoder *) mpeg2dec;
+ GstFlowReturn ret;
+ gint type;
+ const gchar *type_str = NULL;
+ gboolean key_frame = FALSE;
+ const mpeg2_picture_t *picture = info->current_picture;
+ GstVideoFrame vframe;
+ guint8 *buf[3];
+
+ ret = gst_video_decoder_allocate_output_frame (decoder, frame);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ type = picture->flags & PIC_MASK_CODING_TYPE;
+ switch (type) {
+ case PIC_FLAG_CODING_TYPE_I:
+ key_frame = TRUE;
+ mpeg2_skip (mpeg2dec->decoder, 0);
+ type_str = "I";
+ break;
+ case PIC_FLAG_CODING_TYPE_P:
+ type_str = "P";
+ break;
+ case PIC_FLAG_CODING_TYPE_B:
+ type_str = "B";
+ break;
+ default:
+ gst_video_codec_frame_ref (frame);
+ ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+ GST_VIDEO_DECODER_ERROR (mpeg2dec, 1, STREAM, DECODE,
+ ("decoding error"), ("Invalid picture type"), ret);
+ return ret;
+ }
+
+ GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %s", type_str);
+ GST_DEBUG_OBJECT (mpeg2dec, "picture %s, frame %i",
+ key_frame ? ", kf," : " ", frame->system_frame_number);
+
+ if (GST_VIDEO_INFO_IS_INTERLACED (&mpeg2dec->decoded_info)) {
+ /* This implies SEQ_FLAG_PROGRESSIVE_SEQUENCE is not set */
+ if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) {
+ GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
+ }
+ if (!(picture->flags & PIC_FLAG_PROGRESSIVE_FRAME)) {
+ GST_BUFFER_FLAG_SET (frame->output_buffer,
+ GST_VIDEO_BUFFER_FLAG_INTERLACED);
+ }
+ if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) {
+ GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
+ }
+ }
+
+ if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) {
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_KEYFRAME;
+ }
+
+ GST_DEBUG_OBJECT (mpeg2dec,
+ "picture: %s %s %s %s %s fields:%d ts:%"
+ GST_TIME_FORMAT,
+ (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : " "),
+ (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : " "),
+ (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : " "),
+ (picture->flags & PIC_FLAG_SKIP ? "skip" : " "),
+ (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : " "),
+ picture->nb_fields, GST_TIME_ARGS (frame->pts));
+
+ if (!gst_video_frame_map (&vframe, &mpeg2dec->decoded_info,
+ frame->output_buffer, GST_MAP_READ | GST_MAP_WRITE))
+ goto map_fail;
+
+ buf[0] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0);
+ buf[1] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1);
+ buf[2] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 2);
+
+ GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, frame %i",
+ buf[0], buf[1], buf[2], frame->system_frame_number);
+
+ /* Note: We use a non-null 'id' value to make the distinction
+ * between the dummy buffers (which have an id of NULL) and the
+ * ones we did */
+ mpeg2_stride (mpeg2dec->decoder, vframe.info.stride[0]);
+ mpeg2_set_buf (mpeg2dec->decoder, buf,
+ GINT_TO_POINTER (frame->system_frame_number + 1));
+ gst_mpeg2dec_save_buffer (mpeg2dec, frame->system_frame_number, &vframe);
+
+ return ret;
+
+map_fail:
+ {
+ GST_ELEMENT_ERROR (mpeg2dec, RESOURCE, WRITE, ("Failed to map frame"),
+ (NULL));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstFlowReturn
+handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstVideoCodecFrame *frame;
+ const mpeg2_picture_t *picture;
+ gboolean key_frame = FALSE;
+ gboolean bidirect_frame = FALSE;
+ gboolean closed_gop = FALSE;
+
+ GST_DEBUG_OBJECT (mpeg2dec,
+ "fbuf:%p display_picture:%p current_picture:%p fbuf->id:%d",
+ info->display_fbuf, info->display_picture, info->current_picture,
+ GPOINTER_TO_INT (info->display_fbuf->id) - 1);
+
+ /* Note, the fbuf-id is shifted by 1 to make the difference between
+ * NULL values (used by dummy buffers) and 'real' values */
+ frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (mpeg2dec),
+ GPOINTER_TO_INT (info->display_fbuf->id) - 1);
+ if (!frame)
+ goto no_frame;
+ picture = info->display_picture;
+ key_frame = (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_I;
+ bidirect_frame =
+ (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_B;
+ closed_gop = (info->gop->flags & GOP_FLAG_CLOSED_GOP);
+
+ GST_DEBUG_OBJECT (mpeg2dec, "picture flags: %d, type: %d, keyframe: %d",
+ picture->flags, picture->flags & PIC_MASK_CODING_TYPE, key_frame);
+
+ if (key_frame) {
+ mpeg2_skip (mpeg2dec->decoder, 0);
+ }
+
+ if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_KEYFRAME && key_frame)
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NONE;
+
+ if (picture->flags & PIC_FLAG_SKIP) {
+ GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag");
+ ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+ mpeg2_skip (mpeg2dec->decoder, 1);
+ return ret;
+ }
+
+ /* Skip B-frames if GOP is not closed and waiting for the first keyframe. */
+ if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) {
+ if (bidirect_frame && !closed_gop) {
+ GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d",
+ mpeg2dec->discont_state);
+ ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+ return ret;
+ }
+ }
+
+ /* do cropping if the target region is smaller than the input one */
+ if (mpeg2dec->downstream_pool) {
+ GstVideoFrame *vframe;
+
+ if (gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (mpeg2dec),
+ frame) < 0) {
+ GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer crop, too late");
+ return gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+ }
+
+ GST_DEBUG_OBJECT (mpeg2dec, "Doing a crop copy of the decoded buffer");
+
+ vframe = gst_mpeg2dec_get_buffer (mpeg2dec, frame->system_frame_number);
+ g_assert (vframe != NULL);
+ ret = gst_mpeg2dec_crop_buffer (mpeg2dec, frame, vframe);
+
+ if (ret != GST_FLOW_OK) {
+ gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+ return ret;
+ }
+ }
+
+ ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+
+ return ret;
+
+no_frame:
+ {
+ GST_DEBUG ("display buffer does not have a valid frame");
+ return GST_FLOW_OK;
+ }
+}
+
+static GstFlowReturn
+gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
+ GstVideoCodecFrame * frame)
+{
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+ GstBuffer *buf = frame->input_buffer;
+ GstMapInfo minfo;
+ const mpeg2_info_t *info;
+ mpeg2_state_t state;
+ gboolean done = FALSE;
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ GST_LOG_OBJECT (mpeg2dec, "received frame %d, timestamp %"
+ GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
+ frame->system_frame_number,
+ GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration));
+
+ gst_buffer_ref (buf);
+ if (!gst_buffer_map (buf, &minfo, GST_MAP_READ)) {
+ GST_ERROR_OBJECT (mpeg2dec, "Failed to map input buffer");
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+
+ info = mpeg2dec->info;
+
+ GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer");
+ mpeg2_buffer (mpeg2dec->decoder, minfo.data, minfo.data + minfo.size);
+ GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer done");
+
+ while (!done) {
+ GST_LOG_OBJECT (mpeg2dec, "calling parse");
+ state = mpeg2_parse (mpeg2dec->decoder);
+ GST_DEBUG_OBJECT (mpeg2dec, "parse state %d", state);
+
+ switch (state) {
+ case STATE_SEQUENCE_MODIFIED:
+ GST_DEBUG_OBJECT (mpeg2dec, "sequence modified");
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+ /* fall through */
+ case STATE_SEQUENCE:
+ ret = handle_sequence (mpeg2dec, info);
+ /* if there is an error handling the sequence
+ * reset the decoder, maybe something more elegant
+ * could be done.
+ */
+ if (ret == GST_FLOW_ERROR) {
+ GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
+ ("decoding error"), ("Bad sequence header"), ret);
+ gst_video_decoder_drop_frame (decoder, frame);
+ gst_mpeg2dec_flush (decoder);
+ goto done;
+ }
+ break;
+ case STATE_SEQUENCE_REPEATED:
+ GST_DEBUG_OBJECT (mpeg2dec, "sequence repeated");
+ break;
+ case STATE_GOP:
+ GST_DEBUG_OBJECT (mpeg2dec, "gop");
+ break;
+ case STATE_PICTURE:
+ ret = handle_picture (mpeg2dec, info, frame);
+ break;
+ case STATE_SLICE_1ST:
+ GST_LOG_OBJECT (mpeg2dec, "1st slice of frame encountered");
+ break;
+ case STATE_PICTURE_2ND:
+ GST_LOG_OBJECT (mpeg2dec,
+ "Second picture header encountered. Decoding 2nd field");
+ break;
+ case STATE_INVALID_END:
+ GST_DEBUG_OBJECT (mpeg2dec, "invalid end");
+ case STATE_END:
+ GST_DEBUG_OBJECT (mpeg2dec, "end");
+ case STATE_SLICE:
+ GST_DEBUG_OBJECT (mpeg2dec, "display_fbuf:%p, discard_fbuf:%p",
+ info->display_fbuf, info->discard_fbuf);
+ if (info->display_fbuf && info->display_fbuf->id) {
+ ret = handle_slice (mpeg2dec, info);
+ } else {
+ GST_DEBUG_OBJECT (mpeg2dec, "no picture to display");
+ }
+ if (info->discard_fbuf && info->discard_fbuf->id)
+ gst_mpeg2dec_discard_buffer (mpeg2dec,
+ GPOINTER_TO_INT (info->discard_fbuf->id) - 1);
+ if (state != STATE_SLICE) {
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+ }
+ break;
+ case STATE_BUFFER:
+ done = TRUE;
+ break;
+ /* error */
+ case STATE_INVALID:
+ GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
+ ("decoding error"), ("Reached libmpeg2 invalid state"), ret);
+ continue;
+ default:
+ GST_ERROR_OBJECT (mpeg2dec, "Unknown libmpeg2 state %d, FIXME", state);
+ ret = GST_FLOW_OK;
+ gst_video_codec_frame_unref (frame);
+ goto done;
+ }
+
+ if (ret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (mpeg2dec, "exit loop, reason %s",
+ gst_flow_get_name (ret));
+ break;
+ }
+ }
+
+ gst_video_codec_frame_unref (frame);
+
+done:
+ gst_buffer_unmap (buf, &minfo);
+ gst_buffer_unref (buf);
+ return ret;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (mpeg2dec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ mpeg2dec,
+ "LibMpeg2 decoder", plugin_init, VERSION, "GPL", GST_PACKAGE_NAME,
+ GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_MPEG2DEC_H__
+#define __GST_MPEG2DEC_H__
+
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideodecoder.h>
+#include <mpeg2.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_MPEG2DEC \
+ (gst_mpeg2dec_get_type())
+#define GST_MPEG2DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG2DEC,GstMpeg2dec))
+#define GST_MPEG2DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG2DEC,GstMpeg2decClass))
+#define GST_IS_MPEG2DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG2DEC))
+#define GST_IS_MPEG2DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG2DEC))
+
+#define MPEG_TIME_TO_GST_TIME(time) ((time) == -1 ? -1 : ((time) * (GST_MSECOND/10)) / G_GINT64_CONSTANT(9))
+#define GST_TIME_TO_MPEG_TIME(time) ((time) == -1 ? -1 : ((time) * G_GINT64_CONSTANT(9)) / (GST_MSECOND/10))
+
+typedef struct _GstMpeg2dec GstMpeg2dec;
+typedef struct _GstMpeg2decClass GstMpeg2decClass;
+
+typedef enum
+{
+ MPEG2DEC_DISC_NONE = 0,
+ MPEG2DEC_DISC_NEW_PICTURE,
+ MPEG2DEC_DISC_NEW_KEYFRAME
+} DiscontState;
+
+struct _GstMpeg2dec {
+ GstVideoDecoder element;
+
+ mpeg2dec_t *decoder;
+ const mpeg2_info_t *info;
+
+ /* Buffer lifetime management */
+ GList *buffers;
+
+ /* FIXME This should not be necessary. It is used to prevent image
+ * corruption when the parser does not behave the way it should.
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=674238
+ */
+ DiscontState discont_state;
+
+ /* video state */
+ GstVideoCodecState *input_state;
+ GstVideoInfo decoded_info;
+ GstVideoAlignment valign;
+ GstBufferPool * downstream_pool;
+ gboolean need_alignment;
+
+ guint8 *dummybuf[4];
+};
+
+struct _GstMpeg2decClass {
+ GstVideoDecoderClass parent_class;
+};
+
+GType gst_mpeg2dec_get_type(void);
+GST_ELEMENT_REGISTER_DECLARE (mpeg2dec);
+
+G_END_DECLS
+
+#endif /* __GST_MPEG2DEC_H__ */
--- /dev/null
+mpeg2_dep = dependency('libmpeg2', version : '>= 0.4.0', required : get_option('mpeg2dec'))
+
+if mpeg2_dep.found()
+ mpeg2dec = library('gstmpeg2dec',
+ ['gstmpeg2dec.c'],
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstvideo_dep, mpeg2_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(mpeg2dec, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [mpeg2dec]
+endif
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * (C) <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-siddec
+ *
+ * This element decodes .sid files to raw audio. .sid files are in fact
+ * small Commodore 64 programs that are executed on an emulated 6502 CPU and a
+ * MOS 6581 sound chip.
+ *
+ * This plugin will first load the complete program into memory before starting
+ * the emulator and producing output.
+ *
+ * Seeking is not (and cannot be) implemented.
+ *
+ * ## Example pipelines
+ *
+ * |[
+ * gst-launch-1.0 -v filesrc location=Hawkeye.sid ! siddec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decode a sid file and play it back.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/audio/audio.h>
+#include "gstsiddec.h"
+
+#define DEFAULT_TUNE 0
+#define DEFAULT_CLOCK SIDTUNE_CLOCK_PAL
+#define DEFAULT_MEMORY MPU_BANK_SWITCHING
+#define DEFAULT_FILTER TRUE
+#define DEFAULT_MEASURED_VOLUME TRUE
+#define DEFAULT_MOS8580 FALSE
+#define DEFAULT_FORCE_SPEED FALSE
+#define DEFAULT_BLOCKSIZE 4096
+
+enum
+{
+ PROP_0,
+ PROP_TUNE,
+ PROP_CLOCK,
+ PROP_MEMORY,
+ PROP_FILTER,
+ PROP_MEASURED_VOLUME,
+ PROP_MOS8580,
+ PROP_FORCE_SPEED,
+ PROP_BLOCKSIZE,
+ PROP_METADATA
+};
+
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-sid")
+ );
+
+#define FORMATS "{ " GST_AUDIO_NE(S16) "," GST_AUDIO_NE(U16) ", S8, U8 }"
+
+static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " FORMATS ", "
+ "layout = (string) interleaved, "
+ "rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_siddec_debug);
+#define GST_CAT_DEFAULT gst_siddec_debug
+
+#define GST_TYPE_SID_CLOCK (gst_sid_clock_get_type())
+static GType
+gst_sid_clock_get_type (void)
+{
+ static GType sid_clock_type = 0;
+ static const GEnumValue sid_clock[] = {
+ {SIDTUNE_CLOCK_PAL, "PAL", "pal"},
+ {SIDTUNE_CLOCK_NTSC, "NTSC", "ntsc"},
+ {0, NULL, NULL},
+ };
+
+ if (!sid_clock_type) {
+ sid_clock_type = g_enum_register_static ("GstSidClock", sid_clock);
+ }
+ return sid_clock_type;
+}
+
+#define GST_TYPE_SID_MEMORY (gst_sid_memory_get_type())
+static GType
+gst_sid_memory_get_type (void)
+{
+ static GType sid_memory_type = 0;
+ static const GEnumValue sid_memory[] = {
+ {MPU_BANK_SWITCHING, "Bank Switching", "bank-switching"},
+ {MPU_TRANSPARENT_ROM, "Transparent ROM", "transparent-rom"},
+ {MPU_PLAYSID_ENVIRONMENT, "Playsid Environment", "playsid-environment"},
+ {0, NULL, NULL},
+ };
+
+ if (!sid_memory_type) {
+ sid_memory_type = g_enum_register_static ("GstSidMemory", sid_memory);
+ }
+ return sid_memory_type;
+}
+
+static void gst_siddec_finalize (GObject * object);
+
+static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+
+static gboolean gst_siddec_src_convert (GstPad * pad, GstFormat src_format,
+ gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
+static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+
+static void gst_siddec_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_siddec_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+
+#define gst_siddec_parent_class parent_class
+G_DEFINE_TYPE (GstSidDec, gst_siddec, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (siddec, "siddec", GST_RANK_PRIMARY,
+ GST_TYPE_SIDDEC);
+
+static void
+gst_siddec_class_init (GstSidDecClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_siddec_finalize;
+ gobject_class->set_property = gst_siddec_set_property;
+ gobject_class->get_property = gst_siddec_get_property;
+
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TUNE,
+ g_param_spec_int ("tune", "tune", "tune",
+ 0, 100, DEFAULT_TUNE,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOCK,
+ g_param_spec_enum ("clock", "clock", "clock",
+ GST_TYPE_SID_CLOCK, DEFAULT_CLOCK,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEMORY,
+ g_param_spec_enum ("memory", "memory", "memory", GST_TYPE_SID_MEMORY,
+ DEFAULT_MEMORY,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTER,
+ g_param_spec_boolean ("filter", "filter", "filter", DEFAULT_FILTER,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEASURED_VOLUME,
+ g_param_spec_boolean ("measured-volume", "measured_volume",
+ "measured_volume", DEFAULT_MEASURED_VOLUME,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MOS8580,
+ g_param_spec_boolean ("mos8580", "mos8580", "mos8580", DEFAULT_MOS8580,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FORCE_SPEED,
+ g_param_spec_boolean ("force-speed", "force_speed", "force_speed",
+ DEFAULT_FORCE_SPEED,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLOCKSIZE,
+ g_param_spec_uint ("blocksize", "Block size",
+ "Size in bytes to output per buffer", 1, G_MAXUINT,
+ DEFAULT_BLOCKSIZE,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (gobject_class, PROP_METADATA,
+ g_param_spec_boxed ("metadata", "Metadata", "Metadata", GST_TYPE_CAPS,
+ (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
+
+ gst_element_class_set_static_metadata (gstelement_class, "Sid decoder",
+ "Codec/Decoder/Audio", "Use libsidplay to decode SID audio tunes",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ gst_element_class_add_static_pad_template (gstelement_class, &src_templ);
+ gst_element_class_add_static_pad_template (gstelement_class, &sink_templ);
+
+ GST_DEBUG_CATEGORY_INIT (gst_siddec_debug, "siddec", 0,
+ "C64 sid song player");
+
+ gst_type_mark_as_plugin_api (GST_TYPE_SID_CLOCK, static_cast<GstPluginAPIFlags>(0));
+ gst_type_mark_as_plugin_api (GST_TYPE_SID_MEMORY, static_cast<GstPluginAPIFlags>(0));
+}
+
+static void
+gst_siddec_init (GstSidDec * siddec)
+{
+ siddec->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
+ gst_pad_set_event_function (siddec->sinkpad, gst_siddec_sink_event);
+ gst_pad_set_chain_function (siddec->sinkpad, gst_siddec_chain);
+ gst_element_add_pad (GST_ELEMENT (siddec), siddec->sinkpad);
+
+ siddec->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
+ gst_pad_set_event_function (siddec->srcpad, gst_siddec_src_event);
+ gst_pad_set_query_function (siddec->srcpad, gst_siddec_src_query);
+ gst_pad_use_fixed_caps (siddec->srcpad);
+ gst_element_add_pad (GST_ELEMENT (siddec), siddec->srcpad);
+
+ siddec->engine = new emuEngine ();
+ siddec->tune = new sidTune (0);
+ siddec->config = (emuConfig *) g_malloc (sizeof (emuConfig));
+
+ /* get default config parameters */
+ siddec->engine->getConfig (*siddec->config);
+
+ siddec->config->mos8580 = DEFAULT_MOS8580; // mos8580
+ siddec->config->memoryMode = DEFAULT_MEMORY; // memory mode
+ siddec->config->clockSpeed = DEFAULT_CLOCK; // clock speed
+ siddec->config->forceSongSpeed = DEFAULT_FORCE_SPEED; // force song speed
+
+ siddec->engine->setConfig (*siddec->config);
+
+ siddec->tune_buffer = (guchar *) g_malloc (maxSidtuneFileLen);
+ siddec->tune_len = 0;
+ siddec->tune_number = 0;
+ siddec->total_bytes = 0;
+ siddec->blocksize = DEFAULT_BLOCKSIZE;
+
+ siddec->have_group_id = FALSE;
+ siddec->group_id = G_MAXUINT;
+}
+
+static void
+gst_siddec_finalize (GObject * object)
+{
+ GstSidDec *siddec = GST_SIDDEC (object);
+
+ g_free (siddec->config);
+ g_free (siddec->tune_buffer);
+
+ delete (siddec->tune);
+ delete (siddec->engine);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+update_tags (GstSidDec * siddec)
+{
+ sidTuneInfo info;
+ GstTagList *list;
+
+ if (siddec->tune->getInfo (info)) {
+ list = gst_tag_list_new_empty ();
+
+ if (info.nameString) {
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_TITLE, info.nameString, (void *) NULL);
+ }
+ if (info.authorString) {
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_ARTIST, info.authorString, (void *) NULL);
+ }
+ if (info.copyrightString) {
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_COPYRIGHT, info.copyrightString, (void *) NULL);
+ }
+ gst_pad_push_event (siddec->srcpad, gst_event_new_tag (list));
+ }
+}
+
+static gboolean
+siddec_negotiate (GstSidDec * siddec)
+{
+ GstCaps *allowed;
+ GstStructure *structure;
+ int rate = 44100;
+ int channels = 1;
+ GstCaps *caps;
+ const gchar *str;
+ GstAudioFormat format;
+ GstEvent *event;
+ gchar *stream_id;
+
+ allowed = gst_pad_get_allowed_caps (siddec->srcpad);
+ if (!allowed)
+ goto nothing_allowed;
+
+ GST_DEBUG_OBJECT (siddec, "allowed caps: %" GST_PTR_FORMAT, allowed);
+
+ allowed = gst_caps_normalize (allowed);
+
+ structure = gst_caps_get_structure (allowed, 0);
+
+ str = gst_structure_get_string (structure, "format");
+ if (str == NULL)
+ goto invalid_format;
+
+ format = gst_audio_format_from_string (str);
+ switch (format) {
+ case GST_AUDIO_FORMAT_S8:
+ siddec->config->bitsPerSample = 8;
+ siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
+ break;
+ case GST_AUDIO_FORMAT_U8:
+ siddec->config->bitsPerSample = 8;
+ siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
+ break;
+ case GST_AUDIO_FORMAT_S16:
+ siddec->config->bitsPerSample = 16;
+ siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
+ break;
+ case GST_AUDIO_FORMAT_U16:
+ siddec->config->bitsPerSample = 16;
+ siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
+ break;
+ default:
+ goto invalid_format;
+ }
+
+ gst_structure_get_int (structure, "rate", &rate);
+ siddec->config->frequency = rate;
+ gst_structure_get_int (structure, "channels", &channels);
+ siddec->config->channels = channels;
+
+ stream_id =
+ gst_pad_create_stream_id (siddec->srcpad, GST_ELEMENT_CAST (siddec),
+ NULL);
+
+ event = gst_pad_get_sticky_event (siddec->sinkpad, GST_EVENT_STREAM_START, 0);
+ if (event) {
+ if (gst_event_parse_group_id (event, &siddec->group_id))
+ siddec->have_group_id = TRUE;
+ else
+ siddec->have_group_id = FALSE;
+ gst_event_unref (event);
+ } else if (!siddec->have_group_id) {
+ siddec->have_group_id = TRUE;
+ siddec->group_id = gst_util_group_id_next ();
+ }
+
+ event = gst_event_new_stream_start (stream_id);
+ if (siddec->have_group_id)
+ gst_event_set_group_id (event, siddec->group_id);
+
+ gst_pad_push_event (siddec->srcpad, event);
+ g_free (stream_id);
+
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, gst_audio_format_to_string (format),
+ "layout", G_TYPE_STRING, "interleaved",
+ "rate", G_TYPE_INT, siddec->config->frequency,
+ "channels", G_TYPE_INT, siddec->config->channels, NULL);
+ gst_pad_set_caps (siddec->srcpad, caps);
+ gst_caps_unref (caps);
+
+ gst_caps_unref (allowed);
+
+ siddec->engine->setConfig (*siddec->config);
+
+ return TRUE;
+
+ /* ERRORS */
+nothing_allowed:
+ {
+ GST_DEBUG_OBJECT (siddec, "could not get allowed caps");
+ return FALSE;
+ }
+invalid_format:
+ {
+ GST_DEBUG_OBJECT (siddec, "invalid audio caps");
+ gst_caps_unref (allowed);
+ return FALSE;
+ }
+}
+
+static void
+play_loop (GstPad * pad)
+{
+ GstFlowReturn ret;
+ GstSidDec *siddec;
+ GstBuffer *out;
+ GstMapInfo outmap;
+ gint64 value, offset, time = 0;
+ GstFormat format;
+
+ siddec = GST_SIDDEC (gst_pad_get_parent (pad));
+
+ out = gst_buffer_new_and_alloc (siddec->blocksize);
+
+ gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+ sidEmuFillBuffer (*siddec->engine, *siddec->tune,
+ outmap.data, siddec->blocksize);
+ gst_buffer_unmap (out, &outmap);
+
+ /* get offset in samples */
+ format = GST_FORMAT_DEFAULT;
+ if (gst_siddec_src_convert (siddec->srcpad,
+ GST_FORMAT_BYTES, siddec->total_bytes, &format, &offset))
+ GST_BUFFER_OFFSET (out) = offset;
+
+ /* get current timestamp */
+ format = GST_FORMAT_TIME;
+ if (gst_siddec_src_convert (siddec->srcpad,
+ GST_FORMAT_BYTES, siddec->total_bytes, &format, &time))
+ GST_BUFFER_TIMESTAMP (out) = time;
+
+ /* update position and get new timestamp to calculate duration */
+ siddec->total_bytes += siddec->blocksize;
+
+ /* get offset in samples */
+ format = GST_FORMAT_DEFAULT;
+ if (gst_siddec_src_convert (siddec->srcpad,
+ GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
+ GST_BUFFER_OFFSET_END (out) = value;
+
+ format = GST_FORMAT_TIME;
+ if (gst_siddec_src_convert (siddec->srcpad,
+ GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
+ GST_BUFFER_DURATION (out) = value - time;
+
+ if ((ret = gst_pad_push (siddec->srcpad, out)) != GST_FLOW_OK)
+ goto pause;
+
+done:
+ gst_object_unref (siddec);
+
+ return;
+
+ /* ERRORS */
+pause:
+ {
+ if (ret == GST_FLOW_EOS) {
+ /* perform EOS logic, FIXME, segment seek? */
+ gst_pad_push_event (pad, gst_event_new_eos ());
+ } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
+ /* for fatal errors we post an error message */
+ GST_ELEMENT_FLOW_ERROR (siddec, ret);
+ gst_pad_push_event (pad, gst_event_new_eos ());
+ }
+
+ GST_INFO_OBJECT (siddec, "pausing task, reason: %s",
+ gst_flow_get_name (ret));
+ gst_pad_pause_task (pad);
+ goto done;
+ }
+}
+
+static gboolean
+start_play_tune (GstSidDec * siddec)
+{
+ gboolean res;
+ GstSegment segment;
+
+ if (!siddec->tune->load (siddec->tune_buffer, siddec->tune_len))
+ goto could_not_load;
+
+ update_tags (siddec);
+
+ if (!siddec_negotiate (siddec))
+ goto could_not_negotiate;
+
+ if (!sidEmuInitializeSong (*siddec->engine, *siddec->tune,
+ siddec->tune_number))
+ goto could_not_init;
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ gst_pad_push_event (siddec->srcpad, gst_event_new_segment (&segment));
+ siddec->total_bytes = 0;
+ siddec->have_group_id = FALSE;
+ siddec->group_id = G_MAXUINT;
+
+ res = gst_pad_start_task (siddec->srcpad,
+ (GstTaskFunction) play_loop, siddec->srcpad, NULL);
+ return res;
+
+ /* ERRORS */
+could_not_load:
+ {
+ GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
+ ("Could not load tune"), ("Could not load tune"));
+ return FALSE;
+ }
+could_not_negotiate:
+ {
+ GST_ELEMENT_ERROR (siddec, CORE, NEGOTIATION,
+ ("Could not negotiate format"), ("Could not negotiate format"));
+ return FALSE;
+ }
+could_not_init:
+ {
+ GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
+ ("Could not initialize song"), ("Could not initialize song"));
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_siddec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstSidDec *siddec;
+ gboolean res;
+
+ siddec = GST_SIDDEC (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ res = start_play_tune (siddec);
+ break;
+ case GST_EVENT_SEGMENT:
+ res = TRUE;
+ break;
+ default:
+ res = TRUE;
+ break;
+ }
+ gst_event_unref (event);
+
+ return res;
+}
+
+static GstFlowReturn
+gst_siddec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstSidDec *siddec;
+ guint64 size;
+
+ siddec = GST_SIDDEC (parent);
+
+ size = gst_buffer_get_size (buffer);
+ if (siddec->tune_len + size > maxSidtuneFileLen)
+ goto overflow;
+
+ gst_buffer_extract (buffer, 0, siddec->tune_buffer + siddec->tune_len, size);
+
+ siddec->tune_len += size;
+
+ gst_buffer_unref (buffer);
+
+ return GST_FLOW_OK;
+
+ /* ERRORS */
+overflow:
+ {
+ GST_ELEMENT_ERROR (siddec, STREAM, DECODE,
+ (NULL), ("Input data bigger than allowed buffer size"));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static gboolean
+gst_siddec_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
+ GstFormat * dest_format, gint64 * dest_value)
+{
+ gboolean res = TRUE;
+ guint scale = 1;
+ GstSidDec *siddec;
+ gint bytes_per_sample;
+
+ siddec = GST_SIDDEC (gst_pad_get_parent (pad));
+
+ if (src_format == *dest_format) {
+ *dest_value = src_value;
+ return TRUE;
+ }
+
+ bytes_per_sample =
+ (siddec->config->bitsPerSample >> 3) * siddec->config->channels;
+
+ switch (src_format) {
+ case GST_FORMAT_BYTES:
+ switch (*dest_format) {
+ case GST_FORMAT_DEFAULT:
+ if (bytes_per_sample == 0)
+ return FALSE;
+ *dest_value = src_value / bytes_per_sample;
+ break;
+ case GST_FORMAT_TIME:
+ {
+ gint byterate = bytes_per_sample * siddec->config->frequency;
+
+ if (byterate == 0)
+ return FALSE;
+ *dest_value =
+ gst_util_uint64_scale_int (src_value, GST_SECOND, byterate);
+ break;
+ }
+ default:
+ res = FALSE;
+ }
+ break;
+ case GST_FORMAT_DEFAULT:
+ switch (*dest_format) {
+ case GST_FORMAT_BYTES:
+ *dest_value = src_value * bytes_per_sample;
+ break;
+ case GST_FORMAT_TIME:
+ if (siddec->config->frequency == 0)
+ return FALSE;
+ *dest_value =
+ gst_util_uint64_scale_int (src_value, GST_SECOND,
+ siddec->config->frequency);
+ break;
+ default:
+ res = FALSE;
+ }
+ break;
+ case GST_FORMAT_TIME:
+ switch (*dest_format) {
+ case GST_FORMAT_BYTES:
+ scale = bytes_per_sample;
+ /* fallthrough */
+ case GST_FORMAT_DEFAULT:
+ *dest_value =
+ gst_util_uint64_scale_int (src_value,
+ scale * siddec->config->frequency, GST_SECOND);
+ break;
+ default:
+ res = FALSE;
+ }
+ break;
+ default:
+ res = FALSE;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_siddec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ gboolean res = FALSE;
+
+ switch (GST_EVENT_TYPE (event)) {
+ default:
+ break;
+ }
+ gst_event_unref (event);
+
+ return res;
+}
+
+static gboolean
+gst_siddec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = TRUE;
+ GstSidDec *siddec;
+
+ siddec = GST_SIDDEC (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_POSITION:
+ {
+ GstFormat format;
+ gint64 current;
+
+ gst_query_parse_position (query, &format, NULL);
+
+ /* we only know about our bytes, convert to requested format */
+ res &= gst_siddec_src_convert (pad,
+ GST_FORMAT_BYTES, siddec->total_bytes, &format, ¤t);
+ if (res) {
+ gst_query_set_position (query, format, current);
+ }
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+static void
+gst_siddec_set_property (GObject * object, guint prop_id, const GValue * value,
+ GParamSpec * pspec)
+{
+ GstSidDec *siddec = GST_SIDDEC (object);
+
+ switch (prop_id) {
+ case PROP_TUNE:
+ siddec->tune_number = g_value_get_int (value);
+ break;
+ case PROP_CLOCK:
+ siddec->config->clockSpeed = g_value_get_enum (value);
+ break;
+ case PROP_MEMORY:
+ siddec->config->memoryMode = g_value_get_enum (value);
+ break;
+ case PROP_FILTER:
+ siddec->config->emulateFilter = g_value_get_boolean (value);
+ break;
+ case PROP_MEASURED_VOLUME:
+ siddec->config->measuredVolume = g_value_get_boolean (value);
+ break;
+ case PROP_MOS8580:
+ siddec->config->mos8580 = g_value_get_boolean (value);
+ break;
+ case PROP_BLOCKSIZE:
+ siddec->blocksize = g_value_get_uint (value);
+ break;
+ case PROP_FORCE_SPEED:
+ siddec->config->forceSongSpeed = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ return;
+ }
+ siddec->engine->setConfig (*siddec->config);
+}
+
+static void
+gst_siddec_get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
+{
+ GstSidDec *siddec = GST_SIDDEC (object);
+
+ switch (prop_id) {
+ case PROP_TUNE:
+ g_value_set_int (value, siddec->tune_number);
+ break;
+ case PROP_CLOCK:
+ g_value_set_enum (value, siddec->config->clockSpeed);
+ break;
+ case PROP_MEMORY:
+ g_value_set_enum (value, siddec->config->memoryMode);
+ break;
+ case PROP_FILTER:
+ g_value_set_boolean (value, siddec->config->emulateFilter);
+ break;
+ case PROP_MEASURED_VOLUME:
+ g_value_set_boolean (value, siddec->config->measuredVolume);
+ break;
+ case PROP_MOS8580:
+ g_value_set_boolean (value, siddec->config->mos8580);
+ break;
+ case PROP_FORCE_SPEED:
+ g_value_set_boolean (value, siddec->config->forceSongSpeed);
+ break;
+ case PROP_BLOCKSIZE:
+ g_value_set_uint (value, siddec->blocksize);
+ break;
+ case PROP_METADATA:
+ g_value_set_boxed (value, NULL);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (siddec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ sid,
+ "Uses libsidplay to decode .sid files",
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_SIDDEC_H__
+#define __GST_SIDDEC_H__
+
+#include <stdlib.h>
+#include <sidplay/player.h>
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SIDDEC \
+ (gst_siddec_get_type())
+#define GST_SIDDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIDDEC,GstSidDec))
+#define GST_SIDDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIDDEC,GstSidDecClass))
+#define GST_IS_SIDDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIDDEC))
+#define GST_IS_SIDDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIDDEC))
+
+typedef struct _GstSidDec GstSidDec;
+typedef struct _GstSidDecClass GstSidDecClass;
+
+struct _GstSidDec {
+ GstElement element;
+
+ /* pads */
+ GstPad *sinkpad,
+ *srcpad;
+
+ gboolean have_group_id;
+ guint group_id;
+
+ guchar *tune_buffer;
+ gint tune_len;
+ gint tune_number;
+ guint64 total_bytes;
+
+ emuEngine *engine;
+ sidTune *tune;
+ emuConfig *config;
+
+ guint blocksize;
+};
+
+struct _GstSidDecClass {
+ GstElementClass parent_class;
+};
+
+GType gst_siddec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (siddec);
+
+G_END_DECLS
+
+#endif /* __GST_SIDDEC_H__ */
--- /dev/null
+sidplay_option = get_option('sidplay')
+if sidplay_option.disabled()
+ subdir_done()
+endif
+
+if not add_languages('cpp', native: false, required: sidplay_option)
+ subdir_done()
+endif
+
+if not cxx.has_header('sidplay/player.h', required: sidplay_option)
+ subdir_done()
+endif
+
+sidplay_dep = cxx.find_library('sidplay', required: sidplay_option)
+if not sidplay_dep.found()
+ subdir_done()
+endif
+
+# sidplay plugin works with libsidplay 1.36.x (not 2.x.x)
+sid_code = '''#include <sidplay/player.h>
+ void somefunc (void) {
+ sidTune tune = sidTune(0);
+ }'''
+if not cxx.compiles(sid_code, dependencies: sidplay_dep, name : 'sidplay usage')
+ if sidplay_option.enabled()
+ error('sidplay headers and libraries were found, but were not usable')
+ endif
+ subdir_done()
+endif
+
+gstsid = library('gstsid', 'gstsiddec.cc',
+ cpp_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstaudio_dep, sidplay_dep],
+ install : true,
+ install_dir : plugins_install_dir)
+pkgconfig.generate(gstsid, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstsid]
--- /dev/null
+[_presets_]
+version=0.10
+element-name=GstX264Enc
+
+[Profile Baseline]
+_meta/comment=Baseline Profile
+bframes=0
+cabac=false
+dct8x8=false
+
+[Profile Main]
+_meta/comment=Main Profile
+cabac=true
+dct8x8=false
+
+[Profile High]
+_meta/comment=High Profile
+cabac=true
+dct8x8=true
+
+[Quality Low]
+_meta/comment=Low quality
+pass=qual
+quantizer=27
+subme=4
+threads=0
+
+[Quality Normal]
+_meta/comment=Normal quality
+pass=qual
+quantizer=21
+me=umh
+subme=6
+ref=3
+threads=0
+
+[Quality High]
+_meta/comment=High quality
+pass=qual
+quantizer=18
+me=umh
+subme=6
+ref=3
+threads=0
+
+[Profile YouTube]
+_meta/comment=YouTube recommended settings (https://support.google.com/youtube/answer/1722171)
+pass=qual
+cabac=true
+dct8x8=true
+bframes=2
+
+[Zero Latency]
+tune=zerolatency
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
+ *
+ * gstencoderbitrateprofilemanager.c
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstencoderbitrateprofilemanager.h"
+
+GST_DEBUG_CATEGORY_STATIC (encoderbitratemanager_debug);
+#define GST_CAT_DEFAULT encoderbitratemanager_debug
+
+typedef struct
+{
+ gchar *name;
+ gsize n_vals;
+ GstEncoderBitrateTargetForPixelsMap *map;
+} GstEncoderBitrateProfile;
+
+struct _GstEncoderBitrateProfileManager
+{
+ GList *profiles;
+ gchar *preset;
+ guint bitrate;
+
+ gboolean setting_preset;
+ gboolean user_bitrate;
+};
+
+/* *INDENT-OFF* */
+/* Copied from https://support.google.com/youtube/answer/1722171?hl=en */
+static const GstEncoderBitrateTargetForPixelsMap youtube_bitrate_profiles[] = {
+ {
+ .n_pixels = 3840 * 2160,
+ .low_framerate_bitrate = 40000,
+ .high_framerate_bitrate = 60000,
+ },
+ {
+ .n_pixels = 2560 * 1440,
+ .low_framerate_bitrate = 16000,
+ .high_framerate_bitrate = 24000,
+ },
+ {
+ .n_pixels = 1920 * 1080,
+ .low_framerate_bitrate = 8000,
+ .high_framerate_bitrate = 12000,
+ },
+ {
+ .n_pixels = 1080 * 720,
+ .low_framerate_bitrate = 5000,
+ .high_framerate_bitrate = 7500,
+ },
+ {
+ .n_pixels = 640 * 480,
+ .low_framerate_bitrate = 2500,
+ .high_framerate_bitrate = 4000,
+ },
+ {
+ .n_pixels = 0,
+ .low_framerate_bitrate = 2500,
+ .high_framerate_bitrate = 4000,
+ },
+ {
+ .n_pixels = 0,
+ .low_framerate_bitrate = 0,
+ .high_framerate_bitrate = 0,
+ },
+};
+/* *INDENT-ON* */
+
+static void
+gst_encoder_bitrate_profile_free (GstEncoderBitrateProfile * profile)
+{
+ g_free (profile->name);
+ g_free (profile->map);
+ g_free (profile);
+}
+
+void
+gst_encoder_bitrate_profile_manager_add_profile (GstEncoderBitrateProfileManager
+ * self, const gchar * profile_name,
+ const GstEncoderBitrateTargetForPixelsMap * map)
+{
+ guint n_vals;
+ GstEncoderBitrateProfile *profile;
+
+ for (n_vals = 0;
+ map[n_vals].low_framerate_bitrate != 0
+ && map[n_vals].high_framerate_bitrate != 0; n_vals++);
+ n_vals++;
+
+ profile = g_new0 (GstEncoderBitrateProfile, 1);
+ profile->name = g_strdup (profile_name);
+ profile->n_vals = n_vals;
+ profile->map
+ = g_memdup2 (map, sizeof (GstEncoderBitrateTargetForPixelsMap) * n_vals);
+ self->profiles = g_list_prepend (self->profiles, profile);
+}
+
+guint
+gst_encoder_bitrate_profile_manager_get_bitrate (GstEncoderBitrateProfileManager
+ * self, GstVideoInfo * info)
+{
+ gint i;
+ gboolean high_fps;
+ guint num_pix;
+ GList *tmp;
+
+ GstEncoderBitrateProfile *profile = NULL;
+
+ g_return_val_if_fail (self != NULL, -1);
+
+ if (!info || info->finfo == NULL
+ || info->finfo->format == GST_VIDEO_FORMAT_UNKNOWN) {
+ GST_INFO ("Video info %p not usable, returning current bitrate", info);
+ return self->bitrate;
+ }
+
+ if (!self->preset) {
+ GST_INFO ("No preset used, returning current bitrate");
+ return self->bitrate;
+
+ }
+
+ for (tmp = self->profiles; tmp; tmp = tmp->next) {
+ GstEncoderBitrateProfile *tmpprof = tmp->data;
+ if (!g_strcmp0 (tmpprof->name, self->preset)) {
+ profile = tmpprof;
+ break;
+ }
+ }
+
+ if (!profile) {
+ GST_INFO ("Could not find map for profile: %s", self->preset);
+
+ return self->bitrate;
+ }
+
+ high_fps = GST_VIDEO_INFO_FPS_N (info) / GST_VIDEO_INFO_FPS_D (info) > 30.0;
+ num_pix = GST_VIDEO_INFO_WIDTH (info) * GST_VIDEO_INFO_HEIGHT (info);
+ for (i = 0; i < profile->n_vals; i++) {
+ GstEncoderBitrateTargetForPixelsMap *bitrate_values = &profile->map[i];
+
+ if (num_pix < bitrate_values->n_pixels)
+ continue;
+
+ self->bitrate =
+ high_fps ? bitrate_values->
+ high_framerate_bitrate : bitrate_values->low_framerate_bitrate;
+ GST_INFO ("Using %s bitrate! %d", self->preset, self->bitrate);
+ return self->bitrate;
+ }
+
+ return -1;
+}
+
+void gst_encoder_bitrate_profile_manager_start_loading_preset
+ (GstEncoderBitrateProfileManager * self)
+{
+ self->setting_preset = TRUE;
+}
+
+void gst_encoder_bitrate_profile_manager_end_loading_preset
+ (GstEncoderBitrateProfileManager * self, const gchar * preset)
+{
+ self->setting_preset = FALSE;
+ g_free (self->preset);
+ self->preset = g_strdup (preset);
+}
+
+void
+gst_encoder_bitrate_profile_manager_set_bitrate (GstEncoderBitrateProfileManager
+ * self, guint bitrate)
+{
+ self->bitrate = bitrate;
+ self->user_bitrate = !self->setting_preset;
+}
+
+void
+gst_encoder_bitrate_profile_manager_free (GstEncoderBitrateProfileManager *
+ self)
+{
+ g_free (self->preset);
+ g_list_free_full (self->profiles,
+ (GDestroyNotify) gst_encoder_bitrate_profile_free);
+ g_free (self);
+}
+
+GstEncoderBitrateProfileManager *
+gst_encoder_bitrate_profile_manager_new (guint default_bitrate)
+{
+ GstEncoderBitrateProfileManager *self =
+ g_new0 (GstEncoderBitrateProfileManager, 1);
+ static gsize _init = 0;
+
+ if (g_once_init_enter (&_init)) {
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "encoderbitratemanager", 0,
+ "Encoder bitrate manager");
+ g_once_init_leave (&_init, 1);
+ }
+
+ self->bitrate = default_bitrate;
+ gst_encoder_bitrate_profile_manager_add_profile (self,
+ "Profile YouTube", youtube_bitrate_profiles);
+
+ return self;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
+ *
+ * gstencoderbitrateprofilemanager.h
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#pragma once
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+typedef struct _GstEncoderBitrateProfileManager GstEncoderBitrateProfileManager;
+
+typedef struct _GstEncoderBitrateTargetForPixelsMap
+{
+ guint n_pixels;
+ guint low_framerate_bitrate;
+ guint high_framerate_bitrate;
+
+ gpointer _gst_reserved[GST_PADDING_LARGE];
+} GstEncoderBitrateTargetForPixelsMap;
+
+void
+gst_encoder_bitrate_profile_manager_add_profile(GstEncoderBitrateProfileManager* self,
+ const gchar* profile_name, const GstEncoderBitrateTargetForPixelsMap* map);
+guint gst_encoder_bitrate_profile_manager_get_bitrate(GstEncoderBitrateProfileManager* self, GstVideoInfo* info);
+void gst_encoder_bitrate_profile_manager_start_loading_preset (GstEncoderBitrateProfileManager* self);
+void gst_encoder_bitrate_profile_manager_end_loading_preset(GstEncoderBitrateProfileManager* self, const gchar* preset);
+void gst_encoder_bitrate_profile_manager_set_bitrate(GstEncoderBitrateProfileManager* self, guint bitrate);
+GstEncoderBitrateProfileManager* gst_encoder_bitrate_profile_manager_new(guint default_bitrate);
+void gst_encoder_bitrate_profile_manager_free(GstEncoderBitrateProfileManager* self);
\ No newline at end of file
--- /dev/null
+/* GStreamer H264 encoder plugin
+ * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
+ * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
+ * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-x264enc
+ * @title: x264enc
+ * @see_also: faac
+ *
+ * This element encodes raw video into H264 compressed data,
+ * also otherwise known as MPEG-4 AVC (Advanced Video Codec).
+ *
+ * The #GstX264Enc:pass property controls the type of encoding. In case of Constant
+ * Bitrate Encoding (actually ABR), the #GstX264Enc:bitrate will determine the quality
+ * of the encoding. This will similarly be the case if this target bitrate
+ * is to obtained in multiple (2 or 3) pass encoding.
+ * Alternatively, one may choose to perform Constant Quantizer or Quality encoding,
+ * in which case the #GstX264Enc:quantizer property controls much of the outcome, in that case #GstX264Enc:bitrate is the maximum bitrate.
+ *
+ * The H264 profile that is eventually used depends on a few settings.
+ * If #GstX264Enc:dct8x8 is enabled, then High profile is used.
+ * Otherwise, if #GstX264Enc:cabac entropy coding is enabled or #GstX264Enc:bframes
+ * are allowed, then Main Profile is in effect, and otherwise Baseline profile
+ * applies. The high profile is imposed by default,
+ * which is fine for most software players and settings,
+ * but in some cases (e.g. hardware platforms) a more restricted profile/level
+ * may be necessary. The recommended way to set a profile is to set it in the
+ * downstream caps.
+ *
+ * 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.
+ *
+ * > Some settings, including the default settings, may lead to quite
+ * > some latency (i.e. frame buffering) in the encoder. This may cause problems
+ * > with pipeline stalling in non-trivial pipelines, because the encoder latency
+ * > is often considerably higher than the default size of a simple queue
+ * > element. Such problems are caused by one of the queues in the other
+ * > non-x264enc streams/branches filling up and blocking upstream. They can
+ * > be fixed by relaxing the default time/size/buffer limits on the queue
+ * > elements in the non-x264 branches, or using a (single) multiqueue element
+ * > for all branches. Also see the last example below. You can also work around
+ * > this problem by setting the tune=zerolatency property, but this will affect
+ * > overall encoding quality so may not be appropriate for your use case.
+ *
+ * ## Example pipeline
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc qp-min=18 ! \
+ * avimux ! filesink location=videotestsrc.avi
+ * ]| This example pipeline will encode a test video source to H264 muxed in an
+ * AVI container, while ensuring a sane minimum quantization factor to avoid
+ * some (excessive) waste. You should ideally never put H264 into an AVI
+ * container (or really anything else, for that matter) - use Matroska or
+ * MP4/QuickTime or MPEG-TS instead.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=quant ! \
+ * matroskamux ! filesink location=videotestsrc.mkv
+ * ]| This example pipeline will encode a test video source to H264 using fixed
+ * quantization, and muxes it in a Matroska container.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=5 quantizer=25 speed-preset=6 ! video/x-h264, profile=baseline ! \
+ * qtmux ! filesink location=videotestsrc.mov
+ * ]| This example pipeline will encode a test video source to H264 using
+ * constant quality at around Q25 using the 'medium' speed/quality preset and
+ * restricting the options used so that the output is H.264 Baseline Profile
+ * compliant and finally multiplexing the output in Quicktime mov format.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! tee name=t ! queue ! videoconvert ! autovideosink \
+ * t. ! queue ! x264enc rc-lookahead=5 ! fakesink
+ * ]| This example pipeline will encode a test video source to H264 while
+ * displaying the input material at the same time. As mentioned above,
+ * specific settings are needed in this case to avoid pipeline stalling.
+ * Depending on goals and context, other approaches are possible, e.g.
+ * tune=zerolatency might be configured, or queue sizes increased.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "gstx264enc.h"
+
+#include <gst/pbutils/pbutils.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <gmodule.h>
+
+GST_DEBUG_CATEGORY_STATIC (x264_enc_debug);
+#define GST_CAT_DEFAULT x264_enc_debug
+
+struct _GstX264EncVTable
+{
+ GModule *module;
+
+#if X264_BUILD < 153
+ const int *x264_bit_depth;
+#endif
+ const int *x264_chroma_format;
+ void (*x264_encoder_close) (x264_t *);
+ int (*x264_encoder_delayed_frames) (x264_t *);
+ int (*x264_encoder_encode) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal,
+ x264_picture_t * pic_in, x264_picture_t * pic_out);
+ int (*x264_encoder_headers) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal);
+ void (*x264_encoder_intra_refresh) (x264_t *);
+ int (*x264_encoder_maximum_delayed_frames) (x264_t *);
+ x264_t *(*x264_encoder_open) (x264_param_t *);
+ int (*x264_encoder_reconfig) (x264_t *, x264_param_t *);
+ const x264_level_t (*x264_levels)[];
+ void (*x264_param_apply_fastfirstpass) (x264_param_t *);
+ int (*x264_param_apply_profile) (x264_param_t *, const char *);
+ int (*x264_param_default_preset) (x264_param_t *, const char *preset,
+ const char *tune);
+ int (*x264_param_parse) (x264_param_t *, const char *name, const char *value);
+};
+
+static GstX264EncVTable default_vtable;
+
+static GstX264EncVTable *vtable_8bit = NULL, *vtable_10bit = NULL;
+
+#if X264_BUILD < 153
+#define LOAD_SYMBOL(name) G_STMT_START { \
+ if (!g_module_symbol (module, #name, (gpointer *) &vtable->name)) { \
+ GST_ERROR ("Failed to load '" #name "' from '%s'", filename); \
+ goto error; \
+ } \
+} G_STMT_END;
+
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+static GstX264EncVTable *
+load_x264 (const gchar * filename)
+{
+ GModule *module;
+ GstX264EncVTable *vtable;
+
+ module = g_module_open (filename, G_MODULE_BIND_LOCAL);
+ if (!module) {
+ GST_ERROR ("Failed to load '%s'", filename);
+ return NULL;
+ }
+
+ vtable = g_new0 (GstX264EncVTable, 1);
+ vtable->module = module;
+
+ if (!g_module_symbol (module, G_STRINGIFY (x264_encoder_open),
+ (gpointer *) & vtable->x264_encoder_open)) {
+ GST_ERROR ("Failed to load '" G_STRINGIFY (x264_encoder_open)
+ "' from '%s'. Incompatible version?", filename);
+ goto error;
+ }
+ LOAD_SYMBOL (x264_bit_depth);
+ LOAD_SYMBOL (x264_chroma_format);
+ LOAD_SYMBOL (x264_encoder_close);
+ LOAD_SYMBOL (x264_encoder_delayed_frames);
+ LOAD_SYMBOL (x264_encoder_encode);
+ LOAD_SYMBOL (x264_encoder_headers);
+ LOAD_SYMBOL (x264_encoder_intra_refresh);
+ LOAD_SYMBOL (x264_encoder_maximum_delayed_frames);
+ LOAD_SYMBOL (x264_encoder_reconfig);
+ LOAD_SYMBOL (x264_levels);
+ LOAD_SYMBOL (x264_param_apply_fastfirstpass);
+ LOAD_SYMBOL (x264_param_apply_profile);
+ LOAD_SYMBOL (x264_param_default_preset);
+ LOAD_SYMBOL (x264_param_parse);
+
+ return vtable;
+
+error:
+ g_module_close (vtable->module);
+ g_free (vtable);
+ return NULL;
+}
+
+static void
+unload_x264 (GstX264EncVTable * vtable)
+{
+ if (vtable->module) {
+ g_module_close (vtable->module);
+ g_free (vtable);
+ }
+}
+#endif
+
+#undef LOAD_SYMBOL
+#endif
+
+static gboolean
+gst_x264_enc_add_x264_chroma_format (GstStructure * s,
+ gboolean allow_420_8, gboolean allow_420_10, gboolean allow_422,
+ gboolean allow_444)
+{
+ GValue fmts = G_VALUE_INIT;
+ GValue fmt = G_VALUE_INIT;
+ gboolean ret = FALSE;
+
+ g_value_init (&fmts, GST_TYPE_LIST);
+ g_value_init (&fmt, G_TYPE_STRING);
+
+ if (vtable_8bit) {
+ gint chroma_format = *vtable_8bit->x264_chroma_format;
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
+ g_value_set_string (&fmt, "Y444");
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
+ g_value_set_string (&fmt, "Y42B");
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_8) {
+ g_value_set_string (&fmt, "I420");
+ gst_value_list_append_value (&fmts, &fmt);
+ g_value_set_string (&fmt, "YV12");
+ gst_value_list_append_value (&fmts, &fmt);
+ g_value_set_string (&fmt, "NV12");
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+ }
+
+ if (vtable_10bit) {
+ gint chroma_format = *vtable_10bit->x264_chroma_format;
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
+ if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+ g_value_set_string (&fmt, "Y444_10LE");
+ else
+ g_value_set_string (&fmt, "Y444_10BE");
+
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
+ if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+ g_value_set_string (&fmt, "I422_10LE");
+ else
+ g_value_set_string (&fmt, "I422_10BE");
+
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+
+ if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_10) {
+ if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+ g_value_set_string (&fmt, "I420_10LE");
+ else
+ g_value_set_string (&fmt, "I420_10BE");
+
+ gst_value_list_append_value (&fmts, &fmt);
+ }
+ }
+
+ if (gst_value_list_get_size (&fmts) != 0) {
+ gst_structure_take_value (s, "format", &fmts);
+ ret = TRUE;
+ } else {
+ g_value_unset (&fmts);
+ }
+
+ g_value_unset (&fmt);
+
+ return ret;
+}
+
+#if X264_BUILD < 153
+static gboolean
+load_x264_libraries (void)
+{
+ if (*default_vtable.x264_bit_depth == 8) {
+ vtable_8bit = &default_vtable;
+ GST_INFO ("8-bit depth supported");
+ } else if (*default_vtable.x264_bit_depth == 10) {
+ vtable_10bit = &default_vtable;
+ GST_INFO ("10-bit depth supported");
+ }
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+ {
+ gchar **libraries = g_strsplit (HAVE_X264_ADDITIONAL_LIBRARIES, ":", -1);
+ gchar **p = libraries;
+
+ while (*p && (!vtable_8bit || !vtable_10bit)) {
+ GstX264EncVTable *vtable = load_x264 (*p);
+
+ if (vtable) {
+ if (!vtable_8bit && *vtable->x264_bit_depth == 8) {
+ GST_INFO ("8-bit depth support loaded from %s", *p);
+ vtable_8bit = vtable;
+ } else if (!vtable_10bit && *vtable->x264_bit_depth == 10) {
+ GST_INFO ("10-bit depth support loaded from %s", *p);
+ vtable_10bit = vtable;
+ } else {
+ unload_x264 (vtable);
+ }
+ }
+
+ p++;
+ }
+ g_strfreev (libraries);
+ }
+#endif
+
+ if (!vtable_8bit && !vtable_10bit)
+ return FALSE;
+
+ return TRUE;
+}
+
+#else /* X264_BUILD >= 153 */
+
+static gboolean
+load_x264_libraries (void)
+{
+#if X264_BIT_DEPTH == 0 /* all */
+ GST_INFO ("8-bit depth and 10-bit depth supported");
+ vtable_8bit = &default_vtable;
+ vtable_10bit = &default_vtable;
+#elif X264_BIT_DEPTH == 8
+ GST_INFO ("Only 8-bit depth supported");
+ vtable_8bit = &default_vtable;
+#elif X264_BIT_DEPTH == 10
+ GST_INFO ("Only 10-bit depth supported");
+ vtable_10bit = &default_vtable;
+#else
+#error "unexpected X264_BIT_DEPTH value"
+#endif
+
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+ GST_WARNING ("Ignoring configured additional libraries %s, using libx264 "
+ "version enabled for multiple bit depths",
+ HAVE_X264_ADDITIONAL_LIBRARIES);
+#endif
+
+ return TRUE;
+}
+
+#endif
+
+enum
+{
+ ARG_0,
+ ARG_THREADS,
+ ARG_SLICED_THREADS,
+ ARG_SYNC_LOOKAHEAD,
+ ARG_PASS,
+ ARG_QUANTIZER,
+ ARG_MULTIPASS_CACHE_FILE,
+ ARG_BYTE_STREAM,
+ ARG_BITRATE,
+ ARG_INTRA_REFRESH,
+ ARG_VBV_BUF_CAPACITY,
+ ARG_ME,
+ ARG_SUBME,
+ ARG_ANALYSE,
+ ARG_DCT8x8,
+ ARG_REF,
+ ARG_BFRAMES,
+ ARG_B_ADAPT,
+ ARG_B_PYRAMID,
+ ARG_WEIGHTB,
+ ARG_SPS_ID,
+ ARG_AU_NALU,
+ ARG_TRELLIS,
+ ARG_KEYINT_MAX,
+ ARG_CABAC,
+ ARG_QP_MIN,
+ ARG_QP_MAX,
+ ARG_QP_STEP,
+ ARG_IP_FACTOR,
+ ARG_PB_FACTOR,
+ ARG_RC_MB_TREE,
+ ARG_RC_LOOKAHEAD,
+ ARG_NR,
+ ARG_INTERLACED,
+ ARG_OPTION_STRING,
+ ARG_SPEED_PRESET,
+ ARG_PSY_TUNE,
+ ARG_TUNE,
+ ARG_FRAME_PACKING,
+ ARG_INSERT_VUI,
+};
+
+#define ARG_THREADS_DEFAULT 0 /* 0 means 'auto' which is 1.5x number of CPU cores */
+#define ARG_PASS_DEFAULT 0
+#define ARG_QUANTIZER_DEFAULT 21
+#define ARG_MULTIPASS_CACHE_FILE_DEFAULT "x264.log"
+#define ARG_BYTE_STREAM_DEFAULT FALSE
+#define ARG_BITRATE_DEFAULT (2 * 1024)
+#define ARG_VBV_BUF_CAPACITY_DEFAULT 600
+#define ARG_ME_DEFAULT X264_ME_HEX
+#define ARG_SUBME_DEFAULT 1
+#define ARG_ANALYSE_DEFAULT 0
+#define ARG_DCT8x8_DEFAULT FALSE
+#define ARG_REF_DEFAULT 3
+#define ARG_BFRAMES_DEFAULT 0
+#define ARG_B_ADAPT_DEFAULT TRUE
+#define ARG_B_PYRAMID_DEFAULT FALSE
+#define ARG_WEIGHTB_DEFAULT FALSE
+#define ARG_SPS_ID_DEFAULT 0
+#define ARG_AU_NALU_DEFAULT TRUE
+#define ARG_TRELLIS_DEFAULT TRUE
+#define ARG_KEYINT_MAX_DEFAULT 0
+#define ARG_CABAC_DEFAULT TRUE
+#define ARG_QP_MIN_DEFAULT 10
+#define ARG_QP_MAX_DEFAULT 51
+#define ARG_QP_STEP_DEFAULT 4
+#define ARG_IP_FACTOR_DEFAULT 1.4
+#define ARG_PB_FACTOR_DEFAULT 1.3
+#define ARG_NR_DEFAULT 0
+#define ARG_INTERLACED_DEFAULT FALSE
+#define ARG_SLICED_THREADS_DEFAULT FALSE
+#define ARG_SYNC_LOOKAHEAD_DEFAULT -1
+#define ARG_RC_MB_TREE_DEFAULT TRUE
+#define ARG_RC_LOOKAHEAD_DEFAULT 40
+#define ARG_INTRA_REFRESH_DEFAULT FALSE
+#define ARG_OPTION_STRING_DEFAULT ""
+static GString *x264enc_defaults;
+#define ARG_SPEED_PRESET_DEFAULT 6 /* 'medium' preset - matches x264 CLI default */
+#define ARG_PSY_TUNE_DEFAULT 0 /* no psy tuning */
+#define ARG_TUNE_DEFAULT 0 /* no tuning */
+#define ARG_FRAME_PACKING_DEFAULT -1 /* automatic (none, or from input caps) */
+#define ARG_INSERT_VUI_DEFAULT TRUE
+
+enum
+{
+ GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY,
+ GST_X264_ENC_STREAM_FORMAT_AVC,
+ GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM
+};
+
+enum
+{
+ GST_X264_ENC_PASS_CBR = 0,
+ GST_X264_ENC_PASS_QUANT = 0x04,
+ GST_X264_ENC_PASS_QUAL,
+ GST_X264_ENC_PASS_PASS1 = 0x11,
+ GST_X264_ENC_PASS_PASS2,
+ GST_X264_ENC_PASS_PASS3
+};
+
+#define GST_X264_ENC_PASS_TYPE (gst_x264_enc_pass_get_type())
+static GType
+gst_x264_enc_pass_get_type (void)
+{
+ static GType pass_type = 0;
+
+ static const GEnumValue pass_types[] = {
+ {GST_X264_ENC_PASS_CBR, "Constant Bitrate Encoding", "cbr"},
+ {GST_X264_ENC_PASS_QUANT, "Constant Quantizer", "quant"},
+ {GST_X264_ENC_PASS_QUAL, "Constant Quality", "qual"},
+ {GST_X264_ENC_PASS_PASS1, "VBR Encoding - Pass 1", "pass1"},
+ {GST_X264_ENC_PASS_PASS2, "VBR Encoding - Pass 2", "pass2"},
+ {GST_X264_ENC_PASS_PASS3, "VBR Encoding - Pass 3", "pass3"},
+ {0, NULL, NULL}
+ };
+
+ if (!pass_type) {
+ pass_type = g_enum_register_static ("GstX264EncPass", pass_types);
+ }
+ return pass_type;
+}
+
+#define GST_X264_ENC_ME_TYPE (gst_x264_enc_me_get_type())
+static GType
+gst_x264_enc_me_get_type (void)
+{
+ static GType me_type = 0;
+ static GEnumValue *me_types;
+ int n, i;
+
+ if (me_type != 0)
+ return me_type;
+
+ n = 0;
+ while (x264_motion_est_names[n] != NULL)
+ n++;
+
+ me_types = g_new0 (GEnumValue, n + 1);
+
+ for (i = 0; i < n; i++) {
+ me_types[i].value = i;
+ me_types[i].value_name = x264_motion_est_names[i];
+ me_types[i].value_nick = x264_motion_est_names[i];
+ }
+
+ me_type = g_enum_register_static ("GstX264EncMe", me_types);
+
+ return me_type;
+}
+
+#define GST_X264_ENC_ANALYSE_TYPE (gst_x264_enc_analyse_get_type())
+static GType
+gst_x264_enc_analyse_get_type (void)
+{
+ static GType analyse_type = 0;
+ static const GFlagsValue analyse_types[] = {
+ {X264_ANALYSE_I4x4, "i4x4", "i4x4"},
+ {X264_ANALYSE_I8x8, "i8x8", "i8x8"},
+ {X264_ANALYSE_PSUB16x16, "p8x8", "p8x8"},
+ {X264_ANALYSE_PSUB8x8, "p4x4", "p4x4"},
+ {X264_ANALYSE_BSUB16x16, "b8x8", "b8x8"},
+ {0, NULL, NULL},
+ };
+
+ if (!analyse_type) {
+ analyse_type = g_flags_register_static ("GstX264EncAnalyse", analyse_types);
+ }
+ return analyse_type;
+}
+
+#define GST_X264_ENC_SPEED_PRESET_TYPE (gst_x264_enc_speed_preset_get_type())
+static GType
+gst_x264_enc_speed_preset_get_type (void)
+{
+ static GType speed_preset_type = 0;
+ static GEnumValue *speed_preset_types;
+ int n, i;
+
+ if (speed_preset_type != 0)
+ return speed_preset_type;
+
+ n = 0;
+ while (x264_preset_names[n] != NULL)
+ n++;
+
+ speed_preset_types = g_new0 (GEnumValue, n + 2);
+
+ speed_preset_types[0].value = 0;
+ speed_preset_types[0].value_name = "No preset";
+ speed_preset_types[0].value_nick = "None";
+
+ for (i = 1; i <= n; i++) {
+ speed_preset_types[i].value = i;
+ speed_preset_types[i].value_name = x264_preset_names[i - 1];
+ speed_preset_types[i].value_nick = x264_preset_names[i - 1];
+ }
+
+ speed_preset_type =
+ g_enum_register_static ("GstX264EncPreset", speed_preset_types);
+
+ return speed_preset_type;
+}
+
+static const GFlagsValue tune_types[] = {
+ {0x0, "No tuning", "none"},
+ {0x1, "Still image", "stillimage"},
+ {0x2, "Fast decode", "fastdecode"},
+ {0x4, "Zero latency", "zerolatency"},
+ {0, NULL, NULL},
+};
+
+#define GST_X264_ENC_TUNE_TYPE (gst_x264_enc_tune_get_type())
+static GType
+gst_x264_enc_tune_get_type (void)
+{
+ static GType tune_type = 0;
+
+ if (!tune_type) {
+ tune_type = g_flags_register_static ("GstX264EncTune", tune_types + 1);
+ }
+ return tune_type;
+}
+
+enum
+{
+ GST_X264_ENC_TUNE_NONE,
+ GST_X264_ENC_TUNE_FILM,
+ GST_X264_ENC_TUNE_ANIMATION,
+ GST_X264_ENC_TUNE_GRAIN,
+ GST_X264_ENC_TUNE_PSNR,
+ GST_X264_ENC_TUNE_SSIM,
+ GST_X264_ENC_TUNE_LAST
+};
+
+static const GEnumValue psy_tune_types[] = {
+ {GST_X264_ENC_TUNE_NONE, "No tuning", "none"},
+ {GST_X264_ENC_TUNE_FILM, "Film", "film"},
+ {GST_X264_ENC_TUNE_ANIMATION, "Animation", "animation"},
+ {GST_X264_ENC_TUNE_GRAIN, "Grain", "grain"},
+ {GST_X264_ENC_TUNE_PSNR, "PSNR", "psnr"},
+ {GST_X264_ENC_TUNE_SSIM, "SSIM", "ssim"},
+ {0, NULL, NULL},
+};
+
+#define GST_X264_ENC_PSY_TUNE_TYPE (gst_x264_enc_psy_tune_get_type())
+static GType
+gst_x264_enc_psy_tune_get_type (void)
+{
+ static GType psy_tune_type = 0;
+
+ if (!psy_tune_type) {
+ psy_tune_type =
+ g_enum_register_static ("GstX264EncPsyTune", psy_tune_types);
+ }
+ return psy_tune_type;
+}
+
+static void
+gst_x264_enc_build_tunings_string (GstX264Enc * x264enc)
+{
+ int i = 1;
+
+ if (x264enc->tunings)
+ g_string_free (x264enc->tunings, TRUE);
+
+ if (x264enc->psy_tune) {
+ x264enc->tunings =
+ g_string_new (psy_tune_types[x264enc->psy_tune].value_nick);
+ } else {
+ x264enc->tunings = g_string_new (NULL);
+ }
+
+ while (tune_types[i].value_name) {
+ if (x264enc->tune & (1 << (i - 1)))
+ g_string_append_printf (x264enc->tunings, "%s%s",
+ x264enc->tunings->len ? "," : "", tune_types[i].value_nick);
+ i++;
+ }
+
+ if (x264enc->tunings->len)
+ GST_DEBUG_OBJECT (x264enc, "Constructed tunings string: %s",
+ x264enc->tunings->str);
+}
+
+#define GST_X264_ENC_FRAME_PACKING_TYPE (gst_x264_enc_frame_packing_get_type())
+static GType
+gst_x264_enc_frame_packing_get_type (void)
+{
+ static GType fpa_type = 0;
+
+ static const GEnumValue fpa_types[] = {
+ {-1, "Automatic (use incoming video information)", "auto"},
+ {0, "checkerboard - Left and Right pixels alternate in a checkerboard pattern", "checkerboard"},
+ {1, "column interleaved - Alternating pixel columns represent Left and Right views", "column-interleaved"},
+ {2, "row interleaved - Alternating pixel rows represent Left and Right views", "row-interleaved"},
+ {3, "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view", "side-by-side"},
+ {4, "top bottom - L is on top, R on bottom", "top-bottom"},
+ {5, "frame interleaved - Each frame contains either Left or Right view alternately", "frame-interleaved"},
+ {0, NULL, NULL}
+ };
+
+ if (!fpa_type) {
+ fpa_type = g_enum_register_static ("GstX264EncFramePacking", fpa_types);
+ }
+ return fpa_type;
+}
+
+static gint
+gst_x264_enc_mview_mode_to_frame_packing (GstVideoMultiviewMode mode)
+{
+ switch (mode) {
+ case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
+ return 0;
+ case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+ return 1;
+ case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+ return 2;
+ case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+ return 3;
+ case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+ return 4;
+ case GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME:
+ return 5;
+ default:
+ break;
+ }
+
+ return -1;
+}
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-h264, "
+ "framerate = (fraction) [0/1, MAX], "
+ "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], "
+ "stream-format = (string) { avc, byte-stream }, "
+ "alignment = (string) au, "
+ "profile = (string) { high-4:4:4, high-4:2:2, high-10, high, main,"
+ " baseline, constrained-baseline, high-4:4:4-intra, high-4:2:2-intra,"
+ " high-10-intra }")
+ );
+
+static void gst_x264_enc_finalize (GObject * object);
+static gboolean gst_x264_enc_start (GstVideoEncoder * encoder);
+static gboolean gst_x264_enc_stop (GstVideoEncoder * encoder);
+static gboolean gst_x264_enc_flush (GstVideoEncoder * encoder);
+
+static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder);
+static void gst_x264_enc_close_encoder (GstX264Enc * encoder);
+
+static GstFlowReturn gst_x264_enc_finish (GstVideoEncoder * encoder);
+static GstFlowReturn gst_x264_enc_handle_frame (GstVideoEncoder * encoder,
+ GstVideoCodecFrame * frame);
+static void gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send);
+static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder,
+ x264_picture_t * pic_in, GstVideoCodecFrame * input_frame, int *i_nal,
+ gboolean send);
+static gboolean gst_x264_enc_set_format (GstVideoEncoder * video_enc,
+ GstVideoCodecState * state);
+static gboolean gst_x264_enc_propose_allocation (GstVideoEncoder * encoder,
+ GstQuery * query);
+
+static void gst_x264_enc_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_x264_enc_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static gboolean x264_element_init (GstPlugin * plugin);
+
+typedef gboolean (*LoadPresetFunc) (GstPreset * preset, const gchar * name);
+
+LoadPresetFunc parent_load_preset = NULL;
+
+static gboolean
+gst_x264_enc_load_preset (GstPreset * preset, const gchar * name)
+{
+ GstX264Enc *enc = GST_X264_ENC (preset);
+ gboolean res;
+
+ gst_encoder_bitrate_profile_manager_start_loading_preset
+ (enc->bitrate_manager);
+ res = parent_load_preset (preset, name);
+ gst_encoder_bitrate_profile_manager_end_loading_preset (enc->bitrate_manager,
+ res ? name : NULL);
+
+ return res;
+}
+
+static void
+gst_x264_enc_preset_interface_init (GstPresetInterface * iface)
+{
+ parent_load_preset = iface->load_preset;
+ iface->load_preset = gst_x264_enc_load_preset;
+}
+
+#define gst_x264_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_VIDEO_ENCODER,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET,
+ gst_x264_enc_preset_interface_init));
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (x264enc, x264_element_init)
+/* don't forget to free the string after use */
+ static const gchar *gst_x264_enc_build_partitions (gint analyse)
+{
+ GString *string;
+
+ if (!analyse)
+ return NULL;
+
+ string = g_string_new (NULL);
+ if (analyse & X264_ANALYSE_I4x4)
+ g_string_append (string, "i4x4");
+ if (analyse & X264_ANALYSE_I8x8)
+ g_string_append (string, ",i8x8");
+ if (analyse & X264_ANALYSE_PSUB16x16)
+ g_string_append (string, ",p8x8");
+ if (analyse & X264_ANALYSE_PSUB8x8)
+ g_string_append (string, ",p4x4");
+ if (analyse & X264_ANALYSE_BSUB16x16)
+ g_string_append (string, ",b8x8");
+
+ return (const gchar *) g_string_free (string, FALSE);
+}
+
+static void
+check_formats (const gchar * str, gboolean * has_420_8, gboolean * has_420_10,
+ gboolean * has_422, gboolean * has_444)
+{
+ if (g_str_has_prefix (str, "high-4:4:4"))
+ *has_444 = TRUE;
+ else if (g_str_has_prefix (str, "high-4:2:2"))
+ *has_422 = TRUE;
+ else if (g_str_has_prefix (str, "high-10"))
+ *has_420_10 = TRUE;
+ else
+ *has_420_8 = TRUE;
+}
+
+
+/* allowed input caps depending on whether libx264 was built for 8 or 10 bits */
+static GstCaps *
+gst_x264_enc_sink_getcaps (GstVideoEncoder * enc, GstCaps * filter)
+{
+ GstCaps *supported_incaps;
+ GstCaps *allowed;
+ GstCaps *filter_caps, *fcaps;
+ gint i, j, k;
+
+ supported_incaps =
+ gst_pad_get_pad_template_caps (GST_VIDEO_ENCODER_SINK_PAD (enc));
+
+ /* Allow downstream to specify width/height/framerate/PAR constraints
+ * and forward them upstream for video converters to handle
+ */
+ allowed = gst_pad_get_allowed_caps (enc->srcpad);
+
+ if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
+ fcaps = supported_incaps;
+ goto done;
+ }
+
+ GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, supported_incaps);
+ GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
+
+ filter_caps = gst_caps_new_empty ();
+
+ for (i = 0; i < gst_caps_get_size (supported_incaps); i++) {
+ GQuark q_name =
+ gst_structure_get_name_id (gst_caps_get_structure (supported_incaps,
+ i));
+
+ for (j = 0; j < gst_caps_get_size (allowed); j++) {
+ const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
+ const GValue *val;
+ GstStructure *s;
+
+ /* FIXME Find a way to reuse gst_video_encoder_proxy_getcaps so that
+ * we do not need to copy that logic */
+ s = gst_structure_new_id_empty (q_name);
+ if ((val = gst_structure_get_value (allowed_s, "width")))
+ gst_structure_set_value (s, "width", val);
+ if ((val = gst_structure_get_value (allowed_s, "height")))
+ gst_structure_set_value (s, "height", val);
+ if ((val = gst_structure_get_value (allowed_s, "framerate")))
+ gst_structure_set_value (s, "framerate", val);
+ if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio")))
+ gst_structure_set_value (s, "pixel-aspect-ratio", val);
+ if ((val = gst_structure_get_value (allowed_s, "colorimetry")))
+ gst_structure_set_value (s, "colorimetry", val);
+ if ((val = gst_structure_get_value (allowed_s, "chroma-site")))
+ gst_structure_set_value (s, "chroma-site", val);
+
+ if ((val = gst_structure_get_value (allowed_s, "profile"))) {
+ gboolean has_420_8 = FALSE;
+ gboolean has_420_10 = FALSE;
+ gboolean has_422 = FALSE;
+ gboolean has_444 = FALSE;
+
+ if (G_VALUE_HOLDS_STRING (val)) {
+ check_formats (g_value_get_string (val), &has_420_8, &has_420_10,
+ &has_422, &has_444);
+ } else if (GST_VALUE_HOLDS_LIST (val)) {
+ for (k = 0; k < gst_value_list_get_size (val); k++) {
+ const GValue *vlist = gst_value_list_get_value (val, k);
+
+ if (G_VALUE_HOLDS_STRING (vlist))
+ check_formats (g_value_get_string (vlist), &has_420_8,
+ &has_420_10, &has_422, &has_444);
+ }
+ }
+
+ gst_x264_enc_add_x264_chroma_format (s, has_420_8, has_420_10, has_422,
+ has_444);
+ }
+
+ filter_caps = gst_caps_merge_structure (filter_caps, s);
+ }
+ }
+
+ fcaps = gst_caps_intersect (filter_caps, supported_incaps);
+ gst_caps_unref (filter_caps);
+ gst_caps_unref (supported_incaps);
+
+ if (filter) {
+ GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter);
+ filter_caps = gst_caps_intersect (fcaps, filter);
+ gst_caps_unref (fcaps);
+ fcaps = filter_caps;
+ }
+
+done:
+ gst_caps_replace (&allowed, NULL);
+
+ GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
+
+ return fcaps;
+}
+
+static gboolean
+gst_x264_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
+{
+ GstPad *pad = GST_VIDEO_ENCODER_SINK_PAD (enc);
+ gboolean ret = FALSE;
+
+ GST_DEBUG ("Received %s query on sinkpad, %" GST_PTR_FORMAT,
+ GST_QUERY_TYPE_NAME (query), query);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_ACCEPT_CAPS:{
+ GstCaps *acceptable, *caps;
+
+ acceptable = gst_pad_get_pad_template_caps (pad);
+
+ gst_query_parse_accept_caps (query, &caps);
+
+ gst_query_set_accept_caps_result (query,
+ gst_caps_is_subset (caps, acceptable));
+ gst_caps_unref (acceptable);
+ ret = TRUE;
+ }
+ break;
+ default:
+ ret = GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
+ break;
+ }
+
+ return ret;
+}
+
+static void
+gst_x264_enc_class_init (GstX264EncClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *element_class;
+ GstVideoEncoderClass *gstencoder_class;
+ const gchar *partitions = NULL;
+ GstPadTemplate *sink_templ;
+ GstCaps *supported_sinkcaps;
+
+ x264enc_defaults = g_string_new ("");
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ element_class = GST_ELEMENT_CLASS (klass);
+ gstencoder_class = GST_VIDEO_ENCODER_CLASS (klass);
+
+ gobject_class->set_property = gst_x264_enc_set_property;
+ gobject_class->get_property = gst_x264_enc_get_property;
+ gobject_class->finalize = gst_x264_enc_finalize;
+
+ gstencoder_class->set_format = GST_DEBUG_FUNCPTR (gst_x264_enc_set_format);
+ gstencoder_class->handle_frame =
+ GST_DEBUG_FUNCPTR (gst_x264_enc_handle_frame);
+ gstencoder_class->start = GST_DEBUG_FUNCPTR (gst_x264_enc_start);
+ gstencoder_class->stop = GST_DEBUG_FUNCPTR (gst_x264_enc_stop);
+ gstencoder_class->flush = GST_DEBUG_FUNCPTR (gst_x264_enc_flush);
+ gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x264_enc_finish);
+ gstencoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_getcaps);
+ gstencoder_class->propose_allocation =
+ GST_DEBUG_FUNCPTR (gst_x264_enc_propose_allocation);
+ gstencoder_class->sink_query = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_query);
+
+ /* options for which we don't use string equivalents */
+ g_object_class_install_property (gobject_class, ARG_PASS,
+ g_param_spec_enum ("pass", "Encoding pass/type",
+ "Encoding pass/type", GST_X264_ENC_PASS_TYPE,
+ ARG_PASS_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_QUANTIZER,
+ g_param_spec_uint ("quantizer", "Constant Quantizer",
+ "Constant quantizer or quality to apply",
+ 0, 50, ARG_QUANTIZER_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_BITRATE,
+ g_param_spec_uint ("bitrate", "Bitrate", "Bitrate in kbit/sec", 1,
+ 2000 * 1024, ARG_BITRATE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, ARG_VBV_BUF_CAPACITY,
+ g_param_spec_uint ("vbv-buf-capacity", "VBV buffer capacity",
+ "Size of the VBV buffer in milliseconds",
+ 0, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, ARG_SPEED_PRESET,
+ g_param_spec_enum ("speed-preset", "Speed/quality preset",
+ "Preset name for speed/quality tradeoff options (can affect decode "
+ "compatibility - impose restrictions separately for your target decoder)",
+ GST_X264_ENC_SPEED_PRESET_TYPE, ARG_SPEED_PRESET_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_PSY_TUNE,
+ g_param_spec_enum ("psy-tune", "Psychovisual tuning preset",
+ "Preset name for psychovisual tuning options",
+ GST_X264_ENC_PSY_TUNE_TYPE, ARG_PSY_TUNE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_TUNE,
+ g_param_spec_flags ("tune", "Content tuning preset",
+ "Preset name for non-psychovisual tuning options",
+ GST_X264_ENC_TUNE_TYPE, ARG_TUNE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_OPTION_STRING,
+ g_param_spec_string ("option-string", "Option string",
+ "String of x264 options (overridden by element properties)"
+ " in the format \"key1=value1:key2=value2\".",
+ ARG_OPTION_STRING_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, ARG_FRAME_PACKING,
+ g_param_spec_enum ("frame-packing", "Frame Packing",
+ "Set frame packing mode for Stereoscopic content",
+ GST_X264_ENC_FRAME_PACKING_TYPE, ARG_FRAME_PACKING_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, ARG_INSERT_VUI,
+ g_param_spec_boolean ("insert-vui", "Insert VUI",
+ "Insert VUI NAL in stream",
+ ARG_INSERT_VUI_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /* options for which we _do_ use string equivalents */
+ g_object_class_install_property (gobject_class, ARG_THREADS,
+ g_param_spec_uint ("threads", "Threads",
+ "Number of threads used by the codec (0 for automatic)",
+ 0, G_MAXINT, ARG_THREADS_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /* NOTE: this first string append doesn't require the ':' delimiter but the
+ * rest do */
+ g_string_append_printf (x264enc_defaults, "threads=%d", ARG_THREADS_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_SLICED_THREADS,
+ g_param_spec_boolean ("sliced-threads", "Sliced Threads",
+ "Low latency but lower efficiency threading",
+ ARG_SLICED_THREADS_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":sliced-threads=%d",
+ ARG_SLICED_THREADS_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_SYNC_LOOKAHEAD,
+ g_param_spec_int ("sync-lookahead", "Sync Lookahead",
+ "Number of buffer frames for threaded lookahead (-1 for automatic)",
+ -1, 250, ARG_SYNC_LOOKAHEAD_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":sync-lookahead=%d",
+ ARG_SYNC_LOOKAHEAD_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_MULTIPASS_CACHE_FILE,
+ g_param_spec_string ("multipass-cache-file", "Multipass Cache File",
+ "Filename for multipass cache file",
+ ARG_MULTIPASS_CACHE_FILE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":stats=%s",
+ ARG_MULTIPASS_CACHE_FILE_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_BYTE_STREAM,
+ g_param_spec_boolean ("byte-stream", "Byte Stream",
+ "Generate byte stream format of NALU", ARG_BYTE_STREAM_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":annexb=%d",
+ ARG_BYTE_STREAM_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_INTRA_REFRESH,
+ g_param_spec_boolean ("intra-refresh", "Intra Refresh",
+ "Use Periodic Intra Refresh instead of IDR frames",
+ ARG_INTRA_REFRESH_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":intra-refresh=%d",
+ ARG_INTRA_REFRESH_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_ME,
+ g_param_spec_enum ("me", "Motion Estimation",
+ "Integer pixel motion estimation method", GST_X264_ENC_ME_TYPE,
+ ARG_ME_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":me=%s",
+ x264_motion_est_names[ARG_ME_DEFAULT]);
+ g_object_class_install_property (gobject_class, ARG_SUBME,
+ g_param_spec_uint ("subme", "Subpixel Motion Estimation",
+ "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
+ 1, 10, ARG_SUBME_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":subme=%d", ARG_SUBME_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_ANALYSE,
+ g_param_spec_flags ("analyse", "Analyse", "Partitions to consider",
+ GST_X264_ENC_ANALYSE_TYPE, ARG_ANALYSE_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ partitions = gst_x264_enc_build_partitions (ARG_ANALYSE_DEFAULT);
+ if (partitions) {
+ g_string_append_printf (x264enc_defaults, ":partitions=%s", partitions);
+ g_free ((gpointer) partitions);
+ }
+ g_object_class_install_property (gobject_class, ARG_DCT8x8,
+ g_param_spec_boolean ("dct8x8", "DCT8x8",
+ "Adaptive spatial transform size", ARG_DCT8x8_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":8x8dct=%d", ARG_DCT8x8_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_REF,
+ g_param_spec_uint ("ref", "Reference Frames",
+ "Number of reference frames",
+ 1, 16, ARG_REF_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":ref=%d", ARG_REF_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_BFRAMES,
+ g_param_spec_uint ("bframes", "B-Frames",
+ "Number of B-frames between I and P",
+ 0, 16, ARG_BFRAMES_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":bframes=%d", ARG_BFRAMES_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_B_ADAPT,
+ g_param_spec_boolean ("b-adapt", "B-Adapt",
+ "Automatically decide how many B-frames to use",
+ ARG_B_ADAPT_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":b-adapt=%d", ARG_B_ADAPT_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_B_PYRAMID,
+ g_param_spec_boolean ("b-pyramid", "B-Pyramid",
+ "Keep some B-frames as references", ARG_B_PYRAMID_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":b-pyramid=%s",
+ x264_b_pyramid_names[ARG_B_PYRAMID_DEFAULT]);
+ g_object_class_install_property (gobject_class, ARG_WEIGHTB,
+ g_param_spec_boolean ("weightb", "Weighted B-Frames",
+ "Weighted prediction for B-frames", ARG_WEIGHTB_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":weightb=%d", ARG_WEIGHTB_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_SPS_ID,
+ g_param_spec_uint ("sps-id", "SPS ID",
+ "SPS and PPS ID number",
+ 0, 31, ARG_SPS_ID_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":sps-id=%d", ARG_SPS_ID_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_AU_NALU,
+ g_param_spec_boolean ("aud", "AUD",
+ "Use AU (Access Unit) delimiter", ARG_AU_NALU_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":aud=%d", ARG_AU_NALU_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_TRELLIS,
+ g_param_spec_boolean ("trellis", "Trellis quantization",
+ "Enable trellis searched quantization", ARG_TRELLIS_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":trellis=%d", ARG_TRELLIS_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_KEYINT_MAX,
+ g_param_spec_uint ("key-int-max", "Key-frame maximal interval",
+ "Maximal distance between two key-frames (0 for automatic)",
+ 0, G_MAXINT, ARG_KEYINT_MAX_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":keyint=%d",
+ ARG_KEYINT_MAX_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_CABAC,
+ g_param_spec_boolean ("cabac", "Use CABAC", "Enable CABAC entropy coding",
+ ARG_CABAC_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":cabac=%d", ARG_CABAC_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_QP_MIN,
+ g_param_spec_uint ("qp-min", "Minimum Quantizer",
+ "Minimum quantizer", 0, 63, ARG_QP_MIN_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":qpmin=%d", ARG_QP_MIN_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_QP_MAX,
+ g_param_spec_uint ("qp-max", "Maximum Quantizer",
+ "Maximum quantizer", 0, 63, ARG_QP_MAX_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":qpmax=%d", ARG_QP_MAX_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_QP_STEP,
+ g_param_spec_uint ("qp-step", "Maximum Quantizer Difference",
+ "Maximum quantizer difference between frames",
+ 0, 63, ARG_QP_STEP_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":qpstep=%d", ARG_QP_STEP_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_IP_FACTOR,
+ g_param_spec_float ("ip-factor", "IP-Factor",
+ "Quantizer factor between I- and P-frames",
+ 0, 2, ARG_IP_FACTOR_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":ip-factor=%f",
+ ARG_IP_FACTOR_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_PB_FACTOR,
+ g_param_spec_float ("pb-factor", "PB-Factor",
+ "Quantizer factor between P- and B-frames", 0, 2,
+ ARG_PB_FACTOR_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":pb-factor=%f",
+ ARG_PB_FACTOR_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_RC_MB_TREE,
+ g_param_spec_boolean ("mb-tree", "Macroblock Tree",
+ "Macroblock-Tree ratecontrol",
+ ARG_RC_MB_TREE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":mbtree=%d",
+ ARG_RC_MB_TREE_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_RC_LOOKAHEAD,
+ g_param_spec_int ("rc-lookahead", "Rate Control Lookahead",
+ "Number of frames for frametype lookahead", 0, 250,
+ ARG_RC_LOOKAHEAD_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":rc-lookahead=%d",
+ ARG_RC_LOOKAHEAD_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_NR,
+ g_param_spec_uint ("noise-reduction", "Noise Reduction",
+ "Noise reduction strength",
+ 0, 100000, ARG_NR_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":nr=%d", ARG_NR_DEFAULT);
+ g_object_class_install_property (gobject_class, ARG_INTERLACED,
+ g_param_spec_boolean ("interlaced", "Interlaced",
+ "Interlaced material", ARG_INTERLACED_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_string_append_printf (x264enc_defaults, ":interlaced=%d",
+ ARG_INTERLACED_DEFAULT);
+
+ /* append deblock parameters */
+ g_string_append_printf (x264enc_defaults, ":deblock=0,0");
+ /* append weighted prediction parameter */
+ g_string_append_printf (x264enc_defaults, ":weightp=0");
+
+ gst_element_class_set_static_metadata (element_class,
+ "x264enc", "Codec/Encoder/Video", "H264 Encoder",
+ "Josef Zlomek <josef.zlomek@itonis.tv>, "
+ "Mark Nauwelaerts <mnauw@users.sf.net>");
+
+ supported_sinkcaps = gst_caps_new_simple ("video/x-raw",
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1,
+ "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+
+ gst_x264_enc_add_x264_chroma_format (gst_caps_get_structure
+ (supported_sinkcaps, 0), TRUE, TRUE, TRUE, TRUE);
+
+ sink_templ = gst_pad_template_new ("sink",
+ GST_PAD_SINK, GST_PAD_ALWAYS, supported_sinkcaps);
+
+ gst_caps_unref (supported_sinkcaps);
+
+ gst_element_class_add_pad_template (element_class, sink_templ);
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+
+ gst_type_mark_as_plugin_api (GST_X264_ENC_ANALYSE_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_FRAME_PACKING_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_ME_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_PASS_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_PSY_TUNE_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_SPEED_PRESET_TYPE, 0);
+ gst_type_mark_as_plugin_api (GST_X264_ENC_TUNE_TYPE, 0);
+}
+
+/* *INDENT-OFF* */
+G_GNUC_PRINTF (3, 0)
+/* *INDENT-ON* */
+
+static void
+gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
+ va_list args)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+ GstDebugLevel gst_level;
+ GObject *object = (GObject *) private;
+ gchar *formatted;
+
+ switch (level) {
+ case X264_LOG_NONE:
+ gst_level = GST_LEVEL_NONE;
+ break;
+ case X264_LOG_ERROR:
+ gst_level = GST_LEVEL_ERROR;
+ break;
+ case X264_LOG_WARNING:
+ gst_level = GST_LEVEL_WARNING;
+ break;
+ case X264_LOG_INFO:
+ gst_level = GST_LEVEL_INFO;
+ break;
+ default:
+ /* push x264enc debug down to our lower levels to avoid some clutter */
+ gst_level = GST_LEVEL_LOG;
+ break;
+ }
+
+ if (G_LIKELY (gst_level > _gst_debug_min))
+ return;
+
+ if (G_LIKELY (gst_level > gst_debug_category_get_threshold (GST_CAT_DEFAULT)))
+ return;
+
+ formatted = g_strdup_vprintf (format, args);
+ g_strchomp (formatted);
+
+ GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, gst_level, object, "%s", formatted);
+
+ g_free (formatted);
+#endif /* GST_DISABLE_GST_DEBUG */
+}
+
+/* initialize the new element
+ * instantiate pads and add them to element
+ * set functions
+ * initialize structure
+ */
+static void
+gst_x264_enc_init (GstX264Enc * encoder)
+{
+ /* properties */
+ encoder->threads = ARG_THREADS_DEFAULT;
+ encoder->sliced_threads = ARG_SLICED_THREADS_DEFAULT;
+ encoder->sync_lookahead = ARG_SYNC_LOOKAHEAD_DEFAULT;
+ encoder->pass = ARG_PASS_DEFAULT;
+ encoder->quantizer = ARG_QUANTIZER_DEFAULT;
+ encoder->mp_cache_file = g_strdup (ARG_MULTIPASS_CACHE_FILE_DEFAULT);
+ encoder->byte_stream = ARG_BYTE_STREAM_DEFAULT;
+ encoder->intra_refresh = ARG_INTRA_REFRESH_DEFAULT;
+ encoder->vbv_buf_capacity = ARG_VBV_BUF_CAPACITY_DEFAULT;
+ encoder->me = ARG_ME_DEFAULT;
+ encoder->subme = ARG_SUBME_DEFAULT;
+ encoder->analyse = ARG_ANALYSE_DEFAULT;
+ encoder->dct8x8 = ARG_DCT8x8_DEFAULT;
+ encoder->ref = ARG_REF_DEFAULT;
+ encoder->bframes = ARG_BFRAMES_DEFAULT;
+ encoder->b_adapt = ARG_B_ADAPT_DEFAULT;
+ encoder->b_pyramid = ARG_B_PYRAMID_DEFAULT;
+ encoder->weightb = ARG_WEIGHTB_DEFAULT;
+ encoder->sps_id = ARG_SPS_ID_DEFAULT;
+ encoder->au_nalu = ARG_AU_NALU_DEFAULT;
+ encoder->trellis = ARG_TRELLIS_DEFAULT;
+ encoder->keyint_max = ARG_KEYINT_MAX_DEFAULT;
+ encoder->cabac = ARG_CABAC_DEFAULT;
+ encoder->qp_min = ARG_QP_MIN_DEFAULT;
+ encoder->qp_max = ARG_QP_MAX_DEFAULT;
+ encoder->qp_step = ARG_QP_STEP_DEFAULT;
+ encoder->ip_factor = ARG_IP_FACTOR_DEFAULT;
+ encoder->pb_factor = ARG_PB_FACTOR_DEFAULT;
+ encoder->mb_tree = ARG_RC_MB_TREE_DEFAULT;
+ encoder->rc_lookahead = ARG_RC_LOOKAHEAD_DEFAULT;
+ encoder->noise_reduction = ARG_NR_DEFAULT;
+ encoder->interlaced = ARG_INTERLACED_DEFAULT;
+ encoder->option_string = g_string_new (NULL);
+ encoder->option_string_prop = g_string_new (ARG_OPTION_STRING_DEFAULT);
+ encoder->speed_preset = ARG_SPEED_PRESET_DEFAULT;
+ encoder->psy_tune = ARG_PSY_TUNE_DEFAULT;
+ encoder->tune = ARG_TUNE_DEFAULT;
+ encoder->frame_packing = ARG_FRAME_PACKING_DEFAULT;
+ encoder->insert_vui = ARG_INSERT_VUI_DEFAULT;
+
+ encoder->bitrate_manager =
+ gst_encoder_bitrate_profile_manager_new (ARG_BITRATE_DEFAULT);
+}
+
+typedef struct
+{
+ GstVideoCodecFrame *frame;
+ GstVideoFrame vframe;
+} FrameData;
+
+static FrameData *
+gst_x264_enc_queue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame,
+ GstVideoInfo * info)
+{
+ GstVideoFrame vframe;
+ FrameData *fdata;
+
+ if (!gst_video_frame_map (&vframe, info, frame->input_buffer, GST_MAP_READ))
+ return NULL;
+
+ fdata = g_slice_new (FrameData);
+ fdata->frame = gst_video_codec_frame_ref (frame);
+ fdata->vframe = vframe;
+
+ enc->pending_frames = g_list_prepend (enc->pending_frames, fdata);
+
+ return fdata;
+}
+
+static void
+gst_x264_enc_dequeue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame)
+{
+ GList *l;
+
+ for (l = enc->pending_frames; l; l = l->next) {
+ FrameData *fdata = l->data;
+
+ if (fdata->frame != frame)
+ continue;
+
+ gst_video_frame_unmap (&fdata->vframe);
+ gst_video_codec_frame_unref (fdata->frame);
+ g_slice_free (FrameData, fdata);
+
+ enc->pending_frames = g_list_delete_link (enc->pending_frames, l);
+ return;
+ }
+}
+
+static void
+gst_x264_enc_dequeue_all_frames (GstX264Enc * enc)
+{
+ GList *l;
+
+ for (l = enc->pending_frames; l; l = l->next) {
+ FrameData *fdata = l->data;
+
+ gst_video_frame_unmap (&fdata->vframe);
+ gst_video_codec_frame_unref (fdata->frame);
+ g_slice_free (FrameData, fdata);
+ }
+ g_list_free (enc->pending_frames);
+ enc->pending_frames = NULL;
+}
+
+static gboolean
+gst_x264_enc_start (GstVideoEncoder * encoder)
+{
+ GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+ x264enc->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
+
+ /* make sure that we have enough time for first DTS,
+ this is probably overkill for most streams */
+ gst_video_encoder_set_min_pts (encoder, GST_SECOND * 60 * 60 * 1000);
+
+ return TRUE;
+}
+
+static gboolean
+gst_x264_enc_stop (GstVideoEncoder * encoder)
+{
+ GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+ gst_x264_enc_flush_frames (x264enc, FALSE);
+ gst_x264_enc_close_encoder (x264enc);
+ gst_x264_enc_dequeue_all_frames (x264enc);
+
+ if (x264enc->input_state)
+ gst_video_codec_state_unref (x264enc->input_state);
+ x264enc->input_state = NULL;
+
+ return TRUE;
+}
+
+
+static gboolean
+gst_x264_enc_flush (GstVideoEncoder * encoder)
+{
+ GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+ gst_x264_enc_flush_frames (x264enc, FALSE);
+ gst_x264_enc_close_encoder (x264enc);
+ gst_x264_enc_dequeue_all_frames (x264enc);
+
+ gst_x264_enc_init_encoder (x264enc);
+
+ return TRUE;
+}
+
+static void
+gst_x264_enc_finalize (GObject * object)
+{
+ GstX264Enc *encoder = GST_X264_ENC (object);
+
+ if (encoder->input_state)
+ gst_video_codec_state_unref (encoder->input_state);
+ encoder->input_state = NULL;
+
+#define FREE_STRING(ptr) \
+ if (ptr) \
+ g_string_free (ptr, TRUE);
+
+ FREE_STRING (encoder->tunings);
+ FREE_STRING (encoder->option_string);
+ FREE_STRING (encoder->option_string_prop);
+ gst_encoder_bitrate_profile_manager_free (encoder->bitrate_manager);
+
+#undef FREE_STRING
+
+ g_free (encoder->mp_cache_file);
+ encoder->mp_cache_file = NULL;
+
+ gst_x264_enc_close_encoder (encoder);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/*
+ * gst_x264_enc_parse_options
+ * @encoder: Encoder to which options are assigned
+ * @str: Option string
+ *
+ * Parse option string and assign to x264 parameters
+ *
+ */
+static gboolean
+gst_x264_enc_parse_options (GstX264Enc * encoder, const gchar * str)
+{
+ GStrv kvpairs;
+ guint npairs, i;
+ gint parse_result = 0, ret = 0;
+ gchar *options = (gchar *) str;
+
+ while (*options == ':')
+ options++;
+
+ kvpairs = g_strsplit (options, ":", 0);
+ npairs = g_strv_length (kvpairs);
+
+ for (i = 0; i < npairs; i++) {
+ GStrv key_val = g_strsplit (kvpairs[i], "=", 2);
+
+ parse_result =
+ encoder->vtable->x264_param_parse (&encoder->x264param, key_val[0],
+ key_val[1]);
+
+ if (parse_result == X264_PARAM_BAD_NAME) {
+ GST_ERROR_OBJECT (encoder, "Bad name for option %s=%s",
+ key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
+ }
+ if (parse_result == X264_PARAM_BAD_VALUE) {
+ GST_ERROR_OBJECT (encoder,
+ "Bad value for option %s=%s (Note: a NULL value for a non-boolean triggers this)",
+ key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
+ }
+
+ g_strfreev (key_val);
+
+ if (parse_result)
+ ret++;
+ }
+
+ g_strfreev (kvpairs);
+ return !ret;
+}
+
+static gint
+gst_x264_enc_gst_to_x264_video_format (GstVideoFormat format, gint * nplanes)
+{
+ switch (format) {
+ case GST_VIDEO_FORMAT_I420:
+ case GST_VIDEO_FORMAT_YV12:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I420;
+ case GST_VIDEO_FORMAT_I420_10BE:
+ case GST_VIDEO_FORMAT_I420_10LE:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I420 | X264_CSP_HIGH_DEPTH;
+ case GST_VIDEO_FORMAT_Y42B:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I422;
+ case GST_VIDEO_FORMAT_I422_10BE:
+ case GST_VIDEO_FORMAT_I422_10LE:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I422 | X264_CSP_HIGH_DEPTH;
+ case GST_VIDEO_FORMAT_Y444:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I444;
+ case GST_VIDEO_FORMAT_Y444_10BE:
+ case GST_VIDEO_FORMAT_Y444_10LE:
+ if (nplanes)
+ *nplanes = 3;
+ return X264_CSP_I444 | X264_CSP_HIGH_DEPTH;
+ case GST_VIDEO_FORMAT_NV12:
+ if (nplanes)
+ *nplanes = 2;
+ return X264_CSP_NV12;
+ default:
+ g_return_val_if_reached (GST_VIDEO_FORMAT_UNKNOWN);
+ }
+}
+
+/*
+ * gst_x264_enc_init_encoder
+ * @encoder: Encoder which should be initialized.
+ *
+ * Initialize x264 encoder.
+ *
+ */
+static gboolean
+gst_x264_enc_init_encoder (GstX264Enc * encoder)
+{
+ guint pass = 0;
+ GstVideoInfo *info;
+ guint bitrate;
+
+ if (!encoder->input_state) {
+ GST_DEBUG_OBJECT (encoder, "Have no input state yet");
+ return FALSE;
+ }
+
+ info = &encoder->input_state->info;
+
+ /* make sure that the encoder is closed */
+ gst_x264_enc_close_encoder (encoder);
+
+ GST_OBJECT_LOCK (encoder);
+
+ if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 8)
+ encoder->vtable = vtable_8bit;
+ else if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 10)
+ encoder->vtable = vtable_10bit;
+
+ g_assert (encoder->vtable != NULL);
+
+ gst_x264_enc_build_tunings_string (encoder);
+
+ /* set x264 parameters and use preset/tuning if present */
+ GST_DEBUG_OBJECT (encoder, "Applying defaults with preset %s, tunings %s",
+ encoder->speed_preset ? x264_preset_names[encoder->speed_preset - 1] : "",
+ encoder->tunings && encoder->tunings->len ? encoder->tunings->str : "");
+ encoder->vtable->x264_param_default_preset (&encoder->x264param,
+ encoder->speed_preset ? x264_preset_names[encoder->speed_preset -
+ 1] : NULL, encoder->tunings
+ && encoder->tunings->len ? encoder->tunings->str : NULL);
+
+ /* log callback setup; part of parameters
+ * this needs to be done again after every *param_default* () call */
+ encoder->x264param.pf_log = gst_x264_enc_log_callback;
+ encoder->x264param.p_log_private = encoder;
+ encoder->x264param.i_log_level = X264_LOG_DEBUG;
+
+ /* if no preset nor tuning, use property defaults */
+ if (!encoder->speed_preset && !encoder->tunings->len) {
+ GST_DEBUG_OBJECT (encoder, "Applying x264enc_defaults");
+ if (x264enc_defaults->len
+ && gst_x264_enc_parse_options (encoder,
+ x264enc_defaults->str) == FALSE) {
+ GST_DEBUG_OBJECT (encoder,
+ "x264enc_defaults string contains errors. This is a bug.");
+ goto unlock_and_return;
+ }
+ } else {
+ /* When using presets we need to respect the default output format */
+ encoder->x264param.b_aud = encoder->au_nalu;
+ encoder->x264param.b_annexb = encoder->byte_stream;
+ }
+
+ /* setup appropriate timebase for gstreamer */
+ encoder->x264param.i_timebase_num = 1;
+ encoder->x264param.i_timebase_den = 1000000000;
+
+ /* apply option-string property */
+ if (encoder->option_string_prop && encoder->option_string_prop->len) {
+ GST_DEBUG_OBJECT (encoder, "Applying option-string: %s",
+ encoder->option_string_prop->str);
+ if (gst_x264_enc_parse_options (encoder,
+ encoder->option_string_prop->str) == FALSE) {
+ GST_DEBUG_OBJECT (encoder, "Your option-string contains errors.");
+ goto unlock_and_return;
+ }
+ }
+ /* apply user-set options */
+ if (encoder->option_string && encoder->option_string->len) {
+ GST_DEBUG_OBJECT (encoder, "Applying user-set options: %s",
+ encoder->option_string->str);
+ if (gst_x264_enc_parse_options (encoder,
+ encoder->option_string->str) == FALSE) {
+ GST_DEBUG_OBJECT (encoder, "Failed to parse internal option string. "
+ "This could be due to use of an old libx264 version. Option string "
+ "was: %s", encoder->option_string->str);
+ }
+ }
+
+ /* set up encoder parameters */
+#if X264_BUILD >= 153
+ encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
+#endif
+ encoder->x264param.i_csp =
+ gst_x264_enc_gst_to_x264_video_format (info->finfo->format,
+ &encoder->x264_nplanes);
+ if (info->fps_d == 0 || info->fps_n == 0) {
+ /* No FPS so must use VFR
+ * This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
+ encoder->x264param.b_vfr_input = TRUE;
+ if (encoder->keyint_max) { /* NB the default is 250 setup by x264 itself */
+ encoder->x264param.i_keyint_max = encoder->keyint_max;
+ }
+ } else {
+ /* FPS available so set it up */
+ encoder->x264param.b_vfr_input = FALSE;
+ encoder->x264param.i_fps_num = info->fps_n;
+ encoder->x264param.i_fps_den = info->fps_d;
+ encoder->x264param.i_keyint_max =
+ encoder->keyint_max ? encoder->keyint_max : (10 * info->fps_n /
+ info->fps_d);
+ }
+ encoder->x264param.i_width = info->width;
+ encoder->x264param.i_height = info->height;
+ if (info->par_d > 0) {
+ encoder->x264param.vui.i_sar_width = info->par_n;
+ encoder->x264param.vui.i_sar_height = info->par_d;
+ }
+
+ if ((((info->height == 576) && ((info->width == 720)
+ || (info->width == 704) || (info->width == 352)))
+ || ((info->height == 288) && (info->width == 352)))
+ && (info->fps_d == 1) && (info->fps_n == 25)) {
+ encoder->x264param.vui.i_vidformat = 1; /* PAL */
+ } else if ((((info->height == 480) && ((info->width == 720)
+ || (info->width == 704) || (info->width == 352)))
+ || ((info->height == 240) && (info->width == 352)))
+ && (info->fps_d == 1001) && ((info->fps_n == 30000)
+ || (info->fps_n == 24000))) {
+ encoder->x264param.vui.i_vidformat = 2; /* NTSC */
+ } else {
+ encoder->x264param.vui.i_vidformat = 5; /* unspecified */
+ }
+
+ if (!encoder->insert_vui)
+ goto skip_vui_parameters;
+
+ encoder->x264param.vui.i_colorprim =
+ gst_video_color_primaries_to_iso (info->colorimetry.primaries);
+
+ encoder->x264param.vui.i_transfer =
+ gst_video_transfer_function_to_iso (info->colorimetry.transfer);
+
+ encoder->x264param.vui.i_colmatrix =
+ gst_video_color_matrix_to_iso (info->colorimetry.matrix);
+
+ if (info->colorimetry.range == GST_VIDEO_COLOR_RANGE_0_255) {
+ encoder->x264param.vui.b_fullrange = 1;
+ } else {
+ encoder->x264param.vui.b_fullrange = 0;
+ }
+
+ switch (info->chroma_site) {
+ case GST_VIDEO_CHROMA_SITE_MPEG2:
+ encoder->x264param.vui.i_chroma_loc = 0;
+ break;
+ case GST_VIDEO_CHROMA_SITE_JPEG:
+ encoder->x264param.vui.i_chroma_loc = 1;
+ break;
+ case GST_VIDEO_CHROMA_SITE_V_COSITED:
+ encoder->x264param.vui.i_chroma_loc = 3;
+ break;
+ case GST_VIDEO_CHROMA_SITE_DV:
+ encoder->x264param.vui.i_chroma_loc = 2;
+ break;
+ default:
+ encoder->x264param.vui.i_chroma_loc = 0;
+ break;
+ }
+
+skip_vui_parameters:
+
+ encoder->x264param.analyse.b_psnr = 0;
+
+ bitrate =
+ gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+ encoder->input_state ? &encoder->input_state->info : NULL);
+
+ /* FIXME 2.0 make configuration more sane and consistent with x264 cmdline:
+ * + split pass property into a pass property (pass1/2/3 enum) and rc-method
+ * + bitrate property should only be used in case of CBR method
+ * + vbv bitrate/buffer should have separate configuration that is then
+ * applied independently of the mode:
+ * + either using properties (new) vbv-maxrate and (renamed) vbv-bufsize
+ * + or dropping vbv-buf-capacity altogether and simply using option-string
+ */
+ switch (encoder->pass) {
+ case GST_X264_ENC_PASS_QUANT:
+ encoder->x264param.rc.i_rc_method = X264_RC_CQP;
+ encoder->x264param.rc.i_qp_constant = encoder->quantizer;
+ break;
+ case GST_X264_ENC_PASS_QUAL:
+ encoder->x264param.rc.i_rc_method = X264_RC_CRF;
+ encoder->x264param.rc.f_rf_constant = encoder->quantizer;
+ encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_buffer_size
+ = encoder->x264param.rc.i_vbv_max_bitrate
+ * encoder->vbv_buf_capacity / 1000;
+ break;
+ case GST_X264_ENC_PASS_CBR:
+ case GST_X264_ENC_PASS_PASS1:
+ case GST_X264_ENC_PASS_PASS2:
+ case GST_X264_ENC_PASS_PASS3:
+ default:
+ encoder->x264param.rc.i_rc_method = X264_RC_ABR;
+ encoder->x264param.rc.i_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_buffer_size =
+ encoder->x264param.rc.i_vbv_max_bitrate
+ * encoder->vbv_buf_capacity / 1000;
+ pass = encoder->pass & 0xF;
+ break;
+ }
+
+ switch (pass) {
+ case 0:
+ encoder->x264param.rc.b_stat_read = 0;
+ encoder->x264param.rc.b_stat_write = 0;
+ break;
+ case 1:
+ encoder->x264param.rc.b_stat_read = 0;
+ encoder->x264param.rc.b_stat_write = 1;
+ encoder->vtable->x264_param_apply_fastfirstpass (&encoder->x264param);
+ encoder->x264param.i_frame_reference = 1;
+ encoder->x264param.analyse.b_transform_8x8 = 0;
+ encoder->x264param.analyse.inter = 0;
+ encoder->x264param.analyse.i_me_method = X264_ME_DIA;
+ encoder->x264param.analyse.i_subpel_refine =
+ MIN (2, encoder->x264param.analyse.i_subpel_refine);
+ encoder->x264param.analyse.i_trellis = 0;
+ encoder->x264param.analyse.b_fast_pskip = 1;
+ break;
+ case 2:
+ encoder->x264param.rc.b_stat_read = 1;
+ encoder->x264param.rc.b_stat_write = 0;
+ break;
+ case 3:
+ encoder->x264param.rc.b_stat_read = 1;
+ encoder->x264param.rc.b_stat_write = 1;
+ break;
+ }
+
+ if (encoder->peer_profile) {
+ if (encoder->vtable->x264_param_apply_profile (&encoder->x264param,
+ encoder->peer_profile))
+ GST_WARNING_OBJECT (encoder, "Bad downstream profile name: %s",
+ encoder->peer_profile);
+ }
+
+ /* If using an intra profile, all frames are intra frames */
+ if (encoder->peer_intra_profile)
+ encoder->x264param.i_keyint_max = encoder->x264param.i_keyint_min = 1;
+
+ /* Enforce level limits if they were in the caps */
+ if (encoder->peer_level_idc != -1) {
+ gint i;
+ const x264_level_t *peer_level = NULL;
+
+ for (i = 0; (*encoder->vtable->x264_levels)[i].level_idc; i++) {
+ if (encoder->peer_level_idc ==
+ (*encoder->vtable->x264_levels)[i].level_idc) {
+ int mb_width = (info->width + 15) / 16;
+ int mb_height = (info->height + 15) / 16;
+ int mbs = mb_width * mb_height;
+
+ if ((*encoder->vtable->x264_levels)[i].frame_size < mbs ||
+ (*encoder->vtable->x264_levels)[i].frame_size * 8 <
+ mb_width * mb_width
+ || (*encoder->vtable->x264_levels)[i].frame_size * 8 <
+ mb_height * mb_height) {
+ GST_WARNING_OBJECT (encoder,
+ "Frame size larger than level %d allows",
+ encoder->peer_level_idc);
+ break;
+ }
+
+ if (info->fps_d && (*encoder->vtable->x264_levels)[i].mbps
+ < (gint64) mbs * info->fps_n / info->fps_d) {
+ GST_WARNING_OBJECT (encoder,
+ "Macroblock rate higher than level %d allows",
+ encoder->peer_level_idc);
+ break;
+ }
+
+ peer_level = &(*encoder->vtable->x264_levels)[i];
+ break;
+ }
+ }
+
+ if (!peer_level)
+ goto unlock_and_return;
+
+ encoder->x264param.i_level_idc = peer_level->level_idc;
+
+ encoder->x264param.rc.i_bitrate = MIN (encoder->x264param.rc.i_bitrate,
+ peer_level->bitrate);
+ encoder->x264param.rc.i_vbv_max_bitrate =
+ MIN (encoder->x264param.rc.i_vbv_max_bitrate, peer_level->bitrate);
+ encoder->x264param.rc.i_vbv_buffer_size =
+ MIN (encoder->x264param.rc.i_vbv_buffer_size, peer_level->cpb);
+ encoder->x264param.analyse.i_mv_range =
+ MIN (encoder->x264param.analyse.i_mv_range, peer_level->mv_range);
+
+ if (peer_level->frame_only) {
+ encoder->x264param.b_interlaced = FALSE;
+ encoder->x264param.b_fake_interlaced = FALSE;
+ }
+ }
+
+ if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
+ encoder->x264param.b_interlaced = TRUE;
+ if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+ encoder->x264param.b_pic_struct = TRUE;
+ }
+ if (GST_VIDEO_INFO_FIELD_ORDER (info) ==
+ GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
+ encoder->x264param.b_tff = TRUE;
+ } else {
+ encoder->x264param.b_tff = FALSE;
+ }
+ } else {
+ encoder->x264param.b_interlaced = FALSE;
+ }
+
+ /* Set 3D frame packing */
+ if (encoder->frame_packing != GST_VIDEO_MULTIVIEW_MODE_NONE)
+ encoder->x264param.i_frame_packing = encoder->frame_packing;
+ else
+ encoder->x264param.i_frame_packing =
+ gst_x264_enc_mview_mode_to_frame_packing (GST_VIDEO_INFO_MULTIVIEW_MODE
+ (info));
+
+ GST_DEBUG_OBJECT (encoder, "Stereo frame packing = %d",
+ encoder->x264param.i_frame_packing);
+
+ encoder->reconfig = FALSE;
+
+ GST_OBJECT_UNLOCK (encoder);
+
+ encoder->x264enc = encoder->vtable->x264_encoder_open (&encoder->x264param);
+ if (!encoder->x264enc) {
+ GST_ELEMENT_ERROR (encoder, STREAM, ENCODE,
+ ("Can not initialize x264 encoder."), (NULL));
+ return FALSE;
+ }
+
+ return TRUE;
+
+unlock_and_return:
+ GST_OBJECT_UNLOCK (encoder);
+ return FALSE;
+}
+
+/* gst_x264_enc_close_encoder
+ * @encoder: Encoder which should close.
+ *
+ * Close x264 encoder.
+ */
+static void
+gst_x264_enc_close_encoder (GstX264Enc * encoder)
+{
+ if (encoder->x264enc != NULL) {
+ encoder->vtable->x264_encoder_close (encoder->x264enc);
+ encoder->x264enc = NULL;
+ }
+ encoder->vtable = NULL;
+}
+
+static gboolean
+gst_x264_enc_set_profile_and_level (GstX264Enc * encoder, GstCaps * caps)
+{
+ x264_nal_t *nal;
+ int i_nal;
+ int header_return;
+ gint sps_ni = 0;
+ guint8 *sps;
+ GstStructure *s;
+ const gchar *profile;
+ GstCaps *allowed_caps;
+ GstStructure *s2;
+ const gchar *allowed_profile;
+
+ header_return =
+ encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
+ if (header_return < 0) {
+ GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
+ ("x264_encoder_headers return code=%d", header_return));
+ return FALSE;
+ }
+
+ /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
+ if (i_nal == 3 && nal[sps_ni].i_type != 7)
+ sps_ni = 1;
+
+ sps = nal[sps_ni].p_payload + 4;
+ /* skip NAL unit type */
+ sps++;
+
+ gst_codec_utils_h264_caps_set_level_and_profile (caps, sps, 3);
+
+ /* Constrained baseline is a strict subset of baseline. If downstream
+ * wanted baseline and we produced constrained baseline, we can just
+ * set the profile to baseline in the caps to make negotiation happy.
+ * Same goes for baseline as subset of main profile and main as a subset
+ * of high profile.
+ */
+ s = gst_caps_get_structure (caps, 0);
+ profile = gst_structure_get_string (s, "profile");
+
+ allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
+
+ if (allowed_caps == NULL)
+ goto no_peer;
+
+ if (!gst_caps_can_intersect (allowed_caps, caps)) {
+ allowed_caps = gst_caps_make_writable (allowed_caps);
+ allowed_caps = gst_caps_truncate (allowed_caps);
+ s2 = gst_caps_get_structure (allowed_caps, 0);
+ gst_structure_fixate_field_string (s2, "profile", profile);
+ allowed_profile = gst_structure_get_string (s2, "profile");
+ if (!strcmp (allowed_profile, "high")) {
+ if (!strcmp (profile, "constrained-baseline")
+ || !strcmp (profile, "baseline") || !strcmp (profile, "main")) {
+ gst_structure_set (s, "profile", G_TYPE_STRING, "high", NULL);
+ GST_INFO_OBJECT (encoder, "downstream requested high profile, but "
+ "encoder will now output %s profile (which is a subset), due "
+ "to how it's been configured", profile);
+ }
+ } else if (!strcmp (allowed_profile, "main")) {
+ if (!strcmp (profile, "constrained-baseline")
+ || !strcmp (profile, "baseline")) {
+ gst_structure_set (s, "profile", G_TYPE_STRING, "main", NULL);
+ GST_INFO_OBJECT (encoder, "downstream requested main profile, but "
+ "encoder will now output %s profile (which is a subset), due "
+ "to how it's been configured", profile);
+ }
+ } else if (!strcmp (allowed_profile, "baseline")) {
+ if (!strcmp (profile, "constrained-baseline"))
+ gst_structure_set (s, "profile", G_TYPE_STRING, "baseline", NULL);
+ }
+ }
+ gst_caps_unref (allowed_caps);
+
+no_peer:
+
+ return TRUE;
+}
+
+/*
+ * Returns: Buffer with the stream headers.
+ */
+static GstBuffer *
+gst_x264_enc_header_buf (GstX264Enc * encoder)
+{
+ GstBuffer *buf;
+ x264_nal_t *nal;
+ int i_nal;
+ int header_return;
+ int i_size;
+ int nal_size;
+ guint8 *buffer, *sps;
+ gulong buffer_size;
+ gint sei_ni = 2, sps_ni = 0, pps_ni = 1;
+
+ if (G_UNLIKELY (encoder->x264enc == NULL))
+ return NULL;
+
+ /* Create avcC header. */
+
+ header_return =
+ encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
+ if (header_return < 0) {
+ GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
+ ("x264_encoder_headers return code=%d", header_return));
+ return NULL;
+ }
+
+ /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
+ if (i_nal == 3 && nal[sps_ni].i_type != 7) {
+ sei_ni = 0;
+ sps_ni = 1;
+ pps_ni = 2;
+ }
+
+ /* x264 is expected to return an SEI (some identification info),
+ * and SPS and PPS */
+ if (i_nal != 3 || nal[sps_ni].i_type != 7 || nal[pps_ni].i_type != 8 ||
+ nal[sps_ni].i_payload < 4 || nal[pps_ni].i_payload < 1) {
+ GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, (NULL),
+ ("Unexpected x264 header."));
+ return NULL;
+ }
+
+ GST_MEMDUMP ("SEI", nal[sei_ni].p_payload, nal[sei_ni].i_payload);
+ GST_MEMDUMP ("SPS", nal[sps_ni].p_payload, nal[sps_ni].i_payload);
+ GST_MEMDUMP ("PPS", nal[pps_ni].p_payload, nal[pps_ni].i_payload);
+
+ /* nal payloads with emulation_prevention_three_byte, and some header data */
+ buffer_size = (nal[sps_ni].i_payload + nal[pps_ni].i_payload) * 4 + 100;
+ buffer = g_malloc (buffer_size);
+
+ sps = nal[sps_ni].p_payload + 4;
+ /* skip NAL unit type */
+ sps++;
+
+ buffer[0] = 1; /* AVC Decoder Configuration Record ver. 1 */
+ buffer[1] = sps[0]; /* profile_idc */
+ buffer[2] = sps[1]; /* profile_compability */
+ buffer[3] = sps[2]; /* level_idc */
+ buffer[4] = 0xfc | (4 - 1); /* nal_length_size_minus1 */
+
+ i_size = 5;
+
+ buffer[i_size++] = 0xe0 | 1; /* number of SPSs */
+
+ nal_size = nal[sps_ni].i_payload - 4;
+ memcpy (buffer + i_size + 2, nal[sps_ni].p_payload + 4, nal_size);
+
+ GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
+ i_size += nal_size + 2;
+
+ buffer[i_size++] = 1; /* number of PPSs */
+
+ nal_size = nal[pps_ni].i_payload - 4;
+ memcpy (buffer + i_size + 2, nal[pps_ni].p_payload + 4, nal_size);
+
+ GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
+ i_size += nal_size + 2;
+
+ buf = gst_buffer_new_and_alloc (i_size);
+ gst_buffer_fill (buf, 0, buffer, i_size);
+
+ GST_MEMDUMP ("header", buffer, i_size);
+ g_free (buffer);
+
+ return buf;
+}
+
+/* gst_x264_enc_set_src_caps
+ * Returns: TRUE on success.
+ */
+static gboolean
+gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstCaps * caps)
+{
+ GstCaps *outcaps;
+ GstStructure *structure;
+ GstVideoCodecState *state;
+ GstTagList *tags;
+ guint bitrate =
+ gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+ encoder->input_state ? &encoder->input_state->info : NULL);
+
+ outcaps = gst_caps_new_empty_simple ("video/x-h264");
+ structure = gst_caps_get_structure (outcaps, 0);
+
+ if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY) {
+ if (encoder->byte_stream) {
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+ } else {
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
+ }
+ }
+ if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_AVC) {
+ GstBuffer *buf = gst_x264_enc_header_buf (encoder);
+ if (buf != NULL) {
+ gst_caps_set_simple (outcaps, "codec_data", GST_TYPE_BUFFER, buf, NULL);
+ gst_buffer_unref (buf);
+ }
+ gst_structure_set (structure, "stream-format", G_TYPE_STRING, "avc", NULL);
+ } else {
+ gst_structure_set (structure, "stream-format", G_TYPE_STRING, "byte-stream",
+ NULL);
+ }
+ gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL);
+
+ if (!gst_x264_enc_set_profile_and_level (encoder, outcaps)) {
+ gst_caps_unref (outcaps);
+ return FALSE;
+ }
+
+ state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder),
+ outcaps, encoder->input_state);
+ GST_DEBUG_OBJECT (encoder, "output caps: %" GST_PTR_FORMAT, state->caps);
+
+ /* If set, local frame packing setting overrides any upstream config */
+ switch (encoder->frame_packing) {
+ case 0:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD;
+ break;
+ case 1:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED;
+ break;
+ case 2:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED;
+ break;
+ case 3:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+ break;
+ case 4:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+ break;
+ case 5:
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+ GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME;
+ break;
+ default:
+ break;
+ }
+
+ gst_video_codec_state_unref (state);
+
+ tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
+ GST_TAG_ENCODER_VERSION, X264_BUILD,
+ GST_TAG_MAXIMUM_BITRATE, bitrate * 1024,
+ GST_TAG_NOMINAL_BITRATE, bitrate * 1024, NULL);
+ gst_video_encoder_merge_tags (GST_VIDEO_ENCODER (encoder), tags,
+ GST_TAG_MERGE_REPLACE);
+ gst_tag_list_unref (tags);
+
+ return TRUE;
+}
+
+static void
+gst_x264_enc_set_latency (GstX264Enc * encoder)
+{
+ GstVideoInfo *info = &encoder->input_state->info;
+ gint max_delayed_frames;
+ GstClockTime latency;
+
+ max_delayed_frames =
+ encoder->vtable->x264_encoder_maximum_delayed_frames (encoder->x264enc);
+
+ if (info->fps_n) {
+ latency = gst_util_uint64_scale_ceil (GST_SECOND * info->fps_d,
+ max_delayed_frames, info->fps_n);
+ } else {
+ /* FIXME: Assume 25fps. This is better than reporting no latency at
+ * all and then later failing in live pipelines
+ */
+ latency = gst_util_uint64_scale_ceil (GST_SECOND * 1,
+ max_delayed_frames, 25);
+ }
+
+ GST_INFO_OBJECT (encoder,
+ "Updating latency to %" GST_TIME_FORMAT " (%d frames)",
+ GST_TIME_ARGS (latency), max_delayed_frames);
+
+ gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), latency, latency);
+}
+
+static gboolean
+gst_x264_enc_set_format (GstVideoEncoder * video_enc,
+ GstVideoCodecState * state)
+{
+ GstX264Enc *encoder = GST_X264_ENC (video_enc);
+ GstVideoInfo *info = &state->info;
+ GstCaps *template_caps;
+ GstCaps *allowed_caps = NULL;
+
+ /* If the encoder is initialized, do not reinitialize it again if not
+ * necessary */
+ if (encoder->x264enc) {
+ GstVideoInfo *old = &encoder->input_state->info;
+
+ if (info->finfo->format == old->finfo->format
+ && info->width == old->width && info->height == old->height
+ && info->fps_n == old->fps_n && info->fps_d == old->fps_d
+ && info->par_n == old->par_n && info->par_d == old->par_d) {
+ gst_video_codec_state_unref (encoder->input_state);
+ encoder->input_state = gst_video_codec_state_ref (state);
+ return TRUE;
+ }
+
+ /* clear out pending frames */
+ gst_x264_enc_flush_frames (encoder, TRUE);
+
+ encoder->sps_id++;
+ }
+
+ if (encoder->input_state)
+ gst_video_codec_state_unref (encoder->input_state);
+ encoder->input_state = gst_video_codec_state_ref (state);
+
+ encoder->peer_profile = NULL;
+ encoder->peer_intra_profile = FALSE;
+ encoder->peer_level_idc = -1;
+
+ template_caps = gst_static_pad_template_get_caps (&src_factory);
+ allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
+
+ /* Output byte-stream if downstream has ANY caps, it's what people expect,
+ * and it makes more sense too */
+ if (allowed_caps == template_caps) {
+ GST_INFO_OBJECT (encoder,
+ "downstream has ANY caps, outputting byte-stream");
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+ g_string_append_printf (encoder->option_string, ":annexb=1");
+ gst_caps_unref (allowed_caps);
+ } else if (allowed_caps) {
+ GstStructure *s;
+ const gchar *profile;
+ const gchar *level;
+ const gchar *stream_format;
+
+ if (gst_caps_is_empty (allowed_caps)) {
+ gst_caps_unref (allowed_caps);
+ gst_caps_unref (template_caps);
+ return FALSE;
+ }
+
+ allowed_caps = gst_caps_make_writable (allowed_caps);
+ allowed_caps = gst_caps_fixate (allowed_caps);
+ s = gst_caps_get_structure (allowed_caps, 0);
+
+ profile = gst_structure_get_string (s, "profile");
+ if (profile) {
+ /* FIXME - if libx264 ever adds support for FMO, ASO or redundant slices
+ * make sure constrained profile has a separate case which disables
+ * those */
+ if (g_str_has_suffix (profile, "-intra")) {
+ encoder->peer_intra_profile = TRUE;
+ }
+ if (!strcmp (profile, "constrained-baseline") ||
+ !strcmp (profile, "baseline")) {
+ encoder->peer_profile = "baseline";
+ } else if (g_str_has_prefix (profile, "high-10")) {
+ encoder->peer_profile = "high10";
+ } else if (g_str_has_prefix (profile, "high-4:2:2")) {
+ encoder->peer_profile = "high422";
+ } else if (g_str_has_prefix (profile, "high-4:4:4")) {
+ encoder->peer_profile = "high444";
+ } else if (g_str_has_prefix (profile, "high")) {
+ encoder->peer_profile = "high";
+ } else if (!strcmp (profile, "main")) {
+ encoder->peer_profile = "main";
+ } else {
+ g_assert_not_reached ();
+ }
+ }
+
+ level = gst_structure_get_string (s, "level");
+ if (level) {
+ encoder->peer_level_idc = gst_codec_utils_h264_get_level_idc (level);
+ }
+
+ stream_format = gst_structure_get_string (s, "stream-format");
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
+ if (stream_format) {
+ if (!strcmp (stream_format, "avc")) {
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
+ g_string_append_printf (encoder->option_string, ":annexb=0");
+ } else if (!strcmp (stream_format, "byte-stream")) {
+ encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+ g_string_append_printf (encoder->option_string, ":annexb=1");
+ } else {
+ /* means we have both in caps and _FROM_PROPERTY should be the option */
+ }
+ }
+
+ gst_caps_unref (allowed_caps);
+ }
+
+ gst_caps_unref (template_caps);
+
+ if (!gst_x264_enc_init_encoder (encoder))
+ return FALSE;
+
+ if (!gst_x264_enc_set_src_caps (encoder, state->caps)) {
+ gst_x264_enc_close_encoder (encoder);
+ return FALSE;
+ }
+
+ gst_x264_enc_set_latency (encoder);
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_x264_enc_finish (GstVideoEncoder * encoder)
+{
+ gst_x264_enc_flush_frames (GST_X264_ENC (encoder), TRUE);
+ return GST_FLOW_OK;
+}
+
+static gboolean
+gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
+{
+ GstX264Enc *self = GST_X264_ENC (encoder);
+ GstVideoInfo *info;
+ guint num_buffers;
+
+ gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
+
+ if (!self->input_state)
+ return FALSE;
+
+ if (self->vtable == NULL)
+ return FALSE;
+
+ info = &self->input_state->info;
+ num_buffers =
+ self->vtable->x264_encoder_maximum_delayed_frames (self->x264enc) + 1;
+
+ gst_query_add_allocation_pool (query, NULL, info->size, num_buffers, 0);
+
+ return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
+ query);
+}
+
+static void
+gst_x264_enc_add_cc (GstBuffer * buffer, x264_picture_t * pic_in)
+{
+ GstVideoCaptionMeta *cc_meta;
+ gpointer iter = NULL;
+
+ while ((cc_meta =
+ (GstVideoCaptionMeta *) gst_buffer_iterate_meta_filtered (buffer,
+ &iter, GST_VIDEO_CAPTION_META_API_TYPE))) {
+ guint i = pic_in->extra_sei.num_payloads;
+
+ if (cc_meta->caption_type != GST_VIDEO_CAPTION_TYPE_CEA708_RAW)
+ continue;
+
+ pic_in->extra_sei.num_payloads += 1;
+
+ if (!pic_in->extra_sei.payloads)
+ pic_in->extra_sei.payloads = g_new0 (x264_sei_payload_t, 1);
+ else
+ pic_in->extra_sei.payloads =
+ g_renew (x264_sei_payload_t, pic_in->extra_sei.payloads,
+ pic_in->extra_sei.num_payloads);
+
+ pic_in->extra_sei.sei_free = g_free;
+
+ pic_in->extra_sei.payloads[i].payload_size = cc_meta->size + 11;
+ pic_in->extra_sei.payloads[i].payload =
+ g_malloc0 (pic_in->extra_sei.payloads[i].payload_size);
+ pic_in->extra_sei.payloads[i].payload_type = 4; /* Registered user data */
+ memcpy (pic_in->extra_sei.payloads[i].payload + 10, cc_meta->data,
+ cc_meta->size);
+ pic_in->extra_sei.payloads[i].payload[0] = 181; /* 8-bits itu_t_t35_country_code */
+ pic_in->extra_sei.payloads[i].payload[1] = 0; /* 16-bits itu_t_t35_provider_code */
+ pic_in->extra_sei.payloads[i].payload[2] = 49;
+ pic_in->extra_sei.payloads[i].payload[3] = 'G'; /* 32-bits ATSC_user_identifier */
+ pic_in->extra_sei.payloads[i].payload[4] = 'A';
+ pic_in->extra_sei.payloads[i].payload[5] = '9';
+ pic_in->extra_sei.payloads[i].payload[6] = '4';
+ pic_in->extra_sei.payloads[i].payload[7] = 3; /* 8-bits ATSC1_data_user_data_type_code */
+ /* 8-bits:
+ * 1 bit process_em_data_flag (0)
+ * 1 bit process_cc_data_flag (1)
+ * 1 bit additional_data_flag (0)
+ * 5-bits cc_count
+ */
+ pic_in->extra_sei.payloads[i].payload[8] =
+ ((cc_meta->size / 3) & 0x1f) | 0x40;
+ pic_in->extra_sei.payloads[i].payload[9] = 255; /* 8 bits em_data, unused */
+ pic_in->extra_sei.payloads[i].payload[cc_meta->size + 10] = 255; /* 8 marker bits */
+ }
+}
+
+/* chain function
+ * this function does the actual processing
+ */
+static GstFlowReturn
+gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
+ GstVideoCodecFrame * frame)
+{
+ GstX264Enc *encoder = GST_X264_ENC (video_enc);
+ GstVideoInfo *info = &encoder->input_state->info;
+ GstFlowReturn ret;
+ x264_picture_t pic_in;
+ gint i_nal, i;
+ FrameData *fdata;
+ gint nplanes = encoder->x264_nplanes;
+
+ if (G_UNLIKELY (encoder->x264enc == NULL))
+ goto not_inited;
+
+ /* create x264_picture_t from the buffer */
+ /* mostly taken from mplayer (file ve_x264.c) */
+
+ /* set up input picture */
+ memset (&pic_in, 0, sizeof (pic_in));
+
+ fdata = gst_x264_enc_queue_frame (encoder, frame, info);
+ if (!fdata)
+ goto invalid_frame;
+
+ pic_in.img.i_csp = encoder->x264param.i_csp;
+ pic_in.img.i_plane = nplanes;
+ for (i = 0; i < nplanes; i++) {
+ pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
+ pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&fdata->vframe, i);
+ }
+
+ pic_in.i_type = X264_TYPE_AUTO;
+ pic_in.i_pts = frame->pts;
+ pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number);
+
+ if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_INTERLACED) == 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_PROGRESSIVE;
+ } else if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_RFF) != 0) {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM_TOP;
+ } else {
+ pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP_BOTTOM;
+ }
+ } else {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM;
+ } else {
+ pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP;
+ }
+ }
+ }
+
+ gst_x264_enc_add_cc (frame->input_buffer, &pic_in);
+
+ ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE);
+
+ /* input buffer is released later on */
+ return ret;
+
+/* ERRORS */
+not_inited:
+ {
+ GST_WARNING_OBJECT (encoder, "Got buffer before set_caps was called");
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+invalid_frame:
+ {
+ GST_ERROR_OBJECT (encoder, "Failed to map frame");
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstFlowReturn
+gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
+ GstVideoCodecFrame * input_frame, int *i_nal, gboolean send)
+{
+ GstVideoCodecFrame *frame = NULL;
+ GstBuffer *out_buf = NULL;
+ x264_picture_t pic_out;
+ x264_nal_t *nal;
+ int i_size;
+ int encoder_return;
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint8 *data;
+ gboolean update_latency = FALSE;
+
+ if (G_UNLIKELY (encoder->x264enc == NULL)) {
+ if (input_frame)
+ gst_video_codec_frame_unref (input_frame);
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+
+ GST_OBJECT_LOCK (encoder);
+ if (encoder->reconfig) {
+ encoder->reconfig = FALSE;
+ if (encoder->vtable->x264_encoder_reconfig (encoder->x264enc,
+ &encoder->x264param) < 0)
+ GST_WARNING_OBJECT (encoder, "Could not reconfigure");
+ update_latency = TRUE;
+ }
+
+ if (pic_in && input_frame) {
+ if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (input_frame)) {
+ GST_INFO_OBJECT (encoder, "Forcing key frame");
+ if (encoder->intra_refresh)
+ encoder->vtable->x264_encoder_intra_refresh (encoder->x264enc);
+ else
+ pic_in->i_type = X264_TYPE_IDR;
+ }
+ }
+ GST_OBJECT_UNLOCK (encoder);
+
+ if (G_UNLIKELY (update_latency))
+ gst_x264_enc_set_latency (encoder);
+
+ encoder_return = encoder->vtable->x264_encoder_encode (encoder->x264enc,
+ &nal, i_nal, pic_in, &pic_out);
+
+ if (encoder_return < 0) {
+ GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."),
+ ("x264_encoder_encode return code=%d", encoder_return));
+ ret = GST_FLOW_ERROR;
+ /* Make sure we finish this frame */
+ frame = input_frame;
+ goto out;
+ }
+
+ /* Input frame is now queued */
+ if (input_frame)
+ gst_video_codec_frame_unref (input_frame);
+
+ if (!*i_nal) {
+ ret = GST_FLOW_OK;
+ goto out;
+ }
+
+ i_size = encoder_return;
+ data = nal[0].p_payload;
+
+ frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER (encoder),
+ GPOINTER_TO_INT (pic_out.opaque));
+ g_assert (frame || !send);
+
+ if (!send || !frame) {
+ ret = GST_FLOW_OK;
+ goto out;
+ }
+
+ out_buf = gst_buffer_new_allocate (NULL, i_size, NULL);
+ gst_buffer_fill (out_buf, 0, data, i_size);
+ frame->output_buffer = out_buf;
+
+ GST_LOG_OBJECT (encoder,
+ "output: dts %" G_GINT64_FORMAT " pts %" G_GINT64_FORMAT,
+ (gint64) pic_out.i_dts, (gint64) pic_out.i_pts);
+
+ /* we want to know if x264 is messing around with this */
+ g_assert (frame->pts == pic_out.i_pts);
+
+ frame->dts = pic_out.i_dts;
+ frame->pts = pic_out.i_pts;
+
+ if (pic_out.b_keyframe) {
+ GST_DEBUG_OBJECT (encoder, "Output keyframe");
+ GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
+ }
+
+out:
+ if (frame) {
+ gst_x264_enc_dequeue_frame (encoder, frame);
+ ret = gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (encoder), frame);
+ }
+
+ return ret;
+}
+
+static void
+gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send)
+{
+ GstFlowReturn flow_ret;
+ gint i_nal;
+
+ /* first send the remaining frames */
+ if (encoder->x264enc)
+ do {
+ flow_ret = gst_x264_enc_encode_frame (encoder, NULL, NULL, &i_nal, send);
+ } while (flow_ret == GST_FLOW_OK
+ && encoder->vtable->x264_encoder_delayed_frames (encoder->x264enc) > 0);
+}
+
+static void
+gst_x264_enc_reconfig (GstX264Enc * encoder)
+{
+ guint bitrate;
+
+ if (!encoder->vtable)
+ return;
+
+ bitrate =
+ gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+ encoder->input_state ? &encoder->input_state->info : NULL);
+ switch (encoder->pass) {
+ case GST_X264_ENC_PASS_QUAL:
+ encoder->x264param.rc.f_rf_constant = encoder->quantizer;
+ encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_buffer_size
+ = encoder->x264param.rc.i_vbv_max_bitrate
+ * encoder->vbv_buf_capacity / 1000;
+ break;
+ case GST_X264_ENC_PASS_CBR:
+ case GST_X264_ENC_PASS_PASS1:
+ case GST_X264_ENC_PASS_PASS2:
+ case GST_X264_ENC_PASS_PASS3:
+ default:
+ encoder->x264param.rc.i_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+ encoder->x264param.rc.i_vbv_buffer_size
+ = encoder->x264param.rc.i_vbv_max_bitrate
+ * encoder->vbv_buf_capacity / 1000;
+ break;
+ }
+
+ encoder->reconfig = TRUE;
+}
+
+static void
+gst_x264_enc_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstX264Enc *encoder;
+ GstState state;
+
+ const gchar *partitions = NULL;
+
+ encoder = GST_X264_ENC (object);
+
+ GST_OBJECT_LOCK (encoder);
+ /* state at least matters for sps, bytestream, pass,
+ * and so by extension ... */
+
+ state = GST_STATE (encoder);
+ if ((state != GST_STATE_READY && state != GST_STATE_NULL) &&
+ !(pspec->flags & GST_PARAM_MUTABLE_PLAYING))
+ goto wrong_state;
+
+ switch (prop_id) {
+ case ARG_PASS:
+ encoder->pass = g_value_get_enum (value);
+ break;
+ case ARG_QUANTIZER:
+ encoder->quantizer = g_value_get_uint (value);
+ gst_x264_enc_reconfig (encoder);
+ break;
+ case ARG_BITRATE:
+ gst_encoder_bitrate_profile_manager_set_bitrate (encoder->bitrate_manager,
+ g_value_get_uint (value));
+ gst_x264_enc_reconfig (encoder);
+ break;
+ case ARG_VBV_BUF_CAPACITY:
+ encoder->vbv_buf_capacity = g_value_get_uint (value);
+ gst_x264_enc_reconfig (encoder);
+ break;
+ case ARG_SPEED_PRESET:
+ encoder->speed_preset = g_value_get_enum (value);
+ break;
+ case ARG_PSY_TUNE:
+ encoder->psy_tune = g_value_get_enum (value);
+ break;
+ case ARG_TUNE:
+ encoder->tune = g_value_get_flags (value);
+ break;
+ case ARG_OPTION_STRING:
+ g_string_assign (encoder->option_string_prop, g_value_get_string (value));
+ break;
+ case ARG_THREADS:
+ encoder->threads = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":threads=%d",
+ encoder->threads);
+ break;
+ case ARG_SLICED_THREADS:
+ encoder->sliced_threads = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":sliced-threads=%d",
+ encoder->sliced_threads);
+ break;
+ case ARG_SYNC_LOOKAHEAD:
+ encoder->sync_lookahead = g_value_get_int (value);
+ g_string_append_printf (encoder->option_string, ":sync-lookahead=%d",
+ encoder->sync_lookahead);
+ break;
+ case ARG_MULTIPASS_CACHE_FILE:
+ g_free (encoder->mp_cache_file);
+ encoder->mp_cache_file = g_value_dup_string (value);
+ g_string_append_printf (encoder->option_string, ":stats=%s",
+ encoder->mp_cache_file);
+ break;
+ case ARG_BYTE_STREAM:
+ encoder->byte_stream = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":annexb=%d",
+ encoder->byte_stream);
+ break;
+ case ARG_INTRA_REFRESH:
+ encoder->intra_refresh = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":intra-refresh=%d",
+ encoder->intra_refresh);
+ break;
+ case ARG_ME:
+ encoder->me = g_value_get_enum (value);
+ g_string_append_printf (encoder->option_string, ":me=%s",
+ x264_motion_est_names[encoder->me]);
+ break;
+ case ARG_SUBME:
+ encoder->subme = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":subme=%d",
+ encoder->subme);
+ break;
+ case ARG_ANALYSE:
+ encoder->analyse = g_value_get_flags (value);
+ partitions = gst_x264_enc_build_partitions (encoder->analyse);
+ if (partitions) {
+ g_string_append_printf (encoder->option_string, ":partitions=%s",
+ partitions);
+ g_free ((gpointer) partitions);
+ }
+ break;
+ case ARG_DCT8x8:
+ encoder->dct8x8 = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":8x8dct=%d",
+ encoder->dct8x8);
+ break;
+ case ARG_REF:
+ encoder->ref = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":ref=%d", encoder->ref);
+ break;
+ case ARG_BFRAMES:
+ encoder->bframes = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":bframes=%d",
+ encoder->bframes);
+ break;
+ case ARG_B_ADAPT:
+ encoder->b_adapt = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":b-adapt=%d",
+ encoder->b_adapt);
+ break;
+ case ARG_B_PYRAMID:
+ encoder->b_pyramid = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":b-pyramid=%s",
+ x264_b_pyramid_names[encoder->b_pyramid]);
+ break;
+ case ARG_WEIGHTB:
+ encoder->weightb = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":weightb=%d",
+ encoder->weightb);
+ break;
+ case ARG_SPS_ID:
+ encoder->sps_id = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":sps-id=%d",
+ encoder->sps_id);
+ break;
+ case ARG_AU_NALU:
+ encoder->au_nalu = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":aud=%d",
+ encoder->au_nalu);
+ break;
+ case ARG_TRELLIS:
+ encoder->trellis = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":trellis=%d",
+ encoder->trellis);
+ break;
+ case ARG_KEYINT_MAX:
+ encoder->keyint_max = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":keyint=%d",
+ encoder->keyint_max);
+ break;
+ case ARG_CABAC:
+ encoder->cabac = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":cabac=%d",
+ encoder->cabac);
+ break;
+ case ARG_QP_MIN:
+ encoder->qp_min = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":qpmin=%d",
+ encoder->qp_min);
+ break;
+ case ARG_QP_MAX:
+ encoder->qp_max = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":qpmax=%d",
+ encoder->qp_max);
+ break;
+ case ARG_QP_STEP:
+ encoder->qp_step = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":qpstep=%d",
+ encoder->qp_step);
+ break;
+ case ARG_IP_FACTOR:
+ encoder->ip_factor = g_value_get_float (value);
+ g_string_append_printf (encoder->option_string, ":ip-factor=%f",
+ encoder->ip_factor);
+ break;
+ case ARG_PB_FACTOR:
+ encoder->pb_factor = g_value_get_float (value);
+ g_string_append_printf (encoder->option_string, ":pb-factor=%f",
+ encoder->pb_factor);
+ break;
+ case ARG_RC_MB_TREE:
+ encoder->mb_tree = g_value_get_boolean (value);
+ g_string_append_printf (encoder->option_string, ":mbtree=%d",
+ encoder->mb_tree);
+ break;
+ case ARG_RC_LOOKAHEAD:
+ encoder->rc_lookahead = g_value_get_int (value);
+ g_string_append_printf (encoder->option_string, ":rc-lookahead=%d",
+ encoder->rc_lookahead);
+ break;
+ case ARG_NR:
+ encoder->noise_reduction = g_value_get_uint (value);
+ g_string_append_printf (encoder->option_string, ":nr=%d",
+ encoder->noise_reduction);
+ break;
+ case ARG_INTERLACED:
+ encoder->interlaced = g_value_get_boolean (value);
+ break;
+ case ARG_FRAME_PACKING:
+ encoder->frame_packing = g_value_get_enum (value);
+ break;
+ case ARG_INSERT_VUI:
+ encoder->insert_vui = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ GST_OBJECT_UNLOCK (encoder);
+ return;
+
+ /* ERROR */
+wrong_state:
+ {
+ GST_WARNING_OBJECT (encoder, "setting property in wrong state");
+ GST_OBJECT_UNLOCK (encoder);
+ }
+}
+
+static void
+gst_x264_enc_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstX264Enc *encoder;
+
+ encoder = GST_X264_ENC (object);
+
+ GST_OBJECT_LOCK (encoder);
+ switch (prop_id) {
+ case ARG_THREADS:
+ g_value_set_uint (value, encoder->threads);
+ break;
+ case ARG_SLICED_THREADS:
+ g_value_set_boolean (value, encoder->sliced_threads);
+ break;
+ case ARG_SYNC_LOOKAHEAD:
+ g_value_set_int (value, encoder->sync_lookahead);
+ break;
+ case ARG_PASS:
+ g_value_set_enum (value, encoder->pass);
+ break;
+ case ARG_QUANTIZER:
+ g_value_set_uint (value, encoder->quantizer);
+ break;
+ case ARG_MULTIPASS_CACHE_FILE:
+ g_value_set_string (value, encoder->mp_cache_file);
+ break;
+ case ARG_BYTE_STREAM:
+ g_value_set_boolean (value, encoder->byte_stream);
+ break;
+ case ARG_BITRATE:
+ g_value_set_uint (value,
+ gst_encoder_bitrate_profile_manager_get_bitrate
+ (encoder->bitrate_manager, NULL));
+ break;
+ case ARG_INTRA_REFRESH:
+ g_value_set_boolean (value, encoder->intra_refresh);
+ break;
+ case ARG_VBV_BUF_CAPACITY:
+ g_value_set_uint (value, encoder->vbv_buf_capacity);
+ break;
+ case ARG_ME:
+ g_value_set_enum (value, encoder->me);
+ break;
+ case ARG_SUBME:
+ g_value_set_uint (value, encoder->subme);
+ break;
+ case ARG_ANALYSE:
+ g_value_set_flags (value, encoder->analyse);
+ break;
+ case ARG_DCT8x8:
+ g_value_set_boolean (value, encoder->dct8x8);
+ break;
+ case ARG_REF:
+ g_value_set_uint (value, encoder->ref);
+ break;
+ case ARG_BFRAMES:
+ g_value_set_uint (value, encoder->bframes);
+ break;
+ case ARG_B_ADAPT:
+ g_value_set_boolean (value, encoder->b_adapt);
+ break;
+ case ARG_B_PYRAMID:
+ g_value_set_boolean (value, encoder->b_pyramid);
+ break;
+ case ARG_WEIGHTB:
+ g_value_set_boolean (value, encoder->weightb);
+ break;
+ case ARG_SPS_ID:
+ g_value_set_uint (value, encoder->sps_id);
+ break;
+ case ARG_AU_NALU:
+ g_value_set_boolean (value, encoder->au_nalu);
+ break;
+ case ARG_TRELLIS:
+ g_value_set_boolean (value, encoder->trellis);
+ break;
+ case ARG_KEYINT_MAX:
+ g_value_set_uint (value, encoder->keyint_max);
+ break;
+ case ARG_QP_MIN:
+ g_value_set_uint (value, encoder->qp_min);
+ break;
+ case ARG_QP_MAX:
+ g_value_set_uint (value, encoder->qp_max);
+ break;
+ case ARG_QP_STEP:
+ g_value_set_uint (value, encoder->qp_step);
+ break;
+ case ARG_CABAC:
+ g_value_set_boolean (value, encoder->cabac);
+ break;
+ case ARG_IP_FACTOR:
+ g_value_set_float (value, encoder->ip_factor);
+ break;
+ case ARG_PB_FACTOR:
+ g_value_set_float (value, encoder->pb_factor);
+ break;
+ case ARG_RC_MB_TREE:
+ g_value_set_boolean (value, encoder->mb_tree);
+ break;
+ case ARG_RC_LOOKAHEAD:
+ g_value_set_int (value, encoder->rc_lookahead);
+ break;
+ case ARG_NR:
+ g_value_set_uint (value, encoder->noise_reduction);
+ break;
+ case ARG_INTERLACED:
+ g_value_set_boolean (value, encoder->interlaced);
+ break;
+ case ARG_SPEED_PRESET:
+ g_value_set_enum (value, encoder->speed_preset);
+ break;
+ case ARG_PSY_TUNE:
+ g_value_set_enum (value, encoder->psy_tune);
+ break;
+ case ARG_TUNE:
+ g_value_set_flags (value, encoder->tune);
+ break;
+ case ARG_OPTION_STRING:
+ g_value_set_string (value, encoder->option_string_prop->str);
+ break;
+ case ARG_FRAME_PACKING:
+ g_value_set_enum (value, encoder->frame_packing);
+ break;
+ case ARG_INSERT_VUI:
+ g_value_set_boolean (value, encoder->insert_vui);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ GST_OBJECT_UNLOCK (encoder);
+}
+
+static gboolean
+x264_element_init (GstPlugin * plugin)
+{
+ GST_DEBUG_CATEGORY_INIT (x264_enc_debug, "x264enc", 0,
+ "h264 encoding element");
+
+ GST_INFO ("linked against x264 build: %u", X264_BUILD);
+
+ /* Initialize the static GstX264EncVTable which is overridden in load_x264()
+ * if needed. We can't initialize statically because these values are not
+ * constant on Windows. */
+ default_vtable.module = NULL;
+#if X264_BUILD < 153
+ default_vtable.x264_bit_depth = &x264_bit_depth;
+#endif
+ default_vtable.x264_chroma_format = &x264_chroma_format;
+ default_vtable.x264_encoder_close = x264_encoder_close;
+ default_vtable.x264_encoder_delayed_frames = x264_encoder_delayed_frames;
+ default_vtable.x264_encoder_encode = x264_encoder_encode;
+ default_vtable.x264_encoder_headers = x264_encoder_headers;
+ default_vtable.x264_encoder_intra_refresh = x264_encoder_intra_refresh;
+ default_vtable.x264_encoder_maximum_delayed_frames =
+ x264_encoder_maximum_delayed_frames;
+ default_vtable.x264_encoder_open = x264_encoder_open;
+ default_vtable.x264_encoder_reconfig = x264_encoder_reconfig;
+ default_vtable.x264_levels = &x264_levels;
+ default_vtable.x264_param_apply_fastfirstpass =
+ x264_param_apply_fastfirstpass;
+ default_vtable.x264_param_apply_profile = x264_param_apply_profile;
+ default_vtable.x264_param_default_preset = x264_param_default_preset;
+ default_vtable.x264_param_parse = x264_param_parse;
+
+ if (!load_x264_libraries ())
+ return FALSE;
+
+ return gst_element_register (plugin, "x264enc",
+ GST_RANK_PRIMARY, GST_TYPE_X264_ENC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (x264enc, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ x264,
+ "libx264-based H264 plugins",
+ plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
--- /dev/null
+/* GStreamer H264 encoder plugin
+ * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
+ * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_X264_ENC_H__
+#define __GST_X264_ENC_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideoencoder.h>
+#include "gstencoderbitrateprofilemanager.h"
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+/* The x264.h header says this isn't needed with MinGW, but sometimes the
+ * compiler is unable to correctly do the pointer indirection for us, which
+ * leads to a segfault when you try to dereference any const values provided
+ * by x264.dll. See: https://bugzilla.gnome.org/show_bug.cgi?id=779249 */
+#if defined(_WIN32) && !defined(X264_API_IMPORTS)
+# define X264_API_IMPORTS
+#endif
+#include <x264.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_X264_ENC \
+ (gst_x264_enc_get_type())
+#define GST_X264_ENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_X264_ENC,GstX264Enc))
+#define GST_X264_ENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_X264_ENC,GstX264EncClass))
+#define GST_IS_X264_ENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_X264_ENC))
+#define GST_IS_X264_ENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_X264_ENC))
+
+typedef struct _GstX264Enc GstX264Enc;
+typedef struct _GstX264EncClass GstX264EncClass;
+typedef struct _GstX264EncVTable GstX264EncVTable;
+
+struct _GstX264Enc
+{
+ GstVideoEncoder element;
+
+ /*< private >*/
+ GstX264EncVTable *vtable;
+ x264_t *x264enc;
+ x264_param_t x264param;
+ gint current_byte_stream;
+
+ /* List of frame/buffer mapping structs for
+ * pending frames */
+ GList *pending_frames;
+
+ /* properties */
+ guint threads;
+ gboolean sliced_threads;
+ gint sync_lookahead;
+ gint pass;
+ guint quantizer;
+ gchar *mp_cache_file;
+ gboolean byte_stream;
+ guint bitrate;
+ gboolean intra_refresh;
+ gint me;
+ guint subme;
+ guint analyse;
+ gboolean dct8x8;
+ guint ref;
+ guint bframes;
+ gboolean b_adapt;
+ gboolean b_pyramid;
+ gboolean weightb;
+ guint sps_id;
+ gboolean au_nalu;
+ gboolean trellis;
+ guint vbv_buf_capacity;
+ guint keyint_max;
+ gboolean cabac;
+ gfloat ip_factor;
+ gfloat pb_factor;
+ guint qp_min;
+ guint qp_max;
+ guint qp_step;
+ gboolean mb_tree;
+ gint rc_lookahead;
+ guint noise_reduction;
+ gboolean interlaced;
+ gint speed_preset;
+ gint psy_tune;
+ guint tune;
+ GString *tunings;
+ GString *option_string_prop; /* option-string property */
+ GString *option_string; /* used by set prop */
+ gint frame_packing;
+ gboolean insert_vui;
+
+ /* input description */
+ GstVideoCodecState *input_state;
+
+ /* configuration changed while playing */
+ gboolean reconfig;
+
+ /* from the downstream caps */
+ const gchar *peer_profile;
+ gboolean peer_intra_profile;
+ gint peer_level_idc;
+
+ /* cached values to set x264_picture_t */
+ gint x264_nplanes;
+
+ GstEncoderBitrateProfileManager *bitrate_manager;
+};
+
+struct _GstX264EncClass
+{
+ GstVideoEncoderClass parent_class;
+};
+
+GType gst_x264_enc_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (x264enc);
+
+G_END_DECLS
+
+#endif /* __GST_X264_ENC_H__ */
--- /dev/null
+x264_sources = [
+ 'gstx264enc.c',
+ 'gstencoderbitrateprofilemanager.c',
+]
+
+x264_dep = dependency('x264', required : get_option('x264'),
+ fallback: ['x264', 'libx264_dep'])
+
+if x264_dep.found()
+ x264_libraries = get_option('x264_libraries')
+ x264_args = []
+ if x264_libraries != ''
+ x264_args += ['-DHAVE_X264_ADDITIONAL_LIBRARIES="@0@"'.format(x264_libraries)]
+ extra_gmodule_dep = [gmodule_dep]
+ else
+ extra_gmodule_dep = []
+ endif
+
+ gstx264 = library('gstx264',
+ x264_sources,
+ c_args : ugly_args + x264_args,
+ include_directories : [configinc],
+ dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, x264_dep] + extra_gmodule_dep,
+ install : true,
+ install_dir : plugins_install_dir,
+ )
+ pkgconfig.generate(gstx264, install_dir : plugins_pkgconfig_install_dir)
+ plugins += [gstx264]
+
+ install_data(sources: 'GstX264Enc.prs', install_dir: presetdir)
+endif
--- /dev/null
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#ifdef ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
--- /dev/null
+/*
+ * glib-compat.c
+ * Functions copied from glib 2.10
+ *
+ * Copyright 2005 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GLIB_COMPAT_PRIVATE_H__
+#define __GLIB_COMPAT_PRIVATE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* copies */
+
+/* adaptations */
+
+G_END_DECLS
+
+#endif
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_I18N_PLUGIN_H__
+#define __GST_I18N_PLUGIN_H__
+
+#include <locale.h> /* some people need it and some people don't */
+#include "gettext.h" /* included with gettext distribution and copied */
+
+#ifndef GETTEXT_PACKAGE
+#error You must define GETTEXT_PACKAGE before including this header.
+#endif
+
+/* we want to use shorthand _() for translating and N_() for marking */
+#define _(String) dgettext (GETTEXT_PACKAGE, String)
+#define N_(String) gettext_noop (String)
+/* FIXME: if we need it, we can add Q_ as well, like in glib */
+
+#endif /* __GST_I18N_PLUGIN_H__ */
--- /dev/null
+<Project
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns="http://usefulinc.com/ns/doap#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:admin="http://webns.net/mvcb/">
+
+ <name>GStreamer Ugly Plug-ins</name>
+ <shortname>gst-plugins-ugly</shortname>
+ <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-ugly.html" />
+ <created>2005-09-06</created>
+ <shortdesc xml:lang="en">
+a set of good-quality plug-ins with license or patent problems.
+</shortdesc>
+ <description xml:lang="en">
+GStreamer Ugly Plug-ins is a set of plug-ins that have good quality and correct
+functionality, but distributing them might pose problems. The license on either
+the plug-ins or the supporting libraries might not be how we'd like. The code
+might be widely known to present patent problems.
+ </description>
+ <category></category>
+ <bug-database rdf:resource="https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/" />
+ <screenshots></screenshots>
+ <mailing-list rdf:resource="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" />
+ <programming-language>C</programming-language>
+ <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
+ <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
+
+ <repository>
+ <GitRepository>
+ <location rdf:resource="git://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
+ <browse rdf:resource="http://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
+ </GitRepository>
+ </repository>
+
+ <release>
+ <Version>
+ <revision>1.19.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2021-09-23</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.19.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2021-06-01</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.18.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2020-09-08</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.17.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2020-08-20</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.17.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2020-07-03</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.17.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2020-06-19</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.16.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2019-04-19</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.16.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.15.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2019-04-11</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.15.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2019-02-26</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.15.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2019-01-17</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.14.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2018-03-19</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.14.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.13.91</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2018-03-13</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.13.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2018-03-03</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.13.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2018-02-15</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.12.4</revision>
+ <branch>1.12</branch>
+ <name></name>
+ <created>2017-12-07</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.4.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.12.3</revision>
+ <branch>1.12</branch>
+ <name></name>
+ <created>2017-09-18</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.12.2</revision>
+ <branch>1.12</branch>
+ <name></name>
+ <created>2017-07-14</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.12.1</revision>
+ <branch>1.12</branch>
+ <name></name>
+ <created>2017-06-20</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.12.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2017-05-04</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.11.91</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2017-04-27</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.11.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2017-04-07</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.11.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2017-02-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.11.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2017-01-12</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.10.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-11-01</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.10.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.9.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-09-30</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.9.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-09-01</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.9.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-06-06</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.8.0</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-03-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.8.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.7.91</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-03-15</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.7.90</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-03-01</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.7.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-02-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.7.1</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2015-12-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.6.2</revision>
+ <branch>1.6</branch>
+ <name></name>
+ <created>2015-12-14</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.6.1</revision>
+ <branch>1.6</branch>
+ <name></name>
+ <created>2015-10-30</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.6.0</revision>
+ <branch>1.6</branch>
+ <name></name>
+ <created>2015-09-25</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.5.91</revision>
+ <branch>1.5</branch>
+ <name></name>
+ <created>2015-09-18</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.5.90</revision>
+ <branch>1.5</branch>
+ <name></name>
+ <created>2015-08-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.5.2</revision>
+ <branch>1.5</branch>
+ <name></name>
+ <created>2015-06-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.5.1</revision>
+ <branch>1.5</branch>
+ <name></name>
+ <created>2015-06-07</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.4.0</revision>
+ <branch>1.4</branch>
+ <name></name>
+ <created>2014-07-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.4.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.3.91</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-07-11</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.3.90</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-06-28</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.3.3</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-06-22</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.3.2</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-05-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.3.1</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-05-03</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.2.0</revision>
+ <branch>1.2</branch>
+ <name></name>
+ <created>2013-09-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.2.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.1.90</revision>
+ <branch>1.1</branch>
+ <name></name>
+ <created>2013-09-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.90.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.1.4</revision>
+ <branch>1.1</branch>
+ <name></name>
+ <created>2013-08-28</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.4.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.1.3</revision>
+ <branch>1.1</branch>
+ <name></name>
+ <created>2013-07-29</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.1.2</revision>
+ <branch>1.1</branch>
+ <name></name>
+ <created>2013-07-11</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.1.1</revision>
+ <branch>1.1</branch>
+ <name></name>
+ <created>2013-06-05</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.0.2</revision>
+ <branch>1.0</branch>
+ <name></name>
+ <created>2012-10-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.0.1</revision>
+ <branch>1.0</branch>
+ <name></name>
+ <created>2012-10-07</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.0.0</revision>
+ <branch>1.0</branch>
+ <name></name>
+ <created>2012-09-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.0.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.99</revision>
+ <branch>0.11</branch>
+ <name>Stole Many a Mans Soul and Faith</name>
+ <created>2012-09-17</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.99.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.94</revision>
+ <branch>0.11</branch>
+ <name>Rag Hummin'</name>
+ <created>2012-09-14</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.94.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.93</revision>
+ <branch>0.11</branch>
+ <name>Rag Doll Physics</name>
+ <created>2012-08-08</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.93.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.92</revision>
+ <branch>0.11</branch>
+ <name>Hey You</name>
+ <created>2012-06-07</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.92.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.91</revision>
+ <branch>0.11</branch>
+ <name>I’ll grind his bones to make my bread!</name>
+ <created>2012-05-13</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.91.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.90</revision>
+ <branch>0.11</branch>
+ <name>Is all that we see or seem but a dream within a dream?</name>
+ <created>2012-04-12</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.2</revision>
+ <branch>0.11</branch>
+ <name>Savior from Anger</name>
+ <created>2012-03-22</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.11.1</revision>
+ <branch>0.11</branch>
+ <name>Moonlapse Vertigo</name>
+ <created>2012-02-16</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.18</revision>
+ <branch>0.10</branch>
+ <name>Extra Life</name>
+ <created>2011-05-10</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.17</revision>
+ <branch>0.10</branch>
+ <name>Raised by Wolves</name>
+ <created>2011-01-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.16</revision>
+ <branch>0.10</branch>
+ <name>Because He Knows the Time is Short</name>
+ <created>2010-09-02</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.15</revision>
+ <branch>0.10</branch>
+ <name>Englishman in a Baseball Cap</name>
+ <created>2010-05-30</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.14</revision>
+ <branch>0.10</branch>
+ <name>Run Rabbit</name>
+ <created>2010-03-06</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.13</revision>
+ <branch>0.10</branch>
+ <name>Appointed Point</name>
+ <created>2009-10-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.12</revision>
+ <branch>0.10</branch>
+ <name>Moving Along The Highway</name>
+ <created>2009-06-18</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.11</revision>
+ <branch>0.10</branch>
+ <name>Their swords and their knives</name>
+ <created>2009-03-20</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.10</revision>
+ <branch>0.10</branch>
+ <name>Under the House</name>
+ <created>2008-11-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.9</revision>
+ <branch>0.10</branch>
+ <name>Back The Way It Was</name>
+ <created>2008-08-26</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.8</revision>
+ <branch>0.10</branch>
+ <name>And yet</name>
+ <created>2008-05-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.7</revision>
+ <branch>0.10</branch>
+ <name>I Cheated Time</name>
+ <created>2008-01-20</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.6</revision>
+ <branch>0.10</branch>
+ <name>The Sacrifice</name>
+ <created>2007-06-19</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.5</revision>
+ <branch>0.10</branch>
+ <name>She said</name>
+ <created>2006-12-13</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.4</revision>
+ <branch>0.10</branch>
+ <name>Metal Molly</name>
+ <created>2006-08-14</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.3</revision>
+ <branch>0.10</branch>
+ <name>Late Plane</name>
+ <created>2006-03-31</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.2</revision>
+ <branch>0.10</branch>
+ <name>Season to Taste</name>
+ <created>2006-02-20</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.1</revision>
+ <branch>0.10</branch>
+ <name>Peng</name>
+ <created>2006-01-13</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.gz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>0.10.0</revision>
+ <branch>0.10</branch>
+ <name>Brie</name>
+ <created>2005-12-05</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.gz" />
+ </Version>
+ </release>
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Wim Taymans</foaf:name>
+ <foaf:mbox_sha1sum>0d93fde052812d51a05fd86de9bdbf674423daa2</foaf:mbox_sha1sum>
+ </foaf:Person>
+ </maintainer>
+
+</Project>
--- /dev/null
+ASF Demuxer Plugin
+==================
+
+Overview
+--------
+
+This plugin is a demuxer for Microsoft's ASF Advanced Streaming Format
+or ASF [1]. This demuxer only supports ASF v1.0 since the vast
+majority of existing ASF files use that version. The specification
+has been derived from a third party source [2] without reference to
+the original.
+
+Design
+------
+
+The ASF format can carry any combination of audio, video or
+'ASF_Command_Media' streams. For simplicity it is assumed that each
+file can carry up to 16 audio streams and 16 video streams. These are
+implemented as dynamic pads and appear as appropriate once the file
+headers have been parsed.
+
+ (-------------------------)
+ ! asfdemux !
+ ! (video/raw0)---
+ ! (video/raw1)---
+ ! (video/raw...
+ --- src !
+ ! (audio/raw0)---
+ ! (audio/raw1)---
+ ! (audio/raw...
+ ! !
+ (-------------------------)
+
+
+Known stream fourccs are:
+
+Type Tags MIME type
+------------------------------------------
+H263 H263 I263 video/x-h263
+MJPEG MJPG image/jpeg
+MPEG4 DIVX divx DX50 video/mpeg
+ XVID xvid mp4s
+ MP4S M4S2 m4s2
+ 0x04000000
+MSMPEG4V1 MPG4 video/mpeg
+MSMPEG4V2 MP42 video/mpeg
+MSMPEG4V3 MP43 DIV3 video/mpeg
+WMV1 WMV1 video/x-wmv, wmvversion = (int) 1
+WMV2 WMV2 video/x-wmv, wmvversion = (int) 2
+WMV3 WMV3 video/x-wmv, wmvversion = (int) 3
+WMA1 WMA1 audio/x-wma, wmaversion = (int) 1
+WMA2 WMA2 audio/x-wma, wmaversion = (int) 2
+ audio/x-wma, wmaversion = (int) 3
+
+These video stream headers is very similar to that used in the AVI
+format as are the audio stream headers. In addition the content types
+are basically the same also so, for compatibility with existing
+plugins the src pads are set up as video/x-msvideo. This enables
+compatibility with the ffmpeg plugin.
+
+The demuxing process begins with the loop function gst_asf_demux_loop
+and parses the file in a recursive tree as follows:
+
+ gst_asf_demux_loop()
+ +-> gst_asf_demux_process_object() <----
+ +-> gst_asf_demux_process_stream() \
+ |-> gst_asf_demux_process_file() |
+ |-> gst_asf_demux_process_header() --+
+ |-> gst_asf_demux_process_data()
+ +-> gst_asf_demux_process_segment()
+ +-> gst_asf_demux_process_chunk()
+
+Todo
+----
+
+- Support for ASF v2.0
+- Support for command media streams
+
+
+
+References
+----------
+
+[1] Microsoft. ASF Specification - Windows Media Technologies.
+http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx (v01.20.01e, September 2003)
+
+[2] divx at euro.ru. ASF format version 1.0,
+reconstruction. http://avifile.sourceforge.net/asf-1.0.htm
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+
+#include "asfheaders.h"
+
+const ASFGuidHash asf_payload_ext_guids[] = {
+ {ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
+ {0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
+ },
+ {ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT, "ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT",
+ {0xD590DC20, 0x436C07BC, 0xBBF3f79C, 0xDCA4F1FB}},
+ {ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
+ "ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO",
+ {0x1b1ee554, 0x4bc8f9ea, 0x6b371a82, 0xb8c4e474}},
+ {ASF_PAYLOAD_EXTENSION_TIMING, "ASF_PAYLOAD_EXTENSION_TIMING",
+ {0XFD3CC02A, 0X4CFA06DB, 0X12721C80, 0XE44587D3}},
+ {ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
+ {0, 0, 0, 0}
+ }
+};
+
+const ASFGuidHash asf_correction_guids[] = {
+ {ASF_CORRECTION_ON, "ASF_CORRECTION_ON",
+ {0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
+ },
+ {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
+ {0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F}
+ },
+ /* CHECKME: where does this 49F1A440... GUID come from? (tpm) */
+ {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
+ {0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
+ },
+ {ASF_CORRECTION_UNDEFINED, "ASF_CORRECTION_UNDEFINED",
+ {0, 0, 0, 0}
+ }
+};
+
+const ASFGuidHash asf_stream_guids[] = {
+ {ASF_STREAM_VIDEO, "ASF_STREAM_VIDEO",
+ {0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
+ },
+ {ASF_STREAM_AUDIO, "ASF_STREAM_AUDIO",
+ {0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
+ },
+ {ASF_STREAM_EXT_EMBED_HEADER, "ASF_STREAM_EXT_EMBED_HEADER",
+ {0X3AFB65E2, 0X40F247EF, 0XA9702CAC, 0X43D3710D}},
+ {ASF_STREAM_UNDEFINED, "ASF_STREAM_UNDEFINED",
+ {0, 0, 0, 0}
+ }
+};
+
+const ASFGuidHash asf_ext_stream_guids[] = {
+ {ASF_EXT_STREAM_AUDIO, "ASF_EXT_STREAM_AUDIO",
+ {0X31178C9D, 0X452803E1, 0XF93D82B5, 0X03F522DB}
+ },
+ {ASF_EXT_STREAM_UNDEFINED, "ASF_EXT_STREAM_UNDEFINED",
+ {0, 0, 0, 0}
+ }
+};
+
+const ASFGuidHash asf_object_guids[] = {
+ {ASF_OBJ_STREAM, "ASF_OBJ_STREAM",
+ {0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
+ },
+ {ASF_OBJ_DATA, "ASF_OBJ_DATA",
+ {0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
+ },
+ {ASF_OBJ_FILE, "ASF_OBJ_FILE",
+ {0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
+ },
+ {ASF_OBJ_HEADER, "ASF_OBJ_HEADER",
+ {0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
+ },
+ {ASF_OBJ_CONCEAL_NONE, "ASF_OBJ_CONCEAL_NONE",
+ {0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
+ },
+ {ASF_OBJ_COMMENT, "ASF_OBJ_COMMENT",
+ {0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
+ },
+ {ASF_OBJ_CODEC_COMMENT, "ASF_OBJ_CODEC_COMMENT",
+ {0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
+ },
+ {ASF_OBJ_CODEC_COMMENT1, "ASF_OBJ_CODEC_COMMENT1",
+ {0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
+ },
+ {ASF_OBJ_SIMPLE_INDEX, "ASF_OBJ_SIMPLE_INDEX",
+ {0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
+ },
+ {ASF_OBJ_INDEX, "ASF_OBJ_INDEX",
+ {0xd6e229d3, 0x11d135da, 0xa0003490, 0xbe4903c9}
+ },
+ {ASF_OBJ_HEAD1, "ASF_OBJ_HEAD1",
+ {0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
+ },
+ {ASF_OBJ_HEAD2, "ASF_OBJ_HEAD2",
+ {0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
+ },
+ {ASF_OBJ_PADDING, "ASF_OBJ_PADDING",
+ {0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
+ },
+ {ASF_OBJ_BITRATE_PROPS, "ASF_OBJ_BITRATE_PROPS",
+ {0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
+ },
+ {ASF_OBJ_EXT_CONTENT_DESC, "ASF_OBJ_EXT_CONTENT_DESC",
+ {0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
+ },
+ {ASF_OBJ_BITRATE_MUTEX, "ASF_OBJ_BITRATE_MUTEX",
+ {0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
+ },
+ {ASF_OBJ_LANGUAGE_LIST, "ASF_OBJ_LANGUAGE_LIST",
+ {0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
+ },
+ {ASF_OBJ_METADATA_OBJECT, "ASF_OBJ_METADATA_OBJECT",
+ {0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
+ },
+ {ASF_OBJ_EXTENDED_STREAM_PROPS, "ASF_OBJ_EXTENDED_STREAM_PROPS",
+ {0x14e6a5cb, 0x4332c672, 0x69a99983, 0x5a5b0652}
+ },
+ {ASF_OBJ_COMPATIBILITY, "ASF_OBJ_COMPATIBILITY",
+ {0x26f18b5d, 0x47ec4584, 0x650e5f9f, 0xc952041f}
+ },
+ {ASF_OBJ_INDEX_PLACEHOLDER, "ASF_OBJ_INDEX_PLACEHOLDER",
+ {0xd9aade20, 0x4f9c7c17, 0x558528bc, 0xa2e298dd}
+ },
+ {ASF_OBJ_INDEX_PARAMETERS, "ASF_OBJ_INDEX_PARAMETERS",
+ {0xd6e229df, 0x11d135da, 0xa0003490, 0xbe4903c9}
+ },
+ {ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION, "ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION",
+ {0xa08649cf, 0x46704775, 0x356e168a, 0xcd667535}
+ },
+ {ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
+ {0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
+ },
+ {ASF_OBJ_CONTENT_ENCRYPTION, "ASF_OBJ_CONTENT_ENCRYPTION",
+ {0x2211b3fb, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
+ },
+ {ASF_OBJ_EXT_CONTENT_ENCRYPTION, "ASF_OBJ_EXT_CONTENT_ENCRYPTION",
+ {0x298ae614, 0x4c172622, 0xe0da35b9, 0x9c28e97e}
+ },
+ {ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, "ASF_OBJ_DIGITAL_SIGNATURE_OBJECT",
+ {0x2211b3fc, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
+ },
+ {ASF_OBJ_SCRIPT_COMMAND, "ASF_OBJ_SCRIPT_COMMAND",
+ {0x1efb1a30, 0x11d00b62, 0xa0009ba3, 0xf64803c9}
+ },
+ {ASF_OBJ_MARKER, "ASF_OBJ_MARKER",
+ {0xf487cd01, 0x11cfa951, 0xc000e68e, 0x6553200c}
+ },
+ /* This guid is definitely used for encryption (mentioned in MS smooth
+ * streaming docs) in new PlayReady (c) (tm) (wtf) system, but I haven't
+ * found a proper name for it.
+ * (Edward Jan 11 2011).*/
+ {ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT, "ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT",
+ {0x9a04f079, 0x42869840, 0x5be692ab, 0x955f88e0}
+ },
+ {ASF_OBJ_METADATA_LIBRARY_OBJECT, "ASF_OBJ_METADATA_LIBRARY_OBJECT",
+ {0x44231c94, 0x49d19498, 0x131d41a1, 0x5470454e}
+ },
+ {ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
+ {0, 0, 0, 0}
+ }
+};
+
+guint32
+gst_asf_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
+{
+ gint i;
+
+ for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
+ if (guids[i].guid.v1 == guid->v1 &&
+ guids[i].guid.v2 == guid->v2 &&
+ guids[i].guid.v3 == guid->v3 && guids[i].guid.v4 == guid->v4) {
+ return guids[i].obj_id;
+ }
+ }
+
+ /* The base case if none is found */
+ return ASF_OBJ_UNDEFINED;
+}
+
+const gchar *
+gst_asf_get_guid_nick (const ASFGuidHash * guids, guint32 obj_id)
+{
+ gint i;
+
+ for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
+ if (guids[i].obj_id == obj_id) {
+ return guids[i].obj_id_str;
+ }
+ }
+
+ /* The base case if none is found */
+ return "ASF_OBJ_UNDEFINED";
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __ASFHEADERS_H__
+#define __ASFHEADERS_H__
+
+G_BEGIN_DECLS
+
+typedef struct {
+ guint32 v1;
+ guint32 v2;
+ guint32 v3;
+ guint32 v4;
+} ASFGuid;
+
+
+
+typedef struct {
+ guint8 obj_id;
+ const gchar *obj_id_str;
+ ASFGuid guid;
+} ASFGuidHash;
+
+typedef enum {
+ ASF_OBJ_UNDEFINED = 0,
+ ASF_OBJ_STREAM,
+ ASF_OBJ_DATA,
+ ASF_OBJ_FILE,
+ ASF_OBJ_HEADER,
+ ASF_OBJ_CONCEAL_NONE,
+ ASF_OBJ_COMMENT,
+ ASF_OBJ_CODEC_COMMENT,
+ ASF_OBJ_CODEC_COMMENT1,
+ ASF_OBJ_SIMPLE_INDEX,
+ ASF_OBJ_INDEX,
+ ASF_OBJ_HEAD1,
+ ASF_OBJ_HEAD2,
+ ASF_OBJ_PADDING,
+ ASF_OBJ_BITRATE_PROPS,
+ ASF_OBJ_EXT_CONTENT_DESC,
+ ASF_OBJ_BITRATE_MUTEX,
+ ASF_OBJ_LANGUAGE_LIST,
+ ASF_OBJ_METADATA_OBJECT,
+ ASF_OBJ_EXTENDED_STREAM_PROPS,
+ ASF_OBJ_COMPATIBILITY,
+ ASF_OBJ_INDEX_PLACEHOLDER,
+ ASF_OBJ_INDEX_PARAMETERS,
+ ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
+ ASF_OBJ_STREAM_PRIORITIZATION,
+ ASF_OBJ_CONTENT_ENCRYPTION,
+ ASF_OBJ_EXT_CONTENT_ENCRYPTION,
+ ASF_OBJ_DIGITAL_SIGNATURE_OBJECT,
+ ASF_OBJ_SCRIPT_COMMAND,
+ ASF_OBJ_MARKER,
+ ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT,
+ ASF_OBJ_METADATA_LIBRARY_OBJECT,
+} AsfObjectID;
+
+typedef enum {
+ ASF_STREAM_UNDEFINED = 0,
+ ASF_STREAM_VIDEO,
+ ASF_STREAM_AUDIO,
+ ASF_STREAM_EXT_EMBED_HEADER
+} AsfStreamType;
+
+typedef enum {
+ ASF_EXT_STREAM_UNDEFINED = 0,
+ ASF_EXT_STREAM_AUDIO
+} AsfExtStreamType;
+
+typedef enum {
+ ASF_CORRECTION_UNDEFINED = 0,
+ ASF_CORRECTION_ON,
+ ASF_CORRECTION_OFF
+} AsfCorrectionType;
+
+typedef enum {
+ ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
+ ASF_PAYLOAD_EXTENSION_DURATION,
+ ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT,
+ ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
+ ASF_PAYLOAD_EXTENSION_TIMING
+} AsfPayloadExtensionID;
+
+extern const ASFGuidHash asf_payload_ext_guids[];
+
+extern const ASFGuidHash asf_correction_guids[];
+
+extern const ASFGuidHash asf_stream_guids[];
+
+extern const ASFGuidHash asf_ext_stream_guids[];
+
+extern const ASFGuidHash asf_object_guids[];
+
+/* GUID utilities */
+guint32 gst_asf_identify_guid (const ASFGuidHash * guids,
+ ASFGuid * guid);
+
+const gchar *gst_asf_get_guid_nick (const ASFGuidHash * guids,
+ guint32 obj_id);
+
+struct _asf_stream_audio {
+ guint16 codec_tag;
+ guint16 channels;
+ guint32 sample_rate;
+ guint32 byte_rate;
+ guint16 block_align;
+ guint16 word_size;
+ guint16 size;
+};
+
+typedef struct _asf_stream_audio asf_stream_audio;
+
+struct _asf_stream_video {
+ guint32 width;
+ guint32 height;
+ guint8 unknown;
+ guint16 size;
+};
+
+typedef struct _asf_stream_video asf_stream_video;
+
+struct _asf_stream_video_format {
+ guint32 size;
+ guint32 width;
+ guint32 height;
+ guint16 planes;
+ guint16 depth;
+ guint32 tag;
+ guint32 image_size;
+ guint32 xpels_meter;
+ guint32 ypels_meter;
+ guint32 num_colors;
+ guint32 imp_colors;
+};
+
+typedef struct _asf_stream_video_format asf_stream_video_format;
+
+G_END_DECLS
+
+#endif /* __ASFHEADERS_H__ */
--- /dev/null
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* FIXME:
+ * file:///home/tpm/samples/video/asf//336370-regis-velo862.wmv
+ * file:///home/tpm/samples/video/asf//336370-eichhoer.wmv
+ * throw errors (not always necessarily) in this code path
+ * (looks like they carry broken payloads/packets though) */
+
+#include "asfpacket.h"
+
+#include <gst/gstutils.h>
+#include <gst/gstinfo.h>
+#include <string.h>
+
+#define GST_ASF_PAYLOAD_KF_COMPLETE(stream, payload) (stream->is_video && payload->keyframe && payload->buf_filled >= payload->mo_size)
+
+/* we are unlikely to deal with lengths > 2GB here any time soon, so just
+ * return a signed int and use that for error reporting */
+static inline gint
+asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset,
+ const guint8 ** p_data, guint * p_size)
+{
+ static const guint lens[4] = { 0, 1, 2, 4 };
+ guint len, val;
+
+ len = lens[(lentype_flags >> lentype_bit_offset) & 0x03];
+
+ /* will make caller bail out with a short read if there's not enough data */
+ if (G_UNLIKELY (*p_size < len)) {
+ GST_WARNING ("need %u bytes, but only %u bytes available", len, *p_size);
+ return -1;
+ }
+
+ switch (len) {
+ case 0:
+ val = 0;
+ break;
+ case 1:
+ val = GST_READ_UINT8 (*p_data);
+ break;
+ case 2:
+ val = GST_READ_UINT16_LE (*p_data);
+ break;
+ case 4:
+ val = GST_READ_UINT32_LE (*p_data);
+ break;
+ default:
+ val = 0;
+ g_assert_not_reached ();
+ }
+
+ *p_data += len;
+ *p_size -= len;
+
+ return (gint) val;
+}
+
+static GstBuffer *
+asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
+ guint * p_size, guint payload_len)
+{
+ guint off;
+
+ g_assert (payload_len <= *p_size);
+
+ off = (guint) (*p_data - packet->bdata);
+ g_assert (off < gst_buffer_get_size (packet->buf));
+
+ *p_data += payload_len;
+ *p_size -= payload_len;
+
+ return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off,
+ payload_len);
+}
+
+static AsfPayload *
+asf_payload_search_payloads_queue (AsfPayload * payload, GArray * payload_list)
+{
+ AsfPayload *ret = NULL;
+ gint idx;
+ for (idx = payload_list->len - 1; idx >= 0; idx--) {
+ ret = &g_array_index (payload_list, AsfPayload, idx);
+
+ if (G_UNLIKELY (ret->mo_size == payload->mo_size &&
+ ret->mo_number == payload->mo_number)) {
+ return ret;
+ }
+ }
+ return NULL;
+}
+
+static AsfPayload *
+asf_payload_find_previous_fragment (GstASFDemux * demux, AsfPayload * payload,
+ AsfStream * stream)
+{
+ AsfPayload *ret = NULL;
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+
+ /* Search in queued payloads list */
+ ret = asf_payload_search_payloads_queue (payload, stream->payloads);
+ if (ret) {
+ GST_DEBUG
+ ("previous fragments found in payloads queue for reverse playback : object ID %d",
+ ret->mo_number);
+ return ret;
+ }
+
+ /* Search in payloads 'to be queued' list */
+ ret = asf_payload_search_payloads_queue (payload, stream->payloads_rev);
+ if (ret) {
+ GST_DEBUG
+ ("previous fragments found in temp payload queue for reverse playback : object ID %d",
+ ret->mo_number);
+ return ret;
+ }
+ } else {
+ if (G_UNLIKELY (stream->payloads->len == 0)) {
+ GST_DEBUG ("No previous fragments to merge with for stream %u",
+ stream->id);
+ return NULL;
+ }
+
+ ret =
+ &g_array_index (stream->payloads, AsfPayload,
+ stream->payloads->len - 1);
+
+ if (G_UNLIKELY (ret->mo_size != payload->mo_size ||
+ ret->mo_number != payload->mo_number || ret->mo_offset != 0)) {
+ if (payload->mo_size != 0) {
+ GST_WARNING ("Previous fragment does not match continued fragment");
+ return NULL;
+ } else {
+ /* Warn about this case, but accept it anyway: files in the wild sometimes
+ * have continued packets where the subsequent fragments say that they're
+ * zero-sized. */
+ GST_WARNING ("Previous fragment found, but current fragment has "
+ "zero size, accepting anyway");
+ }
+ }
+ }
+
+#if 0
+ if (this_fragment->mo_offset + this_payload_len > first_fragment->mo_size) {
+ GST_WARNING ("Merged fragments would be bigger than the media object");
+ return FALSE;
+ }
+#endif
+
+ return ret;
+}
+
+/* TODO: if we have another payload already queued for this stream and that
+ * payload doesn't have a duration, maybe we can calculate a duration for it
+ * (if the previous timestamp is smaller etc. etc.) */
+static void
+gst_asf_payload_queue_for_stream_forward (GstASFDemux * demux,
+ AsfPayload * payload, AsfStream * stream)
+{
+ GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+ stream->id, GST_TIME_ARGS (payload->ts));
+
+ /* make timestamps start from 0; first_ts will be determined during activation (once we have enough data),
+ which will also update ts of all packets queued before we knew first_ts; */
+ if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (demux->first_ts)
+ && GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+ if (payload->ts > demux->first_ts)
+ payload->ts -= demux->first_ts;
+ else
+ payload->ts = 0;
+ }
+
+ /* remove any incomplete payloads that will never be completed */
+ while (stream->payloads->len > 0) {
+ AsfPayload *prev;
+ guint idx_last;
+
+ idx_last = stream->payloads->len - 1;
+ prev = &g_array_index (stream->payloads, AsfPayload, idx_last);
+
+ if (G_UNLIKELY (gst_asf_payload_is_complete (prev)))
+ break;
+
+ GST_DEBUG_OBJECT (demux, "Dropping incomplete fragmented media object "
+ "queued for stream %u", stream->id);
+
+ gst_buffer_replace (&prev->buf, NULL);
+ g_array_remove_index (stream->payloads, idx_last);
+
+ /* there's data missing, so there's a discontinuity now */
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+ }
+
+ /* If we're about to queue a key frame that is before the segment start, we
+ * can ditch any previously queued payloads (which would also be before the
+ * segment start). This makes sure the decoder doesn't decode more than
+ * absolutely necessary after a seek (we don't push out payloads that are
+ * before the segment start until we have at least one that falls within the
+ * segment) */
+ if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+ payload->ts < demux->segment.start && payload->keyframe)) {
+ GST_DEBUG_OBJECT (demux, "Queueing keyframe before segment start, removing"
+ " %u previously-queued payloads, which would be out of segment too and"
+ " hence don't have to be decoded", stream->payloads->len);
+ while (stream->payloads->len > 0) {
+ AsfPayload *last;
+ guint idx_last;
+
+ idx_last = stream->payloads->len - 1;
+ last = &g_array_index (stream->payloads, AsfPayload, idx_last);
+ gst_buffer_replace (&last->buf, NULL);
+ g_array_remove_index (stream->payloads, idx_last);
+ }
+
+ /* Mark discontinuity (should be done via stream->discont anyway though) */
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+ }
+
+ g_array_append_vals (stream->payloads, payload, 1);
+}
+
+static void
+gst_asf_payload_queue_for_stream_reverse (GstASFDemux * demux,
+ AsfPayload * payload, AsfStream * stream)
+{
+ GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+ stream->id, GST_TIME_ARGS (payload->ts));
+
+ if (demux->multiple_payloads) {
+ /* store the payload in temporary buffer, until we parse all payloads in this packet */
+ g_array_append_vals (stream->payloads_rev, payload, 1);
+ } else {
+ if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+ g_array_append_vals (stream->payloads, payload, 1);
+ if (GST_ASF_PAYLOAD_KF_COMPLETE (stream, payload)) {
+ stream->kf_pos = stream->payloads->len - 1;
+ }
+ } else {
+ gst_buffer_unref (payload->buf);
+ }
+ }
+}
+
+
+static void
+gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload,
+ AsfStream * stream)
+{
+ GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+ stream->id, GST_TIME_ARGS (payload->ts));
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ gst_asf_payload_queue_for_stream_reverse (demux, payload, stream);
+ } else {
+ gst_asf_payload_queue_for_stream_forward (demux, payload, stream);
+ }
+
+}
+
+static void
+asf_payload_parse_replicated_data_extensions (AsfStream * stream,
+ AsfPayload * payload)
+{
+ AsfPayloadExtension *ext;
+ guint off;
+ guint16 ext_len;
+
+ if (!stream->ext_props.valid || stream->ext_props.payload_extensions == NULL)
+ return;
+
+ off = 8;
+ for (ext = stream->ext_props.payload_extensions; ext->len > 0; ++ext) {
+ ext_len = ext->len;
+ if (ext_len == 0xFFFF) { /* extension length is determined by first two bytes in replicated data */
+ ext_len = GST_READ_UINT16_LE (payload->rep_data + off);
+ off += 2;
+ }
+ if (G_UNLIKELY (off + ext_len > payload->rep_data_len)) {
+ GST_WARNING ("not enough replicated data for defined extensions");
+ return;
+ }
+ switch (ext->id) {
+ case ASF_PAYLOAD_EXTENSION_DURATION:
+ if (G_LIKELY (ext_len == 2)) {
+ guint16 tdur = GST_READ_UINT16_LE (payload->rep_data + off);
+ /* packet durations of 1ms are mostly invalid */
+ if (tdur != 1)
+ payload->duration = tdur * GST_MSECOND;
+ } else {
+ GST_WARNING ("unexpected DURATION extensions len %u", ext_len);
+ }
+ break;
+ case ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT:
+ if (G_LIKELY (ext_len == 1)) {
+ guint8 data = payload->rep_data[off];
+
+ payload->interlaced = data & 0x1;
+ payload->rff = data & 0x8;
+ payload->tff = (data & 0x2) || !(data & 0x4);
+ GST_DEBUG ("SYSTEM_CONTENT: interlaced:%d, rff:%d, tff:%d",
+ payload->interlaced, payload->rff, payload->tff);
+ } else {
+ GST_WARNING ("unexpected SYSTEM_CONTE extensions len %u", ext_len);
+ }
+ break;
+ case ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO:
+ if (G_LIKELY (ext_len == 2)) {
+ payload->par_x = payload->rep_data[off];
+ payload->par_y = payload->rep_data[off + 1];
+ GST_DEBUG ("PAR %d / %d", payload->par_x, payload->par_y);
+ } else {
+ GST_WARNING ("unexpected SYSTEM_PIXEL_ASPECT_RATIO extensions len %u",
+ ext_len);
+ }
+ break;
+ case ASF_PAYLOAD_EXTENSION_TIMING:
+ {
+ /* dvr-ms timing - this will override packet timestamp */
+ guint64 time = GST_READ_UINT64_LE (payload->rep_data + off + 8);
+ if (time != 0xFFFFFFFFFFFFFFFF)
+ payload->ts = time * 100;
+ else
+ payload->ts = GST_CLOCK_TIME_NONE;
+ }
+ break;
+ default:
+ GST_LOG ("UNKNOWN PAYLOAD EXTENSION!");
+ break;
+ }
+ off += ext_len;
+ }
+}
+
+static gboolean
+gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ gint lentype, const guint8 ** p_data, guint * p_size)
+{
+ AsfPayload payload = { 0, };
+ AsfStream *stream;
+ gboolean is_compressed;
+ guint payload_len;
+ guint stream_num;
+
+ if (G_UNLIKELY (*p_size < 1)) {
+ GST_WARNING_OBJECT (demux, "Short packet!");
+ return FALSE;
+ }
+
+ stream_num = GST_READ_UINT8 (*p_data) & 0x7f;
+ payload.keyframe = ((GST_READ_UINT8 (*p_data) & 0x80) != 0);
+
+ *p_data += 1;
+ *p_size -= 1;
+
+ payload.ts = GST_CLOCK_TIME_NONE;
+ payload.duration = GST_CLOCK_TIME_NONE;
+ payload.par_x = 0;
+ payload.par_y = 0;
+ payload.interlaced = FALSE;
+ payload.tff = FALSE;
+ payload.rff = FALSE;
+
+ payload.mo_number =
+ asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
+ payload.mo_offset =
+ asf_packet_read_varlen_int (packet->prop_flags, 2, p_data, p_size);
+ payload.rep_data_len =
+ asf_packet_read_varlen_int (packet->prop_flags, 0, p_data, p_size);
+
+ is_compressed = (payload.rep_data_len == 1);
+
+ GST_LOG_OBJECT (demux, "payload for stream %u", stream_num);
+ GST_LOG_OBJECT (demux, "keyframe : %s", (payload.keyframe) ? "yes" : "no");
+ GST_LOG_OBJECT (demux, "compressed : %s", (is_compressed) ? "yes" : "no");
+
+ if (G_UNLIKELY (*p_size < payload.rep_data_len)) {
+ GST_WARNING_OBJECT (demux, "Short packet! rep_data_len=%u, size=%u",
+ payload.rep_data_len, *p_size);
+ return FALSE;
+ }
+
+ memcpy (payload.rep_data, *p_data,
+ MIN (sizeof (payload.rep_data), payload.rep_data_len));
+
+ *p_data += payload.rep_data_len;
+ *p_size -= payload.rep_data_len;
+
+ if (G_UNLIKELY (*p_size == 0)) {
+ GST_WARNING_OBJECT (demux, "payload without data!?");
+ return FALSE;
+ }
+
+ /* we use -1 as lentype for a single payload that's the size of the packet */
+ if (G_UNLIKELY ((lentype >= 0 && lentype <= 3))) {
+ payload_len = asf_packet_read_varlen_int (lentype, 0, p_data, p_size);
+ if (*p_size < payload_len) {
+ GST_WARNING_OBJECT (demux, "Short packet! payload_len=%u, size=%u",
+ payload_len, *p_size);
+ return FALSE;
+ }
+ } else {
+ payload_len = *p_size;
+ }
+
+ GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
+
+ stream = gst_asf_demux_get_stream (demux, stream_num);
+
+ if (G_UNLIKELY (stream == NULL)) {
+ if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
+ GST_WARNING_OBJECT (demux, "Payload for unknown stream %u, skipping",
+ stream_num);
+ }
+ if (*p_size < payload_len) {
+ *p_data += *p_size;
+ *p_size = 0;
+ } else {
+ *p_data += payload_len;
+ *p_size -= payload_len;
+ }
+ return TRUE;
+ }
+
+ if (!stream->is_video)
+ stream->kf_pos = 0;
+
+ if (G_UNLIKELY (!is_compressed)) {
+ GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len);
+
+ if (payload.rep_data_len >= 8) {
+ payload.mo_size = GST_READ_UINT32_LE (payload.rep_data);
+ payload.ts = GST_READ_UINT32_LE (payload.rep_data + 4) * GST_MSECOND;
+ if (G_UNLIKELY (payload.ts < demux->preroll))
+ payload.ts = 0;
+ else
+ payload.ts -= demux->preroll;
+ asf_payload_parse_replicated_data_extensions (stream, &payload);
+
+ GST_LOG_OBJECT (demux, "media object size : %u", payload.mo_size);
+ GST_LOG_OBJECT (demux, "media object ts : %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (payload.ts));
+ GST_LOG_OBJECT (demux, "media object dur : %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (payload.duration));
+ } else if (payload.rep_data_len == 0) {
+ payload.mo_size = 0;
+ } else if (payload.rep_data_len != 0) {
+ GST_WARNING_OBJECT (demux, "invalid replicated data length, very bad");
+ *p_data += payload_len;
+ *p_size -= payload_len;
+ return FALSE;
+ }
+
+ GST_LOG_OBJECT (demux, "media object offset : %u", payload.mo_offset);
+
+ GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
+
+ if (payload_len == 0) {
+ GST_DEBUG_OBJECT (demux, "skipping empty payload");
+ } else if (payload.mo_offset == 0 && payload.mo_size == payload_len) {
+ /* if the media object is not fragmented, just create a sub-buffer */
+ GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len);
+ payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size,
+ payload_len);
+ payload.buf_filled = payload_len;
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ /* Handle fragmented payloads for reverse playback */
+ AsfPayload *prev;
+ const guint8 *payload_data = *p_data;
+ prev = asf_payload_find_previous_fragment (demux, &payload, stream);
+
+ if (prev) {
+ gint idx;
+ AsfPayload *p;
+ gst_buffer_fill (prev->buf, payload.mo_offset,
+ payload_data, payload_len);
+ prev->buf_filled += payload_len;
+ if (payload.keyframe && payload.mo_offset == 0) {
+ stream->reverse_kf_ready = TRUE;
+
+ for (idx = stream->payloads->len - 1; idx >= 0; idx--) {
+ p = &g_array_index (stream->payloads, AsfPayload, idx);
+ if (p->mo_number == payload.mo_number) {
+ /* Mark position of KF for reverse play */
+ stream->kf_pos = idx;
+ }
+ }
+ }
+ } else {
+ payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL); /* can we use (mo_size - offset) for size? */
+ gst_buffer_fill (payload.buf, payload.mo_offset,
+ payload_data, payload_len);
+ payload.buf_filled = payload.mo_size - (payload.mo_offset);
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ }
+ *p_data += payload_len;
+ *p_size -= payload_len;
+ } else {
+ const guint8 *payload_data = *p_data;
+
+ g_assert (payload_len <= *p_size);
+
+ *p_data += payload_len;
+ *p_size -= payload_len;
+
+ /* n-th fragment of a fragmented media object? */
+ if (payload.mo_offset != 0) {
+ AsfPayload *prev;
+
+ if ((prev =
+ asf_payload_find_previous_fragment (demux, &payload, stream))) {
+ if (prev->buf == NULL || (payload.mo_size > 0
+ && payload.mo_size != prev->mo_size)
+ || payload.mo_offset >= gst_buffer_get_size (prev->buf)
+ || payload.mo_offset + payload_len >
+ gst_buffer_get_size (prev->buf)) {
+ GST_WARNING_OBJECT (demux, "Offset doesn't match previous data?!");
+ } else {
+ /* we assume fragments are payloaded with increasing mo_offset */
+ if (payload.mo_offset != prev->buf_filled) {
+ GST_WARNING_OBJECT (demux, "media object payload discontinuity: "
+ "offset=%u vs buf_filled=%u", payload.mo_offset,
+ prev->buf_filled);
+ }
+ gst_buffer_fill (prev->buf, payload.mo_offset,
+ payload_data, payload_len);
+ prev->buf_filled =
+ MAX (prev->buf_filled, payload.mo_offset + payload_len);
+ GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u",
+ prev->buf_filled);
+ }
+ } else {
+ GST_DEBUG_OBJECT (demux, "n-th payload fragment, but don't have "
+ "any previous fragment, ignoring payload");
+ }
+ } else {
+ GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented "
+ "media object", payload.mo_size);
+ payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
+ gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
+ payload.buf_filled = payload_len;
+
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ }
+ }
+ } else {
+ const guint8 *payload_data;
+ GstClockTime ts, ts_delta;
+ guint num;
+
+ GST_LOG_OBJECT (demux, "Compressed payload, length=%u", payload_len);
+
+ payload_data = *p_data;
+
+ *p_data += payload_len;
+ *p_size -= payload_len;
+
+ ts = payload.mo_offset * GST_MSECOND;
+ if (G_UNLIKELY (ts < demux->preroll))
+ ts = 0;
+ else
+ ts -= demux->preroll;
+ ts_delta = payload.rep_data[0] * GST_MSECOND;
+
+ for (num = 0; payload_len > 0; ++num) {
+ guint sub_payload_len;
+
+ sub_payload_len = GST_READ_UINT8 (payload_data);
+
+ GST_LOG_OBJECT (demux, "subpayload #%u: len=%u, ts=%" GST_TIME_FORMAT,
+ num, sub_payload_len, GST_TIME_ARGS (ts));
+
+ ++payload_data;
+ --payload_len;
+
+ if (G_UNLIKELY (payload_len < sub_payload_len)) {
+ GST_WARNING_OBJECT (demux, "Short payload! %u bytes left", payload_len);
+ return FALSE;
+ }
+
+ if (G_LIKELY (sub_payload_len > 0)) {
+ payload.buf = asf_packet_create_payload_buffer (packet,
+ &payload_data, &payload_len, sub_payload_len);
+ payload.buf_filled = sub_payload_len;
+
+ payload.ts = ts;
+ if (G_LIKELY (ts_delta))
+ payload.duration = ts_delta;
+ else
+ payload.duration = GST_CLOCK_TIME_NONE;
+
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ }
+
+ ts += ts_delta;
+ }
+ }
+
+ return TRUE;
+}
+
+GstAsfDemuxParsePacketError
+gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf)
+{
+ AsfPacket packet = { 0, };
+ GstMapInfo map;
+ const guint8 *data;
+ gboolean has_multiple_payloads;
+ GstAsfDemuxParsePacketError ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
+ guint8 ec_flags, flags1;
+ guint size;
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+ GST_LOG_OBJECT (demux, "Buffer size: %u", size);
+
+ /* need at least two payload flag bytes, send time, and duration */
+ if (G_UNLIKELY (size < 2 + 4 + 2)) {
+ GST_WARNING_OBJECT (demux, "Packet size is < 8");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+ goto done;
+ }
+
+ packet.buf = buf;
+ /* evidently transient */
+ packet.bdata = data;
+
+ ec_flags = GST_READ_UINT8 (data);
+
+ /* skip optional error correction stuff */
+ if ((ec_flags & 0x80) != 0) {
+ guint ec_len_type, ec_len;
+
+ ec_len_type = (ec_flags & 0x60) >> 5;
+ if (ec_len_type == 0) {
+ ec_len = ec_flags & 0x0f;
+ } else {
+ GST_WARNING_OBJECT (demux, "unexpected error correction length type %u",
+ ec_len_type);
+ ec_len = 2;
+ }
+ GST_LOG_OBJECT (demux, "packet has error correction (%u bytes)", ec_len);
+
+ /* still need at least two payload flag bytes, send time, and duration */
+ if (size <= (1 + ec_len) + 2 + 4 + 2) {
+ GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+ goto done;
+ }
+
+ data += 1 + ec_len;
+ size -= 1 + ec_len;
+ }
+
+ /* parse payload info */
+ flags1 = GST_READ_UINT8 (data);
+ packet.prop_flags = GST_READ_UINT8 (data + 1);
+
+ data += 2;
+ size -= 2;
+
+ has_multiple_payloads = (flags1 & 0x01) != 0;
+
+ packet.length = asf_packet_read_varlen_int (flags1, 5, &data, &size);
+
+ packet.sequence = asf_packet_read_varlen_int (flags1, 1, &data, &size);
+
+ packet.padding = asf_packet_read_varlen_int (flags1, 3, &data, &size);
+
+ if (G_UNLIKELY (size < 6)) {
+ GST_WARNING_OBJECT (demux, "Packet size is < 6");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+ goto done;
+ }
+
+ packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND;
+ packet.duration = GST_READ_UINT16_LE (data + 4) * GST_MSECOND;
+
+ data += 4 + 2;
+ size -= 4 + 2;
+
+ GST_LOG_OBJECT (demux, "flags : 0x%x", flags1);
+ GST_LOG_OBJECT (demux, "multiple payloads: %u", has_multiple_payloads);
+ GST_LOG_OBJECT (demux, "packet length : %u", packet.length);
+ GST_LOG_OBJECT (demux, "sequence : %u", packet.sequence);
+ GST_LOG_OBJECT (demux, "padding : %u", packet.padding);
+ GST_LOG_OBJECT (demux, "send time : %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (packet.send_time));
+
+ GST_LOG_OBJECT (demux, "duration : %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (packet.duration));
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+ && demux->seek_to_cur_pos == TRUE) {
+ /* For reverse playback, initially parse packets forward until we reach packet with 'seek' timestamp */
+ if (packet.send_time - demux->preroll > demux->segment.stop) {
+ demux->seek_to_cur_pos = FALSE;
+ }
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
+ goto done;
+ }
+
+ if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) {
+ GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+ goto done;
+ }
+
+ size -= packet.padding;
+
+ /* adjust available size for parsing if there's less actual packet data for
+ * parsing than there is data in bytes (for sample see bug 431318) */
+ if (G_UNLIKELY (packet.length != 0 && packet.padding == 0
+ && packet.length < demux->packet_size)) {
+ GST_LOG_OBJECT (demux, "shortened packet with implicit padding, "
+ "adjusting available data size");
+ if (size < demux->packet_size - packet.length) {
+ /* the buffer is smaller than the implicit padding */
+ GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+ goto done;
+ } else {
+ /* subtract the implicit padding */
+ size -= (demux->packet_size - packet.length);
+ }
+ }
+
+ if (has_multiple_payloads) {
+ guint i, num, lentype;
+ demux->multiple_payloads = TRUE;
+
+ if (G_UNLIKELY (size < 1)) {
+ GST_WARNING_OBJECT (demux, "No room more in buffer");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+ goto done;
+ }
+
+ num = (GST_READ_UINT8 (data) & 0x3F) >> 0;
+ lentype = (GST_READ_UINT8 (data) & 0xC0) >> 6;
+
+ ++data;
+ --size;
+
+ GST_LOG_OBJECT (demux, "num payloads : %u", num);
+
+ for (i = 0; i < num; ++i) {
+ GST_LOG_OBJECT (demux, "Parsing payload %u/%u, size left: %u", i + 1, num,
+ size);
+
+ if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, lentype,
+ &data, &size))) {
+ GST_WARNING_OBJECT (demux, "Failed to parse payload %u/%u", i + 1, num);
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+ break;
+ }
+ }
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ /* In reverse playback, we parsed the packet (with multiple payloads) and stored the payloads in temporary queue.
+ Now, add them to the stream's payload queue */
+ for (i = 0; i < demux->num_streams; i++) {
+ AsfStream *s = &demux->stream[i];
+ while (s->payloads_rev->len > 0) {
+ AsfPayload *p;
+ p = &g_array_index (s->payloads_rev, AsfPayload,
+ s->payloads_rev->len - 1);
+ g_array_append_vals (s->payloads, p, 1);
+ if (GST_ASF_PAYLOAD_KF_COMPLETE (s, p)) {
+ /* Mark position of KF for reverse play */
+ s->kf_pos = s->payloads->len - 1;
+ }
+ g_array_remove_index (s->payloads_rev, (s->payloads_rev->len - 1));
+ }
+ }
+ }
+
+ } else {
+ GST_LOG_OBJECT (demux, "Parsing single payload");
+ demux->multiple_payloads = FALSE;
+ if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, -1, &data,
+ &size))) {
+ GST_WARNING_OBJECT (demux, "Failed to parse payload");
+ ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+ }
+ }
+
+done:
+ gst_buffer_unmap (buf, &map);
+ return ret;
+}
--- /dev/null
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __ASF_PACKET_H__
+#define __ASF_PACKET_H__
+
+#include <gst/gstbuffer.h>
+#include <gst/gstclock.h>
+
+#include "gstasfdemux.h"
+
+G_BEGIN_DECLS
+
+typedef struct {
+ gboolean keyframe; /* buffer flags might not survive merge.. */
+ guint mo_number; /* media object number (unused) */
+ guint mo_offset; /* offset (timestamp for compressed data) */
+ guint mo_size; /* size of media-object-to-be, or 0 */
+ guint buf_filled; /* how much of the mo data we got so far */
+ GstBuffer *buf; /* buffer to assemble media-object or NULL*/
+ guint rep_data_len; /* should never be more than 256, since */
+ guint8 rep_data[256]; /* the length should be stored in a byte */
+ GstClockTime ts;
+ GstClockTime duration; /* is not always available */
+ guint8 par_x; /* not always available (0:deactivated) */
+ guint8 par_y; /* not always available (0:deactivated) */
+ gboolean interlaced; /* default: FALSE */
+ gboolean tff;
+ gboolean rff;
+} AsfPayload;
+
+typedef struct {
+ GstBuffer *buf;
+ const guint8 *bdata;
+ guint length; /* packet length (unused) */
+ guint padding; /* length of padding at end of packet */
+ guint sequence; /* sequence (unused) */
+ GstClockTime send_time;
+ GstClockTime duration;
+
+ guint8 prop_flags; /* payload length types */
+} AsfPacket;
+
+typedef enum {
+ GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE,
+ GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE,
+ GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL
+} GstAsfDemuxParsePacketError;
+
+GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf);
+
+#define gst_asf_payload_is_complete(payload) \
+ ((payload)->buf_filled >= (payload)->mo_size)
+
+G_END_DECLS
+
+#endif /* __ASF_PACKET_H__ */
+
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/riff/riff-read.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include "gstasfelements.h"
+
+
+/* #include "gstasfmux.h" */
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gboolean ret = FALSE;
+
+ ret |= GST_ELEMENT_REGISTER (asfdemux, plugin);
+ ret |= GST_ELEMENT_REGISTER (rtspwms, plugin);
+ ret |= GST_ELEMENT_REGISTER (rtpasfdepay, plugin);
+/*
+ if (!gst_element_register (plugin, "asfmux", GST_RANK_NONE, GST_TYPE_ASFMUX))
+ return FALSE;
+*/
+ return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ asf,
+ "Demuxes and muxes audio and video in Microsofts ASF format",
+ plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
--- /dev/null
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006-2009 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* TODO:
+ *
+ * - _loop():
+ * stop if at end of segment if != end of file, ie. demux->segment.stop
+ *
+ * - fix packet parsing:
+ * there's something wrong with timestamps for packets with keyframes,
+ * and durations too.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gstutils.h>
+#include <gst/base/gstbytereader.h>
+#include <gst/base/gsttypefindhelper.h>
+#include <gst/riff/riff-media.h>
+#include <gst/tag/tag.h>
+#include <gst/gst-i18n-plugin.h>
+#include <gst/video/video.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstasfelements.h"
+#include "gstasfdemux.h"
+#include "asfheaders.h"
+#include "asfpacket.h"
+
+GST_DEBUG_CATEGORY (asfdemux_dbg);
+#define GST_CAT_DEFAULT asfdemux_dbg
+
+static GstStaticPadTemplate gst_asf_demux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-ms-asf")
+ );
+
+static GstStaticPadTemplate audio_src_template =
+GST_STATIC_PAD_TEMPLATE ("audio_%u",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate video_src_template =
+GST_STATIC_PAD_TEMPLATE ("video_%u",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS_ANY);
+
+/* size of an ASF object header, ie. GUID (16 bytes) + object size (8 bytes) */
+#define ASF_OBJECT_HEADER_SIZE (16+8)
+
+/* FIXME: get rid of this */
+/* abuse this GstFlowReturn enum for internal usage */
+#define ASF_FLOW_NEED_MORE_DATA 99
+
+#define gst_asf_get_flow_name(flow) \
+ (flow == ASF_FLOW_NEED_MORE_DATA) ? \
+ "need-more-data" : gst_flow_get_name (flow)
+
+static void gst_asf_demux_finalize (GObject * object);
+static GstStateChangeReturn gst_asf_demux_change_state (GstElement * element,
+ GstStateChange transition);
+static gboolean gst_asf_demux_element_send_event (GstElement * element,
+ GstEvent * event);
+static gboolean gst_asf_demux_send_event_unlocked (GstASFDemux * demux,
+ GstEvent * event);
+static gboolean gst_asf_demux_handle_src_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
+static GstFlowReturn gst_asf_demux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean gst_asf_demux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_asf_demux_process_object (GstASFDemux * demux,
+ guint8 ** p_data, guint64 * p_size);
+static gboolean gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent);
+static gboolean gst_asf_demux_activate_mode (GstPad * sinkpad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static void gst_asf_demux_loop (GstASFDemux * demux);
+static void
+gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux);
+static gboolean gst_asf_demux_pull_headers (GstASFDemux * demux,
+ GstFlowReturn * pflow);
+static GstFlowReturn gst_asf_demux_pull_indices (GstASFDemux * demux);
+static void gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * asf);
+static gboolean
+gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data);
+static void gst_asf_demux_descramble_buffer (GstASFDemux * demux,
+ AsfStream * stream, GstBuffer ** p_buffer);
+static void gst_asf_demux_activate_stream (GstASFDemux * demux,
+ AsfStream * stream);
+static GstStructure *gst_asf_demux_get_metadata_for_stream (GstASFDemux * d,
+ guint stream_num);
+static GstFlowReturn gst_asf_demux_push_complete_payloads (GstASFDemux * demux,
+ gboolean force);
+
+#define gst_asf_demux_parent_class parent_class
+G_DEFINE_TYPE (GstASFDemux, gst_asf_demux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (asfdemux, "asfdemux", GST_RANK_SECONDARY,
+ GST_TYPE_ASF_DEMUX, asf_element_init (plugin));
+
+static void
+gst_asf_demux_class_init (GstASFDemuxClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_asf_demux_finalize;
+
+ gst_element_class_set_static_metadata (gstelement_class, "ASF Demuxer",
+ "Codec/Demuxer",
+ "Demultiplexes ASF Streams", "Owen Fraser-Green <owen@discobabe.net>");
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &audio_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &video_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_asf_demux_sink_template);
+
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_asf_demux_change_state);
+ gstelement_class->send_event =
+ GST_DEBUG_FUNCPTR (gst_asf_demux_element_send_event);
+}
+
+static void
+gst_asf_demux_free_stream (GstASFDemux * demux, AsfStream * stream)
+{
+ gst_caps_replace (&stream->caps, NULL);
+ if (stream->pending_tags) {
+ gst_tag_list_unref (stream->pending_tags);
+ stream->pending_tags = NULL;
+ }
+ if (stream->streamheader) {
+ gst_buffer_unref (stream->streamheader);
+ stream->streamheader = NULL;
+ }
+ if (stream->pad) {
+ if (stream->active) {
+ gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
+ gst_flow_combiner_remove_pad (demux->flowcombiner, stream->pad);
+ } else
+ gst_object_unref (stream->pad);
+ stream->pad = NULL;
+ }
+
+ if (stream->payloads) {
+ while (stream->payloads->len > 0) {
+ AsfPayload *payload;
+ guint last;
+
+ last = stream->payloads->len - 1;
+ payload = &g_array_index (stream->payloads, AsfPayload, last);
+ gst_buffer_replace (&payload->buf, NULL);
+ g_array_remove_index (stream->payloads, last);
+ }
+ g_array_free (stream->payloads, TRUE);
+ stream->payloads = NULL;
+ }
+
+ if (stream->payloads_rev) {
+ while (stream->payloads_rev->len > 0) {
+ AsfPayload *payload;
+ guint last;
+
+ last = stream->payloads_rev->len - 1;
+ payload = &g_array_index (stream->payloads_rev, AsfPayload, last);
+ gst_buffer_replace (&payload->buf, NULL);
+ g_array_remove_index (stream->payloads_rev, last);
+ }
+ g_array_free (stream->payloads_rev, TRUE);
+ stream->payloads_rev = NULL;
+ }
+
+ if (stream->ext_props.valid) {
+ g_free (stream->ext_props.payload_extensions);
+ stream->ext_props.payload_extensions = NULL;
+ }
+}
+
+static void
+gst_asf_demux_reset (GstASFDemux * demux, gboolean chain_reset)
+{
+ GST_LOG_OBJECT (demux, "resetting");
+
+ gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
+ demux->segment_running = FALSE;
+ if (demux->adapter && !chain_reset) {
+ gst_adapter_clear (demux->adapter);
+ g_object_unref (demux->adapter);
+ demux->adapter = NULL;
+ }
+ if (demux->taglist) {
+ gst_tag_list_unref (demux->taglist);
+ demux->taglist = NULL;
+ }
+ if (demux->metadata) {
+ gst_caps_unref (demux->metadata);
+ demux->metadata = NULL;
+ }
+ demux->metadata = gst_caps_new_empty ();
+ if (demux->global_metadata) {
+ gst_structure_free (demux->global_metadata);
+ demux->global_metadata = NULL;
+ }
+ demux->global_metadata = gst_structure_new_empty ("metadata");
+ if (demux->mut_ex_streams) {
+ g_slist_free (demux->mut_ex_streams);
+ demux->mut_ex_streams = NULL;
+ }
+
+ demux->state = GST_ASF_DEMUX_STATE_HEADER;
+ g_free (demux->objpath);
+ demux->objpath = NULL;
+ g_strfreev (demux->languages);
+ demux->languages = NULL;
+ demux->num_languages = 0;
+ g_slist_foreach (demux->ext_stream_props, (GFunc) gst_mini_object_unref,
+ NULL);
+ g_slist_free (demux->ext_stream_props);
+ demux->ext_stream_props = NULL;
+
+ while (demux->old_num_streams > 0) {
+ gst_asf_demux_free_stream (demux,
+ &demux->old_stream[demux->old_num_streams - 1]);
+ --demux->old_num_streams;
+ }
+ memset (demux->old_stream, 0, sizeof (demux->old_stream));
+ demux->old_num_streams = 0;
+
+ /* when resetting for a new chained asf, we don't want to remove the pads
+ * before adding the new ones */
+ if (chain_reset) {
+ memcpy (demux->old_stream, demux->stream, sizeof (demux->stream));
+ demux->old_num_streams = demux->num_streams;
+ demux->num_streams = 0;
+ }
+
+ while (demux->num_streams > 0) {
+ gst_asf_demux_free_stream (demux, &demux->stream[demux->num_streams - 1]);
+ --demux->num_streams;
+ }
+ memset (demux->stream, 0, sizeof (demux->stream));
+ if (!chain_reset) {
+ /* do not remove those for not adding pads with same name */
+ demux->num_audio_streams = 0;
+ demux->num_video_streams = 0;
+ demux->have_group_id = FALSE;
+ demux->group_id = G_MAXUINT;
+ }
+ demux->num_streams = 0;
+ demux->activated_streams = FALSE;
+ demux->first_ts = GST_CLOCK_TIME_NONE;
+ demux->segment_ts = GST_CLOCK_TIME_NONE;
+ demux->in_gap = 0;
+ if (!chain_reset)
+ gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
+ demux->state = GST_ASF_DEMUX_STATE_HEADER;
+ demux->seekable = FALSE;
+ demux->broadcast = FALSE;
+ demux->sidx_interval = 0;
+ demux->sidx_num_entries = 0;
+ g_free (demux->sidx_entries);
+ demux->sidx_entries = NULL;
+
+ demux->speed_packets = 1;
+
+ demux->asf_3D_mode = GST_ASF_3D_NONE;
+
+ if (chain_reset) {
+ GST_LOG_OBJECT (demux, "Restarting");
+ gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+ demux->need_newsegment = TRUE;
+ demux->segment_seqnum = 0;
+ demux->segment_running = FALSE;
+ demux->keyunit_sync = FALSE;
+ demux->accurate = FALSE;
+ demux->data_size = 0;
+ demux->data_offset = 0;
+ demux->index_offset = 0;
+ } else {
+ demux->base_offset = 0;
+ }
+
+ g_slist_free (demux->other_streams);
+ demux->other_streams = NULL;
+}
+
+static void
+gst_asf_demux_init (GstASFDemux * demux)
+{
+ demux->sinkpad =
+ gst_pad_new_from_static_template (&gst_asf_demux_sink_template, "sink");
+ gst_pad_set_chain_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_chain));
+ gst_pad_set_event_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_sink_event));
+ gst_pad_set_activate_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_activate));
+ gst_pad_set_activatemode_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
+ gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+
+ /* set initial state */
+ gst_asf_demux_reset (demux, FALSE);
+}
+
+static gboolean
+gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent)
+{
+ GstQuery *query;
+ gboolean pull_mode;
+
+ query = gst_query_new_scheduling ();
+
+ if (!gst_pad_peer_query (sinkpad, query)) {
+ gst_query_unref (query);
+ goto activate_push;
+ }
+
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+ gst_query_unref (query);
+
+ if (!pull_mode)
+ goto activate_push;
+
+ GST_DEBUG_OBJECT (sinkpad, "activating pull");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+ {
+ GST_DEBUG_OBJECT (sinkpad, "activating push");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
+}
+
+static gboolean
+gst_asf_demux_activate_mode (GstPad * sinkpad, GstObject * parent,
+ GstPadMode mode, gboolean active)
+{
+ gboolean res;
+ GstASFDemux *demux;
+
+ demux = GST_ASF_DEMUX (parent);
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ demux->state = GST_ASF_DEMUX_STATE_HEADER;
+ demux->streaming = TRUE;
+ res = TRUE;
+ break;
+ case GST_PAD_MODE_PULL:
+ if (active) {
+ demux->state = GST_ASF_DEMUX_STATE_HEADER;
+ demux->streaming = FALSE;
+
+ res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_asf_demux_loop,
+ demux, NULL);
+ } else {
+ res = gst_pad_stop_task (sinkpad);
+ }
+ break;
+ default:
+ res = FALSE;
+ break;
+ }
+ return res;
+}
+
+static gboolean
+gst_asf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstASFDemux *demux;
+ gboolean ret = TRUE;
+
+ demux = GST_ASF_DEMUX (parent);
+
+ GST_LOG_OBJECT (demux, "handling %s event", GST_EVENT_TYPE_NAME (event));
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:{
+ const GstSegment *segment;
+
+ gst_event_parse_segment (event, &segment);
+
+ if (segment->format == GST_FORMAT_BYTES) {
+ if (demux->packet_size && segment->start > demux->data_offset)
+ demux->packet = (segment->start - demux->data_offset) /
+ demux->packet_size;
+ else
+ demux->packet = 0;
+ } else if (segment->format == GST_FORMAT_TIME) {
+ /* do not know packet position, not really a problem */
+ demux->packet = -1;
+ } else {
+ GST_WARNING_OBJECT (demux, "unsupported newsegment format, ignoring");
+ gst_event_unref (event);
+ break;
+ }
+
+ /* record upstream segment for interpolation */
+ if (segment->format != demux->in_segment.format)
+ gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
+ gst_segment_copy_into (segment, &demux->in_segment);
+
+ /* in either case, clear some state and generate newsegment later on */
+ GST_OBJECT_LOCK (demux);
+ demux->segment_ts = GST_CLOCK_TIME_NONE;
+ demux->in_gap = GST_CLOCK_TIME_NONE;
+ demux->need_newsegment = TRUE;
+ demux->segment_seqnum = gst_event_get_seqnum (event);
+ gst_asf_demux_reset_stream_state_after_discont (demux);
+ /* if we seek back after reaching EOS, go back to packet reading state */
+ if (demux->data_offset > 0 && segment->start >= demux->data_offset
+ && demux->state == GST_ASF_DEMUX_STATE_INDEX) {
+ demux->state = GST_ASF_DEMUX_STATE_DATA;
+ }
+ GST_OBJECT_UNLOCK (demux);
+
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_EOS:{
+ GstFlowReturn flow;
+
+ if (demux->state == GST_ASF_DEMUX_STATE_HEADER) {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
+ (_("This stream contains no data.")),
+ ("got eos and didn't receive a complete header object"));
+ break;
+ }
+ flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
+ if (!demux->activated_streams) {
+ /* If we still haven't got activated streams, the file is most likely corrupt */
+ GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
+ (_("This stream contains no data.")),
+ ("got eos and didn't receive a complete header object"));
+ break;
+ }
+ if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
+ GST_ELEMENT_FLOW_ERROR (demux, flow);
+ break;
+ }
+
+ GST_OBJECT_LOCK (demux);
+ gst_adapter_clear (demux->adapter);
+ GST_OBJECT_UNLOCK (demux);
+ gst_asf_demux_send_event_unlocked (demux, event);
+ break;
+ }
+
+ case GST_EVENT_FLUSH_STOP:
+ GST_OBJECT_LOCK (demux);
+ gst_asf_demux_reset_stream_state_after_discont (demux);
+ GST_OBJECT_UNLOCK (demux);
+ gst_asf_demux_send_event_unlocked (demux, event);
+ /* upon activation, latency is no longer introduced, e.g. after seek */
+ if (demux->activated_streams)
+ demux->latency = 0;
+ break;
+
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_seek_index_lookup (GstASFDemux * demux, guint * packet,
+ GstClockTime seek_time, GstClockTime * p_idx_time, guint * speed,
+ gboolean next, gboolean * eos)
+{
+ GstClockTime idx_time;
+ guint idx;
+
+ if (eos)
+ *eos = FALSE;
+
+ if (G_UNLIKELY (demux->sidx_num_entries == 0 || demux->sidx_interval == 0))
+ return FALSE;
+
+ idx = (guint) ((seek_time + demux->preroll) / demux->sidx_interval);
+
+ if (next) {
+ /* if we want the next keyframe, we have to go forward till we find
+ a different packet number */
+ guint idx2;
+ if (idx >= demux->sidx_num_entries - 1) {
+ /* If we get here, we're asking for next keyframe after the last one. There isn't one. */
+ if (eos)
+ *eos = TRUE;
+ return FALSE;
+ }
+ for (idx2 = idx + 1; idx2 < demux->sidx_num_entries; ++idx2) {
+ if (demux->sidx_entries[idx].packet != demux->sidx_entries[idx2].packet) {
+ idx = idx2;
+ break;
+ }
+ }
+ }
+
+ if (G_UNLIKELY (idx >= demux->sidx_num_entries)) {
+ if (eos)
+ *eos = TRUE;
+ return FALSE;
+ }
+
+ *packet = demux->sidx_entries[idx].packet;
+ if (speed)
+ *speed = demux->sidx_entries[idx].count;
+
+ /* so we get closer to the actual time of the packet ... actually, let's not
+ * do this, since we throw away superfluous payloads before the seek position
+ * anyway; this way, our key unit seek 'snap resolution' is a bit better
+ * (ie. same as index resolution) */
+ /*
+ while (idx > 0 && demux->sidx_entries[idx-1] == demux->sidx_entries[idx])
+ --idx;
+ */
+
+ idx_time = demux->sidx_interval * idx;
+ if (G_LIKELY (idx_time >= demux->preroll))
+ idx_time -= demux->preroll;
+
+ GST_DEBUG_OBJECT (demux, "%" GST_TIME_FORMAT " => packet %u at %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (seek_time), *packet,
+ GST_TIME_ARGS (idx_time));
+
+ if (G_LIKELY (p_idx_time))
+ *p_idx_time = idx_time;
+
+ return TRUE;
+}
+
+static void
+gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * demux)
+{
+ guint n;
+
+ gst_adapter_clear (demux->adapter);
+
+ GST_DEBUG_OBJECT (demux, "reset stream state");
+
+ gst_flow_combiner_reset (demux->flowcombiner);
+ for (n = 0; n < demux->num_streams; n++) {
+ demux->stream[n].discont = TRUE;
+ demux->stream[n].first_buffer = TRUE;
+
+ while (demux->stream[n].payloads->len > 0) {
+ AsfPayload *payload;
+ guint last;
+
+ last = demux->stream[n].payloads->len - 1;
+ payload = &g_array_index (demux->stream[n].payloads, AsfPayload, last);
+ gst_buffer_replace (&payload->buf, NULL);
+ g_array_remove_index (demux->stream[n].payloads, last);
+ }
+ }
+}
+
+static void
+gst_asf_demux_mark_discont (GstASFDemux * demux)
+{
+ guint n;
+
+ GST_DEBUG_OBJECT (demux, "Mark stream discont");
+
+ for (n = 0; n < demux->num_streams; n++)
+ demux->stream[n].discont = TRUE;
+}
+
+/* do a seek in push based mode */
+static gboolean
+gst_asf_demux_handle_seek_push (GstASFDemux * demux, GstEvent * event)
+{
+ gdouble rate;
+ GstFormat format;
+ GstSeekFlags flags;
+ GstSeekType cur_type, stop_type;
+ gint64 cur, stop;
+ guint packet;
+ gboolean res;
+ GstEvent *byte_event;
+
+ gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+ &stop_type, &stop);
+
+ stop_type = GST_SEEK_TYPE_NONE;
+ stop = -1;
+
+ GST_DEBUG_OBJECT (demux, "seeking to %" GST_TIME_FORMAT, GST_TIME_ARGS (cur));
+
+ /* determine packet, by index or by estimation */
+ if (!gst_asf_demux_seek_index_lookup (demux, &packet, cur, NULL, NULL, FALSE,
+ NULL)) {
+ packet =
+ (guint) gst_util_uint64_scale (demux->num_packets, cur,
+ demux->play_time);
+ }
+
+ if (packet > demux->num_packets) {
+ GST_DEBUG_OBJECT (demux, "could not determine packet to seek to, "
+ "seek aborted.");
+ return FALSE;
+ }
+
+ GST_DEBUG_OBJECT (demux, "seeking to packet %d", packet);
+
+ cur = demux->data_offset + ((guint64) packet * demux->packet_size);
+
+ GST_DEBUG_OBJECT (demux, "Pushing BYTE seek rate %g, "
+ "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT, rate, cur, stop);
+ /* BYTE seek event */
+ byte_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type,
+ cur, stop_type, stop);
+ gst_event_set_seqnum (byte_event, gst_event_get_seqnum (event));
+ res = gst_pad_push_event (demux->sinkpad, byte_event);
+
+ return res;
+}
+
+static gboolean
+gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event)
+{
+ gboolean ret = TRUE;
+ GstClockTime idx_time;
+ GstSegment segment;
+ GstSeekFlags flags;
+ GstSeekType cur_type, stop_type;
+ GstFormat format;
+ gboolean only_need_update;
+ gboolean after, before, next;
+ gboolean flush;
+ gdouble rate;
+ gint64 cur, stop;
+ gint64 seek_time;
+ guint packet, speed_count = 1;
+ gboolean eos;
+ guint32 seqnum;
+ GstEvent *fevent;
+ gint i;
+
+ gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+ &stop_type, &stop);
+
+ if (G_UNLIKELY (format != GST_FORMAT_TIME)) {
+ GST_LOG_OBJECT (demux, "seeking is only supported in TIME format");
+ return FALSE;
+ }
+
+ if (G_UNLIKELY (demux->seekable == FALSE || demux->packet_size == 0 ||
+ demux->num_packets == 0 || demux->play_time == 0)) {
+ GST_LOG_OBJECT (demux, "stream is not seekable");
+ return FALSE;
+ }
+
+ if (G_UNLIKELY (!demux->activated_streams)) {
+ GST_LOG_OBJECT (demux, "streams not yet activated, ignoring seek");
+ return FALSE;
+ }
+
+ if (G_UNLIKELY (rate <= 0.0)) {
+ GST_LOG_OBJECT (demux, "backward playback");
+ demux->seek_to_cur_pos = TRUE;
+ for (i = 0; i < demux->num_streams; i++) {
+ demux->stream[i].reverse_kf_ready = FALSE;
+ }
+ }
+
+ seqnum = gst_event_get_seqnum (event);
+ flush = ((flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH);
+ demux->accurate =
+ ((flags & GST_SEEK_FLAG_ACCURATE) == GST_SEEK_FLAG_ACCURATE);
+ demux->keyunit_sync =
+ ((flags & GST_SEEK_FLAG_KEY_UNIT) == GST_SEEK_FLAG_KEY_UNIT);
+ after = ((flags & GST_SEEK_FLAG_SNAP_AFTER) == GST_SEEK_FLAG_SNAP_AFTER);
+ before = ((flags & GST_SEEK_FLAG_SNAP_BEFORE) == GST_SEEK_FLAG_SNAP_BEFORE);
+ next = after && !before;
+
+ if (G_UNLIKELY (demux->streaming)) {
+ /* upstream might handle TIME seek, e.g. mms or rtsp, or not, e.g. http,
+ * so first try to let it handle the seek event. */
+ if (gst_pad_push_event (demux->sinkpad, gst_event_ref (event)))
+ return TRUE;
+
+ /* support it safely needs more segment handling, e.g. closing etc */
+ if (!flush) {
+ GST_LOG_OBJECT (demux, "streaming; non-flushing seek not supported");
+ return FALSE;
+ }
+ /* we can (re)construct the start later on, but not the end */
+ if (stop_type != GST_SEEK_TYPE_NONE &&
+ (stop_type != GST_SEEK_TYPE_SET || GST_CLOCK_TIME_IS_VALID (stop))) {
+ GST_LOG_OBJECT (demux, "streaming; end position must be NONE");
+ return FALSE;
+ }
+ return gst_asf_demux_handle_seek_push (demux, event);
+ }
+
+ /* unlock the streaming thread */
+ if (G_LIKELY (flush)) {
+ fevent = gst_event_new_flush_start ();
+
+ gst_event_set_seqnum (fevent, seqnum);
+ gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
+ gst_asf_demux_send_event_unlocked (demux, fevent);
+ } else {
+ gst_pad_pause_task (demux->sinkpad);
+ }
+
+ /* grab the stream lock so that streaming cannot continue, for
+ * non flushing seeks when the element is in PAUSED this could block
+ * forever */
+ GST_PAD_STREAM_LOCK (demux->sinkpad);
+
+ if (G_LIKELY (flush)) {
+ /* we now can stop flushing, since we have the stream lock now */
+ fevent = gst_event_new_flush_stop (TRUE);
+ gst_event_set_seqnum (fevent, seqnum);
+ gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
+ gst_asf_demux_send_event_unlocked (demux, fevent);
+ }
+
+ /* operating on copy of segment until we know the seek worked */
+ segment = demux->segment;
+
+ if (!gst_segment_do_seek (&segment, rate, format, flags, cur_type,
+ cur, stop_type, stop, &only_need_update)) {
+ ret = FALSE;
+ goto skip;
+ }
+
+ GST_DEBUG_OBJECT (demux, "seeking to time %" GST_TIME_FORMAT ", segment: "
+ "%" GST_SEGMENT_FORMAT, GST_TIME_ARGS (segment.start), &segment);
+
+ if (cur_type != GST_SEEK_TYPE_SET)
+ seek_time = segment.start;
+ else
+ seek_time = cur;
+
+ /* FIXME: should check the KEY_UNIT flag; need to adjust position to
+ * real start of data and segment_start to indexed time for key unit seek*/
+ if (G_UNLIKELY (!gst_asf_demux_seek_index_lookup (demux, &packet, seek_time,
+ &idx_time, &speed_count, next, &eos))) {
+ gint64 offset;
+
+ if (eos) {
+ demux->packet = demux->num_packets;
+ goto skip;
+ }
+
+ /* First try to query our source to see if it can convert for us. This is
+ the case when our source is an mms stream, notice that in this case
+ gstmms will do a time based seek to get the byte offset, this is not a
+ problem as the seek to this offset needs to happen anyway. */
+ if (gst_pad_peer_query_convert (demux->sinkpad, GST_FORMAT_TIME, seek_time,
+ GST_FORMAT_BYTES, &offset)) {
+ packet = (offset - demux->data_offset) / demux->packet_size;
+ GST_LOG_OBJECT (demux, "convert %" GST_TIME_FORMAT
+ " to bytes query result: %" G_GINT64_FORMAT ", data_ofset: %"
+ G_GINT64_FORMAT ", packet_size: %u," " resulting packet: %u\n",
+ GST_TIME_ARGS (seek_time), offset, demux->data_offset,
+ demux->packet_size, packet);
+ } else {
+ /* FIXME: For streams containing video, seek to an earlier position in
+ * the hope of hitting a keyframe and let the sinks throw away the stuff
+ * before the segment start. For audio-only this is unnecessary as every
+ * frame is 'key'. */
+ if (flush && (demux->accurate || (demux->keyunit_sync && !next))
+ && demux->num_video_streams > 0) {
+ seek_time -= 5 * GST_SECOND;
+ if (seek_time < 0)
+ seek_time = 0;
+ }
+
+ packet = (guint) gst_util_uint64_scale (demux->num_packets,
+ seek_time, demux->play_time);
+
+ if (packet > demux->num_packets)
+ packet = demux->num_packets;
+ }
+ } else {
+ if (G_LIKELY (demux->keyunit_sync && !demux->accurate)) {
+ GST_DEBUG_OBJECT (demux, "key unit seek, adjust seek_time = %"
+ GST_TIME_FORMAT " to index_time = %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (seek_time), GST_TIME_ARGS (idx_time));
+ segment.start = idx_time;
+ segment.position = idx_time;
+ segment.time = idx_time;
+ }
+ }
+
+ GST_DEBUG_OBJECT (demux, "seeking to packet %u (%d)", packet, speed_count);
+
+ GST_OBJECT_LOCK (demux);
+ demux->segment = segment;
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ demux->packet = (gint64) gst_util_uint64_scale (demux->num_packets,
+ stop, demux->play_time);
+ } else {
+ demux->packet = packet;
+ }
+
+ demux->need_newsegment = TRUE;
+ demux->segment_seqnum = seqnum;
+ demux->speed_packets =
+ GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) ? 1 : speed_count;
+ gst_asf_demux_reset_stream_state_after_discont (demux);
+ GST_OBJECT_UNLOCK (demux);
+
+skip:
+ /* restart our task since it might have been stopped when we did the flush */
+ gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_asf_demux_loop,
+ demux, NULL);
+
+ /* streaming can continue now */
+ GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_handle_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstASFDemux *demux;
+ gboolean ret;
+ guint32 seqnum;
+
+ demux = GST_ASF_DEMUX (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEEK:
+ GST_LOG_OBJECT (pad, "seek event");
+ seqnum = gst_event_get_seqnum (event);
+ if (demux->segment_seqnum == seqnum) {
+ GST_LOG_OBJECT (pad,
+ "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ }
+ ret = gst_asf_demux_handle_seek_event (demux, event);
+ gst_event_unref (event);
+ break;
+ case GST_EVENT_QOS:
+ case GST_EVENT_NAVIGATION:
+ /* just drop these two silently */
+ gst_event_unref (event);
+ ret = FALSE;
+ break;
+ default:
+ GST_LOG_OBJECT (pad, "%s event", GST_EVENT_TYPE_NAME (event));
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return ret;
+}
+
+static inline guint32
+gst_asf_demux_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
+{
+ guint32 ret;
+
+ ret = gst_asf_identify_guid (guids, guid);
+
+ GST_LOG ("%s 0x%08x-0x%08x-0x%08x-0x%08x",
+ gst_asf_get_guid_nick (guids, ret),
+ guid->v1, guid->v2, guid->v3, guid->v4);
+
+ return ret;
+}
+
+typedef struct
+{
+ AsfObjectID id;
+ guint64 size;
+} AsfObject;
+
+
+/* Peek for an object.
+ *
+ * Returns FALSE is the object is corrupted (such as the reported
+ * object size being greater than 2**32bits.
+ */
+static gboolean
+asf_demux_peek_object (GstASFDemux * demux, const guint8 * data,
+ guint data_len, AsfObject * object, gboolean expect)
+{
+ ASFGuid guid;
+
+ /* Callers should have made sure that data_len is big enough */
+ g_assert (data_len >= ASF_OBJECT_HEADER_SIZE);
+
+ if (data_len < ASF_OBJECT_HEADER_SIZE)
+ return FALSE;
+
+ guid.v1 = GST_READ_UINT32_LE (data + 0);
+ guid.v2 = GST_READ_UINT32_LE (data + 4);
+ guid.v3 = GST_READ_UINT32_LE (data + 8);
+ guid.v4 = GST_READ_UINT32_LE (data + 12);
+
+ /* FIXME: make asf_demux_identify_object_guid() */
+ object->id = gst_asf_demux_identify_guid (asf_object_guids, &guid);
+ if (object->id == ASF_OBJ_UNDEFINED && expect) {
+ GST_WARNING_OBJECT (demux, "Unknown object %08x-%08x-%08x-%08x",
+ guid.v1, guid.v2, guid.v3, guid.v4);
+ }
+
+ object->size = GST_READ_UINT64_LE (data + 16);
+ if (object->id != ASF_OBJ_DATA && object->size >= G_MAXUINT) {
+ GST_WARNING_OBJECT (demux,
+ "ASF Object size corrupted (greater than 32bit)");
+ return FALSE;
+ }
+
+
+ return TRUE;
+}
+
+static void
+gst_asf_demux_release_old_pads (GstASFDemux * demux)
+{
+ GST_DEBUG_OBJECT (demux, "Releasing old pads");
+
+ while (demux->old_num_streams > 0) {
+ gst_pad_push_event (demux->old_stream[demux->old_num_streams - 1].pad,
+ gst_event_new_eos ());
+ gst_asf_demux_free_stream (demux,
+ &demux->old_stream[demux->old_num_streams - 1]);
+ --demux->old_num_streams;
+ }
+ memset (demux->old_stream, 0, sizeof (demux->old_stream));
+ demux->old_num_streams = 0;
+}
+
+static GstFlowReturn
+gst_asf_demux_chain_headers (GstASFDemux * demux)
+{
+ AsfObject obj;
+ guint8 *header_data, *data = NULL;
+ const guint8 *cdata = NULL;
+ guint64 header_size;
+ GstFlowReturn flow = GST_FLOW_OK;
+
+ cdata = (guint8 *) gst_adapter_map (demux->adapter, ASF_OBJECT_HEADER_SIZE);
+ if (cdata == NULL)
+ goto need_more_data;
+
+ if (!asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, TRUE))
+ goto parse_failed;
+ if (obj.id != ASF_OBJ_HEADER)
+ goto wrong_type;
+
+ GST_LOG_OBJECT (demux, "header size = %u", (guint) obj.size);
+
+ /* + 50 for non-packet data at beginning of ASF_OBJ_DATA */
+ if (gst_adapter_available (demux->adapter) < obj.size + 50)
+ goto need_more_data;
+
+ data = gst_adapter_take (demux->adapter, obj.size + 50);
+
+ header_data = data;
+ header_size = obj.size;
+ flow = gst_asf_demux_process_object (demux, &header_data, &header_size);
+ if (flow != GST_FLOW_OK)
+ goto parse_failed;
+
+ /* calculate where the packet data starts */
+ demux->data_offset = obj.size + 50;
+
+ /* now parse the beginning of the ASF_OBJ_DATA object */
+ if (!gst_asf_demux_parse_data_object_start (demux, data + obj.size))
+ goto wrong_type;
+
+ if (demux->num_streams == 0)
+ goto no_streams;
+
+ g_free (data);
+ return GST_FLOW_OK;
+
+/* NON-FATAL */
+need_more_data:
+ {
+ GST_LOG_OBJECT (demux, "not enough data in adapter yet");
+ return GST_FLOW_OK;
+ }
+
+/* ERRORS */
+wrong_type:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+ ("This doesn't seem to be an ASF file"));
+ g_free (data);
+ return GST_FLOW_ERROR;
+ }
+no_streams:
+parse_failed:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("header parsing failed, or no streams found, flow = %s",
+ gst_flow_get_name (flow)));
+ g_free (data);
+ return GST_FLOW_ERROR;
+ }
+}
+
+static gboolean
+gst_asf_demux_pull_data (GstASFDemux * demux, guint64 offset, guint size,
+ GstBuffer ** p_buf, GstFlowReturn * p_flow)
+{
+ gsize buffer_size;
+ GstFlowReturn flow;
+
+ GST_LOG_OBJECT (demux, "pulling buffer at %" G_GUINT64_FORMAT "+%u",
+ offset, size);
+
+ flow = gst_pad_pull_range (demux->sinkpad, offset, size, p_buf);
+
+ if (G_LIKELY (p_flow))
+ *p_flow = flow;
+
+ if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+ GST_DEBUG_OBJECT (demux, "flow %s pulling buffer at %" G_GUINT64_FORMAT
+ "+%u", gst_flow_get_name (flow), offset, size);
+ *p_buf = NULL;
+ return FALSE;
+ }
+
+ g_assert (*p_buf != NULL);
+
+ buffer_size = gst_buffer_get_size (*p_buf);
+ if (G_UNLIKELY (buffer_size < size)) {
+ GST_DEBUG_OBJECT (demux, "short read pulling buffer at %" G_GUINT64_FORMAT
+ "+%u (got only %" G_GSIZE_FORMAT " bytes)", offset, size, buffer_size);
+ gst_buffer_unref (*p_buf);
+ if (G_LIKELY (p_flow))
+ *p_flow = GST_FLOW_EOS;
+ *p_buf = NULL;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_asf_demux_pull_indices (GstASFDemux * demux)
+{
+ GstBuffer *buf = NULL;
+ guint64 offset;
+ guint num_read = 0;
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ offset = demux->index_offset;
+
+ if (G_UNLIKELY (offset == 0)) {
+ GST_DEBUG_OBJECT (demux, "can't read indices, don't know index offset");
+ /* non-fatal */
+ return GST_FLOW_OK;
+ }
+
+ while (gst_asf_demux_pull_data (demux, offset, 16 + 8, &buf, NULL)) {
+ AsfObject obj;
+ GstMapInfo map;
+ guint8 *bufdata;
+ guint64 obj_size;
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ g_assert (map.size >= 16 + 8);
+ if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
+ GST_DEBUG_OBJECT (demux, "No valid object, corrupted index, ignoring");
+ GST_MEMDUMP_OBJECT (demux, "Corrupted index ?", map.data, MIN (map.size,
+ 64));
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+ /* Non-fatal, return */
+ break;
+ }
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+
+ /* check for sanity */
+ if (G_UNLIKELY (obj.size > (5 * 1024 * 1024))) {
+ GST_DEBUG_OBJECT (demux, "implausible index object size, bailing out");
+ break;
+ }
+
+ if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, offset, obj.size, &buf,
+ NULL)))
+ break;
+
+ GST_LOG_OBJECT (demux, "index object at offset 0x%" G_GINT64_MODIFIER "X"
+ ", size %u", offset, (guint) obj.size);
+
+ offset += obj.size; /* increase before _process_object changes it */
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ g_assert (map.size >= obj.size);
+ bufdata = (guint8 *) map.data;
+ obj_size = obj.size;
+ ret = gst_asf_demux_process_object (demux, &bufdata, &obj_size);
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+
+ if (ret == ASF_FLOW_NEED_MORE_DATA) {
+ /* Since indices are at the end of the file, if we need more data,
+ * we consider it as a non-fatal corrupted index */
+ ret = GST_FLOW_OK;
+ break;
+ }
+
+ if (G_UNLIKELY (ret != GST_FLOW_OK))
+ break;
+
+ ++num_read;
+ }
+
+ GST_DEBUG_OBJECT (demux, "read %u index objects , returning %s", num_read,
+ gst_flow_get_name (ret));
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data)
+{
+ AsfObject obj;
+
+ if (!asf_demux_peek_object (demux, data, 50, &obj, TRUE)) {
+ GST_WARNING_OBJECT (demux, "Corrupted data");
+ return FALSE;
+ }
+ if (obj.id != ASF_OBJ_DATA) {
+ GST_WARNING_OBJECT (demux, "headers not followed by a DATA object");
+ return FALSE;
+ }
+
+ demux->state = GST_ASF_DEMUX_STATE_DATA;
+
+ if (!demux->broadcast && obj.size > 50) {
+ demux->data_size = obj.size - 50;
+ /* CHECKME: for at least one file this is off by +158 bytes?! */
+ demux->index_offset = demux->data_offset + demux->data_size;
+ } else {
+ demux->data_size = 0;
+ demux->index_offset = 0;
+ }
+
+ demux->packet = 0;
+
+ if (!demux->broadcast) {
+ /* skip object header (24 bytes) and file GUID (16 bytes) */
+ demux->num_packets = GST_READ_UINT64_LE (data + (16 + 8) + 16);
+ } else {
+ demux->num_packets = 0;
+ }
+
+ if (demux->num_packets == 0)
+ demux->seekable = FALSE;
+
+ /* fallback in the unlikely case that headers are inconsistent, can't hurt */
+ if (demux->data_size == 0 && demux->num_packets > 0) {
+ demux->data_size = demux->num_packets * demux->packet_size;
+ demux->index_offset = demux->data_offset + demux->data_size;
+ }
+
+ /* process pending stream objects and create pads for those */
+ gst_asf_demux_process_queued_extended_stream_objects (demux);
+
+ GST_INFO_OBJECT (demux, "Stream has %" G_GUINT64_FORMAT " packets, "
+ "data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
+ ", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
+ demux->data_offset, demux->data_size, demux->index_offset);
+
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_pull_headers (GstASFDemux * demux, GstFlowReturn * pflow)
+{
+ GstFlowReturn flow = GST_FLOW_OK;
+ AsfObject obj;
+ GstBuffer *buf = NULL;
+ guint64 size;
+ GstMapInfo map;
+ guint8 *bufdata;
+
+ GST_LOG_OBJECT (demux, "reading headers");
+
+ /* pull HEADER object header, so we know its size */
+ if (!gst_asf_demux_pull_data (demux, demux->base_offset, 16 + 8, &buf, &flow))
+ goto read_failed;
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ g_assert (map.size >= 16 + 8);
+ if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+ flow = GST_FLOW_ERROR;
+ goto read_failed;
+ }
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+
+ if (obj.id != ASF_OBJ_HEADER)
+ goto wrong_type;
+
+ GST_LOG_OBJECT (demux, "header size = %" G_GUINT64_FORMAT, obj.size);
+
+ /* pull HEADER object */
+ if (!gst_asf_demux_pull_data (demux, demux->base_offset, obj.size, &buf,
+ &flow))
+ goto read_failed;
+
+ size = obj.size; /* don't want obj.size changed */
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ g_assert (map.size >= size);
+ bufdata = (guint8 *) map.data;
+ flow = gst_asf_demux_process_object (demux, &bufdata, &size);
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+
+ if (flow != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (demux, "process_object: %s", gst_flow_get_name (flow));
+ goto parse_failed;
+ }
+
+ /* calculate where the packet data starts */
+ demux->data_offset = demux->base_offset + obj.size + 50;
+
+ /* now pull beginning of DATA object before packet data */
+ if (!gst_asf_demux_pull_data (demux, demux->base_offset + obj.size, 50, &buf,
+ &flow))
+ goto read_failed;
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ g_assert (map.size >= size);
+ bufdata = (guint8 *) map.data;
+ if (!gst_asf_demux_parse_data_object_start (demux, bufdata))
+ goto wrong_type;
+
+ if (demux->num_streams == 0)
+ goto no_streams;
+
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+
+ return TRUE;
+
+/* ERRORS */
+wrong_type:
+ {
+ if (buf != NULL) {
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+ }
+ GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+ ("This doesn't seem to be an ASF file"));
+ *pflow = GST_FLOW_ERROR;
+ return FALSE;
+ }
+
+no_streams:
+ flow = GST_FLOW_ERROR;
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("header parsing failed, or no streams found, flow = %s",
+ gst_flow_get_name (flow)));
+read_failed:
+parse_failed:
+ {
+ if (buf)
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_replace (&buf, NULL);
+ if (flow == ASF_FLOW_NEED_MORE_DATA)
+ flow = GST_FLOW_ERROR;
+ *pflow = flow;
+ return FALSE;
+ }
+}
+
+static gboolean
+all_streams_prerolled (GstASFDemux * demux)
+{
+ GstClockTime preroll_time;
+ guint i, num_no_data = 0;
+ AsfStreamType prerolled_types = 0, all_types = 0;
+
+ /* Allow at least 500ms of preroll_time */
+ preroll_time = MAX (demux->preroll, 500 * GST_MSECOND);
+
+ /* returns TRUE as long as there isn't a stream which (a) has data queued
+ * and (b) the timestamp of last piece of data queued is < demux->preroll
+ * AND there is at least one other stream with data queued */
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfPayload *last_payload = NULL;
+ AsfStream *stream;
+ gint last_idx;
+
+ stream = &demux->stream[i];
+
+ all_types |= stream->type;
+
+ if (G_UNLIKELY (stream->payloads->len == 0)) {
+ ++num_no_data;
+ GST_LOG_OBJECT (stream->pad, "no data queued");
+ continue;
+ }
+
+ prerolled_types |= stream->type;
+
+ /* find last payload with timestamp */
+ for (last_idx = stream->payloads->len - 1;
+ last_idx >= 0 && (last_payload == NULL
+ || !GST_CLOCK_TIME_IS_VALID (last_payload->ts)); --last_idx) {
+ last_payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
+ }
+
+ GST_LOG_OBJECT (stream->pad, "checking if %" GST_TIME_FORMAT " > %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (last_payload->ts),
+ GST_TIME_ARGS (preroll_time));
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (last_payload->ts)
+ || last_payload->ts <= preroll_time)) {
+ GST_LOG_OBJECT (stream->pad, "not beyond preroll point yet");
+ return FALSE;
+ }
+ }
+
+ GST_LOG_OBJECT (demux, "all_types:%d prerolled_types:%d",
+ all_types, prerolled_types);
+
+ /* If streams of each present type have prerolled, we are good to go */
+ if (all_types != 0 && prerolled_types == all_types)
+ return TRUE;
+
+ if (G_UNLIKELY (num_no_data > 0))
+ return FALSE;
+
+ return TRUE;
+}
+
+#if 0
+static gboolean
+gst_asf_demux_have_mutually_exclusive_active_stream (GstASFDemux * demux,
+ AsfStream * stream)
+{
+ GSList *l;
+
+ for (l = demux->mut_ex_streams; l != NULL; l = l->next) {
+ guint8 *mes;
+
+ /* check for each mutual exclusion group whether it affects this stream */
+ for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
+ if (*mes == stream->id) {
+ /* we are in this group; let's check if we've already activated streams
+ * that are in the same group (and hence mutually exclusive to this
+ * one) */
+ for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
+ guint i;
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ if (demux->stream[i].id == *mes && demux->stream[i].active) {
+ GST_LOG_OBJECT (demux, "stream with ID %d is mutually exclusive "
+ "to already active stream with ID %d", stream->id,
+ demux->stream[i].id);
+ return TRUE;
+ }
+ }
+ }
+ /* we can only be in this group once, let's break out and move on to
+ * the next mutual exclusion group */
+ break;
+ }
+ }
+ }
+
+ return FALSE;
+}
+#endif
+
+static void
+gst_asf_demux_check_segment_ts (GstASFDemux * demux, GstClockTime payload_ts)
+{
+ /* remember the first queued timestamp for the segment */
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->segment_ts) &&
+ GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
+ GST_DEBUG_OBJECT (demux, "segment ts: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->first_ts));
+ demux->segment_ts = payload_ts;
+ /* always note, but only determines segment when streaming */
+ if (demux->streaming)
+ if (!gst_segment_do_seek (&demux->segment, demux->in_segment.rate,
+ GST_FORMAT_TIME, (GstSeekFlags) demux->segment.flags,
+ GST_SEEK_TYPE_SET, demux->segment_ts, GST_SEEK_TYPE_NONE, 0,
+ NULL)) {
+ GST_WARNING_OBJECT (demux, "Initial segment seek failed");
+ }
+ }
+}
+
+static gboolean
+gst_asf_demux_get_first_ts (GstASFDemux * demux)
+{
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
+ GstClockTime first_ts = GST_CLOCK_TIME_NONE;
+ int i;
+
+ /* go trhough each stream, find smallest timestamp */
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfStream *stream;
+ int j;
+ GstClockTime stream_min_ts = GST_CLOCK_TIME_NONE;
+ GstClockTime stream_min_ts2 = GST_CLOCK_TIME_NONE; /* second smallest timestamp */
+ stream = &demux->stream[i];
+
+ for (j = 0; j < stream->payloads->len; ++j) {
+ AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
+ if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+ (!GST_CLOCK_TIME_IS_VALID (stream_min_ts)
+ || stream_min_ts > payload->ts)) {
+ stream_min_ts = payload->ts;
+ }
+ if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+ payload->ts > stream_min_ts &&
+ (!GST_CLOCK_TIME_IS_VALID (stream_min_ts2)
+ || stream_min_ts2 > payload->ts)) {
+ stream_min_ts2 = payload->ts;
+ }
+ }
+
+ /* there are some DVR ms files where first packet has TS of 0 (instead of -1) while subsequent packets have
+ regular (singificantly larger) timestamps. If we don't deal with it, we may end up with huge gap in timestamps
+ which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues
+ from it. I haven't found a better way to distinguish between these two, except to set an arbitrary boundary
+ and disregard the first 0 timestamp if the second timestamp is bigger than the boundary) */
+
+ GST_DEBUG_OBJECT (demux,
+ "stream #%u stream_min_ts %" GST_TIME_FORMAT " stream_min_ts2 %"
+ GST_TIME_FORMAT, stream->id, GST_TIME_ARGS (stream_min_ts),
+ GST_TIME_ARGS (stream_min_ts2));
+
+ if (stream_min_ts == 0 && stream_min_ts2 > GST_SECOND) /* first timestamp is 0 and second is significantly larger, disregard the 0 */
+ stream_min_ts = stream_min_ts2;
+
+ if (GST_CLOCK_TIME_IS_VALID (stream_min_ts) &&
+ (!GST_CLOCK_TIME_IS_VALID (first_ts) || first_ts > stream_min_ts))
+ first_ts = stream_min_ts;
+ }
+
+ if (!GST_CLOCK_TIME_IS_VALID (first_ts)) /* can happen */
+ first_ts = 0;
+
+ demux->first_ts = first_ts;
+
+ /* update packets queued before we knew first timestamp */
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfStream *stream;
+ int j;
+ stream = &demux->stream[i];
+
+ for (j = 0; j < stream->payloads->len; ++j) {
+ AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
+ if (GST_CLOCK_TIME_IS_VALID (payload->ts)) {
+ if (payload->ts > first_ts)
+ payload->ts -= first_ts;
+ else
+ payload->ts = 0;
+ }
+ }
+ }
+ }
+
+ gst_asf_demux_check_segment_ts (demux, 0);
+
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_update_caps_from_payload (GstASFDemux * demux, AsfStream * stream)
+{
+ /* try to determine whether the stream is AC-3 or MPEG; In dvr-ms the codecTag is unreliable
+ and often set wrong, inspecting the data is the only way that seem to be working */
+ GstTypeFindProbability prob = GST_TYPE_FIND_NONE;
+ GstCaps *caps = NULL;
+ int i;
+ GstAdapter *adapter = gst_adapter_new ();
+
+ for (i = 0; i < stream->payloads->len && prob < GST_TYPE_FIND_LIKELY; ++i) {
+ const guint8 *data;
+ AsfPayload *payload;
+ int len;
+
+ payload = &g_array_index (stream->payloads, AsfPayload, i);
+ gst_adapter_push (adapter, gst_buffer_ref (payload->buf));
+ len = gst_adapter_available (adapter);
+ data = gst_adapter_map (adapter, len);
+
+ again:
+
+#define MIN_LENGTH 128
+
+ /* look for the sync points */
+ while (TRUE) {
+ if (len < MIN_LENGTH || /* give typefind something to work on */
+ (data[0] == 0x0b && data[1] == 0x77) || /* AC-3 sync point */
+ (data[0] == 0xFF && ((data[1] & 0xF0) >> 4) == 0xF)) /* MPEG sync point */
+ break;
+ ++data;
+ --len;
+ }
+
+ gst_caps_take (&caps, gst_type_find_helper_for_data (GST_OBJECT (demux),
+ data, len, &prob));
+
+ if (prob < GST_TYPE_FIND_LIKELY) {
+ ++data;
+ --len;
+ if (len > MIN_LENGTH)
+ /* this wasn't it, look for another sync point */
+ goto again;
+ }
+
+ gst_adapter_unmap (adapter);
+ }
+
+ gst_object_unref (adapter);
+
+ if (caps) {
+ gst_caps_take (&stream->caps, caps);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_asf_demux_check_activate_streams (GstASFDemux * demux, gboolean force)
+{
+ guint i, actual_streams = 0;
+
+ if (demux->activated_streams)
+ return TRUE;
+
+ if (!all_streams_prerolled (demux) && !force) {
+ GST_DEBUG_OBJECT (demux, "not all streams with data beyond preroll yet");
+ return FALSE;
+ }
+
+ if (G_UNLIKELY (!gst_asf_demux_get_first_ts (demux)))
+ return FALSE;
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfStream *stream = &demux->stream[i];
+
+ if (stream->payloads->len > 0) {
+
+ if (stream->inspect_payload && /* dvr-ms required payload inspection */
+ !stream->active && /* do not inspect active streams (caps were already set) */
+ !gst_asf_demux_update_caps_from_payload (demux, stream) && /* failed to determine caps */
+ stream->payloads->len < 20) { /* if we couldn't determine the caps from 20 packets then just give up and use whatever was in codecTag */
+ /* try to gather some more data */
+ return FALSE;
+ }
+ /* we don't check mutual exclusion stuff here; either we have data for
+ * a stream, then we active it, or we don't, then we'll ignore it */
+ GST_LOG_OBJECT (stream->pad, "is prerolled - activate!");
+ gst_asf_demux_activate_stream (demux, stream);
+ actual_streams += 1;
+ } else {
+ GST_LOG_OBJECT (stream->pad, "no data, ignoring stream");
+ }
+ }
+
+ if (actual_streams == 0) {
+ /* We don't have any streams activated ! */
+ GST_ERROR_OBJECT (demux, "No streams activated!");
+ return FALSE;
+ }
+
+ gst_asf_demux_release_old_pads (demux);
+
+ demux->activated_streams = TRUE;
+ GST_LOG_OBJECT (demux, "signalling no more pads");
+ gst_element_no_more_pads (GST_ELEMENT (demux));
+ return TRUE;
+}
+
+/* returns the stream that has a complete payload with the lowest timestamp
+ * queued, or NULL (we push things by timestamp because during the internal
+ * prerolling we might accumulate more data then the external queues can take,
+ * so we'd lock up if we pushed all accumulated data for stream N in one go) */
+static AsfStream *
+gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
+{
+ AsfPayload *best_payload = NULL;
+ AsfStream *best_stream = NULL;
+ guint i;
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfStream *stream;
+ int j;
+
+ stream = &demux->stream[i];
+
+ /* Don't push any data until we have at least one payload that falls within
+ * the current segment. This way we can remove out-of-segment payloads that
+ * don't need to be decoded after a seek, sending only data from the
+ * keyframe directly before our segment start */
+ if (stream->payloads->len > 0) {
+ AsfPayload *payload = NULL;
+ gint last_idx;
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ /* Reverse playback */
+
+ if (stream->is_video) {
+ /* We have to push payloads from KF to the first frame we accumulated (reverse order) */
+ if (stream->reverse_kf_ready) {
+ payload =
+ &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+ /* TODO : remove payload from the list? */
+ continue;
+ }
+ } else {
+ continue;
+ }
+ } else {
+ /* find first complete payload with timestamp */
+ for (j = stream->payloads->len - 1;
+ j >= 0 && (payload == NULL
+ || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --j) {
+ payload = &g_array_index (stream->payloads, AsfPayload, j);
+ }
+
+ /* If there's a complete payload queued for this stream */
+ if (!gst_asf_payload_is_complete (payload))
+ continue;
+
+ }
+ } else {
+
+ /* find last payload with timestamp */
+ for (last_idx = stream->payloads->len - 1;
+ last_idx >= 0 && (payload == NULL
+ || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --last_idx) {
+ payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
+ }
+
+ /* if this is first payload after seek we might need to update the segment */
+ if (GST_CLOCK_TIME_IS_VALID (payload->ts))
+ gst_asf_demux_check_segment_ts (demux, payload->ts);
+
+ if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+ (payload->ts < demux->segment.start))) {
+ if (G_UNLIKELY ((demux->keyunit_sync) && (!demux->accurate)
+ && payload->keyframe)) {
+ GST_DEBUG_OBJECT (stream->pad,
+ "Found keyframe, updating segment start to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (payload->ts));
+ demux->segment.start = payload->ts;
+ demux->segment.time = payload->ts;
+ } else {
+ GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
+ GST_TIME_FORMAT " which is before our segment start %"
+ GST_TIME_FORMAT ", not pushing yet",
+ GST_TIME_ARGS (payload->ts),
+ GST_TIME_ARGS (demux->segment.start));
+ continue;
+ }
+ }
+ payload = NULL;
+ /* find first complete payload with timestamp */
+ for (j = 0;
+ j < stream->payloads->len && (payload == NULL
+ || !GST_CLOCK_TIME_IS_VALID (payload->ts)); ++j) {
+ payload = &g_array_index (stream->payloads, AsfPayload, j);
+ }
+
+ /* Now see if there's a complete payload queued for this stream */
+ if (!gst_asf_payload_is_complete (payload))
+ continue;
+ }
+
+ /* ... and whether its timestamp is lower than the current best */
+ if (best_stream == NULL || best_payload->ts > payload->ts) {
+ best_stream = stream;
+ best_payload = payload;
+ }
+ }
+ }
+
+ return best_stream;
+}
+
+static GstFlowReturn
+gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force)
+{
+ AsfStream *stream;
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ if (G_UNLIKELY (!demux->activated_streams)) {
+ if (!gst_asf_demux_check_activate_streams (demux, force))
+ return GST_FLOW_OK;
+ /* streams are now activated */
+ }
+
+ while ((stream = gst_asf_demux_find_stream_with_complete_payload (demux))) {
+ AsfPayload *payload;
+ GstClockTime timestamp = GST_CLOCK_TIME_NONE;
+ GstClockTime duration = GST_CLOCK_TIME_NONE;
+
+ /* wait until we had a chance to "lock on" some payload's timestamp */
+ if (G_UNLIKELY (demux->need_newsegment
+ && !GST_CLOCK_TIME_IS_VALID (demux->segment_ts)))
+ return GST_FLOW_OK;
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
+ && stream->payloads->len) {
+ payload = &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
+ } else {
+ payload = &g_array_index (stream->payloads, AsfPayload, 0);
+ }
+
+ /* do we need to send a newsegment event */
+ if ((G_UNLIKELY (demux->need_newsegment))) {
+ GstEvent *segment_event;
+
+ /* safe default if insufficient upstream info */
+ if (!GST_CLOCK_TIME_IS_VALID (demux->in_gap))
+ demux->in_gap = 0;
+
+ if (demux->segment.stop == GST_CLOCK_TIME_NONE &&
+ demux->segment.duration > 0) {
+ /* slight HACK; prevent clipping of last bit */
+ demux->segment.stop = demux->segment.duration + demux->in_gap;
+ }
+
+ /* FIXME : only if ACCURATE ! */
+ if (G_LIKELY (demux->keyunit_sync && !demux->accurate
+ && (GST_CLOCK_TIME_IS_VALID (payload->ts)))
+ && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ GST_DEBUG ("Adjusting newsegment start to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (payload->ts));
+ demux->segment.start = payload->ts;
+ demux->segment.time = payload->ts;
+ }
+
+ GST_DEBUG_OBJECT (demux, "sending new-segment event %" GST_SEGMENT_FORMAT,
+ &demux->segment);
+
+ /* note: we fix up all timestamps to start from 0, so this should be ok */
+ segment_event = gst_event_new_segment (&demux->segment);
+ if (demux->segment_seqnum)
+ gst_event_set_seqnum (segment_event, demux->segment_seqnum);
+ gst_asf_demux_send_event_unlocked (demux, segment_event);
+
+ /* now post any global tags we may have found */
+ if (demux->taglist == NULL) {
+ demux->taglist = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+ }
+
+ gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
+ GST_TAG_CONTAINER_FORMAT, "ASF", NULL);
+
+ GST_DEBUG_OBJECT (demux, "global tags: %" GST_PTR_FORMAT, demux->taglist);
+ gst_asf_demux_send_event_unlocked (demux,
+ gst_event_new_tag (demux->taglist));
+ demux->taglist = NULL;
+
+ demux->need_newsegment = FALSE;
+ demux->segment_running = TRUE;
+ }
+
+ /* Do we have tags pending for this stream? */
+ if (G_UNLIKELY (stream->pending_tags)) {
+ GST_LOG_OBJECT (stream->pad, "%" GST_PTR_FORMAT, stream->pending_tags);
+ gst_pad_push_event (stream->pad,
+ gst_event_new_tag (stream->pending_tags));
+ stream->pending_tags = NULL;
+ }
+
+ /* We have the whole packet now so we should push the packet to
+ * the src pad now. First though we should check if we need to do
+ * descrambling */
+ if (G_UNLIKELY (stream->span > 1)) {
+ gst_asf_demux_descramble_buffer (demux, stream, &payload->buf);
+ }
+
+ payload->buf = gst_buffer_make_writable (payload->buf);
+
+ if (G_LIKELY (!payload->keyframe)) {
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DELTA_UNIT);
+ }
+
+ if (G_UNLIKELY (stream->discont)) {
+ GST_DEBUG_OBJECT (stream->pad, "marking DISCONT on stream");
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+
+ if (G_UNLIKELY (stream->is_video && payload->par_x && payload->par_y &&
+ (payload->par_x != stream->par_x) &&
+ (payload->par_y != stream->par_y))) {
+ GST_DEBUG ("Updating PAR (%d/%d => %d/%d)",
+ stream->par_x, stream->par_y, payload->par_x, payload->par_y);
+ stream->par_x = payload->par_x;
+ stream->par_y = payload->par_y;
+ stream->caps = gst_caps_make_writable (stream->caps);
+ gst_caps_set_simple (stream->caps, "pixel-aspect-ratio",
+ GST_TYPE_FRACTION, stream->par_x, stream->par_y, NULL);
+ gst_pad_set_caps (stream->pad, stream->caps);
+ }
+
+ if (G_UNLIKELY (stream->interlaced != payload->interlaced)) {
+ GST_DEBUG ("Updating interlaced status (%d => %d)", stream->interlaced,
+ payload->interlaced);
+ stream->interlaced = payload->interlaced;
+ stream->caps = gst_caps_make_writable (stream->caps);
+ gst_caps_set_simple (stream->caps, "interlace-mode", G_TYPE_BOOLEAN,
+ (stream->interlaced ? "mixed" : "progressive"), NULL);
+ gst_pad_set_caps (stream->pad, stream->caps);
+ }
+
+ /* (sort of) interpolate timestamps using upstream "frame of reference",
+ * typically useful for live src, but might (unavoidably) mess with
+ * position reporting if a live src is playing not so live content
+ * (e.g. rtspsrc taking some time to fall back to tcp) */
+ timestamp = payload->ts;
+ if (GST_CLOCK_TIME_IS_VALID (timestamp)
+ && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ timestamp += demux->in_gap;
+
+ /* Check if we're after the segment already, if so no need to push
+ * anything here */
+ if (demux->segment.stop != -1 && timestamp > demux->segment.stop) {
+ GST_DEBUG_OBJECT (stream->pad,
+ "Payload after segment stop %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->segment.stop));
+ ret =
+ gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
+ GST_FLOW_EOS);
+ gst_buffer_unref (payload->buf);
+ payload->buf = NULL;
+ g_array_remove_index (stream->payloads, 0);
+ /* Break out as soon as we have an issue */
+ if (G_UNLIKELY (ret != GST_FLOW_OK))
+ break;
+
+ continue;
+ }
+ }
+
+ GST_BUFFER_PTS (payload->buf) = timestamp;
+
+ if (payload->duration == GST_CLOCK_TIME_NONE
+ && stream->ext_props.avg_time_per_frame != 0) {
+ duration = stream->ext_props.avg_time_per_frame * 100;
+ } else {
+ duration = payload->duration;
+ }
+ GST_BUFFER_DURATION (payload->buf) = duration;
+
+ /* FIXME: we should really set durations on buffers if we can */
+
+ GST_LOG_OBJECT (stream->pad, "pushing buffer, %" GST_PTR_FORMAT,
+ payload->buf);
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video) {
+ if (stream->reverse_kf_ready == TRUE && stream->kf_pos == 0) {
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+ }
+ } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+ GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+ }
+
+
+ if (stream->active) {
+ if (G_UNLIKELY (stream->first_buffer)) {
+ if (stream->streamheader != NULL) {
+ GST_DEBUG_OBJECT (stream->pad,
+ "Pushing streamheader before first buffer");
+ gst_pad_push (stream->pad, gst_buffer_ref (stream->streamheader));
+ }
+ stream->first_buffer = FALSE;
+ }
+
+ if (GST_CLOCK_TIME_IS_VALID (timestamp)
+ && timestamp > demux->segment.position) {
+ demux->segment.position = timestamp;
+ if (GST_CLOCK_TIME_IS_VALID (duration))
+ demux->segment.position += timestamp;
+ }
+
+ ret = gst_pad_push (stream->pad, payload->buf);
+ ret =
+ gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
+ ret);
+ } else {
+ gst_buffer_unref (payload->buf);
+ ret = GST_FLOW_OK;
+ }
+ payload->buf = NULL;
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
+ && stream->reverse_kf_ready) {
+ g_array_remove_index (stream->payloads, stream->kf_pos);
+ stream->kf_pos--;
+
+ if (stream->reverse_kf_ready == TRUE && stream->kf_pos < 0) {
+ stream->kf_pos = 0;
+ stream->reverse_kf_ready = FALSE;
+ }
+ } else {
+ g_array_remove_index (stream->payloads, 0);
+ }
+
+ /* Break out as soon as we have an issue */
+ if (G_UNLIKELY (ret != GST_FLOW_OK))
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_check_buffer_is_header (GstASFDemux * demux, GstBuffer * buf)
+{
+ AsfObject obj;
+ GstMapInfo map;
+ gboolean valid;
+ g_assert (buf != NULL);
+
+ GST_LOG_OBJECT (demux, "Checking if buffer is a header");
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+
+ /* we return false on buffer too small */
+ if (map.size < ASF_OBJECT_HEADER_SIZE) {
+ gst_buffer_unmap (buf, &map);
+ return FALSE;
+ }
+
+ /* check if it is a header */
+ valid =
+ asf_demux_peek_object (demux, map.data, ASF_OBJECT_HEADER_SIZE, &obj,
+ TRUE);
+ gst_buffer_unmap (buf, &map);
+ if (valid && obj.id == ASF_OBJ_HEADER) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+gst_asf_demux_check_chained_asf (GstASFDemux * demux)
+{
+ guint64 off = demux->data_offset + (demux->packet * demux->packet_size);
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstBuffer *buf = NULL;
+ gboolean header = FALSE;
+
+ /* TODO maybe we should skip index objects after the data and look
+ * further for a new header */
+ if (gst_asf_demux_pull_data (demux, off, ASF_OBJECT_HEADER_SIZE, &buf, &ret)) {
+ g_assert (buf != NULL);
+ /* check if it is a header */
+ if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
+ GST_DEBUG_OBJECT (demux, "new base offset: %" G_GUINT64_FORMAT, off);
+ demux->base_offset = off;
+ header = TRUE;
+ }
+
+ gst_buffer_unref (buf);
+ }
+
+ return header;
+}
+
+static void
+gst_asf_demux_loop (GstASFDemux * demux)
+{
+ GstFlowReturn flow = GST_FLOW_OK;
+ GstBuffer *buf = NULL;
+ guint64 off;
+
+ if (G_UNLIKELY (demux->state == GST_ASF_DEMUX_STATE_HEADER)) {
+ if (!gst_asf_demux_pull_headers (demux, &flow)) {
+ goto pause;
+ }
+
+ flow = gst_asf_demux_pull_indices (demux);
+ if (flow != GST_FLOW_OK)
+ goto pause;
+ }
+
+ g_assert (demux->state == GST_ASF_DEMUX_STATE_DATA);
+
+ if (G_UNLIKELY (demux->num_packets != 0
+ && demux->packet >= demux->num_packets))
+ goto eos;
+
+ GST_LOG_OBJECT (demux, "packet %u/%u", (guint) demux->packet + 1,
+ (guint) demux->num_packets);
+
+ off = demux->data_offset + (demux->packet * demux->packet_size);
+
+ if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, off,
+ demux->packet_size * demux->speed_packets, &buf, &flow))) {
+ GST_DEBUG_OBJECT (demux, "got flow %s", gst_flow_get_name (flow));
+ if (flow == GST_FLOW_EOS) {
+ goto eos;
+ } else if (flow == GST_FLOW_FLUSHING) {
+ GST_DEBUG_OBJECT (demux, "Not fatal");
+ goto pause;
+ } else {
+ goto read_failed;
+ }
+ }
+
+ if (G_LIKELY (demux->speed_packets == 1)) {
+ GstAsfDemuxParsePacketError err;
+ err = gst_asf_demux_parse_packet (demux, buf);
+ if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
+ /* when we don't know when the data object ends, we should check
+ * for a chained asf */
+ if (demux->num_packets == 0) {
+ if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
+ GST_INFO_OBJECT (demux, "Chained asf found");
+ demux->base_offset = off;
+ gst_asf_demux_reset (demux, TRUE);
+ gst_buffer_unref (buf);
+ return;
+ }
+ }
+ /* FIXME: We should tally up fatal errors and error out only
+ * after a few broken packets in a row? */
+
+ GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
+ gst_buffer_unref (buf);
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+ && !demux->seek_to_cur_pos) {
+ --demux->packet;
+ if (demux->packet < 0) {
+ goto eos;
+ }
+ } else {
+ ++demux->packet;
+ }
+
+ return;
+ }
+
+ flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
+
+ if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+ && !demux->seek_to_cur_pos) {
+ --demux->packet;
+ if (demux->packet < 0) {
+ goto eos;
+ }
+ } else {
+ ++demux->packet;
+ }
+
+ } else {
+ guint n;
+ for (n = 0; n < demux->speed_packets; n++) {
+ GstBuffer *sub;
+ GstAsfDemuxParsePacketError err;
+
+ sub =
+ gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
+ n * demux->packet_size, demux->packet_size);
+ err = gst_asf_demux_parse_packet (demux, sub);
+ if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
+ /* when we don't know when the data object ends, we should check
+ * for a chained asf */
+ if (demux->num_packets == 0) {
+ if (gst_asf_demux_check_buffer_is_header (demux, sub)) {
+ GST_INFO_OBJECT (demux, "Chained asf found");
+ demux->base_offset = off + n * demux->packet_size;
+ gst_asf_demux_reset (demux, TRUE);
+ gst_buffer_unref (sub);
+ gst_buffer_unref (buf);
+ return;
+ }
+ }
+ /* FIXME: We should tally up fatal errors and error out only
+ * after a few broken packets in a row? */
+
+ GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
+ flow = GST_FLOW_OK;
+ }
+
+ gst_buffer_unref (sub);
+
+ if (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)
+ flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
+
+ ++demux->packet;
+
+ }
+
+ /* reset speed pull */
+ demux->speed_packets = 1;
+ }
+
+ gst_buffer_unref (buf);
+
+ if (G_UNLIKELY ((demux->num_packets > 0
+ && demux->packet >= demux->num_packets)
+ || flow == GST_FLOW_EOS)) {
+ GST_LOG_OBJECT (demux, "reached EOS");
+ goto eos;
+ }
+
+ if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+ GST_DEBUG_OBJECT (demux, "pushing complete payloads failed");
+ goto pause;
+ }
+
+ /* check if we're at the end of the configured segment */
+ /* FIXME: check if segment end reached etc. */
+
+ return;
+
+eos:
+ {
+ /* if we haven't activated our streams yet, this might be because we have
+ * less data queued than required for preroll; force stream activation and
+ * send any pending payloads before sending EOS */
+ if (!demux->activated_streams)
+ flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
+
+ /* we want to push an eos or post a segment-done in any case */
+ if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ gint64 stop;
+
+ /* for segment playback we need to post when (in stream time)
+ * we stopped, this is either stop (when set) or the duration. */
+ if ((stop = demux->segment.stop) == -1)
+ stop = demux->segment.duration;
+
+ GST_INFO_OBJECT (demux, "Posting segment-done, at end of segment");
+ gst_element_post_message (GST_ELEMENT_CAST (demux),
+ gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
+ stop));
+ gst_asf_demux_send_event_unlocked (demux,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+ } else if (flow != GST_FLOW_EOS) {
+ /* check if we have a chained asf, in case, we don't eos yet */
+ if (gst_asf_demux_check_chained_asf (demux)) {
+ GST_INFO_OBJECT (demux, "Chained ASF starting");
+ gst_asf_demux_reset (demux, TRUE);
+ return;
+ }
+ }
+
+ if (!(demux->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
+ if (demux->activated_streams) {
+ /* normal playback, send EOS to all linked pads */
+ GST_INFO_OBJECT (demux, "Sending EOS, at end of stream");
+ gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+ } else {
+ GST_WARNING_OBJECT (demux, "EOS without exposed streams");
+ flow = GST_FLOW_EOS;
+ }
+ }
+ /* ... and fall through to pause */
+ }
+pause:
+ {
+ GST_DEBUG_OBJECT (demux, "pausing task, flow return: %s",
+ gst_flow_get_name (flow));
+ demux->segment_running = FALSE;
+ gst_pad_pause_task (demux->sinkpad);
+
+ /* For the error cases */
+ if (flow == GST_FLOW_EOS && !demux->activated_streams) {
+ GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+ ("This doesn't seem to be an ASF file"));
+ } else if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
+ /* Post an error. Hopefully something else already has, but if not... */
+ GST_ELEMENT_FLOW_ERROR (demux, flow);
+ gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+ }
+
+ return;
+ }
+
+/* ERRORS */
+read_failed:
+ {
+ GST_DEBUG_OBJECT (demux, "Read failed, doh");
+ flow = GST_FLOW_EOS;
+ goto pause;
+ }
+#if 0
+ /* See FIXMEs above */
+parse_error:
+ {
+ gst_buffer_unref (buf);
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("Error parsing ASF packet %u", (guint) demux->packet));
+ gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+ flow = GST_FLOW_ERROR;
+ goto pause;
+ }
+#endif
+}
+
+#define GST_ASF_DEMUX_CHECK_HEADER_YES 0
+#define GST_ASF_DEMUX_CHECK_HEADER_NO 1
+#define GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA 2
+
+static gint
+gst_asf_demux_check_header (GstASFDemux * demux)
+{
+ AsfObject obj;
+ guint8 *cdata = (guint8 *) gst_adapter_map (demux->adapter,
+ ASF_OBJECT_HEADER_SIZE);
+ if (cdata == NULL) /* need more data */
+ return GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA;
+
+ if (asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, FALSE)
+ && obj.id == ASF_OBJ_HEADER) {
+ return GST_ASF_DEMUX_CHECK_HEADER_YES;
+ }
+
+ return GST_ASF_DEMUX_CHECK_HEADER_NO;
+}
+
+static GstFlowReturn
+gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstASFDemux *demux;
+
+ demux = GST_ASF_DEMUX (parent);
+
+ GST_LOG_OBJECT (demux,
+ "buffer: size=%" G_GSIZE_FORMAT ", offset=%" G_GINT64_FORMAT ", time=%"
+ GST_TIME_FORMAT, gst_buffer_get_size (buf), GST_BUFFER_OFFSET (buf),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buf))) {
+ GST_DEBUG_OBJECT (demux, "received DISCONT");
+ gst_asf_demux_mark_discont (demux);
+ }
+
+ if (G_UNLIKELY ((!GST_CLOCK_TIME_IS_VALID (demux->in_gap) &&
+ GST_BUFFER_TIMESTAMP_IS_VALID (buf)))) {
+ demux->in_gap = GST_BUFFER_TIMESTAMP (buf) - demux->in_segment.start;
+ GST_DEBUG_OBJECT (demux, "upstream segment start %" GST_TIME_FORMAT
+ ", interpolation gap: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->in_segment.start), GST_TIME_ARGS (demux->in_gap));
+ }
+
+ gst_adapter_push (demux->adapter, buf);
+
+ switch (demux->state) {
+ case GST_ASF_DEMUX_STATE_INDEX:{
+ gint result = gst_asf_demux_check_header (demux);
+ if (result == GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA) /* need more data */
+ break;
+
+ if (result == GST_ASF_DEMUX_CHECK_HEADER_NO) {
+ /* we don't care about this, probably an index */
+ /* TODO maybe would be smarter to skip all the indices
+ * until we got a new header or EOS to decide */
+ GST_LOG_OBJECT (demux, "Received index object, its EOS");
+ goto eos;
+ } else {
+ GST_INFO_OBJECT (demux, "Chained asf starting");
+ /* cleanup and get ready for a chained asf */
+ gst_asf_demux_reset (demux, TRUE);
+ /* fall through */
+ }
+ }
+ case GST_ASF_DEMUX_STATE_HEADER:{
+ ret = gst_asf_demux_chain_headers (demux);
+ if (demux->state != GST_ASF_DEMUX_STATE_DATA)
+ break;
+ /* otherwise fall through */
+ }
+ case GST_ASF_DEMUX_STATE_DATA:
+ {
+ guint64 data_size;
+
+ data_size = demux->packet_size;
+
+ while (gst_adapter_available (demux->adapter) >= data_size) {
+ GstBuffer *buf;
+ GstAsfDemuxParsePacketError err;
+
+ /* we don't know the length of the stream
+ * check for a chained asf every time */
+ if (demux->num_packets == 0) {
+ gint result = gst_asf_demux_check_header (demux);
+
+ if (result == GST_ASF_DEMUX_CHECK_HEADER_YES) {
+ GST_INFO_OBJECT (demux, "Chained asf starting");
+ /* cleanup and get ready for a chained asf */
+ gst_asf_demux_reset (demux, TRUE);
+ break;
+ }
+ } else if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
+ && demux->packet >= demux->num_packets)) {
+ /* do not overshoot data section when streaming */
+ break;
+ }
+
+ buf = gst_adapter_take_buffer (demux->adapter, data_size);
+
+ /* FIXME: We should tally up fatal errors and error out only
+ * after a few broken packets in a row? */
+ err = gst_asf_demux_parse_packet (demux, buf);
+
+ gst_buffer_unref (buf);
+
+ if (G_LIKELY (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE))
+ ret = gst_asf_demux_push_complete_payloads (demux, FALSE);
+ else
+ GST_WARNING_OBJECT (demux, "Parse error");
+
+ if (demux->packet >= 0)
+ ++demux->packet;
+ }
+ if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
+ && demux->packet >= demux->num_packets)) {
+ demux->state = GST_ASF_DEMUX_STATE_INDEX;
+ }
+ break;
+ }
+ default:
+ g_assert_not_reached ();
+ }
+
+done:
+ if (ret != GST_FLOW_OK)
+ GST_DEBUG_OBJECT (demux, "flow: %s", gst_flow_get_name (ret));
+
+ return ret;
+
+eos:
+ {
+ GST_DEBUG_OBJECT (demux, "Handled last packet, setting EOS");
+ ret = GST_FLOW_EOS;
+ goto done;
+ }
+}
+
+static inline gboolean
+gst_asf_demux_skip_bytes (guint num_bytes, guint8 ** p_data, guint64 * p_size)
+{
+ if (*p_size < num_bytes)
+ return FALSE;
+
+ *p_data += num_bytes;
+ *p_size -= num_bytes;
+ return TRUE;
+}
+
+static inline guint8
+gst_asf_demux_get_uint8 (guint8 ** p_data, guint64 * p_size)
+{
+ guint8 ret;
+
+ g_assert (*p_size >= 1);
+ ret = GST_READ_UINT8 (*p_data);
+ *p_data += sizeof (guint8);
+ *p_size -= sizeof (guint8);
+ return ret;
+}
+
+static inline guint16
+gst_asf_demux_get_uint16 (guint8 ** p_data, guint64 * p_size)
+{
+ guint16 ret;
+
+ g_assert (*p_size >= 2);
+ ret = GST_READ_UINT16_LE (*p_data);
+ *p_data += sizeof (guint16);
+ *p_size -= sizeof (guint16);
+ return ret;
+}
+
+static inline guint32
+gst_asf_demux_get_uint32 (guint8 ** p_data, guint64 * p_size)
+{
+ guint32 ret;
+
+ g_assert (*p_size >= 4);
+ ret = GST_READ_UINT32_LE (*p_data);
+ *p_data += sizeof (guint32);
+ *p_size -= sizeof (guint32);
+ return ret;
+}
+
+static inline guint64
+gst_asf_demux_get_uint64 (guint8 ** p_data, guint64 * p_size)
+{
+ guint64 ret;
+
+ g_assert (*p_size >= 8);
+ ret = GST_READ_UINT64_LE (*p_data);
+ *p_data += sizeof (guint64);
+ *p_size -= sizeof (guint64);
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_get_buffer (GstBuffer ** p_buf, guint num_bytes_to_read,
+ guint8 ** p_data, guint64 * p_size)
+{
+ *p_buf = NULL;
+
+ if (*p_size < num_bytes_to_read)
+ return FALSE;
+
+ *p_buf = gst_buffer_new_and_alloc (num_bytes_to_read);
+ gst_buffer_fill (*p_buf, 0, *p_data, num_bytes_to_read);
+
+ *p_data += num_bytes_to_read;
+ *p_size -= num_bytes_to_read;
+
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_bytes (guint8 ** p_buf, guint64 num_bytes_to_read,
+ guint8 ** p_data, guint64 * p_size)
+{
+ *p_buf = NULL;
+
+ if (num_bytes_to_read >= G_MAXUINT)
+ return FALSE;
+
+ if (*p_size < num_bytes_to_read)
+ return FALSE;
+
+ *p_buf = g_memdup2 (*p_data, num_bytes_to_read);
+ *p_data += num_bytes_to_read;
+ *p_size -= num_bytes_to_read;
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_string (gchar ** p_str, guint16 * p_strlen,
+ guint8 ** p_data, guint64 * p_size)
+{
+ guint16 s_length;
+ guint8 *s;
+
+ *p_str = NULL;
+
+ if (*p_size < 2)
+ return FALSE;
+
+ s_length = gst_asf_demux_get_uint16 (p_data, p_size);
+
+ if (p_strlen)
+ *p_strlen = s_length;
+
+ if (s_length == 0) {
+ GST_WARNING ("zero-length string");
+ *p_str = g_strdup ("");
+ return TRUE;
+ }
+
+ if (!gst_asf_demux_get_bytes (&s, s_length, p_data, p_size))
+ return FALSE;
+
+ g_assert (s != NULL);
+
+ /* just because They don't exist doesn't
+ * mean They are not out to get you ... */
+ if (s[s_length - 1] != '\0') {
+ s = g_realloc (s, s_length + 1);
+ s[s_length] = '\0';
+ }
+
+ *p_str = (gchar *) s;
+ return TRUE;
+}
+
+
+static void
+gst_asf_demux_get_guid (ASFGuid * guid, guint8 ** p_data, guint64 * p_size)
+{
+ g_assert (*p_size >= 4 * sizeof (guint32));
+
+ guid->v1 = gst_asf_demux_get_uint32 (p_data, p_size);
+ guid->v2 = gst_asf_demux_get_uint32 (p_data, p_size);
+ guid->v3 = gst_asf_demux_get_uint32 (p_data, p_size);
+ guid->v4 = gst_asf_demux_get_uint32 (p_data, p_size);
+}
+
+static gboolean
+gst_asf_demux_get_stream_audio (asf_stream_audio * audio, guint8 ** p_data,
+ guint64 * p_size)
+{
+ if (*p_size < (2 + 2 + 4 + 4 + 2 + 2 + 2))
+ return FALSE;
+
+ /* WAVEFORMATEX Structure */
+ audio->codec_tag = gst_asf_demux_get_uint16 (p_data, p_size);
+ audio->channels = gst_asf_demux_get_uint16 (p_data, p_size);
+ audio->sample_rate = gst_asf_demux_get_uint32 (p_data, p_size);
+ audio->byte_rate = gst_asf_demux_get_uint32 (p_data, p_size);
+ audio->block_align = gst_asf_demux_get_uint16 (p_data, p_size);
+ audio->word_size = gst_asf_demux_get_uint16 (p_data, p_size);
+ /* Codec specific data size */
+ audio->size = gst_asf_demux_get_uint16 (p_data, p_size);
+ if (audio->size > *p_size) {
+ GST_WARNING ("Corrupted audio codec_data (should be at least %u bytes, is %"
+ G_GUINT64_FORMAT " long)", audio->size, *p_size);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_stream_video (asf_stream_video * video, guint8 ** p_data,
+ guint64 * p_size)
+{
+ if (*p_size < (4 + 4 + 1 + 2))
+ return FALSE;
+
+ video->width = gst_asf_demux_get_uint32 (p_data, p_size);
+ video->height = gst_asf_demux_get_uint32 (p_data, p_size);
+ video->unknown = gst_asf_demux_get_uint8 (p_data, p_size);
+ video->size = gst_asf_demux_get_uint16 (p_data, p_size);
+ return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_stream_video_format (asf_stream_video_format * fmt,
+ guint8 ** p_data, guint64 * p_size)
+{
+ if (*p_size < (4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4))
+ return FALSE;
+
+ fmt->size = gst_asf_demux_get_uint32 (p_data, p_size);
+ /* Sanity checks */
+ if (fmt->size < 40) {
+ GST_WARNING ("Corrupted asf_stream_video_format (size < 40)");
+ return FALSE;
+ }
+ if ((guint64) fmt->size - 4 > *p_size) {
+ GST_WARNING ("Corrupted asf_stream_video_format (codec_data is too small)");
+ return FALSE;
+ }
+ fmt->width = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->height = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->planes = gst_asf_demux_get_uint16 (p_data, p_size);
+ fmt->depth = gst_asf_demux_get_uint16 (p_data, p_size);
+ fmt->tag = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->image_size = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->xpels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->ypels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->num_colors = gst_asf_demux_get_uint32 (p_data, p_size);
+ fmt->imp_colors = gst_asf_demux_get_uint32 (p_data, p_size);
+ return TRUE;
+}
+
+AsfStream *
+gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id)
+{
+ guint i;
+
+ for (i = 0; i < demux->num_streams; i++) {
+ if (demux->stream[i].id == id)
+ return &demux->stream[i];
+ }
+
+ if (gst_asf_demux_is_unknown_stream (demux, id))
+ GST_WARNING ("Segment found for undefined stream: (%d)", id);
+ return NULL;
+}
+
+static AsfStream *
+gst_asf_demux_setup_pad (GstASFDemux * demux, GstPad * src_pad,
+ GstCaps * caps, guint16 id, gboolean is_video, GstBuffer * streamheader,
+ GstTagList * tags)
+{
+ AsfStream *stream;
+
+ gst_pad_use_fixed_caps (src_pad);
+ gst_pad_set_caps (src_pad, caps);
+
+ gst_pad_set_event_function (src_pad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_event));
+ gst_pad_set_query_function (src_pad,
+ GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_query));
+
+ stream = &demux->stream[demux->num_streams];
+ stream->caps = caps;
+ stream->pad = src_pad;
+ stream->id = id;
+ stream->fps_known = !is_video; /* bit hacky for audio */
+ stream->is_video = is_video;
+ stream->pending_tags = tags;
+ stream->discont = TRUE;
+ stream->first_buffer = TRUE;
+ stream->streamheader = streamheader;
+ if (stream->streamheader) {
+ stream->streamheader = gst_buffer_make_writable (streamheader);
+ GST_BUFFER_FLAG_SET (stream->streamheader, GST_BUFFER_FLAG_HEADER);
+ }
+ if (is_video) {
+ GstStructure *st;
+ gint par_x, par_y;
+ st = gst_caps_get_structure (caps, 0);
+ if (gst_structure_get_fraction (st, "pixel-aspect-ratio", &par_x, &par_y) &&
+ par_x > 0 && par_y > 0) {
+ GST_DEBUG ("PAR %d/%d", par_x, par_y);
+ stream->par_x = par_x;
+ stream->par_y = par_y;
+ }
+ }
+
+ stream->payloads = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
+
+ /* TODO: create this array during reverse play? */
+ stream->payloads_rev = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
+
+ GST_INFO ("Created pad %s for stream %u with caps %" GST_PTR_FORMAT,
+ GST_PAD_NAME (src_pad), demux->num_streams, caps);
+
+ ++demux->num_streams;
+
+ stream->active = FALSE;
+
+ return stream;
+}
+
+static void
+gst_asf_demux_add_stream_headers_to_caps (GstASFDemux * demux,
+ GstBuffer * buffer, GstStructure * structure)
+{
+ GValue arr_val = G_VALUE_INIT;
+ GValue buf_val = G_VALUE_INIT;
+
+ g_value_init (&arr_val, GST_TYPE_ARRAY);
+ g_value_init (&buf_val, GST_TYPE_BUFFER);
+
+ gst_value_set_buffer (&buf_val, buffer);
+ gst_value_array_append_and_take_value (&arr_val, &buf_val);
+
+ gst_structure_take_value (structure, "streamheader", &arr_val);
+}
+
+static AsfStream *
+gst_asf_demux_add_audio_stream (GstASFDemux * demux,
+ asf_stream_audio * audio, guint16 id, guint8 ** p_data, guint64 * p_size)
+{
+ GstTagList *tags = NULL;
+ GstBuffer *extradata = NULL;
+ GstPad *src_pad;
+ GstCaps *caps;
+ guint16 size_left = 0;
+ gchar *codec_name = NULL;
+ gchar *name = NULL;
+
+ size_left = audio->size;
+
+ /* Create the audio pad */
+ name = g_strdup_printf ("audio_%u", demux->num_audio_streams);
+
+ src_pad = gst_pad_new_from_static_template (&audio_src_template, name);
+ g_free (name);
+
+ /* Swallow up any left over data and set up the
+ * standard properties from the header info */
+ if (size_left) {
+ GST_INFO_OBJECT (demux, "Audio header contains %d bytes of "
+ "codec specific data", size_left);
+
+ g_assert (size_left <= *p_size);
+ gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
+ }
+
+ /* asf_stream_audio is the same as gst_riff_strf_auds, but with an
+ * additional two bytes indicating extradata. */
+ /* FIXME: Handle the channel reorder map here */
+ caps = gst_riff_create_audio_caps (audio->codec_tag, NULL,
+ (gst_riff_strf_auds *) audio, extradata, NULL, &codec_name, NULL);
+
+ if (caps == NULL) {
+ caps = gst_caps_new_simple ("audio/x-asf-unknown", "codec_id",
+ G_TYPE_INT, (gint) audio->codec_tag, NULL);
+ }
+
+ /* Informing about that audio format we just added */
+ if (codec_name) {
+ tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, codec_name, NULL);
+ g_free (codec_name);
+ }
+
+ if (audio->byte_rate > 0) {
+ /* Some ASF files have no bitrate props object (often seen with
+ * ASF files that contain raw audio data). Example files can
+ * be generated with FFmpeg (tested with v2.8.6), like this:
+ *
+ * ffmpeg -i sine-wave.wav -c:a pcm_alaw file.asf
+ *
+ * In this case, if audio->byte_rate is nonzero, use that as
+ * the bitrate. */
+
+ guint bitrate = audio->byte_rate * 8;
+
+ if (tags == NULL)
+ tags = gst_tag_list_new_empty ();
+
+ /* Add bitrate, but only if there is none set already, since
+ * this is just a fallback in case there is no bitrate tag
+ * already present */
+ gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_BITRATE, bitrate, NULL);
+ }
+
+ if (extradata)
+ gst_buffer_unref (extradata);
+
+ GST_INFO ("Adding audio stream #%u, id %u codec %u (0x%04x), tags=%"
+ GST_PTR_FORMAT, demux->num_audio_streams, id, audio->codec_tag,
+ audio->codec_tag, tags);
+
+ ++demux->num_audio_streams;
+
+ return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
+}
+
+static AsfStream *
+gst_asf_demux_add_video_stream (GstASFDemux * demux,
+ asf_stream_video_format * video, guint16 id,
+ guint8 ** p_data, guint64 * p_size)
+{
+ GstTagList *tags = NULL;
+ GstStructure *caps_s;
+ GstBuffer *extradata = NULL;
+ GstPad *src_pad;
+ GstCaps *caps;
+ gchar *str;
+ gchar *name = NULL;
+ gchar *codec_name = NULL;
+ guint64 size_left = video->size - 40;
+ GstBuffer *streamheader = NULL;
+ guint par_w = 1, par_h = 1;
+
+ /* Create the video pad */
+ name = g_strdup_printf ("video_%u", demux->num_video_streams);
+ src_pad = gst_pad_new_from_static_template (&video_src_template, name);
+ g_free (name);
+
+ /* Now try some gstreamer formatted MIME types (from gst_avi_demux_strf_vids) */
+ if (size_left) {
+ GST_LOG ("Video header has %" G_GUINT64_FORMAT
+ " bytes of codec specific data (vs %" G_GUINT64_FORMAT ")", size_left,
+ *p_size);
+ g_assert (size_left <= *p_size);
+ gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
+ }
+
+ GST_DEBUG ("video codec %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
+
+ /* yes, asf_stream_video_format and gst_riff_strf_vids are the same */
+ caps = gst_riff_create_video_caps (video->tag, NULL,
+ (gst_riff_strf_vids *) video, extradata, NULL, &codec_name);
+
+ if (caps == NULL) {
+ caps = gst_caps_new_simple ("video/x-asf-unknown", "fourcc",
+ G_TYPE_UINT, video->tag, NULL);
+ } else {
+ GstStructure *s;
+ gint ax, ay;
+
+ s = gst_asf_demux_get_metadata_for_stream (demux, id);
+ if (gst_structure_get_int (s, "AspectRatioX", &ax) &&
+ gst_structure_get_int (s, "AspectRatioY", &ay) && (ax > 0 && ay > 0)) {
+ par_w = ax;
+ par_h = ay;
+ gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+ ax, ay, NULL);
+ } else {
+ guint ax, ay;
+ /* retry with the global metadata */
+ GST_DEBUG ("Retrying with global metadata %" GST_PTR_FORMAT,
+ demux->global_metadata);
+ s = demux->global_metadata;
+ if (gst_structure_get_uint (s, "AspectRatioX", &ax) &&
+ gst_structure_get_uint (s, "AspectRatioY", &ay)) {
+ GST_DEBUG ("ax:%d, ay:%d", ax, ay);
+ if (ax > 0 && ay > 0) {
+ par_w = ax;
+ par_h = ay;
+ gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+ ax, ay, NULL);
+ }
+ }
+ }
+ s = gst_caps_get_structure (caps, 0);
+ gst_structure_remove_field (s, "framerate");
+ }
+
+ caps_s = gst_caps_get_structure (caps, 0);
+
+ /* add format field with fourcc to WMV/VC1 caps to differentiate variants */
+ if (gst_structure_has_name (caps_s, "video/x-wmv")) {
+ str = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
+ gst_caps_set_simple (caps, "format", G_TYPE_STRING, str, NULL);
+ g_free (str);
+
+ /* check if h264 has codec_data (avc) or streamheaders (bytestream) */
+ } else if (gst_structure_has_name (caps_s, "video/x-h264")) {
+ const GValue *value = gst_structure_get_value (caps_s, "codec_data");
+ if (value) {
+ GstBuffer *buf = gst_value_get_buffer (value);
+ GstMapInfo mapinfo;
+
+ if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
+ if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
+ /* this looks like a bytestream start */
+ streamheader = gst_buffer_ref (buf);
+ gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
+ gst_structure_remove_field (caps_s, "codec_data");
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING,
+ "byte-stream", NULL);
+ } else {
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "avc",
+ NULL);
+ }
+
+ gst_buffer_unmap (buf, &mapinfo);
+ }
+ } else {
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "byte-stream",
+ NULL);
+ }
+ }
+
+ /* For a 3D video, set multiview information into the caps based on
+ * what was detected during object parsing */
+ if (demux->asf_3D_mode != GST_ASF_3D_NONE) {
+ GstVideoMultiviewMode mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE;
+ GstVideoMultiviewFlags mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
+ const gchar *mview_mode_str;
+
+ switch (demux->asf_3D_mode) {
+ case GST_ASF_3D_SIDE_BY_SIDE_HALF_LR:
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+ break;
+ case GST_ASF_3D_SIDE_BY_SIDE_HALF_RL:
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+ mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
+ break;
+ case GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR:
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+ break;
+ case GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL:
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+ mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
+ break;
+ case GST_ASF_3D_DUAL_STREAM:{
+ gboolean is_right_view = FALSE;
+ /* if Advanced_Mutual_Exclusion object exists, use it
+ * to figure out which is the left view (lower ID) */
+ if (demux->mut_ex_streams != NULL) {
+ guint length;
+ gint i;
+
+ length = g_slist_length (demux->mut_ex_streams);
+
+ for (i = 0; i < length; i++) {
+ gpointer v_s_id;
+
+ v_s_id = g_slist_nth_data (demux->mut_ex_streams, i);
+
+ GST_DEBUG_OBJECT (demux,
+ "has Mutual_Exclusion object. stream id in object is %d",
+ GPOINTER_TO_INT (v_s_id));
+
+ if (id > GPOINTER_TO_INT (v_s_id))
+ is_right_view = TRUE;
+ }
+ } else {
+ /* if the Advaced_Mutual_Exclusion object doesn't exist, assume the
+ * first video stream encountered has the lower ID */
+ if (demux->num_video_streams > 0) {
+ /* This is not the first video stream, assuming right eye view */
+ is_right_view = TRUE;
+ }
+ }
+ if (is_right_view)
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_RIGHT;
+ else
+ mv_mode = GST_VIDEO_MULTIVIEW_MODE_LEFT;
+ break;
+ }
+ default:
+ break;
+ }
+
+ GST_INFO_OBJECT (demux,
+ "stream_id %d, has multiview-mode %d flags 0x%x", id, mv_mode,
+ (guint) mv_flags);
+
+ mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode);
+ if (mview_mode_str != NULL) {
+ if (gst_video_multiview_guess_half_aspect (mv_mode, video->width,
+ video->height, par_w, par_h))
+ mv_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
+
+ gst_caps_set_simple (caps,
+ "multiview-mode", G_TYPE_STRING, mview_mode_str,
+ "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags,
+ GST_FLAG_SET_MASK_EXACT, NULL);
+ }
+ }
+
+ if (codec_name) {
+ tags = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec_name, NULL);
+ g_free (codec_name);
+ }
+
+ if (extradata)
+ gst_buffer_unref (extradata);
+
+ GST_INFO ("Adding video stream #%u, id %u, codec %"
+ GST_FOURCC_FORMAT " (0x%08x)", demux->num_video_streams, id,
+ GST_FOURCC_ARGS (video->tag), video->tag);
+
+ ++demux->num_video_streams;
+
+ return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
+ streamheader, tags);
+}
+
+static void
+gst_asf_demux_activate_stream (GstASFDemux * demux, AsfStream * stream)
+{
+ if (!stream->active) {
+ GstEvent *event;
+ gchar *stream_id;
+
+ GST_INFO_OBJECT (demux, "Activating stream %2u, pad %s, caps %"
+ GST_PTR_FORMAT, stream->id, GST_PAD_NAME (stream->pad), stream->caps);
+ gst_pad_set_active (stream->pad, TRUE);
+
+ stream_id =
+ gst_pad_create_stream_id_printf (stream->pad, GST_ELEMENT_CAST (demux),
+ "%03u", stream->id);
+
+ event =
+ gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
+ if (event) {
+ if (gst_event_parse_group_id (event, &demux->group_id))
+ demux->have_group_id = TRUE;
+ else
+ demux->have_group_id = FALSE;
+ gst_event_unref (event);
+ } else if (!demux->have_group_id) {
+ demux->have_group_id = TRUE;
+ demux->group_id = gst_util_group_id_next ();
+ }
+
+ event = gst_event_new_stream_start (stream_id);
+ if (demux->have_group_id)
+ gst_event_set_group_id (event, demux->group_id);
+
+ gst_pad_push_event (stream->pad, event);
+ g_free (stream_id);
+ gst_pad_set_caps (stream->pad, stream->caps);
+
+ gst_element_add_pad (GST_ELEMENT_CAST (demux), stream->pad);
+ gst_flow_combiner_add_pad (demux->flowcombiner, stream->pad);
+ stream->active = TRUE;
+ }
+}
+
+static AsfStream *
+gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ AsfCorrectionType correction_type;
+ AsfStreamType stream_type;
+ GstClockTime time_offset;
+ gboolean is_encrypted G_GNUC_UNUSED;
+ guint16 stream_id;
+ guint16 flags;
+ ASFGuid guid;
+ guint stream_specific_size;
+ guint type_specific_size G_GNUC_UNUSED;
+ guint unknown G_GNUC_UNUSED;
+ gboolean inspect_payload = FALSE;
+ AsfStream *stream = NULL;
+
+ /* Get the rest of the header's header */
+ if (size < (16 + 16 + 8 + 4 + 4 + 2 + 4))
+ goto not_enough_data;
+
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ stream_type = gst_asf_demux_identify_guid (asf_stream_guids, &guid);
+
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ correction_type = gst_asf_demux_identify_guid (asf_correction_guids, &guid);
+
+ time_offset = gst_asf_demux_get_uint64 (&data, &size) * 100;
+
+ type_specific_size = gst_asf_demux_get_uint32 (&data, &size);
+ stream_specific_size = gst_asf_demux_get_uint32 (&data, &size);
+
+ flags = gst_asf_demux_get_uint16 (&data, &size);
+ stream_id = flags & 0x7f;
+ is_encrypted = ! !(flags & 0x8000);
+ unknown = gst_asf_demux_get_uint32 (&data, &size);
+
+ GST_DEBUG_OBJECT (demux, "Found stream %u, time_offset=%" GST_TIME_FORMAT,
+ stream_id, GST_TIME_ARGS (time_offset));
+
+ /* dvr-ms has audio stream declared in stream specific data */
+ if (stream_type == ASF_STREAM_EXT_EMBED_HEADER) {
+ AsfExtStreamType ext_stream_type;
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ ext_stream_type = gst_asf_demux_identify_guid (asf_ext_stream_guids, &guid);
+
+ if (ext_stream_type == ASF_EXT_STREAM_AUDIO) {
+ inspect_payload = TRUE;
+
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ gst_asf_demux_get_uint32 (&data, &size);
+ gst_asf_demux_get_uint32 (&data, &size);
+ gst_asf_demux_get_uint32 (&data, &size);
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ gst_asf_demux_get_uint32 (&data, &size);
+ stream_type = ASF_STREAM_AUDIO;
+ }
+ }
+
+ switch (stream_type) {
+ case ASF_STREAM_AUDIO:{
+ asf_stream_audio audio_object;
+
+ if (!gst_asf_demux_get_stream_audio (&audio_object, &data, &size))
+ goto not_enough_data;
+
+ GST_INFO ("Object is an audio stream with %u bytes of additional data",
+ audio_object.size);
+
+ stream = gst_asf_demux_add_audio_stream (demux, &audio_object, stream_id,
+ &data, &size);
+
+ switch (correction_type) {
+ case ASF_CORRECTION_ON:{
+ guint span, packet_size, chunk_size, data_size, silence_data;
+
+ GST_INFO ("Using error correction");
+
+ if (size < (1 + 2 + 2 + 2 + 1))
+ goto not_enough_data;
+
+ span = gst_asf_demux_get_uint8 (&data, &size);
+ packet_size = gst_asf_demux_get_uint16 (&data, &size);
+ chunk_size = gst_asf_demux_get_uint16 (&data, &size);
+ data_size = gst_asf_demux_get_uint16 (&data, &size);
+ silence_data = gst_asf_demux_get_uint8 (&data, &size);
+
+ stream->span = span;
+
+ GST_DEBUG_OBJECT (demux, "Descrambling ps:%u cs:%u ds:%u s:%u sd:%u",
+ packet_size, chunk_size, data_size, span, silence_data);
+
+ if (stream->span > 1) {
+ if (chunk_size == 0 || ((packet_size / chunk_size) <= 1)) {
+ /* Disable descrambling */
+ stream->span = 0;
+ } else {
+ /* FIXME: this else branch was added for
+ * weird_al_yankovic - the saga begins.asf */
+ stream->ds_packet_size = packet_size;
+ stream->ds_chunk_size = chunk_size;
+ }
+ } else {
+ /* Descambling is enabled */
+ stream->ds_packet_size = packet_size;
+ stream->ds_chunk_size = chunk_size;
+ }
+#if 0
+ /* Now skip the rest of the silence data */
+ if (data_size > 1)
+ gst_bytestream_flush (demux->bs, data_size - 1);
+#else
+ /* FIXME: CHECKME. And why -1? */
+ if (data_size > 1) {
+ if (!gst_asf_demux_skip_bytes (data_size - 1, &data, &size)) {
+ goto not_enough_data;
+ }
+ }
+#endif
+ break;
+ }
+ case ASF_CORRECTION_OFF:{
+ GST_INFO ("Error correction off");
+ if (!gst_asf_demux_skip_bytes (stream_specific_size, &data, &size))
+ goto not_enough_data;
+ break;
+ }
+ default:
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("Audio stream using unknown error correction"));
+ return NULL;
+ }
+
+ break;
+ }
+
+ case ASF_STREAM_VIDEO:{
+ asf_stream_video_format video_format_object;
+ asf_stream_video video_object;
+ guint16 vsize;
+
+ if (!gst_asf_demux_get_stream_video (&video_object, &data, &size))
+ goto not_enough_data;
+
+ vsize = video_object.size - 40; /* Byte order gets offset by single byte */
+
+ GST_INFO ("object is a video stream with %u bytes of "
+ "additional data", vsize);
+
+ if (!gst_asf_demux_get_stream_video_format (&video_format_object,
+ &data, &size)) {
+ goto not_enough_data;
+ }
+
+ stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
+ stream_id, &data, &size);
+
+ break;
+ }
+
+ default:
+ GST_WARNING_OBJECT (demux, "Unknown stream type for stream %u",
+ stream_id);
+ demux->other_streams =
+ g_slist_append (demux->other_streams, GINT_TO_POINTER (stream_id));
+ break;
+ }
+
+ if (stream) {
+ stream->inspect_payload = inspect_payload;
+ stream->type = stream_type;
+ }
+ return stream;
+
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "Unexpected end of data parsing stream object");
+ /* we'll error out later if we found no streams */
+ return NULL;
+ }
+}
+
+static const gchar *
+gst_asf_demux_get_gst_tag_from_tag_name (const gchar * name_utf8)
+{
+ /* *INDENT-OFF* */
+ const struct
+ {
+ const gchar *asf_name;
+ const gchar *gst_name;
+ } tags[] = {
+ {
+ "WM/Genre", GST_TAG_GENRE}, {
+ "WM/AlbumTitle", GST_TAG_ALBUM}, {
+ "WM/AlbumArtist", GST_TAG_ARTIST}, {
+ "WM/PartOfSet", GST_TAG_ALBUM_VOLUME_COUNT}, {
+ "WM/Picture", GST_TAG_IMAGE}, {
+ "WM/Track", GST_TAG_TRACK_NUMBER}, {
+ "WM/TrackNumber", GST_TAG_TRACK_NUMBER}, {
+ "WM/Year", GST_TAG_DATE_TIME}
+ /* { "WM/Composer", GST_TAG_COMPOSER } */
+ };
+ /* *INDENT-ON* */
+ gsize out;
+ guint i;
+
+ if (name_utf8 == NULL) {
+ GST_WARNING ("Failed to convert name to UTF8, skipping");
+ return NULL;
+ }
+
+ out = strlen (name_utf8);
+
+ for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+ if (strncmp (tags[i].asf_name, name_utf8, out) == 0) {
+ GST_LOG ("map tagname '%s' -> '%s'", name_utf8, tags[i].gst_name);
+ return tags[i].gst_name;
+ }
+ }
+
+ return NULL;
+}
+
+/* gst_asf_demux_add_global_tags() takes ownership of taglist! */
+static void
+gst_asf_demux_add_global_tags (GstASFDemux * demux, GstTagList * taglist)
+{
+ GstTagList *t;
+
+ GST_DEBUG_OBJECT (demux, "adding global tags: %" GST_PTR_FORMAT, taglist);
+
+ if (taglist == NULL)
+ return;
+
+ if (gst_tag_list_is_empty (taglist)) {
+ gst_tag_list_unref (taglist);
+ return;
+ }
+
+ t = gst_tag_list_merge (demux->taglist, taglist, GST_TAG_MERGE_APPEND);
+ gst_tag_list_set_scope (t, GST_TAG_SCOPE_GLOBAL);
+ if (demux->taglist)
+ gst_tag_list_unref (demux->taglist);
+ gst_tag_list_unref (taglist);
+ demux->taglist = t;
+ GST_LOG_OBJECT (demux, "global tags now: %" GST_PTR_FORMAT, demux->taglist);
+}
+
+#define ASF_DEMUX_DATA_TYPE_UTF16LE_STRING 0
+#define ASF_DEMUX_DATA_TYPE_BYTE_ARRAY 1
+#define ASF_DEMUX_DATA_TYPE_BOOL 2
+#define ASF_DEMUX_DATA_TYPE_DWORD 3
+
+static void
+asf_demux_parse_picture_tag (GstTagList * tags, const guint8 * tag_data,
+ guint tag_data_len)
+{
+ GstByteReader r;
+ const guint8 *img_data = NULL;
+ guint32 img_data_len = 0;
+ guint8 pic_type = 0;
+
+ gst_byte_reader_init (&r, tag_data, tag_data_len);
+
+ /* skip mime type string (we don't trust it and do our own typefinding),
+ * and also skip the description string, since we don't use it */
+ if (!gst_byte_reader_get_uint8 (&r, &pic_type) ||
+ !gst_byte_reader_get_uint32_le (&r, &img_data_len) ||
+ !gst_byte_reader_skip_string_utf16 (&r) ||
+ !gst_byte_reader_skip_string_utf16 (&r) ||
+ !gst_byte_reader_get_data (&r, img_data_len, &img_data)) {
+ goto not_enough_data;
+ }
+
+
+ if (!gst_tag_list_add_id3_image (tags, img_data, img_data_len, pic_type))
+ GST_DEBUG ("failed to add image extracted from WM/Picture tag to taglist");
+
+ return;
+
+not_enough_data:
+ {
+ GST_DEBUG ("Failed to read WM/Picture tag: not enough data");
+ GST_MEMDUMP ("WM/Picture data", tag_data, tag_data_len);
+ return;
+ }
+}
+
+/* Extended Content Description Object */
+static GstFlowReturn
+gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ /* Other known (and unused) 'text/unicode' metadata available :
+ *
+ * WM/Lyrics =
+ * WM/MediaPrimaryClassID = {D1607DBC-E323-4BE2-86A1-48A42A28441E}
+ * WMFSDKVersion = 9.00.00.2980
+ * WMFSDKNeeded = 0.0.0.0000
+ * WM/UniqueFileIdentifier = AMGa_id=R 15334;AMGp_id=P 5149;AMGt_id=T 2324984
+ * WM/Publisher = 4AD
+ * WM/Provider = AMG
+ * WM/ProviderRating = 8
+ * WM/ProviderStyle = Rock (similar to WM/Genre)
+ * WM/GenreID (similar to WM/Genre)
+ * WM/TrackNumber (same as WM/Track but as a string)
+ *
+ * Other known (and unused) 'non-text' metadata available :
+ *
+ * WM/EncodingTime
+ * WM/MCDI
+ * IsVBR
+ *
+ * We might want to read WM/TrackNumber and use atoi() if we don't have
+ * WM/Track
+ */
+
+ GstTagList *taglist;
+ guint16 blockcount, i;
+ gboolean content3D = FALSE;
+
+ /* *INDENT-OFF* */
+ struct
+ {
+ const gchar *interleave_name;
+ GstASF3DMode interleaving_type;
+ } stereoscopic_layout_map[] = {
+ {
+ "SideBySideRF", GST_ASF_3D_SIDE_BY_SIDE_HALF_RL}, {
+ "SideBySideLF", GST_ASF_3D_SIDE_BY_SIDE_HALF_LR}, {
+ "OverUnderRT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL}, {
+ "OverUnderLT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR}, {
+ "DualStream", GST_ASF_3D_DUAL_STREAM}
+ };
+ /* *INDENT-ON* */
+
+ GST_INFO_OBJECT (demux, "object is an extended content description");
+
+ taglist = gst_tag_list_new_empty ();
+
+ /* Content Descriptor Count */
+ if (size < 2)
+ goto not_enough_data;
+
+ blockcount = gst_asf_demux_get_uint16 (&data, &size);
+
+ for (i = 1; i <= blockcount; ++i) {
+ const gchar *gst_tag_name;
+ guint16 datatype;
+ guint16 value_len;
+ guint16 name_len;
+ GValue tag_value = { 0, };
+ gsize in, out;
+ gchar *name;
+ gchar *name_utf8 = NULL;
+ gchar *value;
+
+ /* Descriptor */
+ if (!gst_asf_demux_get_string (&name, &name_len, &data, &size))
+ goto not_enough_data;
+
+ if (size < 2) {
+ g_free (name);
+ goto not_enough_data;
+ }
+ /* Descriptor Value Data Type */
+ datatype = gst_asf_demux_get_uint16 (&data, &size);
+
+ /* Descriptor Value (not really a string, but same thing reading-wise) */
+ if (!gst_asf_demux_get_string (&value, &value_len, &data, &size)) {
+ g_free (name);
+ goto not_enough_data;
+ }
+
+ name_utf8 =
+ g_convert (name, name_len, "UTF-8", "UTF-16LE", &in, &out, NULL);
+
+ if (name_utf8 != NULL) {
+ GST_DEBUG ("Found tag/metadata %s", name_utf8);
+
+ gst_tag_name = gst_asf_demux_get_gst_tag_from_tag_name (name_utf8);
+ GST_DEBUG ("gst_tag_name %s", GST_STR_NULL (gst_tag_name));
+
+ switch (datatype) {
+ case ASF_DEMUX_DATA_TYPE_UTF16LE_STRING:{
+ gchar *value_utf8;
+
+ value_utf8 = g_convert (value, value_len, "UTF-8", "UTF-16LE",
+ &in, &out, NULL);
+
+ /* get rid of tags with empty value */
+ if (value_utf8 != NULL && *value_utf8 != '\0') {
+ GST_DEBUG ("string value %s", value_utf8);
+
+ value_utf8[out] = '\0';
+
+ if (gst_tag_name != NULL) {
+ if (strcmp (gst_tag_name, GST_TAG_DATE_TIME) == 0) {
+ guint year = atoi (value_utf8);
+
+ if (year > 0) {
+ g_value_init (&tag_value, GST_TYPE_DATE_TIME);
+ g_value_take_boxed (&tag_value, gst_date_time_new_y (year));
+ }
+ } else if (strcmp (gst_tag_name, GST_TAG_GENRE) == 0) {
+ guint id3v1_genre_id;
+ const gchar *genre_str;
+
+ if (sscanf (value_utf8, "(%u)", &id3v1_genre_id) == 1 &&
+ ((genre_str = gst_tag_id3_genre_get (id3v1_genre_id)))) {
+ GST_DEBUG ("Genre: %s -> %s", value_utf8, genre_str);
+ g_free (value_utf8);
+ value_utf8 = g_strdup (genre_str);
+ }
+ } else if (!strcmp (gst_tag_name, GST_TAG_ALBUM_VOLUME_COUNT)) {
+ guint num = 0, count = 0;
+
+ if (sscanf (value_utf8, "%u/%u", &num, &count) == 2
+ && num > 0 && num <= 99999 && count > 0 && count <= 99999) {
+ GST_DEBUG ("Disc %u of %u (%s)", num, count, value_utf8);
+ g_value_init (&tag_value, G_TYPE_UINT);
+ /* disc number */
+ g_value_set_uint (&tag_value, num);
+ gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
+ GST_TAG_ALBUM_VOLUME_NUMBER, &tag_value, NULL);
+ /* disc count (will be added to the taglist below) */
+ g_value_set_uint (&tag_value, count);
+ } else {
+ GST_DEBUG ("Couldn't parse PartOfSet value %s", value_utf8);
+ }
+ } else {
+ GType tag_type;
+
+ /* convert tag from string to other type if required */
+ tag_type = gst_tag_get_type (gst_tag_name);
+ g_value_init (&tag_value, tag_type);
+ if (!gst_value_deserialize (&tag_value, value_utf8)) {
+ GValue from_val = { 0, };
+
+ g_value_init (&from_val, G_TYPE_STRING);
+ g_value_set_string (&from_val, value_utf8);
+ if (!g_value_transform (&from_val, &tag_value)) {
+ GST_WARNING_OBJECT (demux,
+ "Could not transform string tag to " "%s tag type %s",
+ gst_tag_name, g_type_name (tag_type));
+ g_value_unset (&tag_value);
+ }
+ g_value_unset (&from_val);
+ }
+ }
+ } else {
+ /* metadata ! */
+ GST_DEBUG ("Setting metadata");
+ g_value_init (&tag_value, G_TYPE_STRING);
+ g_value_set_string (&tag_value, value_utf8);
+ /* If we found a stereoscopic marker, look for StereoscopicLayout
+ * metadata */
+ if (content3D) {
+ guint i;
+ if (strncmp ("StereoscopicLayout", name_utf8,
+ strlen (name_utf8)) == 0) {
+ for (i = 0; i < G_N_ELEMENTS (stereoscopic_layout_map); i++) {
+ if (g_str_equal (stereoscopic_layout_map[i].interleave_name,
+ value_utf8)) {
+ demux->asf_3D_mode =
+ stereoscopic_layout_map[i].interleaving_type;
+ GST_INFO ("find interleave type %u", demux->asf_3D_mode);
+ }
+ }
+ }
+ GST_INFO_OBJECT (demux, "3d type is %u", demux->asf_3D_mode);
+ } else {
+ demux->asf_3D_mode = GST_ASF_3D_NONE;
+ GST_INFO_OBJECT (demux, "None 3d type");
+ }
+ }
+ } else if (value_utf8 == NULL) {
+ GST_WARNING ("Failed to convert string value to UTF8, skipping");
+ } else {
+ GST_DEBUG ("Skipping empty string value for %s",
+ GST_STR_NULL (gst_tag_name));
+ }
+ g_free (value_utf8);
+ break;
+ }
+ case ASF_DEMUX_DATA_TYPE_BYTE_ARRAY:{
+ if (gst_tag_name) {
+ if (!g_str_equal (gst_tag_name, GST_TAG_IMAGE)) {
+ GST_FIXME ("Unhandled byte array tag %s",
+ GST_STR_NULL (gst_tag_name));
+ break;
+ } else {
+ asf_demux_parse_picture_tag (taglist, (guint8 *) value,
+ value_len);
+ }
+ }
+ break;
+ }
+ case ASF_DEMUX_DATA_TYPE_DWORD:{
+ guint uint_val;
+
+ if (value_len < 4)
+ break;
+
+ uint_val = GST_READ_UINT32_LE (value);
+
+ /* this is the track number */
+ g_value_init (&tag_value, G_TYPE_UINT);
+
+ /* WM/Track counts from 0 */
+ if (!strcmp (name_utf8, "WM/Track"))
+ ++uint_val;
+
+ g_value_set_uint (&tag_value, uint_val);
+ break;
+ }
+ /* Detect 3D */
+ case ASF_DEMUX_DATA_TYPE_BOOL:{
+ gboolean bool_val;
+
+ if (value_len < 4)
+ break;
+
+ bool_val = GST_READ_UINT32_LE (value);
+
+ if (strncmp ("Stereoscopic", name_utf8, strlen (name_utf8)) == 0) {
+ if (bool_val) {
+ GST_INFO_OBJECT (demux, "This is 3D contents");
+ content3D = TRUE;
+ } else {
+ GST_INFO_OBJECT (demux, "This is not 3D contenst");
+ content3D = FALSE;
+ }
+ }
+
+ break;
+ }
+ default:{
+ GST_DEBUG ("Skipping tag %s of type %d", gst_tag_name, datatype);
+ break;
+ }
+ }
+
+ if (G_IS_VALUE (&tag_value)) {
+ if (gst_tag_name) {
+ GstTagMergeMode merge_mode = GST_TAG_MERGE_APPEND;
+
+ /* WM/TrackNumber is more reliable than WM/Track, since the latter
+ * is supposed to have a 0 base but is often wrongly written to start
+ * from 1 as well, so prefer WM/TrackNumber when we have it: either
+ * replace the value added earlier from WM/Track or put it first in
+ * the list, so that it will get picked up by _get_uint() */
+ if (strcmp (name_utf8, "WM/TrackNumber") == 0)
+ merge_mode = GST_TAG_MERGE_REPLACE;
+
+ gst_tag_list_add_values (taglist, merge_mode, gst_tag_name,
+ &tag_value, NULL);
+ } else {
+ GST_DEBUG ("Setting global metadata %s", name_utf8);
+ gst_structure_set_value (demux->global_metadata, name_utf8,
+ &tag_value);
+ }
+
+ g_value_unset (&tag_value);
+ }
+ }
+
+ g_free (name);
+ g_free (value);
+ g_free (name_utf8);
+ }
+
+ gst_asf_demux_add_global_tags (demux, taglist);
+
+ return GST_FLOW_OK;
+
+ /* Errors */
+not_enough_data:
+ {
+ GST_WARNING ("Unexpected end of data parsing ext content desc object");
+ gst_tag_list_unref (taglist);
+ return GST_FLOW_OK; /* not really fatal */
+ }
+}
+
+static GstStructure *
+gst_asf_demux_get_metadata_for_stream (GstASFDemux * demux, guint stream_num)
+{
+ gchar sname[32];
+ guint i;
+
+ g_snprintf (sname, sizeof (sname), "stream-%u", stream_num);
+
+ for (i = 0; i < gst_caps_get_size (demux->metadata); ++i) {
+ GstStructure *s;
+
+ s = gst_caps_get_structure (demux->metadata, i);
+ if (gst_structure_has_name (s, sname))
+ return s;
+ }
+
+ gst_caps_append_structure (demux->metadata, gst_structure_new_empty (sname));
+
+ /* try lookup again; demux->metadata took ownership of the structure, so we
+ * can't really make any assumptions about what happened to it, so we can't
+ * just return it directly after appending it */
+ return gst_asf_demux_get_metadata_for_stream (demux, stream_num);
+}
+
+static GstFlowReturn
+gst_asf_demux_process_metadata (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ guint16 blockcount, i;
+
+ GST_INFO_OBJECT (demux, "object is a metadata object");
+
+ /* Content Descriptor Count */
+ if (size < 2)
+ goto not_enough_data;
+
+ blockcount = gst_asf_demux_get_uint16 (&data, &size);
+
+ for (i = 0; i < blockcount; ++i) {
+ GstStructure *s;
+ guint16 stream_num, name_len, data_type, lang_idx G_GNUC_UNUSED;
+ guint32 data_len, ival;
+ gchar *name_utf8;
+
+ if (size < (2 + 2 + 2 + 2 + 4))
+ goto not_enough_data;
+
+ lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+ stream_num = gst_asf_demux_get_uint16 (&data, &size);
+ name_len = gst_asf_demux_get_uint16 (&data, &size);
+ data_type = gst_asf_demux_get_uint16 (&data, &size);
+ data_len = gst_asf_demux_get_uint32 (&data, &size);
+
+ if (size < name_len + data_len)
+ goto not_enough_data;
+
+ /* convert name to UTF-8 */
+ name_utf8 = g_convert ((gchar *) data, name_len, "UTF-8", "UTF-16LE",
+ NULL, NULL, NULL);
+ gst_asf_demux_skip_bytes (name_len, &data, &size);
+
+ if (name_utf8 == NULL) {
+ GST_WARNING ("Failed to convert value name to UTF8, skipping");
+ gst_asf_demux_skip_bytes (data_len, &data, &size);
+ continue;
+ }
+
+ if (data_type != ASF_DEMUX_DATA_TYPE_DWORD) {
+ gst_asf_demux_skip_bytes (data_len, &data, &size);
+ g_free (name_utf8);
+ continue;
+ }
+
+ /* read DWORD */
+ if (size < 4) {
+ g_free (name_utf8);
+ goto not_enough_data;
+ }
+
+ ival = gst_asf_demux_get_uint32 (&data, &size);
+
+ /* skip anything else there may be, just in case */
+ gst_asf_demux_skip_bytes (data_len - 4, &data, &size);
+
+ s = gst_asf_demux_get_metadata_for_stream (demux, stream_num);
+ gst_structure_set (s, name_utf8, G_TYPE_INT, ival, NULL);
+ g_free (name_utf8);
+ }
+
+ GST_INFO_OBJECT (demux, "metadata = %" GST_PTR_FORMAT, demux->metadata);
+ return GST_FLOW_OK;
+
+ /* Errors */
+not_enough_data:
+ {
+ GST_WARNING ("Unexpected end of data parsing metadata object");
+ return GST_FLOW_OK; /* not really fatal */
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_header (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint32 i, num_objects;
+ guint8 unknown G_GNUC_UNUSED;
+
+ /* Get the rest of the header's header */
+ if (size < (4 + 1 + 1))
+ goto not_enough_data;
+
+ num_objects = gst_asf_demux_get_uint32 (&data, &size);
+ unknown = gst_asf_demux_get_uint8 (&data, &size);
+ unknown = gst_asf_demux_get_uint8 (&data, &size);
+
+ GST_INFO_OBJECT (demux, "object is a header with %u parts", num_objects);
+ demux->saw_file_header = FALSE;
+ /* Loop through the header's objects, processing those */
+ for (i = 0; i < num_objects; ++i) {
+ GST_INFO_OBJECT (demux, "reading header part %u", i);
+ ret = gst_asf_demux_process_object (demux, &data, &size);
+ if (ret != GST_FLOW_OK) {
+ GST_WARNING ("process_object returned %s", gst_asf_get_flow_name (ret));
+ break;
+ }
+ }
+ if (!demux->saw_file_header) {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("Header does not have mandatory FILE section"));
+ return GST_FLOW_ERROR;
+ }
+
+ return ret;
+
+not_enough_data:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("short read parsing HEADER object"));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_file (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+ guint64 creation_time G_GNUC_UNUSED;
+ guint64 file_size G_GNUC_UNUSED;
+ guint64 send_time G_GNUC_UNUSED;
+ guint64 packets_count, play_time, preroll;
+ guint32 flags, min_pktsize, max_pktsize, min_bitrate G_GNUC_UNUSED;
+
+ if (size < (16 + 8 + 8 + 8 + 8 + 8 + 8 + 4 + 4 + 4 + 4))
+ goto not_enough_data;
+
+ gst_asf_demux_skip_bytes (16, &data, &size); /* skip GUID */
+ file_size = gst_asf_demux_get_uint64 (&data, &size);
+ creation_time = gst_asf_demux_get_uint64 (&data, &size);
+ packets_count = gst_asf_demux_get_uint64 (&data, &size);
+ play_time = gst_asf_demux_get_uint64 (&data, &size);
+ send_time = gst_asf_demux_get_uint64 (&data, &size);
+ preroll = gst_asf_demux_get_uint64 (&data, &size);
+ flags = gst_asf_demux_get_uint32 (&data, &size);
+ min_pktsize = gst_asf_demux_get_uint32 (&data, &size);
+ max_pktsize = gst_asf_demux_get_uint32 (&data, &size);
+ min_bitrate = gst_asf_demux_get_uint32 (&data, &size);
+
+ demux->broadcast = ! !(flags & 0x01);
+ demux->seekable = ! !(flags & 0x02);
+
+ GST_DEBUG_OBJECT (demux, "min_pktsize = %u", min_pktsize);
+ GST_DEBUG_OBJECT (demux, "flags::broadcast = %d", demux->broadcast);
+ GST_DEBUG_OBJECT (demux, "flags::seekable = %d", demux->seekable);
+
+ if (demux->broadcast) {
+ /* these fields are invalid if the broadcast flag is set */
+ play_time = 0;
+ file_size = 0;
+ }
+
+ if (min_pktsize != max_pktsize)
+ goto non_fixed_packet_size;
+
+ demux->packet_size = max_pktsize;
+
+ /* FIXME: do we need send_time as well? what is it? */
+ if ((play_time * 100) >= (preroll * GST_MSECOND))
+ demux->play_time = (play_time * 100) - (preroll * GST_MSECOND);
+ else
+ demux->play_time = 0;
+
+ demux->preroll = preroll * GST_MSECOND;
+
+ /* initial latency */
+ demux->latency = demux->preroll;
+
+ if (demux->play_time == 0)
+ demux->seekable = FALSE;
+
+ GST_DEBUG_OBJECT (demux, "play_time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->play_time));
+ GST_DEBUG_OBJECT (demux, "preroll %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->preroll));
+
+ if (demux->play_time > 0) {
+ demux->segment.duration = demux->play_time;
+ }
+
+ GST_INFO ("object is a file with %" G_GUINT64_FORMAT " data packets",
+ packets_count);
+ GST_INFO ("preroll = %" G_GUINT64_FORMAT, demux->preroll);
+
+ demux->saw_file_header = TRUE;
+
+ return GST_FLOW_OK;
+
+/* ERRORS */
+non_fixed_packet_size:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("packet size must be fixed"));
+ return GST_FLOW_ERROR;
+ }
+not_enough_data:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("short read parsing FILE object"));
+ return GST_FLOW_ERROR;
+ }
+}
+
+/* Content Description Object */
+static GstFlowReturn
+gst_asf_demux_process_comment (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+ /* *INDENT-OFF* */
+ struct
+ {
+ const gchar *gst_tag;
+ guint16 val_length;
+ gchar *val_utf8;
+ } tags[5] = {
+ {
+ GST_TAG_TITLE, 0, NULL}, {
+ GST_TAG_ARTIST, 0, NULL}, {
+ GST_TAG_COPYRIGHT, 0, NULL}, {
+ GST_TAG_DESCRIPTION, 0, NULL}, {
+ GST_TAG_COMMENT, 0, NULL}
+ };
+ /* *INDENT-ON* */
+ GstTagList *taglist;
+ GValue value = { 0 };
+ gsize in, out;
+ gint i = -1;
+
+ GST_INFO_OBJECT (demux, "object is a comment");
+
+ if (size < (2 + 2 + 2 + 2 + 2))
+ goto not_enough_data;
+
+ tags[0].val_length = gst_asf_demux_get_uint16 (&data, &size);
+ tags[1].val_length = gst_asf_demux_get_uint16 (&data, &size);
+ tags[2].val_length = gst_asf_demux_get_uint16 (&data, &size);
+ tags[3].val_length = gst_asf_demux_get_uint16 (&data, &size);
+ tags[4].val_length = gst_asf_demux_get_uint16 (&data, &size);
+
+ GST_DEBUG_OBJECT (demux, "Comment lengths: title=%d author=%d copyright=%d "
+ "description=%d rating=%d", tags[0].val_length, tags[1].val_length,
+ tags[2].val_length, tags[3].val_length, tags[4].val_length);
+
+ for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+ if (size < tags[i].val_length)
+ goto not_enough_data;
+
+ /* might be just '/0', '/0'... */
+ if (tags[i].val_length > 2 && tags[i].val_length % 2 == 0) {
+ /* convert to UTF-8 */
+ tags[i].val_utf8 = g_convert ((gchar *) data, tags[i].val_length,
+ "UTF-8", "UTF-16LE", &in, &out, NULL);
+ }
+ gst_asf_demux_skip_bytes (tags[i].val_length, &data, &size);
+ }
+
+ /* parse metadata into taglist */
+ taglist = gst_tag_list_new_empty ();
+ g_value_init (&value, G_TYPE_STRING);
+ for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+ if (tags[i].val_utf8 && strlen (tags[i].val_utf8) > 0 && tags[i].gst_tag) {
+ g_value_set_string (&value, tags[i].val_utf8);
+ gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
+ tags[i].gst_tag, &value, NULL);
+ }
+ }
+ g_value_unset (&value);
+
+ gst_asf_demux_add_global_tags (demux, taglist);
+
+ for (i = 0; i < G_N_ELEMENTS (tags); ++i)
+ g_free (tags[i].val_utf8);
+
+ return GST_FLOW_OK;
+
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "unexpectedly short of data while processing "
+ "comment tag section %d, skipping comment object", i);
+ for (i = 0; i < G_N_ELEMENTS (tags); i++)
+ g_free (tags[i].val_utf8);
+ return GST_FLOW_OK; /* not really fatal */
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_bitrate_props_object (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ guint16 num_streams, i;
+ AsfStream *stream;
+
+ if (size < 2)
+ goto not_enough_data;
+
+ num_streams = gst_asf_demux_get_uint16 (&data, &size);
+
+ GST_INFO ("object is a bitrate properties object with %u streams",
+ num_streams);
+
+ if (size < (num_streams * (2 + 4)))
+ goto not_enough_data;
+
+ for (i = 0; i < num_streams; ++i) {
+ guint32 bitrate;
+ guint16 stream_id;
+
+ stream_id = gst_asf_demux_get_uint16 (&data, &size);
+ bitrate = gst_asf_demux_get_uint32 (&data, &size);
+
+ if (stream_id < GST_ASF_DEMUX_NUM_STREAM_IDS) {
+ GST_DEBUG_OBJECT (demux, "bitrate of stream %u = %u", stream_id, bitrate);
+ stream = gst_asf_demux_get_stream (demux, stream_id);
+ if (stream) {
+ if (stream->pending_tags == NULL)
+ stream->pending_tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, bitrate, NULL);
+ } else {
+ GST_WARNING_OBJECT (demux, "Stream id %u wasn't found", stream_id);
+ }
+ } else {
+ GST_WARNING ("stream id %u is too large", stream_id);
+ }
+ }
+
+ return GST_FLOW_OK;
+
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "short read parsing bitrate props object!");
+ return GST_FLOW_OK; /* not really fatal */
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_header_ext (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint64 hdr_size;
+
+ /* Get the rest of the header's header */
+ if (size < (16 + 2 + 4))
+ goto not_enough_data;
+
+ /* skip GUID and two other bytes */
+ gst_asf_demux_skip_bytes (16 + 2, &data, &size);
+ hdr_size = gst_asf_demux_get_uint32 (&data, &size);
+
+ GST_INFO ("extended header object with a size of %u bytes", (guint) size);
+
+ /* FIXME: does data_size include the rest of the header that we have read? */
+ if (hdr_size > size)
+ goto not_enough_data;
+
+ while (hdr_size > 0) {
+ ret = gst_asf_demux_process_object (demux, &data, &hdr_size);
+ if (ret != GST_FLOW_OK)
+ break;
+ }
+
+ return ret;
+
+not_enough_data:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+ ("short read parsing extended header object"));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_language_list (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ guint i;
+
+ if (size < 2)
+ goto not_enough_data;
+
+ if (demux->languages) {
+ GST_WARNING ("More than one LANGUAGE_LIST object in stream");
+ g_strfreev (demux->languages);
+ demux->languages = NULL;
+ demux->num_languages = 0;
+ }
+
+ demux->num_languages = gst_asf_demux_get_uint16 (&data, &size);
+ GST_LOG ("%u languages:", demux->num_languages);
+
+ demux->languages = g_new0 (gchar *, demux->num_languages + 1);
+ for (i = 0; i < demux->num_languages; ++i) {
+ guint8 len, *lang_data = NULL;
+
+ if (size < 1)
+ goto not_enough_data;
+ len = gst_asf_demux_get_uint8 (&data, &size);
+ if (gst_asf_demux_get_bytes (&lang_data, len, &data, &size)) {
+ gchar *utf8;
+
+ utf8 = g_convert ((gchar *) lang_data, len, "UTF-8", "UTF-16LE", NULL,
+ NULL, NULL);
+
+ /* truncate "en-us" etc. to just "en" */
+ if (utf8 && strlen (utf8) >= 5 && (utf8[2] == '-' || utf8[2] == '_')) {
+ utf8[2] = '\0';
+ }
+ GST_DEBUG ("[%u] %s", i, GST_STR_NULL (utf8));
+ demux->languages[i] = utf8;
+ g_free (lang_data);
+ } else {
+ goto not_enough_data;
+ }
+ }
+
+ return GST_FLOW_OK;
+
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "short read parsing language list object!");
+ g_free (demux->languages);
+ demux->languages = NULL;
+ demux->num_languages = 0;
+ return GST_FLOW_OK; /* not fatal */
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_simple_index (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ GstClockTime interval;
+ guint32 count, i;
+
+ if (size < (16 + 8 + 4 + 4))
+ goto not_enough_data;
+
+ /* skip file id */
+ gst_asf_demux_skip_bytes (16, &data, &size);
+ interval = gst_asf_demux_get_uint64 (&data, &size) * (GstClockTime) 100;
+ gst_asf_demux_skip_bytes (4, &data, &size);
+ count = gst_asf_demux_get_uint32 (&data, &size);
+ if (count > 0) {
+ demux->sidx_interval = interval;
+ demux->sidx_num_entries = count;
+ g_free (demux->sidx_entries);
+ demux->sidx_entries = g_new0 (AsfSimpleIndexEntry, count);
+
+ for (i = 0; i < count; ++i) {
+ if (G_UNLIKELY (size < 6)) {
+ /* adjust for broken files, to avoid having entries at the end
+ * of the parsed index that point to time=0. Resulting in seeking to
+ * the end of the file leading back to the beginning */
+ demux->sidx_num_entries -= (count - i);
+ break;
+ }
+ demux->sidx_entries[i].packet = gst_asf_demux_get_uint32 (&data, &size);
+ demux->sidx_entries[i].count = gst_asf_demux_get_uint16 (&data, &size);
+ GST_LOG_OBJECT (demux, "%" GST_TIME_FORMAT " = packet %4u count : %2d",
+ GST_TIME_ARGS (i * interval), demux->sidx_entries[i].packet,
+ demux->sidx_entries[i].count);
+ }
+ } else {
+ GST_DEBUG_OBJECT (demux, "simple index object with 0 entries");
+ }
+
+ return GST_FLOW_OK;
+
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "short read parsing simple index object!");
+ return GST_FLOW_OK; /* not fatal */
+ }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_advanced_mutual_exclusion (GstASFDemux * demux,
+ guint8 * data, guint64 size)
+{
+ ASFGuid guid;
+ guint16 num, i;
+
+ if (size < 16 + 2 + (2 * 2))
+ goto not_enough_data;
+
+ gst_asf_demux_get_guid (&guid, &data, &size);
+ num = gst_asf_demux_get_uint16 (&data, &size);
+
+ if (num < 2) {
+ GST_WARNING_OBJECT (demux, "nonsensical mutually exclusive streams count");
+ return GST_FLOW_OK;
+ }
+
+ if (size < (num * sizeof (guint16)))
+ goto not_enough_data;
+
+ /* read mutually exclusive stream numbers */
+ for (i = 0; i < num; ++i) {
+ guint8 mes;
+ mes = gst_asf_demux_get_uint16 (&data, &size) & 0x7f;
+ GST_LOG_OBJECT (demux, "mutually exclusive: stream %d", mes);
+
+ demux->mut_ex_streams =
+ g_slist_append (demux->mut_ex_streams, GINT_TO_POINTER (mes));
+ }
+
+
+ return GST_FLOW_OK;
+
+ /* Errors */
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "short read parsing advanced mutual exclusion");
+ return GST_FLOW_OK; /* not absolutely fatal */
+ }
+}
+
+gboolean
+gst_asf_demux_is_unknown_stream (GstASFDemux * demux, guint stream_num)
+{
+ return g_slist_find (demux->other_streams,
+ GINT_TO_POINTER (stream_num)) == NULL;
+}
+
+static GstFlowReturn
+gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
+ guint64 size)
+{
+ AsfStreamExtProps esp;
+ AsfStream *stream = NULL;
+ AsfObject stream_obj;
+ guint16 stream_name_count;
+ guint16 num_payload_ext;
+ guint64 len;
+ guint8 *stream_obj_data = NULL;
+ guint8 *data_start;
+ guint obj_size;
+ guint i, stream_num;
+
+ data_start = data;
+ obj_size = (guint) size;
+
+ esp.payload_extensions = NULL;
+
+ if (size < 64)
+ goto not_enough_data;
+
+ esp.valid = TRUE;
+ esp.start_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
+ esp.end_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
+ esp.data_bitrate = gst_asf_demux_get_uint32 (&data, &size);
+ esp.buffer_size = gst_asf_demux_get_uint32 (&data, &size);
+ esp.intial_buf_fullness = gst_asf_demux_get_uint32 (&data, &size);
+ esp.data_bitrate2 = gst_asf_demux_get_uint32 (&data, &size);
+ esp.buffer_size2 = gst_asf_demux_get_uint32 (&data, &size);
+ esp.intial_buf_fullness2 = gst_asf_demux_get_uint32 (&data, &size);
+ esp.max_obj_size = gst_asf_demux_get_uint32 (&data, &size);
+ esp.flags = gst_asf_demux_get_uint32 (&data, &size);
+ stream_num = gst_asf_demux_get_uint16 (&data, &size);
+ esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+ esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size);
+ stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
+ num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
+
+ GST_INFO ("start_time = %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (esp.start_time));
+ GST_INFO ("end_time = %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (esp.end_time));
+ GST_INFO ("flags = %08x", esp.flags);
+ GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (esp.avg_time_per_frame * 100));
+ GST_INFO ("stream number = %u", stream_num);
+ GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
+ (esp.lang_idx < demux->num_languages) ?
+ GST_STR_NULL (demux->languages[esp.lang_idx]) : "??");
+ GST_INFO ("stream name count = %u", stream_name_count);
+
+ /* read stream names */
+ for (i = 0; i < stream_name_count; ++i) {
+ guint16 stream_lang_idx G_GNUC_UNUSED;
+ gchar *stream_name = NULL;
+
+ if (size < 2)
+ goto not_enough_data;
+ stream_lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+ if (!gst_asf_demux_get_string (&stream_name, NULL, &data, &size))
+ goto not_enough_data;
+ GST_INFO ("stream name %d: %s", i, GST_STR_NULL (stream_name));
+ g_free (stream_name); /* TODO: store names in struct */
+ }
+
+ /* read payload extension systems stuff */
+ GST_LOG ("payload extension systems count = %u", num_payload_ext);
+
+ if (num_payload_ext > 0)
+ esp.payload_extensions = g_new0 (AsfPayloadExtension, num_payload_ext + 1);
+
+ for (i = 0; i < num_payload_ext; ++i) {
+ AsfPayloadExtension ext;
+ ASFGuid ext_guid;
+ guint32 sys_info_len;
+
+ if (size < 16 + 2 + 4)
+ goto not_enough_data;
+
+ gst_asf_demux_get_guid (&ext_guid, &data, &size);
+ ext.id = gst_asf_demux_identify_guid (asf_payload_ext_guids, &ext_guid);
+ ext.len = gst_asf_demux_get_uint16 (&data, &size);
+
+ sys_info_len = gst_asf_demux_get_uint32 (&data, &size);
+ GST_LOG ("payload systems info len = %u", sys_info_len);
+ if (!gst_asf_demux_skip_bytes (sys_info_len, &data, &size))
+ goto not_enough_data;
+
+ esp.payload_extensions[i] = ext;
+ }
+
+ GST_LOG ("bytes read: %u/%u", (guint) (data - data_start), obj_size);
+
+ /* there might be an optional STREAM_INFO object here now; if not, we
+ * should have parsed the corresponding stream info object already (since
+ * we are parsing the extended stream properties objects delayed) */
+ if (size == 0) {
+ stream = gst_asf_demux_get_stream (demux, stream_num);
+ goto done;
+ }
+
+ if (size < ASF_OBJECT_HEADER_SIZE)
+ goto not_enough_data;
+
+ /* get size of the stream object */
+ if (!asf_demux_peek_object (demux, data, size, &stream_obj, TRUE))
+ goto corrupted_stream;
+
+ if (stream_obj.id != ASF_OBJ_STREAM)
+ goto expected_stream_object;
+
+ if (stream_obj.size < ASF_OBJECT_HEADER_SIZE ||
+ stream_obj.size > (10 * 1024 * 1024))
+ goto not_enough_data;
+
+ gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, &data, &size);
+
+ /* process this stream object later after all the other 'normal' ones
+ * have been processed (since the others are more important/non-hidden) */
+ len = stream_obj.size - ASF_OBJECT_HEADER_SIZE;
+ if (!gst_asf_demux_get_bytes (&stream_obj_data, len, &data, &size))
+ goto not_enough_data;
+
+ /* parse stream object */
+ stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
+ g_free (stream_obj_data);
+
+done:
+
+ if (stream) {
+ stream->ext_props = esp;
+
+ /* try to set the framerate */
+ if (stream->is_video && stream->caps) {
+ GValue framerate = { 0 };
+ GstStructure *s;
+ gint num, denom;
+
+ g_value_init (&framerate, GST_TYPE_FRACTION);
+
+ num = GST_SECOND / 100;
+ denom = esp.avg_time_per_frame;
+ if (denom == 0) {
+ /* avoid division by 0, assume 25/1 framerate */
+ denom = GST_SECOND / 2500;
+ }
+
+ gst_value_set_fraction (&framerate, num, denom);
+
+ stream->caps = gst_caps_make_writable (stream->caps);
+ s = gst_caps_get_structure (stream->caps, 0);
+ gst_structure_set_value (s, "framerate", &framerate);
+ g_value_unset (&framerate);
+ GST_DEBUG_OBJECT (demux, "setting framerate of %d/%d = %f",
+ num, denom, ((gdouble) num) / denom);
+ }
+
+ /* add language info now if we have it */
+ if (stream->ext_props.lang_idx < demux->num_languages) {
+ if (stream->pending_tags == NULL)
+ stream->pending_tags = gst_tag_list_new_empty ();
+ GST_LOG_OBJECT (demux, "stream %u has language '%s'", stream->id,
+ demux->languages[stream->ext_props.lang_idx]);
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_APPEND,
+ GST_TAG_LANGUAGE_CODE, demux->languages[stream->ext_props.lang_idx],
+ NULL);
+ }
+ } else if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
+ GST_WARNING_OBJECT (demux, "Ext. stream properties for unknown stream");
+ }
+
+ if (!stream)
+ g_free (esp.payload_extensions);
+
+ return GST_FLOW_OK;
+
+ /* Errors */
+not_enough_data:
+ {
+ GST_WARNING_OBJECT (demux, "short read parsing ext stream props object!");
+ g_free (esp.payload_extensions);
+ return GST_FLOW_OK; /* not absolutely fatal */
+ }
+expected_stream_object:
+ {
+ GST_WARNING_OBJECT (demux, "error parsing extended stream properties "
+ "object: expected embedded stream object, but got %s object instead!",
+ gst_asf_get_guid_nick (asf_object_guids, stream_obj.id));
+ g_free (esp.payload_extensions);
+ return GST_FLOW_OK; /* not absolutely fatal */
+ }
+corrupted_stream:
+ {
+ GST_WARNING_OBJECT (demux, "Corrupted stream");
+ g_free (esp.payload_extensions);
+ return GST_FLOW_ERROR;
+ }
+}
+
+static const gchar *
+gst_asf_demux_push_obj (GstASFDemux * demux, guint32 obj_id)
+{
+ const gchar *nick;
+
+ nick = gst_asf_get_guid_nick (asf_object_guids, obj_id);
+ if (g_str_has_prefix (nick, "ASF_OBJ_"))
+ nick += strlen ("ASF_OBJ_");
+
+ if (demux->objpath == NULL) {
+ demux->objpath = g_strdup (nick);
+ } else {
+ gchar *newpath;
+
+ newpath = g_strdup_printf ("%s/%s", demux->objpath, nick);
+ g_free (demux->objpath);
+ demux->objpath = newpath;
+ }
+
+ return (const gchar *) demux->objpath;
+}
+
+static void
+gst_asf_demux_pop_obj (GstASFDemux * demux)
+{
+ gchar *s;
+
+ if ((s = g_strrstr (demux->objpath, "/"))) {
+ *s = '\0';
+ } else {
+ g_free (demux->objpath);
+ demux->objpath = NULL;
+ }
+}
+
+static void
+gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux)
+{
+ GSList *l;
+ guint i;
+
+ /* Parse the queued extended stream property objects and add the info
+ * to the existing streams or add the new embedded streams, but without
+ * activating them yet */
+ GST_LOG_OBJECT (demux, "%u queued extended stream properties objects",
+ g_slist_length (demux->ext_stream_props));
+
+ for (l = demux->ext_stream_props, i = 0; l != NULL; l = l->next, ++i) {
+ GstBuffer *buf = GST_BUFFER (l->data);
+ GstMapInfo map;
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+
+ GST_LOG_OBJECT (demux, "parsing ext. stream properties object #%u", i);
+ gst_asf_demux_process_ext_stream_props (demux, map.data, map.size);
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_unref (buf);
+ }
+ g_slist_free (demux->ext_stream_props);
+ demux->ext_stream_props = NULL;
+}
+
+#if 0
+static void
+gst_asf_demux_activate_ext_props_streams (GstASFDemux * demux)
+{
+ guint i, j;
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ AsfStream *stream;
+ gboolean is_hidden;
+ GSList *x;
+
+ stream = &demux->stream[i];
+
+ GST_LOG_OBJECT (demux, "checking stream %2u", stream->id);
+
+ if (stream->active) {
+ GST_LOG_OBJECT (demux, "stream %2u is already activated", stream->id);
+ continue;
+ }
+
+ is_hidden = FALSE;
+ for (x = demux->mut_ex_streams; x != NULL; x = x->next) {
+ guint8 *mes;
+
+ /* check for each mutual exclusion whether it affects this stream */
+ for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
+ if (*mes == stream->id) {
+ /* if yes, check if we've already added streams that are mutually
+ * exclusive with the stream we're about to add */
+ for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
+ for (j = 0; j < demux->num_streams; ++j) {
+ /* if the broadcast flag is set, assume the hidden streams aren't
+ * actually streamed and hide them (or playbin won't work right),
+ * otherwise assume their data is available */
+ if (demux->stream[j].id == *mes && demux->broadcast) {
+ is_hidden = TRUE;
+ GST_LOG_OBJECT (demux, "broadcast stream ID %d to be added is "
+ "mutually exclusive with already existing stream ID %d, "
+ "hiding stream", stream->id, demux->stream[j].id);
+ goto next;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ next:
+
+ /* FIXME: we should do stream activation based on preroll data in
+ * streaming mode too */
+ if (demux->streaming && !is_hidden)
+ gst_asf_demux_activate_stream (demux, stream);
+ }
+}
+#endif
+
+static GstFlowReturn
+gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
+ guint64 * p_size)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ AsfObject obj;
+ guint64 obj_data_size;
+
+ if (*p_size < ASF_OBJECT_HEADER_SIZE)
+ return ASF_FLOW_NEED_MORE_DATA;
+
+ if (!asf_demux_peek_object (demux, *p_data, ASF_OBJECT_HEADER_SIZE, &obj,
+ TRUE))
+ return GST_FLOW_ERROR;
+ gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, p_data, p_size);
+
+ obj_data_size = obj.size - ASF_OBJECT_HEADER_SIZE;
+
+ if (*p_size < obj_data_size)
+ return ASF_FLOW_NEED_MORE_DATA;
+
+ gst_asf_demux_push_obj (demux, obj.id);
+
+ GST_INFO ("%s: size %" G_GUINT64_FORMAT, demux->objpath, obj.size);
+
+ switch (obj.id) {
+ case ASF_OBJ_STREAM:
+ gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
+ ret = GST_FLOW_OK;
+ break;
+ case ASF_OBJ_FILE:
+ ret = gst_asf_demux_process_file (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_HEADER:
+ ret = gst_asf_demux_process_header (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_COMMENT:
+ ret = gst_asf_demux_process_comment (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_HEAD1:
+ ret = gst_asf_demux_process_header_ext (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_BITRATE_PROPS:
+ ret =
+ gst_asf_demux_process_bitrate_props_object (demux, *p_data,
+ obj_data_size);
+ break;
+ case ASF_OBJ_EXT_CONTENT_DESC:
+ ret =
+ gst_asf_demux_process_ext_content_desc (demux, *p_data,
+ obj_data_size);
+ break;
+ case ASF_OBJ_METADATA_OBJECT:
+ ret = gst_asf_demux_process_metadata (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_EXTENDED_STREAM_PROPS:{
+ GstBuffer *buf;
+
+ /* process these later, we might not have parsed the corresponding
+ * stream object yet */
+ GST_LOG ("%s: queued for later parsing", demux->objpath);
+ buf = gst_buffer_new_and_alloc (obj_data_size);
+ gst_buffer_fill (buf, 0, *p_data, obj_data_size);
+ demux->ext_stream_props = g_slist_append (demux->ext_stream_props, buf);
+ ret = GST_FLOW_OK;
+ break;
+ }
+ case ASF_OBJ_LANGUAGE_LIST:
+ ret = gst_asf_demux_process_language_list (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
+ ret = gst_asf_demux_process_advanced_mutual_exclusion (demux, *p_data,
+ obj_data_size);
+ break;
+ case ASF_OBJ_SIMPLE_INDEX:
+ ret = gst_asf_demux_process_simple_index (demux, *p_data, obj_data_size);
+ break;
+ case ASF_OBJ_CONTENT_ENCRYPTION:
+ case ASF_OBJ_EXT_CONTENT_ENCRYPTION:
+ case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT:
+ case ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT:
+ goto error_encrypted;
+ case ASF_OBJ_CONCEAL_NONE:
+ case ASF_OBJ_HEAD2:
+ case ASF_OBJ_UNDEFINED:
+ case ASF_OBJ_CODEC_COMMENT:
+ case ASF_OBJ_INDEX:
+ case ASF_OBJ_PADDING:
+ case ASF_OBJ_BITRATE_MUTEX:
+ case ASF_OBJ_COMPATIBILITY:
+ case ASF_OBJ_INDEX_PLACEHOLDER:
+ case ASF_OBJ_INDEX_PARAMETERS:
+ case ASF_OBJ_STREAM_PRIORITIZATION:
+ case ASF_OBJ_SCRIPT_COMMAND:
+ case ASF_OBJ_METADATA_LIBRARY_OBJECT:
+ default:
+ /* Unknown/unhandled object, skip it and hope for the best */
+ GST_INFO ("%s: skipping object", demux->objpath);
+ ret = GST_FLOW_OK;
+ break;
+ }
+
+ /* this can't fail, we checked the number of bytes available before */
+ gst_asf_demux_skip_bytes (obj_data_size, p_data, p_size);
+
+ GST_LOG ("%s: ret = %s", demux->objpath, gst_asf_get_flow_name (ret));
+
+ gst_asf_demux_pop_obj (demux);
+
+ return ret;
+
+/* ERRORS */
+error_encrypted:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DECRYPT, (NULL), (NULL));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static void
+gst_asf_demux_descramble_buffer (GstASFDemux * demux, AsfStream * stream,
+ GstBuffer ** p_buffer)
+{
+ GstBuffer *descrambled_buffer;
+ GstBuffer *scrambled_buffer;
+ GstBuffer *sub_buffer;
+ guint offset;
+ guint off;
+ guint row;
+ guint col;
+ guint idx;
+
+ /* descrambled_buffer is initialised in the first iteration */
+ descrambled_buffer = NULL;
+ scrambled_buffer = *p_buffer;
+
+ if (gst_buffer_get_size (scrambled_buffer) <
+ stream->ds_packet_size * stream->span)
+ return;
+
+ for (offset = 0; offset < gst_buffer_get_size (scrambled_buffer);
+ offset += stream->ds_chunk_size) {
+ off = offset / stream->ds_chunk_size;
+ row = off / stream->span;
+ col = off % stream->span;
+ idx = row + col * stream->ds_packet_size / stream->ds_chunk_size;
+ GST_DEBUG ("idx=%u, row=%u, col=%u, off=%u, ds_chunk_size=%u", idx, row,
+ col, off, stream->ds_chunk_size);
+ GST_DEBUG ("scrambled buffer size=%" G_GSIZE_FORMAT
+ ", span=%u, packet_size=%u", gst_buffer_get_size (scrambled_buffer),
+ stream->span, stream->ds_packet_size);
+ GST_DEBUG ("gst_buffer_get_size (scrambled_buffer) = %" G_GSIZE_FORMAT,
+ gst_buffer_get_size (scrambled_buffer));
+ sub_buffer =
+ gst_buffer_copy_region (scrambled_buffer, GST_BUFFER_COPY_MEMORY,
+ idx * stream->ds_chunk_size, stream->ds_chunk_size);
+ if (!offset) {
+ descrambled_buffer = sub_buffer;
+ } else {
+ descrambled_buffer = gst_buffer_append (descrambled_buffer, sub_buffer);
+ }
+ }
+
+ GST_BUFFER_TIMESTAMP (descrambled_buffer) =
+ GST_BUFFER_TIMESTAMP (scrambled_buffer);
+ GST_BUFFER_DURATION (descrambled_buffer) =
+ GST_BUFFER_DURATION (scrambled_buffer);
+ GST_BUFFER_OFFSET (descrambled_buffer) = GST_BUFFER_OFFSET (scrambled_buffer);
+ GST_BUFFER_OFFSET_END (descrambled_buffer) =
+ GST_BUFFER_OFFSET_END (scrambled_buffer);
+
+ /* FIXME/CHECK: do we need to transfer buffer flags here too? */
+
+ gst_buffer_unref (scrambled_buffer);
+ *p_buffer = descrambled_buffer;
+}
+
+static gboolean
+gst_asf_demux_element_send_event (GstElement * element, GstEvent * event)
+{
+ GstASFDemux *demux = GST_ASF_DEMUX (element);
+ gint i;
+
+ GST_DEBUG ("handling element event of type %s", GST_EVENT_TYPE_NAME (event));
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ gst_event_ref (event);
+ if (gst_asf_demux_handle_src_event (demux->stream[i].pad,
+ GST_OBJECT_CAST (element), event)) {
+ gst_event_unref (event);
+ return TRUE;
+ }
+ }
+
+ gst_event_unref (event);
+ return FALSE;
+}
+
+/* takes ownership of the passed event */
+static gboolean
+gst_asf_demux_send_event_unlocked (GstASFDemux * demux, GstEvent * event)
+{
+ gboolean ret = TRUE;
+ gint i;
+
+ GST_DEBUG_OBJECT (demux, "sending %s event to all source pads",
+ GST_EVENT_TYPE_NAME (event));
+
+ for (i = 0; i < demux->num_streams; ++i) {
+ gst_event_ref (event);
+ ret &= gst_pad_push_event (demux->stream[i].pad, event);
+ }
+ gst_event_unref (event);
+ return ret;
+}
+
+static gboolean
+gst_asf_demux_handle_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ GstASFDemux *demux;
+ gboolean res = FALSE;
+
+ demux = GST_ASF_DEMUX (parent);
+
+ GST_DEBUG ("handling %s query",
+ gst_query_type_get_name (GST_QUERY_TYPE (query)));
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_DURATION:
+ {
+ GstFormat format;
+
+ gst_query_parse_duration (query, &format, NULL);
+
+ if (format != GST_FORMAT_TIME) {
+ GST_LOG ("only support duration queries in TIME format");
+ break;
+ }
+
+ res = gst_pad_query_default (pad, parent, query);
+ if (!res) {
+ GST_OBJECT_LOCK (demux);
+
+ if (demux->segment.duration != GST_CLOCK_TIME_NONE) {
+ GST_LOG ("returning duration: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->segment.duration));
+
+ gst_query_set_duration (query, GST_FORMAT_TIME,
+ demux->segment.duration);
+
+ res = TRUE;
+ } else {
+ GST_LOG ("duration not known yet");
+ }
+
+ GST_OBJECT_UNLOCK (demux);
+ }
+ break;
+ }
+
+ case GST_QUERY_POSITION:{
+ GstFormat format;
+
+ gst_query_parse_position (query, &format, NULL);
+
+ if (format != GST_FORMAT_TIME) {
+ GST_LOG ("only support position queries in TIME format");
+ break;
+ }
+
+ GST_OBJECT_LOCK (demux);
+
+ if (demux->segment.position != GST_CLOCK_TIME_NONE) {
+ GST_LOG ("returning position: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->segment.position));
+
+ gst_query_set_position (query, GST_FORMAT_TIME,
+ demux->segment.position);
+
+ res = TRUE;
+ } else {
+ GST_LOG ("position not known yet");
+ }
+
+ GST_OBJECT_UNLOCK (demux);
+ break;
+ }
+
+ case GST_QUERY_SEEKING:{
+ GstFormat format;
+
+ gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+ if (format == GST_FORMAT_TIME) {
+ gint64 duration;
+
+ GST_OBJECT_LOCK (demux);
+ duration = demux->segment.duration;
+ GST_OBJECT_UNLOCK (demux);
+
+ if (!demux->streaming || !demux->seekable) {
+ gst_query_set_seeking (query, GST_FORMAT_TIME, demux->seekable, 0,
+ duration);
+ res = TRUE;
+ } else {
+ GstFormat fmt;
+ gboolean seekable;
+
+ /* try upstream first in TIME */
+ res = gst_pad_query_default (pad, parent, query);
+
+ gst_query_parse_seeking (query, &fmt, &seekable, NULL, NULL);
+ GST_LOG_OBJECT (demux, "upstream %s seekable %d",
+ GST_STR_NULL (gst_format_get_name (fmt)), seekable);
+ /* if no luck, maybe in BYTES */
+ if (!seekable || fmt != GST_FORMAT_TIME) {
+ GstQuery *q;
+
+ q = gst_query_new_seeking (GST_FORMAT_BYTES);
+ if ((res = gst_pad_peer_query (demux->sinkpad, q))) {
+ gst_query_parse_seeking (q, &fmt, &seekable, NULL, NULL);
+ GST_LOG_OBJECT (demux, "upstream %s seekable %d",
+ GST_STR_NULL (gst_format_get_name (fmt)), seekable);
+ if (fmt != GST_FORMAT_BYTES)
+ seekable = FALSE;
+ }
+ gst_query_unref (q);
+ gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, 0,
+ duration);
+ res = TRUE;
+ }
+ }
+ } else
+ GST_LOG_OBJECT (demux, "only support seeking in TIME format");
+ break;
+ }
+
+ case GST_QUERY_LATENCY:
+ {
+ gboolean live;
+ GstClockTime min, max;
+
+ /* preroll delay does not matter in non-live pipeline,
+ * but we might end up in a live (rtsp) one ... */
+
+ /* first forward */
+ res = gst_pad_query_default (pad, parent, query);
+ if (!res)
+ break;
+
+ gst_query_parse_latency (query, &live, &min, &max);
+
+ GST_DEBUG_OBJECT (demux, "Peer latency: live %d, min %"
+ GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
+ GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+ GST_OBJECT_LOCK (demux);
+ min += demux->latency;
+ if (max != -1)
+ max += demux->latency;
+ GST_OBJECT_UNLOCK (demux);
+
+ gst_query_set_latency (query, live, min, max);
+ break;
+ }
+ case GST_QUERY_SEGMENT:
+ {
+ GstFormat format;
+ gint64 start, stop;
+
+ format = demux->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&demux->segment, format,
+ demux->segment.start);
+ if ((stop = demux->segment.stop) == -1)
+ stop = demux->segment.duration;
+ else
+ stop = gst_segment_to_stream_time (&demux->segment, format, stop);
+
+ gst_query_set_segment (query, demux->segment.rate, format, start, stop);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+static void
+gst_asf_demux_finalize (GObject * object)
+{
+ GstASFDemux *demux = GST_ASF_DEMUX (object);
+
+ if (demux->metadata)
+ gst_caps_unref (demux->metadata);
+ demux->metadata = NULL;
+
+ if (demux->global_metadata)
+ gst_structure_free (demux->global_metadata);
+ demux->global_metadata = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_asf_demux_change_state (GstElement * element, GstStateChange transition)
+{
+ GstASFDemux *demux = GST_ASF_DEMUX (element);
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:{
+ gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+ demux->need_newsegment = TRUE;
+ demux->segment_running = FALSE;
+ demux->keyunit_sync = FALSE;
+ demux->accurate = FALSE;
+ demux->adapter = gst_adapter_new ();
+ demux->data_size = 0;
+ demux->data_offset = 0;
+ demux->index_offset = 0;
+ demux->base_offset = 0;
+ demux->flowcombiner = gst_flow_combiner_new ();
+
+ break;
+ }
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_asf_demux_reset (demux, FALSE);
+ break;
+
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ gst_asf_demux_reset (demux, FALSE);
+ gst_flow_combiner_free (demux->flowcombiner);
+ demux->flowcombiner = NULL;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __ASF_DEMUX_H__
+#define __ASF_DEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
+
+#include "asfheaders.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ASF_DEMUX \
+ (gst_asf_demux_get_type())
+#define GST_ASF_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ASF_DEMUX,GstASFDemux))
+#define GST_ASF_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ASF_DEMUX,GstASFDemuxClass))
+#define GST_IS_ASF_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ASF_DEMUX))
+#define GST_IS_ASF_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX))
+
+typedef struct _GstASFDemux GstASFDemux;
+typedef struct _GstASFDemuxClass GstASFDemuxClass;
+typedef enum _GstASF3DMode GstASF3DMode;
+
+typedef struct {
+ guint32 packet;
+ guint16 count;
+} AsfSimpleIndexEntry;
+
+typedef struct {
+ AsfPayloadExtensionID id : 16; /* extension ID; the :16 makes sure the
+ * struct gets packed into 4 bytes */
+ guint16 len; /* save this so we can skip unknown IDs */
+} AsfPayloadExtension;
+
+/*
+ * 3D Types for Media play
+ */
+enum _GstASF3DMode
+{
+ GST_ASF_3D_NONE = 0x00,
+
+ //added, interim format - half
+ GST_ASF_3D_SIDE_BY_SIDE_HALF_LR = 0x01,
+ GST_ASF_3D_SIDE_BY_SIDE_HALF_RL = 0x02,
+ GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR = 0x03,
+ GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL = 0x04,
+ GST_ASF_3D_DUAL_STREAM = 0x0D, /*< Full format*/
+};
+
+typedef struct
+{
+ gboolean valid; /* TRUE if structure is valid/filled */
+
+ GstClockTime start_time;
+ GstClockTime end_time;
+ GstClockTime avg_time_per_frame;
+ guint32 data_bitrate;
+ guint32 buffer_size;
+ guint32 intial_buf_fullness;
+ guint32 data_bitrate2;
+ guint32 buffer_size2;
+ guint32 intial_buf_fullness2;
+ guint32 max_obj_size;
+ guint32 flags;
+ guint16 lang_idx;
+
+ /* may be NULL if there are no extensions; otherwise, terminated by
+ * an AsfPayloadExtension record with len 0 */
+ AsfPayloadExtension *payload_extensions;
+
+ /* missing: stream names */
+} AsfStreamExtProps;
+
+typedef struct
+{
+ AsfStreamType type;
+
+ gboolean active; /* if the stream has been activated (pad added) */
+
+ GstPad *pad;
+ guint16 id;
+
+ /* video-only */
+ gboolean is_video;
+ gboolean fps_known;
+
+ GstCaps *caps;
+
+ GstBuffer *streamheader;
+
+ GstTagList *pending_tags;
+
+ gboolean discont;
+ gboolean first_buffer;
+
+ /* Descrambler settings */
+ guint8 span;
+ guint16 ds_packet_size;
+ guint16 ds_chunk_size;
+ guint16 ds_data_size;
+
+ /* for new parsing code */
+ GArray *payloads; /* pending payloads */
+
+ /* Video stream PAR & interlacing */
+ guint8 par_x;
+ guint8 par_y;
+ gboolean interlaced;
+
+ /* For reverse playback */
+ gboolean reverse_kf_ready; /* Found complete KF payload*/
+ GArray *payloads_rev; /* Temp queue for storing multiple payloads of packet*/
+ gint kf_pos; /* KF position in payload queue. Payloads from this pos will be pushed */
+
+ /* extended stream properties (optional) */
+ AsfStreamExtProps ext_props;
+
+ gboolean inspect_payload;
+} AsfStream;
+
+typedef enum {
+ GST_ASF_DEMUX_STATE_HEADER,
+ GST_ASF_DEMUX_STATE_DATA,
+ GST_ASF_DEMUX_STATE_INDEX
+} GstASFDemuxState;
+
+#define GST_ASF_DEMUX_IS_REVERSE_PLAYBACK(seg) (seg.rate < 0.0? TRUE:FALSE)
+
+#define GST_ASF_DEMUX_NUM_VIDEO_PADS 16
+#define GST_ASF_DEMUX_NUM_AUDIO_PADS 32
+#define GST_ASF_DEMUX_NUM_STREAMS 32
+#define GST_ASF_DEMUX_NUM_STREAM_IDS 127
+
+struct _GstASFDemux {
+ GstElement element;
+
+ GstPad *sinkpad;
+
+ gboolean have_group_id;
+ guint group_id;
+
+ GstAdapter *adapter;
+ GstTagList *taglist;
+ GstASFDemuxState state;
+
+ /* byte offset where the asf starts, which might not be zero on chained
+ * asfs, index_offset and data_offset already are 'offseted' by base_offset */
+ guint64 base_offset;
+
+ guint64 index_offset; /* byte offset where index might be, or 0 */
+ guint64 data_offset; /* byte offset where packets start */
+ guint64 data_size; /* total size of packet data in bytes, or 0 */
+ guint64 num_packets; /* total number of data packets, or 0 */
+ gint64 packet; /* current packet */
+ guint speed_packets; /* Known number of packets to get in one go*/
+
+ gchar **languages;
+ guint num_languages;
+
+ GstCaps *metadata; /* metadata, for delayed parsing; one
+ * structure ('stream-N') per stream */
+ GstStructure *global_metadata; /* metadata which isn't specific to one stream */
+ GSList *ext_stream_props; /* for delayed processing (buffers) */
+ GSList *mut_ex_streams; /* mutually exclusive streams */
+
+ guint32 num_audio_streams;
+ guint32 num_video_streams;
+ guint32 num_streams;
+ AsfStream stream[GST_ASF_DEMUX_NUM_STREAMS];
+ gboolean activated_streams;
+ GstFlowCombiner *flowcombiner;
+
+ /* for chained asf handling, we need to hold the old asf streams until
+ * we detect the new ones */
+ AsfStream old_stream[GST_ASF_DEMUX_NUM_STREAMS];
+ gboolean old_num_streams;
+
+ GstClockTime first_ts; /* smallest timestamp found */
+
+ guint32 packet_size;
+ guint64 play_time;
+
+ guint64 preroll;
+
+ gboolean seekable;
+ gboolean broadcast;
+
+ GstSegment segment; /* configured play segment */
+ gboolean keyunit_sync;
+ gboolean accurate;
+
+ gboolean need_newsegment; /* do we need to send a new-segment event? */
+ guint32 segment_seqnum; /* if the new segment must have this seqnum */
+ GstClockTime segment_ts; /* streaming; timestamp for segment start */
+ GstSegment in_segment; /* streaming; upstream segment info */
+ GstClockTime in_gap; /* streaming; upstream initial segment gap for interpolation */
+ gboolean segment_running; /* if we've started the current segment */
+ gboolean streaming; /* TRUE if we are operating chain-based */
+ GstClockTime latency;
+
+ /* for debugging only */
+ gchar *objpath;
+
+ /* simple index, if available */
+ GstClockTime sidx_interval; /* interval between entries in ns */
+ guint sidx_num_entries; /* number of index entries */
+ AsfSimpleIndexEntry *sidx_entries; /* packet number for each entry */
+
+ GSList *other_streams; /* remember streams that are in header but have unknown type */
+
+ /* For reverse playback */
+ gboolean seek_to_cur_pos; /* Search packets till we reach 'seek' time */
+ gboolean multiple_payloads; /* Whether packet has multiple payloads */
+
+ /* parsing 3D */
+ GstASF3DMode asf_3D_mode;
+
+ gboolean saw_file_header;
+};
+
+struct _GstASFDemuxClass {
+ GstElementClass parent_class;
+};
+
+GType gst_asf_demux_get_type (void);
+
+AsfStream * gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id);
+
+gboolean gst_asf_demux_is_unknown_stream(GstASFDemux *demux, guint stream_num);
+
+G_END_DECLS
+
+#endif /* __ASF_DEMUX_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/riff/riff-read.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include "gstasfelements.h"
+
+/* #include "gstasfmux.h" */
+GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg);
+#define GST_CAT_DEFAULT asfdemux_dbg
+
+void
+asf_element_init (GstPlugin * plugin)
+{
+ static gsize res = FALSE;
+ if (g_once_init_enter (&res)) {
+ GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0,
+ "asf demuxer element");
+
+#ifdef ENABLE_NLS
+ GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+ LOCALEDIR);
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+ gst_riff_init ();
+ g_once_init_leave (&res, TRUE);
+ }
+
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_ASF_ELEMENTS_H__
+#define __GST_ASF_ELEMENTS_H__
+
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+
+G_BEGIN_DECLS
+
+void asf_element_init (GstPlugin * plugin);
+
+GST_ELEMENT_REGISTER_DECLARE (asfdemux);
+GST_ELEMENT_REGISTER_DECLARE (rtspwms);
+GST_ELEMENT_REGISTER_DECLARE (rtpasfdepay);
+
+G_END_DECLS
+
+#endif /* __GST_ASF_ELEMENTS_H__ */
--- /dev/null
+/* GStreamer RTP ASF depayloader
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * 2009 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "gstasfelements.h"
+#include "gstrtpasfdepay.h"
+#include <gst/rtp/gstrtpbuffer.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY_STATIC (rtpasfdepayload_debug);
+#define GST_CAT_DEFAULT rtpasfdepayload_debug
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-ms-asf")
+ );
+
+/* Other parameters: config, maxps */
+#define SINK_CAPS \
+ "application/x-rtp, " \
+ "media = (string) { \"application\", \"video\", \"audio\" }, " \
+ "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", " \
+ "clock-rate = (int) [1, MAX ], " \
+ "encoding-name = (string) \"X-ASF-PF\""
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (SINK_CAPS)
+ );
+
+#define gst_rtp_asf_depay_parent_class parent_class
+G_DEFINE_TYPE (GstRtpAsfDepay, gst_rtp_asf_depay, GST_TYPE_RTP_BASE_DEPAYLOAD);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtpasfdepay, "rtpasfdepay",
+ GST_RANK_MARGINAL, GST_TYPE_RTP_ASF_DEPAY, asf_element_init (plugin));
+
+static void gst_rtp_asf_depay_finalize (GObject * object);
+
+static GstStateChangeReturn gst_rtp_asf_depay_change_state (GstElement *
+ element, GstStateChange transition);
+
+static gboolean gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depay,
+ GstCaps * caps);
+static GstBuffer *gst_rtp_asf_depay_process (GstRTPBaseDepayload * basedepay,
+ GstBuffer * buf);
+
+static void
+gst_rtp_asf_depay_class_init (GstRtpAsfDepayClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+ gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
+
+ gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
+ gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "RTP ASF packet depayloader", "Codec/Depayloader/Network",
+ "Extracts ASF streams from RTP",
+ "Tim-Philipp Müller <tim centricular net>, "
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ gobject_class->finalize = gst_rtp_asf_depay_finalize;
+
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_change_state);
+
+ gstrtpbasedepayload_class->set_caps =
+ GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_setcaps);
+ gstrtpbasedepayload_class->process =
+ GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_process);
+
+ GST_DEBUG_CATEGORY_INIT (rtpasfdepayload_debug, "rtpasfdepayload", 0,
+ "RTP asf depayloader element");
+}
+
+static void
+gst_rtp_asf_depay_init (GstRtpAsfDepay * depay)
+{
+ depay->adapter = gst_adapter_new ();
+}
+
+static void
+gst_rtp_asf_depay_finalize (GObject * object)
+{
+ GstRtpAsfDepay *depay;
+
+ depay = GST_RTP_ASF_DEPAY (object);
+
+ g_object_unref (depay->adapter);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static const guint8 asf_marker[16] = { 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
+ 0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
+};
+
+static gboolean
+gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
+{
+ GstRtpAsfDepay *depay;
+ GstStructure *s;
+ const gchar *config_str, *ps_string;
+ GstBuffer *buf;
+ GstCaps *src_caps;
+ guint8 *headers;
+ gsize headers_len;
+ gint clock_rate;
+
+ depay = GST_RTP_ASF_DEPAY (depayload);
+
+ s = gst_caps_get_structure (caps, 0);
+
+ if (!gst_structure_get_int (s, "clock-rate", &clock_rate) || clock_rate < 0)
+ clock_rate = 1000;
+ depayload->clock_rate = clock_rate;
+
+ /* config contains the asf headers in base64 coding */
+ config_str = gst_structure_get_string (s, "config");
+ if (config_str == NULL || *config_str == '\0')
+ goto no_config;
+
+ ps_string = gst_structure_get_string (s, "maxps");
+ if (ps_string == NULL || *ps_string == '\0')
+ goto no_packetsize;
+
+ if (depay->packet_size) {
+ /* header sent again following seek;
+ * discard to avoid confusing upstream */
+ if (depay->packet_size == atoi (ps_string)) {
+ goto duplicate_header;
+ } else {
+ /* since we should fiddle with downstream state to handle this */
+ goto refuse_renegotiation;
+ }
+ } else
+ depay->packet_size = atoi (ps_string);
+ if (depay->packet_size <= 16)
+ goto invalid_packetsize;
+
+ headers = (guint8 *) g_base64_decode (config_str, &headers_len);
+
+ if (headers == NULL || headers_len < 16
+ || memcmp (headers, asf_marker, 16) != 0)
+ goto invalid_headers;
+
+ src_caps = gst_caps_new_empty_simple ("video/x-ms-asf");
+ gst_pad_set_caps (depayload->srcpad, src_caps);
+ gst_caps_unref (src_caps);
+
+ buf = gst_buffer_new ();
+ gst_buffer_append_memory (buf,
+ gst_memory_new_wrapped (0, headers, headers_len, 0, headers_len, headers,
+ g_free));
+
+ gst_rtp_base_depayload_push (depayload, buf);
+
+ return TRUE;
+
+ /* ERRORS */
+no_config:
+ {
+ GST_WARNING_OBJECT (depay, "caps without 'config' field with asf headers");
+ return FALSE;
+ }
+no_packetsize:
+ {
+ GST_WARNING_OBJECT (depay, "caps without 'maxps' (packet size) field");
+ return FALSE;
+ }
+invalid_packetsize:
+ {
+ GST_WARNING_OBJECT (depay, "packet size %u invalid", depay->packet_size);
+ return FALSE;
+ }
+invalid_headers:
+ {
+ GST_WARNING_OBJECT (depay, "headers don't look like valid ASF headers");
+ g_free (headers);
+ return FALSE;
+ }
+duplicate_header:
+ {
+ GST_DEBUG_OBJECT (depayload, "discarding duplicate header");
+ return TRUE;
+ }
+refuse_renegotiation:
+ {
+ GST_WARNING_OBJECT (depayload, "cannot renegotiate to different header");
+ return FALSE;
+ }
+}
+
+static gint
+field_size (guint8 field)
+{
+ switch (field) {
+ /* DWORD - 32 bits */
+ case 3:
+ return 4;
+
+ /* WORD - 16 bits */
+ case 2:
+ return 2;
+
+ /* BYTE - 8 bits */
+ case 1:
+ return 1;
+
+ /* non-exitent */
+ case 0:
+ default:
+ return 0;
+ }
+}
+
+/* Set the padding field to te correct value as the spec
+ * says it should be se to 0 in the rtp packets
+ */
+static GstBuffer *
+gst_rtp_asf_depay_update_padding (GstRtpAsfDepay * depayload, GstBuffer * buf)
+{
+ GstBuffer *result;
+ GstMapInfo map;
+ guint8 *data;
+ gint offset = 0;
+ guint8 aux;
+ guint8 seq_type;
+ guint8 pad_type;
+ guint8 pkt_type;
+ gsize plen, padding;
+
+ plen = gst_buffer_get_size (buf);
+ if (plen == depayload->packet_size)
+ return buf;
+
+ padding = depayload->packet_size - plen;
+
+ GST_LOG_OBJECT (depayload,
+ "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen,
+ depayload->packet_size);
+
+ result = gst_buffer_new_and_alloc (depayload->packet_size);
+
+ gst_buffer_map (result, &map, GST_MAP_READ);
+ data = map.data;
+ memset (data + plen, 0, padding);
+
+ gst_buffer_extract (buf, 0, data, plen);
+ gst_buffer_unref (buf);
+
+ aux = data[offset++];
+ if (aux & 0x80) {
+ guint8 err_len = 0;
+ if (aux & 0x60) {
+ GST_WARNING_OBJECT (depayload, "Error correction length type should be "
+ "set to 0");
+ /* this packet doesn't follow the spec */
+ gst_buffer_unmap (result, &map);
+ return result;
+ }
+ err_len = aux & 0x0F;
+ offset += err_len;
+
+ aux = data[offset++];
+ }
+ seq_type = (aux >> 1) & 0x3;
+ pad_type = (aux >> 3) & 0x3;
+ pkt_type = (aux >> 5) & 0x3;
+
+ offset += 1; /* skip property flags */
+ offset += field_size (pkt_type); /* skip packet length */
+ offset += field_size (seq_type); /* skip sequence field */
+
+ /* write padding */
+ switch (pad_type) {
+ /* DWORD */
+ case 3:
+ GST_WRITE_UINT32_LE (&(data[offset]), padding);
+ break;
+
+ /* WORD */
+ case 2:
+ GST_WRITE_UINT16_LE (&(data[offset]), padding);
+ break;
+
+ /* BYTE */
+ case 1:
+ data[offset] = (guint8) padding;
+ break;
+
+ /* non-existent */
+ case 0:
+ default:
+ break;
+ }
+ gst_buffer_unmap (result, &map);
+
+ return result;
+}
+
+/* Docs: 'RTSP Protocol PDF' document from http://sdp.ppona.com/ (page 8) */
+
+static GstBuffer *
+gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
+{
+ GstRtpAsfDepay *depay;
+ const guint8 *payload;
+ GstBuffer *outbuf;
+ gboolean S, L, R, D, I;
+ guint payload_len, hdr_len, offset;
+ guint len_offs;
+ GstClockTime timestamp;
+ GstRTPBuffer rtpbuf = { NULL };
+
+ depay = GST_RTP_ASF_DEPAY (depayload);
+
+ /* flush remaining data on discont */
+ if (GST_BUFFER_IS_DISCONT (buf)) {
+ GST_LOG_OBJECT (depay, "got DISCONT");
+ gst_adapter_clear (depay->adapter);
+ depay->discont = TRUE;
+ }
+
+ gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
+ timestamp = GST_BUFFER_TIMESTAMP (buf);
+
+ payload_len = gst_rtp_buffer_get_payload_len (&rtpbuf);
+ payload = gst_rtp_buffer_get_payload (&rtpbuf);
+ offset = 0;
+
+ GST_LOG_OBJECT (depay, "got payload len of %u", payload_len);
+
+ do {
+ guint packet_len;
+
+ /* packet header is at least 4 bytes */
+ if (payload_len < 4)
+ goto too_small;
+
+ /* 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |S|L|R|D|I|RES | Length/Offset |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Relative Timestamp (optional) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Duration (optional) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | LocationId (optional) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * S: packet contains a keyframe.
+ * L: If 1, Length/Offset contains length, else contains the byte offset
+ * of the fragment's first byte counted from the beginning of the
+ * complete ASF data packet.
+ * R: relative timestamp present
+ * D: duration present
+ * I: locationid present
+ */
+
+ S = ((payload[0] & 0x80) != 0);
+ L = ((payload[0] & 0x40) != 0);
+ R = ((payload[0] & 0x20) != 0);
+ D = ((payload[0] & 0x10) != 0);
+ I = ((payload[0] & 0x08) != 0);
+
+ hdr_len = 4;
+
+ len_offs = (payload[1] << 16) | (payload[2] << 8) | payload[3];
+
+ if (R) {
+ GST_DEBUG ("Relative timestamp field present : %u",
+ GST_READ_UINT32_BE (payload + hdr_len));
+ hdr_len += 4;
+ }
+ if (D) {
+ GST_DEBUG ("Duration field present : %u",
+ GST_READ_UINT32_BE (payload + hdr_len));
+ hdr_len += 4;
+ }
+ if (I) {
+ GST_DEBUG ("LocationId field present : %u",
+ GST_READ_UINT32_BE (payload + hdr_len));
+ hdr_len += 4;
+ }
+
+ GST_LOG_OBJECT (depay, "S %d, L %d, R %d, D %d, I %d", S, L, R, D, I);
+ GST_LOG_OBJECT (depay, "payload_len:%d, hdr_len:%d, len_offs:%d",
+ payload_len, hdr_len, len_offs);
+
+ if (payload_len < hdr_len)
+ goto too_small;
+
+ /* skip headers */
+ payload_len -= hdr_len;
+ payload += hdr_len;
+ offset += hdr_len;
+
+ if (L) {
+ /* L bit set, len contains the length of the packet */
+ packet_len = len_offs;
+ } else {
+ /* else it contains an offset which we don't handle yet */
+ GST_LOG_OBJECT (depay, "We have a fragmented packet");
+ packet_len = payload_len;
+ }
+
+ if (packet_len > payload_len)
+ packet_len = payload_len;
+
+ GST_LOG_OBJECT (depay, "packet len %u, payload len %u, packet_size:%u",
+ packet_len, payload_len, depay->packet_size);
+
+ if (!L) {
+ guint available;
+ GstBuffer *sub;
+
+ /* Fragmented packet handling */
+ outbuf = NULL;
+
+ if (len_offs == (available = gst_adapter_available (depay->adapter))) {
+ /* fragment aligns with what we have, add it */
+ GST_LOG_OBJECT (depay, "collecting fragment");
+ sub =
+ gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
+ gst_adapter_push (depay->adapter, sub);
+ /* RTP marker bit M is set if this is last fragment */
+ if (gst_rtp_buffer_get_marker (&rtpbuf)) {
+ GST_LOG_OBJECT (depay, "last fragment, assembling packet");
+ outbuf =
+ gst_adapter_take_buffer (depay->adapter, available + packet_len);
+ }
+ } else {
+ if (available) {
+ GST_WARNING_OBJECT (depay, "Offset doesn't match previous data?!");
+ GST_DEBUG_OBJECT (depay, "clearing for re-sync");
+ gst_adapter_clear (depay->adapter);
+ } else
+ GST_DEBUG_OBJECT (depay, "waiting for start of packet");
+ }
+ } else {
+ GST_LOG_OBJECT (depay, "collecting packet");
+ outbuf =
+ gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
+ }
+
+ /* If we haven't completed a full ASF packet, return */
+ if (!outbuf)
+ return NULL;
+
+ outbuf = gst_rtp_asf_depay_update_padding (depay, outbuf);
+
+ if (!S)
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+ if (depay->discont) {
+ GST_LOG_OBJECT (depay, "setting DISCONT");
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ depay->discont = FALSE;
+ }
+
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+
+ gst_rtp_base_depayload_push (depayload, outbuf);
+
+ /* only apply the timestamp to the first buffer of this packet */
+ timestamp = -1;
+
+ /* skip packet data */
+ payload += packet_len;
+ offset += packet_len;
+ payload_len -= packet_len;
+ } while (payload_len > 0);
+
+ gst_rtp_buffer_unmap (&rtpbuf);
+
+ return NULL;
+
+/* ERRORS */
+too_small:
+ {
+ gst_rtp_buffer_unmap (&rtpbuf);
+ GST_WARNING_OBJECT (depayload, "Payload too small, expected at least 4 "
+ "bytes for header, but got only %d bytes", payload_len);
+ return NULL;
+ }
+}
+
+static GstStateChangeReturn
+gst_rtp_asf_depay_change_state (GstElement * element, GstStateChange trans)
+{
+ GstStateChangeReturn ret;
+ GstRtpAsfDepay *depay;
+
+ depay = GST_RTP_ASF_DEPAY (element);
+
+ switch (trans) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ gst_adapter_clear (depay->adapter);
+ depay->discont = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans);
+
+ switch (trans) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_adapter_clear (depay->adapter);
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
--- /dev/null
+/* GStreamer RTP ASF depayloader
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * 2009 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RTP_ASF_DEPAY_H__
+#define __GST_RTP_ASF_DEPAY_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+#include <gst/rtp/gstrtpbasedepayload.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTP_ASF_DEPAY \
+ (gst_rtp_asf_depay_get_type())
+#define GST_RTP_ASF_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepay))
+#define GST_RTP_ASF_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepayClass))
+#define GST_IS_RTP_ASF_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_ASF_DEPAY))
+#define GST_IS_RTP_ASF_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_ASF_DEPAY))
+
+typedef struct _GstRtpAsfDepay GstRtpAsfDepay;
+typedef struct _GstRtpAsfDepayClass GstRtpAsfDepayClass;
+
+struct _GstRtpAsfDepay
+{
+ GstRTPBaseDepayload depayload;
+
+ guint packet_size;
+
+ GstAdapter *adapter;
+ gboolean discont;
+};
+
+struct _GstRtpAsfDepayClass
+{
+ GstRTPBaseDepayloadClass depayload_class;
+};
+
+GType gst_rtp_asf_depay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_RTP_ASF_DEPAY_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rtspwms
+ * @title: rtspwms
+ *
+ * A WMS RTSP extension
+ */
+
+#include <string.h>
+
+#include <gst/rtsp/gstrtspextension.h>
+
+#include "gstasfelements.h"
+#include "gstrtspwms.h"
+
+GST_DEBUG_CATEGORY_STATIC (rtspwms_debug);
+#define GST_CAT_DEFAULT (rtspwms_debug)
+
+#define SERVER_PREFIX "WMServer/"
+#define HEADER_PREFIX "data:application/vnd.ms.wms-hdr.asfv1;base64,"
+#define EXTENSION_CMD "application/x-wms-extension-cmd"
+
+static GstRTSPResult
+gst_rtsp_wms_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+ GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+ GST_DEBUG_OBJECT (ext, "before send");
+
+ switch (request->type_data.request.method) {
+ case GST_RTSP_OPTIONS:
+ {
+ /* activate ourselves with the first request */
+ ctx->active = TRUE;
+ break;
+ }
+ default:
+ break;
+ }
+ return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+gst_rtsp_wms_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+ GstRTSPMessage * resp)
+{
+ GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+ GST_DEBUG_OBJECT (ext, "after send");
+
+ switch (req->type_data.request.method) {
+ case GST_RTSP_OPTIONS:
+ {
+ gchar *server = NULL;
+
+ gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
+ if (server && g_str_has_prefix (server, SERVER_PREFIX))
+ ctx->active = TRUE;
+ else
+ ctx->active = FALSE;
+ break;
+ }
+ default:
+ break;
+ }
+ return GST_RTSP_OK;
+}
+
+
+static GstRTSPResult
+gst_rtsp_wms_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
+ GstStructure * props)
+{
+ const gchar *config, *maxps;
+ gint i;
+ GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+ if (!ctx->active)
+ return GST_RTSP_OK;
+
+ for (i = 0; (config = gst_sdp_message_get_attribute_val_n (sdp, "pgmpu", i));
+ i++) {
+ if (g_str_has_prefix (config, HEADER_PREFIX)) {
+ config += strlen (HEADER_PREFIX);
+ gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
+ break;
+ }
+ }
+ if (config == NULL)
+ goto no_config;
+
+ gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
+
+ maxps = gst_sdp_message_get_attribute_val (sdp, "maxps");
+ if (maxps)
+ gst_structure_set (props, "maxps", G_TYPE_STRING, maxps, NULL);
+
+ gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-ASF-PF", NULL);
+ gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
+
+ return GST_RTSP_OK;
+
+ /* ERRORS */
+no_config:
+ {
+ GST_DEBUG_OBJECT (ctx, "Could not find config SDP field, deactivating.");
+ ctx->active = FALSE;
+ return GST_RTSP_OK;
+ }
+}
+
+static gboolean
+gst_rtsp_wms_configure_stream (GstRTSPExtension * ext, GstCaps * caps)
+{
+ GstRTSPWMS *ctx;
+ GstStructure *s;
+ const gchar *encoding;
+
+ ctx = (GstRTSPWMS *) ext;
+ s = gst_caps_get_structure (caps, 0);
+ encoding = gst_structure_get_string (s, "encoding-name");
+
+ if (!encoding)
+ return TRUE;
+
+ GST_DEBUG_OBJECT (ctx, "%" GST_PTR_FORMAT " encoding-name: %s", caps,
+ encoding);
+
+ /* rtx streams do not need to be configured */
+ if (!strcmp (encoding, "X-WMS-RTX"))
+ return FALSE;
+
+ return TRUE;
+}
+
+static GstRTSPResult
+gst_rtsp_wms_receive_request (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+ GstRTSPWMS *ctx;
+ GstRTSPResult res = GST_RTSP_ENOTIMPL;
+ GstRTSPMessage response = { 0 };
+
+ ctx = (GstRTSPWMS *) ext;
+
+ GST_DEBUG_OBJECT (ext, "before send");
+
+ switch (request->type_data.request.method) {
+ case GST_RTSP_SET_PARAMETER:
+ {
+ gchar *content_type = NULL;
+
+ gst_rtsp_message_get_header (request, GST_RTSP_HDR_CONTENT_TYPE,
+ &content_type, 0);
+
+ if (content_type && !g_ascii_strcasecmp (content_type, EXTENSION_CMD)) {
+ /* parse the command */
+
+ /* default implementation, send OK */
+ res = gst_rtsp_message_init_response (&response, GST_RTSP_STS_OK, "OK",
+ request);
+ if (res < 0)
+ goto send_error;
+
+ GST_DEBUG_OBJECT (ctx, "replying with OK");
+
+ /* send reply */
+ if ((res = gst_rtsp_extension_send (ext, request, &response)) < 0)
+ goto send_error;
+
+ res = GST_RTSP_EEOF;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return res;
+
+send_error:
+ {
+ return res;
+ }
+}
+
+static void gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data);
+
+G_DEFINE_TYPE_WITH_CODE (GstRTSPWMS, gst_rtsp_wms, GST_TYPE_ELEMENT,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
+ gst_rtsp_wms_extension_init));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtspwms, "rtspwms", GST_RANK_SECONDARY,
+ GST_TYPE_RTSP_WMS, asf_element_init (plugin));
+
+static void
+gst_rtsp_wms_class_init (GstRTSPWMSClass * g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+ GST_DEBUG_CATEGORY_INIT (rtspwms_debug, "rtspwms", 0, "WMS RTSP extension");
+
+ gst_element_class_set_static_metadata (element_class, "WMS RTSP Extension",
+ "Network/Extension/Protocol",
+ "Extends RTSP so that it can handle WMS setup",
+ "Wim Taymans <wim.taymans@gmail.com>");
+}
+
+static void
+gst_rtsp_wms_init (GstRTSPWMS * rtspwms)
+{
+}
+
+static void
+gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data)
+{
+ GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
+
+ iface->parse_sdp = gst_rtsp_wms_parse_sdp;
+ iface->before_send = gst_rtsp_wms_before_send;
+ iface->after_send = gst_rtsp_wms_after_send;
+ iface->configure_stream = gst_rtsp_wms_configure_stream;
+ iface->receive_request = gst_rtsp_wms_receive_request;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RTSP_WMS_H__
+#define __GST_RTSP_WMS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTSP_WMS (gst_rtsp_wms_get_type())
+#define GST_IS_RTSP_WMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_WMS))
+#define GST_IS_RTSP_WMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_WMS))
+#define GST_RTSP_WMS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_WMS, GstRTSPWMS))
+#define GST_RTSP_WMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_WMS, GstRTSPWMSClass))
+
+typedef struct _GstRTSPWMS GstRTSPWMS;
+typedef struct _GstRTSPWMSClass GstRTSPWMSClass;
+
+struct _GstRTSPWMS {
+ GstElement element;
+
+ gboolean active;
+};
+
+struct _GstRTSPWMSClass {
+ GstElementClass parent_class;
+};
+
+GType gst_rtsp_wms_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_WMS_H__ */
--- /dev/null
+asf_sources = [
+ 'gstasfdemux.c',
+ 'gstasf.c',
+ 'gstasfelement.c',
+ 'asfheaders.c',
+ 'asfpacket.c',
+ 'gstrtpasfdepay.c',
+ 'gstrtspwms.c',
+]
+
+gstasf = library('gstasf',
+ asf_sources,
+ c_args : ugly_args,
+ include_directories : [configinc, libsinc],
+ dependencies : [gstbase_dep, gstrtp_dep, gstvideo_dep,
+ gstaudio_dep, gsttag_dep, gstriff_dep,
+ gstrtsp_dep, gstsdp_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstasf, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstasf]
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/* Element-Checklist-Version: TODO */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstdvdlpcmdec.h"
+#include <gst/audio/audio.h>
+
+GST_DEBUG_CATEGORY_STATIC (dvdlpcm_debug);
+#define GST_CAT_DEFAULT dvdlpcm_debug
+
+static GstStaticPadTemplate gst_dvdlpcmdec_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-private1-lpcm; "
+ "audio/x-private2-lpcm; "
+ "audio/x-private-ts-lpcm; "
+ "audio/x-lpcm, "
+ "width = (int) { 16, 20, 24 }, "
+ "rate = (int) { 32000, 44100, 48000, 96000 }, "
+ "channels = (int) [ 1, 8 ], "
+ "dynamic_range = (int) [ 0, 255 ], "
+ "emphasis = (boolean) { TRUE, FALSE }, "
+ "mute = (boolean) { TRUE, FALSE } ")
+ );
+
+static GstStaticPadTemplate gst_dvdlpcmdec_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) { S16BE, S24BE }, "
+ "layout = (string) interleaved, "
+ "rate = (int) { 32000, 44100, 48000, 96000 }, "
+ "channels = (int) [ 1, 8 ]")
+ );
+
+#define gst_dvdlpcmdec_parent_class parent_class
+G_DEFINE_TYPE (GstDvdLpcmDec, gst_dvdlpcmdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (dvdlpcmdec, "dvdlpcmdec", GST_RANK_PRIMARY,
+ GST_TYPE_DVDLPCMDEC);
+
+static gboolean gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec,
+ GstCaps * caps);
+static GstFlowReturn gst_dvdlpcmdec_parse (GstAudioDecoder * bdec,
+ GstAdapter * adapter, gint * offset, gint * len);
+static GstFlowReturn gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec,
+ GstBuffer * buffer);
+static GstFlowReturn gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+
+
+static void
+gst_dvdlpcmdec_class_init (GstDvdLpcmDecClass * klass)
+{
+ GstElementClass *element_class;
+ GstAudioDecoderClass *gstbase_class;
+
+ element_class = (GstElementClass *) klass;
+ gstbase_class = (GstAudioDecoderClass *) klass;
+
+ gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_set_format);
+ gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_parse);
+ gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_handle_frame);
+
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_dvdlpcmdec_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_dvdlpcmdec_src_template);
+ gst_element_class_set_static_metadata (element_class,
+ "DVD LPCM Audio decoder", "Codec/Decoder/Audio",
+ "Decode DVD LPCM frames into standard PCM audio",
+ "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>");
+
+ GST_DEBUG_CATEGORY_INIT (dvdlpcm_debug, "dvdlpcmdec", 0, "DVD LPCM Decoder");
+}
+
+static void
+gst_dvdlpcm_reset (GstDvdLpcmDec * dvdlpcmdec)
+{
+ gst_audio_info_init (&dvdlpcmdec->info);
+ dvdlpcmdec->dynamic_range = 0;
+ dvdlpcmdec->emphasis = FALSE;
+ dvdlpcmdec->mute = FALSE;
+
+ dvdlpcmdec->header = 0;
+
+ dvdlpcmdec->mode = GST_LPCM_UNKNOWN;
+}
+
+static void
+gst_dvdlpcmdec_init (GstDvdLpcmDec * dvdlpcmdec)
+{
+ gst_dvdlpcm_reset (dvdlpcmdec);
+
+ gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+ (dvdlpcmdec), TRUE);
+ GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
+
+ /* retrieve and intercept base class chain.
+ * Quite HACKish, but that's dvd specs/caps for you,
+ * since one buffer needs to be split into 2 frames */
+ dvdlpcmdec->base_chain =
+ GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
+ gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec),
+ GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_chain));
+}
+
+static const GstAudioChannelPosition channel_positions[][8] = {
+ {GST_AUDIO_CHANNEL_POSITION_MONO},
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+ {GST_AUDIO_CHANNEL_POSITION_INVALID}
+};
+
+static const GstAudioChannelPosition bluray_channel_positions[][8] = {
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ /* mono */
+ {GST_AUDIO_CHANNEL_POSITION_MONO},
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ /* stereo */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+ /* surround */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER},
+ /* 2.1 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
+ /* 4.0 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
+ /* 2.2 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+ /* 5.0 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+ /* 5.1 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1},
+ /* 7.0 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+ /* 7.1 */
+ {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1},
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID},
+ /* invalid */
+ {GST_AUDIO_CHANNEL_POSITION_INVALID}
+};
+
+static void
+gst_dvdlpcmdec_send_tags (GstDvdLpcmDec * dvdlpcmdec)
+{
+ GstTagList *taglist;
+ guint bitrate;
+ gint bpf, rate;
+
+ bpf = GST_AUDIO_INFO_BPF (&dvdlpcmdec->info);
+ rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
+
+ bitrate = bpf * 8 * rate;
+
+ taglist = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "LPCM Audio",
+ GST_TAG_BITRATE, bitrate, NULL);
+
+ gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dvdlpcmdec), taglist,
+ GST_TAG_MERGE_REPLACE);
+ gst_tag_list_unref (taglist);
+}
+
+static gboolean
+gst_dvdlpcmdec_set_output_format (GstDvdLpcmDec * dvdlpcmdec)
+{
+ gboolean res = TRUE;
+
+ res = gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dvdlpcmdec),
+ &dvdlpcmdec->info);
+ if (res) {
+ GST_DEBUG_OBJECT (dvdlpcmdec, "Successfully set output format");
+
+ gst_dvdlpcmdec_send_tags (dvdlpcmdec);
+ } else {
+ GST_DEBUG_OBJECT (dvdlpcmdec, "Failed to set output format");
+ }
+
+ return res;
+}
+
+static void
+gst_dvdlpcmdec_update_audio_formats (GstDvdLpcmDec * dec, gint channels,
+ gint rate, GstAudioFormat format, guint8 channel_indicator,
+ const GstAudioChannelPosition positions[][8])
+{
+ GST_DEBUG_OBJECT (dec, "got channels = %d, rate = %d, format = %d", channels,
+ rate, format);
+
+ /* Reorder the channel positions and set the default into for the audio */
+ if (channels < 9
+ && positions[channel_indicator][0] !=
+ GST_AUDIO_CHANNEL_POSITION_INVALID) {
+ const GstAudioChannelPosition *position;
+ GstAudioChannelPosition sorted_position[8];
+ guint c;
+
+ position = positions[channel_indicator];
+ for (c = 0; c < channels; ++c)
+ sorted_position[c] = position[c];
+ gst_audio_channel_positions_to_valid_order (sorted_position, channels);
+ gst_audio_info_set_format (&dec->info, format, rate, channels,
+ sorted_position);
+ if (memcmp (position, sorted_position,
+ channels * sizeof (position[0])) != 0)
+ dec->lpcm_layout = position;
+ else
+ dec->lpcm_layout = NULL;
+ } else {
+ gst_audio_info_set_format (&dec->info, format, rate, channels, NULL);
+ }
+}
+
+static gboolean
+gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
+{
+ GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+ GstStructure *structure;
+ gboolean res = TRUE;
+ GstAudioFormat format;
+ gint rate, channels, width;
+
+ gst_dvdlpcm_reset (dvdlpcmdec);
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* If we have the DVD structured LPCM (including header) then we wait
+ * for incoming data before creating the output pad caps */
+ if (gst_structure_has_name (structure, "audio/x-private1-lpcm")) {
+ dvdlpcmdec->mode = GST_LPCM_DVD;
+ goto done;
+ }
+ if (gst_structure_has_name (structure, "audio/x-private2-lpcm")) {
+ dvdlpcmdec->mode = GST_LPCM_1394;
+ goto done;
+ }
+ if (gst_structure_has_name (structure, "audio/x-private-ts-lpcm")) {
+ dvdlpcmdec->mode = GST_LPCM_BLURAY;
+ goto done;
+ }
+
+ dvdlpcmdec->mode = GST_LPCM_RAW;
+
+ res &= gst_structure_get_int (structure, "rate", &rate);
+ res &= gst_structure_get_int (structure, "channels", &channels);
+ res &= gst_structure_get_int (structure, "width", &width);
+ res &= gst_structure_get_int (structure, "dynamic_range",
+ &dvdlpcmdec->dynamic_range);
+ res &= gst_structure_get_boolean (structure, "emphasis",
+ &dvdlpcmdec->emphasis);
+ res &= gst_structure_get_boolean (structure, "mute", &dvdlpcmdec->mute);
+
+ if (!res)
+ goto caps_parse_error;
+
+ switch (width) {
+ case 24:
+ case 20:
+ format = GST_AUDIO_FORMAT_S24BE;
+ break;
+ case 16:
+ format = GST_AUDIO_FORMAT_S16BE;
+ break;
+ default:
+ format = GST_AUDIO_FORMAT_UNKNOWN;
+ break;
+ }
+
+ gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+ channels - 1, channel_positions);
+
+ dvdlpcmdec->width = width;
+
+ res = gst_dvdlpcmdec_set_output_format (dvdlpcmdec);
+
+done:
+ return res;
+
+ /* ERRORS */
+caps_parse_error:
+ {
+ GST_DEBUG_OBJECT (dvdlpcmdec, "Couldn't get parameters; missing caps?");
+ return FALSE;
+ }
+}
+
+static void
+parse_header (GstDvdLpcmDec * dec, guint32 header)
+{
+ GstAudioFormat format;
+ gint rate, channels, width;
+
+ /* We don't actually use 'dynamic range', 'mute', or 'emphasis' currently,
+ * but parse them out */
+ dec->dynamic_range = header & 0xff;
+
+ dec->mute = (header & 0x400000) != 0;
+ dec->emphasis = (header & 0x800000) != 0;
+
+ /* These two bits tell us the bit depth */
+ switch (header & 0xC000) {
+ case 0x8000:
+ /* 24 bits in 3 bytes */
+ format = GST_AUDIO_FORMAT_S24BE;
+ width = 24;
+ break;
+ case 0x4000:
+ /* 20 bits in 3 bytes */
+ format = GST_AUDIO_FORMAT_S24BE;
+ width = 20;
+ break;
+ default:
+ format = GST_AUDIO_FORMAT_S16BE;
+ width = 16;
+ break;
+ }
+
+ dec->width = width;
+
+ /* Only four sample rates supported */
+ switch (header & 0x3000) {
+ case 0x0000:
+ rate = 48000;
+ break;
+ case 0x1000:
+ rate = 96000;
+ break;
+ case 0x2000:
+ rate = 44100;
+ break;
+ case 0x3000:
+ rate = 32000;
+ break;
+ default:
+ rate = 0;
+ break;
+ }
+
+ /* And, of course, the number of channels (up to 8) */
+ channels = ((header >> 8) & 0x7) + 1;
+
+ gst_dvdlpcmdec_update_audio_formats (dec, channels, rate, format,
+ channels - 1, channel_positions);
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (parent);
+ guint8 data[2];
+ gsize size;
+ guint first_access;
+ GstBuffer *subbuf;
+ GstFlowReturn ret = GST_FLOW_OK;
+ gint off, len;
+
+ if (dvdlpcmdec->mode != GST_LPCM_DVD)
+ return dvdlpcmdec->base_chain (pad, parent, buf);
+
+ size = gst_buffer_get_size (buf);
+ if (size < 5)
+ goto too_small;
+
+ gst_buffer_extract (buf, 0, data, 2);
+ first_access = (data[0] << 8) | data[1];
+ if (first_access > size)
+ goto invalid_data;
+
+ /* After first_access, we have an additional 3 bytes of header data; this
+ * is included within the value of first_access.
+ * So a first_access value of between 1 and 3 is just broken, we treat that
+ * the same as zero. first_access == 4 means we only need to create a single
+ * sub-buffer, greater than that we need to create two. */
+
+ /* skip access unit bytes */
+ off = 2;
+
+ if (first_access > 4) {
+ /* length of first buffer */
+ len = first_access - 1;
+
+ GST_LOG_OBJECT (dvdlpcmdec, "Creating first sub-buffer off %d, len %d",
+ off, len);
+
+ /* see if we need a subbuffer without timestamp */
+ if (off + len > size)
+ goto bad_first_access;
+
+ subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
+ ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+ if (ret != GST_FLOW_OK)
+ goto done;
+
+ /* then the buffer with new timestamp */
+ off += len;
+ len = size - off;
+
+ GST_LOG_OBJECT (dvdlpcmdec, "Creating next sub-buffer off %d, len %d", off,
+ len);
+
+ if (len > 0) {
+ GstMemory *header, *tmp;
+ subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
+ tmp = gst_buffer_peek_memory (buf, 0);
+ header = gst_memory_copy (tmp, 2, 3);
+ gst_buffer_prepend_memory (subbuf, header);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+
+ ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+ }
+ } else {
+ GST_LOG_OBJECT (dvdlpcmdec,
+ "Creating single sub-buffer off %d, len %" G_GSIZE_FORMAT, off,
+ size - off);
+ subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, size - off);
+ GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+ ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+ }
+
+done:
+ gst_buffer_unref (buf);
+
+ return ret;
+
+ /* ERRORS */
+too_small:
+ {
+ /* Buffer is too small */
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet was too small. Dropping"));
+ ret = GST_FLOW_OK;
+ goto done;
+ }
+invalid_data:
+ {
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet contained invalid first access. Dropping"));
+ ret = GST_FLOW_OK;
+ goto done;
+ }
+bad_first_access:
+ {
+ GST_WARNING_OBJECT (pad, "Bad first_access parameter in buffer");
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, DECODE,
+ (NULL),
+ ("first_access parameter out of range: bad buffer from demuxer"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_dvd (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+ gint * offset, gint * len)
+{
+ guint32 header;
+ const guint8 *data;
+
+ data = (const guint8 *) gst_adapter_map (adapter, 3);
+ if (!data)
+ goto too_small;
+
+ /* Don't keep the 'frame number' low 5 bits of the first byte */
+ header = ((data[0] & 0xC0) << 16) | (data[1] << 8) | data[2];
+
+ gst_adapter_unmap (adapter);
+
+ /* see if we have a new header */
+ if (header != dvdlpcmdec->header) {
+ parse_header (dvdlpcmdec, header);
+
+ if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+ goto negotiation_failed;
+
+ dvdlpcmdec->header = header;
+ }
+
+ *offset = 3;
+ *len = gst_adapter_available (adapter) - 3;
+
+ return GST_FLOW_OK;
+
+ /* ERRORS */
+too_small:
+ {
+ /* Buffer is too small */
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet was too small. Dropping"));
+ *offset = gst_adapter_available (adapter);
+ return GST_FLOW_EOS;
+ }
+negotiation_failed:
+ {
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+ ("Failed to configure output format"));
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_bluray (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+ gint * offset, gint * len)
+{
+ guint32 header;
+ const guint8 *data;
+ guint8 channel_indicator;
+
+ data = (const guint8 *) gst_adapter_map (adapter, 4);
+ if (!data)
+ goto too_small;
+
+ header = GST_READ_UINT32_BE (data);
+
+ gst_adapter_unmap (adapter);
+
+ /* see if we have a new header */
+ if (header != dvdlpcmdec->header) {
+ GstAudioFormat format;
+ gint rate, channels;
+
+ switch ((header >> 6) & 0x3) {
+ case 0x1:
+ format = GST_AUDIO_FORMAT_S16BE;
+ dvdlpcmdec->width = 16;
+ break;
+ case 0x2:
+ format = GST_AUDIO_FORMAT_S24BE;
+ dvdlpcmdec->width = 20;
+ break;
+ case 0x3:
+ format = GST_AUDIO_FORMAT_S24BE;
+ dvdlpcmdec->width = 24;
+ break;
+ default:
+ format = GST_AUDIO_FORMAT_UNKNOWN;
+ dvdlpcmdec->width = 0;
+ GST_WARNING ("Invalid sample depth!");
+ break;
+ }
+
+ switch ((header >> 8) & 0xf) {
+ case 0x1:
+ rate = 48000;
+ break;
+ case 0x4:
+ rate = 96000;
+ break;
+ case 0x5:
+ rate = 192000;
+ break;
+ default:
+ rate = 0;
+ GST_WARNING ("Invalid audio sampling frequency!");
+ break;
+ }
+ channel_indicator = (header >> 12) & 0xf;
+ switch (channel_indicator) {
+ case 0x1:
+ channels = 1;
+ break;
+ case 0x3:
+ channels = 2;
+ break;
+ case 0x4:
+ case 0x5:
+ channels = 3;
+ break;
+ case 0x6:
+ case 0x7:
+ channels = 4;
+ break;
+ case 0x8:
+ channels = 5;
+ break;
+ case 0x9:
+ channels = 6;
+ break;
+ case 0xa:
+ channels = 7;
+ break;
+ case 0xb:
+ channels = 8;
+ break;
+ default:
+ channels = 0;
+ GST_WARNING ("Invalid number of audio channels!");
+ goto negotiation_failed;
+ }
+ GST_DEBUG_OBJECT (dvdlpcmdec, "got channels %d rate %d format %s",
+ channels, rate, gst_audio_format_to_string (format));
+
+ gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+ channel_indicator, bluray_channel_positions);
+
+ if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+ goto negotiation_failed;
+
+ dvdlpcmdec->header = header;
+ }
+
+ *offset = 4;
+ *len = gst_adapter_available (adapter) - 4;
+
+ return GST_FLOW_OK;
+
+ /* ERRORS */
+too_small:
+ {
+ /* Buffer is too small */
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet was too small. Dropping"));
+ *offset = gst_adapter_available (adapter);
+ return GST_FLOW_EOS;
+ }
+negotiation_failed:
+ {
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+ ("Failed to configure output format"));
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_1394 (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+ gint * offset, gint * len)
+{
+ guint32 header;
+ const guint8 *data;
+
+ data = (const guint8 *) gst_adapter_map (adapter, 4);
+ if (!data)
+ goto too_small;
+
+ header = GST_READ_UINT32_BE (data);
+
+ gst_adapter_unmap (adapter);
+
+ /* see if we have a new header */
+ if (header != dvdlpcmdec->header) {
+ GstAudioFormat format;
+ gint rate, channels;
+
+ if (header >> 24 != 0xa0)
+ goto invalid_data;
+
+ switch ((header >> 6) & 0x3) {
+ case 0x0:
+ format = GST_AUDIO_FORMAT_S16BE;
+ dvdlpcmdec->width = 16;
+ break;
+ default:
+ format = GST_AUDIO_FORMAT_UNKNOWN;
+ dvdlpcmdec->width = 0;
+ GST_WARNING ("Invalid quantization word length!");
+ break;
+ }
+
+ switch ((header >> 3) & 0x7) {
+ case 0x1:
+ rate = 44100;
+ break;
+ case 0x2:
+ rate = 48000;
+ break;
+ default:
+ rate = 0;
+ GST_WARNING ("Invalid audio sampling frequency!");
+ break;
+ }
+ switch (header & 0x7) {
+ case 0x0: /* 2 channels dual-mono */
+ case 0x1: /* 2 channels stereo */
+ channels = 2;
+ break;
+ default:
+ channels = 0;
+ GST_WARNING ("Invalid number of audio channels!");
+ goto negotiation_failed;
+ }
+
+ gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+ channels - 1, channel_positions);
+
+ if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+ goto negotiation_failed;
+
+ dvdlpcmdec->header = header;
+ }
+
+ *offset = 4;
+ *len = gst_adapter_available (adapter) - 4;
+
+ return GST_FLOW_OK;
+
+ /* ERRORS */
+too_small:
+ {
+ /* Buffer is too small */
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet was too small. Dropping"));
+ *offset = gst_adapter_available (adapter);
+ return GST_FLOW_EOS;
+ }
+invalid_data:
+ {
+ GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+ ("Invalid data found parsing LPCM packet"),
+ ("LPCM packet contains invalid sub_stream_id."));
+ return GST_FLOW_ERROR;
+ }
+negotiation_failed:
+ {
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+ ("Failed to configure output format"));
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
+ gint * offset, gint * len)
+{
+ GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+
+ switch (dvdlpcmdec->mode) {
+ case GST_LPCM_UNKNOWN:
+ return GST_FLOW_NOT_NEGOTIATED;
+
+ case GST_LPCM_RAW:
+ *offset = 0;
+ *len = gst_adapter_available (adapter);
+ return GST_FLOW_OK;
+
+ case GST_LPCM_DVD:
+ return gst_dvdlpcmdec_parse_dvd (dvdlpcmdec, adapter, offset, len);
+
+ case GST_LPCM_1394:
+ return gst_dvdlpcmdec_parse_1394 (dvdlpcmdec, adapter, offset, len);
+
+ case GST_LPCM_BLURAY:
+ return gst_dvdlpcmdec_parse_bluray (dvdlpcmdec, adapter, offset, len);
+ }
+ return GST_FLOW_ERROR;
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
+{
+ GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+ gsize size;
+ GstFlowReturn ret;
+ guint samples = 0;
+ gint rate, channels;
+
+ /* no fancy draining */
+ if (G_UNLIKELY (!buf))
+ return GST_FLOW_OK;
+
+ size = gst_buffer_get_size (buf);
+
+ GST_LOG_OBJECT (dvdlpcmdec,
+ "got buffer %p of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT,
+ buf, size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
+ channels = GST_AUDIO_INFO_CHANNELS (&dvdlpcmdec->info);
+
+ if (rate == 0)
+ goto not_negotiated;
+
+ /* We don't currently do anything at all regarding emphasis, mute or
+ * dynamic_range - I'm not sure what they're for */
+ switch (dvdlpcmdec->width) {
+ case 16:
+ {
+ /* We can just pass 16-bits straight through intact, once we set
+ * appropriate things on the buffer */
+ samples = size / channels / 2;
+ if (samples < 1)
+ goto drop;
+
+ gst_buffer_ref (buf);
+ break;
+ }
+ case 20:
+ {
+ /* Allocate a new buffer and copy 20-bit width to 24-bit */
+ gint64 samples = size * 8 / 20;
+ gint64 count = size / 10;
+ gint64 i;
+ GstMapInfo srcmap, destmap;
+ guint8 *src;
+ guint8 *dest;
+ GstBuffer *outbuf;
+
+ if (samples < 1)
+ goto drop;
+
+ outbuf = gst_buffer_new_allocate (NULL, samples * 3, NULL);
+ gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+
+ /* adjust samples so we can calc the new timestamp */
+ samples = samples / channels;
+
+ gst_buffer_map (buf, &srcmap, GST_MAP_READ);
+ gst_buffer_map (outbuf, &destmap, GST_MAP_WRITE);
+ src = srcmap.data;
+ dest = destmap.data;
+
+ /* Copy 20-bit LPCM format to 24-bit buffers, with 0x00 in the lowest
+ * nibble. Note that the first 2 bytes are already correct */
+ for (i = 0; i < count; i++) {
+ dest[0] = src[0];
+ dest[1] = src[1];
+ dest[2] = src[8] & 0xf0;
+ dest[3] = src[2];
+ dest[4] = src[3];
+ dest[5] = (src[8] & 0x0f) << 4;
+ dest[6] = src[4];
+ dest[7] = src[5];
+ dest[8] = src[9] & 0x0f;
+ dest[9] = src[6];
+ dest[10] = src[7];
+ dest[11] = (src[9] & 0x0f) << 4;
+
+ src += 10;
+ dest += 12;
+ }
+ gst_buffer_unmap (outbuf, &destmap);
+ gst_buffer_unmap (buf, &srcmap);
+ buf = outbuf;
+ break;
+ }
+ case 24:
+ {
+ /* Rearrange 24-bit LPCM format in-place. Note that the first 2
+ * and last byte are already correct */
+ guint count = size / 12;
+ gint i;
+ GstMapInfo srcmap, destmap;
+ guint8 *src, *dest;
+ GstBuffer *outbuf;
+
+ samples = size / channels / 3;
+
+ if (samples < 1)
+ goto drop;
+
+ outbuf = gst_buffer_new_allocate (NULL, size, NULL);
+ gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+
+ gst_buffer_map (buf, &srcmap, GST_MAP_READ);
+ gst_buffer_map (outbuf, &destmap, GST_MAP_READWRITE);
+ src = srcmap.data;
+ dest = destmap.data;
+
+ for (i = 0; i < count; i++) {
+ dest[0] = src[0];
+ dest[1] = src[1];
+ dest[11] = src[11];
+ dest[10] = src[7];
+ dest[7] = src[5];
+ dest[5] = src[9];
+ dest[9] = src[6];
+ dest[6] = src[4];
+ dest[4] = src[3];
+ dest[3] = src[2];
+ dest[2] = src[8];
+ dest[8] = src[10];
+
+ src += 12;
+ dest += 12;
+ }
+ gst_buffer_unmap (outbuf, &destmap);
+ gst_buffer_unmap (buf, &srcmap);
+ buf = outbuf;
+ break;
+ }
+ default:
+ goto invalid_width;
+ }
+
+ if (dvdlpcmdec->lpcm_layout) {
+ buf = gst_buffer_make_writable (buf);
+ gst_audio_buffer_reorder_channels (buf, dvdlpcmdec->info.finfo->format,
+ dvdlpcmdec->info.channels, dvdlpcmdec->lpcm_layout,
+ dvdlpcmdec->info.position);
+ }
+
+ ret = gst_audio_decoder_finish_frame (bdec, buf, 1);
+
+done:
+ return ret;
+
+ /* ERRORS */
+drop:
+ {
+ GST_DEBUG_OBJECT (dvdlpcmdec,
+ "Buffer of size %" G_GSIZE_FORMAT " is too small. Dropping", size);
+ ret = GST_FLOW_OK;
+ goto done;
+ }
+not_negotiated:
+ {
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+ ("Buffer pushed before negotiation"));
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto done;
+ }
+invalid_width:
+ {
+ GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, WRONG_TYPE, (NULL),
+ ("Invalid sample width configured"));
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto done;
+ }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (dvdlpcmdec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ dvdlpcmdec,
+ "Decode DVD LPCM frames into standard PCM",
+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_DVDLPCMDEC_H__
+#define __GST_DVDLPCMDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVDLPCMDEC \
+ (gst_dvdlpcmdec_get_type())
+#define GST_DVDLPCMDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDec))
+#define GST_DVDLPCMDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDecClass))
+#define GST_IS_DVDLPCMDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVDLPCMDEC))
+#define GST_IS_DVDLPCMDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDLPCMDEC))
+
+typedef struct _GstDvdLpcmDec GstDvdLpcmDec;
+typedef struct _GstDvdLpcmDecClass GstDvdLpcmDecClass;
+
+typedef enum {
+ GST_LPCM_UNKNOWN,
+ GST_LPCM_RAW,
+ GST_LPCM_DVD,
+ GST_LPCM_1394,
+ GST_LPCM_BLURAY
+} GstDvdLpcmMode;
+
+struct _GstDvdLpcmDec {
+ GstAudioDecoder element;
+
+ GstPadChainFunction base_chain;
+
+ GstDvdLpcmMode mode;
+ guint32 header;
+
+ GstAudioInfo info;
+ const GstAudioChannelPosition *lpcm_layout;
+ gint width;
+ gint dynamic_range;
+ gint emphasis;
+ gint mute;
+
+ GstClockTime timestamp;
+};
+
+struct _GstDvdLpcmDecClass {
+ GstAudioDecoderClass parent_class;
+};
+
+GType gst_dvdlpcmdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdlpcmdec);
+
+G_END_DECLS
+
+#endif /* __GST_DVDLPCMDEC_H__ */
--- /dev/null
+dvdpl_sources = [
+ 'gstdvdlpcmdec.c'
+]
+
+gstdvdlpcmdec = library('gstdvdlpcmdec',
+ dvdpl_sources,
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstbase_dep, gstaudio_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstdvdlpcmdec, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstdvdlpcmdec]
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
+ * Copyright (C) <2002> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstdvdsubdec.h"
+#include "gstdvdsubparse.h"
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_dvd_sub_dec_debug);
+#define GST_CAT_DEFAULT (gst_dvd_sub_dec_debug)
+
+#define gst_dvd_sub_dec_parent_class parent_class
+G_DEFINE_TYPE (GstDvdSubDec, gst_dvd_sub_dec, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (dvdsubdec, "dvdsubdec", GST_RANK_NONE,
+ GST_TYPE_DVD_SUB_DEC, GST_DEBUG_CATEGORY_INIT (gst_dvd_sub_dec_debug,
+ "dvdsubdec", 0, "DVD subtitle decoder"));
+
+static gboolean gst_dvd_sub_dec_src_event (GstPad * srcpad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+
+static gboolean gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec,
+ GstEvent * event);
+static void gst_dvd_sub_dec_finalize (GObject * gobject);
+static void gst_setup_palette (GstDvdSubDec * dec);
+static void gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec,
+ GstVideoFrame * frame);
+static GstClockTime gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec);
+static gboolean gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps);
+
+static GstFlowReturn gst_send_subtitle_frame (GstDvdSubDec * dec,
+ GstClockTime end_ts);
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw, format = (string) { AYUV, ARGB },"
+ "width = (int) 720, height = (int) 576, framerate = (fraction) 0/1")
+ );
+
+static GstStaticPadTemplate subtitle_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("subpicture/x-dvd")
+ );
+
+
+enum
+{
+ SPU_FORCE_DISPLAY = 0x00,
+ SPU_SHOW = 0x01,
+ SPU_HIDE = 0x02,
+ SPU_SET_PALETTE = 0x03,
+ SPU_SET_ALPHA = 0x04,
+ SPU_SET_SIZE = 0x05,
+ SPU_SET_OFFSETS = 0x06,
+ SPU_WIPE = 0x07,
+ SPU_END = 0xff
+};
+
+static const guint32 default_clut[16] = {
+ 0xb48080, 0x248080, 0x628080, 0xd78080,
+ 0x808080, 0x808080, 0x808080, 0x808080,
+ 0x808080, 0x808080, 0x808080, 0x808080,
+ 0x808080, 0x808080, 0x808080, 0x808080
+};
+
+typedef struct RLE_state
+{
+ gint id;
+ gint aligned;
+ gint offset[2];
+ gint hl_left;
+ gint hl_right;
+
+ guchar *target;
+
+ guchar next;
+}
+RLE_state;
+
+static void
+gst_dvd_sub_dec_class_init (GstDvdSubDecClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_dvd_sub_dec_finalize;
+
+ gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &subtitle_template);
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "DVD subtitle decoder", "Codec/Decoder/Video",
+ "Decodes DVD subtitles into AYUV video frames",
+ "Wim Taymans <wim.taymans@gmail.com>, "
+ "Jan Schmidt <thaytan@mad.scientist.com>");
+}
+
+static void
+gst_dvd_sub_dec_init (GstDvdSubDec * dec)
+{
+ GstPadTemplate *tmpl;
+
+ dec->sinkpad = gst_pad_new_from_static_template (&subtitle_template, "sink");
+ gst_pad_set_chain_function (dec->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_chain));
+ gst_pad_set_event_function (dec->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_sink_event));
+ gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
+
+ tmpl = gst_static_pad_template_get (&src_template);
+ dec->srcpad = gst_pad_new_from_template (tmpl, "src");
+ gst_pad_set_event_function (dec->srcpad,
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_src_event));
+ gst_pad_use_fixed_caps (dec->srcpad);
+ gst_object_unref (tmpl);
+ gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
+
+ /* FIXME: aren't there more possible sizes? (tpm) */
+ dec->in_width = 720;
+ dec->in_height = 576;
+
+ dec->partialbuf = NULL;
+ dec->have_title = FALSE;
+ dec->parse_pos = NULL;
+ dec->forced_display = FALSE;
+ dec->visible = FALSE;
+
+ memcpy (dec->current_clut, default_clut, sizeof (guint32) * 16);
+
+ gst_setup_palette (dec);
+
+ dec->next_ts = 0;
+ dec->next_event_ts = GST_CLOCK_TIME_NONE;
+
+ dec->buf_dirty = TRUE;
+ dec->use_ARGB = FALSE;
+}
+
+static void
+gst_dvd_sub_dec_finalize (GObject * gobject)
+{
+ GstDvdSubDec *dec = GST_DVD_SUB_DEC (gobject);
+
+ if (dec->partialbuf) {
+ gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+ gst_buffer_unref (dec->partialbuf);
+ dec->partialbuf = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static gboolean
+gst_dvd_sub_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ gboolean res = FALSE;
+
+ switch (GST_EVENT_TYPE (event)) {
+ default:
+ res = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return res;
+}
+
+static GstClockTime
+gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec)
+{
+ guchar *buf;
+ guint16 ticks;
+ GstClockTime event_delay;
+
+ /* If starting a new buffer, follow the first DCSQ ptr */
+ if (dec->parse_pos == dec->partialmap.data) {
+ buf = dec->parse_pos + dec->data_size;
+ } else {
+ buf = dec->parse_pos;
+ }
+
+ ticks = GST_READ_UINT16_BE (buf);
+ event_delay = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
+
+ GST_DEBUG_OBJECT (dec, "returning delay %" GST_TIME_FORMAT " from offset %u",
+ GST_TIME_ARGS (event_delay), (guint) (buf - dec->parse_pos));
+
+ return event_delay;
+}
+
+/*
+ * Parse the next event time in the current subpicture buffer, stopping
+ * when time advances to the next state.
+ */
+static void
+gst_dvd_sub_dec_parse_subpic (GstDvdSubDec * dec)
+{
+#define PARSE_BYTES_NEEDED(x) if ((buf+(x)) >= end) \
+ { GST_WARNING("Subtitle stream broken parsing %c", *buf); \
+ broken = TRUE; break; }
+
+ guchar *start = dec->partialmap.data;
+ guchar *buf;
+ guchar *end;
+ gboolean broken = FALSE;
+ gboolean last_seq = FALSE;
+ guchar *next_seq = NULL;
+ GstClockTime event_time;
+
+ /* nothing to do if we finished this buffer already */
+ if (dec->parse_pos == NULL)
+ return;
+
+ g_return_if_fail (dec->packet_size >= 4);
+
+ end = start + dec->packet_size;
+ if (dec->parse_pos == start) {
+ buf = dec->parse_pos + dec->data_size;
+ } else {
+ buf = dec->parse_pos;
+ }
+
+ g_assert (buf >= start && buf < end);
+
+ /* If the next control sequence is at the current offset, this is
+ * the last one */
+ next_seq = start + GST_READ_UINT16_BE (buf + 2);
+ last_seq = (next_seq == buf);
+ buf += 4;
+
+ while ((buf < end) && (!broken)) {
+ switch (*buf) {
+ case SPU_FORCE_DISPLAY: /* Forced display menu subtitle */
+ dec->forced_display = TRUE;
+ dec->buf_dirty = TRUE;
+ GST_DEBUG_OBJECT (dec, "SPU FORCE_DISPLAY");
+ buf++;
+ break;
+ case SPU_SHOW: /* Show the subtitle in this packet */
+ dec->visible = TRUE;
+ dec->buf_dirty = TRUE;
+ GST_DEBUG_OBJECT (dec, "SPU SHOW at %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (dec->next_event_ts));
+ buf++;
+ break;
+ case SPU_HIDE:
+ /* 02 ff (ff) is the end of the packet, hide the subpicture */
+ dec->visible = FALSE;
+ dec->buf_dirty = TRUE;
+
+ GST_DEBUG_OBJECT (dec, "SPU HIDE at %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (dec->next_event_ts));
+ buf++;
+ break;
+ case SPU_SET_PALETTE: /* palette */
+ PARSE_BYTES_NEEDED (3);
+
+ GST_DEBUG_OBJECT (dec, "SPU SET_PALETTE");
+
+ dec->subtitle_index[3] = buf[1] >> 4;
+ dec->subtitle_index[2] = buf[1] & 0xf;
+ dec->subtitle_index[1] = buf[2] >> 4;
+ dec->subtitle_index[0] = buf[2] & 0xf;
+ gst_setup_palette (dec);
+
+ dec->buf_dirty = TRUE;
+ buf += 3;
+ break;
+ case SPU_SET_ALPHA: /* transparency palette */
+ PARSE_BYTES_NEEDED (3);
+
+ GST_DEBUG_OBJECT (dec, "SPU SET_ALPHA");
+
+ dec->subtitle_alpha[3] = buf[1] >> 4;
+ dec->subtitle_alpha[2] = buf[1] & 0xf;
+ dec->subtitle_alpha[1] = buf[2] >> 4;
+ dec->subtitle_alpha[0] = buf[2] & 0xf;
+ gst_setup_palette (dec);
+
+ dec->buf_dirty = TRUE;
+ buf += 3;
+ break;
+ case SPU_SET_SIZE: /* image coordinates */
+ PARSE_BYTES_NEEDED (7);
+
+ dec->top = ((buf[4] & 0x3f) << 4) | ((buf[5] & 0xe0) >> 4);
+ dec->left = ((buf[1] & 0x3f) << 4) | ((buf[2] & 0xf0) >> 4);
+ dec->right = ((buf[2] & 0x03) << 8) | buf[3];
+ dec->bottom = ((buf[5] & 0x03) << 8) | buf[6];
+
+ GST_DEBUG_OBJECT (dec, "SPU SET_SIZE left %d, top %d, right %d, "
+ "bottom %d", dec->left, dec->top, dec->right, dec->bottom);
+
+ dec->buf_dirty = TRUE;
+ buf += 7;
+ break;
+ case SPU_SET_OFFSETS: /* image 1 / image 2 offsets */
+ PARSE_BYTES_NEEDED (5);
+
+ dec->offset[0] = (((guint) buf[1]) << 8) | buf[2];
+ dec->offset[1] = (((guint) buf[3]) << 8) | buf[4];
+ GST_DEBUG_OBJECT (dec, "Offset1 %d, Offset2 %d",
+ dec->offset[0], dec->offset[1]);
+
+ dec->buf_dirty = TRUE;
+ buf += 5;
+ break;
+ case SPU_WIPE:
+ {
+ guint length;
+
+ PARSE_BYTES_NEEDED (3);
+
+ GST_WARNING_OBJECT (dec, "SPU_WIPE not yet implemented");
+
+ length = (buf[1] << 8) | (buf[2]);
+ buf += 1 + length;
+
+ dec->buf_dirty = TRUE;
+ break;
+ }
+ case SPU_END:
+ buf = (last_seq) ? end : next_seq;
+
+ /* Start a new control sequence */
+ if (buf + 4 < end) {
+ guint16 ticks = GST_READ_UINT16_BE (buf);
+
+ event_time = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
+
+ GST_DEBUG_OBJECT (dec,
+ "Next DCSQ at offset %u, delay %g secs (%d ticks)",
+ (guint) (buf - start),
+ gst_util_guint64_to_gdouble (event_time / GST_SECOND), ticks);
+
+ dec->parse_pos = buf;
+ if (event_time > 0) {
+ dec->next_event_ts += event_time;
+
+ GST_LOG_OBJECT (dec, "Exiting parse loop with time %g",
+ gst_guint64_to_gdouble (dec->next_event_ts) /
+ gst_guint64_to_gdouble (GST_SECOND));
+ return;
+ }
+ break;
+ } else {
+ dec->parse_pos = NULL;
+ dec->next_event_ts = GST_CLOCK_TIME_NONE;
+ GST_LOG_OBJECT (dec, "Finished all cmds. Exiting parse loop");
+ return;
+ }
+ default:
+ GST_ERROR
+ ("Invalid sequence in subtitle packet header (%.2x). Skipping",
+ *buf);
+ broken = TRUE;
+ dec->parse_pos = NULL;
+ break;
+ }
+ }
+}
+
+static inline int
+gst_get_nibble (guchar * buffer, RLE_state * state)
+{
+ if (state->aligned) {
+ state->next = buffer[state->offset[state->id]++];
+ state->aligned = 0;
+ return state->next >> 4;
+ } else {
+ state->aligned = 1;
+ return state->next & 0xf;
+ }
+}
+
+/* Premultiply the current lookup table into the "target" cache */
+static void
+gst_setup_palette (GstDvdSubDec * dec)
+{
+ gint i;
+ guint32 col;
+ Color_val *target_yuv = dec->palette_cache_yuv;
+ Color_val *target2_yuv = dec->hl_palette_cache_yuv;
+ Color_val *target_rgb = dec->palette_cache_rgb;
+ Color_val *target2_rgb = dec->hl_palette_cache_rgb;
+
+ for (i = 0; i < 4; i++, target2_yuv++, target_yuv++) {
+ col = dec->current_clut[dec->subtitle_index[i]];
+ target_yuv->Y_R = (col >> 16) & 0xff;
+ target_yuv->V_B = (col >> 8) & 0xff;
+ target_yuv->U_G = col & 0xff;
+ target_yuv->A = dec->subtitle_alpha[i] * 0xff / 0xf;
+
+ col = dec->current_clut[dec->menu_index[i]];
+ target2_yuv->Y_R = (col >> 16) & 0xff;
+ target2_yuv->V_B = (col >> 8) & 0xff;
+ target2_yuv->U_G = col & 0xff;
+ target2_yuv->A = dec->menu_alpha[i] * 0xff / 0xf;
+
+ /* If ARGB flag set, then convert YUV palette to RGB */
+ /* Using integer arithmetic */
+ if (dec->use_ARGB) {
+ guchar C = target_yuv->Y_R - 16;
+ guchar D = target_yuv->U_G - 128;
+ guchar E = target_yuv->V_B - 128;
+
+ target_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
+ target_rgb->U_G =
+ CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
+ target_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
+ target_rgb->A = target_yuv->A;
+
+ C = target2_yuv->Y_R - 16;
+ D = target2_yuv->U_G - 128;
+ E = target2_yuv->V_B - 128;
+
+ target2_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
+ target2_rgb->U_G =
+ CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
+ target2_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
+ target2_rgb->A = target2_yuv->A;
+ }
+ target_rgb++;
+ target2_rgb++;
+ }
+}
+
+static inline guint
+gst_get_rle_code (guchar * buffer, RLE_state * state)
+{
+ gint code;
+
+ code = gst_get_nibble (buffer, state);
+ if (code < 0x4) { /* 4 .. f */
+ code = (code << 4) | gst_get_nibble (buffer, state);
+ if (code < 0x10) { /* 1x .. 3x */
+ code = (code << 4) | gst_get_nibble (buffer, state);
+ if (code < 0x40) { /* 04x .. 0fx */
+ code = (code << 4) | gst_get_nibble (buffer, state);
+ }
+ }
+ }
+ return code;
+}
+
+#define DRAW_RUN(target,len,c) \
+G_STMT_START { \
+ gint i = 0; \
+ if ((c)->A) { \
+ for (i = 0; i < (len); i++) { \
+ *(target)++ = (c)->A; \
+ *(target)++ = (c)->Y_R; \
+ *(target)++ = (c)->U_G; \
+ *(target)++ = (c)->V_B; \
+ } \
+ } else { \
+ (target) += 4 * (len); \
+ } \
+} G_STMT_END
+
+/*
+ * This function steps over each run-length segment, drawing
+ * into the YUVA/ARGB buffers as it goes. UV are composited and then output
+ * at half width/height
+ */
+static void
+gst_draw_rle_line (GstDvdSubDec * dec, guchar * buffer, RLE_state * state)
+{
+ gint length, colourid;
+ guint code;
+ gint x, right;
+ guchar *target;
+
+ target = state->target;
+
+ x = dec->left;
+ right = dec->right + 1;
+
+ while (x < right) {
+ gboolean in_hl;
+ const Color_val *colour_entry;
+
+ code = gst_get_rle_code (buffer, state);
+ length = code >> 2;
+ colourid = code & 3;
+ if (dec->use_ARGB)
+ colour_entry = dec->palette_cache_rgb + colourid;
+ else
+ colour_entry = dec->palette_cache_yuv + colourid;
+
+ /* Length = 0 implies fill to the end of the line */
+ /* Restrict the colour run to the end of the line */
+ if (length == 0 || x + length > right)
+ length = right - x;
+
+ /* Check if this run of colour touches the highlight region */
+ in_hl = ((x <= state->hl_right) && (x + length) >= state->hl_left);
+ if (in_hl) {
+ gint run;
+
+ /* Draw to the left of the highlight */
+ if (x <= state->hl_left) {
+ run = MIN (length, state->hl_left - x + 1);
+
+ DRAW_RUN (target, run, colour_entry);
+ length -= run;
+ x += run;
+ }
+
+ /* Draw across the highlight region */
+ if (x <= state->hl_right) {
+ const Color_val *hl_colour;
+ if (dec->use_ARGB)
+ hl_colour = dec->hl_palette_cache_rgb + colourid;
+ else
+ hl_colour = dec->hl_palette_cache_yuv + colourid;
+
+ run = MIN (length, state->hl_right - x + 1);
+
+ DRAW_RUN (target, run, hl_colour);
+ length -= run;
+ x += run;
+ }
+ }
+
+ /* Draw the rest of the run */
+ if (length > 0) {
+ DRAW_RUN (target, length, colour_entry);
+ x += length;
+ }
+ }
+}
+
+/*
+ * Decode the RLE subtitle image and blend with the current
+ * frame buffer.
+ */
+static void
+gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec, GstVideoFrame * frame)
+{
+ gint y;
+ gint Y_stride;
+ guchar *buffer = dec->partialmap.data;
+ gint hl_top, hl_bottom;
+ gint last_y;
+ RLE_state state;
+ guint8 *Y_data;
+
+ GST_DEBUG_OBJECT (dec, "Merging subtitle on frame");
+
+ Y_data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+ Y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+
+ state.id = 0;
+ state.aligned = 1;
+ state.next = 0;
+ state.offset[0] = dec->offset[0];
+ state.offset[1] = dec->offset[1];
+
+ /* center the image when display rectangle exceeds the video width */
+ if (dec->in_width <= dec->right) {
+ gint left, disp_width;
+
+ disp_width = dec->right - dec->left + 1;
+ left = (dec->in_width - disp_width) / 2;
+ dec->left = left;
+ dec->right = left + disp_width - 1;
+
+ /* if it clips to the right, shift it left, but only till zero */
+ if (dec->right >= dec->in_width) {
+ gint shift = dec->right - dec->in_width - 1;
+ if (shift > dec->left)
+ shift = dec->left;
+ dec->left -= shift;
+ dec->right -= shift;
+ }
+
+ GST_DEBUG_OBJECT (dec, "clipping width to %d,%d",
+ dec->left, dec->in_width - 1);
+ }
+
+ /* for the height, bring it up till it fits as well as it can. We
+ * assume the picture is in the lower part. We should better check where it
+ * is and do something more clever. */
+ if (dec->in_height <= dec->bottom) {
+
+ /* shift it up, but only till zero */
+ gint shift = dec->bottom - dec->in_height - 1;
+ if (shift > dec->top)
+ shift = dec->top;
+ dec->top -= shift;
+ dec->bottom -= shift;
+
+ /* start on even line */
+ if (dec->top & 1) {
+ dec->top--;
+ dec->bottom--;
+ }
+
+ GST_DEBUG_OBJECT (dec, "clipping height to %d,%d",
+ dec->top, dec->in_height - 1);
+ }
+
+ if (dec->current_button) {
+ hl_top = dec->hl_top;
+ hl_bottom = dec->hl_bottom;
+ } else {
+ hl_top = -1;
+ hl_bottom = -1;
+ }
+ last_y = MIN (dec->bottom, dec->in_height);
+
+ y = dec->top;
+ state.target = Y_data + 4 * dec->left + (y * Y_stride);
+
+ /* Now draw scanlines until we hit last_y or end of RLE data */
+ for (; ((state.offset[1] < dec->data_size + 2) && (y <= last_y)); y++) {
+ /* Set up to draw the highlight if we're in the right scanlines */
+ if (y > hl_bottom || y < hl_top) {
+ state.hl_left = -1;
+ state.hl_right = -1;
+ } else {
+ state.hl_left = dec->hl_left;
+ state.hl_right = dec->hl_right;
+ }
+ gst_draw_rle_line (dec, buffer, &state);
+
+ state.target += Y_stride;
+
+ /* Realign the RLE state for the next line */
+ if (!state.aligned)
+ gst_get_nibble (buffer, &state);
+ state.id = !state.id;
+ }
+}
+
+static void
+gst_send_empty_fill (GstDvdSubDec * dec, GstClockTime ts)
+{
+ if (dec->next_ts < ts) {
+ GST_LOG_OBJECT (dec, "Sending GAP event update to advance time to %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (ts));
+
+ gst_pad_push_event (dec->srcpad,
+ gst_event_new_gap (dec->next_ts, ts - dec->next_ts));
+ }
+ dec->next_ts = ts;
+}
+
+static GstFlowReturn
+gst_send_subtitle_frame (GstDvdSubDec * dec, GstClockTime end_ts)
+{
+ GstFlowReturn flow;
+ GstBuffer *out_buf;
+ GstVideoFrame frame;
+ guint8 *data;
+ gint x, y;
+ static GstAllocationParams params = { 0, 3, 0, 0, };
+
+ g_assert (dec->have_title);
+ g_assert (dec->next_ts <= end_ts);
+
+ /* Check if we need to redraw the output buffer */
+ if (!dec->buf_dirty) {
+ flow = GST_FLOW_OK;
+ goto out;
+ }
+
+ out_buf =
+ gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&dec->info), ¶ms);
+ gst_video_frame_map (&frame, &dec->info, out_buf, GST_MAP_READWRITE);
+
+ data = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
+
+ /* Clear the buffer */
+ /* FIXME - move this into the buffer rendering code */
+ for (y = 0; y < dec->in_height; y++) {
+ guchar *line = data + 4 * dec->in_width * y;
+
+ for (x = 0; x < dec->in_width; x++) {
+ line[0] = 0; /* A */
+ if (!dec->use_ARGB) {
+ line[1] = 16; /* Y */
+ line[2] = 128; /* U */
+ line[3] = 128; /* V */
+ } else {
+ line[1] = 0; /* R */
+ line[2] = 0; /* G */
+ line[3] = 0; /* B */
+ }
+
+ line += 4;
+ }
+ }
+
+ /* FIXME: do we really want to honour the forced_display flag
+ * for subtitles streans? */
+ if (dec->visible || dec->forced_display) {
+ gst_dvd_sub_dec_merge_title (dec, &frame);
+ }
+
+ gst_video_frame_unmap (&frame);
+
+ dec->buf_dirty = FALSE;
+
+ GST_BUFFER_TIMESTAMP (out_buf) = dec->next_ts;
+ if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts)) {
+ GST_BUFFER_DURATION (out_buf) = GST_CLOCK_DIFF (dec->next_ts,
+ dec->next_event_ts);
+ } else {
+ GST_BUFFER_DURATION (out_buf) = GST_CLOCK_TIME_NONE;
+ }
+
+ GST_DEBUG_OBJECT (dec, "Sending subtitle buffer with ts %"
+ GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (out_buf)),
+ GST_BUFFER_DURATION (out_buf));
+
+ flow = gst_pad_push (dec->srcpad, out_buf);
+
+out:
+ dec->next_ts = end_ts;
+ return flow;
+}
+
+/* Walk time forward, processing any subtitle events as needed. */
+static GstFlowReturn
+gst_dvd_sub_dec_advance_time (GstDvdSubDec * dec, GstClockTime new_ts)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ GST_LOG_OBJECT (dec, "Advancing time to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (new_ts));
+
+ if (!dec->have_title) {
+ gst_send_empty_fill (dec, new_ts);
+ return ret;
+ }
+
+ while (dec->next_ts < new_ts) {
+ GstClockTime next_ts = new_ts;
+
+ if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts) &&
+ dec->next_event_ts < next_ts) {
+ /* We might need to process the subtitle cmd queue */
+ next_ts = dec->next_event_ts;
+ }
+
+ /*
+ * Now, either output a filler or a frame spanning
+ * dec->next_ts to next_ts
+ */
+ if (dec->visible || dec->forced_display) {
+ ret = gst_send_subtitle_frame (dec, next_ts);
+ } else {
+ gst_send_empty_fill (dec, next_ts);
+ }
+
+ /*
+ * and then process some subtitle cmds if we need
+ */
+ if (next_ts == dec->next_event_ts)
+ gst_dvd_sub_dec_parse_subpic (dec);
+ }
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstDvdSubDec *dec;
+ guint8 *data;
+ glong size = 0;
+
+ dec = GST_DVD_SUB_DEC (parent);
+
+ GST_DEBUG_OBJECT (dec, "Have buffer of size %" G_GSIZE_FORMAT ", ts %"
+ GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT, gst_buffer_get_size (buf),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_DURATION (buf));
+
+ if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+ if (!GST_CLOCK_TIME_IS_VALID (dec->next_ts)) {
+ dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
+ }
+
+ /* Move time forward to the start of the new buffer */
+ ret = gst_dvd_sub_dec_advance_time (dec, GST_BUFFER_TIMESTAMP (buf));
+ }
+
+ if (dec->have_title) {
+ gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+ gst_buffer_unref (dec->partialbuf);
+ dec->partialbuf = NULL;
+ dec->have_title = FALSE;
+ }
+
+ GST_DEBUG_OBJECT (dec, "Got subtitle buffer, pts %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ /* deal with partial frame from previous buffer */
+ if (dec->partialbuf) {
+ gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+ dec->partialbuf = gst_buffer_append (dec->partialbuf, buf);
+ } else {
+ dec->partialbuf = buf;
+ }
+
+ gst_buffer_map (dec->partialbuf, &dec->partialmap, GST_MAP_READ);
+
+ data = dec->partialmap.data;
+ size = dec->partialmap.size;
+
+ if (size > 4) {
+ dec->packet_size = GST_READ_UINT16_BE (data);
+
+ if (dec->packet_size == size) {
+ GST_LOG_OBJECT (dec, "Subtitle packet size %d, current size %ld",
+ dec->packet_size, size);
+
+ dec->data_size = GST_READ_UINT16_BE (data + 2);
+
+ /* Reset parameters for a new subtitle buffer */
+ dec->parse_pos = data;
+ dec->forced_display = FALSE;
+ dec->visible = FALSE;
+
+ dec->have_title = TRUE;
+ dec->next_event_ts = GST_BUFFER_TIMESTAMP (dec->partialbuf);
+
+ if (!GST_CLOCK_TIME_IS_VALID (dec->next_event_ts))
+ dec->next_event_ts = dec->next_ts;
+
+ dec->next_event_ts += gst_dvd_sub_dec_get_event_delay (dec);
+ }
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps)
+{
+ GstDvdSubDec *dec = GST_DVD_SUB_DEC (gst_pad_get_parent (pad));
+ gboolean ret = FALSE;
+ GstCaps *out_caps = NULL, *peer_caps = NULL;
+
+ GST_DEBUG_OBJECT (dec, "setcaps called with %" GST_PTR_FORMAT, caps);
+
+ out_caps = gst_caps_new_simple ("video/x-raw",
+ "format", G_TYPE_STRING, "AYUV",
+ "width", G_TYPE_INT, dec->in_width,
+ "height", G_TYPE_INT, dec->in_height,
+ "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+
+ peer_caps = gst_pad_get_allowed_caps (dec->srcpad);
+ if (G_LIKELY (peer_caps)) {
+ guint i = 0, n = 0;
+
+ n = gst_caps_get_size (peer_caps);
+ GST_DEBUG_OBJECT (dec, "peer allowed caps (%u structure(s)) are %"
+ GST_PTR_FORMAT, n, peer_caps);
+
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peer_caps, i);
+ /* Check if the peer pad support ARGB format, if yes change caps */
+ if (gst_structure_has_name (s, "video/x-raw")) {
+ GstCaps *downstream_caps;
+ gst_caps_unref (out_caps);
+ GST_DEBUG_OBJECT (dec, "trying with ARGB");
+
+ out_caps = gst_caps_new_simple ("video/x-raw",
+ "format", G_TYPE_STRING, "ARGB",
+ "width", G_TYPE_INT, dec->in_width,
+ "height", G_TYPE_INT, dec->in_height,
+ "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+
+ downstream_caps = gst_pad_peer_query_caps (dec->srcpad, NULL);
+ if (gst_caps_can_intersect (downstream_caps, out_caps)) {
+ gst_caps_unref (downstream_caps);
+ GST_DEBUG_OBJECT (dec, "peer accepted ARGB");
+ /* If ARGB format then set the flag */
+ dec->use_ARGB = TRUE;
+ break;
+ }
+ gst_caps_unref (downstream_caps);
+ }
+ }
+ gst_caps_unref (peer_caps);
+ }
+ GST_DEBUG_OBJECT (dec, "setting caps downstream to %" GST_PTR_FORMAT,
+ out_caps);
+ if (gst_pad_set_caps (dec->srcpad, out_caps)) {
+ gst_video_info_from_caps (&dec->info, out_caps);
+ } else {
+ GST_WARNING_OBJECT (dec, "failed setting downstream caps");
+ gst_caps_unref (out_caps);
+ goto beach;
+ }
+
+ gst_caps_unref (out_caps);
+ ret = TRUE;
+
+beach:
+ gst_object_unref (dec);
+ return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstDvdSubDec *dec = GST_DVD_SUB_DEC (parent);
+ gboolean ret = FALSE;
+
+ GST_LOG_OBJECT (dec, "%s event", GST_EVENT_TYPE_NAME (event));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_dvd_sub_dec_sink_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_CUSTOM_DOWNSTREAM:{
+
+ if (gst_event_has_name (event, "application/x-gst-dvd")) {
+ const GstStructure *s = gst_event_get_structure (event);
+ GstClockTime ts = GST_CLOCK_TIME_NONE;
+
+ if (gst_structure_get_clock_time (s, "ts", &ts)
+ && GST_CLOCK_TIME_IS_VALID (ts))
+ gst_dvd_sub_dec_advance_time (dec, ts);
+
+ if (gst_dvd_sub_dec_handle_dvd_event (dec, event)) {
+ /* gst_dvd_sub_dec_advance_time (dec, dec->next_ts + GST_SECOND / 30.0); */
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ }
+ }
+
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ case GST_EVENT_GAP:
+ {
+ GstClockTime start, duration;
+
+ gst_event_parse_gap (event, &start, &duration);
+ if (GST_CLOCK_TIME_IS_VALID (start)) {
+ if (GST_CLOCK_TIME_IS_VALID (duration))
+ start += duration;
+ /* we do not expect another buffer until after gap,
+ * so that is our position now */
+ GST_DEBUG_OBJECT (dec, "Got GAP event, advancing time from %"
+ GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (dec->next_ts), GST_TIME_ARGS (start));
+
+ gst_dvd_sub_dec_advance_time (dec, start);
+ } else {
+ GST_WARNING_OBJECT (dec, "Got GAP event with invalid position");
+ }
+
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ }
+ case GST_EVENT_SEGMENT:
+ {
+ GstSegment seg;
+
+ gst_event_copy_segment (event, &seg);
+
+ {
+#if 0
+ /* Turn off forced highlight display */
+ dec->forced_display = 0;
+ dec->current_button = 0;
+#endif
+ if (dec->partialbuf) {
+ gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+ gst_buffer_unref (dec->partialbuf);
+ dec->partialbuf = NULL;
+ dec->have_title = FALSE;
+ }
+
+ if (GST_CLOCK_TIME_IS_VALID (seg.time))
+ dec->next_ts = seg.time;
+ else
+ dec->next_ts = GST_CLOCK_TIME_NONE;
+
+ GST_DEBUG_OBJECT (dec, "Got newsegment, new time = %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (dec->next_ts));
+
+ ret = gst_pad_event_default (pad, parent, event);
+ }
+ break;
+ }
+ case GST_EVENT_FLUSH_STOP:{
+ /* Turn off forced highlight display */
+ dec->forced_display = 0;
+ dec->current_button = 0;
+
+ if (dec->partialbuf) {
+ gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+ gst_buffer_unref (dec->partialbuf);
+ dec->partialbuf = NULL;
+ dec->have_title = FALSE;
+ }
+
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ default:{
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ }
+ return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec, GstEvent * event)
+{
+ GstStructure *structure;
+ const gchar *event_name;
+
+ structure = (GstStructure *) gst_event_get_structure (event);
+
+ if (structure == NULL)
+ goto not_handled;
+
+ event_name = gst_structure_get_string (structure, "event");
+
+ GST_LOG_OBJECT (dec,
+ "DVD event %s with timestamp %" G_GINT64_FORMAT " on sub pad",
+ GST_STR_NULL (event_name), GST_EVENT_TIMESTAMP (event));
+
+ if (event_name == NULL)
+ goto not_handled;
+
+ if (strcmp (event_name, "dvd-spu-highlight") == 0) {
+ gint button;
+ gint palette, sx, sy, ex, ey;
+ gint i;
+
+ /* Details for the highlight region to display */
+ if (!gst_structure_get_int (structure, "button", &button) ||
+ !gst_structure_get_int (structure, "palette", &palette) ||
+ !gst_structure_get_int (structure, "sx", &sx) ||
+ !gst_structure_get_int (structure, "sy", &sy) ||
+ !gst_structure_get_int (structure, "ex", &ex) ||
+ !gst_structure_get_int (structure, "ey", &ey)) {
+ GST_ERROR_OBJECT (dec, "Invalid dvd-spu-highlight event received");
+ return TRUE;
+ }
+ dec->current_button = button;
+ dec->hl_left = sx;
+ dec->hl_top = sy;
+ dec->hl_right = ex;
+ dec->hl_bottom = ey;
+ for (i = 0; i < 4; i++) {
+ dec->menu_alpha[i] = ((guint32) (palette) >> (i * 4)) & 0x0f;
+ dec->menu_index[i] = ((guint32) (palette) >> (16 + (i * 4))) & 0x0f;
+ }
+
+ GST_DEBUG_OBJECT (dec, "New button activated highlight=(%d,%d) to (%d,%d) "
+ "palette 0x%x", sx, sy, ex, ey, palette);
+ gst_setup_palette (dec);
+
+ dec->buf_dirty = TRUE;
+ } else if (strcmp (event_name, "dvd-spu-clut-change") == 0) {
+ /* Take a copy of the colour table */
+ gchar name[16];
+ int i;
+ gint value;
+
+ GST_LOG_OBJECT (dec, "New colour table received");
+ for (i = 0; i < 16; i++) {
+ g_snprintf (name, sizeof (name), "clut%02d", i);
+ if (!gst_structure_get_int (structure, name, &value)) {
+ GST_ERROR_OBJECT (dec, "dvd-spu-clut-change event did not "
+ "contain %s field", name);
+ break;
+ }
+ dec->current_clut[i] = (guint32) (value);
+ }
+
+ gst_setup_palette (dec);
+
+ dec->buf_dirty = TRUE;
+ } else if (strcmp (event_name, "dvd-spu-stream-change") == 0
+ || strcmp (event_name, "dvd-spu-reset-highlight") == 0) {
+ /* Turn off forced highlight display */
+ dec->current_button = 0;
+
+ GST_LOG_OBJECT (dec, "Clearing button state");
+ dec->buf_dirty = TRUE;
+ } else if (strcmp (event_name, "dvd-spu-still-frame") == 0) {
+ /* Handle a still frame */
+ GST_LOG_OBJECT (dec, "Received still frame notification");
+ } else {
+ goto not_handled;
+ }
+
+ return TRUE;
+
+not_handled:
+ {
+ /* Ignore all other unknown events */
+ GST_LOG_OBJECT (dec, "Ignoring other custom event %" GST_PTR_FORMAT,
+ structure);
+ return FALSE;
+ }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gboolean ret = FALSE;
+
+ ret |= GST_ELEMENT_REGISTER (dvdsubdec, plugin);
+ ret |= GST_ELEMENT_REGISTER (dvdsubparse, plugin);
+
+ return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ dvdsub,
+ "DVD subtitle parser and decoder", plugin_init,
+ VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
+ * Copyright (C) <2002> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef __GST_DVDSUBDEC_H__
+#define __GST_DVDSUBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_SUB_DEC (gst_dvd_sub_dec_get_type())
+#define GST_DVD_SUB_DEC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_SUB_DEC,GstDvdSubDec))
+#define GST_DVD_SUB_DEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_SUB_DEC,GstDvdSubDecClass))
+#define GST_IS_DVD_SUB_DEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_SUB_DEC))
+#define GST_IS_DVD_SUB_DEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SUB_DEC))
+
+typedef struct _GstDvdSubDec GstDvdSubDec;
+typedef struct _GstDvdSubDecClass GstDvdSubDecClass;
+
+/* Hold premultimplied colour values */
+typedef struct Color_val
+{
+ guchar Y_R;
+ guchar U_G;
+ guchar V_B;
+ guchar A;
+
+} Color_val;
+
+struct _GstDvdSubDec
+{
+ GstElement element;
+
+ GstPad *sinkpad;
+ GstPad *srcpad;
+
+ gint in_width, in_height;
+
+ /* Collect together subtitle buffers until we have a full control sequence */
+ GstBuffer *partialbuf;
+ GstMapInfo partialmap;
+ gboolean have_title;
+
+ guchar subtitle_index[4];
+ guchar menu_index[4];
+ guchar subtitle_alpha[4];
+ guchar menu_alpha[4];
+
+ guint32 current_clut[16];
+ Color_val palette_cache_yuv[4];
+ Color_val hl_palette_cache_yuv[4];
+
+ Color_val palette_cache_rgb[4];
+ Color_val hl_palette_cache_rgb[4];
+
+ GstVideoInfo info;
+ gboolean use_ARGB;
+ GstClockTime next_ts;
+
+ /*
+ * State info for the current subpicture
+ * buffer
+ */
+ guchar *parse_pos;
+
+ guint16 packet_size;
+ guint16 data_size;
+
+ gint offset[2];
+
+ gboolean forced_display;
+ gboolean visible;
+
+ gint left, top, right, bottom;
+ gint hl_left, hl_top, hl_right, hl_bottom;
+
+ gint current_button;
+
+ GstClockTime next_event_ts;
+
+ gboolean buf_dirty;
+};
+
+struct _GstDvdSubDecClass
+{
+ GstElementClass parent_class;
+};
+
+GType gst_dvd_sub_dec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdsubdec);
+
+G_END_DECLS
+
+#endif /* __GST_DVDSUBDEC_H__ */
--- /dev/null
+/* GStreamer DVD subtitle parser
+ * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+#include "gstdvdsubparse.h"
+
+GST_DEBUG_CATEGORY_STATIC (dvdsubparse_debug);
+#define GST_CAT_DEFAULT dvdsubparse_debug
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("subpicture/x-dvd, parsed=(boolean)true")
+ );
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("subpicture/x-dvd")
+ );
+
+static void gst_dvd_sub_parse_finalize (GObject * object);
+
+static void gst_dvd_sub_parse_reset (GstDvdSubParse * parse);
+
+static gboolean gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+
+static GstStateChangeReturn gst_dvd_sub_parse_change_state (GstElement *
+ element, GstStateChange transition);
+
+#define gst_dvd_sub_parse_parent_class parent_class
+G_DEFINE_TYPE (GstDvdSubParse, gst_dvd_sub_parse, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (dvdsubparse, "dvdsubparse", GST_RANK_NONE,
+ GST_TYPE_DVD_SUB_PARSE);
+
+static void
+gst_dvd_sub_parse_class_init (GstDvdSubParseClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_dvd_sub_parse_finalize;
+
+ GST_DEBUG_CATEGORY_INIT (dvdsubparse_debug, "dvdsubparse", 0,
+ "DVD subtitle parser");
+
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_change_state);
+
+ gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+ gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "DVD subtitle parser", "Codec/Parser/Subtitle",
+ "Parses and packetizes DVD subtitle streams",
+ "Mark Nauwelaerts <mnauw@users.sourceforge.net>");
+}
+
+static void
+gst_dvd_sub_parse_finalize (GObject * object)
+{
+ GstDvdSubParse *parse = GST_DVD_SUB_PARSE (object);
+
+ g_object_unref (parse->adapter);
+ parse->adapter = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_dvd_sub_parse_init (GstDvdSubParse * parse)
+{
+ parse->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+ gst_pad_set_chain_function (parse->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_chain));
+ gst_pad_set_event_function (parse->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_event));
+ gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+
+ parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+ gst_pad_use_fixed_caps (parse->srcpad);
+ gst_pad_set_caps (parse->srcpad,
+ gst_static_pad_template_get_caps (&src_template));
+ gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
+
+ /* remainder */
+ parse->adapter = gst_adapter_new ();
+ gst_dvd_sub_parse_reset (parse);
+}
+
+static void
+gst_dvd_sub_parse_reset (GstDvdSubParse * parse)
+{
+ parse->needed = 0;
+ parse->stamp = GST_CLOCK_TIME_NONE;
+ gst_adapter_clear (parse->adapter);
+}
+
+static gboolean
+gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstDvdSubParse *parse;
+ gboolean ret;
+
+ parse = GST_DVD_SUB_PARSE (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_unref (event);
+ caps = gst_static_pad_template_get_caps (&src_template);
+ gst_pad_push_event (parse->srcpad, gst_event_new_caps (caps));
+ gst_caps_unref (caps);
+ ret = TRUE;
+ break;
+ }
+ case GST_EVENT_FLUSH_STOP:
+ gst_dvd_sub_parse_reset (parse);
+ /* fall-through */
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return ret;
+}
+
+
+static GstFlowReturn
+gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstDvdSubParse *parse = GST_DVD_SUB_PARSE (parent);
+ GstAdapter *adapter;
+ GstBuffer *outbuf = NULL;
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ adapter = parse->adapter;
+
+ GST_LOG_OBJECT (parse, "%" G_GSIZE_FORMAT " bytes, ts: %" GST_TIME_FORMAT,
+ gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ gst_adapter_push (adapter, buf);
+
+ if (!parse->needed) {
+ guint8 data[2];
+
+ gst_adapter_copy (adapter, data, 0, 2);
+ parse->needed = GST_READ_UINT16_BE (data);
+ }
+
+ if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+ if (GST_CLOCK_TIME_IS_VALID (parse->stamp))
+ /* normally, we expect only the first fragment to carry a timestamp */
+ GST_WARNING_OBJECT (parse, "Received more timestamps than expected.");
+ else
+ parse->stamp = GST_BUFFER_TIMESTAMP (buf);
+ }
+
+ if (parse->needed) {
+ guint av;
+
+ av = gst_adapter_available (adapter);
+ if (av >= parse->needed) {
+ if (av > parse->needed) {
+ /* normally, we expect several fragment, boundary aligned */
+ GST_WARNING_OBJECT (parse, "Unexpected: needed %d, "
+ "but more (%d) is available.", parse->needed, av);
+ }
+ outbuf = gst_adapter_take_buffer (adapter, parse->needed);
+ /* decorate buffer */
+ GST_BUFFER_TIMESTAMP (outbuf) = parse->stamp;
+ /* reset state */
+ parse->stamp = GST_CLOCK_TIME_NONE;
+ parse->needed = 0;
+ /* and send along */
+ ret = gst_pad_push (parse->srcpad, outbuf);
+ }
+ }
+
+ return ret;
+}
+
+static GstStateChangeReturn
+gst_dvd_sub_parse_change_state (GstElement * element, GstStateChange transition)
+{
+ GstDvdSubParse *parse = GST_DVD_SUB_PARSE (element);
+ GstStateChangeReturn ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ if (ret != GST_STATE_CHANGE_SUCCESS)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_dvd_sub_parse_reset (parse);
+ break;
+ default:
+ break;
+ }
+
+ return GST_STATE_CHANGE_SUCCESS;
+}
--- /dev/null
+/* GStreamer DVD subtitle parser
+ * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_DVDSUBPARSE_H__
+#define __GST_DVDSUBPARSE_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_SUB_PARSE \
+ (gst_dvd_sub_parse_get_type())
+#define GST_DVD_SUB_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParse))
+#define GST_DVD_SUB_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
+#define GST_DVD_SUB_PARSE_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
+#define GST_IS_DVD_SUB_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_DVD_SUB_PARSE))
+#define GST_IS_DVD_SUB_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_DVD_SUB_PARSE))
+
+typedef struct _GstDvdSubParse GstDvdSubParse;
+typedef struct _GstDvdSubParseClass GstDvdSubParseClass;
+
+struct _GstDvdSubParse {
+ GstElement element;
+
+ /*< private >*/
+ GstPad *srcpad;
+ GstPad *sinkpad;
+
+ GstAdapter *adapter; /* buffer incoming data */
+ GstClockTime stamp; /* timestamp of current packet */
+ guint needed; /* size of current packet to be assembled */
+};
+
+struct _GstDvdSubParseClass {
+ GstElementClass parent_class;
+};
+
+GType gst_dvd_sub_parse_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdsubparse);
+
+G_END_DECLS
+
+#endif /* __GST_DVDSUBPARSE_H__ */
+
--- /dev/null
+dvdsub_sources = [
+ 'gstdvdsubdec.c',
+ 'gstdvdsubparse.c',
+]
+
+gstdvdsub = library('gstdvdsub',
+ dvdsub_sources,
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstbase_dep, gstvideo_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstdvdsub, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstdvdsub]
--- /dev/null
+foreach plugin : ['asfdemux', 'dvdlpcmdec', 'dvdsub', 'realmedia', 'xingmux']
+ if not get_option(plugin).disabled()
+ subdir(plugin)
+ endif
+endforeach
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "asmrules.h"
+
+#define MAX_RULE_LENGTH 2048
+
+/* define to enable some more debug */
+#undef DEBUG
+
+static GstASMNode *
+gst_asm_node_new (void)
+{
+ GstASMNode *node;
+
+ node = g_new0 (GstASMNode, 1);
+ node->type = GST_ASM_NODE_UNKNOWN;
+
+ return node;
+}
+
+static void
+gst_asm_node_free (GstASMNode * node)
+{
+ if (node->left)
+ gst_asm_node_free (node->left);
+ if (node->right)
+ gst_asm_node_free (node->right);
+ if (node->type == GST_ASM_NODE_VARIABLE && node->data.varname)
+ g_free (node->data.varname);
+ g_free (node);
+}
+
+static gfloat
+gst_asm_operator_eval (GstASMOp optype, gfloat left, gfloat right)
+{
+ gfloat result = 0.0;
+
+ switch (optype) {
+ case GST_ASM_OP_GREATER:
+ result = (gfloat) (left > right);
+ break;
+ case GST_ASM_OP_LESS:
+ result = (gfloat) (left < right);
+ break;
+ case GST_ASM_OP_GREATEREQUAL:
+ result = (gfloat) (left >= right);
+ break;
+ case GST_ASM_OP_LESSEQUAL:
+ result = (gfloat) (left <= right);
+ break;
+ case GST_ASM_OP_EQUAL:
+ result = (gfloat) (left == right);
+ break;
+ case GST_ASM_OP_NOTEQUAL:
+ result = (gfloat) (left != right);
+ break;
+ case GST_ASM_OP_AND:
+ result = (gfloat) (left && right);
+ break;
+ case GST_ASM_OP_OR:
+ result = (gfloat) (left || right);
+ break;
+ default:
+ break;
+ }
+ return result;
+}
+
+static gfloat
+gst_asm_node_evaluate (GstASMNode * node, GHashTable * vars)
+{
+ gfloat result = 0.0;
+
+ if (node == NULL)
+ return 0.0;
+
+ switch (node->type) {
+ case GST_ASM_NODE_VARIABLE:
+ {
+ gchar *val;
+
+ val = g_hash_table_lookup (vars, node->data.varname);
+ if (val)
+ result = (gfloat) atof (val);
+ break;
+ }
+ case GST_ASM_NODE_INTEGER:
+ result = (gfloat) node->data.intval;
+ break;
+ case GST_ASM_NODE_FLOAT:
+ result = node->data.floatval;
+ break;
+ case GST_ASM_NODE_OPERATOR:
+ {
+ gfloat left, right;
+
+ left = gst_asm_node_evaluate (node->left, vars);
+ right = gst_asm_node_evaluate (node->right, vars);
+
+ result = gst_asm_operator_eval (node->data.optype, left, right);
+ break;
+ }
+ default:
+ break;
+ }
+ return result;
+}
+
+#define IS_SPACE(p) (((p) == ' ') || ((p) == '\n') || \
+ ((p) == '\r') || ((p) == '\t'))
+#define IS_RULE_DELIM(p) (((p) == ',') || ((p) == ';') || ((p) == ')'))
+#define IS_OPERATOR(p) (((p) == '>') || ((p) == '<') || \
+ ((p) == '=') || ((p) == '!') || \
+ ((p) == '&') || ((p) == '|'))
+#define IS_NUMBER(p) ((((p) >= '0') && ((p) <= '9')) || ((p) == '.'))
+#define IS_CHAR(p) (!IS_OPERATOR(ch) && !IS_RULE_DELIM(ch) && (ch != '\0'))
+
+#define IS_OP_TOKEN(t) (((t) == GST_ASM_TOKEN_AND) || ((t) == GST_ASM_TOKEN_OR))
+#define IS_COND_TOKEN(t) (((t) == GST_ASM_TOKEN_LESS) || ((t) == GST_ASM_TOKEN_LESSEQUAL) || \
+ ((t) == GST_ASM_TOKEN_GREATER) || ((t) == GST_ASM_TOKEN_GREATEREQUAL) || \
+ ((t) == GST_ASM_TOKEN_EQUAL) || ((t) == GST_ASM_TOKEN_NOTEQUAL))
+
+typedef struct
+{
+ const gchar *buffer;
+ gint pos;
+ gchar ch;
+
+ GstASMToken token;
+ gchar val[MAX_RULE_LENGTH];
+} GstASMScan;
+
+#define NEXT_CHAR(scan) ((scan)->ch = (scan)->buffer[(scan)->pos++])
+#define THIS_CHAR(scan) ((scan)->ch)
+
+static GstASMScan *
+gst_asm_scan_new (const gchar * buffer)
+{
+ GstASMScan *scan;
+
+ scan = g_new0 (GstASMScan, 1);
+ scan->buffer = buffer;
+ NEXT_CHAR (scan);
+
+ return scan;
+}
+
+static void
+gst_asm_scan_free (GstASMScan * scan)
+{
+ g_free (scan);
+}
+
+static void
+gst_asm_scan_string (GstASMScan * scan, gchar delim)
+{
+ gchar ch;
+ gint i = 0;
+
+ ch = THIS_CHAR (scan);
+ while ((ch != delim) && (ch != '\0')) {
+ if (i < MAX_RULE_LENGTH - 1)
+ scan->val[i++] = ch;
+ ch = NEXT_CHAR (scan);
+ if (ch == '\\')
+ ch = NEXT_CHAR (scan);
+ }
+ scan->val[i] = '\0';
+
+ if (ch == delim)
+ NEXT_CHAR (scan);
+
+ scan->token = GST_ASM_TOKEN_STRING;
+}
+
+static void
+gst_asm_scan_number (GstASMScan * scan)
+{
+ gchar ch;
+ gint i = 0;
+ gboolean have_float = FALSE;
+
+ ch = THIS_CHAR (scan);
+ /* real strips all spaces that are not inside quotes for numbers */
+ while ((IS_NUMBER (ch) || IS_SPACE (ch))) {
+ if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
+ scan->val[i++] = ch;
+ if (ch == '.')
+ have_float = TRUE;
+ ch = NEXT_CHAR (scan);
+ }
+ scan->val[i] = '\0';
+
+ if (have_float)
+ scan->token = GST_ASM_TOKEN_FLOAT;
+ else
+ scan->token = GST_ASM_TOKEN_INT;
+}
+
+static void
+gst_asm_scan_identifier (GstASMScan * scan)
+{
+ gchar ch;
+ gint i = 0;
+
+ ch = THIS_CHAR (scan);
+ /* real strips all spaces that are not inside quotes for identifiers */
+ while ((IS_CHAR (ch) || IS_SPACE (ch))) {
+ if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
+ scan->val[i++] = ch;
+ ch = NEXT_CHAR (scan);
+ }
+ scan->val[i] = '\0';
+
+ scan->token = GST_ASM_TOKEN_IDENTIFIER;
+}
+
+static void
+gst_asm_scan_print_token (GstASMScan * scan)
+{
+#ifdef DEBUG
+ switch (scan->token) {
+ case GST_ASM_TOKEN_NONE:
+ g_print ("none\n");
+ break;
+ case GST_ASM_TOKEN_EOF:
+ g_print ("EOF\n");
+ break;
+
+ case GST_ASM_TOKEN_INT:
+ g_print ("INT %d\n", atoi (scan->val));
+ break;
+ case GST_ASM_TOKEN_FLOAT:
+ g_print ("FLOAT %f\n", atof (scan->val));
+ break;
+ case GST_ASM_TOKEN_IDENTIFIER:
+ g_print ("ID %s\n", scan->val);
+ break;
+ case GST_ASM_TOKEN_STRING:
+ g_print ("STRING %s\n", scan->val);
+ break;
+
+ case GST_ASM_TOKEN_HASH:
+ g_print ("HASH\n");
+ break;
+ case GST_ASM_TOKEN_SEMICOLON:
+ g_print ("SEMICOLON\n");
+ break;
+ case GST_ASM_TOKEN_COMMA:
+ g_print ("COMMA\n");
+ break;
+ case GST_ASM_TOKEN_EQUAL:
+ g_print ("==\n");
+ break;
+ case GST_ASM_TOKEN_NOTEQUAL:
+ g_print ("!=\n");
+ break;
+ case GST_ASM_TOKEN_AND:
+ g_print ("&&\n");
+ break;
+ case GST_ASM_TOKEN_OR:
+ g_print ("||\n");
+ break;
+ case GST_ASM_TOKEN_LESS:
+ g_print ("<\n");
+ break;
+ case GST_ASM_TOKEN_LESSEQUAL:
+ g_print ("<=\n");
+ break;
+ case GST_ASM_TOKEN_GREATER:
+ g_print (">\n");
+ break;
+ case GST_ASM_TOKEN_GREATEREQUAL:
+ g_print (">=\n");
+ break;
+ case GST_ASM_TOKEN_DOLLAR:
+ g_print ("$\n");
+ break;
+ case GST_ASM_TOKEN_LPAREN:
+ g_print ("(\n");
+ break;
+ case GST_ASM_TOKEN_RPAREN:
+ g_print (")\n");
+ break;
+ default:
+ break;
+ }
+#endif
+}
+
+static GstASMToken
+gst_asm_scan_next_token (GstASMScan * scan)
+{
+ gchar ch;
+
+ ch = THIS_CHAR (scan);
+
+ /* skip spaces */
+ while (IS_SPACE (ch))
+ ch = NEXT_CHAR (scan);
+
+ /* remove \ which is common in front of " */
+ while (ch == '\\')
+ ch = NEXT_CHAR (scan);
+
+ switch (ch) {
+ case '#':
+ scan->token = GST_ASM_TOKEN_HASH;
+ NEXT_CHAR (scan);
+ break;
+ case ';':
+ scan->token = GST_ASM_TOKEN_SEMICOLON;
+ NEXT_CHAR (scan);
+ break;
+ case ',':
+ scan->token = GST_ASM_TOKEN_COMMA;
+ NEXT_CHAR (scan);
+ break;
+ case '=':
+ scan->token = GST_ASM_TOKEN_EQUAL;
+ if (NEXT_CHAR (scan) == '=')
+ NEXT_CHAR (scan);
+ break;
+ case '!':
+ if (NEXT_CHAR (scan) == '=') {
+ scan->token = GST_ASM_TOKEN_NOTEQUAL;
+ NEXT_CHAR (scan);
+ }
+ break;
+ case '&':
+ scan->token = GST_ASM_TOKEN_AND;
+ if (NEXT_CHAR (scan) == '&')
+ NEXT_CHAR (scan);
+ break;
+ case '|':
+ scan->token = GST_ASM_TOKEN_OR;
+ if (NEXT_CHAR (scan) == '|')
+ NEXT_CHAR (scan);
+ break;
+ case '<':
+ scan->token = GST_ASM_TOKEN_LESS;
+ if (NEXT_CHAR (scan) == '=') {
+ scan->token = GST_ASM_TOKEN_LESSEQUAL;
+ NEXT_CHAR (scan);
+ }
+ break;
+ case '>':
+ scan->token = GST_ASM_TOKEN_GREATER;
+ if (NEXT_CHAR (scan) == '=') {
+ scan->token = GST_ASM_TOKEN_GREATEREQUAL;
+ NEXT_CHAR (scan);
+ }
+ break;
+ case '$':
+ scan->token = GST_ASM_TOKEN_DOLLAR;
+ NEXT_CHAR (scan);
+ break;
+ case '(':
+ scan->token = GST_ASM_TOKEN_LPAREN;
+ NEXT_CHAR (scan);
+ break;
+ case ')':
+ scan->token = GST_ASM_TOKEN_RPAREN;
+ NEXT_CHAR (scan);
+ break;
+ case '"':
+ NEXT_CHAR (scan);
+ gst_asm_scan_string (scan, '"');
+ break;
+ case '\'':
+ NEXT_CHAR (scan);
+ gst_asm_scan_string (scan, '\'');
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ gst_asm_scan_number (scan);
+ break;
+ case '\0':
+ scan->token = GST_ASM_TOKEN_EOF;
+ break;
+ default:
+ gst_asm_scan_identifier (scan);
+ break;
+ }
+ gst_asm_scan_print_token (scan);
+ return scan->token;
+}
+
+static GstASMRule *
+gst_asm_rule_new (void)
+{
+ GstASMRule *rule;
+
+ rule = g_new (GstASMRule, 1);
+ rule->root = NULL;
+ rule->props = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ return rule;
+}
+
+static void
+gst_asm_rule_free (GstASMRule * rule)
+{
+ g_hash_table_destroy (rule->props);
+ if (rule->root)
+ gst_asm_node_free (rule->root);
+ g_free (rule);
+}
+
+static void
+gst_asm_rule_add_property (GstASMRule * rule, gchar * key, gchar * val)
+{
+ g_hash_table_insert (rule->props, key, val);
+}
+
+static GstASMNode *gst_asm_scan_parse_condition (GstASMScan * scan);
+
+static GstASMNode *
+gst_asm_scan_parse_operand (GstASMScan * scan)
+{
+ GstASMNode *node;
+
+ switch (scan->token) {
+ case GST_ASM_TOKEN_DOLLAR:
+ gst_asm_scan_next_token (scan);
+
+ if (scan->token != GST_ASM_TOKEN_IDENTIFIER)
+ g_warning ("identifier expected");
+
+ node = gst_asm_node_new ();
+ node->type = GST_ASM_NODE_VARIABLE;
+ node->data.varname = g_strdup (scan->val);
+ break;
+ case GST_ASM_TOKEN_INT:
+ node = gst_asm_node_new ();
+ node->type = GST_ASM_NODE_INTEGER;
+ node->data.intval = (gfloat) atof (scan->val);
+ break;
+ case GST_ASM_TOKEN_FLOAT:
+ node = gst_asm_node_new ();
+ node->type = GST_ASM_NODE_FLOAT;
+ node->data.floatval = atoi (scan->val);
+ break;
+ case GST_ASM_TOKEN_LPAREN:
+ gst_asm_scan_next_token (scan);
+ node = gst_asm_scan_parse_condition (scan);
+ if (scan->token != GST_ASM_TOKEN_RPAREN)
+ g_warning (") expected");
+ break;
+ default:
+ g_warning ("$ <number> or ) expected");
+ node = NULL;
+ break;
+ }
+ gst_asm_scan_next_token (scan);
+
+ return node;
+}
+
+static GstASMNode *
+gst_asm_scan_parse_expression (GstASMScan * scan)
+{
+ GstASMNode *node, *left;
+
+ node = gst_asm_scan_parse_operand (scan);
+
+ while (IS_COND_TOKEN (scan->token)) {
+ left = node;
+
+ node = gst_asm_node_new ();
+ node->type = GST_ASM_NODE_OPERATOR;
+ node->data.optype = (GstASMOp) scan->token;
+
+ gst_asm_scan_next_token (scan);
+
+ node->right = gst_asm_scan_parse_operand (scan);
+ node->left = left;
+ }
+ return node;
+}
+
+static GstASMNode *
+gst_asm_scan_parse_condition (GstASMScan * scan)
+{
+ GstASMNode *node, *left;
+
+ node = gst_asm_scan_parse_expression (scan);
+
+ while (IS_OP_TOKEN (scan->token)) {
+ left = node;
+
+ node = gst_asm_node_new ();
+ node->type = GST_ASM_NODE_OPERATOR;
+ node->data.optype = (GstASMOp) scan->token;
+
+ gst_asm_scan_next_token (scan);
+
+ node->right = gst_asm_scan_parse_expression (scan);
+ node->left = left;
+ }
+ return node;
+}
+
+static void
+gst_asm_scan_parse_property (GstASMRule * rule, GstASMScan * scan)
+{
+ gchar *key, *val;
+
+ if (scan->token != GST_ASM_TOKEN_IDENTIFIER) {
+ g_warning ("identifier expected");
+ return;
+ }
+ key = g_strdup (scan->val);
+
+ gst_asm_scan_next_token (scan);
+ if (scan->token != GST_ASM_TOKEN_EQUAL) {
+ g_warning ("= expected");
+ g_free (key);
+ return;
+ }
+ gst_asm_scan_next_token (scan);
+ val = g_strdup (scan->val);
+
+ gst_asm_rule_add_property (rule, key, val);
+ gst_asm_scan_next_token (scan);
+}
+
+static GstASMRule *
+gst_asm_scan_parse_rule (GstASMScan * scan)
+{
+ GstASMRule *rule;
+
+ rule = gst_asm_rule_new ();
+
+ if (scan->token == GST_ASM_TOKEN_HASH) {
+ gst_asm_scan_next_token (scan);
+ rule->root = gst_asm_scan_parse_condition (scan);
+ if (scan->token == GST_ASM_TOKEN_COMMA)
+ gst_asm_scan_next_token (scan);
+ }
+
+ if (scan->token != GST_ASM_TOKEN_SEMICOLON) {
+ gst_asm_scan_parse_property (rule, scan);
+ while (scan->token == GST_ASM_TOKEN_COMMA) {
+ gst_asm_scan_next_token (scan);
+ gst_asm_scan_parse_property (rule, scan);
+ }
+ gst_asm_scan_next_token (scan);
+ }
+ return rule;
+}
+
+static gboolean
+gst_asm_rule_evaluate (GstASMRule * rule, GHashTable * vars)
+{
+ gboolean res;
+
+ if (rule->root) {
+ res = (gboolean) gst_asm_node_evaluate (rule->root, vars);
+ } else
+ res = TRUE;
+
+ return res;
+}
+
+GstASMRuleBook *
+gst_asm_rule_book_new (const gchar * rulebook)
+{
+ GstASMRuleBook *book;
+ GstASMRule *rule = NULL;
+ GstASMScan *scan;
+ GstASMToken token;
+
+ book = g_new0 (GstASMRuleBook, 1);
+ book->rulebook = rulebook;
+
+ scan = gst_asm_scan_new (book->rulebook);
+ gst_asm_scan_next_token (scan);
+
+ do {
+ rule = gst_asm_scan_parse_rule (scan);
+ if (rule) {
+ book->rules = g_list_append (book->rules, rule);
+ book->n_rules++;
+ }
+ token = scan->token;
+ } while (token != GST_ASM_TOKEN_EOF);
+
+ gst_asm_scan_free (scan);
+
+ return book;
+}
+
+void
+gst_asm_rule_book_free (GstASMRuleBook * book)
+{
+ GList *walk;
+
+ for (walk = book->rules; walk; walk = g_list_next (walk)) {
+ GstASMRule *rule = (GstASMRule *) walk->data;
+
+ gst_asm_rule_free (rule);
+ }
+ g_list_free (book->rules);
+ g_free (book);
+}
+
+gint
+gst_asm_rule_book_match (GstASMRuleBook * book, GHashTable * vars,
+ gint * rulematches)
+{
+ GList *walk;
+ gint i, n = 0;
+
+ for (walk = book->rules, i = 0; walk; walk = g_list_next (walk), i++) {
+ GstASMRule *rule = (GstASMRule *) walk->data;
+
+ if (gst_asm_rule_evaluate (rule, vars)) {
+ rulematches[n++] = i;
+ }
+ }
+ return n;
+}
+
+#ifdef TEST
+gint
+main (gint argc, gchar * argv[])
+{
+ GstASMRuleBook *book;
+ gint rulematch[MAX_RULEMATCHES];
+ GHashTable *vars;
+ gint i, n;
+
+ static const gchar rules1[] =
+ "#($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,"
+ "priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),"
+ "AverageBandwidth=67959,Priority=9;#($Bandwidth >= 67959) && ($Bandwidth"
+ " < 167959),AverageBandwidth=0,Priority=5,OnDepend=\\\"1\\\";#($Bandwidth >= 167959)"
+ " && ($Bandwidth < 267959),AverageBandwidth=167959,Priority=9;#($Bandwidth >= 167959)"
+ " && ($Bandwidth < 267959),AverageBandwidth=0,Priority=5,OnDepend=\\\"3\\\";"
+ "#($Bandwidth >= 267959),AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959)"
+ ",AverageBandwidth=0,Priority=5,OnDepend=\\\"5\\\";";
+ static const gchar rules2[] =
+ "AverageBandwidth=32041,Priority=5;AverageBandwidth=0,"
+ "Priority=5,OnDepend=\\\"0\\\", OffDepend=\\\"0\\\";";
+ static const gchar rules3[] =
+ "#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=27500,priority=9,PNMKeyframeRule=T;#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=0,priority=5,PNMNonKeyframeRule=T;#(($Bandwidth < 27500) && ($OldPNMPlayer)),TimestampDelivery=T,DropByN=T,priority=9,PNMThinningRule=T;#($Bandwidth < 13899),TimestampDelivery=T,DropByN=T,priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=13899,Priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=0,Priority=5,OnDepend=\\\"4\\\";#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=19000,Priority=9;#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=0,Priority=5,OnDepend=\\\"6\\\";#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=27500,Priority=9;#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=0,Priority=5,OnDepend=\\\"8\\\";#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=132958,Priority=9;#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"10\\\";#($Bandwidth >= 187958),AverageBandwidth=187958,Priority=9;#($Bandwidth >= 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"12\\\";";
+
+ vars = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (vars, (gchar *) "Bandwidth", (gchar *) "300000");
+
+ book = gst_asm_rule_book_new (rules1);
+ n = gst_asm_rule_book_match (book, vars, rulematch);
+ gst_asm_rule_book_free (book);
+
+ g_print ("%d rules matched\n", n);
+ for (i = 0; i < n; i++) {
+ g_print ("rule %d matched\n", rulematch[i]);
+ }
+
+ book = gst_asm_rule_book_new (rules2);
+ n = gst_asm_rule_book_match (book, vars, rulematch);
+ gst_asm_rule_book_free (book);
+
+ g_print ("%d rules matched\n", n);
+ for (i = 0; i < n; i++) {
+ g_print ("rule %d matched\n", rulematch[i]);
+ }
+
+ book = gst_asm_rule_book_new (rules3);
+ n = gst_asm_rule_book_match (book, vars, rulematch);
+ gst_asm_rule_book_free (book);
+
+
+ g_print ("%d rules matched\n", n);
+ for (i = 0; i < n; i++) {
+ g_print ("rule %d matched\n", rulematch[i]);
+ }
+
+ g_hash_table_destroy (vars);
+
+ return 0;
+}
+#endif
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_ASM_RULES_H__
+#define __GST_ASM_RULES_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define MAX_RULEMATCHES 16
+
+typedef struct _GstASMNode GstASMNode;
+typedef struct _GstASMRule GstASMRule;
+typedef struct _GstASMRuleBook GstASMRuleBook;
+
+typedef enum {
+ GST_ASM_TOKEN_NONE,
+ GST_ASM_TOKEN_EOF,
+
+ GST_ASM_TOKEN_INT,
+ GST_ASM_TOKEN_FLOAT,
+ GST_ASM_TOKEN_IDENTIFIER,
+ GST_ASM_TOKEN_STRING,
+
+ GST_ASM_TOKEN_HASH,
+ GST_ASM_TOKEN_SEMICOLON,
+ GST_ASM_TOKEN_COMMA,
+ GST_ASM_TOKEN_DOLLAR,
+
+ GST_ASM_TOKEN_LPAREN,
+ GST_ASM_TOKEN_RPAREN,
+
+ GST_ASM_TOKEN_GREATER,
+ GST_ASM_TOKEN_LESS,
+ GST_ASM_TOKEN_GREATEREQUAL,
+ GST_ASM_TOKEN_LESSEQUAL,
+ GST_ASM_TOKEN_EQUAL,
+ GST_ASM_TOKEN_NOTEQUAL,
+
+ GST_ASM_TOKEN_AND,
+ GST_ASM_TOKEN_OR
+} GstASMToken;
+
+typedef enum {
+ GST_ASM_NODE_UNKNOWN,
+ GST_ASM_NODE_VARIABLE,
+ GST_ASM_NODE_INTEGER,
+ GST_ASM_NODE_FLOAT,
+ GST_ASM_NODE_OPERATOR
+} GstASMNodeType;
+
+typedef enum {
+ GST_ASM_OP_GREATER = GST_ASM_TOKEN_GREATER,
+ GST_ASM_OP_LESS = GST_ASM_TOKEN_LESS,
+ GST_ASM_OP_GREATEREQUAL = GST_ASM_TOKEN_GREATEREQUAL,
+ GST_ASM_OP_LESSEQUAL = GST_ASM_TOKEN_LESSEQUAL,
+ GST_ASM_OP_EQUAL = GST_ASM_TOKEN_EQUAL,
+ GST_ASM_OP_NOTEQUAL = GST_ASM_TOKEN_NOTEQUAL,
+
+ GST_ASM_OP_AND = GST_ASM_TOKEN_AND,
+ GST_ASM_OP_OR = GST_ASM_TOKEN_OR
+} GstASMOp;
+
+struct _GstASMNode {
+ GstASMNodeType type;
+
+ union {
+ gchar *varname;
+ gint intval;
+ gfloat floatval;
+ GstASMOp optype;
+ } data;
+
+ GstASMNode *left;
+ GstASMNode *right;
+};
+
+struct _GstASMRule {
+ GstASMNode *root;
+ GHashTable *props;
+};
+
+struct _GstASMRuleBook {
+ const gchar *rulebook;
+
+ guint n_rules;
+ GList *rules;
+};
+
+G_END_DECLS
+
+GstASMRuleBook* gst_asm_rule_book_new (const gchar *rulebook);
+void gst_asm_rule_book_free (GstASMRuleBook *book);
+
+gint gst_asm_rule_book_match (GstASMRuleBook *book, GHashTable *vars,
+ gint *rulematches);
+
+#endif /* __GST_ASM_RULES_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <string.h>
+
+#include "gstrdtbuffer.h"
+
+gboolean
+gst_rdt_buffer_validate_data (guint8 * data, guint len)
+{
+ return TRUE;
+}
+
+gboolean
+gst_rdt_buffer_validate (GstBuffer * buffer)
+{
+ return TRUE;
+}
+
+guint
+gst_rdt_buffer_get_packet_count (GstBuffer * buffer)
+{
+ GstRDTPacket packet;
+ guint count;
+
+ g_return_val_if_fail (GST_IS_BUFFER (buffer), 0);
+
+ count = 0;
+ if (gst_rdt_buffer_get_first_packet (buffer, &packet)) {
+ do {
+ count++;
+ } while (gst_rdt_packet_move_to_next (&packet));
+ }
+ return count;
+}
+
+static gboolean
+read_packet_header (GstRDTPacket * packet)
+{
+ GstMapInfo map;
+ guint8 *data;
+ gsize size;
+ guint offset;
+ guint length;
+ guint length_offset;
+
+ g_return_val_if_fail (packet != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+
+ offset = packet->offset;
+
+ /* check if we are at the end of the buffer, we add 3 because we also want to
+ * ensure we can read the type, which is always at offset 1 and 2 bytes long. */
+ if (offset + 3 > size)
+ goto packet_end;
+
+ /* read type */
+ packet->type = GST_READ_UINT16_BE (&data[offset + 1]);
+
+ length = -1;
+ length_offset = -1;
+
+ /* figure out the length of the packet, this depends on the type */
+ if (GST_RDT_IS_DATA_TYPE (packet->type)) {
+ if (data[offset] & 0x80)
+ /* length is present */
+ length_offset = 3;
+ } else {
+ switch (packet->type) {
+ case GST_RDT_TYPE_ASMACTION:
+ if (data[offset] & 0x80)
+ length_offset = 5;
+ break;
+ case GST_RDT_TYPE_BWREPORT:
+ if (data[offset] & 0x80)
+ length_offset = 3;
+ break;
+ case GST_RDT_TYPE_ACK:
+ if (data[offset] & 0x80)
+ length_offset = 3;
+ break;
+ case GST_RDT_TYPE_RTTREQ:
+ length = 3;
+ break;
+ case GST_RDT_TYPE_RTTRESP:
+ length = 11;
+ break;
+ case GST_RDT_TYPE_CONGESTION:
+ length = 11;
+ break;
+ case GST_RDT_TYPE_STREAMEND:
+ length = 9;
+ /* total_reliable */
+ if (data[offset] & 0x80)
+ length += 2;
+ /* stream_id_expansion */
+ if ((data[offset] & 0x7c) == 0x7c)
+ length += 2;
+ /* ext_flag, FIXME, get string length */
+ if ((data[offset] & 0x1) == 0x1)
+ length += 7;
+ break;
+ case GST_RDT_TYPE_REPORT:
+ if (data[offset] & 0x80)
+ length_offset = 3;
+ break;
+ case GST_RDT_TYPE_LATENCY:
+ if (data[offset] & 0x80)
+ length_offset = 3;
+ break;
+ case GST_RDT_TYPE_INFOREQ:
+ length = 3;
+ /* request_time_ms */
+ if (data[offset] & 0x2)
+ length += 2;
+ break;
+ case GST_RDT_TYPE_INFORESP:
+ length = 3;
+ /* has_rtt_info */
+ if (data[offset] & 0x4) {
+ length += 4;
+ /* is_delayed */
+ if (data[offset] & 0x2) {
+ length += 4;
+ }
+ }
+ if (data[offset] & 0x1) {
+ /* buffer_info_count, FIXME read and skip */
+ length += 2;
+ }
+ break;
+ case GST_RDT_TYPE_AUTOBW:
+ if (data[offset] & 0x80)
+ length_offset = 3;
+ break;
+ case GST_RDT_TYPE_INVALID:
+ default:
+ goto unknown_packet;
+ }
+ }
+
+ if (length != -1) {
+ /* we have a fixed length */
+ packet->length = length;
+ } else if (length_offset != -1) {
+ /* we can read the length from an offset */
+ packet->length = GST_READ_UINT16_BE (&data[length_offset]);
+ } else {
+ /* length is remainder of packet */
+ packet->length = size - offset;
+ }
+ gst_buffer_unmap (packet->buffer, &map);
+
+ /* the length should be smaller than the remaining size */
+ if (packet->length + offset > size)
+ goto invalid_length;
+
+ return TRUE;
+
+ /* ERRORS */
+packet_end:
+ {
+ gst_buffer_unmap (packet->buffer, &map);
+ return FALSE;
+ }
+unknown_packet:
+ {
+ packet->type = GST_RDT_TYPE_INVALID;
+ gst_buffer_unmap (packet->buffer, &map);
+ return FALSE;
+ }
+invalid_length:
+ {
+ packet->type = GST_RDT_TYPE_INVALID;
+ packet->length = 0;
+ return FALSE;
+ }
+}
+
+gboolean
+gst_rdt_buffer_get_first_packet (GstBuffer * buffer, GstRDTPacket * packet)
+{
+ g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+ g_return_val_if_fail (packet != NULL, FALSE);
+
+ /* init to 0 */
+ packet->buffer = buffer;
+ packet->offset = 0;
+ packet->type = GST_RDT_TYPE_INVALID;
+ memset (&packet->map, 0, sizeof (GstMapInfo));
+
+ if (!read_packet_header (packet))
+ return FALSE;
+
+ return TRUE;
+}
+
+gboolean
+gst_rdt_packet_move_to_next (GstRDTPacket * packet)
+{
+ g_return_val_if_fail (packet != NULL, FALSE);
+ g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, FALSE);
+ g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
+
+ /* if we have an invalid packet, it must be the last,
+ * return FALSE */
+ if (packet->type == GST_RDT_TYPE_INVALID)
+ goto end;
+
+ /* move to next packet */
+ packet->offset += packet->length;
+
+ /* try to read new header */
+ if (!read_packet_header (packet))
+ goto end;
+
+ return TRUE;
+
+ /* ERRORS */
+end:
+ {
+ packet->type = GST_RDT_TYPE_INVALID;
+ return FALSE;
+ }
+}
+
+GstRDTType
+gst_rdt_packet_get_type (GstRDTPacket * packet)
+{
+ g_return_val_if_fail (packet != NULL, GST_RDT_TYPE_INVALID);
+ g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID,
+ GST_RDT_TYPE_INVALID);
+
+ return packet->type;
+}
+
+guint16
+gst_rdt_packet_get_length (GstRDTPacket * packet)
+{
+ g_return_val_if_fail (packet != NULL, 0);
+ g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, 0);
+
+ return packet->length;
+}
+
+GstBuffer *
+gst_rdt_packet_to_buffer (GstRDTPacket * packet)
+{
+ GstBuffer *result;
+
+ g_return_val_if_fail (packet != NULL, NULL);
+ g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, NULL);
+
+ result =
+ gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
+ packet->offset, packet->length);
+ /* timestamp applies to all packets in this buffer */
+ GST_BUFFER_TIMESTAMP (result) = GST_BUFFER_TIMESTAMP (packet->buffer);
+
+ return result;
+}
+
+gint
+gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
+{
+ return (gint16) (seqnum2 - seqnum1);
+}
+
+guint16
+gst_rdt_packet_data_get_seq (GstRDTPacket * packet)
+{
+ GstMapInfo map;
+ guint header;
+ guint16 result;
+
+ g_return_val_if_fail (packet != NULL, FALSE);
+ g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), FALSE);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+ /* skip header bits */
+ header = packet->offset + 1;
+
+ /* read seq_no */
+ result = GST_READ_UINT16_BE (&map.data[header]);
+
+ gst_buffer_unmap (packet->buffer, &map);
+
+ return result;
+}
+
+guint8 *
+gst_rdt_packet_data_map (GstRDTPacket * packet, guint * size)
+{
+ GstMapInfo map;
+ guint header;
+ gboolean length_included_flag;
+ gboolean need_reliable_flag;
+ guint8 stream_id;
+ guint8 asm_rule_number;
+
+ g_return_val_if_fail (packet != NULL, NULL);
+ g_return_val_if_fail (packet->map.data == NULL, NULL);
+ g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), NULL);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+ header = packet->offset;
+
+ length_included_flag = (map.data[header] & 0x80) == 0x80;
+ need_reliable_flag = (map.data[header] & 0x40) == 0x40;
+ stream_id = (map.data[header] & 0x3e) >> 1;
+
+ /* skip seq_no and header bits */
+ header += 3;
+
+ if (length_included_flag) {
+ /* skip length */
+ header += 2;
+ }
+ asm_rule_number = (map.data[header] & 0x3f);
+
+ /* skip timestamp and asm_rule_number */
+ header += 5;
+
+ if (stream_id == 0x1f) {
+ /* skip stream_id_expansion */
+ header += 2;
+ }
+ if (need_reliable_flag) {
+ /* skip total_reliable */
+ header += 2;
+ }
+ if (asm_rule_number == 63) {
+ /* skip asm_rule_number_expansion */
+ header += 2;
+ }
+
+ if (size)
+ *size = packet->length - (header - packet->offset);
+
+ packet->map = map;
+
+ return &map.data[header];
+}
+
+gboolean
+gst_rdt_packet_data_unmap (GstRDTPacket * packet)
+{
+ g_return_val_if_fail (packet != NULL, FALSE);
+ g_return_val_if_fail (packet->map.data != NULL, FALSE);
+
+ gst_buffer_unmap (packet->buffer, &packet->map);
+ packet->map.data = NULL;
+
+ return TRUE;
+}
+
+guint16
+gst_rdt_packet_data_get_stream_id (GstRDTPacket * packet)
+{
+ GstMapInfo map;
+ guint16 result;
+ guint header;
+ gboolean length_included_flag;
+
+ g_return_val_if_fail (packet != NULL, 0);
+ g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+ header = packet->offset;
+
+ length_included_flag = (map.data[header] & 0x80) == 0x80;
+ result = (map.data[header] & 0x3e) >> 1;
+ if (result == 31) {
+ /* skip seq_no and header bits */
+ header += 3;
+
+ if (length_included_flag) {
+ /* skip length */
+ header += 2;
+ }
+ /* skip asm_rule_number and timestamp */
+ header += 5;
+
+ /* stream_id_expansion */
+ result = GST_READ_UINT16_BE (&map.data[header]);
+ }
+ gst_buffer_unmap (packet->buffer, &map);
+
+ return result;
+}
+
+guint32
+gst_rdt_packet_data_get_timestamp (GstRDTPacket * packet)
+{
+ GstMapInfo map;
+ guint header;
+ gboolean length_included_flag;
+ guint32 result;
+
+ g_return_val_if_fail (packet != NULL, 0);
+ g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+ header = packet->offset;
+
+ length_included_flag = (map.data[header] & 0x80) == 0x80;
+
+ /* skip seq_no and header bits */
+ header += 3;
+
+ if (length_included_flag) {
+ /* skip length */
+ header += 2;
+ }
+ /* skip asm_rule_number */
+ header += 1;
+
+ /* get timestamp */
+ result = GST_READ_UINT32_BE (&map.data[header]);
+ gst_buffer_unmap (packet->buffer, &map);
+
+ return result;
+}
+
+guint8
+gst_rdt_packet_data_get_flags (GstRDTPacket * packet)
+{
+ GstMapInfo map;
+ guint8 result;
+ guint header;
+ gboolean length_included_flag;
+
+ g_return_val_if_fail (packet != NULL, 0);
+ g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+ gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+ header = packet->offset;
+
+ length_included_flag = (map.data[header] & 0x80) == 0x80;
+
+ /* skip seq_no and header bits */
+ header += 3;
+
+ if (length_included_flag) {
+ /* skip length */
+ header += 2;
+ }
+ /* get flags */
+ result = map.data[header];
+ gst_buffer_unmap (packet->buffer, &map);
+
+ return result;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstrdtbuffer.h: various helper functions to manipulate buffers
+ * with RDT payload.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RDTBUFFER_H__
+#define __GST_RDTBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+/**
+ * GstRDTType:
+ * @GST_RDT_TYPE_INVALID:
+ * @GST_RDT_TYPE_ASMACTION:
+ * @GST_RDT_TYPE_ACK:
+ * @GST_RDT_TYPE_RTTREQ:
+ * @GST_RDT_TYPE_RTTRESP:
+ * @GST_RDT_TYPE_CONGESTION:
+ * @GST_RDT_TYPE_STREAMEND:
+ * @GST_RDT_TYPE_LATENCY:
+ * @GST_RDT_TYPE_INFOREQ:
+ * @GST_RDT_TYPE_INFORESP:
+ * @GST_RDT_TYPE_AUTOBW:
+ *
+ * Different RDT packet types.
+ */
+typedef enum
+{
+ GST_RDT_TYPE_INVALID = 0xffff,
+ GST_RDT_TYPE_ASMACTION = 0xff00,
+ GST_RDT_TYPE_BWREPORT = 0xff01,
+ GST_RDT_TYPE_ACK = 0xff02,
+ GST_RDT_TYPE_RTTREQ = 0xff03,
+ GST_RDT_TYPE_RTTRESP = 0xff04,
+ GST_RDT_TYPE_CONGESTION = 0xff05,
+ GST_RDT_TYPE_STREAMEND = 0xff06,
+ GST_RDT_TYPE_REPORT = 0xff07,
+ GST_RDT_TYPE_LATENCY = 0xff08,
+ GST_RDT_TYPE_INFOREQ = 0xff09,
+ GST_RDT_TYPE_INFORESP = 0xff0a,
+ GST_RDT_TYPE_AUTOBW = 0xff0b
+} GstRDTType;
+
+/**
+ * GST_RDT_IS_DATA_TYPE:
+ * @t: the #GstRDTType to check
+ *
+ * Check if @t is a data packet type.
+ */
+#define GST_RDT_IS_DATA_TYPE(t) ((t) < 0xff00)
+
+typedef struct _GstRDTPacket GstRDTPacket;
+
+/**
+ * GstRDTPacket:
+ * @buffer: pointer to RDT buffer
+ * @offset: offset of packet in buffer data
+ *
+ * Data structure that points to a packet at @offset in @buffer.
+ * The size of the structure is made public to allow stack allocations.
+ */
+struct _GstRDTPacket
+{
+ GstBuffer *buffer;
+ guint offset;
+
+ /*< private >*/
+ GstRDTType type; /* type of current packet */
+ guint16 length; /* length of current packet in bytes */
+ GstMapInfo map; /* last mapped data */
+};
+
+/* validate buffers */
+gboolean gst_rdt_buffer_validate_data (guint8 *data, guint len);
+gboolean gst_rdt_buffer_validate (GstBuffer *buffer);
+
+/* retrieving packets */
+guint gst_rdt_buffer_get_packet_count (GstBuffer *buffer);
+gboolean gst_rdt_buffer_get_first_packet (GstBuffer *buffer, GstRDTPacket *packet);
+gboolean gst_rdt_packet_move_to_next (GstRDTPacket *packet);
+
+/* working with packets */
+GstRDTType gst_rdt_packet_get_type (GstRDTPacket *packet);
+guint16 gst_rdt_packet_get_length (GstRDTPacket *packet);
+GstBuffer* gst_rdt_packet_to_buffer (GstRDTPacket *packet);
+
+
+/* data packets */
+guint16 gst_rdt_packet_data_get_seq (GstRDTPacket *packet);
+guint8 * gst_rdt_packet_data_map (GstRDTPacket *packet, guint *size);
+gboolean gst_rdt_packet_data_unmap (GstRDTPacket *packet);
+guint16 gst_rdt_packet_data_get_stream_id (GstRDTPacket *packet);
+guint32 gst_rdt_packet_data_get_timestamp (GstRDTPacket *packet);
+
+guint8 gst_rdt_packet_data_get_flags (GstRDTPacket * packet);
+
+/* utils */
+gint gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2);
+
+G_END_DECLS
+
+#endif /* __GST_RDTBUFFER_H__ */
+
--- /dev/null
+real_sources = [
+ 'rademux.c',
+ 'rmdemux.c',
+ 'rmutils.c',
+ 'rdtdepay.c',
+ 'rdtmanager.c',
+ 'rtspreal.c',
+ 'realhash.c',
+ 'asmrules.c',
+ 'rdtjitterbuffer.c',
+ 'gstrdtbuffer.c',
+ 'pnmsrc.c',
+ 'realmedia.c'
+]
+
+gstrmdemux = library('gstrealmedia',
+ real_sources,
+ c_args : ugly_args,
+ include_directories : [configinc, libsinc],
+ dependencies : [gstbase_dep, gstrtsp_dep, gstsdp_dep, gstpbutils_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstrmdemux, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstrmdemux]
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "pnmsrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (pnmsrc_debug);
+#define GST_CAT_DEFAULT pnmsrc_debug
+
+/* PNMSrc signals and args */
+enum
+{
+ /* FILL ME */
+ LAST_SIGNAL
+};
+
+#define DEFAULT_LOCATION NULL
+
+enum
+{
+ PROP_0,
+ PROP_LOCATION
+};
+
+static GstStaticPadTemplate gst_pnm_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+ );
+
+static GstFlowReturn gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf);
+
+static void gst_pnm_src_uri_handler_init (gpointer g_iface,
+ gpointer iface_data);
+
+#define gst_pnm_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstPNMSrc, gst_pnm_src, GST_TYPE_PUSH_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_pnm_src_uri_handler_init));
+GST_ELEMENT_REGISTER_DEFINE (pnmsrc, "pnmsrc",
+ GST_RANK_MARGINAL, GST_TYPE_PNM_SRC);
+
+static void gst_pnm_src_finalize (GObject * object);
+
+static void gst_pnm_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_pnm_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static void
+gst_pnm_src_class_init (GstPNMSrcClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstPushSrcClass *gstpushsrc_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+ gstpushsrc_class = (GstPushSrcClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->set_property = gst_pnm_src_set_property;
+ gobject_class->get_property = gst_pnm_src_get_property;
+
+ gobject_class->finalize = gst_pnm_src_finalize;
+
+ g_object_class_install_property (gobject_class, PROP_LOCATION,
+ g_param_spec_string ("location", "PNM Location",
+ "Location of the PNM url to read",
+ DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_pnm_src_template);
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "PNM packet receiver", "Source/Network",
+ "Receive data over the network via PNM",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ gstpushsrc_class->create = gst_pnm_src_create;
+
+ GST_DEBUG_CATEGORY_INIT (pnmsrc_debug, "pnmsrc",
+ 0, "Source for the pnm:// uri");
+}
+
+static void
+gst_pnm_src_init (GstPNMSrc * pnmsrc)
+{
+ pnmsrc->location = g_strdup (DEFAULT_LOCATION);
+}
+
+static void
+gst_pnm_src_finalize (GObject * object)
+{
+ GstPNMSrc *pnmsrc;
+
+ pnmsrc = GST_PNM_SRC (object);
+
+ g_free (pnmsrc->location);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_pnm_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstPNMSrc *src;
+
+ src = GST_PNM_SRC (object);
+
+ switch (prop_id) {
+ case PROP_LOCATION:
+ g_free (src->location);
+ src->location = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_pnm_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstPNMSrc *src;
+
+ src = GST_PNM_SRC (object);
+
+ switch (prop_id) {
+ case PROP_LOCATION:
+ g_value_set_string (value, src->location);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GstFlowReturn
+gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf)
+{
+ GstPNMSrc *src;
+ GstMessage *m;
+ gchar *url;
+
+ src = GST_PNM_SRC (psrc);
+
+ if (src->location == NULL)
+ return GST_FLOW_ERROR;
+ url = g_strdup_printf ("rtsp%s", &src->location[3]);
+
+ /* the only thing we do is redirect to an RTSP url */
+ m = gst_message_new_element (GST_OBJECT_CAST (src),
+ gst_structure_new ("redirect", "new-location", G_TYPE_STRING, url, NULL));
+ g_free (url);
+
+ gst_element_post_message (GST_ELEMENT_CAST (src), m);
+
+
+ return GST_FLOW_EOS;
+}
+
+/*** GSTURIHANDLER INTERFACE *************************************************/
+
+static GstURIType
+gst_pnm_src_uri_get_type (GType type)
+{
+ return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_pnm_src_uri_get_protocols (GType type)
+{
+ static const gchar *protocols[] = { "pnm", NULL };
+
+ return protocols;
+}
+
+static gchar *
+gst_pnm_src_uri_get_uri (GstURIHandler * handler)
+{
+ GstPNMSrc *src = GST_PNM_SRC (handler);
+
+ /* FIXME: make thread-safe */
+ return g_strdup (src->location);
+}
+
+static gboolean
+gst_pnm_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
+{
+ GstPNMSrc *src = GST_PNM_SRC (handler);
+
+ g_free (src->location);
+ src->location = g_strdup (uri);
+
+ return TRUE;
+}
+
+static void
+gst_pnm_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+ iface->get_type = gst_pnm_src_uri_get_type;
+ iface->get_protocols = gst_pnm_src_uri_get_protocols;
+ iface->get_uri = gst_pnm_src_uri_get_uri;
+ iface->set_uri = gst_pnm_src_uri_set_uri;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PNM_SRC_H__
+#define __GST_PNM_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_PNM_SRC \
+ (gst_pnm_src_get_type())
+#define GST_PNM_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PNM_SRC,GstPNMSrc))
+#define GST_PNM_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PNM_SRC,GstPNMSrcClass))
+#define GST_IS_PNM_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PNM_SRC))
+#define GST_IS_PNM_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PNM_SRC))
+
+typedef struct _GstPNMSrc GstPNMSrc;
+typedef struct _GstPNMSrcClass GstPNMSrcClass;
+
+struct _GstPNMSrc
+{
+ GstPushSrc parent;
+
+ gchar *location;
+};
+
+struct _GstPNMSrcClass
+{
+ GstPushSrcClass parent_class;
+};
+
+GType gst_pnm_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (pnmsrc);
+
+G_END_DECLS
+
+#endif /* __GST_PNM_SRC_H__ */
--- /dev/null
+/* GStreamer RealAudio demuxer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-rademux
+ * @title: rademux
+ *
+ * Demuxes/parses a RealAudio (.ra) file or stream into compressed audio.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=interview.ra ! rademux ! avdec_real_288 ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Read a RealAudio file and decode it and output it to the soundcard using
+ * the ALSA element. The .ra file is assumed to contain RealAudio version 2.
+ * |[
+ * gst-launch-1.0 souphttpsrc location=http://www.example.org/interview.ra ! rademux ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Stream RealAudio data containing AC3 (dnet) compressed audio and decode it
+ * and output it to the soundcard.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "rademux.h"
+#include "rmdemux.h"
+#include "rmutils.h"
+
+#include <string.h>
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-pn-realaudio")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (real_audio_demux_debug);
+#define GST_CAT_DEFAULT real_audio_demux_debug
+
+#define gst_real_audio_demux_parent_class parent_class
+G_DEFINE_TYPE (GstRealAudioDemux, gst_real_audio_demux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rademux, "rademux",
+ GST_RANK_SECONDARY, GST_TYPE_REAL_AUDIO_DEMUX);
+
+static GstStateChangeReturn gst_real_audio_demux_change_state (GstElement * e,
+ GstStateChange transition);
+static GstFlowReturn gst_real_audio_demux_chain (GstPad * pad,
+ GstObject * parent, GstBuffer * buf);
+static gboolean gst_real_audio_demux_sink_event (GstPad * pad,
+ GstObject * parent, GstEvent * ev);
+static gboolean gst_real_audio_demux_src_event (GstPad * pad,
+ GstObject * parent, GstEvent * ev);
+static gboolean gst_real_audio_demux_src_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
+static void gst_real_audio_demux_loop (GstRealAudioDemux * demux);
+static gboolean gst_real_audio_demux_sink_activate (GstPad * sinkpad,
+ GstObject * parent);
+static gboolean gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+
+static void
+gst_real_audio_demux_finalize (GObject * obj)
+{
+ GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (obj);
+
+ g_object_unref (demux->adapter);
+
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_real_audio_demux_class_init (GstRealAudioDemuxClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_real_audio_demux_finalize;
+
+ gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
+ gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+
+ gst_element_class_set_static_metadata (gstelement_class, "RealAudio Demuxer",
+ "Codec/Demuxer",
+ "Demultiplex a RealAudio file",
+ "Tim-Philipp Müller <tim centricular net>");
+
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_change_state);
+
+ GST_DEBUG_CATEGORY_INIT (real_audio_demux_debug, "rademux",
+ 0, "Demuxer for RealAudio streams");
+}
+
+static void
+gst_real_audio_demux_reset (GstRealAudioDemux * demux)
+{
+ gst_adapter_clear (demux->adapter);
+
+ if (demux->srcpad) {
+ GST_DEBUG_OBJECT (demux, "Removing source pad");
+ gst_element_remove_pad (GST_ELEMENT (demux), demux->srcpad);
+ demux->srcpad = NULL;
+ }
+
+ if (demux->pending_tags) {
+ gst_tag_list_unref (demux->pending_tags);
+ demux->pending_tags = NULL;
+ }
+
+ demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
+ demux->ra_version = 0;
+ demux->data_offset = 0;
+ demux->packet_size = 0;
+
+ demux->sample_rate = 0;
+ demux->sample_width = 0;
+ demux->channels = 0;
+ demux->fourcc = 0;
+
+ demux->need_newsegment = TRUE;
+
+ demux->segment_running = FALSE;
+
+ demux->byterate_num = 0;
+ demux->byterate_denom = 0;
+
+ demux->duration = 0;
+ demux->upstream_size = 0;
+
+ demux->offset = 0;
+
+ demux->have_group_id = FALSE;
+ demux->group_id = G_MAXUINT;
+
+ gst_adapter_clear (demux->adapter);
+}
+
+static void
+gst_real_audio_demux_init (GstRealAudioDemux * demux)
+{
+ demux->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+
+ gst_pad_set_chain_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_chain));
+ gst_pad_set_event_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_event));
+ gst_pad_set_activate_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate));
+ gst_pad_set_activatemode_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate_mode));
+
+ gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+
+ demux->adapter = gst_adapter_new ();
+ gst_real_audio_demux_reset (demux);
+}
+
+static gboolean
+gst_real_audio_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
+{
+ GstQuery *query;
+ gboolean pull_mode;
+
+ query = gst_query_new_scheduling ();
+
+ if (!gst_pad_peer_query (sinkpad, query)) {
+ gst_query_unref (query);
+ goto activate_push;
+ }
+
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+ gst_query_unref (query);
+
+ if (!pull_mode)
+ goto activate_push;
+
+ GST_DEBUG_OBJECT (sinkpad, "activating pull");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+ {
+ GST_DEBUG_OBJECT (sinkpad, "activating push");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
+}
+
+static gboolean
+gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
+ GstPadMode mode, gboolean active)
+{
+ gboolean res;
+ GstRealAudioDemux *demux;
+
+ demux = GST_REAL_AUDIO_DEMUX (parent);
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ demux->seekable = FALSE;
+ res = TRUE;
+ break;
+ case GST_PAD_MODE_PULL:
+ if (active) {
+ demux->seekable = TRUE;
+
+ res = gst_pad_start_task (sinkpad,
+ (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
+ } else {
+ demux->seekable = FALSE;
+ res = gst_pad_stop_task (sinkpad);
+ }
+ break;
+ default:
+ res = FALSE;
+ break;
+ }
+ return res;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_marker (GstRealAudioDemux * demux)
+{
+ guint8 data[6];
+
+ if (gst_adapter_available (demux->adapter) < 6) {
+ GST_LOG_OBJECT (demux, "need at least 6 bytes, waiting for more data");
+ return GST_FLOW_OK;
+ }
+
+ gst_adapter_copy (demux->adapter, data, 0, 6);
+ if (memcmp (data, ".ra\375", 4) != 0)
+ goto wrong_format;
+
+ demux->ra_version = GST_READ_UINT16_BE (data + 4);
+ GST_DEBUG_OBJECT (demux, "ra_version = %u", demux->ra_version);
+ if (demux->ra_version != 4 && demux->ra_version != 3)
+ goto unsupported_ra_version;
+
+ gst_adapter_flush (demux->adapter, 6);
+ demux->state = REAL_AUDIO_DEMUX_STATE_HEADER;
+ return GST_FLOW_OK;
+
+/* ERRORS */
+wrong_format:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, WRONG_TYPE, (NULL), (NULL));
+ return GST_FLOW_ERROR;
+ }
+
+unsupported_ra_version:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE,
+ ("Cannot decode this RealAudio file, please file a bug"),
+ ("ra_version = %u", demux->ra_version));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static GstClockTime
+gst_real_demux_get_timestamp_from_offset (GstRealAudioDemux * demux,
+ guint64 offset)
+{
+ if (offset >= demux->data_offset && demux->byterate_num > 0 &&
+ demux->byterate_denom > 0) {
+ return gst_util_uint64_scale (offset - demux->data_offset,
+ demux->byterate_denom * GST_SECOND, demux->byterate_num);
+ } else if (offset == demux->data_offset) {
+ return (GstClockTime) 0;
+ } else {
+ return GST_CLOCK_TIME_NONE;
+ }
+}
+
+static gboolean
+gst_real_audio_demux_get_data_offset_from_header (GstRealAudioDemux * demux)
+{
+ guint8 data[16];
+
+ gst_adapter_copy (demux->adapter, data, 0, 16);
+
+ switch (demux->ra_version) {
+ case 3:
+ demux->data_offset = GST_READ_UINT16_BE (data) + 8;
+ break;
+ case 4:
+ demux->data_offset = GST_READ_UINT32_BE (data + 12) + 16;
+ break;
+ default:
+ demux->data_offset = 0;
+ g_return_val_if_reached (FALSE);
+ }
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_header (GstRealAudioDemux * demux)
+{
+ const guint8 *data;
+ gchar *codec_name = NULL;
+ GstCaps *caps = NULL;
+ GstEvent *event;
+ gchar *stream_id;
+ guint avail;
+
+ g_assert (demux->ra_version == 4 || demux->ra_version == 3);
+
+ avail = gst_adapter_available (demux->adapter);
+ if (avail < 16)
+ return GST_FLOW_OK;
+
+ if (!gst_real_audio_demux_get_data_offset_from_header (demux))
+ return GST_FLOW_ERROR; /* shouldn't happen */
+
+ GST_DEBUG_OBJECT (demux, "data_offset = %u", demux->data_offset);
+
+ if (avail + 6 < demux->data_offset) {
+ GST_DEBUG_OBJECT (demux, "Need %u bytes, but only %u available now",
+ demux->data_offset - 6, avail);
+ return GST_FLOW_OK;
+ }
+
+ data = gst_adapter_map (demux->adapter, demux->data_offset - 6);
+ g_assert (data);
+
+ switch (demux->ra_version) {
+ case 3:
+ demux->fourcc = GST_RM_AUD_14_4;
+ demux->packet_size = 20;
+ demux->sample_rate = 8000;
+ demux->channels = 1;
+ demux->sample_width = 16;
+ demux->flavour = 1;
+ demux->leaf_size = 0;
+ demux->height = 0;
+ break;
+ case 4:
+ demux->flavour = GST_READ_UINT16_BE (data + 16);
+ /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
+ demux->leaf_size = GST_READ_UINT16_BE (data + 38);
+ demux->height = GST_READ_UINT16_BE (data + 34);
+ demux->packet_size = GST_READ_UINT32_BE (data + 18);
+ demux->sample_rate = GST_READ_UINT16_BE (data + 42);
+ demux->sample_width = GST_READ_UINT16_BE (data + 46);
+ demux->channels = GST_READ_UINT16_BE (data + 48);
+ demux->fourcc = GST_READ_UINT32_LE (data + 56);
+ demux->pending_tags = gst_rm_utils_read_tags (data + 63,
+ demux->data_offset - 63, gst_rm_utils_read_string8);
+ if (demux->pending_tags)
+ gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+ break;
+ default:
+ g_assert_not_reached ();
+#if 0
+ case 5:
+ demux->flavour = GST_READ_UINT16_BE (data + 16);
+ /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
+ demux->leaf_size = GST_READ_UINT16_BE (data + 38);
+ demux->height = GST_READ_UINT16_BE (data + 34);
+
+ demux->sample_rate = GST_READ_UINT16_BE (data + 48);
+ demux->sample_width = GST_READ_UINT16_BE (data + 52);
+ demux->n_channels = GST_READ_UINT16_BE (data + 54);
+ demux->fourcc = RMDEMUX_FOURCC_GET (data + 60);
+ break;
+#endif
+ }
+
+ GST_INFO_OBJECT (demux, "packet_size = %u", demux->packet_size);
+ GST_INFO_OBJECT (demux, "sample_rate = %u", demux->sample_rate);
+ GST_INFO_OBJECT (demux, "sample_width = %u", demux->sample_width);
+ GST_INFO_OBJECT (demux, "channels = %u", demux->channels);
+ GST_INFO_OBJECT (demux, "fourcc = '%" GST_FOURCC_FORMAT "' (%08X)",
+ GST_FOURCC_ARGS (demux->fourcc), demux->fourcc);
+
+ switch (demux->fourcc) {
+ case GST_RM_AUD_14_4:
+ caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
+ G_TYPE_INT, 1, NULL);
+ demux->byterate_num = 1000;
+ demux->byterate_denom = 1;
+ break;
+
+ case GST_RM_AUD_28_8:
+ /* FIXME: needs descrambling */
+ caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
+ G_TYPE_INT, 2, NULL);
+ break;
+
+ case GST_RM_AUD_DNET:
+ caps = gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
+ demux->sample_rate, NULL);
+ if (demux->packet_size == 0 || demux->sample_rate == 0)
+ goto broken_file;
+ demux->byterate_num = demux->packet_size * demux->sample_rate;
+ demux->byterate_denom = 1536;
+ break;
+
+ /* Sipro/ACELP.NET Voice Codec (MIME unknown) */
+ case GST_RM_AUD_SIPR:
+ caps = gst_caps_new_empty_simple ("audio/x-sipro");
+ break;
+
+ default:
+ GST_WARNING_OBJECT (demux, "unknown fourcc %08X", demux->fourcc);
+ break;
+ }
+
+ if (caps == NULL)
+ goto unknown_fourcc;
+
+ gst_caps_set_simple (caps,
+ "flavor", G_TYPE_INT, demux->flavour,
+ "rate", G_TYPE_INT, demux->sample_rate,
+ "channels", G_TYPE_INT, demux->channels,
+ "width", G_TYPE_INT, demux->sample_width,
+ "leaf_size", G_TYPE_INT, demux->leaf_size,
+ "packet_size", G_TYPE_INT, demux->packet_size,
+ "height", G_TYPE_INT, demux->height, NULL);
+
+ GST_INFO_OBJECT (demux, "Adding source pad, caps %" GST_PTR_FORMAT, caps);
+ demux->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+ gst_pad_set_event_function (demux->srcpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_event));
+ gst_pad_set_query_function (demux->srcpad,
+ GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_query));
+ gst_pad_set_active (demux->srcpad, TRUE);
+ gst_pad_use_fixed_caps (demux->srcpad);
+
+ stream_id =
+ gst_pad_create_stream_id (demux->srcpad, GST_ELEMENT_CAST (demux), NULL);
+
+ event = gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
+ if (event) {
+ if (gst_event_parse_group_id (event, &demux->group_id))
+ demux->have_group_id = TRUE;
+ else
+ demux->have_group_id = FALSE;
+ gst_event_unref (event);
+ } else if (!demux->have_group_id) {
+ demux->have_group_id = TRUE;
+ demux->group_id = gst_util_group_id_next ();
+ }
+
+ event = gst_event_new_stream_start (stream_id);
+ if (demux->have_group_id)
+ gst_event_set_group_id (event, demux->group_id);
+
+ gst_pad_push_event (demux->srcpad, event);
+ g_free (stream_id);
+
+ gst_pad_set_caps (demux->srcpad, caps);
+ codec_name = gst_pb_utils_get_codec_description (caps);
+ gst_caps_unref (caps);
+
+ gst_element_add_pad (GST_ELEMENT (demux), demux->srcpad);
+
+ if (demux->byterate_num > 0 && demux->byterate_denom > 0) {
+ GstFormat bformat = GST_FORMAT_BYTES;
+ gint64 size_bytes = 0;
+
+ GST_INFO_OBJECT (demux, "byte rate = %u/%u = %u bytes/sec",
+ demux->byterate_num, demux->byterate_denom,
+ demux->byterate_num / demux->byterate_denom);
+
+ if (gst_pad_peer_query_duration (demux->sinkpad, bformat, &size_bytes)) {
+ demux->duration =
+ gst_real_demux_get_timestamp_from_offset (demux, size_bytes);
+ demux->upstream_size = size_bytes;
+ GST_INFO_OBJECT (demux, "upstream_size = %" G_GUINT64_FORMAT,
+ demux->upstream_size);
+ GST_INFO_OBJECT (demux, "duration = %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->duration));
+ }
+ }
+
+ demux->need_newsegment = TRUE;
+
+ if (codec_name) {
+ if (demux->pending_tags == NULL) {
+ demux->pending_tags = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+ }
+
+ gst_tag_list_add (demux->pending_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_AUDIO_CODEC, codec_name, NULL);
+ g_free (codec_name);
+ }
+
+ gst_adapter_unmap (demux->adapter);
+ gst_adapter_flush (demux->adapter, demux->data_offset - 6);
+
+ demux->state = REAL_AUDIO_DEMUX_STATE_DATA;
+ demux->need_newsegment = TRUE;
+
+ return GST_FLOW_OK;
+
+/* ERRORS */
+unknown_fourcc:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
+ ("Unknown fourcc '0x%" G_GINT32_MODIFIER "x'", demux->fourcc));
+ return GST_FLOW_ERROR;
+ }
+broken_file:
+ {
+ GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
+ ("Broken file - invalid sample_rate or other header value"));
+ return GST_FLOW_ERROR;
+ }
+
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_data (GstRealAudioDemux * demux)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint avail, unit_size;
+
+ avail = gst_adapter_available (demux->adapter);
+
+ if (demux->packet_size > 0)
+ unit_size = demux->packet_size;
+ else
+ unit_size = avail & 0xfffffff0; /* round down to next multiple of 16 */
+
+ GST_LOG_OBJECT (demux, "available = %u, unit_size = %u", avail, unit_size);
+
+ while (ret == GST_FLOW_OK && unit_size > 0 && avail >= unit_size) {
+ GstClockTime ts;
+ GstBuffer *buf;
+
+ buf = gst_adapter_take_buffer (demux->adapter, unit_size);
+ avail -= unit_size;
+
+ if (demux->need_newsegment) {
+ gst_pad_push_event (demux->srcpad,
+ gst_event_new_segment (&demux->segment));
+ demux->need_newsegment = FALSE;
+ }
+
+ if (demux->pending_tags) {
+ gst_pad_push_event (demux->srcpad,
+ gst_event_new_tag (demux->pending_tags));
+ demux->pending_tags = NULL;
+ }
+
+ if (demux->fourcc == GST_RM_AUD_DNET) {
+ buf = gst_rm_utils_descramble_dnet_buffer (buf);
+ }
+
+ ts = gst_real_demux_get_timestamp_from_offset (demux, demux->offset);
+ GST_BUFFER_TIMESTAMP (buf) = ts;
+
+ demux->segment.position = ts;
+
+ ret = gst_pad_push (demux->srcpad, buf);
+ }
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_handle_buffer (GstRealAudioDemux * demux, GstBuffer * buf)
+{
+ GstFlowReturn ret;
+
+ gst_adapter_push (demux->adapter, buf);
+ buf = NULL;
+
+ switch (demux->state) {
+ case REAL_AUDIO_DEMUX_STATE_MARKER:{
+ ret = gst_real_audio_demux_parse_marker (demux);
+ if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_HEADER)
+ break;
+ /* otherwise fall through */
+ }
+ case REAL_AUDIO_DEMUX_STATE_HEADER:{
+ ret = gst_real_audio_demux_parse_header (demux);
+ if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_DATA)
+ break;
+ /* otherwise fall through */
+ }
+ case REAL_AUDIO_DEMUX_STATE_DATA:{
+ ret = gst_real_audio_demux_parse_data (demux);
+ break;
+ }
+ default:
+ g_return_val_if_reached (GST_FLOW_ERROR);
+ }
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstRealAudioDemux *demux;
+
+ demux = GST_REAL_AUDIO_DEMUX (parent);
+
+ return gst_real_audio_demux_handle_buffer (demux, buf);
+}
+
+static void
+gst_real_audio_demux_loop (GstRealAudioDemux * demux)
+{
+ GstFlowReturn ret;
+ GstBuffer *buf;
+ guint bytes_needed;
+
+ /* check how much data we need */
+ switch (demux->state) {
+ case REAL_AUDIO_DEMUX_STATE_MARKER:
+ bytes_needed = 6 + 16; /* 16 are beginning of header */
+ break;
+ case REAL_AUDIO_DEMUX_STATE_HEADER:
+ if (!gst_real_audio_demux_get_data_offset_from_header (demux))
+ goto parse_header_error;
+ bytes_needed = demux->data_offset - (6 + 16);
+ break;
+ case REAL_AUDIO_DEMUX_STATE_DATA:
+ if (demux->packet_size > 0) {
+ /* TODO: should probably take into account width/height as well? */
+ bytes_needed = demux->packet_size;
+ } else {
+ bytes_needed = 1024;
+ }
+ break;
+ default:
+ g_return_if_reached ();
+ }
+
+ /* now get the data */
+ GST_LOG_OBJECT (demux, "getting data: %5u bytes @ %8" G_GINT64_MODIFIER "u",
+ bytes_needed, demux->offset);
+
+ if (demux->upstream_size > 0 && demux->offset >= demux->upstream_size)
+ goto eos;
+
+ buf = NULL;
+ ret = gst_pad_pull_range (demux->sinkpad, demux->offset, bytes_needed, &buf);
+
+ if (ret != GST_FLOW_OK)
+ goto pull_range_error;
+
+ if (gst_buffer_get_size (buf) != bytes_needed)
+ goto pull_range_short_read;
+
+ ret = gst_real_audio_demux_handle_buffer (demux, buf);
+ if (ret != GST_FLOW_OK)
+ goto handle_flow_error;
+
+ /* TODO: increase this in chain function too (for timestamps)? */
+ demux->offset += bytes_needed;
+
+ /* check for the end of the segment */
+ if (demux->segment.stop != -1 && demux->segment.position != -1 &&
+ demux->segment.position > demux->segment.stop) {
+ GST_DEBUG_OBJECT (demux, "reached end of segment");
+ goto eos;
+ }
+
+ return;
+
+/* ERRORS */
+parse_header_error:
+ {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL), (NULL));
+ goto pause_task;
+ }
+handle_flow_error:
+ {
+ GST_WARNING_OBJECT (demux, "handle_buf flow: %s", gst_flow_get_name (ret));
+ goto pause_task;
+ }
+pull_range_error:
+ {
+ GST_WARNING_OBJECT (demux, "pull range flow: %s", gst_flow_get_name (ret));
+ goto pause_task;
+ }
+pull_range_short_read:
+ {
+ GST_WARNING_OBJECT (demux, "pull range short read: wanted %u bytes, but "
+ "got only %" G_GSIZE_FORMAT " bytes", bytes_needed,
+ gst_buffer_get_size (buf));
+ gst_buffer_unref (buf);
+ goto eos;
+ }
+eos:
+ {
+ if (demux->state != REAL_AUDIO_DEMUX_STATE_DATA) {
+ GST_WARNING_OBJECT (demux, "reached EOS before finished parsing header");
+ goto parse_header_error;
+ }
+ GST_INFO_OBJECT (demux, "EOS");
+ if ((demux->segment.flags & GST_SEEK_FLAG_SEGMENT) != 0) {
+ gint64 stop;
+
+ /* for segment playback we need to post when (in stream time)
+ * we stopped, this is either stop (when set) or the duration. */
+ if ((stop = demux->segment.stop) == -1)
+ stop = demux->segment.duration;
+
+ GST_DEBUG_OBJECT (demux, "sending segment done, at end of segment");
+ gst_element_post_message (GST_ELEMENT (demux),
+ gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
+ stop));
+ gst_pad_push_event (demux->srcpad,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+ } else {
+ /* normal playback, send EOS event downstream */
+ GST_DEBUG_OBJECT (demux, "sending EOS event, at end of stream");
+ gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
+ }
+ goto pause_task;
+ }
+pause_task:
+ {
+ demux->segment_running = FALSE;
+ gst_pad_pause_task (demux->sinkpad);
+ GST_DEBUG_OBJECT (demux, "pausing task");
+ return;
+ }
+}
+
+static gboolean
+gst_real_audio_demux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstRealAudioDemux *demux;
+ gboolean ret;
+
+ demux = GST_REAL_AUDIO_DEMUX (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:{
+ /* FIXME */
+ gst_event_unref (event);
+ demux->need_newsegment = TRUE;
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ return ret;
+}
+
+static gboolean
+gst_real_audio_demux_handle_seek (GstRealAudioDemux * demux, GstEvent * event)
+{
+ GstFormat format;
+ GstSeekFlags flags;
+ GstSeekType cur_type, stop_type;
+ gboolean flush, update;
+ gdouble rate;
+ guint64 seek_pos;
+ gint64 cur, stop;
+
+ if (!demux->seekable)
+ goto not_seekable;
+
+ if (demux->byterate_num == 0 || demux->byterate_denom == 0)
+ goto no_bitrate;
+
+ gst_event_parse_seek (event, &rate, &format, &flags,
+ &cur_type, &cur, &stop_type, &stop);
+
+ if (format != GST_FORMAT_TIME)
+ goto only_time_format_supported;
+
+ if (rate <= 0.0)
+ goto cannot_do_backwards_playback;
+
+ flush = ((flags & GST_SEEK_FLAG_FLUSH) != 0);
+
+ GST_DEBUG_OBJECT (demux, "flush=%d, rate=%g", flush, rate);
+
+ /* unlock streaming thread and make streaming stop */
+ if (flush) {
+ gst_pad_push_event (demux->sinkpad, gst_event_new_flush_start ());
+ gst_pad_push_event (demux->srcpad, gst_event_new_flush_start ());
+ } else {
+ gst_pad_pause_task (demux->sinkpad);
+ }
+
+ GST_PAD_STREAM_LOCK (demux->sinkpad);
+
+ gst_segment_do_seek (&demux->segment, rate, format, flags,
+ cur_type, cur, stop_type, stop, &update);
+
+ GST_DEBUG_OBJECT (demux, "segment: %" GST_SEGMENT_FORMAT, &demux->segment);
+
+ seek_pos = gst_util_uint64_scale (demux->segment.start,
+ demux->byterate_num, demux->byterate_denom * GST_SECOND);
+ if (demux->packet_size > 0) {
+ seek_pos -= seek_pos % demux->packet_size;
+ }
+ seek_pos += demux->data_offset;
+
+ GST_DEBUG_OBJECT (demux, "seek_pos = %" G_GUINT64_FORMAT, seek_pos);
+
+ /* stop flushing */
+ gst_pad_push_event (demux->sinkpad, gst_event_new_flush_stop (TRUE));
+ gst_pad_push_event (demux->srcpad, gst_event_new_flush_stop (TRUE));
+
+ demux->offset = seek_pos;
+ demux->need_newsegment = TRUE;
+
+ /* notify start of new segment */
+ if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ gst_element_post_message (GST_ELEMENT (demux),
+ gst_message_new_segment_start (GST_OBJECT (demux),
+ GST_FORMAT_TIME, demux->segment.position));
+ }
+
+ demux->segment_running = TRUE;
+ /* restart our task since it might have been stopped when we did the flush */
+ gst_pad_start_task (demux->sinkpad,
+ (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
+
+ /* streaming can continue now */
+ GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+
+ return TRUE;
+
+/* ERRORS */
+not_seekable:
+ {
+ GST_DEBUG_OBJECT (demux, "seek failed: cannot seek in streaming mode");
+ return FALSE;
+ }
+no_bitrate:
+ {
+ GST_DEBUG_OBJECT (demux, "seek failed: bitrate unknown");
+ return FALSE;
+ }
+only_time_format_supported:
+ {
+ GST_DEBUG_OBJECT (demux, "can only seek in TIME format");
+ return FALSE;
+ }
+cannot_do_backwards_playback:
+ {
+ GST_DEBUG_OBJECT (demux, "can only seek with positive rate, not %lf", rate);
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_real_audio_demux_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstRealAudioDemux *demux;
+ gboolean ret = FALSE;
+
+ demux = GST_REAL_AUDIO_DEMUX (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_QOS:
+ gst_event_unref (event);
+ break;
+ case GST_EVENT_SEEK:
+ ret = gst_real_audio_demux_handle_seek (demux, event);
+ gst_event_unref (event);
+ break;
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_real_audio_demux_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ GstRealAudioDemux *demux;
+ gboolean ret = FALSE;
+
+ demux = GST_REAL_AUDIO_DEMUX (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_DURATION:{
+ GstFormat format;
+
+ gst_query_parse_duration (query, &format, NULL);
+ if (format == GST_FORMAT_TIME && demux->duration > 0) {
+ gst_query_set_duration (query, GST_FORMAT_TIME, demux->duration);
+ ret = TRUE;
+ } else if (format == GST_FORMAT_BYTES && demux->upstream_size > 0) {
+ gst_query_set_duration (query, GST_FORMAT_BYTES,
+ demux->upstream_size - demux->data_offset);
+ ret = TRUE;
+ }
+ break;
+ }
+ case GST_QUERY_SEEKING:{
+ GstFormat format;
+ gboolean seekable;
+
+ gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+ seekable = (format == GST_FORMAT_TIME && demux->seekable);
+ gst_query_set_seeking (query, format, seekable, 0,
+ (format == GST_FORMAT_TIME) ? demux->duration : -1);
+ ret = TRUE;
+ break;
+ }
+ case GST_QUERY_SEGMENT:
+ {
+ GstFormat format;
+ gint64 start, stop;
+
+ format = demux->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&demux->segment, format,
+ demux->segment.start);
+ if ((stop = demux->segment.stop) == -1)
+ stop = demux->segment.duration;
+ else
+ stop = gst_segment_to_stream_time (&demux->segment, format, stop);
+
+ gst_query_set_segment (query, demux->segment.rate, format, start, stop);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return ret;
+}
+
+static GstStateChangeReturn
+gst_real_audio_demux_change_state (GstElement * element,
+ GstStateChange transition)
+{
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+ GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
+ demux->segment_running = FALSE;
+ gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+ gst_adapter_clear (demux->adapter);
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:{
+ gst_real_audio_demux_reset (demux);
+ gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
+ break;
+ }
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
--- /dev/null
+/* GStreamer RealAudio demuxer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_REAL_AUDIO_DEMUX_H__
+#define __GST_REAL_AUDIO_DEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_REAL_AUDIO_DEMUX \
+ (gst_real_audio_demux_get_type())
+#define GST_REAL_AUDIO_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemux))
+#define GST_REAL_AUDIO_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemuxClass))
+#define GST_IS_REAL_AUDIO_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_REAL_AUDIO_DEMUX))
+#define GST_IS_REAL_AUDIO_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_REAL_AUDIO_DEMUX))
+
+typedef enum
+{
+ REAL_AUDIO_DEMUX_STATE_MARKER,
+ REAL_AUDIO_DEMUX_STATE_HEADER,
+ REAL_AUDIO_DEMUX_STATE_DATA
+} GstRealAudioDemuxState;
+
+typedef struct _GstRealAudioDemux GstRealAudioDemux;
+typedef struct _GstRealAudioDemuxClass GstRealAudioDemuxClass;
+
+struct _GstRealAudioDemux {
+ GstElement element;
+
+ GstPad *sinkpad;
+ GstPad *srcpad;
+
+ gboolean have_group_id;
+ guint group_id;
+
+ GstAdapter *adapter;
+ GstRealAudioDemuxState state;
+
+ guint ra_version;
+ guint data_offset;
+
+ guint packet_size;
+ guint leaf_size;
+ guint height;
+ guint flavour;
+
+ guint sample_rate;
+ guint sample_width;
+ guint channels;
+ guint32 fourcc;
+
+ gboolean segment_running;
+
+ gboolean need_newsegment;
+ GstTagList *pending_tags;
+
+ guint byterate_num; /* bytes per second */
+ guint byterate_denom;
+
+ gint64 duration;
+ gint64 upstream_size;
+
+ guint64 offset; /* current read byte offset for
+ * pull_range-based mode */
+
+ /* playback start/stop positions */
+ GstSegment segment;
+
+ gboolean seekable;
+};
+
+struct _GstRealAudioDemuxClass {
+ GstElementClass element_class;
+};
+
+GType gst_real_audio_demux_get_type (void);
+
+GST_ELEMENT_REGISTER_DECLARE (rademux);
+
+G_END_DECLS
+
+#endif /* __GST_REAL_AUDIO_DEMUX_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
+ * <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstrdtbuffer.h"
+#include "rdtdepay.h"
+
+GST_DEBUG_CATEGORY_STATIC (rdtdepay_debug);
+#define GST_CAT_DEFAULT rdtdepay_debug
+
+/* RDTDepay signals and args */
+enum
+{
+ /* FILL ME */
+ LAST_SIGNAL
+};
+
+enum
+{
+ PROP_0,
+};
+
+static GstStaticPadTemplate gst_rdt_depay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+ );
+
+static GstStaticPadTemplate gst_rdt_depay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-rdt, "
+ "media = (string) \"application\", "
+ "clock-rate = (int) [1, MAX ], "
+ "encoding-name = (string) \"X-REAL-RDT\""
+ /* All optional parameters
+ *
+ * "config="
+ */
+ )
+ );
+
+#define gst_rdt_depay_parent_class parent_class
+G_DEFINE_TYPE (GstRDTDepay, gst_rdt_depay, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rdtdepay, "rdtdepay",
+ GST_RANK_MARGINAL, GST_TYPE_RDT_DEPAY);
+
+static void gst_rdt_depay_finalize (GObject * object);
+
+static GstStateChangeReturn gst_rdt_depay_change_state (GstElement *
+ element, GstStateChange transition);
+
+static gboolean gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_rdt_depay_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+
+static void
+gst_rdt_depay_class_init (GstRDTDepayClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = gst_rdt_depay_finalize;
+
+ gstelement_class->change_state = gst_rdt_depay_change_state;
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_depay_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_depay_sink_template);
+
+ gst_element_class_set_static_metadata (gstelement_class, "RDT packet parser",
+ "Codec/Depayloader/Network",
+ "Extracts RealMedia from RDT packets",
+ "Lutz Mueller <lutz at topfrose dot de>, "
+ "Wim Taymans <wim@fluendo.com>");
+
+ GST_DEBUG_CATEGORY_INIT (rdtdepay_debug, "rdtdepay",
+ 0, "Depayloader for RDT RealMedia packets");
+}
+
+static void
+gst_rdt_depay_init (GstRDTDepay * rdtdepay)
+{
+ rdtdepay->sinkpad =
+ gst_pad_new_from_static_template (&gst_rdt_depay_sink_template, "sink");
+ gst_pad_set_chain_function (rdtdepay->sinkpad, gst_rdt_depay_chain);
+ gst_pad_set_event_function (rdtdepay->sinkpad, gst_rdt_depay_sink_event);
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->sinkpad);
+
+ rdtdepay->srcpad =
+ gst_pad_new_from_static_template (&gst_rdt_depay_src_template, "src");
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->srcpad);
+}
+
+static void
+gst_rdt_depay_finalize (GObject * object)
+{
+ GstRDTDepay *rdtdepay;
+
+ rdtdepay = GST_RDT_DEPAY (object);
+
+ if (rdtdepay->header)
+ gst_buffer_unref (rdtdepay->header);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_rdt_depay_setcaps (GstPad * pad, GstCaps * caps)
+{
+ GstStructure *structure;
+ GstRDTDepay *rdtdepay;
+ GstCaps *srccaps;
+ gint clock_rate = 1000; /* default */
+ const GValue *value;
+ GstBuffer *header;
+
+ rdtdepay = GST_RDT_DEPAY (GST_PAD_PARENT (pad));
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ if (gst_structure_has_field (structure, "clock-rate"))
+ gst_structure_get_int (structure, "clock-rate", &clock_rate);
+
+ /* config contains the RealMedia header as a buffer. */
+ value = gst_structure_get_value (structure, "config");
+ if (!value)
+ goto no_header;
+
+ header = gst_value_get_buffer (value);
+ if (!header)
+ goto no_header;
+
+ /* get other values for newsegment */
+ value = gst_structure_get_value (structure, "npt-start");
+ if (value && G_VALUE_HOLDS_UINT64 (value))
+ rdtdepay->npt_start = g_value_get_uint64 (value);
+ else
+ rdtdepay->npt_start = 0;
+ GST_DEBUG_OBJECT (rdtdepay, "NPT start %" G_GUINT64_FORMAT,
+ rdtdepay->npt_start);
+
+ value = gst_structure_get_value (structure, "npt-stop");
+ if (value && G_VALUE_HOLDS_UINT64 (value))
+ rdtdepay->npt_stop = g_value_get_uint64 (value);
+ else
+ rdtdepay->npt_stop = -1;
+
+ GST_DEBUG_OBJECT (rdtdepay, "NPT stop %" G_GUINT64_FORMAT,
+ rdtdepay->npt_stop);
+
+ value = gst_structure_get_value (structure, "play-speed");
+ if (value && G_VALUE_HOLDS_DOUBLE (value))
+ rdtdepay->play_speed = g_value_get_double (value);
+ else
+ rdtdepay->play_speed = 1.0;
+
+ value = gst_structure_get_value (structure, "play-scale");
+ if (value && G_VALUE_HOLDS_DOUBLE (value))
+ rdtdepay->play_scale = g_value_get_double (value);
+ else
+ rdtdepay->play_scale = 1.0;
+
+ /* caps seem good, configure element */
+ rdtdepay->clock_rate = clock_rate;
+
+ /* set caps on pad and on header */
+ srccaps = gst_caps_new_empty_simple ("application/vnd.rn-realmedia");
+ gst_pad_set_caps (rdtdepay->srcpad, srccaps);
+ gst_caps_unref (srccaps);
+
+ if (rdtdepay->header)
+ gst_buffer_unref (rdtdepay->header);
+ rdtdepay->header = gst_buffer_ref (header);
+
+ return TRUE;
+
+ /* ERRORS */
+no_header:
+ {
+ GST_ERROR_OBJECT (rdtdepay, "no header found in caps, no 'config' field");
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstRDTDepay *depay;
+ gboolean res = TRUE;
+
+ depay = GST_RDT_DEPAY (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_rdt_depay_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_FLUSH_STOP:
+ res = gst_pad_push_event (depay->srcpad, event);
+
+ gst_segment_init (&depay->segment, GST_FORMAT_UNDEFINED);
+ depay->need_newsegment = TRUE;
+ depay->next_seqnum = -1;
+ break;
+ case GST_EVENT_SEGMENT:
+ {
+ gst_event_copy_segment (event, &depay->segment);
+ /* don't pass the event downstream, we generate our own segment
+ * including the NTP time and other things we receive in caps */
+ gst_event_unref (event);
+ break;
+ }
+ default:
+ /* pass other events forward */
+ res = gst_pad_push_event (depay->srcpad, event);
+ break;
+ }
+ return res;
+}
+
+static GstEvent *
+create_segment_event (GstRDTDepay * depay, gboolean update,
+ GstClockTime position)
+{
+ GstSegment segment;
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.rate = depay->play_speed;
+ segment.applied_rate = depay->play_scale;
+ segment.start = position;
+
+ if (depay->npt_stop != -1)
+ segment.stop = depay->npt_stop - depay->npt_start;
+ else
+ segment.stop = -1;
+
+ segment.time = position + depay->npt_start;
+
+ return gst_event_new_segment (&segment);
+}
+
+static GstFlowReturn
+gst_rdt_depay_push (GstRDTDepay * rdtdepay, GstBuffer * buffer)
+{
+ GstFlowReturn ret;
+
+ if (rdtdepay->need_newsegment) {
+ GstEvent *event;
+
+ event = create_segment_event (rdtdepay, FALSE, 0);
+ gst_pad_push_event (rdtdepay->srcpad, event);
+
+ rdtdepay->need_newsegment = FALSE;
+ }
+
+ if (rdtdepay->discont) {
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ rdtdepay->discont = FALSE;
+ }
+ ret = gst_pad_push (rdtdepay->srcpad, buffer);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_rdt_depay_handle_data (GstRDTDepay * rdtdepay, GstClockTime outtime,
+ GstRDTPacket * packet)
+{
+ GstFlowReturn ret;
+ GstBuffer *outbuf;
+ GstMapInfo outmap;
+ guint8 *data, *outdata;
+ guint size;
+ guint16 stream_id;
+ guint32 timestamp;
+ gint gap;
+ guint16 seqnum;
+ guint8 flags;
+ guint16 outflags;
+
+ /* get pointers to the packet data */
+ data = gst_rdt_packet_data_map (packet, &size);
+
+ outbuf = gst_buffer_new_and_alloc (12 + size);
+ GST_BUFFER_TIMESTAMP (outbuf) = outtime;
+
+ GST_DEBUG_OBJECT (rdtdepay, "have size %u", size);
+
+ /* copy over some things */
+ stream_id = gst_rdt_packet_data_get_stream_id (packet);
+ timestamp = gst_rdt_packet_data_get_timestamp (packet);
+ flags = gst_rdt_packet_data_get_flags (packet);
+
+ seqnum = gst_rdt_packet_data_get_seq (packet);
+
+ GST_DEBUG_OBJECT (rdtdepay, "stream_id %u, timestamp %u, seqnum %d, flags %d",
+ stream_id, timestamp, seqnum, flags);
+
+ if (rdtdepay->next_seqnum != -1) {
+ gap = gst_rdt_buffer_compare_seqnum (seqnum, rdtdepay->next_seqnum);
+
+ /* if we have no gap, all is fine */
+ if (G_UNLIKELY (gap != 0)) {
+ GST_LOG_OBJECT (rdtdepay, "got packet %u, expected %u, gap %d", seqnum,
+ rdtdepay->next_seqnum, gap);
+ if (gap < 0) {
+ /* seqnum > next_seqnum, we are missing some packets, this is always a
+ * DISCONT. */
+ GST_LOG_OBJECT (rdtdepay, "%d missing packets", gap);
+ rdtdepay->discont = TRUE;
+ } else {
+ /* seqnum < next_seqnum, we have seen this packet before or the sender
+ * could be restarted. If the packet is not too old, we throw it away as
+ * a duplicate, otherwise we mark discont and continue. 100 misordered
+ * packets is a good threshold. See also RFC 4737. */
+ if (gap < 100)
+ goto dropping;
+
+ GST_LOG_OBJECT (rdtdepay,
+ "%d > 100, packet too old, sender likely restarted", gap);
+ rdtdepay->discont = TRUE;
+ }
+ }
+ }
+ rdtdepay->next_seqnum = (seqnum + 1);
+ if (rdtdepay->next_seqnum == 0xff00)
+ rdtdepay->next_seqnum = 0;
+
+ if ((flags & 1) == 0)
+ outflags = 2;
+ else
+ outflags = 0;
+
+ gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+ outdata = outmap.data;
+ GST_WRITE_UINT16_BE (outdata + 0, 0); /* version */
+ GST_WRITE_UINT16_BE (outdata + 2, size + 12); /* length */
+ GST_WRITE_UINT16_BE (outdata + 4, stream_id); /* stream */
+ GST_WRITE_UINT32_BE (outdata + 6, timestamp); /* timestamp */
+ GST_WRITE_UINT16_BE (outdata + 10, outflags); /* flags */
+ memcpy (outdata + 12, data, size);
+ gst_buffer_unmap (outbuf, &outmap);
+ gst_buffer_resize (outbuf, 0, 12 + size);
+
+ gst_rdt_packet_data_unmap (packet);
+
+ GST_DEBUG_OBJECT (rdtdepay, "Pushing packet, outtime %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (outtime));
+
+ ret = gst_rdt_depay_push (rdtdepay, outbuf);
+
+ return ret;
+
+ /* ERRORS */
+dropping:
+ {
+ GST_WARNING_OBJECT (rdtdepay, "%d <= 100, dropping old packet", gap);
+ return GST_FLOW_OK;
+ }
+}
+
+static GstFlowReturn
+gst_rdt_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstRDTDepay *rdtdepay;
+ GstFlowReturn ret;
+ GstClockTime timestamp;
+ gboolean more;
+ GstRDTPacket packet;
+
+ rdtdepay = GST_RDT_DEPAY (parent);
+
+ if (GST_BUFFER_IS_DISCONT (buf)) {
+ GST_LOG_OBJECT (rdtdepay, "received discont");
+ rdtdepay->discont = TRUE;
+ }
+
+ if (rdtdepay->header) {
+ GstBuffer *out;
+
+ out = rdtdepay->header;
+ rdtdepay->header = NULL;
+
+ /* push header data first */
+ gst_rdt_depay_push (rdtdepay, out);
+ }
+
+ /* save timestamp */
+ timestamp = GST_BUFFER_TIMESTAMP (buf);
+
+ ret = GST_FLOW_OK;
+
+ GST_LOG_OBJECT (rdtdepay, "received buffer timestamp %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (timestamp));
+
+ /* data is in RDT format. */
+ more = gst_rdt_buffer_get_first_packet (buf, &packet);
+ while (more) {
+ GstRDTType type;
+
+ type = gst_rdt_packet_get_type (&packet);
+ GST_DEBUG_OBJECT (rdtdepay, "Have packet of type %04x", type);
+
+ if (GST_RDT_IS_DATA_TYPE (type)) {
+ GST_DEBUG_OBJECT (rdtdepay, "We have a data packet");
+ ret = gst_rdt_depay_handle_data (rdtdepay, timestamp, &packet);
+ } else {
+ switch (type) {
+ default:
+ GST_DEBUG_OBJECT (rdtdepay, "Ignoring packet");
+ break;
+ }
+ }
+ if (ret != GST_FLOW_OK)
+ break;
+
+ more = gst_rdt_packet_move_to_next (&packet);
+ }
+
+ gst_buffer_unref (buf);
+
+ return ret;
+}
+
+static GstStateChangeReturn
+gst_rdt_depay_change_state (GstElement * element, GstStateChange transition)
+{
+ GstRDTDepay *rdtdepay;
+ GstStateChangeReturn ret;
+
+ rdtdepay = GST_RDT_DEPAY (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ gst_segment_init (&rdtdepay->segment, GST_FORMAT_UNDEFINED);
+ rdtdepay->next_seqnum = -1;
+ rdtdepay->need_newsegment = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (rdtdepay->header)
+ gst_buffer_unref (rdtdepay->header);
+ rdtdepay->header = NULL;
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
+ * <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RDT_DEPAY_H__
+#define __GST_RDT_DEPAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RDT_DEPAY \
+ (gst_rdt_depay_get_type())
+#define GST_RDT_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_DEPAY,GstRDTDepay))
+#define GST_RDT_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_DEPAY,GstRDTDepayClass))
+#define GST_IS_RDT_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_DEPAY))
+#define GST_IS_RDT_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_DEPAY))
+
+typedef struct _GstRDTDepay GstRDTDepay;
+typedef struct _GstRDTDepayClass GstRDTDepayClass;
+
+struct _GstRDTDepay
+{
+ GstElement parent;
+
+ GstPad *sinkpad;
+ GstPad *srcpad;
+
+ guint clock_rate;
+ GstClockTime npt_start;
+ GstClockTime npt_stop;
+ gdouble play_speed;
+ gdouble play_scale;
+
+ guint32 next_seqnum;
+
+ gboolean discont;
+ gboolean need_newsegment;
+ GstSegment segment;
+ GstBuffer *header;
+};
+
+struct _GstRDTDepayClass
+{
+ GstElementClass parent_class;
+};
+
+GType gst_rdt_depay_get_type (void);
+
+GST_ELEMENT_REGISTER_DECLARE (rdtdepay);
+
+G_END_DECLS
+
+#endif /* __GST_RDT_DEPAY_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <string.h>
+#include <stdlib.h>
+
+#include "rdtjitterbuffer.h"
+#include "gstrdtbuffer.h"
+
+GST_DEBUG_CATEGORY_STATIC (rdt_jitter_buffer_debug);
+#define GST_CAT_DEFAULT rdt_jitter_buffer_debug
+
+#define MAX_WINDOW RDT_JITTER_BUFFER_MAX_WINDOW
+#define MAX_TIME (2 * GST_SECOND)
+
+/* signals and args */
+enum
+{
+ LAST_SIGNAL
+};
+
+enum
+{
+ PROP_0
+};
+
+/* GObject vmethods */
+static void rdt_jitter_buffer_finalize (GObject * object);
+
+/* static guint rdt_jitter_buffer_signals[LAST_SIGNAL] = { 0 }; */
+
+G_DEFINE_TYPE (RDTJitterBuffer, rdt_jitter_buffer, G_TYPE_OBJECT);
+
+static void
+rdt_jitter_buffer_class_init (RDTJitterBufferClass * klass)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = (GObjectClass *) klass;
+
+ gobject_class->finalize = rdt_jitter_buffer_finalize;
+
+ GST_DEBUG_CATEGORY_INIT (rdt_jitter_buffer_debug, "rdtjitterbuffer", 0,
+ "RDT Jitter Buffer");
+}
+
+static void
+rdt_jitter_buffer_init (RDTJitterBuffer * jbuf)
+{
+ jbuf->packets = g_queue_new ();
+
+ rdt_jitter_buffer_reset_skew (jbuf);
+}
+
+static void
+rdt_jitter_buffer_finalize (GObject * object)
+{
+ RDTJitterBuffer *jbuf;
+
+ jbuf = RDT_JITTER_BUFFER_CAST (object);
+
+ rdt_jitter_buffer_flush (jbuf);
+ g_queue_free (jbuf->packets);
+
+ G_OBJECT_CLASS (rdt_jitter_buffer_parent_class)->finalize (object);
+}
+
+/**
+ * rdt_jitter_buffer_new:
+ *
+ * Create an #RDTJitterBuffer.
+ *
+ * Returns: a new #RDTJitterBuffer. Use g_object_unref() after usage.
+ */
+RDTJitterBuffer *
+rdt_jitter_buffer_new (void)
+{
+ RDTJitterBuffer *jbuf;
+
+ jbuf = g_object_new (RDT_TYPE_JITTER_BUFFER, NULL);
+
+ return jbuf;
+}
+
+void
+rdt_jitter_buffer_reset_skew (RDTJitterBuffer * jbuf)
+{
+ jbuf->base_time = -1;
+ jbuf->base_rtptime = -1;
+ jbuf->ext_rtptime = -1;
+ jbuf->window_pos = 0;
+ jbuf->window_filling = TRUE;
+ jbuf->window_min = 0;
+ jbuf->skew = 0;
+ jbuf->prev_send_diff = -1;
+}
+
+/* For the clock skew we use a windowed low point averaging algorithm as can be
+ * found in http://www.grame.fr/pub/TR-050601.pdf. The idea is that the jitter is
+ * composed of:
+ *
+ * J = N + n
+ *
+ * N : a constant network delay.
+ * n : random added noise. The noise is concentrated around 0
+ *
+ * In the receiver we can track the elapsed time at the sender with:
+ *
+ * send_diff(i) = (Tsi - Ts0);
+ *
+ * Tsi : The time at the sender at packet i
+ * Ts0 : The time at the sender at the first packet
+ *
+ * This is the difference between the RDT timestamp in the first received packet
+ * and the current packet.
+ *
+ * At the receiver we have to deal with the jitter introduced by the network.
+ *
+ * recv_diff(i) = (Tri - Tr0)
+ *
+ * Tri : The time at the receiver at packet i
+ * Tr0 : The time at the receiver at the first packet
+ *
+ * Both of these values contain a jitter Ji, a jitter for packet i, so we can
+ * write:
+ *
+ * recv_diff(i) = (Cri + D + ni) - (Cr0 + D + n0))
+ *
+ * Cri : The time of the clock at the receiver for packet i
+ * D + ni : The jitter when receiving packet i
+ *
+ * We see that the network delay is irrelevant here as we can eliminate D:
+ *
+ * recv_diff(i) = (Cri + ni) - (Cr0 + n0))
+ *
+ * The drift is now expressed as:
+ *
+ * Drift(i) = recv_diff(i) - send_diff(i);
+ *
+ * We now keep the W latest values of Drift and find the minimum (this is the
+ * one with the lowest network jitter and thus the one which is least affected
+ * by it). We average this lowest value to smooth out the resulting network skew.
+ *
+ * Both the window and the weighting used for averaging influence the accuracy
+ * of the drift estimation. Finding the correct parameters turns out to be a
+ * compromise between accuracy and inertia.
+ *
+ * We use a 2 second window or up to 512 data points, which is statistically big
+ * enough to catch spikes (FIXME, detect spikes).
+ * We also use a rather large weighting factor (125) to smoothly adapt. During
+ * startup, when filling the window, we use a parabolic weighting factor, the
+ * more the window is filled, the faster we move to the detected possible skew.
+ *
+ * Returns: @time adjusted with the clock skew.
+ */
+static GstClockTime
+calculate_skew (RDTJitterBuffer * jbuf, guint32 rtptime, GstClockTime time,
+ guint32 clock_rate)
+{
+ guint64 ext_rtptime;
+ guint64 send_diff, recv_diff;
+ gint64 delta;
+ gint64 old;
+ gint pos, i;
+ GstClockTime gstrtptime, out_time;
+
+ //ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
+ ext_rtptime = rtptime;
+
+ gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate);
+
+again:
+ /* first time, lock on to time and gstrtptime */
+ if (jbuf->base_time == -1)
+ jbuf->base_time = time;
+ if (jbuf->base_rtptime == -1)
+ jbuf->base_rtptime = gstrtptime;
+
+ if (gstrtptime >= jbuf->base_rtptime)
+ send_diff = gstrtptime - jbuf->base_rtptime;
+ else {
+ /* elapsed time at sender, timestamps can go backwards and thus be smaller
+ * than our base time, take a new base time in that case. */
+ GST_DEBUG ("backward timestamps at server, taking new base time");
+ jbuf->base_rtptime = gstrtptime;
+ jbuf->base_time = time;
+ send_diff = 0;
+ }
+
+ GST_DEBUG ("extrtp %" G_GUINT64_FORMAT ", gstrtp %" GST_TIME_FORMAT ", base %"
+ GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT, ext_rtptime,
+ GST_TIME_ARGS (gstrtptime), GST_TIME_ARGS (jbuf->base_rtptime),
+ GST_TIME_ARGS (send_diff));
+
+ if (jbuf->prev_send_diff != -1 && time != -1) {
+ gint64 delta_diff;
+
+ if (send_diff > jbuf->prev_send_diff)
+ delta_diff = send_diff - jbuf->prev_send_diff;
+ else
+ delta_diff = jbuf->prev_send_diff - send_diff;
+
+ /* server changed rtp timestamps too quickly, reset skew detection and start
+ * again. This value is sortof arbitrary and can be a bad measurement up if
+ * there are many packets missing because then we get a big gap that is
+ * unrelated to a timestamp switch. */
+ if (delta_diff > GST_SECOND) {
+ GST_DEBUG ("delta changed too quickly %" GST_TIME_FORMAT " reset skew",
+ GST_TIME_ARGS (delta_diff));
+ rdt_jitter_buffer_reset_skew (jbuf);
+ goto again;
+ }
+ }
+ jbuf->prev_send_diff = send_diff;
+
+ /* we don't have an arrival timestamp so we can't do skew detection. we
+ * should still apply a timestamp based on RDT timestamp and base_time */
+ if (time == -1)
+ goto no_skew;
+
+ /* elapsed time at receiver, includes the jitter */
+ recv_diff = time - jbuf->base_time;
+
+ GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (jbuf->base_time),
+ GST_TIME_ARGS (recv_diff));
+
+ /* measure the diff */
+ delta = ((gint64) recv_diff) - ((gint64) send_diff);
+
+ pos = jbuf->window_pos;
+
+ if (jbuf->window_filling) {
+ /* we are filling the window */
+ GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta);
+ jbuf->window[pos++] = delta;
+ /* calc the min delta we observed */
+ if (pos == 1 || delta < jbuf->window_min)
+ jbuf->window_min = delta;
+
+ if (send_diff >= MAX_TIME || pos >= MAX_WINDOW) {
+ jbuf->window_size = pos;
+
+ /* window filled */
+ GST_DEBUG ("min %" G_GINT64_FORMAT, jbuf->window_min);
+
+ /* the skew is now the min */
+ jbuf->skew = jbuf->window_min;
+ jbuf->window_filling = FALSE;
+ } else {
+ gint perc_time, perc_window, perc;
+
+ /* figure out how much we filled the window, this depends on the amount of
+ * time we have or the max number of points we keep. */
+ perc_time = send_diff * 100 / MAX_TIME;
+ perc_window = pos * 100 / MAX_WINDOW;
+ perc = MAX (perc_time, perc_window);
+
+ /* make a parabolic function, the closer we get to the MAX, the more value
+ * we give to the scaling factor of the new value */
+ perc = perc * perc;
+
+ /* quickly go to the min value when we are filling up, slowly when we are
+ * just starting because we're not sure it's a good value yet. */
+ jbuf->skew =
+ (perc * jbuf->window_min + ((10000 - perc) * jbuf->skew)) / 10000;
+ jbuf->window_size = pos + 1;
+ }
+ } else {
+ /* pick old value and store new value. We keep the previous value in order
+ * to quickly check if the min of the window changed */
+ old = jbuf->window[pos];
+ jbuf->window[pos++] = delta;
+
+ if (delta <= jbuf->window_min) {
+ /* if the new value we inserted is smaller or equal to the current min,
+ * it becomes the new min */
+ jbuf->window_min = delta;
+ } else if (old == jbuf->window_min) {
+ gint64 min = G_MAXINT64;
+
+ /* if we removed the old min, we have to find a new min */
+ for (i = 0; i < jbuf->window_size; i++) {
+ /* we found another value equal to the old min, we can stop searching now */
+ if (jbuf->window[i] == old) {
+ min = old;
+ break;
+ }
+ if (jbuf->window[i] < min)
+ min = jbuf->window[i];
+ }
+ jbuf->window_min = min;
+ }
+ /* average the min values */
+ jbuf->skew = (jbuf->window_min + (124 * jbuf->skew)) / 125;
+ GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT,
+ delta, jbuf->window_min);
+ }
+ /* wrap around in the window */
+ if (pos >= jbuf->window_size)
+ pos = 0;
+ jbuf->window_pos = pos;
+
+no_skew:
+ /* the output time is defined as the base timestamp plus the RDT time
+ * adjusted for the clock skew .*/
+ out_time = jbuf->base_time + send_diff + jbuf->skew;
+
+ GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
+ jbuf->skew, GST_TIME_ARGS (out_time));
+
+ return out_time;
+}
+
+/**
+ * rdt_jitter_buffer_insert:
+ * @jbuf: an #RDTJitterBuffer
+ * @buf: a buffer
+ * @time: a running_time when this buffer was received in nanoseconds
+ * @clock_rate: the clock-rate of the payload of @buf
+ * @tail: TRUE when the tail element changed.
+ *
+ * Inserts @buf into the packet queue of @jbuf. The sequence number of the
+ * packet will be used to sort the packets. This function takes ownerhip of
+ * @buf when the function returns %TRUE.
+ * @buf should have writable metadata when calling this function.
+ *
+ * Returns: %FALSE if a packet with the same number already existed.
+ */
+gboolean
+rdt_jitter_buffer_insert (RDTJitterBuffer * jbuf, GstBuffer * buf,
+ GstClockTime time, guint32 clock_rate, gboolean * tail)
+{
+ GList *list;
+ guint32 rtptime;
+ guint16 seqnum;
+ GstRDTPacket packet;
+ gboolean more;
+
+ g_return_val_if_fail (jbuf != NULL, FALSE);
+ g_return_val_if_fail (buf != NULL, FALSE);
+
+ more = gst_rdt_buffer_get_first_packet (buf, &packet);
+ /* programmer error */
+ g_return_val_if_fail (more == TRUE, FALSE);
+
+ seqnum = gst_rdt_packet_data_get_seq (&packet);
+ /* do skew calculation by measuring the difference between rtptime and the
+ * receive time, this function will retimestamp @buf with the skew corrected
+ * running time. */
+ rtptime = gst_rdt_packet_data_get_timestamp (&packet);
+
+ /* loop the list to skip strictly smaller seqnum buffers */
+ for (list = jbuf->packets->head; list; list = g_list_next (list)) {
+ guint16 qseq;
+ gint gap;
+
+ more =
+ gst_rdt_buffer_get_first_packet (GST_BUFFER_CAST (list->data), &packet);
+ /* programmer error */
+ g_return_val_if_fail (more == TRUE, FALSE);
+
+ qseq = gst_rdt_packet_data_get_seq (&packet);
+
+ /* compare the new seqnum to the one in the buffer */
+ gap = gst_rdt_buffer_compare_seqnum (seqnum, qseq);
+
+ /* we hit a packet with the same seqnum, notify a duplicate */
+ if (G_UNLIKELY (gap == 0))
+ goto duplicate;
+
+ /* seqnum > qseq, we can stop looking */
+ if (G_LIKELY (gap < 0))
+ break;
+ }
+
+
+ if (clock_rate) {
+ time = calculate_skew (jbuf, rtptime, time, clock_rate);
+ GST_BUFFER_TIMESTAMP (buf) = time;
+ }
+
+ if (list)
+ g_queue_insert_before (jbuf->packets, list, buf);
+ else
+ g_queue_push_tail (jbuf->packets, buf);
+
+ /* tail was changed when we did not find a previous packet, we set the return
+ * flag when requested. */
+ if (tail)
+ *tail = (list == NULL);
+
+ return TRUE;
+
+ /* ERRORS */
+duplicate:
+ {
+ GST_WARNING ("duplicate packet %d found", (gint) seqnum);
+ return FALSE;
+ }
+}
+
+/**
+ * rdt_jitter_buffer_pop:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Pops the oldest buffer from the packet queue of @jbuf. The popped buffer will
+ * have its timestamp adjusted with the incoming running_time and the detected
+ * clock skew.
+ *
+ * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
+ */
+GstBuffer *
+rdt_jitter_buffer_pop (RDTJitterBuffer * jbuf)
+{
+ GstBuffer *buf;
+
+ g_return_val_if_fail (jbuf != NULL, FALSE);
+
+ buf = g_queue_pop_tail (jbuf->packets);
+
+ return buf;
+}
+
+/**
+ * rdt_jitter_buffer_peek:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Peek the oldest buffer from the packet queue of @jbuf. Register a callback
+ * with rdt_jitter_buffer_set_tail_changed() to be notified when an older packet
+ * was inserted in the queue.
+ *
+ * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
+ */
+GstBuffer *
+rdt_jitter_buffer_peek (RDTJitterBuffer * jbuf)
+{
+ GstBuffer *buf;
+
+ g_return_val_if_fail (jbuf != NULL, FALSE);
+
+ buf = g_queue_peek_tail (jbuf->packets);
+
+ return buf;
+}
+
+/**
+ * rdt_jitter_buffer_flush:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Flush all packets from the jitterbuffer.
+ */
+void
+rdt_jitter_buffer_flush (RDTJitterBuffer * jbuf)
+{
+ GstBuffer *buffer;
+
+ g_return_if_fail (jbuf != NULL);
+
+ while ((buffer = g_queue_pop_head (jbuf->packets)))
+ gst_buffer_unref (buffer);
+}
+
+/**
+ * rdt_jitter_buffer_num_packets:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Get the number of packets currently in "jbuf.
+ *
+ * Returns: The number of packets in @jbuf.
+ */
+guint
+rdt_jitter_buffer_num_packets (RDTJitterBuffer * jbuf)
+{
+ g_return_val_if_fail (jbuf != NULL, 0);
+
+ return jbuf->packets->length;
+}
+
+/**
+ * rdt_jitter_buffer_get_ts_diff:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Get the difference between the timestamps of first and last packet in the
+ * jitterbuffer.
+ *
+ * Returns: The difference expressed in the timestamp units of the packets.
+ */
+guint32
+rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer * jbuf)
+{
+ guint64 high_ts, low_ts;
+ GstBuffer *high_buf, *low_buf;
+ guint32 result;
+
+ g_return_val_if_fail (jbuf != NULL, 0);
+
+ high_buf = g_queue_peek_head (jbuf->packets);
+ low_buf = g_queue_peek_tail (jbuf->packets);
+
+ if (!high_buf || !low_buf || high_buf == low_buf)
+ return 0;
+
+ //high_ts = gst_rtp_buffer_get_timestamp (high_buf);
+ //low_ts = gst_rtp_buffer_get_timestamp (low_buf);
+ high_ts = 0;
+ low_ts = 0;
+
+ /* it needs to work if ts wraps */
+ if (high_ts >= low_ts) {
+ result = (guint32) (high_ts - low_ts);
+ } else {
+ result = (guint32) (high_ts + G_MAXUINT32 + 1 - low_ts);
+ }
+ return result;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RDT_JITTER_BUFFER_H__
+#define __RDT_JITTER_BUFFER_H__
+
+#include <gst/gst.h>
+
+typedef struct _RDTJitterBuffer RDTJitterBuffer;
+typedef struct _RDTJitterBufferClass RDTJitterBufferClass;
+
+#define RDT_TYPE_JITTER_BUFFER (rdt_jitter_buffer_get_type())
+#define RDT_JITTER_BUFFER(src) (G_TYPE_CHECK_INSTANCE_CAST((src),RDT_TYPE_JITTER_BUFFER,RDTJitterBuffer))
+#define RDT_JITTER_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),RDT_TYPE_JITTER_BUFFER,RDTJitterBufferClass))
+#define RDT_IS_JITTER_BUFFER(src) (G_TYPE_CHECK_INSTANCE_TYPE((src),RDT_TYPE_JITTER_BUFFER))
+#define RDT_IS_JITTER_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),RDT_TYPE_JITTER_BUFFER))
+#define RDT_JITTER_BUFFER_CAST(src) ((RDTJitterBuffer *)(src))
+
+/**
+ * RTPTailChanged:
+ * @jbuf: an #RDTJitterBuffer
+ * @user_data: user data specified when registering
+ *
+ * This callback will be called when the tail buffer of @jbuf changed.
+ */
+typedef void (*RTPTailChanged) (RDTJitterBuffer *jbuf, gpointer user_data);
+
+#define RDT_JITTER_BUFFER_MAX_WINDOW 512
+/**
+ * RDTJitterBuffer:
+ *
+ * A JitterBuffer in the #RTPSession
+ */
+struct _RDTJitterBuffer {
+ GObject object;
+
+ GQueue *packets;
+
+ /* for calculating skew */
+ GstClockTime base_time;
+ GstClockTime base_rtptime;
+ guint64 ext_rtptime;
+ gint64 window[RDT_JITTER_BUFFER_MAX_WINDOW];
+ guint window_pos;
+ guint window_size;
+ gboolean window_filling;
+ gint64 window_min;
+ gint64 skew;
+ gint64 prev_send_diff;
+};
+
+struct _RDTJitterBufferClass {
+ GObjectClass parent_class;
+};
+
+GType rdt_jitter_buffer_get_type (void);
+
+/* managing lifetime */
+RDTJitterBuffer* rdt_jitter_buffer_new (void);
+
+void rdt_jitter_buffer_reset_skew (RDTJitterBuffer *jbuf);
+
+gboolean rdt_jitter_buffer_insert (RDTJitterBuffer *jbuf, GstBuffer *buf,
+ GstClockTime time,
+ guint32 clock_rate,
+ gboolean *tail);
+GstBuffer * rdt_jitter_buffer_peek (RDTJitterBuffer *jbuf);
+GstBuffer * rdt_jitter_buffer_pop (RDTJitterBuffer *jbuf);
+
+void rdt_jitter_buffer_flush (RDTJitterBuffer *jbuf);
+
+guint rdt_jitter_buffer_num_packets (RDTJitterBuffer *jbuf);
+guint32 rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer *jbuf);
+
+#endif /* __RDT_JITTER_BUFFER_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ * <2013> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rdtmanager
+ * @title: rdtmanager
+ * @see_also: GstRtspSrc
+ *
+ * A simple RTP session manager used internally by rtspsrc.
+ */
+
+/* #define HAVE_RTCP */
+
+#include "gstrdtbuffer.h"
+#include "rdtmanager.h"
+#include "rdtjitterbuffer.h"
+
+#include <gst/glib-compat-private.h>
+
+#include <stdio.h>
+
+GST_DEBUG_CATEGORY_STATIC (rdtmanager_debug);
+#define GST_CAT_DEFAULT (rdtmanager_debug)
+
+/* GstRDTManager signals and args */
+enum
+{
+ SIGNAL_REQUEST_PT_MAP,
+ SIGNAL_CLEAR_PT_MAP,
+
+ SIGNAL_ON_NEW_SSRC,
+ SIGNAL_ON_SSRC_COLLISION,
+ SIGNAL_ON_SSRC_VALIDATED,
+ SIGNAL_ON_SSRC_ACTIVE,
+ SIGNAL_ON_SSRC_SDES,
+ SIGNAL_ON_BYE_SSRC,
+ SIGNAL_ON_BYE_TIMEOUT,
+ SIGNAL_ON_TIMEOUT,
+ SIGNAL_ON_NPT_STOP,
+ LAST_SIGNAL
+};
+
+#define DEFAULT_LATENCY_MS 200
+
+enum
+{
+ PROP_0,
+ PROP_LATENCY
+};
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtp_sink_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtp_sink_%u",
+ GST_PAD_SINK,
+ GST_PAD_REQUEST,
+ GST_STATIC_CAPS ("application/x-rdt")
+ );
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtcp_sink_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtcp_sink_%u",
+ GST_PAD_SINK,
+ GST_PAD_REQUEST,
+ GST_STATIC_CAPS ("application/x-rtcp")
+ );
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtp_src_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtp_src_%u_%u_%u",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS ("application/x-rdt")
+ );
+
+static GstStaticPadTemplate gst_rdt_manager_rtcp_src_template =
+GST_STATIC_PAD_TEMPLATE ("rtcp_src_%u",
+ GST_PAD_SRC,
+ GST_PAD_REQUEST,
+ GST_STATIC_CAPS ("application/x-rtcp")
+ );
+
+static void gst_rdt_manager_finalize (GObject * object);
+static void gst_rdt_manager_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_rdt_manager_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+
+static gboolean gst_rdt_manager_query_src (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gboolean gst_rdt_manager_src_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+
+static GstClock *gst_rdt_manager_provide_clock (GstElement * element);
+static GstStateChangeReturn gst_rdt_manager_change_state (GstElement * element,
+ GstStateChange transition);
+static GstPad *gst_rdt_manager_request_new_pad (GstElement * element,
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_rdt_manager_release_pad (GstElement * element, GstPad * pad);
+
+static gboolean gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
+ GstRDTManagerSession * session, GstCaps * caps);
+static gboolean gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+
+static GstFlowReturn gst_rdt_manager_chain_rdt (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_rdt_manager_chain_rtcp (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
+static void gst_rdt_manager_loop (GstPad * pad);
+
+static guint gst_rdt_manager_signals[LAST_SIGNAL] = { 0 };
+
+#define JBUF_LOCK(sess) (g_mutex_lock (&(sess)->jbuf_lock))
+
+#define JBUF_LOCK_CHECK(sess,label) G_STMT_START { \
+ JBUF_LOCK (sess); \
+ if (sess->srcresult != GST_FLOW_OK) \
+ goto label; \
+} G_STMT_END
+
+#define JBUF_UNLOCK(sess) (g_mutex_unlock (&(sess)->jbuf_lock))
+#define JBUF_WAIT(sess) (g_cond_wait (&(sess)->jbuf_cond, &(sess)->jbuf_lock))
+
+#define JBUF_WAIT_CHECK(sess,label) G_STMT_START { \
+ JBUF_WAIT(sess); \
+ if (sess->srcresult != GST_FLOW_OK) \
+ goto label; \
+} G_STMT_END
+
+#define JBUF_SIGNAL(sess) (g_cond_signal (&(sess)->jbuf_cond))
+
+/* Manages the receiving end of the packets.
+ *
+ * There is one such structure for each RTP session (audio/video/...).
+ * We get the RTP/RTCP packets and stuff them into the session manager.
+ */
+struct _GstRDTManagerSession
+{
+ /* session id */
+ gint id;
+ /* the parent bin */
+ GstRDTManager *dec;
+
+ gboolean active;
+ /* we only support one ssrc and one pt */
+ guint32 ssrc;
+ guint8 pt;
+ gint clock_rate;
+ GstCaps *caps;
+ gint64 clock_base;
+
+ GstSegment segment;
+
+ /* the last seqnum we pushed out */
+ guint32 last_popped_seqnum;
+ /* the next expected seqnum */
+ guint32 next_seqnum;
+ /* last output time */
+ GstClockTime last_out_time;
+
+ /* the pads of the session */
+ GstPad *recv_rtp_sink;
+ GstPad *recv_rtp_src;
+ GstPad *recv_rtcp_sink;
+ GstPad *rtcp_src;
+
+ GstFlowReturn srcresult;
+ gboolean blocked;
+ gboolean eos;
+ gboolean waiting;
+ gboolean discont;
+ GstClockID clock_id;
+
+ /* jitterbuffer, lock and cond */
+ RDTJitterBuffer *jbuf;
+ GMutex jbuf_lock;
+ GCond jbuf_cond;
+
+ /* some accounting */
+ guint64 num_late;
+ guint64 num_duplicates;
+};
+
+/* find a session with the given id */
+static GstRDTManagerSession *
+find_session_by_id (GstRDTManager * rdtmanager, gint id)
+{
+ GSList *walk;
+
+ for (walk = rdtmanager->sessions; walk; walk = g_slist_next (walk)) {
+ GstRDTManagerSession *sess = (GstRDTManagerSession *) walk->data;
+
+ if (sess->id == id)
+ return sess;
+ }
+ return NULL;
+}
+
+/* create a session with the given id */
+static GstRDTManagerSession *
+create_session (GstRDTManager * rdtmanager, gint id)
+{
+ GstRDTManagerSession *sess;
+
+ sess = g_new0 (GstRDTManagerSession, 1);
+ sess->id = id;
+ sess->dec = rdtmanager;
+ sess->jbuf = rdt_jitter_buffer_new ();
+ g_mutex_init (&sess->jbuf_lock);
+ g_cond_init (&sess->jbuf_cond);
+ rdtmanager->sessions = g_slist_prepend (rdtmanager->sessions, sess);
+
+ return sess;
+}
+
+static gboolean
+forward_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
+{
+ GstPad *srcpad = GST_PAD_CAST (user_data);
+
+ gst_pad_push_event (srcpad, gst_event_ref (*event));
+
+ return TRUE;
+}
+
+static gboolean
+activate_session (GstRDTManager * rdtmanager, GstRDTManagerSession * session,
+ guint32 ssrc, guint8 pt)
+{
+ GstPadTemplate *templ;
+ GstElementClass *klass;
+ gchar *name;
+ GstCaps *caps;
+ GValue ret = { 0 };
+ GValue args[3] = { {0}
+ , {0}
+ , {0}
+ };
+
+ GST_DEBUG_OBJECT (rdtmanager, "creating stream");
+
+ session->ssrc = ssrc;
+ session->pt = pt;
+
+ /* get pt map */
+ g_value_init (&args[0], GST_TYPE_ELEMENT);
+ g_value_set_object (&args[0], rdtmanager);
+ g_value_init (&args[1], G_TYPE_UINT);
+ g_value_set_uint (&args[1], session->id);
+ g_value_init (&args[2], G_TYPE_UINT);
+ g_value_set_uint (&args[2], pt);
+
+ g_value_init (&ret, GST_TYPE_CAPS);
+ g_value_set_boxed (&ret, NULL);
+
+ g_signal_emitv (args, gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP], 0,
+ &ret);
+
+ g_value_unset (&args[0]);
+ g_value_unset (&args[1]);
+ g_value_unset (&args[2]);
+ caps = (GstCaps *) g_value_dup_boxed (&ret);
+ g_value_unset (&ret);
+
+ if (caps)
+ gst_rdt_manager_parse_caps (rdtmanager, session, caps);
+
+ name = g_strdup_printf ("recv_rtp_src_%u_%u_%u", session->id, ssrc, pt);
+ klass = GST_ELEMENT_GET_CLASS (rdtmanager);
+ templ = gst_element_class_get_pad_template (klass, "recv_rtp_src_%u_%u_%u");
+ session->recv_rtp_src = gst_pad_new_from_template (templ, name);
+ g_free (name);
+
+ gst_pad_set_element_private (session->recv_rtp_src, session);
+ gst_pad_set_query_function (session->recv_rtp_src, gst_rdt_manager_query_src);
+ gst_pad_set_activatemode_function (session->recv_rtp_src,
+ gst_rdt_manager_src_activate_mode);
+
+ gst_pad_set_active (session->recv_rtp_src, TRUE);
+
+ gst_pad_sticky_events_foreach (session->recv_rtp_sink, forward_sticky_events,
+ session->recv_rtp_src);
+ gst_pad_set_caps (session->recv_rtp_src, caps);
+ gst_caps_unref (caps);
+
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_src);
+
+ return TRUE;
+}
+
+static void
+free_session (GstRDTManagerSession * session)
+{
+ g_object_unref (session->jbuf);
+ g_cond_clear (&session->jbuf_cond);
+ g_mutex_clear (&session->jbuf_lock);
+ g_free (session);
+}
+
+#define gst_rdt_manager_parent_class parent_class
+G_DEFINE_TYPE (GstRDTManager, gst_rdt_manager, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rdtmanager, "rdtmanager",
+ GST_RANK_NONE, GST_TYPE_RDT_MANAGER);
+
+/* BOXED:UINT,UINT */
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+
+static void
+gst_rdt_manager_marshal_BOXED__UINT_UINT (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
+ guint arg_1, guint arg_2, gpointer data2);
+ register GMarshalFunc_BOXED__UINT_UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gpointer v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2), data2);
+
+ g_value_take_boxed (return_value, v_return);
+}
+
+static void
+gst_rdt_manager_marshal_VOID__UINT_UINT (GClosure * closure,
+ GValue * return_value,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
+ guint arg_1, guint arg_2, gpointer data2);
+ register GMarshalFunc_VOID__UINT_UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2), data2);
+}
+
+static void
+gst_rdt_manager_class_init (GstRDTManagerClass * g_class)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstRDTManagerClass *klass;
+
+ klass = (GstRDTManagerClass *) g_class;
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = gst_rdt_manager_finalize;
+ gobject_class->set_property = gst_rdt_manager_set_property;
+ gobject_class->get_property = gst_rdt_manager_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_LATENCY,
+ g_param_spec_uint ("latency", "Buffer latency in ms",
+ "Amount of ms to buffer", 0, G_MAXUINT, DEFAULT_LATENCY_MS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstRDTManager::request-pt-map:
+ * @rdtmanager: the object which received the signal
+ * @session: the session
+ * @pt: the pt
+ *
+ * Request the payload type as #GstCaps for @pt in @session.
+ */
+ gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP] =
+ g_signal_new ("request-pt-map", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, request_pt_map),
+ NULL, NULL, gst_rdt_manager_marshal_BOXED__UINT_UINT, GST_TYPE_CAPS, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * GstRDTManager::clear-pt-map:
+ * @rtpbin: the object which received the signal
+ *
+ * Clear all previously cached pt-mapping obtained with
+ * GstRDTManager::request-pt-map.
+ */
+ gst_rdt_manager_signals[SIGNAL_CLEAR_PT_MAP] =
+ g_signal_new ("clear-pt-map", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, clear_pt_map),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+ /**
+ * GstRDTManager::on-bye-ssrc:
+ * @rtpbin: the object which received the signal
+ * @session: the session
+ * @ssrc: the SSRC
+ *
+ * Notify of an SSRC that became inactive because of a BYE packet.
+ */
+ gst_rdt_manager_signals[SIGNAL_ON_BYE_SSRC] =
+ g_signal_new ("on-bye-ssrc", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_ssrc),
+ NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+ /**
+ * GstRDTManager::on-bye-timeout:
+ * @rtpbin: the object which received the signal
+ * @session: the session
+ * @ssrc: the SSRC
+ *
+ * Notify of an SSRC that has timed out because of BYE
+ */
+ gst_rdt_manager_signals[SIGNAL_ON_BYE_TIMEOUT] =
+ g_signal_new ("on-bye-timeout", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_timeout),
+ NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+ /**
+ * GstRDTManager::on-timeout:
+ * @rtpbin: the object which received the signal
+ * @session: the session
+ * @ssrc: the SSRC
+ *
+ * Notify of an SSRC that has timed out
+ */
+ gst_rdt_manager_signals[SIGNAL_ON_TIMEOUT] =
+ g_signal_new ("on-timeout", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_timeout),
+ NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * GstRDTManager::on-npt-stop:
+ * @rtpbin: the object which received the signal
+ * @session: the session
+ * @ssrc: the SSRC
+ *
+ * Notify that SSRC sender has sent data up to the configured NPT stop time.
+ */
+ gst_rdt_manager_signals[SIGNAL_ON_NPT_STOP] =
+ g_signal_new ("on-npt-stop", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_npt_stop),
+ NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+
+
+ gstelement_class->provide_clock =
+ GST_DEBUG_FUNCPTR (gst_rdt_manager_provide_clock);
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_rdt_manager_change_state);
+ gstelement_class->request_new_pad =
+ GST_DEBUG_FUNCPTR (gst_rdt_manager_request_new_pad);
+ gstelement_class->release_pad =
+ GST_DEBUG_FUNCPTR (gst_rdt_manager_release_pad);
+
+ /* sink pads */
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_manager_recv_rtp_sink_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_manager_recv_rtcp_sink_template);
+ /* src pads */
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_manager_recv_rtp_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rdt_manager_rtcp_src_template);
+
+ gst_element_class_set_static_metadata (gstelement_class, "RTP Decoder",
+ "Codec/Parser/Network",
+ "Accepts raw RTP and RTCP packets and sends them forward",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ GST_DEBUG_CATEGORY_INIT (rdtmanager_debug, "rdtmanager", 0, "RTP decoder");
+}
+
+static void
+gst_rdt_manager_init (GstRDTManager * rdtmanager)
+{
+ rdtmanager->provided_clock = gst_system_clock_obtain ();
+ rdtmanager->latency = DEFAULT_LATENCY_MS;
+ GST_OBJECT_FLAG_SET (rdtmanager, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
+}
+
+static void
+gst_rdt_manager_finalize (GObject * object)
+{
+ GstRDTManager *rdtmanager;
+
+ rdtmanager = GST_RDT_MANAGER (object);
+
+ g_slist_foreach (rdtmanager->sessions, (GFunc) free_session, NULL);
+ g_slist_free (rdtmanager->sessions);
+ g_clear_object (&rdtmanager->provided_clock);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_rdt_manager_query_src (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ GstRDTManager *rdtmanager;
+ gboolean res;
+
+ rdtmanager = GST_RDT_MANAGER (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_LATENCY:
+ {
+ GstClockTime latency;
+
+ latency = rdtmanager->latency * GST_MSECOND;
+
+ /* we pretend to be live with a 3 second latency */
+ gst_query_set_latency (query, TRUE, latency, -1);
+
+ GST_DEBUG_OBJECT (rdtmanager, "reporting %" GST_TIME_FORMAT " of latency",
+ GST_TIME_ARGS (latency));
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+ return res;
+}
+
+static gboolean
+gst_rdt_manager_src_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
+{
+ gboolean result;
+ GstRDTManager *rdtmanager;
+ GstRDTManagerSession *session;
+
+ session = gst_pad_get_element_private (pad);
+ rdtmanager = session->dec;
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ if (active) {
+ /* allow data processing */
+ JBUF_LOCK (session);
+ GST_DEBUG_OBJECT (rdtmanager, "Enabling pop on queue");
+ /* Mark as non flushing */
+ session->srcresult = GST_FLOW_OK;
+ gst_segment_init (&session->segment, GST_FORMAT_TIME);
+ session->last_popped_seqnum = -1;
+ session->last_out_time = -1;
+ session->next_seqnum = -1;
+ session->eos = FALSE;
+ JBUF_UNLOCK (session);
+
+ /* start pushing out buffers */
+ GST_DEBUG_OBJECT (rdtmanager, "Starting task on srcpad");
+ result =
+ gst_pad_start_task (pad, (GstTaskFunction) gst_rdt_manager_loop,
+ pad, NULL);
+ } else {
+ /* make sure all data processing stops ASAP */
+ JBUF_LOCK (session);
+ /* mark ourselves as flushing */
+ session->srcresult = GST_FLOW_FLUSHING;
+ GST_DEBUG_OBJECT (rdtmanager, "Disabling pop on queue");
+ /* this unblocks any waiting pops on the src pad task */
+ JBUF_SIGNAL (session);
+ /* unlock clock, we just unschedule, the entry will be released by
+ * the locking streaming thread. */
+ if (session->clock_id)
+ gst_clock_id_unschedule (session->clock_id);
+ JBUF_UNLOCK (session);
+
+ /* NOTE this will hardlock if the state change is called from the src pad
+ * task thread because we will _join() the thread. */
+ GST_DEBUG_OBJECT (rdtmanager, "Stopping task on srcpad");
+ result = gst_pad_stop_task (pad);
+ }
+ break;
+ default:
+ result = FALSE;
+ break;
+ }
+ return result;
+}
+
+static GstFlowReturn
+gst_rdt_manager_handle_data_packet (GstRDTManagerSession * session,
+ GstClockTime timestamp, GstRDTPacket * packet)
+{
+ GstRDTManager *rdtmanager;
+ guint16 seqnum;
+ gboolean tail;
+ GstFlowReturn res;
+ GstBuffer *buffer;
+
+ rdtmanager = session->dec;
+
+ res = GST_FLOW_OK;
+
+ seqnum = 0;
+ GST_DEBUG_OBJECT (rdtmanager,
+ "Received packet #%d at time %" GST_TIME_FORMAT, seqnum,
+ GST_TIME_ARGS (timestamp));
+
+ buffer = gst_rdt_packet_to_buffer (packet);
+
+ JBUF_LOCK_CHECK (session, out_flushing);
+
+ /* insert the packet into the queue now, FIXME, use seqnum */
+ if (!rdt_jitter_buffer_insert (session->jbuf, buffer, timestamp,
+ session->clock_rate, &tail))
+ goto duplicate;
+
+ /* signal addition of new buffer when the _loop is waiting. */
+ if (session->waiting)
+ JBUF_SIGNAL (session);
+
+finished:
+ JBUF_UNLOCK (session);
+
+ return res;
+
+ /* ERRORS */
+out_flushing:
+ {
+ res = session->srcresult;
+ GST_DEBUG_OBJECT (rdtmanager, "flushing %s", gst_flow_get_name (res));
+ gst_buffer_unref (buffer);
+ goto finished;
+ }
+duplicate:
+ {
+ GST_WARNING_OBJECT (rdtmanager, "Duplicate packet #%d detected, dropping",
+ seqnum);
+ session->num_duplicates++;
+ gst_buffer_unref (buffer);
+ goto finished;
+ }
+}
+
+static gboolean
+gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
+ GstRDTManagerSession * session, GstCaps * caps)
+{
+ GstStructure *caps_struct;
+ guint val;
+
+ /* first parse the caps */
+ caps_struct = gst_caps_get_structure (caps, 0);
+
+ GST_DEBUG_OBJECT (rdtmanager, "got caps");
+
+ /* we need a clock-rate to convert the rtp timestamps to GStreamer time and to
+ * measure the amount of data in the buffer */
+ if (!gst_structure_get_int (caps_struct, "clock-rate", &session->clock_rate))
+ session->clock_rate = 1000;
+
+ if (session->clock_rate <= 0)
+ goto wrong_rate;
+
+ GST_DEBUG_OBJECT (rdtmanager, "got clock-rate %d", session->clock_rate);
+
+ /* gah, clock-base is uint. If we don't have a base, we will use the first
+ * buffer timestamp as the base time. This will screw up sync but it's better
+ * than nothing. */
+ if (gst_structure_get_uint (caps_struct, "clock-base", &val))
+ session->clock_base = val;
+ else
+ session->clock_base = -1;
+
+ GST_DEBUG_OBJECT (rdtmanager, "got clock-base %" G_GINT64_FORMAT,
+ session->clock_base);
+
+ /* first expected seqnum */
+ if (gst_structure_get_uint (caps_struct, "seqnum-base", &val))
+ session->next_seqnum = val;
+ else
+ session->next_seqnum = -1;
+
+ GST_DEBUG_OBJECT (rdtmanager, "got seqnum-base %d", session->next_seqnum);
+
+ return TRUE;
+
+ /* ERRORS */
+wrong_rate:
+ {
+ GST_DEBUG_OBJECT (rdtmanager, "Invalid clock-rate %d", session->clock_rate);
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstRDTManager *rdtmanager;
+ GstRDTManagerSession *session;
+ gboolean res;
+
+ rdtmanager = GST_RDT_MANAGER (parent);
+ /* find session */
+ session = gst_pad_get_element_private (pad);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_rdt_manager_parse_caps (rdtmanager, session, caps);
+ gst_event_unref (event);
+ break;
+ }
+ default:
+ res = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ return res;
+}
+
+static GstFlowReturn
+gst_rdt_manager_chain_rdt (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstFlowReturn res;
+ GstRDTManager *rdtmanager;
+ GstRDTManagerSession *session;
+ GstClockTime timestamp;
+ GstRDTPacket packet;
+ guint32 ssrc;
+ guint8 pt;
+ gboolean more;
+
+ rdtmanager = GST_RDT_MANAGER (parent);
+
+ GST_DEBUG_OBJECT (rdtmanager, "got RDT packet");
+
+ ssrc = 0;
+ pt = 0;
+
+ GST_DEBUG_OBJECT (rdtmanager, "SSRC %08x, PT %d", ssrc, pt);
+
+ /* find session */
+ session = gst_pad_get_element_private (pad);
+
+ /* see if we have the pad */
+ if (!session->active) {
+ activate_session (rdtmanager, session, ssrc, pt);
+ session->active = TRUE;
+ }
+
+ if (GST_BUFFER_IS_DISCONT (buffer)) {
+ GST_DEBUG_OBJECT (rdtmanager, "received discont");
+ session->discont = TRUE;
+ }
+
+ res = GST_FLOW_OK;
+
+ /* take the timestamp of the buffer. This is the time when the packet was
+ * received and is used to calculate jitter and clock skew. We will adjust
+ * this timestamp with the smoothed value after processing it in the
+ * jitterbuffer. */
+ timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ /* bring to running time */
+ timestamp = gst_segment_to_running_time (&session->segment, GST_FORMAT_TIME,
+ timestamp);
+
+ more = gst_rdt_buffer_get_first_packet (buffer, &packet);
+ while (more) {
+ GstRDTType type;
+
+ type = gst_rdt_packet_get_type (&packet);
+ GST_DEBUG_OBJECT (rdtmanager, "Have packet of type %04x", type);
+
+ if (GST_RDT_IS_DATA_TYPE (type)) {
+ GST_DEBUG_OBJECT (rdtmanager, "We have a data packet");
+ res = gst_rdt_manager_handle_data_packet (session, timestamp, &packet);
+ } else {
+ switch (type) {
+ default:
+ GST_DEBUG_OBJECT (rdtmanager, "Ignoring packet");
+ break;
+ }
+ }
+ if (res != GST_FLOW_OK)
+ break;
+
+ more = gst_rdt_packet_move_to_next (&packet);
+ }
+
+ gst_buffer_unref (buffer);
+
+ return res;
+}
+
+/* push packets from the queue to the downstream demuxer */
+static void
+gst_rdt_manager_loop (GstPad * pad)
+{
+ GstRDTManager *rdtmanager;
+ GstRDTManagerSession *session;
+ GstBuffer *buffer;
+ GstFlowReturn result;
+
+ rdtmanager = GST_RDT_MANAGER (GST_PAD_PARENT (pad));
+
+ session = gst_pad_get_element_private (pad);
+
+ JBUF_LOCK_CHECK (session, flushing);
+ GST_DEBUG_OBJECT (rdtmanager, "Peeking item");
+ while (TRUE) {
+ /* always wait if we are blocked */
+ if (!session->blocked) {
+ /* if we have a packet, we can exit the loop and grab it */
+ if (rdt_jitter_buffer_num_packets (session->jbuf) > 0)
+ break;
+ /* no packets but we are EOS, do eos logic */
+ if (session->eos)
+ goto do_eos;
+ }
+ /* underrun, wait for packets or flushing now */
+ session->waiting = TRUE;
+ JBUF_WAIT_CHECK (session, flushing);
+ session->waiting = FALSE;
+ }
+
+ buffer = rdt_jitter_buffer_pop (session->jbuf);
+
+ GST_DEBUG_OBJECT (rdtmanager, "Got item %p", buffer);
+
+ if (session->discont) {
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ session->discont = FALSE;
+ }
+
+ JBUF_UNLOCK (session);
+
+ result = gst_pad_push (session->recv_rtp_src, buffer);
+ if (result != GST_FLOW_OK)
+ goto pause;
+
+ return;
+
+ /* ERRORS */
+flushing:
+ {
+ GST_DEBUG_OBJECT (rdtmanager, "we are flushing");
+ gst_pad_pause_task (session->recv_rtp_src);
+ JBUF_UNLOCK (session);
+ return;
+ }
+do_eos:
+ {
+ /* store result, we are flushing now */
+ GST_DEBUG_OBJECT (rdtmanager, "We are EOS, pushing EOS downstream");
+ session->srcresult = GST_FLOW_EOS;
+ gst_pad_pause_task (session->recv_rtp_src);
+ gst_pad_push_event (session->recv_rtp_src, gst_event_new_eos ());
+ JBUF_UNLOCK (session);
+ return;
+ }
+pause:
+ {
+ GST_DEBUG_OBJECT (rdtmanager, "pausing task, reason %s",
+ gst_flow_get_name (result));
+
+ JBUF_LOCK (session);
+ /* store result */
+ session->srcresult = result;
+ /* we don't post errors or anything because upstream will do that for us
+ * when we pass the return value upstream. */
+ gst_pad_pause_task (session->recv_rtp_src);
+ JBUF_UNLOCK (session);
+ return;
+ }
+}
+
+static GstFlowReturn
+gst_rdt_manager_chain_rtcp (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
+{
+ GstRDTManager *src;
+
+#ifdef HAVE_RTCP
+ gboolean valid;
+ GstRTCPPacket packet;
+ gboolean more;
+#endif
+
+ src = GST_RDT_MANAGER (parent);
+
+ GST_DEBUG_OBJECT (src, "got rtcp packet");
+
+#ifdef HAVE_RTCP
+ valid = gst_rtcp_buffer_validate (buffer);
+ if (!valid)
+ goto bad_packet;
+
+ /* position on first packet */
+ more = gst_rtcp_buffer_get_first_packet (buffer, &packet);
+ while (more) {
+ switch (gst_rtcp_packet_get_type (&packet)) {
+ case GST_RTCP_TYPE_SR:
+ {
+ guint32 ssrc, rtptime, packet_count, octet_count;
+ guint64 ntptime;
+ guint count, i;
+
+ gst_rtcp_packet_sr_get_sender_info (&packet, &ssrc, &ntptime, &rtptime,
+ &packet_count, &octet_count);
+
+ GST_DEBUG_OBJECT (src,
+ "got SR packet: SSRC %08x, NTP %" G_GUINT64_FORMAT
+ ", RTP %u, PC %u, OC %u", ssrc, ntptime, rtptime, packet_count,
+ octet_count);
+
+ count = gst_rtcp_packet_get_rb_count (&packet);
+ for (i = 0; i < count; i++) {
+ guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
+ guint8 fractionlost;
+ gint32 packetslost;
+
+ gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
+ &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
+
+ GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
+ ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
+ packetslost, exthighestseq, jitter, lsr, dlsr);
+ }
+ break;
+ }
+ case GST_RTCP_TYPE_RR:
+ {
+ guint32 ssrc;
+ guint count, i;
+
+ ssrc = gst_rtcp_packet_rr_get_ssrc (&packet);
+
+ GST_DEBUG_OBJECT (src, "got RR packet: SSRC %08x", ssrc);
+
+ count = gst_rtcp_packet_get_rb_count (&packet);
+ for (i = 0; i < count; i++) {
+ guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
+ guint8 fractionlost;
+ gint32 packetslost;
+
+ gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
+ &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
+
+ GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
+ ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
+ packetslost, exthighestseq, jitter, lsr, dlsr);
+ }
+ break;
+ }
+ case GST_RTCP_TYPE_SDES:
+ {
+ guint chunks, i, j;
+ gboolean more_chunks, more_items;
+
+ chunks = gst_rtcp_packet_sdes_get_chunk_count (&packet);
+ GST_DEBUG_OBJECT (src, "got SDES packet with %d chunks", chunks);
+
+ more_chunks = gst_rtcp_packet_sdes_first_chunk (&packet);
+ i = 0;
+ while (more_chunks) {
+ guint32 ssrc;
+
+ ssrc = gst_rtcp_packet_sdes_get_ssrc (&packet);
+
+ GST_DEBUG_OBJECT (src, "chunk %d, SSRC %08x", i, ssrc);
+
+ more_items = gst_rtcp_packet_sdes_first_item (&packet);
+ j = 0;
+ while (more_items) {
+ GstRTCPSDESType type;
+ guint8 len;
+ gchar *data;
+
+ gst_rtcp_packet_sdes_get_item (&packet, &type, &len, &data);
+
+ GST_DEBUG_OBJECT (src, "item %d, type %d, len %d, data %s", j,
+ type, len, data);
+
+ more_items = gst_rtcp_packet_sdes_next_item (&packet);
+ j++;
+ }
+ more_chunks = gst_rtcp_packet_sdes_next_chunk (&packet);
+ i++;
+ }
+ break;
+ }
+ case GST_RTCP_TYPE_BYE:
+ {
+ guint count, i;
+ gchar *reason;
+
+ reason = gst_rtcp_packet_bye_get_reason (&packet);
+ GST_DEBUG_OBJECT (src, "got BYE packet (reason: %s)",
+ GST_STR_NULL (reason));
+ g_free (reason);
+
+ count = gst_rtcp_packet_bye_get_ssrc_count (&packet);
+ for (i = 0; i < count; i++) {
+ guint32 ssrc;
+
+
+ ssrc = gst_rtcp_packet_bye_get_nth_ssrc (&packet, i);
+
+ GST_DEBUG_OBJECT (src, "SSRC: %08x", ssrc);
+ }
+ break;
+ }
+ case GST_RTCP_TYPE_APP:
+ GST_DEBUG_OBJECT (src, "got APP packet");
+ break;
+ default:
+ GST_WARNING_OBJECT (src, "got unknown RTCP packet");
+ break;
+ }
+ more = gst_rtcp_packet_move_to_next (&packet);
+ }
+ gst_buffer_unref (buffer);
+ return GST_FLOW_OK;
+
+bad_packet:
+ {
+ GST_WARNING_OBJECT (src, "got invalid RTCP packet");
+ return GST_FLOW_OK;
+ }
+#else
+ return GST_FLOW_OK;
+#endif
+}
+
+static void
+gst_rdt_manager_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstRDTManager *src;
+
+ src = GST_RDT_MANAGER (object);
+
+ switch (prop_id) {
+ case PROP_LATENCY:
+ src->latency = g_value_get_uint (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_rdt_manager_get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
+{
+ GstRDTManager *src;
+
+ src = GST_RDT_MANAGER (object);
+
+ switch (prop_id) {
+ case PROP_LATENCY:
+ g_value_set_uint (value, src->latency);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GstClock *
+gst_rdt_manager_provide_clock (GstElement * element)
+{
+ GstRDTManager *rdtmanager;
+
+ rdtmanager = GST_RDT_MANAGER (element);
+
+ return GST_CLOCK_CAST (gst_object_ref (rdtmanager->provided_clock));
+}
+
+static GstStateChangeReturn
+gst_rdt_manager_change_state (GstElement * element, GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+
+ switch (transition) {
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ /* we're NO_PREROLL when going to PAUSED */
+ ret = GST_STATE_CHANGE_NO_PREROLL;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+/* Create a pad for receiving RTP for the session in @name
+ */
+static GstPad *
+create_recv_rtp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+ const gchar * name)
+{
+ guint sessid;
+ GstRDTManagerSession *session;
+
+ /* first get the session number */
+ if (name == NULL || sscanf (name, "recv_rtp_sink_%u", &sessid) != 1)
+ goto no_name;
+
+ GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
+
+ /* get or create session */
+ session = find_session_by_id (rdtmanager, sessid);
+ if (!session) {
+ GST_DEBUG_OBJECT (rdtmanager, "creating session %d", sessid);
+ /* create session now */
+ session = create_session (rdtmanager, sessid);
+ if (session == NULL)
+ goto create_error;
+ }
+ /* check if pad was requested */
+ if (session->recv_rtp_sink != NULL)
+ goto existed;
+
+ GST_DEBUG_OBJECT (rdtmanager, "getting RTP sink pad");
+
+ session->recv_rtp_sink = gst_pad_new_from_template (templ, name);
+ gst_pad_set_element_private (session->recv_rtp_sink, session);
+ gst_pad_set_event_function (session->recv_rtp_sink,
+ gst_rdt_manager_event_rdt);
+ gst_pad_set_chain_function (session->recv_rtp_sink,
+ gst_rdt_manager_chain_rdt);
+ gst_pad_set_active (session->recv_rtp_sink, TRUE);
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_sink);
+
+ return session->recv_rtp_sink;
+
+ /* ERRORS */
+no_name:
+ {
+ g_warning ("rdtmanager: invalid name given");
+ return NULL;
+ }
+create_error:
+ {
+ /* create_session already warned */
+ return NULL;
+ }
+existed:
+ {
+ g_warning ("rdtmanager: recv_rtp pad already requested for session %d",
+ sessid);
+ return NULL;
+ }
+}
+
+/* Create a pad for receiving RTCP for the session in @name
+ */
+static GstPad *
+create_recv_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+ const gchar * name)
+{
+ guint sessid;
+ GstRDTManagerSession *session;
+
+ /* first get the session number */
+ if (name == NULL || sscanf (name, "recv_rtcp_sink_%u", &sessid) != 1)
+ goto no_name;
+
+ GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
+
+ /* get the session, it must exist or we error */
+ session = find_session_by_id (rdtmanager, sessid);
+ if (!session)
+ goto no_session;
+
+ /* check if pad was requested */
+ if (session->recv_rtcp_sink != NULL)
+ goto existed;
+
+ GST_DEBUG_OBJECT (rdtmanager, "getting RTCP sink pad");
+
+ session->recv_rtcp_sink = gst_pad_new_from_template (templ, name);
+ gst_pad_set_element_private (session->recv_rtp_sink, session);
+ gst_pad_set_chain_function (session->recv_rtcp_sink,
+ gst_rdt_manager_chain_rtcp);
+ gst_pad_set_active (session->recv_rtcp_sink, TRUE);
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtcp_sink);
+
+ return session->recv_rtcp_sink;
+
+ /* ERRORS */
+no_name:
+ {
+ g_warning ("rdtmanager: invalid name given");
+ return NULL;
+ }
+no_session:
+ {
+ g_warning ("rdtmanager: no session with id %d", sessid);
+ return NULL;
+ }
+existed:
+ {
+ g_warning ("rdtmanager: recv_rtcp pad already requested for session %d",
+ sessid);
+ return NULL;
+ }
+}
+
+/* Create a pad for sending RTCP for the session in @name
+ */
+static GstPad *
+create_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+ const gchar * name)
+{
+ guint sessid;
+ GstRDTManagerSession *session;
+
+ /* first get the session number */
+ if (name == NULL || sscanf (name, "rtcp_src_%u", &sessid) != 1)
+ goto no_name;
+
+ /* get or create session */
+ session = find_session_by_id (rdtmanager, sessid);
+ if (!session)
+ goto no_session;
+
+ /* check if pad was requested */
+ if (session->rtcp_src != NULL)
+ goto existed;
+
+ session->rtcp_src = gst_pad_new_from_template (templ, name);
+ gst_pad_set_active (session->rtcp_src, TRUE);
+ gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->rtcp_src);
+
+ return session->rtcp_src;
+
+ /* ERRORS */
+no_name:
+ {
+ g_warning ("rdtmanager: invalid name given");
+ return NULL;
+ }
+no_session:
+ {
+ g_warning ("rdtmanager: session with id %d does not exist", sessid);
+ return NULL;
+ }
+existed:
+ {
+ g_warning ("rdtmanager: rtcp_src pad already requested for session %d",
+ sessid);
+ return NULL;
+ }
+}
+
+/*
+ */
+static GstPad *
+gst_rdt_manager_request_new_pad (GstElement * element,
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
+{
+ GstRDTManager *rdtmanager;
+ GstElementClass *klass;
+ GstPad *result;
+
+ g_return_val_if_fail (templ != NULL, NULL);
+ g_return_val_if_fail (GST_IS_RDT_MANAGER (element), NULL);
+
+ rdtmanager = GST_RDT_MANAGER (element);
+ klass = GST_ELEMENT_GET_CLASS (element);
+
+ /* figure out the template */
+ if (templ == gst_element_class_get_pad_template (klass, "recv_rtp_sink_%u")) {
+ result = create_recv_rtp (rdtmanager, templ, name);
+ } else if (templ == gst_element_class_get_pad_template (klass,
+ "recv_rtcp_sink_%u")) {
+ result = create_recv_rtcp (rdtmanager, templ, name);
+ } else if (templ == gst_element_class_get_pad_template (klass, "rtcp_src_%u")) {
+ result = create_rtcp (rdtmanager, templ, name);
+ } else
+ goto wrong_template;
+
+ return result;
+
+ /* ERRORS */
+wrong_template:
+ {
+ g_warning ("rdtmanager: this is not our template");
+ return NULL;
+ }
+}
+
+static void
+gst_rdt_manager_release_pad (GstElement * element, GstPad * pad)
+{
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RDT_MANAGER_H__
+#define __GST_RDT_MANAGER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RDT_MANAGER (gst_rdt_manager_get_type())
+#define GST_IS_RDT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_MANAGER))
+#define GST_IS_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_MANAGER))
+#define GST_RDT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_MANAGER, GstRDTManager))
+#define GST_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_MANAGER, GstRDTManagerClass))
+
+typedef struct _GstRDTManager GstRDTManager;
+typedef struct _GstRDTManagerClass GstRDTManagerClass;
+typedef struct _GstRDTManagerSession GstRDTManagerSession;
+
+struct _GstRDTManager {
+ GstElement element;
+
+ guint latency;
+ GSList *sessions;
+ GstClock *provided_clock;
+};
+
+struct _GstRDTManagerClass {
+ GstElementClass parent_class;
+
+ /* get the caps for pt */
+ GstCaps* (*request_pt_map) (GstRDTManager *rtpdec, guint session, guint pt);
+
+ void (*clear_pt_map) (GstRDTManager *rtpdec);
+
+ void (*on_new_ssrc) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_ssrc_collision) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_ssrc_validated) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_ssrc_active) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_ssrc_sdes) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_bye_ssrc) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_bye_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+ void (*on_npt_stop) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+};
+
+GType gst_rdt_manager_get_type(void);
+
+GST_ELEMENT_REGISTER_DECLARE (rdtmanager);
+
+G_END_DECLS
+
+#endif /* __GST_RDT_MANAGER_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/* Element-Checklist-Version: 5 */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <string.h>
+
+#include <gst/gst.h>
+
+#include "realhash.h"
+
+void rtsp_ext_real_calc_response_and_checksum (char *response,
+ char *chksum, char *challenge);
+
+/*
+ * The following code has been copied from
+ * xine-lib-1.1.1/src/input/libreal/real.c.
+ */
+
+static const unsigned char xor_table[] = {
+ 0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
+ 0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
+ 0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
+ 0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
+ 0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00
+};
+
+#define LE_32(x) GST_READ_UINT32_LE(x)
+#define BE_32C(x,y) GST_WRITE_UINT32_BE(x,y)
+#define LE_32C(x,y) GST_WRITE_UINT32_LE(x,y)
+
+static void
+hash (char *field, char *param)
+{
+ uint32_t a, b, c, d;
+
+ /* fill variables */
+ a = LE_32 (field);
+ b = LE_32 (field + 4);
+ c = LE_32 (field + 8);
+ d = LE_32 (field + 12);
+
+ a = ((b & c) | (~b & d)) + LE_32 ((param + 0x00)) + a - 0x28955B88;
+ a = ((a << 0x07) | (a >> 0x19)) + b;
+ d = ((a & b) | (~a & c)) + LE_32 ((param + 0x04)) + d - 0x173848AA;
+ d = ((d << 0x0c) | (d >> 0x14)) + a;
+ c = ((d & a) | (~d & b)) + LE_32 ((param + 0x08)) + c + 0x242070DB;
+ c = ((c << 0x11) | (c >> 0x0f)) + d;
+ b = ((c & d) | (~c & a)) + LE_32 ((param + 0x0c)) + b - 0x3E423112;
+ b = ((b << 0x16) | (b >> 0x0a)) + c;
+ a = ((b & c) | (~b & d)) + LE_32 ((param + 0x10)) + a - 0x0A83F051;
+ a = ((a << 0x07) | (a >> 0x19)) + b;
+ d = ((a & b) | (~a & c)) + LE_32 ((param + 0x14)) + d + 0x4787C62A;
+ d = ((d << 0x0c) | (d >> 0x14)) + a;
+ c = ((d & a) | (~d & b)) + LE_32 ((param + 0x18)) + c - 0x57CFB9ED;
+ c = ((c << 0x11) | (c >> 0x0f)) + d;
+ b = ((c & d) | (~c & a)) + LE_32 ((param + 0x1c)) + b - 0x02B96AFF;
+ b = ((b << 0x16) | (b >> 0x0a)) + c;
+ a = ((b & c) | (~b & d)) + LE_32 ((param + 0x20)) + a + 0x698098D8;
+ a = ((a << 0x07) | (a >> 0x19)) + b;
+ d = ((a & b) | (~a & c)) + LE_32 ((param + 0x24)) + d - 0x74BB0851;
+ d = ((d << 0x0c) | (d >> 0x14)) + a;
+ c = ((d & a) | (~d & b)) + LE_32 ((param + 0x28)) + c - 0x0000A44F;
+ c = ((c << 0x11) | (c >> 0x0f)) + d;
+ b = ((c & d) | (~c & a)) + LE_32 ((param + 0x2C)) + b - 0x76A32842;
+ b = ((b << 0x16) | (b >> 0x0a)) + c;
+ a = ((b & c) | (~b & d)) + LE_32 ((param + 0x30)) + a + 0x6B901122;
+ a = ((a << 0x07) | (a >> 0x19)) + b;
+ d = ((a & b) | (~a & c)) + LE_32 ((param + 0x34)) + d - 0x02678E6D;
+ d = ((d << 0x0c) | (d >> 0x14)) + a;
+ c = ((d & a) | (~d & b)) + LE_32 ((param + 0x38)) + c - 0x5986BC72;
+ c = ((c << 0x11) | (c >> 0x0f)) + d;
+ b = ((c & d) | (~c & a)) + LE_32 ((param + 0x3c)) + b + 0x49B40821;
+ b = ((b << 0x16) | (b >> 0x0a)) + c;
+
+ a = ((b & d) | (~d & c)) + LE_32 ((param + 0x04)) + a - 0x09E1DA9E;
+ a = ((a << 0x05) | (a >> 0x1b)) + b;
+ d = ((a & c) | (~c & b)) + LE_32 ((param + 0x18)) + d - 0x3FBF4CC0;
+ d = ((d << 0x09) | (d >> 0x17)) + a;
+ c = ((d & b) | (~b & a)) + LE_32 ((param + 0x2c)) + c + 0x265E5A51;
+ c = ((c << 0x0e) | (c >> 0x12)) + d;
+ b = ((c & a) | (~a & d)) + LE_32 ((param + 0x00)) + b - 0x16493856;
+ b = ((b << 0x14) | (b >> 0x0c)) + c;
+ a = ((b & d) | (~d & c)) + LE_32 ((param + 0x14)) + a - 0x29D0EFA3;
+ a = ((a << 0x05) | (a >> 0x1b)) + b;
+ d = ((a & c) | (~c & b)) + LE_32 ((param + 0x28)) + d + 0x02441453;
+ d = ((d << 0x09) | (d >> 0x17)) + a;
+ c = ((d & b) | (~b & a)) + LE_32 ((param + 0x3c)) + c - 0x275E197F;
+ c = ((c << 0x0e) | (c >> 0x12)) + d;
+ b = ((c & a) | (~a & d)) + LE_32 ((param + 0x10)) + b - 0x182C0438;
+ b = ((b << 0x14) | (b >> 0x0c)) + c;
+ a = ((b & d) | (~d & c)) + LE_32 ((param + 0x24)) + a + 0x21E1CDE6;
+ a = ((a << 0x05) | (a >> 0x1b)) + b;
+ d = ((a & c) | (~c & b)) + LE_32 ((param + 0x38)) + d - 0x3CC8F82A;
+ d = ((d << 0x09) | (d >> 0x17)) + a;
+ c = ((d & b) | (~b & a)) + LE_32 ((param + 0x0c)) + c - 0x0B2AF279;
+ c = ((c << 0x0e) | (c >> 0x12)) + d;
+ b = ((c & a) | (~a & d)) + LE_32 ((param + 0x20)) + b + 0x455A14ED;
+ b = ((b << 0x14) | (b >> 0x0c)) + c;
+ a = ((b & d) | (~d & c)) + LE_32 ((param + 0x34)) + a - 0x561C16FB;
+ a = ((a << 0x05) | (a >> 0x1b)) + b;
+ d = ((a & c) | (~c & b)) + LE_32 ((param + 0x08)) + d - 0x03105C08;
+ d = ((d << 0x09) | (d >> 0x17)) + a;
+ c = ((d & b) | (~b & a)) + LE_32 ((param + 0x1c)) + c + 0x676F02D9;
+ c = ((c << 0x0e) | (c >> 0x12)) + d;
+ b = ((c & a) | (~a & d)) + LE_32 ((param + 0x30)) + b - 0x72D5B376;
+ b = ((b << 0x14) | (b >> 0x0c)) + c;
+
+ a = (b ^ c ^ d) + LE_32 ((param + 0x14)) + a - 0x0005C6BE;
+ a = ((a << 0x04) | (a >> 0x1c)) + b;
+ d = (a ^ b ^ c) + LE_32 ((param + 0x20)) + d - 0x788E097F;
+ d = ((d << 0x0b) | (d >> 0x15)) + a;
+ c = (d ^ a ^ b) + LE_32 ((param + 0x2c)) + c + 0x6D9D6122;
+ c = ((c << 0x10) | (c >> 0x10)) + d;
+ b = (c ^ d ^ a) + LE_32 ((param + 0x38)) + b - 0x021AC7F4;
+ b = ((b << 0x17) | (b >> 0x09)) + c;
+ a = (b ^ c ^ d) + LE_32 ((param + 0x04)) + a - 0x5B4115BC;
+ a = ((a << 0x04) | (a >> 0x1c)) + b;
+ d = (a ^ b ^ c) + LE_32 ((param + 0x10)) + d + 0x4BDECFA9;
+ d = ((d << 0x0b) | (d >> 0x15)) + a;
+ c = (d ^ a ^ b) + LE_32 ((param + 0x1c)) + c - 0x0944B4A0;
+ c = ((c << 0x10) | (c >> 0x10)) + d;
+ b = (c ^ d ^ a) + LE_32 ((param + 0x28)) + b - 0x41404390;
+ b = ((b << 0x17) | (b >> 0x09)) + c;
+ a = (b ^ c ^ d) + LE_32 ((param + 0x34)) + a + 0x289B7EC6;
+ a = ((a << 0x04) | (a >> 0x1c)) + b;
+ d = (a ^ b ^ c) + LE_32 ((param + 0x00)) + d - 0x155ED806;
+ d = ((d << 0x0b) | (d >> 0x15)) + a;
+ c = (d ^ a ^ b) + LE_32 ((param + 0x0c)) + c - 0x2B10CF7B;
+ c = ((c << 0x10) | (c >> 0x10)) + d;
+ b = (c ^ d ^ a) + LE_32 ((param + 0x18)) + b + 0x04881D05;
+ b = ((b << 0x17) | (b >> 0x09)) + c;
+ a = (b ^ c ^ d) + LE_32 ((param + 0x24)) + a - 0x262B2FC7;
+ a = ((a << 0x04) | (a >> 0x1c)) + b;
+ d = (a ^ b ^ c) + LE_32 ((param + 0x30)) + d - 0x1924661B;
+ d = ((d << 0x0b) | (d >> 0x15)) + a;
+ c = (d ^ a ^ b) + LE_32 ((param + 0x3c)) + c + 0x1fa27cf8;
+ c = ((c << 0x10) | (c >> 0x10)) + d;
+ b = (c ^ d ^ a) + LE_32 ((param + 0x08)) + b - 0x3B53A99B;
+ b = ((b << 0x17) | (b >> 0x09)) + c;
+
+ a = ((~d | b) ^ c) + LE_32 ((param + 0x00)) + a - 0x0BD6DDBC;
+ a = ((a << 0x06) | (a >> 0x1a)) + b;
+ d = ((~c | a) ^ b) + LE_32 ((param + 0x1c)) + d + 0x432AFF97;
+ d = ((d << 0x0a) | (d >> 0x16)) + a;
+ c = ((~b | d) ^ a) + LE_32 ((param + 0x38)) + c - 0x546BDC59;
+ c = ((c << 0x0f) | (c >> 0x11)) + d;
+ b = ((~a | c) ^ d) + LE_32 ((param + 0x14)) + b - 0x036C5FC7;
+ b = ((b << 0x15) | (b >> 0x0b)) + c;
+ a = ((~d | b) ^ c) + LE_32 ((param + 0x30)) + a + 0x655B59C3;
+ a = ((a << 0x06) | (a >> 0x1a)) + b;
+ d = ((~c | a) ^ b) + LE_32 ((param + 0x0C)) + d - 0x70F3336E;
+ d = ((d << 0x0a) | (d >> 0x16)) + a;
+ c = ((~b | d) ^ a) + LE_32 ((param + 0x28)) + c - 0x00100B83;
+ c = ((c << 0x0f) | (c >> 0x11)) + d;
+ b = ((~a | c) ^ d) + LE_32 ((param + 0x04)) + b - 0x7A7BA22F;
+ b = ((b << 0x15) | (b >> 0x0b)) + c;
+ a = ((~d | b) ^ c) + LE_32 ((param + 0x20)) + a + 0x6FA87E4F;
+ a = ((a << 0x06) | (a >> 0x1a)) + b;
+ d = ((~c | a) ^ b) + LE_32 ((param + 0x3c)) + d - 0x01D31920;
+ d = ((d << 0x0a) | (d >> 0x16)) + a;
+ c = ((~b | d) ^ a) + LE_32 ((param + 0x18)) + c - 0x5CFEBCEC;
+ c = ((c << 0x0f) | (c >> 0x11)) + d;
+ b = ((~a | c) ^ d) + LE_32 ((param + 0x34)) + b + 0x4E0811A1;
+ b = ((b << 0x15) | (b >> 0x0b)) + c;
+ a = ((~d | b) ^ c) + LE_32 ((param + 0x10)) + a - 0x08AC817E;
+ a = ((a << 0x06) | (a >> 0x1a)) + b;
+ d = ((~c | a) ^ b) + LE_32 ((param + 0x2c)) + d - 0x42C50DCB;
+ d = ((d << 0x0a) | (d >> 0x16)) + a;
+ c = ((~b | d) ^ a) + LE_32 ((param + 0x08)) + c + 0x2AD7D2BB;
+ c = ((c << 0x0f) | (c >> 0x11)) + d;
+ b = ((~a | c) ^ d) + LE_32 ((param + 0x24)) + b - 0x14792C6F;
+ b = ((b << 0x15) | (b >> 0x0b)) + c;
+
+ a += LE_32 (field);
+ b += LE_32 (field + 4);
+ c += LE_32 (field + 8);
+ d += LE_32 (field + 12);
+
+ LE_32C (field, a);
+ LE_32C (field + 4, b);
+ LE_32C (field + 8, c);
+ LE_32C (field + 12, d);
+}
+
+static void
+call_hash (char *key, char *challenge, int len)
+{
+ uint8_t *ptr1, *ptr2;
+ uint32_t a, b, c, d, tmp;
+
+ ptr1 = (uint8_t *) (key + 16);
+ ptr2 = (uint8_t *) (key + 20);
+
+ a = LE_32 (ptr1);
+ b = (a >> 3) & 0x3f;
+ a += len * 8;
+ LE_32C (ptr1, a);
+
+ if (a < (len << 3))
+ ptr2 += 4;
+
+ tmp = LE_32 (ptr2) + (len >> 0x1d);
+ LE_32C (ptr2, tmp);
+ a = 64 - b;
+ c = 0;
+ if (a <= len) {
+
+ memcpy (key + b + 24, challenge, a);
+ hash (key, key + 24);
+ c = a;
+ d = c + 0x3f;
+
+ while (d < len) {
+ hash (key, challenge + d - 0x3f);
+ d += 64;
+ c += 64;
+ }
+ b = 0;
+ }
+
+ memcpy (key + b + 24, challenge + c, len - c);
+}
+
+void
+gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
+ char *challenge)
+{
+ int ch_len, table_len, resp_len;
+ int i;
+ char *ptr;
+ char buf[128];
+ char field[128];
+ char zres[20];
+ char buf1[128];
+ char buf2[128];
+
+ /* initialize return values */
+ memset (response, 0, 64);
+ memset (chksum, 0, 34);
+
+ /* initialize buffer */
+ memset (buf, 0, 128);
+ ptr = buf;
+ BE_32C (ptr, 0xa1e9149d);
+ ptr += 4;
+ BE_32C (ptr, 0x0e6b3b59);
+ ptr += 4;
+
+ if ((ch_len = MIN (strlen (challenge), 56)) == 40) {
+ challenge[32] = 0;
+ ch_len = 32;
+ }
+ memcpy (ptr, challenge, ch_len);
+
+ /* xor challenge bytewise with xor_table */
+ table_len = MIN (strlen ((char *) xor_table), 56);
+ for (i = 0; i < table_len; i++)
+ ptr[i] = ptr[i] ^ xor_table[i];
+
+ /* initialize our field */
+ BE_32C (field, 0x01234567);
+ BE_32C (field + 4, 0x89ABCDEF);
+ BE_32C (field + 8, 0xFEDCBA98);
+ BE_32C (field + 12, 0x76543210);
+ BE_32C (field + 16, 0x00000000);
+ BE_32C (field + 20, 0x00000000);
+
+ /* calculate response */
+ call_hash (field, buf, 64);
+ memset (buf1, 0, 64);
+ *buf1 = (char) 128;
+ memcpy (buf2, field + 16, 8);
+ i = (LE_32 ((buf2)) >> 3) & 0x3f;
+ if (i < 56)
+ i = 56 - i;
+ else
+ i = 120 - i;
+ call_hash (field, buf1, i);
+ call_hash (field, buf2, 8);
+ memcpy (zres, field, 16);
+
+ /* convert zres to ascii string */
+ for (i = 0; i < 16; i++) {
+ char a, b;
+
+ a = (zres[i] >> 4) & 15;
+ b = zres[i] & 15;
+
+ response[i * 2] = ((a < 10) ? (a + 48) : (a + 87)) & 255;
+ response[i * 2 + 1] = ((b < 10) ? (b + 48) : (b + 87)) & 255;
+ }
+
+ /* add tail */
+ resp_len = strlen (response);
+ strcpy (&response[resp_len], "01d0a8e3");
+
+ /* calculate checksum */
+ for (i = 0; i < resp_len / 4; i++)
+ chksum[i] = response[i * 4];
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RTSP_HASH_H__
+#define __GST_RTSP_HASH_H__
+
+G_BEGIN_DECLS
+
+void
+gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
+ char *challenge);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_HASH_H__ */
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "rmdemux.h"
+#include "rademux.h"
+#include "rdtdepay.h"
+#include "rdtmanager.h"
+#include "rtspreal.h"
+#include "pnmsrc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gboolean ret = FALSE;
+
+ ret |= GST_ELEMENT_REGISTER (rmdemux, plugin);
+ ret |= GST_ELEMENT_REGISTER (rademux, plugin);
+ ret |= GST_ELEMENT_REGISTER (rdtdepay, plugin);
+ ret |= GST_ELEMENT_REGISTER (rdtmanager, plugin);
+ ret |= GST_ELEMENT_REGISTER (rtspreal, plugin);
+ ret |= GST_ELEMENT_REGISTER (pnmsrc, plugin);
+
+ return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ realmedia,
+ "RealMedia support plugins",
+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+/* GStreamer RealMedia demuxer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
+ * Copyright (C) <2004> Stephane Loeuillet <gstreamer@leroutier.net>
+ * Copyright (C) <2005> Owen Fraser-Green <owen@discobabe.net>
+ * Copyright (C) <2005> Michael Smith <fluendo.com>
+ * Copyright (C) <2006> Wim Taymans <wim@fluendo.com>
+ * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "rmdemux.h"
+#include "rmutils.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#define RMDEMUX_GUINT32_GET(a) GST_READ_UINT32_BE(a)
+#define RMDEMUX_GUINT16_GET(a) GST_READ_UINT16_BE(a)
+#define RMDEMUX_FOURCC_GET(a) GST_READ_UINT32_LE(a)
+#define HEADER_SIZE 10
+#define DATA_SIZE 8
+
+#define MAX_FRAGS 256
+
+static const guint8 sipr_subpk_size[4] = { 29, 19, 37, 20 };
+
+typedef struct _GstRMDemuxIndex GstRMDemuxIndex;
+
+struct _GstRMDemuxStream
+{
+ guint32 subtype;
+ guint32 fourcc;
+ guint32 subformat;
+ guint32 format;
+
+ int id;
+ GstPad *pad;
+ gboolean discont;
+ int timescale;
+
+ int sample_index;
+ GstRMDemuxIndex *index;
+ int index_length;
+ gint framerate_numerator;
+ gint framerate_denominator;
+ guint32 seek_offset;
+
+ guint16 width;
+ guint16 height;
+ guint16 flavor;
+ guint16 rate; /* samplerate */
+ guint16 n_channels; /* channels */
+ guint16 sample_width; /* bits_per_sample */
+ guint16 leaf_size; /* subpacket_size */
+ guint32 packet_size; /* coded_frame_size */
+ guint16 version;
+ guint32 extra_data_size; /* codec_data_length */
+ guint8 *extra_data; /* extras */
+ guint32 bitrate;
+
+ gboolean needs_descrambling;
+ guint subpackets_needed; /* subpackets needed for descrambling */
+ GPtrArray *subpackets; /* array containing subpacket GstBuffers */
+
+ /* Variables needed for fixing timestamps. */
+ GstClockTime next_ts, last_ts;
+ guint16 next_seq, last_seq;
+
+ gint frag_seqnum;
+ gint frag_subseq;
+ guint frag_length;
+ guint frag_current;
+ guint frag_count;
+ guint frag_offset[MAX_FRAGS];
+ GstAdapter *adapter;
+
+ GstTagList *pending_tags;
+};
+
+struct _GstRMDemuxIndex
+{
+ guint32 offset;
+ GstClockTime timestamp;
+};
+
+static GstStaticPadTemplate gst_rmdemux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+ );
+
+static GstStaticPadTemplate gst_rmdemux_videosrc_template =
+GST_STATIC_PAD_TEMPLATE ("video_%u",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_rmdemux_audiosrc_template =
+GST_STATIC_PAD_TEMPLATE ("audio_%u",
+ GST_PAD_SRC,
+ GST_PAD_SOMETIMES,
+ GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (rmdemux_debug);
+#define GST_CAT_DEFAULT rmdemux_debug
+
+static GstElementClass *parent_class = NULL;
+
+static void gst_rmdemux_class_init (GstRMDemuxClass * klass);
+static void gst_rmdemux_base_init (GstRMDemuxClass * klass);
+static void gst_rmdemux_init (GstRMDemux * rmdemux);
+static void gst_rmdemux_finalize (GObject * object);
+static GstStateChangeReturn gst_rmdemux_change_state (GstElement * element,
+ GstStateChange transition);
+static GstFlowReturn gst_rmdemux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static void gst_rmdemux_loop (GstPad * pad);
+static gboolean gst_rmdemux_sink_activate (GstPad * sinkpad,
+ GstObject * parent);
+static gboolean gst_rmdemux_sink_activate_mode (GstPad * sinkpad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static gboolean gst_rmdemux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_rmdemux_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static void gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event);
+static gboolean gst_rmdemux_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gboolean gst_rmdemux_perform_seek (GstRMDemux * rmdemux,
+ GstEvent * event);
+
+static void gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data,
+ int length);
+static void gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data,
+ int length);
+static void gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux,
+ const guint8 * data, int length);
+static guint gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data,
+ int length);
+static void gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data,
+ int length);
+static void gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data,
+ int length);
+static GstFlowReturn gst_rmdemux_parse_packet (GstRMDemux * rmdemux,
+ GstBuffer * in, guint16 version);
+static void gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux,
+ const guint8 * data, int length);
+static void gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream);
+static GstRMDemuxStream *gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux,
+ int id);
+
+static GType
+gst_rmdemux_get_type (void)
+{
+ static GType rmdemux_type = 0;
+
+ if (!rmdemux_type) {
+ static const GTypeInfo rmdemux_info = {
+ sizeof (GstRMDemuxClass),
+ (GBaseInitFunc) gst_rmdemux_base_init, NULL,
+ (GClassInitFunc) gst_rmdemux_class_init,
+ NULL, NULL, sizeof (GstRMDemux), 0,
+ (GInstanceInitFunc) gst_rmdemux_init,
+ };
+
+ rmdemux_type =
+ g_type_register_static (GST_TYPE_ELEMENT, "GstRMDemux", &rmdemux_info,
+ 0);
+ }
+ return rmdemux_type;
+}
+
+GST_ELEMENT_REGISTER_DEFINE (rmdemux, "rmdemux",
+ GST_RANK_PRIMARY, GST_TYPE_RMDEMUX);
+
+static void
+gst_rmdemux_base_init (GstRMDemuxClass * klass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rmdemux_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rmdemux_videosrc_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rmdemux_audiosrc_template);
+ gst_element_class_set_static_metadata (element_class, "RealMedia Demuxer",
+ "Codec/Demuxer",
+ "Demultiplex a RealMedia file into audio and video streams",
+ "David Schleef <ds@schleef.org>");
+}
+
+static void
+gst_rmdemux_class_init (GstRMDemuxClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rmdemux_change_state);
+
+ GST_DEBUG_CATEGORY_INIT (rmdemux_debug, "rmdemux",
+ 0, "Demuxer for Realmedia streams");
+
+ gobject_class->finalize = gst_rmdemux_finalize;
+}
+
+static void
+gst_rmdemux_finalize (GObject * object)
+{
+ GstRMDemux *rmdemux = GST_RMDEMUX (object);
+
+ if (rmdemux->adapter) {
+ g_object_unref (rmdemux->adapter);
+ rmdemux->adapter = NULL;
+ }
+ if (rmdemux->flowcombiner) {
+ gst_flow_combiner_free (rmdemux->flowcombiner);
+ rmdemux->flowcombiner = NULL;
+ }
+
+ GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_rmdemux_init (GstRMDemux * rmdemux)
+{
+ rmdemux->sinkpad =
+ gst_pad_new_from_static_template (&gst_rmdemux_sink_template, "sink");
+ gst_pad_set_event_function (rmdemux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_sink_event));
+ gst_pad_set_chain_function (rmdemux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_chain));
+ gst_pad_set_activate_function (rmdemux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate));
+ gst_pad_set_activatemode_function (rmdemux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate_mode));
+
+ gst_element_add_pad (GST_ELEMENT (rmdemux), rmdemux->sinkpad);
+
+ rmdemux->adapter = gst_adapter_new ();
+ rmdemux->first_ts = GST_CLOCK_TIME_NONE;
+ rmdemux->base_ts = GST_CLOCK_TIME_NONE;
+ rmdemux->need_newsegment = TRUE;
+ rmdemux->have_group_id = FALSE;
+ rmdemux->group_id = G_MAXUINT;
+ rmdemux->flowcombiner = gst_flow_combiner_new ();
+ rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
+
+ gst_rm_utils_run_tests ();
+}
+
+static gboolean
+gst_rmdemux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ gboolean ret;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+ return ret;
+}
+
+static gboolean
+gst_rmdemux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ gboolean ret = TRUE;
+
+ GstRMDemux *rmdemux = GST_RMDEMUX (parent);
+
+ GST_LOG_OBJECT (rmdemux, "handling src event");
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEEK:
+ {
+ gboolean running;
+ guint32 seqnum;
+
+ GST_LOG_OBJECT (rmdemux, "Event on src: SEEK");
+
+ seqnum = gst_event_get_seqnum (event);
+ if (seqnum == rmdemux->seek_seqnum) {
+ GST_LOG_OBJECT (pad,
+ "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
+ gst_event_unref (event);
+ break;
+ }
+
+ /* can't seek if we are not seekable, FIXME could pass the
+ * seek query upstream after converting it to bytes using
+ * the average bitrate of the stream. */
+ if (!rmdemux->seekable) {
+ ret = FALSE;
+ GST_DEBUG ("seek on non seekable stream");
+ goto done_unref;
+ }
+
+ GST_OBJECT_LOCK (rmdemux);
+ /* check if we can do the seek now */
+ running = rmdemux->running;
+ GST_OBJECT_UNLOCK (rmdemux);
+
+ /* now do the seek */
+ if (running) {
+ ret = gst_rmdemux_perform_seek (rmdemux, event);
+ } else
+ ret = TRUE;
+
+ gst_event_unref (event);
+ break;
+ }
+ default:
+ GST_LOG_OBJECT (rmdemux, "Event on src: type=%d", GST_EVENT_TYPE (event));
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return ret;
+
+done_unref:
+ GST_DEBUG ("error handling event");
+ gst_event_unref (event);
+ return ret;
+}
+
+/* Validate that this looks like a reasonable point to seek to */
+static gboolean
+gst_rmdemux_validate_offset (GstRMDemux * rmdemux)
+{
+ GstBuffer *buffer;
+ GstFlowReturn flowret;
+ guint16 version, length;
+ gboolean ret = TRUE;
+ GstMapInfo map;
+
+ buffer = NULL;
+ flowret = gst_pad_pull_range (rmdemux->sinkpad, rmdemux->offset, 4, &buffer);
+
+ if (flowret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (rmdemux, "Failed to pull data at offset %d",
+ rmdemux->offset);
+ return FALSE;
+ }
+ /* TODO: Can we also be seeking to a 'DATA' chunk header? Check this.
+ * Also, for the case we currently handle, can we check any more? It's pretty
+ * sucky to not be validating a little more heavily than this... */
+ /* This should now be the start of a data packet header. That begins with
+ * a 2-byte 'version' field, which has to be 0 or 1, then a length. I'm not
+ * certain what values are valid for length, but it must always be at least
+ * 4 bytes, and we can check that it won't take us past our known total size
+ */
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ version = RMDEMUX_GUINT16_GET (map.data);
+ if (version != 0 && version != 1) {
+ GST_DEBUG_OBJECT (rmdemux, "Expected version 0 or 1, got %d",
+ (int) version);
+ ret = FALSE;
+ }
+
+ length = RMDEMUX_GUINT16_GET (map.data + 2);
+ /* TODO: Also check against total stream length */
+ if (length < 4) {
+ GST_DEBUG_OBJECT (rmdemux, "Expected length >= 4, got %d", (int) length);
+ ret = FALSE;
+ }
+ gst_buffer_unmap (buffer, &map);
+
+ if (ret) {
+ rmdemux->offset += 4;
+ gst_adapter_clear (rmdemux->adapter);
+ gst_adapter_push (rmdemux->adapter, buffer);
+ } else {
+ GST_WARNING_OBJECT (rmdemux, "Failed to validate seek offset at %d",
+ rmdemux->offset);
+ gst_buffer_unref (buffer);
+ }
+
+ return ret;
+}
+
+static gboolean
+find_seek_offset_bytes (GstRMDemux * rmdemux, guint target)
+{
+ int i;
+ GSList *cur;
+ gboolean ret = FALSE;
+
+ for (cur = rmdemux->streams; cur; cur = cur->next) {
+ GstRMDemuxStream *stream = cur->data;
+
+ /* Search backwards through this stream's index until we find the first
+ * timestamp before our target time */
+ for (i = stream->index_length - 1; i >= 0; i--) {
+ if (stream->index[i].offset <= target) {
+ /* Set the seek_offset for the stream so we don't bother parsing it
+ * until we've passed that point */
+ stream->seek_offset = stream->index[i].offset;
+ rmdemux->offset = stream->index[i].offset;
+ ret = TRUE;
+ break;
+ }
+ }
+ }
+ return ret;
+}
+
+static gboolean
+find_seek_offset_time (GstRMDemux * rmdemux, GstClockTime time)
+{
+ int i, n_stream;
+ gboolean ret = FALSE;
+ GSList *cur;
+ GstClockTime earliest = GST_CLOCK_TIME_NONE;
+
+ n_stream = 0;
+ for (cur = rmdemux->streams; cur; cur = cur->next, n_stream++) {
+ GstRMDemuxStream *stream = cur->data;
+
+ /* Search backwards through this stream's index until we find the first
+ * timestamp before our target time */
+ for (i = stream->index_length - 1; i >= 0; i--) {
+ if (stream->index[i].timestamp <= time) {
+ /* Set the seek_offset for the stream so we don't bother parsing it
+ * until we've passed that point */
+ stream->seek_offset = stream->index[i].offset;
+
+ /* If it's also the earliest timestamp we've seen of all streams, then
+ * that's our target!
+ */
+ if (earliest == GST_CLOCK_TIME_NONE ||
+ stream->index[i].timestamp < earliest) {
+ earliest = stream->index[i].timestamp;
+ rmdemux->offset = stream->index[i].offset;
+ GST_DEBUG_OBJECT (rmdemux,
+ "We're looking for %" GST_TIME_FORMAT
+ " and we found that stream %d has the latest index at %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start), n_stream,
+ GST_TIME_ARGS (earliest));
+ }
+
+ ret = TRUE;
+
+ break;
+ }
+ }
+ stream->discont = TRUE;
+ }
+ return ret;
+}
+
+static gboolean
+gst_rmdemux_perform_seek (GstRMDemux * rmdemux, GstEvent * event)
+{
+ gboolean validated;
+ gboolean ret = TRUE;
+ gboolean flush;
+ GstFormat format;
+ gdouble rate;
+ GstSeekFlags flags;
+ GstSeekType cur_type, stop_type;
+ gint64 cur, stop;
+ gboolean update;
+ guint32 seqnum = GST_SEQNUM_INVALID;
+ GstEvent *fl_event;
+
+ if (event) {
+ GST_DEBUG_OBJECT (rmdemux, "seek with event");
+
+ seqnum = gst_event_get_seqnum (event);
+ gst_event_parse_seek (event, &rate, &format, &flags,
+ &cur_type, &cur, &stop_type, &stop);
+
+ /* we can only seek on time */
+ if (format != GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (rmdemux, "can only seek on TIME");
+ goto error;
+ }
+ /* cannot yet do backwards playback */
+ if (rate <= 0.0) {
+ GST_DEBUG_OBJECT (rmdemux, "can only seek with positive rate, not %lf",
+ rate);
+ goto error;
+ }
+ } else {
+ GST_DEBUG_OBJECT (rmdemux, "seek without event");
+
+ flags = 0;
+ rate = 1.0;
+ }
+
+ GST_DEBUG_OBJECT (rmdemux, "seek, rate %g", rate);
+
+ flush = flags & GST_SEEK_FLAG_FLUSH;
+
+ /* first step is to unlock the streaming thread if it is
+ * blocked in a chain call, we do this by starting the flush. */
+ if (flush) {
+ fl_event = gst_event_new_flush_start ();
+ if (seqnum != GST_SEQNUM_INVALID)
+ gst_event_set_seqnum (fl_event, seqnum);
+ gst_pad_push_event (rmdemux->sinkpad, fl_event);
+
+ fl_event = gst_event_new_flush_start ();
+ if (seqnum != GST_SEQNUM_INVALID)
+ gst_event_set_seqnum (fl_event, seqnum);
+ gst_rmdemux_send_event (rmdemux, fl_event);
+ } else {
+ gst_pad_pause_task (rmdemux->sinkpad);
+ }
+
+ GST_LOG_OBJECT (rmdemux, "Done starting flushes");
+
+ /* now grab the stream lock so that streaming cannot continue, for
+ * non flushing seeks when the element is in PAUSED this could block
+ * forever. */
+ GST_PAD_STREAM_LOCK (rmdemux->sinkpad);
+
+ GST_LOG_OBJECT (rmdemux, "Took streamlock");
+
+ if (event) {
+ if (!gst_segment_do_seek (&rmdemux->segment, rate, format, flags,
+ cur_type, cur, stop_type, stop, &update)) {
+ ret = FALSE;
+ goto done;
+ }
+
+ rmdemux->seek_seqnum = seqnum;
+ }
+
+ GST_DEBUG_OBJECT (rmdemux, "segment positions set to %" GST_TIME_FORMAT "-%"
+ GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start),
+ GST_TIME_ARGS (rmdemux->segment.stop));
+
+ /* we need to stop flushing on the sinkpad as we're going to use it
+ * next. We can do this as we have the STREAM lock now. */
+ fl_event = gst_event_new_flush_stop (TRUE);
+ if (seqnum != GST_SEQNUM_INVALID)
+ gst_event_set_seqnum (fl_event, seqnum);
+ gst_pad_push_event (rmdemux->sinkpad, fl_event);
+
+ GST_LOG_OBJECT (rmdemux, "Pushed FLUSH_STOP event");
+
+ /* For each stream, find the first index offset equal to or before our seek
+ * target. Of these, find the smallest offset. That's where we seek to.
+ *
+ * Then we pull 4 bytes from that offset, and validate that we've seeked to a
+ * what looks like a plausible packet.
+ * If that fails, restart, with the seek target set to one less than the
+ * offset we just tried. If we run out of places to try, treat that as a fatal
+ * error.
+ */
+ if (!find_seek_offset_time (rmdemux, rmdemux->segment.position)) {
+ GST_LOG_OBJECT (rmdemux, "Failed to find seek offset by time");
+ ret = FALSE;
+ goto done;
+ }
+
+ GST_LOG_OBJECT (rmdemux, "Validating offset %u", rmdemux->offset);
+ validated = gst_rmdemux_validate_offset (rmdemux);
+ while (!validated) {
+ GST_INFO_OBJECT (rmdemux, "Failed to validate offset at %u",
+ rmdemux->offset);
+ if (!find_seek_offset_bytes (rmdemux, rmdemux->offset - 1)) {
+ ret = FALSE;
+ goto done;
+ }
+ validated = gst_rmdemux_validate_offset (rmdemux);
+ }
+
+ GST_LOG_OBJECT (rmdemux, "Found final offset. Excellent!");
+
+ /* now we have a new position, prepare for streaming again */
+ {
+ /* Reset the demuxer state */
+ rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
+
+ if (flush) {
+ fl_event = gst_event_new_flush_stop (TRUE);
+ if (seqnum != GST_SEQNUM_INVALID)
+ gst_event_set_seqnum (fl_event, seqnum);
+ gst_rmdemux_send_event (rmdemux, fl_event);
+ }
+
+ /* must send newsegment event from streaming thread, so just set flag */
+ rmdemux->need_newsegment = TRUE;
+
+ /* notify start of new segment */
+ if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ GstMessage *msg =
+ gst_message_new_segment_start (GST_OBJECT_CAST (rmdemux),
+ GST_FORMAT_TIME, rmdemux->segment.position);
+ if (seqnum != GST_SEQNUM_INVALID)
+ gst_message_set_seqnum (msg, seqnum);
+ gst_element_post_message (GST_ELEMENT_CAST (rmdemux), msg);
+ }
+
+ /* restart our task since it might have been stopped when we did the
+ * flush. */
+ gst_pad_start_task (rmdemux->sinkpad, (GstTaskFunction) gst_rmdemux_loop,
+ rmdemux->sinkpad, NULL);
+ }
+
+done:
+ /* streaming can continue now */
+ GST_PAD_STREAM_UNLOCK (rmdemux->sinkpad);
+
+ return ret;
+
+error:
+ {
+ GST_DEBUG_OBJECT (rmdemux, "seek failed");
+ return FALSE;
+ }
+}
+
+
+static gboolean
+gst_rmdemux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+ GstRMDemux *rmdemux;
+
+ rmdemux = GST_RMDEMUX (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_POSITION:
+ GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
+ break;
+ case GST_QUERY_DURATION:{
+ GstFormat fmt;
+
+ gst_query_parse_duration (query, &fmt, NULL);
+ if (fmt == GST_FORMAT_TIME) {
+ GST_OBJECT_LOCK (rmdemux);
+ if (G_LIKELY (rmdemux->running)) {
+ gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
+ GST_DEBUG_OBJECT (rmdemux, "duration set to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (rmdemux->duration));
+ res = TRUE;
+ }
+ GST_OBJECT_UNLOCK (rmdemux);
+ }
+ break;
+ }
+ case GST_QUERY_SEEKING:{
+ GstFormat fmt;
+
+ gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+ if (fmt == GST_FORMAT_TIME) {
+ GST_OBJECT_LOCK (rmdemux);
+ if (G_LIKELY (rmdemux->running)) {
+ gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable,
+ 0, rmdemux->duration);
+ res = TRUE;
+ }
+ GST_OBJECT_UNLOCK (rmdemux);
+ }
+ break;
+ }
+ case GST_QUERY_SEGMENT:
+ {
+ GstFormat format;
+ gint64 start, stop;
+
+ format = rmdemux->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&rmdemux->segment, format,
+ rmdemux->segment.start);
+ if ((stop = rmdemux->segment.stop) == -1)
+ stop = rmdemux->segment.duration;
+ else
+ stop = gst_segment_to_stream_time (&rmdemux->segment, format, stop);
+
+ gst_query_set_segment (query, rmdemux->segment.rate, format, start, stop);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+static void
+gst_rmdemux_free_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+ g_object_unref (stream->adapter);
+ gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+ if (stream->pending_tags)
+ gst_tag_list_unref (stream->pending_tags);
+ if (stream->subpackets)
+ g_ptr_array_free (stream->subpackets, TRUE);
+ g_free (stream->index);
+ g_free (stream);
+}
+
+static void
+gst_rmdemux_reset (GstRMDemux * rmdemux)
+{
+ GSList *cur;
+
+ GST_OBJECT_LOCK (rmdemux);
+ rmdemux->running = FALSE;
+ GST_OBJECT_UNLOCK (rmdemux);
+
+ for (cur = rmdemux->streams; cur; cur = cur->next) {
+ GstRMDemuxStream *stream = cur->data;
+
+ gst_flow_combiner_remove_pad (rmdemux->flowcombiner, stream->pad);
+ gst_element_remove_pad (GST_ELEMENT (rmdemux), stream->pad);
+ gst_rmdemux_free_stream (rmdemux, stream);
+ }
+ g_slist_free (rmdemux->streams);
+ rmdemux->streams = NULL;
+ rmdemux->n_audio_streams = 0;
+ rmdemux->n_video_streams = 0;
+
+ if (rmdemux->pending_tags != NULL) {
+ gst_tag_list_unref (rmdemux->pending_tags);
+ rmdemux->pending_tags = NULL;
+ }
+
+ gst_adapter_clear (rmdemux->adapter);
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ rmdemux->have_pads = FALSE;
+
+ gst_segment_init (&rmdemux->segment, GST_FORMAT_UNDEFINED);
+ rmdemux->first_ts = GST_CLOCK_TIME_NONE;
+ rmdemux->base_ts = GST_CLOCK_TIME_NONE;
+ rmdemux->need_newsegment = TRUE;
+
+ rmdemux->have_group_id = FALSE;
+ rmdemux->group_id = G_MAXUINT;
+
+ rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
+}
+
+static GstStateChangeReturn
+gst_rmdemux_change_state (GstElement * element, GstStateChange transition)
+{
+ GstRMDemux *rmdemux = GST_RMDEMUX (element);
+ GstStateChangeReturn res;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ rmdemux->have_pads = FALSE;
+ gst_segment_init (&rmdemux->segment, GST_FORMAT_TIME);
+ rmdemux->running = FALSE;
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ default:
+ break;
+ }
+
+ res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:{
+ gst_rmdemux_reset (rmdemux);
+ break;
+ }
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return res;
+}
+
+/* this function is called when the pad is activated and should start
+ * processing data.
+ *
+ * We check if we can do random access to decide if we work push or
+ * pull based.
+ */
+static gboolean
+gst_rmdemux_sink_activate (GstPad * sinkpad, GstObject * parent)
+{
+ GstQuery *query;
+ gboolean pull_mode;
+
+ query = gst_query_new_scheduling ();
+
+ if (!gst_pad_peer_query (sinkpad, query)) {
+ gst_query_unref (query);
+ goto activate_push;
+ }
+
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+ gst_query_unref (query);
+
+ if (!pull_mode)
+ goto activate_push;
+
+ GST_DEBUG_OBJECT (sinkpad, "activating pull");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+ {
+ GST_DEBUG_OBJECT (sinkpad, "activating push");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
+}
+
+static gboolean
+gst_rmdemux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
+ GstPadMode mode, gboolean active)
+{
+ gboolean res;
+ GstRMDemux *demux;
+
+ demux = GST_RMDEMUX (parent);
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ demux->seekable = FALSE;
+ demux->running = active;
+ res = TRUE;
+ break;
+ case GST_PAD_MODE_PULL:
+ if (active) {
+ demux->seekable = TRUE;
+ demux->offset = 0;
+ demux->loop_state = RMDEMUX_LOOP_STATE_HEADER;
+ demux->data_offset = G_MAXUINT;
+ res =
+ gst_pad_start_task (sinkpad, (GstTaskFunction) gst_rmdemux_loop,
+ sinkpad, NULL);
+ } else {
+ res = gst_pad_stop_task (sinkpad);
+ }
+ break;
+ default:
+ res = FALSE;
+ break;
+ }
+ return res;
+}
+
+
+/* random access mode - just pass over to our chain function */
+static void
+gst_rmdemux_loop (GstPad * pad)
+{
+ GstRMDemux *rmdemux;
+ GstBuffer *buffer;
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint size;
+
+ rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad));
+
+ GST_LOG_OBJECT (rmdemux, "loop with state=%d and offset=0x%x",
+ rmdemux->loop_state, rmdemux->offset);
+
+ switch (rmdemux->state) {
+ case RMDEMUX_STATE_HEADER:
+ size = HEADER_SIZE;
+ break;
+ case RMDEMUX_STATE_HEADER_DATA:
+ size = DATA_SIZE;
+ break;
+ case RMDEMUX_STATE_DATA_PACKET:
+ size = rmdemux->avg_packet_size;
+ break;
+ case RMDEMUX_STATE_EOS:
+ GST_LOG_OBJECT (rmdemux, "At EOS, pausing task");
+ ret = GST_FLOW_EOS;
+ goto need_pause;
+ default:
+ GST_LOG_OBJECT (rmdemux, "Default: requires %d bytes (state is %d)",
+ (int) rmdemux->size, rmdemux->state);
+ size = rmdemux->size;
+ }
+
+ buffer = NULL;
+ ret = gst_pad_pull_range (pad, rmdemux->offset, size, &buffer);
+ if (ret != GST_FLOW_OK) {
+ if (rmdemux->offset == rmdemux->index_offset) {
+ /* The index isn't available so forget about it */
+ rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
+ rmdemux->offset = rmdemux->data_offset;
+ GST_OBJECT_LOCK (rmdemux);
+ rmdemux->running = TRUE;
+ rmdemux->seekable = FALSE;
+ GST_OBJECT_UNLOCK (rmdemux);
+ return;
+ } else {
+ GST_DEBUG_OBJECT (rmdemux, "Unable to pull %d bytes at offset 0x%08x "
+ "(pull_range returned flow %s, state is %d)", (gint) size,
+ rmdemux->offset, gst_flow_get_name (ret), GST_STATE (rmdemux));
+ goto need_pause;
+ }
+ }
+
+ size = gst_buffer_get_size (buffer);
+
+ /* Defer to the chain function */
+ ret = gst_rmdemux_chain (pad, GST_OBJECT_CAST (rmdemux), buffer);
+ if (ret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (rmdemux, "Chain flow failed at offset 0x%08x",
+ rmdemux->offset);
+ goto need_pause;
+ }
+
+ rmdemux->offset += size;
+
+ switch (rmdemux->loop_state) {
+ case RMDEMUX_LOOP_STATE_HEADER:
+ if (rmdemux->offset >= rmdemux->data_offset) {
+ /* It's the end of the header */
+ rmdemux->loop_state = RMDEMUX_LOOP_STATE_INDEX;
+ rmdemux->offset = rmdemux->index_offset;
+ }
+ break;
+ case RMDEMUX_LOOP_STATE_INDEX:
+ if (rmdemux->state == RMDEMUX_STATE_HEADER) {
+ if (rmdemux->index_offset == 0) {
+ /* We've read the last index */
+ rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
+ rmdemux->offset = rmdemux->data_offset;
+ GST_OBJECT_LOCK (rmdemux);
+ rmdemux->running = TRUE;
+ GST_OBJECT_UNLOCK (rmdemux);
+ } else {
+ /* Get the next index */
+ rmdemux->offset = rmdemux->index_offset;
+ }
+ }
+ break;
+ case RMDEMUX_LOOP_STATE_DATA:
+ break;
+ }
+
+ return;
+
+ /* ERRORS */
+need_pause:
+ {
+ const gchar *reason = gst_flow_get_name (ret);
+
+ GST_LOG_OBJECT (rmdemux, "pausing task, reason %s", reason);
+ rmdemux->segment_running = FALSE;
+ gst_pad_pause_task (rmdemux->sinkpad);
+
+ if (ret == GST_FLOW_EOS) {
+ /* perform EOS logic */
+ if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ gint64 stop;
+
+ /* for segment playback we need to post when (in stream time)
+ * we stopped, this is either stop (when set) or the duration. */
+ if ((stop = rmdemux->segment.stop) == -1)
+ stop = rmdemux->segment.duration;
+
+ GST_LOG_OBJECT (rmdemux, "Sending segment done, at end of segment");
+ gst_element_post_message (GST_ELEMENT (rmdemux),
+ gst_message_new_segment_done (GST_OBJECT (rmdemux),
+ GST_FORMAT_TIME, stop));
+ gst_rmdemux_send_event (rmdemux,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+ } else {
+ /* normal playback, send EOS to all linked pads */
+ GST_LOG_OBJECT (rmdemux, "Sending EOS, at end of stream");
+ gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+ }
+ } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
+ GST_ELEMENT_FLOW_ERROR (rmdemux, ret);
+ gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+ }
+ return;
+ }
+}
+
+static gboolean
+gst_rmdemux_fourcc_isplausible (guint32 fourcc)
+{
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ if (!isprint ((int) ((unsigned char *) (&fourcc))[i])) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_rmdemux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ const guint8 *data;
+ guint16 version;
+ guint avail;
+
+ GstRMDemux *rmdemux = GST_RMDEMUX (parent);
+
+ if (rmdemux->base_ts == -1) {
+ if (GST_BUFFER_DTS_IS_VALID (buffer))
+ rmdemux->base_ts = GST_BUFFER_DTS (buffer);
+ else
+ rmdemux->base_ts = GST_BUFFER_PTS (buffer);
+
+ GST_LOG_OBJECT (rmdemux, "base_ts %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (rmdemux->base_ts));
+ }
+
+ gst_adapter_push (rmdemux->adapter, buffer);
+
+ GST_LOG_OBJECT (rmdemux, "Chaining buffer of size %" G_GSIZE_FORMAT,
+ gst_buffer_get_size (buffer));
+
+ while (TRUE) {
+ avail = gst_adapter_available (rmdemux->adapter);
+
+ GST_LOG_OBJECT (rmdemux, "looping in chain, avail %u", avail);
+ switch (rmdemux->state) {
+ case RMDEMUX_STATE_HEADER:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < HEADER_SIZE)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, HEADER_SIZE);
+
+ rmdemux->object_id = RMDEMUX_FOURCC_GET (data + 0);
+ rmdemux->size = RMDEMUX_GUINT32_GET (data + 4) - HEADER_SIZE;
+ rmdemux->object_version = RMDEMUX_GUINT16_GET (data + 8);
+
+ /* Sanity-check. We assume that the FOURCC is printable ASCII */
+ if (!gst_rmdemux_fourcc_isplausible (rmdemux->object_id)) {
+ /* Failed. Remain in HEADER state, try again... We flush only
+ * the actual FOURCC, not the entire header, because we could
+ * need to resync anywhere at all... really, this should never
+ * happen. */
+ GST_WARNING_OBJECT (rmdemux, "Bogus looking header, unprintable "
+ "FOURCC");
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, 4);
+
+ break;
+ }
+
+ GST_LOG_OBJECT (rmdemux, "header found with object_id=%"
+ GST_FOURCC_FORMAT
+ " size=%08x object_version=%d",
+ GST_FOURCC_ARGS (rmdemux->object_id), rmdemux->size,
+ rmdemux->object_version);
+
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
+
+ switch (rmdemux->object_id) {
+ case GST_MAKE_FOURCC ('.', 'R', 'M', 'F'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_RMF;
+ break;
+ case GST_MAKE_FOURCC ('P', 'R', 'O', 'P'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_PROP;
+ break;
+ case GST_MAKE_FOURCC ('M', 'D', 'P', 'R'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_MDPR;
+ break;
+ case GST_MAKE_FOURCC ('I', 'N', 'D', 'X'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_INDX;
+ break;
+ case GST_MAKE_FOURCC ('D', 'A', 'T', 'A'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_DATA;
+ break;
+ case GST_MAKE_FOURCC ('C', 'O', 'N', 'T'):
+ rmdemux->state = RMDEMUX_STATE_HEADER_CONT;
+ break;
+ default:
+ rmdemux->state = RMDEMUX_STATE_HEADER_UNKNOWN;
+ break;
+ }
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_UNKNOWN:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ GST_WARNING_OBJECT (rmdemux, "Unknown object_id %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (rmdemux->object_id));
+
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_RMF:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ if ((rmdemux->object_version == 0) || (rmdemux->object_version == 1)) {
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse__rmf (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+ } else {
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+ }
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_PROP:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse_prop (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_MDPR:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse_mdpr (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_CONT:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse_cont (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_DATA:
+ {
+ /* If we haven't already done so then signal there are no more pads */
+ if (!rmdemux->have_pads) {
+ GST_LOG_OBJECT (rmdemux, "no more pads");
+ gst_element_no_more_pads (GST_ELEMENT (rmdemux));
+ rmdemux->have_pads = TRUE;
+ }
+
+ /* The actual header is only 8 bytes */
+ rmdemux->size = DATA_SIZE;
+ GST_LOG_OBJECT (rmdemux, "data available %" G_GSIZE_FORMAT,
+ gst_adapter_available (rmdemux->adapter));
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse_data (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+ rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
+ break;
+ }
+ case RMDEMUX_STATE_HEADER_INDX:
+ {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ rmdemux->size = gst_rmdemux_parse_indx (rmdemux, data, rmdemux->size);
+ /* Only flush the header */
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
+
+ rmdemux->state = RMDEMUX_STATE_INDX_DATA;
+ break;
+ }
+ case RMDEMUX_STATE_INDX_DATA:
+ {
+ /* There's not always an data to get... */
+ if (rmdemux->size > 0) {
+ if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+ goto unlock;
+
+ data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+ gst_rmdemux_parse_indx_data (rmdemux, data, rmdemux->size);
+ gst_adapter_unmap (rmdemux->adapter);
+ gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+ }
+
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ break;
+ }
+ case RMDEMUX_STATE_DATA_PACKET:
+ {
+ guint8 header[4];
+
+ if (gst_adapter_available (rmdemux->adapter) < 2)
+ goto unlock;
+
+ gst_adapter_copy (rmdemux->adapter, header, 0, 2);
+ version = RMDEMUX_GUINT16_GET (header);
+ GST_LOG_OBJECT (rmdemux, "Data packet with version=%d", version);
+
+ if (version == 0 || version == 1) {
+ guint16 length;
+
+ if (gst_adapter_available (rmdemux->adapter) < 4)
+ goto unlock;
+
+ gst_adapter_copy (rmdemux->adapter, header, 0, 4);
+
+ length = RMDEMUX_GUINT16_GET (header + 2);
+ GST_LOG_OBJECT (rmdemux, "Got length %d", length);
+
+ if (length < 4) {
+ GST_LOG_OBJECT (rmdemux, "length too small, dropping");
+ /* Invalid, just drop it */
+ gst_adapter_flush (rmdemux->adapter, 4);
+ } else {
+ GstBuffer *buffer;
+
+ avail = gst_adapter_available (rmdemux->adapter);
+ if (avail < length)
+ goto unlock;
+
+ GST_LOG_OBJECT (rmdemux, "we have %u available and we needed %d",
+ avail, length);
+
+ /* flush version and length */
+ gst_adapter_flush (rmdemux->adapter, 4);
+ length -= 4;
+
+ buffer = gst_adapter_take_buffer (rmdemux->adapter, length);
+
+ ret = gst_rmdemux_parse_packet (rmdemux, buffer, version);
+ rmdemux->chunk_index++;
+ }
+
+ if (rmdemux->chunk_index == rmdemux->n_chunks || length == 0)
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ } else {
+ /* Stream done */
+ gst_adapter_flush (rmdemux->adapter, 2);
+
+ if (rmdemux->data_offset == 0) {
+ GST_LOG_OBJECT (rmdemux,
+ "No further data, internal demux state EOS");
+ rmdemux->state = RMDEMUX_STATE_EOS;
+ } else
+ rmdemux->state = RMDEMUX_STATE_HEADER;
+ }
+ break;
+ }
+ case RMDEMUX_STATE_EOS:
+ gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+ goto unlock;
+ default:
+ GST_WARNING_OBJECT (rmdemux, "Unhandled state %d", rmdemux->state);
+ goto unlock;
+ }
+ }
+
+unlock:
+ return ret;
+}
+
+static GstRMDemuxStream *
+gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux, int id)
+{
+ GSList *cur;
+
+ for (cur = rmdemux->streams; cur; cur = cur->next) {
+ GstRMDemuxStream *stream = cur->data;
+
+ if (stream->id == id) {
+ return stream;
+ }
+ }
+
+ return NULL;
+}
+
+static void
+gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event)
+{
+ GSList *cur;
+
+ for (cur = rmdemux->streams; cur; cur = cur->next) {
+ GstRMDemuxStream *stream = cur->data;
+
+ GST_DEBUG_OBJECT (rmdemux, "Pushing %s event on pad %s",
+ GST_EVENT_TYPE_NAME (event), GST_PAD_NAME (stream->pad));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_FLUSH_STOP:
+ stream->last_ts = -1;
+ stream->next_ts = -1;
+ stream->last_seq = -1;
+ stream->next_seq = -1;
+ break;
+ default:
+ break;
+ }
+ gst_event_ref (event);
+ gst_pad_push_event (stream->pad, event);
+ }
+ gst_event_unref (event);
+}
+
+static void
+gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+ GstCaps *stream_caps = NULL;
+ const gchar *codec_tag = NULL;
+ gchar *codec_name = NULL;
+ gchar *stream_id;
+ int version = 0;
+
+ if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
+ char *name = g_strdup_printf ("video_%u", rmdemux->n_video_streams);
+
+ stream->pad =
+ gst_pad_new_from_static_template (&gst_rmdemux_videosrc_template, name);
+ g_free (name);
+
+ codec_tag = GST_TAG_VIDEO_CODEC;
+
+ switch (stream->fourcc) {
+ case GST_RM_VDO_RV10:
+ version = 1;
+ break;
+ case GST_RM_VDO_RV20:
+ version = 2;
+ break;
+ case GST_RM_VDO_RV30:
+ version = 3;
+ break;
+ case GST_RM_VDO_RV40:
+ version = 4;
+ break;
+ default:
+ stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+ "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
+ GST_WARNING_OBJECT (rmdemux,
+ "Unknown video FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+ GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
+ }
+
+ if (version) {
+ stream_caps =
+ gst_caps_new_simple ("video/x-pn-realvideo", "rmversion", G_TYPE_INT,
+ (int) version,
+ "format", G_TYPE_INT,
+ (int) stream->format,
+ "subformat", G_TYPE_INT, (int) stream->subformat, NULL);
+ }
+
+ if (stream_caps) {
+ gst_caps_set_simple (stream_caps,
+ "width", G_TYPE_INT, stream->width,
+ "height", G_TYPE_INT, stream->height,
+ "framerate", GST_TYPE_FRACTION, stream->framerate_numerator,
+ stream->framerate_denominator, NULL);
+ }
+ rmdemux->n_video_streams++;
+
+ } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
+ char *name = g_strdup_printf ("audio_%u", rmdemux->n_audio_streams);
+
+ stream->pad =
+ gst_pad_new_from_static_template (&gst_rmdemux_audiosrc_template, name);
+ GST_LOG_OBJECT (rmdemux, "Created audio pad \"%s\"", name);
+ g_free (name);
+
+ codec_tag = GST_TAG_AUDIO_CODEC;
+
+ switch (stream->fourcc) {
+ /* Older RealAudio Codecs */
+ case GST_RM_AUD_14_4:
+ version = 1;
+ break;
+
+ case GST_RM_AUD_28_8:
+ version = 2;
+ break;
+
+ /* DolbyNet (Dolby AC3, low bitrate) */
+ case GST_RM_AUD_DNET:
+ stream_caps =
+ gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
+ (int) stream->rate, NULL);
+ stream->needs_descrambling = TRUE;
+ stream->subpackets_needed = 1;
+ stream->subpackets = NULL;
+ break;
+
+ /* MPEG-4 based */
+ case GST_RM_AUD_RAAC:
+ case GST_RM_AUD_RACP:
+ stream_caps =
+ gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT,
+ (int) 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
+ if (stream->extra_data_size > 0) {
+ /* strip off an unknown byte in the extra data */
+ stream->extra_data_size--;
+ stream->extra_data++;
+ }
+ stream->needs_descrambling = TRUE;
+ stream->subpackets_needed = 1;
+ stream->subpackets = NULL;
+ break;
+
+ /* Sony ATRAC3 */
+ case GST_RM_AUD_ATRC:
+ stream_caps = gst_caps_new_empty_simple ("audio/x-vnd.sony.atrac3");
+ stream->needs_descrambling = TRUE;
+ stream->subpackets_needed = stream->height;
+ stream->subpackets = NULL;
+ break;
+
+ /* RealAudio G2 audio */
+ case GST_RM_AUD_COOK:
+ version = 8;
+ stream->needs_descrambling = TRUE;
+ stream->subpackets_needed = stream->height;
+ stream->subpackets = NULL;
+ break;
+
+ /* RALF is lossless */
+ case GST_RM_AUD_RALF:
+ GST_DEBUG_OBJECT (rmdemux, "RALF");
+ stream_caps = gst_caps_new_empty_simple ("audio/x-ralf-mpeg4-generic");
+ break;
+
+ case GST_RM_AUD_SIPR:
+
+ if (stream->flavor > 3) {
+ GST_WARNING_OBJECT (rmdemux, "bad SIPR flavor %d, freeing it",
+ stream->flavor);
+ g_object_unref (stream->pad);
+ gst_rmdemux_free_stream (rmdemux, stream);
+ goto beach;
+ }
+
+ GST_DEBUG_OBJECT (rmdemux, "SIPR");
+ stream_caps = gst_caps_new_empty_simple ("audio/x-sipro");
+ stream->needs_descrambling = TRUE;
+ stream->subpackets_needed = stream->height;
+ stream->subpackets = NULL;
+ stream->leaf_size = sipr_subpk_size[stream->flavor];
+
+ break;
+
+ default:
+ stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+ "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
+ GST_WARNING_OBJECT (rmdemux,
+ "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+ GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
+ break;
+ }
+
+ if (version) {
+ stream_caps =
+ gst_caps_new_simple ("audio/x-pn-realaudio", "raversion", G_TYPE_INT,
+ (int) version, NULL);
+ }
+
+ if (stream_caps) {
+ gst_caps_set_simple (stream_caps,
+ "flavor", G_TYPE_INT, (int) stream->flavor,
+ "rate", G_TYPE_INT, (int) stream->rate,
+ "channels", G_TYPE_INT, (int) stream->n_channels,
+ "width", G_TYPE_INT, (int) stream->sample_width,
+ "leaf_size", G_TYPE_INT, (int) stream->leaf_size,
+ "packet_size", G_TYPE_INT, (int) stream->packet_size,
+ "bitrate", G_TYPE_INT, (int) stream->bitrate,
+ "height", G_TYPE_INT, (int) stream->height, NULL);
+ }
+ rmdemux->n_audio_streams++;
+ } else {
+ GST_WARNING_OBJECT (rmdemux, "not adding stream of type %d, freeing it",
+ stream->subtype);
+ gst_rmdemux_free_stream (rmdemux, stream);
+ goto beach;
+ }
+
+ GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
+ rmdemux->streams = g_slist_append (rmdemux->streams, stream);
+ GST_LOG_OBJECT (rmdemux, "n_streams is now %d",
+ g_slist_length (rmdemux->streams));
+
+ GST_LOG ("stream->pad = %p, stream_caps = %" GST_PTR_FORMAT, stream->pad,
+ stream_caps);
+
+ if (stream->pad && stream_caps) {
+ GstEvent *event;
+
+ GST_LOG_OBJECT (rmdemux, "%d bytes of extra data for stream %s",
+ stream->extra_data_size, GST_PAD_NAME (stream->pad));
+
+ /* add codec_data if there is any */
+ if (stream->extra_data_size > 0) {
+ GstBuffer *buffer;
+
+ buffer = gst_buffer_new_and_alloc (stream->extra_data_size);
+ gst_buffer_fill (buffer, 0, stream->extra_data, stream->extra_data_size);
+
+ gst_caps_set_simple (stream_caps, "codec_data", GST_TYPE_BUFFER,
+ buffer, NULL);
+
+ gst_buffer_unref (buffer);
+ }
+
+ gst_pad_use_fixed_caps (stream->pad);
+
+ gst_pad_set_event_function (stream->pad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_src_event));
+ gst_pad_set_query_function (stream->pad,
+ GST_DEBUG_FUNCPTR (gst_rmdemux_src_query));
+
+ GST_DEBUG_OBJECT (rmdemux, "adding pad %s with caps %" GST_PTR_FORMAT
+ ", stream_id=%d", GST_PAD_NAME (stream->pad), stream_caps, stream->id);
+ gst_pad_set_active (stream->pad, TRUE);
+
+ stream_id =
+ gst_pad_create_stream_id_printf (stream->pad,
+ GST_ELEMENT_CAST (rmdemux), "%03u", stream->id);
+
+ event =
+ gst_pad_get_sticky_event (rmdemux->sinkpad, GST_EVENT_STREAM_START, 0);
+ if (event) {
+ if (gst_event_parse_group_id (event, &rmdemux->group_id))
+ rmdemux->have_group_id = TRUE;
+ else
+ rmdemux->have_group_id = FALSE;
+ gst_event_unref (event);
+ } else if (!rmdemux->have_group_id) {
+ rmdemux->have_group_id = TRUE;
+ rmdemux->group_id = gst_util_group_id_next ();
+ }
+
+ event = gst_event_new_stream_start (stream_id);
+ if (rmdemux->have_group_id)
+ gst_event_set_group_id (event, rmdemux->group_id);
+
+ gst_pad_push_event (stream->pad, event);
+ g_free (stream_id);
+
+ gst_pad_set_caps (stream->pad, stream_caps);
+
+ codec_name = gst_pb_utils_get_codec_description (stream_caps);
+
+ /* save for later, we must send the tags after the newsegment event */
+ if (codec_tag != NULL && codec_name != NULL) {
+ if (stream->pending_tags == NULL)
+ stream->pending_tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_KEEP,
+ codec_tag, codec_name, NULL);
+ g_free (codec_name);
+ }
+ gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad);
+ gst_flow_combiner_add_pad (rmdemux->flowcombiner, stream->pad);
+ }
+
+beach:
+
+ if (stream_caps)
+ gst_caps_unref (stream_caps);
+}
+
+static int
+re_skip_pascal_string (const guint8 * ptr)
+{
+ int length;
+
+ length = ptr[0];
+
+ return length + 1;
+}
+
+static void
+gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ GST_LOG_OBJECT (rmdemux, "file_version: %d", RMDEMUX_GUINT32_GET (data));
+ GST_LOG_OBJECT (rmdemux, "num_headers: %d", RMDEMUX_GUINT32_GET (data + 4));
+}
+
+static void
+gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ GST_LOG_OBJECT (rmdemux, "max bitrate: %d", RMDEMUX_GUINT32_GET (data));
+ GST_LOG_OBJECT (rmdemux, "avg bitrate: %d", RMDEMUX_GUINT32_GET (data + 4));
+ GST_LOG_OBJECT (rmdemux, "max packet size: %d",
+ RMDEMUX_GUINT32_GET (data + 8));
+ rmdemux->avg_packet_size = RMDEMUX_GUINT32_GET (data + 12);
+ GST_LOG_OBJECT (rmdemux, "avg packet size: %d", rmdemux->avg_packet_size);
+ rmdemux->num_packets = RMDEMUX_GUINT32_GET (data + 16);
+ GST_LOG_OBJECT (rmdemux, "number of packets: %d", rmdemux->num_packets);
+
+ GST_LOG_OBJECT (rmdemux, "duration: %d", RMDEMUX_GUINT32_GET (data + 20));
+ rmdemux->duration = RMDEMUX_GUINT32_GET (data + 20) * GST_MSECOND;
+
+ GST_LOG_OBJECT (rmdemux, "preroll: %d", RMDEMUX_GUINT32_GET (data + 24));
+ rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 28);
+ GST_LOG_OBJECT (rmdemux, "offset of INDX section: 0x%08x",
+ rmdemux->index_offset);
+ rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 32);
+ GST_LOG_OBJECT (rmdemux, "offset of DATA section: 0x%08x",
+ rmdemux->data_offset);
+ GST_LOG_OBJECT (rmdemux, "n streams: %d", RMDEMUX_GUINT16_GET (data + 36));
+ GST_LOG_OBJECT (rmdemux, "flags: 0x%04x", RMDEMUX_GUINT16_GET (data + 38));
+}
+
+static void
+gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ GstRMDemuxStream *stream;
+ char *stream1_type_string;
+ char *stream2_type_string;
+ guint str_len = 0;
+ int stream_type;
+ int offset;
+ guint32 max_bitrate;
+ guint32 avg_bitrate;
+
+ stream = g_new0 (GstRMDemuxStream, 1);
+
+ stream->id = RMDEMUX_GUINT16_GET (data);
+ stream->index = NULL;
+ stream->seek_offset = 0;
+ stream->last_ts = -1;
+ stream->next_ts = -1;
+ stream->discont = TRUE;
+ stream->adapter = gst_adapter_new ();
+ GST_LOG_OBJECT (rmdemux, "stream_number=%d", stream->id);
+
+ /* parse the bitrates */
+ max_bitrate = RMDEMUX_GUINT32_GET (data + 2);
+ avg_bitrate = RMDEMUX_GUINT32_GET (data + 6);
+ stream->bitrate = avg_bitrate;
+ GST_LOG_OBJECT (rmdemux, "Stream max bitrate=%u", max_bitrate);
+ GST_LOG_OBJECT (rmdemux, "Stream avg bitrate=%u", avg_bitrate);
+ if (max_bitrate != 0) {
+ if (stream->pending_tags == NULL)
+ stream->pending_tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_MAXIMUM_BITRATE, max_bitrate, NULL);
+ }
+ if (avg_bitrate != 0) {
+ if (stream->pending_tags == NULL)
+ stream->pending_tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, avg_bitrate, NULL);
+ }
+
+ offset = 30;
+ stream1_type_string = gst_rm_utils_read_string8 (data + offset,
+ length - offset, &str_len);
+ offset += str_len;
+ stream2_type_string = gst_rm_utils_read_string8 (data + offset,
+ length - offset, &str_len);
+ offset += str_len;
+
+ /* stream1_type_string for audio and video stream is a "put_whatever_you_want" field :
+ * observed values :
+ * - "[The ]Video/Audio Stream" (File produced by an official Real encoder)
+ * - "RealVideoPremierePlugIn-VIDEO/AUDIO" (File produced by Abobe Premiere)
+ *
+ * so, we should not rely on it to know which stream type it is
+ */
+
+ GST_LOG_OBJECT (rmdemux, "stream type: %s", stream1_type_string);
+ GST_LOG_OBJECT (rmdemux, "MIME type=%s", stream2_type_string);
+
+ if (strcmp (stream2_type_string, "video/x-pn-realvideo") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_VIDEO;
+ } else if (strcmp (stream2_type_string,
+ "video/x-pn-multirate-realvideo") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_VIDEO;
+ } else if (strcmp (stream2_type_string, "audio/x-pn-realaudio") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_AUDIO;
+ } else if (strcmp (stream2_type_string,
+ "audio/x-pn-multirate-realaudio") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_AUDIO;
+ } else if (strcmp (stream2_type_string,
+ "audio/x-pn-multirate-realaudio-live") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_AUDIO;
+ } else if (strcmp (stream2_type_string, "audio/x-ralf-mpeg4-generic") == 0) {
+ /* Another audio type found in the real testsuite */
+ stream_type = GST_RMDEMUX_STREAM_AUDIO;
+ } else if (strcmp (stream1_type_string, "") == 0 &&
+ strcmp (stream2_type_string, "logical-fileinfo") == 0) {
+ stream_type = GST_RMDEMUX_STREAM_FILEINFO;
+ } else {
+ stream_type = GST_RMDEMUX_STREAM_UNKNOWN;
+ GST_WARNING_OBJECT (rmdemux, "unknown stream type \"%s\",\"%s\"",
+ stream1_type_string, stream2_type_string);
+ }
+ g_free (stream1_type_string);
+ g_free (stream2_type_string);
+
+ offset += 4;
+
+ stream->subtype = stream_type;
+ switch (stream_type) {
+
+ case GST_RMDEMUX_STREAM_VIDEO:
+ /* RV10/RV20/RV30/RV40 => video/x-pn-realvideo, version=1,2,3,4 */
+ stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 8);
+ stream->width = RMDEMUX_GUINT16_GET (data + offset + 12);
+ stream->height = RMDEMUX_GUINT16_GET (data + offset + 14);
+ stream->rate = RMDEMUX_GUINT16_GET (data + offset + 16);
+ stream->subformat = RMDEMUX_GUINT32_GET (data + offset + 26);
+ stream->format = RMDEMUX_GUINT32_GET (data + offset + 30);
+ stream->extra_data_size = length - (offset + 26);
+ stream->extra_data = (guint8 *) data + offset + 26;
+ /* Natural way to represent framerates here requires unsigned 32 bit
+ * numerator, which we don't have. For the nasty case, approximate...
+ */
+ {
+ guint32 numerator = RMDEMUX_GUINT16_GET (data + offset + 22) * 65536 +
+ RMDEMUX_GUINT16_GET (data + offset + 24);
+ if (numerator > G_MAXINT) {
+ stream->framerate_numerator = (gint) (numerator >> 1);
+ stream->framerate_denominator = 32768;
+ } else {
+ stream->framerate_numerator = (gint) numerator;
+ stream->framerate_denominator = 65536;
+ }
+ }
+
+ GST_DEBUG_OBJECT (rmdemux,
+ "Video stream with fourcc=%" GST_FOURCC_FORMAT
+ " width=%d height=%d rate=%d framerate=%d/%d subformat=%x format=%x extra_data_size=%d",
+ GST_FOURCC_ARGS (stream->fourcc), stream->width, stream->height,
+ stream->rate, stream->framerate_numerator,
+ stream->framerate_denominator, stream->subformat, stream->format,
+ stream->extra_data_size);
+ break;
+ case GST_RMDEMUX_STREAM_AUDIO:{
+ stream->version = RMDEMUX_GUINT16_GET (data + offset + 4);
+ GST_INFO ("stream version = %u", stream->version);
+ switch (stream->version) {
+ case 3:
+ stream->fourcc = GST_RM_AUD_14_4;
+ stream->packet_size = 20;
+ stream->rate = 8000;
+ stream->n_channels = 1;
+ stream->sample_width = 16;
+ stream->flavor = 1;
+ stream->leaf_size = 0;
+ stream->height = 0;
+ break;
+ case 4:
+ stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+ stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+ /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+ stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+ stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
+ stream->rate = RMDEMUX_GUINT16_GET (data + offset + 48);
+ stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 52);
+ stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 54);
+ stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 62);
+ stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 69);
+ GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
+ stream->extra_data_size);
+ if (length - (offset + 73) >= stream->extra_data_size) {
+ stream->extra_data = (guint8 *) data + offset + 73;
+ } else {
+ GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
+ stream->extra_data_size = 0;
+ }
+ break;
+ case 5:
+ stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+ stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+ /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+ stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+ stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
+ stream->rate = RMDEMUX_GUINT16_GET (data + offset + 54);
+ stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 58);
+ stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 60);
+ stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 66);
+ stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 74);
+ GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
+ stream->extra_data_size);
+ if (length - (offset + 78) >= stream->extra_data_size) {
+ stream->extra_data = (guint8 *) data + offset + 78;
+ } else {
+ GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
+ stream->extra_data_size = 0;
+ }
+ break;
+ default:{
+ GST_WARNING_OBJECT (rmdemux, "Unhandled audio stream version %d",
+ stream->version);
+ break;
+ }
+ }
+ /* 14_4, 28_8, cook, dnet, sipr, raac, racp, ralf, atrc */
+ GST_DEBUG_OBJECT (rmdemux,
+ "Audio stream with rate=%d sample_width=%d n_channels=%d",
+ stream->rate, stream->sample_width, stream->n_channels);
+
+ break;
+ }
+ case GST_RMDEMUX_STREAM_FILEINFO:
+ {
+ int element_nb;
+
+ /* Length of this section */
+ GST_DEBUG_OBJECT (rmdemux, "length2: 0x%08x",
+ RMDEMUX_GUINT32_GET (data + offset));
+ offset += 4;
+
+ /* Unknown : 00 00 00 00 */
+ offset += 4;
+
+ /* Number of variables that would follow (loop iterations) */
+ element_nb = RMDEMUX_GUINT32_GET (data + offset);
+ offset += 4;
+
+ while (element_nb) {
+ /* Category Id : 00 00 00 XX 00 00 */
+ offset += 6;
+
+ /* Variable Name */
+ offset += re_skip_pascal_string (data + offset);
+
+ /* Variable Value Type */
+ /* 00 00 00 00 00 => integer/boolean, preceded by length */
+ /* 00 00 00 02 00 => pascal string, preceded by length, no trailing \0 */
+ offset += 5;
+
+ /* Variable Value */
+ offset += re_skip_pascal_string (data + offset);
+
+ element_nb--;
+ }
+ }
+ break;
+ case GST_RMDEMUX_STREAM_UNKNOWN:
+ default:
+ break;
+ }
+
+ gst_rmdemux_add_stream (rmdemux, stream);
+}
+
+static guint
+gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ int n;
+ int id;
+
+ n = RMDEMUX_GUINT32_GET (data);
+ id = RMDEMUX_GUINT16_GET (data + 4);
+ rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 6);
+
+ GST_DEBUG_OBJECT (rmdemux, "Number of indices=%d Stream ID=%d length=%d", n,
+ id, length);
+
+ /* Point to the next index_stream */
+ rmdemux->index_stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
+
+ /* Return the length of the index */
+ return 14 * n;
+}
+
+static void
+gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux, const guint8 * data,
+ int length)
+{
+ int i;
+ int n;
+ GstRMDemuxIndex *index;
+
+ /* The number of index records */
+ n = length / 14;
+
+ if (rmdemux->index_stream == NULL)
+ return;
+
+ /* don't parse the index a second time when operating pull-based and
+ * reaching the end of the file */
+ if (rmdemux->index_stream->index_length > 0) {
+ GST_DEBUG_OBJECT (rmdemux, "Already have an index for this stream");
+ return;
+ }
+
+ index = g_malloc (sizeof (GstRMDemuxIndex) * n);
+ rmdemux->index_stream->index = index;
+ rmdemux->index_stream->index_length = n;
+
+ for (i = 0; i < n; i++) {
+ index[i].timestamp = RMDEMUX_GUINT32_GET (data + 2) * GST_MSECOND;
+ index[i].offset = RMDEMUX_GUINT32_GET (data + 6);
+
+ GST_DEBUG_OBJECT (rmdemux, "Index found for timestamp=%f (at offset=%x)",
+ gst_guint64_to_gdouble (index[i].timestamp) / GST_SECOND,
+ index[i].offset);
+ data += 14;
+ }
+}
+
+static void
+gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ rmdemux->n_chunks = RMDEMUX_GUINT32_GET (data);
+ rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 4);
+ rmdemux->chunk_index = 0;
+ GST_DEBUG_OBJECT (rmdemux, "Data chunk found with %d packets "
+ "(next data at 0x%08x)", rmdemux->n_chunks, rmdemux->data_offset);
+}
+
+static void
+gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+ GstTagList *tags;
+
+ tags = gst_rm_utils_read_tags (data, length, gst_rm_utils_read_string16);
+
+ if (tags) {
+ GstTagList *old_tags = rmdemux->pending_tags;
+
+ GST_LOG_OBJECT (rmdemux, "tags: %" GST_PTR_FORMAT, tags);
+
+ rmdemux->pending_tags =
+ gst_tag_list_merge (old_tags, tags, GST_TAG_MERGE_APPEND);
+
+ gst_tag_list_unref (tags);
+ if (old_tags)
+ gst_tag_list_unref (old_tags);
+
+ gst_tag_list_set_scope (rmdemux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+ }
+}
+
+static void
+gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream)
+{
+ if (stream->subpackets == NULL || stream->subpackets->len == 0)
+ return;
+
+ GST_DEBUG_OBJECT (rmdemux, "discarding %u previously collected subpackets",
+ stream->subpackets->len);
+ g_ptr_array_foreach (stream->subpackets, (GFunc) gst_mini_object_unref, NULL);
+ g_ptr_array_set_size (stream->subpackets, 0);
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+ GstFlowReturn ret = GST_FLOW_ERROR;
+ GstBuffer *outbuf;
+ GstMapInfo outmap;
+ guint packet_size = stream->packet_size;
+ guint height = stream->subpackets->len;
+ guint leaf_size = stream->leaf_size;
+ guint p, x;
+
+ g_assert (stream->height == height);
+
+ GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
+ leaf_size, height);
+
+ outbuf = gst_buffer_new_and_alloc (height * packet_size);
+ gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
+ for (p = 0; p < height; ++p) {
+ GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
+ GstMapInfo map;
+
+ gst_buffer_map (b, &map, GST_MAP_READ);
+
+ if (p == 0) {
+ GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
+ GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
+ }
+
+ for (x = 0; x < packet_size / leaf_size; ++x) {
+ guint idx;
+
+ idx = height * x + ((height + 1) / 2) * (p % 2) + (p / 2);
+
+ /* GST_LOG ("%3u => %3u", (height * p) + x, idx); */
+ memcpy (outmap.data + leaf_size * idx, map.data + leaf_size * x,
+ leaf_size);
+ }
+ gst_buffer_unmap (b, &map);
+ }
+ gst_buffer_unmap (outbuf, &outmap);
+
+ /* some decoders, such as realaudiodec, need to be fed in packet units */
+ for (p = 0; p < height; ++p) {
+ GstBuffer *subbuf;
+
+ subbuf =
+ gst_buffer_copy_region (outbuf, GST_BUFFER_COPY_ALL, p * packet_size,
+ packet_size);
+
+ GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (subbuf)),
+ GST_TIME_ARGS (GST_BUFFER_PTS (subbuf)));
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (subbuf, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+
+ ret = gst_pad_push (stream->pad, subbuf);
+ if (ret != GST_FLOW_OK)
+ break;
+ }
+
+ gst_buffer_unref (outbuf);
+
+ gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_dnet_audio (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream)
+{
+ GstBuffer *buf;
+
+ buf = g_ptr_array_index (stream->subpackets, 0);
+ g_ptr_array_index (stream->subpackets, 0) = NULL;
+ g_ptr_array_set_size (stream->subpackets, 0);
+
+ buf = gst_rm_utils_descramble_dnet_buffer (buf);
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+ return gst_pad_push (stream->pad, buf);
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_mp4a_audio (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream)
+{
+ GstFlowReturn res;
+ GstBuffer *buf, *outbuf;
+ guint frames, index, i;
+ GstMapInfo map;
+ GstClockTime timestamp;
+
+ res = GST_FLOW_OK;
+
+ buf = g_ptr_array_index (stream->subpackets, 0);
+ g_ptr_array_index (stream->subpackets, 0) = NULL;
+ g_ptr_array_set_size (stream->subpackets, 0);
+
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ timestamp = GST_BUFFER_PTS (buf);
+
+ frames = (map.data[1] & 0xf0) >> 4;
+ index = 2 * frames + 2;
+
+ for (i = 0; i < frames; i++) {
+ guint len = (map.data[i * 2 + 2] << 8) | map.data[i * 2 + 3];
+
+ outbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, index, len);
+ if (i == 0) {
+ GST_BUFFER_PTS (outbuf) = timestamp;
+ GST_BUFFER_DTS (outbuf) = timestamp;
+ }
+
+ index += len;
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+ res = gst_pad_push (stream->pad, outbuf);
+ if (res != GST_FLOW_OK)
+ break;
+ }
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_unref (buf);
+ return res;
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream)
+{
+ GstFlowReturn ret;
+ GstBuffer *outbuf;
+ GstMapInfo outmap;
+ guint packet_size = stream->packet_size;
+ guint height = stream->subpackets->len;
+ guint p;
+
+ g_assert (stream->height == height);
+
+ GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
+ stream->leaf_size, height);
+
+ outbuf = gst_buffer_new_and_alloc (height * packet_size);
+ gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
+ for (p = 0; p < height; ++p) {
+ GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
+
+ if (p == 0) {
+ GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
+ GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
+ }
+
+ gst_buffer_extract (b, 0, outmap.data + packet_size * p, packet_size);
+ }
+ gst_buffer_unmap (outbuf, &outmap);
+
+ GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)));
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+
+ outbuf = gst_rm_utils_descramble_sipr_buffer (outbuf);
+
+ ret = gst_pad_push (stream->pad, outbuf);
+
+ gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_rmdemux_handle_scrambled_packet (GstRMDemux * rmdemux,
+ GstRMDemuxStream * stream, GstBuffer * buf, gboolean keyframe)
+{
+ GstFlowReturn ret;
+
+ if (stream->subpackets == NULL)
+ stream->subpackets = g_ptr_array_sized_new (stream->subpackets_needed);
+
+ GST_LOG ("Got subpacket %u/%u, len=%" G_GSIZE_FORMAT ", key=%d",
+ stream->subpackets->len + 1, stream->subpackets_needed,
+ gst_buffer_get_size (buf), keyframe);
+
+ if (keyframe && stream->subpackets->len > 0) {
+ gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+ }
+
+ g_ptr_array_add (stream->subpackets, buf);
+
+ if (stream->subpackets->len < stream->subpackets_needed)
+ return GST_FLOW_OK;
+
+ g_assert (stream->subpackets->len >= 1);
+
+ switch (stream->fourcc) {
+ case GST_RM_AUD_DNET:
+ ret = gst_rmdemux_descramble_dnet_audio (rmdemux, stream);
+ break;
+ case GST_RM_AUD_COOK:
+ case GST_RM_AUD_ATRC:
+ ret = gst_rmdemux_descramble_audio (rmdemux, stream);
+ break;
+ case GST_RM_AUD_RAAC:
+ case GST_RM_AUD_RACP:
+ ret = gst_rmdemux_descramble_mp4a_audio (rmdemux, stream);
+ break;
+ case GST_RM_AUD_SIPR:
+ ret = gst_rmdemux_descramble_sipr_audio (rmdemux, stream);
+ break;
+ default:
+ ret = GST_FLOW_ERROR;
+ g_assert_not_reached ();
+ }
+
+ return ret;
+}
+
+#define PARSE_NUMBER(data, size, number, label) \
+G_STMT_START { \
+ if (size < 2) \
+ goto label; \
+ number = GST_READ_UINT16_BE (data); \
+ if (!(number & 0xc000)) { \
+ if (size < 4) \
+ goto label; \
+ number = GST_READ_UINT32_BE (data); \
+ data += 4; \
+ size -= 4; \
+ } else { \
+ number &= 0x3fff; \
+ data += 2; \
+ size -= 2; \
+ } \
+} G_STMT_END
+
+static GstFlowReturn
+gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
+ GstBuffer * in, guint offset, guint16 version,
+ GstClockTime timestamp, gboolean key)
+{
+ GstFlowReturn ret;
+ GstMapInfo map;
+ const guint8 *data;
+ gsize size;
+
+ gst_buffer_map (in, &map, GST_MAP_READ);
+
+ if (map.size < offset)
+ goto not_enough_data;
+
+ data = map.data + offset;
+ size = map.size - offset;
+
+ /* if size <= 2, we want this method to return the same GstFlowReturn as it
+ * was previously for that given stream. */
+ ret = GST_PAD_LAST_FLOW_RETURN (stream->pad);
+
+ while (size > 2) {
+ guint8 pkg_header;
+ guint pkg_offset;
+ guint pkg_length;
+ guint pkg_subseq = 0, pkg_seqnum = G_MAXUINT;
+ guint fragment_size;
+ GstBuffer *fragment;
+
+ pkg_header = *data++;
+ size--;
+
+ /* packet header
+ * bit 7: 1=last block in block chain
+ * bit 6: 1=short header (only one block?)
+ */
+ if ((pkg_header & 0xc0) == 0x40) {
+ /* skip unknown byte */
+ data++;
+ size--;
+ pkg_offset = 0;
+ pkg_length = size;
+ } else {
+ if ((pkg_header & 0x40) == 0) {
+ pkg_subseq = (*data++) & 0x7f;
+ size--;
+ } else {
+ pkg_subseq = 0;
+ }
+
+ /* length */
+ PARSE_NUMBER (data, size, pkg_length, not_enough_data);
+
+ /* offset */
+ PARSE_NUMBER (data, size, pkg_offset, not_enough_data);
+
+ /* seqnum */
+ if (size < 1)
+ goto not_enough_data;
+
+ pkg_seqnum = *data++;
+ size--;
+ }
+
+ GST_DEBUG_OBJECT (rmdemux,
+ "seq %d, subseq %d, offset %d, length %d, size %" G_GSIZE_FORMAT
+ ", header %02x", pkg_seqnum, pkg_subseq, pkg_offset, pkg_length, size,
+ pkg_header);
+
+ /* calc size of fragment */
+ if ((pkg_header & 0xc0) == 0x80) {
+ fragment_size = pkg_offset;
+ } else {
+ if ((pkg_header & 0xc0) == 0)
+ fragment_size = size;
+ else
+ fragment_size = pkg_length;
+ }
+ GST_DEBUG_OBJECT (rmdemux, "fragment size %d", fragment_size);
+
+ if (map.size < (data - map.data) + fragment_size)
+ goto not_enough_data;
+
+ /* get the fragment */
+ fragment =
+ gst_buffer_copy_region (in, GST_BUFFER_COPY_ALL, data - map.data,
+ fragment_size);
+
+ if (pkg_subseq == 1) {
+ GST_DEBUG_OBJECT (rmdemux, "start new fragment");
+ gst_adapter_clear (stream->adapter);
+ stream->frag_current = 0;
+ stream->frag_count = 0;
+ stream->frag_length = pkg_length;
+ } else if (pkg_subseq == 0) {
+ GST_DEBUG_OBJECT (rmdemux, "non fragmented packet");
+ stream->frag_current = 0;
+ stream->frag_count = 0;
+ stream->frag_length = fragment_size;
+ }
+
+ /* put fragment in adapter */
+ gst_adapter_push (stream->adapter, fragment);
+ stream->frag_offset[stream->frag_count] = stream->frag_current;
+ stream->frag_current += fragment_size;
+ stream->frag_count++;
+
+ if (stream->frag_count > MAX_FRAGS)
+ goto too_many_fragments;
+
+ GST_DEBUG_OBJECT (rmdemux, "stored fragment in adapter %d/%d",
+ stream->frag_current, stream->frag_length);
+
+ /* flush fragment when complete */
+ if (stream->frag_current >= stream->frag_length) {
+ GstBuffer *out;
+ GstMapInfo outmap;
+ guint8 *outdata;
+ guint header_size;
+ gint i, avail;
+
+ /* calculate header size, which is:
+ * 1 byte for the number of fragments - 1
+ * for each fragment:
+ * 4 bytes 0x00000001 little endian
+ * 4 bytes fragment offset
+ *
+ * This is also the matroska header for realvideo, the decoder needs the
+ * fragment offsets, both in ffmpeg and real .so, so we just give it that
+ * in front of the data.
+ */
+ header_size = 1 + (8 * (stream->frag_count));
+
+ GST_DEBUG_OBJECT (rmdemux,
+ "fragmented completed. count %d, header_size %u", stream->frag_count,
+ header_size);
+
+ avail = gst_adapter_available (stream->adapter);
+
+ out = gst_buffer_new_and_alloc (header_size + avail);
+ gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+ outdata = outmap.data;
+
+ /* create header */
+ *outdata++ = stream->frag_count - 1;
+ for (i = 0; i < stream->frag_count; i++) {
+ GST_WRITE_UINT32_LE (outdata, 0x00000001);
+ outdata += 4;
+ GST_WRITE_UINT32_LE (outdata, stream->frag_offset[i]);
+ outdata += 4;
+ }
+
+ /* copy packet data after the header now */
+ gst_adapter_copy (stream->adapter, outdata, 0, avail);
+ gst_adapter_flush (stream->adapter, avail);
+
+ stream->frag_current = 0;
+ stream->frag_count = 0;
+ stream->frag_length = 0;
+
+ if (timestamp != -1) {
+ if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
+ timestamp -= rmdemux->first_ts;
+ else
+ timestamp = 0;
+
+ if (rmdemux->base_ts != -1)
+ timestamp += rmdemux->base_ts;
+ }
+ gst_buffer_unmap (out, &outmap);
+
+ /* video has DTS */
+ GST_BUFFER_DTS (out) = timestamp;
+ GST_BUFFER_PTS (out) = GST_CLOCK_TIME_NONE;
+
+ GST_LOG_OBJECT (rmdemux, "pushing timestamp %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (timestamp));
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+
+ if (!key) {
+ GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DELTA_UNIT);
+ }
+
+ ret = gst_pad_push (stream->pad, out);
+ ret = gst_flow_combiner_update_flow (rmdemux->flowcombiner, ret);
+ if (ret != GST_FLOW_OK)
+ break;
+
+ timestamp = GST_CLOCK_TIME_NONE;
+ }
+ data += fragment_size;
+ size -= fragment_size;
+ }
+ GST_DEBUG_OBJECT (rmdemux, "%" G_GSIZE_FORMAT " bytes left", size);
+
+done:
+ gst_buffer_unmap (in, &map);
+ gst_buffer_unref (in);
+
+ return ret;
+
+ /* ERRORS */
+not_enough_data:
+ {
+ GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+ (NULL));
+ ret = GST_FLOW_OK;
+ goto done;
+ }
+too_many_fragments:
+ {
+ GST_ELEMENT_ERROR (rmdemux, STREAM, DECODE,
+ ("Got more fragments (%u) than can be handled (%u)",
+ stream->frag_count, MAX_FRAGS), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+}
+
+static GstFlowReturn
+gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
+ GstBuffer * in, guint offset, guint16 version,
+ GstClockTime timestamp, gboolean key)
+{
+ GstFlowReturn ret;
+ GstBuffer *buffer;
+
+ if (gst_buffer_get_size (in) < offset)
+ goto not_enough_data;
+
+ buffer = gst_buffer_copy_region (in, GST_BUFFER_COPY_MEMORY, offset, -1);
+
+ if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
+ timestamp -= rmdemux->first_ts;
+ else
+ timestamp = 0;
+
+ if (rmdemux->base_ts != -1)
+ timestamp += rmdemux->base_ts;
+
+ GST_BUFFER_PTS (buffer) = timestamp;
+ GST_BUFFER_DTS (buffer) = timestamp;
+
+ if (stream->needs_descrambling) {
+ GST_LOG_OBJECT (rmdemux, "descramble timestamp %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (timestamp));
+ ret = gst_rmdemux_handle_scrambled_packet (rmdemux, stream, buffer, key);
+ } else {
+ GST_LOG_OBJECT (rmdemux,
+ "Pushing buffer of size %" G_GSIZE_FORMAT ", timestamp %"
+ GST_TIME_FORMAT "to pad %s", gst_buffer_get_size (buffer),
+ GST_TIME_ARGS (timestamp), GST_PAD_NAME (stream->pad));
+
+ if (stream->discont) {
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ stream->discont = FALSE;
+ }
+ ret = gst_pad_push (stream->pad, buffer);
+ }
+
+done:
+ gst_buffer_unref (in);
+
+ return ret;
+
+ /* ERRORS */
+not_enough_data:
+ {
+ GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+ (NULL));
+ ret = GST_FLOW_OK;
+ goto done;
+ }
+}
+
+static GstFlowReturn
+gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
+{
+ guint16 id;
+ GstRMDemuxStream *stream;
+ gsize size, offset;
+ GstFlowReturn cret, ret;
+ GstClockTime timestamp;
+ gboolean key;
+ GstMapInfo map;
+ guint8 *data;
+ guint8 flags;
+ guint32 ts;
+
+ gst_buffer_map (in, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+
+ if (size < 4 + 6 + 1 + 2)
+ goto not_enough_data;
+
+ /* stream number */
+ id = RMDEMUX_GUINT16_GET (data);
+
+ stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
+ if (!stream || !stream->pad)
+ goto unknown_stream;
+
+ /* timestamp in Msec */
+ ts = RMDEMUX_GUINT32_GET (data + 2);
+ timestamp = ts * GST_MSECOND;
+
+ rmdemux->segment.position = timestamp;
+
+ GST_LOG_OBJECT (rmdemux, "Parsing a packet for stream=%d, timestamp=%"
+ GST_TIME_FORMAT ", size %" G_GSIZE_FORMAT ", version=%d, ts=%u", id,
+ GST_TIME_ARGS (timestamp), size, version, ts);
+
+ if (rmdemux->first_ts == GST_CLOCK_TIME_NONE) {
+ GST_DEBUG_OBJECT (rmdemux, "First timestamp: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (timestamp));
+ rmdemux->first_ts = timestamp;
+ }
+
+ /* skip stream_id and timestamp */
+ data += (2 + 4);
+ size -= (2 + 4);
+
+ /* get flags */
+ flags = GST_READ_UINT8 (data + 1);
+
+ data += 2;
+ size -= 2;
+
+ /* version 1 has an extra byte */
+ if (version == 1) {
+ if (size < 1)
+ goto not_enough_data;
+
+ data += 1;
+ size -= 1;
+ }
+ offset = data - map.data;
+ gst_buffer_unmap (in, &map);
+
+ key = (flags & 0x02) != 0;
+ GST_DEBUG_OBJECT (rmdemux, "flags %d, Keyframe %d", flags, key);
+
+ if (rmdemux->need_newsegment) {
+ GstEvent *event;
+
+ event = gst_event_new_segment (&rmdemux->segment);
+
+ GST_DEBUG_OBJECT (rmdemux, "sending NEWSEGMENT event, segment.start= %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start));
+
+ gst_rmdemux_send_event (rmdemux, event);
+ rmdemux->need_newsegment = FALSE;
+
+ if (rmdemux->pending_tags != NULL) {
+ gst_rmdemux_send_event (rmdemux,
+ gst_event_new_tag (rmdemux->pending_tags));
+ rmdemux->pending_tags = NULL;
+ }
+ }
+
+ if (stream->pending_tags != NULL) {
+ GST_LOG_OBJECT (stream->pad, "tags %" GST_PTR_FORMAT, stream->pending_tags);
+ gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
+ stream->pending_tags = NULL;
+ }
+
+ if ((rmdemux->offset + size) <= stream->seek_offset) {
+ GST_DEBUG_OBJECT (rmdemux,
+ "Stream %d is skipping: seek_offset=%d, offset=%d, size=%"
+ G_GSIZE_FORMAT, stream->id, stream->seek_offset, rmdemux->offset, size);
+ cret = GST_FLOW_OK;
+ gst_buffer_unref (in);
+ goto beach;
+ }
+
+ /* do special headers */
+ if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
+ ret =
+ gst_rmdemux_parse_video_packet (rmdemux, stream, in, offset,
+ version, timestamp, key);
+ } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
+ ret =
+ gst_rmdemux_parse_audio_packet (rmdemux, stream, in, offset,
+ version, timestamp, key);
+ } else {
+ gst_buffer_unref (in);
+ ret = GST_FLOW_OK;
+ }
+
+ cret = gst_flow_combiner_update_pad_flow (rmdemux->flowcombiner, stream->pad,
+ ret);
+
+beach:
+ return cret;
+
+ /* ERRORS */
+unknown_stream:
+ {
+ GST_WARNING_OBJECT (rmdemux, "No stream for stream id %d in parsing "
+ "data packet", id);
+ gst_buffer_unmap (in, &map);
+ gst_buffer_unref (in);
+ return GST_FLOW_OK;
+ }
+
+ /* ERRORS */
+not_enough_data:
+ {
+ GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+ (NULL));
+ gst_buffer_unmap (in, &map);
+ gst_buffer_unref (in);
+ return GST_FLOW_OK;
+ }
+}
--- /dev/null
+/* GStreamer RealMedia demuxer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_RMDEMUX_H__
+#define __GST_RMDEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
+#include <gst/pbutils/descriptions.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RMDEMUX \
+ (gst_rmdemux_get_type())
+#define GST_RMDEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RMDEMUX,GstRMDemux))
+#define GST_RMDEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RMDEMUX,GstRMDemuxClass))
+#define GST_IS_RMDEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RMDEMUX))
+#define GST_IS_RMDEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RMDEMUX))
+
+typedef enum
+{
+ RMDEMUX_STATE_NULL,
+ RMDEMUX_STATE_HEADER,
+ RMDEMUX_STATE_HEADER_UNKNOWN,
+ RMDEMUX_STATE_HEADER_RMF,
+ RMDEMUX_STATE_HEADER_PROP,
+ RMDEMUX_STATE_HEADER_MDPR,
+ RMDEMUX_STATE_HEADER_INDX,
+ RMDEMUX_STATE_HEADER_DATA,
+ RMDEMUX_STATE_HEADER_CONT,
+ RMDEMUX_STATE_HEADER_SEEKING,
+ RMDEMUX_STATE_SEEKING,
+ RMDEMUX_STATE_DATA_PACKET,
+ RMDEMUX_STATE_SEEKING_EOS,
+ RMDEMUX_STATE_EOS,
+ RMDEMUX_STATE_INDX_DATA
+} GstRMDemuxState;
+
+typedef enum
+{
+ RMDEMUX_LOOP_STATE_HEADER,
+ RMDEMUX_LOOP_STATE_INDEX,
+ RMDEMUX_LOOP_STATE_DATA
+} GstRMDemuxLoopState;
+
+typedef enum
+{
+ GST_RMDEMUX_STREAM_UNKNOWN,
+ GST_RMDEMUX_STREAM_VIDEO,
+ GST_RMDEMUX_STREAM_AUDIO,
+ GST_RMDEMUX_STREAM_FILEINFO
+} GstRMDemuxStreamType;
+
+typedef struct _GstRMDemux GstRMDemux;
+typedef struct _GstRMDemuxClass GstRMDemuxClass;
+typedef struct _GstRMDemuxStream GstRMDemuxStream;
+
+struct _GstRMDemux {
+ GstElement element;
+
+ /* pads */
+ GstPad *sinkpad;
+
+ gboolean have_group_id;
+ guint group_id;
+
+ GSList *streams;
+ guint n_video_streams;
+ guint n_audio_streams;
+ GstAdapter *adapter;
+ gboolean have_pads;
+
+ GstFlowCombiner *flowcombiner;
+
+ guint32 timescale;
+ guint64 duration;
+ guint32 avg_packet_size;
+ guint32 index_offset;
+ guint32 data_offset;
+ guint32 num_packets;
+
+ guint offset;
+ gboolean seekable;
+ guint32 seek_seqnum;
+
+ GstRMDemuxState state;
+ GstRMDemuxLoopState loop_state;
+ GstRMDemuxStream *index_stream;
+
+ /* playback start/stop positions */
+ GstSegment segment;
+ gboolean segment_running;
+ gboolean running;
+
+ /* Whether we need to send a newsegment event */
+ gboolean need_newsegment;
+
+ /* Current timestamp */
+ GstClockTime cur_timestamp;
+
+ /* First timestamp */
+ GstClockTime base_ts;
+ GstClockTime first_ts;
+
+ int n_chunks;
+ int chunk_index;
+
+ guint32 object_id;
+ guint32 size;
+ guint16 object_version;
+
+ /* container tags for all streams */
+ GstTagList *pending_tags;
+};
+
+struct _GstRMDemuxClass {
+ GstElementClass parent_class;
+};
+
+/* RealMedia VideoCodec FOURCC codes */
+#define GST_RM_VDO_RV10 GST_MAKE_FOURCC('R','V','1','0') // RealVideo 1
+#define GST_RM_VDO_RV20 GST_MAKE_FOURCC('R','V','2','0') // RealVideo G2
+#define GST_RM_VDO_RV30 GST_MAKE_FOURCC('R','V','3','0') // RealVideo 8
+#define GST_RM_VDO_RV40 GST_MAKE_FOURCC('R','V','4','0') // RealVideo 9+10
+
+/* RealMedia AudioCodec FOURCC codes */
+#define GST_RM_AUD_14_4 GST_MAKE_FOURCC('1','4','_','4') // 14.4 Audio Codec
+#define GST_RM_AUD_28_8 GST_MAKE_FOURCC('2','8','_','8') // 28.8 Audio Codec
+#define GST_RM_AUD_COOK GST_MAKE_FOURCC('c','o','o','k') // Cooker G2 Audio Codec
+#define GST_RM_AUD_DNET GST_MAKE_FOURCC('d','n','e','t') // DolbyNet Audio Codec (low bitrate Dolby AC3)
+#define GST_RM_AUD_SIPR GST_MAKE_FOURCC('s','i','p','r') // Sipro/ACELP.NET Voice Codec
+#define GST_RM_AUD_RAAC GST_MAKE_FOURCC('r','a','a','c') // LE-AAC Audio Codec
+#define GST_RM_AUD_RACP GST_MAKE_FOURCC('r','a','c','p') // HE-AAC Audio Codec
+#define GST_RM_AUD_RALF GST_MAKE_FOURCC('r','a','l','f') // RealAudio Lossless
+#define GST_RM_AUD_ATRC GST_MAKE_FOURCC('a','t','r','c') // Sony ATRAC3 Audio Codec
+
+#define GST_RM_AUD_xRA4 GST_MAKE_FOURCC('.','r','a','4') // Not a real audio codec
+#define GST_RM_AUD_xRA5 GST_MAKE_FOURCC('.','r','a','5') // Not a real audio codec
+
+GST_ELEMENT_REGISTER_DECLARE (rmdemux);
+
+G_END_DECLS
+
+#endif /* __GST_RMDEMUX_H__ */
--- /dev/null
+/* GStreamer RealMedia utility functions
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "rmutils.h"
+
+gchar *
+gst_rm_utils_read_string8 (const guint8 * data, guint datalen,
+ guint * p_total_len)
+{
+ gint length;
+
+ if (p_total_len)
+ *p_total_len = 0;
+
+ if (datalen < 1)
+ return NULL;
+
+ length = GST_READ_UINT8 (data);
+ if (datalen < (1 + length))
+ return NULL;
+
+ if (p_total_len)
+ *p_total_len = 1 + length;
+
+ return g_strndup ((gchar *) data + 1, length);
+}
+
+gchar *
+gst_rm_utils_read_string16 (const guint8 * data, guint datalen,
+ guint * p_total_len)
+{
+ gint length;
+
+ if (p_total_len)
+ *p_total_len = 0;
+
+ if (datalen < 2)
+ return NULL;
+
+ length = GST_READ_UINT16_BE (data);
+ if (datalen < (2 + length))
+ return NULL;
+
+ if (p_total_len)
+ *p_total_len = 2 + length;
+
+ return g_strndup ((gchar *) data + 2, length);
+}
+
+GstTagList *
+gst_rm_utils_read_tags (const guint8 * data, guint datalen,
+ GstRmUtilsStringReadFunc read_string_func)
+{
+ const gchar *gst_tags[] = { GST_TAG_TITLE, GST_TAG_ARTIST,
+ GST_TAG_COPYRIGHT, GST_TAG_COMMENT
+ };
+ GstTagList *tags;
+ guint i;
+
+ g_assert (read_string_func != NULL);
+
+ GST_DEBUG ("File Content : (CONT) len = %d", datalen);
+
+ tags = gst_tag_list_new_empty ();
+
+ for (i = 0; i < G_N_ELEMENTS (gst_tags); ++i) {
+ gchar *str = NULL;
+ guint total_length = 0;
+
+ str = read_string_func (data, datalen, &total_length);
+ data += total_length;
+ datalen -= total_length;
+
+ if (str != NULL && !g_utf8_validate (str, -1, NULL)) {
+ const gchar *encoding;
+ gchar *tmp;
+
+ encoding = g_getenv ("GST_TAG_ENCODING");
+ if (encoding == NULL || *encoding == '\0') {
+ if (g_get_charset (&encoding))
+ encoding = "ISO-8859-15";
+ }
+ GST_DEBUG ("converting tag from %s to UTF-8", encoding);
+ tmp = g_convert_with_fallback (str, -1, "UTF-8", encoding, (gchar *) "*",
+ NULL, NULL, NULL);
+ g_free (str);
+ str = tmp;
+ }
+
+ GST_DEBUG ("%s = %s", gst_tags[i], GST_STR_NULL (str));
+ if (str != NULL && *str != '\0') {
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, gst_tags[i], str, NULL);
+ }
+ g_free (str);
+ }
+
+ if (gst_tag_list_n_tags (tags) > 0)
+ return tags;
+
+ gst_tag_list_unref (tags);
+ return NULL;
+}
+
+GstBuffer *
+gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf)
+{
+ GstMapInfo map;
+ guint8 *data, *end, tmp;
+
+ buf = gst_buffer_make_writable (buf);
+
+ /* dnet = byte-order swapped AC3 */
+ gst_buffer_map (buf, &map, GST_MAP_READWRITE);
+ data = map.data;
+ end = data + map.size;
+ while ((data + 1) < end) {
+ /* byte-swap */
+ tmp = data[0];
+ data[0] = data[1];
+ data[1] = tmp;
+ data += sizeof (guint16);
+ }
+ gst_buffer_unmap (buf, &map);
+ return buf;
+}
+
+static void
+gst_rm_utils_swap_nibbles (guint8 * data, gint idx1, gint idx2, gint len)
+{
+ guint8 *d1, *d2, tmp1 = 0, tmp2, tmp1n, tmp2n;
+
+ if ((idx2 & 1) && !(idx1 & 1)) {
+ /* align destination to a byte by swapping the indexes */
+ tmp1 = idx1;
+ idx1 = idx2;
+ idx2 = tmp1;
+ }
+ d1 = data + (idx1 >> 1);
+ d2 = data + (idx2 >> 1);
+
+ /* check if we have aligned offsets and we can copy bytes */
+ if ((idx1 & 1) == (idx2 & 1)) {
+ if (idx1 & 1) {
+ /* swap first nibble */
+ tmp1 = *d1;
+ tmp2 = *d2;
+ *d1++ = (tmp2 & 0xf0) | (tmp1 & 0x0f);
+ *d2++ = (tmp1 & 0xf0) | (tmp2 & 0x0f);
+ len--;
+ }
+ for (; len > 1; len -= 2) {
+ /* swap 2 nibbles */
+ tmp1 = *d1;
+ *d1++ = *d2;
+ *d2++ = tmp1;
+ }
+ if (len) {
+ /* swap leftover nibble */
+ tmp1 = *d1;
+ tmp2 = *d2;
+ *d1 = (tmp2 & 0x0f) | (tmp1 & 0xf0);
+ *d2 = (tmp1 & 0x0f) | (tmp2 & 0xf0);
+ }
+ } else {
+ /* preload nibbles from source */
+ tmp2n = *d1;
+ tmp2 = *d2;
+
+ for (; len > 1; len -= 2) {
+ /* assemble nibbles */
+ *d1++ = (tmp2n & 0x0f) | (tmp2 << 4);
+ tmp1n = *d1;
+ *d2++ = (tmp1n << 4) | (tmp1 >> 4);
+
+ tmp1 = tmp1n;
+ tmp2n = (tmp2 >> 4);
+ tmp2 = *d2;
+ }
+ if (len) {
+ /* last leftover */
+ *d1 = (tmp2 << 4) | (tmp2n & 0x0f);
+ *d2 = (tmp1 >> 4) | (tmp2 & 0xf0);
+ } else {
+ *d1 = (tmp1 & 0xf0) | (tmp2n);
+ }
+ }
+}
+
+static const gint sipr_swap_index[38][2] = {
+ {0, 63}, {1, 22}, {2, 44}, {3, 90},
+ {5, 81}, {7, 31}, {8, 86}, {9, 58},
+ {10, 36}, {12, 68}, {13, 39}, {14, 73},
+ {15, 53}, {16, 69}, {17, 57}, {19, 88},
+ {20, 34}, {21, 71}, {24, 46}, {25, 94},
+ {26, 54}, {28, 75}, {29, 50}, {32, 70},
+ {33, 92}, {35, 74}, {38, 85}, {40, 56},
+ {42, 87}, {43, 65}, {45, 59}, {48, 79},
+ {49, 93}, {51, 89}, {55, 95}, {61, 76},
+ {67, 83}, {77, 80}
+};
+
+GstBuffer *
+gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf)
+{
+ GstMapInfo map;
+ gint n, bs;
+ gsize size;
+
+ size = gst_buffer_get_size (buf);
+
+ /* split the packet in 96 blocks of nibbles */
+ bs = size * 2 / 96;
+ if (bs == 0)
+ return buf;
+
+ buf = gst_buffer_make_writable (buf);
+
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+
+ /* we need to perform 38 swaps on the blocks */
+ for (n = 0; n < 38; n++) {
+ gint idx1, idx2;
+
+ /* get the indexes of the blocks of nibbles that need swapping */
+ idx1 = bs * sipr_swap_index[n][0];
+ idx2 = bs * sipr_swap_index[n][1];
+
+ /* swap the blocks */
+ gst_rm_utils_swap_nibbles (map.data, idx1, idx2, bs);
+ }
+ gst_buffer_unmap (buf, &map);
+
+ return buf;
+}
+
+void
+gst_rm_utils_run_tests (void)
+{
+#if 0
+ guint8 tab1[] = { 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe };
+ guint8 tab2[8];
+
+ memcpy (tab2, tab1, 8);
+ gst_util_dump_mem (tab2, 8);
+
+ gst_rm_utils_swap_nibbles (tab2, 0, 8, 4);
+ gst_util_dump_mem (tab2, 8);
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 0, 8, 5);
+ gst_util_dump_mem (tab2, 8);
+
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 1, 8, 4);
+ gst_util_dump_mem (tab2, 8);
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 1, 8, 5);
+ gst_util_dump_mem (tab2, 8);
+
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 0, 9, 4);
+ gst_util_dump_mem (tab2, 8);
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 0, 9, 5);
+ gst_util_dump_mem (tab2, 8);
+
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 1, 9, 4);
+ gst_util_dump_mem (tab2, 8);
+ memcpy (tab2, tab1, 8);
+ gst_rm_utils_swap_nibbles (tab2, 1, 9, 5);
+ gst_util_dump_mem (tab2, 8);
+#endif
+}
--- /dev/null
+/* GStreamer RealMedia utility functions
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RM_UTILS_H__
+#define __GST_RM_UTILS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef gchar * (*GstRmUtilsStringReadFunc) (const guint8 * data, guint datalen, guint * p_strlen);
+
+gchar *gst_rm_utils_read_string8 (const guint8 * data,
+ guint datalen,
+ guint * p_totallen);
+
+gchar *gst_rm_utils_read_string16 (const guint8 * data,
+ guint datalen,
+ guint * p_totallen);
+
+GstTagList *gst_rm_utils_read_tags (const guint8 * data,
+ guint datalen,
+ GstRmUtilsStringReadFunc func);
+
+GstBuffer *gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf);
+GstBuffer *gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf);
+
+void gst_rm_utils_run_tests (void);
+
+
+G_END_DECLS
+
+#endif /* __GST_RM_UTILS_H__ */
+
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rtspreal
+ * @title: rtspreal
+ *
+ * A RealMedia RTSP extension
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <gst/rtsp/gstrtspextension.h>
+
+#include "realhash.h"
+#include "rtspreal.h"
+#include "asmrules.h"
+
+GST_DEBUG_CATEGORY_STATIC (rtspreal_debug);
+#define GST_CAT_DEFAULT (rtspreal_debug)
+
+#define SERVER_PREFIX "RealServer"
+#define DEFAULT_BANDWIDTH "10485800"
+
+static GstRTSPResult
+rtsp_ext_real_get_transports (GstRTSPExtension * ext,
+ GstRTSPLowerTrans protocols, gchar ** transport)
+{
+ GstRTSPReal *ctx = (GstRTSPReal *) ext;
+ GString *str;
+
+ if (!ctx->isreal)
+ return GST_RTSP_OK;
+
+ GST_DEBUG_OBJECT (ext, "generating transports for %d", protocols);
+
+ str = g_string_new ("");
+
+ /*
+ if (protocols & GST_RTSP_LOWER_TRANS_UDP_MCAST) {
+ g_string_append (str, "x-real-rdt/mcast;client_port=%%u1;mode=play,");
+ }
+ if (protocols & GST_RTSP_LOWER_TRANS_UDP) {
+ g_string_append (str, "x-real-rdt/udp;client_port=%%u1;mode=play,");
+ g_string_append (str, "x-pn-tng/udp;client_port=%%u1;mode=play,");
+ }
+ */
+ if (protocols & GST_RTSP_LOWER_TRANS_TCP) {
+ g_string_append (str, "x-real-rdt/tcp;mode=play,");
+ g_string_append (str, "x-pn-tng/tcp;mode=play,");
+ }
+
+ /* if we added something, remove trailing ',' */
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 1);
+
+ *transport = g_string_free (str, FALSE);
+
+ return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+ GstRTSPReal *ctx = (GstRTSPReal *) ext;
+
+ switch (request->type_data.request.method) {
+ case GST_RTSP_OPTIONS:
+ {
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_USER_AGENT,
+ //"RealMedia Player (" GST_PACKAGE_NAME ")");
+ "RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_CHALLENGE,
+ "9e26d33f2984236010ef6253fb1887f7");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_COMPANY_ID,
+ "KnKV4M4I/B2FjJ1TToLycw==");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
+ "00000000-0000-0000-0000-000000000000");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_PLAYER_START_TIME,
+ "[28/03/2003:22:50:23 00:00]");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
+ "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
+ ctx->isreal = FALSE;
+ break;
+ }
+ case GST_RTSP_DESCRIBE:
+ {
+ if (ctx->isreal) {
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_BANDWIDTH,
+ DEFAULT_BANDWIDTH);
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
+ "00000000-0000-0000-0000-000000000000");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
+ "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_MAX_ASM_WIDTH, "1");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_LANGUAGE, "en-US");
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_REQUIRE,
+ "com.real.retain-entity-for-setup");
+ }
+ break;
+ }
+ case GST_RTSP_SETUP:
+ {
+ if (ctx->isreal) {
+ gchar *value =
+ g_strdup_printf ("%s, sd=%s", ctx->challenge2, ctx->checksum);
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_REAL_CHALLENGE2,
+ value);
+ gst_rtsp_message_add_header (request, GST_RTSP_HDR_IF_MATCH, ctx->etag);
+ g_free (value);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+rtsp_ext_real_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+ GstRTSPMessage * resp)
+{
+ GstRTSPReal *ctx = (GstRTSPReal *) ext;
+
+ switch (req->type_data.request.method) {
+ case GST_RTSP_OPTIONS:
+ {
+ gchar *challenge1 = NULL;
+ gchar *server = NULL;
+
+ gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
+
+ gst_rtsp_message_get_header (resp, GST_RTSP_HDR_REAL_CHALLENGE1,
+ &challenge1, 0);
+ if (!challenge1)
+ goto no_challenge1;
+
+ gst_rtsp_ext_real_calc_response_and_checksum (ctx->challenge2,
+ ctx->checksum, challenge1);
+
+ GST_DEBUG_OBJECT (ctx, "Found Real challenge tag");
+ ctx->isreal = TRUE;
+ break;
+ }
+ case GST_RTSP_DESCRIBE:
+ {
+ gchar *etag = NULL;
+ guint len;
+
+ gst_rtsp_message_get_header (resp, GST_RTSP_HDR_ETAG, &etag, 0);
+ if (etag) {
+ len = sizeof (ctx->etag);
+ strncpy (ctx->etag, etag, len);
+ ctx->etag[len - 1] = '\0';
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return GST_RTSP_OK;
+
+ /* ERRORS */
+no_challenge1:
+ {
+ GST_DEBUG_OBJECT (ctx, "Could not find challenge tag.");
+ ctx->isreal = FALSE;
+ return GST_RTSP_OK;
+ }
+}
+
+#define ENSURE_SIZE(size) \
+G_STMT_START { \
+ while (data_len < size) { \
+ data_len += 1024; \
+ data = g_realloc (data, data_len); \
+ } \
+} G_STMT_END
+
+#define READ_BUFFER_GEN(src, func, name, dest, dest_len) \
+G_STMT_START { \
+ dest = (gchar *)func (src, name); \
+ dest_len = 0; \
+ if (!dest) { \
+ dest = (char *) ""; \
+ } \
+ else if (!strncmp (dest, "buffer;\"", 8)) { \
+ dest += 8; \
+ dest_len = strlen (dest) - 1; \
+ dest[dest_len] = '\0'; \
+ g_base64_decode_inplace (dest, &dest_len); \
+ } \
+} G_STMT_END
+
+#define READ_BUFFER(sdp, name, dest, dest_len) \
+ READ_BUFFER_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest, dest_len)
+#define READ_BUFFER_M(media, name, dest, dest_len) \
+ READ_BUFFER_GEN(media, gst_sdp_media_get_attribute_val, name, dest, dest_len)
+
+#define READ_INT_GEN(src, func, name, dest) \
+G_STMT_START { \
+ const gchar *val = func (src, name); \
+ if (val && !strncmp (val, "integer;", 8)) \
+ dest = atoi (val + 8); \
+ else \
+ dest = 0; \
+} G_STMT_END
+
+#define READ_INT(sdp, name, dest) \
+ READ_INT_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest)
+#define READ_INT_M(media, name, dest) \
+ READ_INT_GEN(media, gst_sdp_media_get_attribute_val, name, dest)
+
+#define READ_STRING(media, name, dest, dest_len) \
+G_STMT_START { \
+ const gchar *val = gst_sdp_media_get_attribute_val (media, name); \
+ if (val && !strncmp (val, "string;\"", 8)) { \
+ dest = (gchar *) val + 8; \
+ dest_len = strlen (dest) - 1; \
+ dest[dest_len] = '\0'; \
+ } else { \
+ dest = (char *) ""; \
+ dest_len = 0; \
+ } \
+} G_STMT_END
+
+#define WRITE_STRING1(datap, str, str_len) \
+G_STMT_START { \
+ *datap = str_len; \
+ memcpy ((datap) + 1, str, str_len); \
+ datap += str_len + 1; \
+} G_STMT_END
+
+#define WRITE_STRING2(datap, str, str_len) \
+G_STMT_START { \
+ GST_WRITE_UINT16_BE (datap, str_len); \
+ memcpy (datap + 2, str, str_len); \
+ datap += str_len + 2; \
+} G_STMT_END
+
+static GstRTSPResult
+rtsp_ext_real_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
+ GstStructure * props)
+{
+ GstRTSPReal *ctx = (GstRTSPReal *) ext;
+ guint size;
+ gint i;
+ gchar *title, *author, *copyright, *comment;
+ gsize title_len, author_len, copyright_len, comment_len;
+ guint8 *data = NULL, *datap;
+ guint data_len = 0, offset;
+ GstBuffer *buf;
+ gchar *opaque_data;
+ gsize opaque_data_len, asm_rule_book_len;
+ GHashTable *vars;
+ GString *rules;
+
+ /* don't bother for non-real formats */
+ READ_INT (sdp, "IsRealDataType", ctx->isreal);
+ if (!ctx->isreal)
+ return TRUE;
+
+ /* Force PAUSE | PLAY */
+ //src->methods |= GST_RTSP_PLAY | GST_RTSP_PAUSE;
+
+ ctx->n_streams = gst_sdp_message_medias_len (sdp);
+
+ ctx->max_bit_rate = 0;
+ ctx->avg_bit_rate = 0;
+ ctx->max_packet_size = 0;
+ ctx->avg_packet_size = 0;
+ ctx->duration = 0;
+
+ for (i = 0; i < ctx->n_streams; i++) {
+ const GstSDPMedia *media;
+ gint intval;
+
+ media = gst_sdp_message_get_media (sdp, i);
+
+ READ_INT_M (media, "MaxBitRate", intval);
+ ctx->max_bit_rate += intval;
+ READ_INT_M (media, "AvgBitRate", intval);
+ ctx->avg_bit_rate += intval;
+ READ_INT_M (media, "MaxPacketSize", intval);
+ ctx->max_packet_size = MAX (ctx->max_packet_size, intval);
+ READ_INT_M (media, "AvgPacketSize", intval);
+ ctx->avg_packet_size = (ctx->avg_packet_size * i + intval) / (i + 1);
+ READ_INT_M (media, "Duration", intval);
+ ctx->duration = MAX (ctx->duration, intval);
+ }
+
+ /* FIXME: use GstByteWriter to write the header */
+ /* PROP */
+ offset = 0;
+ size = 50;
+ ENSURE_SIZE (size);
+ datap = data + offset;
+
+ memcpy (datap + 0, "PROP", 4);
+ GST_WRITE_UINT32_BE (datap + 4, size);
+ GST_WRITE_UINT16_BE (datap + 8, 0);
+ GST_WRITE_UINT32_BE (datap + 10, ctx->max_bit_rate);
+ GST_WRITE_UINT32_BE (datap + 14, ctx->avg_bit_rate);
+ GST_WRITE_UINT32_BE (datap + 18, ctx->max_packet_size);
+ GST_WRITE_UINT32_BE (datap + 22, ctx->avg_packet_size);
+ GST_WRITE_UINT32_BE (datap + 26, 0);
+ GST_WRITE_UINT32_BE (datap + 30, ctx->duration);
+ GST_WRITE_UINT32_BE (datap + 34, 0);
+ GST_WRITE_UINT32_BE (datap + 38, 0);
+ GST_WRITE_UINT32_BE (datap + 42, 0);
+ GST_WRITE_UINT16_BE (datap + 46, ctx->n_streams);
+ GST_WRITE_UINT16_BE (datap + 48, 0);
+ offset += size;
+
+ /* CONT */
+ READ_BUFFER (sdp, "Title", title, title_len);
+ READ_BUFFER (sdp, "Author", author, author_len);
+ READ_BUFFER (sdp, "Comment", comment, comment_len);
+ READ_BUFFER (sdp, "Copyright", copyright, copyright_len);
+
+ size = 18 + title_len + author_len + comment_len + copyright_len;
+ ENSURE_SIZE (offset + size);
+ datap = data + offset;
+
+ memcpy (datap, "CONT", 4);
+ GST_WRITE_UINT32_BE (datap + 4, size);
+ GST_WRITE_UINT16_BE (datap + 8, 0); /* Version */
+ datap += 10;
+ WRITE_STRING2 (datap, title, title_len);
+ WRITE_STRING2 (datap, author, author_len);
+ WRITE_STRING2 (datap, copyright, copyright_len);
+ WRITE_STRING2 (datap, comment, comment_len);
+ offset += size;
+
+ /* fix the hashtale for the rule parser */
+ rules = g_string_new ("");
+ vars = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (vars, (gchar *) "Bandwidth",
+ (gchar *) DEFAULT_BANDWIDTH);
+
+ /* MDPR */
+ for (i = 0; i < ctx->n_streams; i++) {
+ const GstSDPMedia *media;
+ guint32 len;
+ GstRTSPRealStream *stream;
+ gchar *str;
+ gint rulematches[MAX_RULEMATCHES];
+ gint sel, j, n;
+
+ media = gst_sdp_message_get_media (sdp, i);
+
+ if (media->media && !strcmp (media->media, "data"))
+ continue;
+
+ stream = g_new0 (GstRTSPRealStream, 1);
+ ctx->streams = g_list_append (ctx->streams, stream);
+
+ READ_INT_M (media, "MaxBitRate", stream->max_bit_rate);
+ READ_INT_M (media, "AvgBitRate", stream->avg_bit_rate);
+ READ_INT_M (media, "MaxPacketSize", stream->max_packet_size);
+ READ_INT_M (media, "AvgPacketSize", stream->avg_packet_size);
+ READ_INT_M (media, "StartTime", stream->start_time);
+ READ_INT_M (media, "Preroll", stream->preroll);
+ READ_INT_M (media, "Duration", stream->duration);
+ READ_STRING (media, "StreamName", str, stream->stream_name_len);
+ stream->stream_name = g_strndup (str, stream->stream_name_len);
+ READ_STRING (media, "mimetype", str, stream->mime_type_len);
+ stream->mime_type = g_strndup (str, stream->mime_type_len);
+
+ /* FIXME: Depending on the current bandwidth, we need to select one
+ * bandwidth out of a list offered by the server. Someone needs to write
+ * a parser for strings like
+ *
+ * #($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,priority=9;
+ * #($Bandwidth >= 67959) && ($Bandwidth < 167959),AverageBandwidth=67959,
+ * Priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),
+ * AverageBandwidth=0,Priority=5,OnDepend=\"1\";
+ * #($Bandwidth >= 167959) && ($Bandwidth < 267959),
+ * AverageBandwidth=167959,Priority=9;
+ * #($Bandwidth >= 167959) && ($Bandwidth < 267959),AverageBandwidth=0,
+ * Priority=5,OnDepend=\"3\";#($Bandwidth >= 267959),
+ * AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959),
+ * AverageBandwidth=0,Priority=5,OnDepend=\"5\";
+ *
+ * As I don't know how to do that, I just use the first entry (sel = 0).
+ * But to give you a starting point, I offer you above string
+ * in the variable 'asm_rule_book'.
+ */
+ READ_STRING (media, "ASMRuleBook", str, asm_rule_book_len);
+ stream->rulebook = gst_asm_rule_book_new (str);
+
+ n = gst_asm_rule_book_match (stream->rulebook, vars, rulematches);
+ for (j = 0; j < n; j++) {
+ g_string_append_printf (rules, "stream=%u;rule=%u,", i, rulematches[j]);
+ }
+
+ /* get the MLTI for the first matched rules */
+ sel = rulematches[0];
+
+ READ_BUFFER_M (media, "OpaqueData", opaque_data, opaque_data_len);
+
+ if (opaque_data_len < 4) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ if (strncmp (opaque_data, "MLTI", 4)) {
+ GST_DEBUG_OBJECT (ctx, "no MLTI found, appending all");
+ stream->type_specific_data_len = opaque_data_len;
+ stream->type_specific_data = g_memdup2 (opaque_data, opaque_data_len);
+ goto no_type_specific;
+ }
+ opaque_data += 4;
+ opaque_data_len -= 4;
+
+ if (opaque_data_len < 2) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ stream->num_rules = GST_READ_UINT16_BE (opaque_data);
+ opaque_data += 2;
+ opaque_data_len -= 2;
+
+ if (sel >= stream->num_rules) {
+ GST_DEBUG_OBJECT (ctx, "sel %d >= num_rules %d", sel, stream->num_rules);
+ goto strange_opaque_data;
+ }
+
+ if (opaque_data_len < 2 * sel) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
+ " < 2 * sel (%d)", opaque_data_len, 2 * sel);
+ goto strange_opaque_data;
+ }
+ opaque_data += 2 * sel;
+ opaque_data_len -= 2 * sel;
+
+ if (opaque_data_len < 2) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ stream->codec = GST_READ_UINT16_BE (opaque_data);
+ opaque_data += 2;
+ opaque_data_len -= 2;
+
+ if (opaque_data_len < 2 * (stream->num_rules - sel - 1)) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
+ " < %d", opaque_data_len, 2 * (stream->num_rules - sel - 1));
+ goto strange_opaque_data;
+ }
+ opaque_data += 2 * (stream->num_rules - sel - 1);
+ opaque_data_len -= 2 * (stream->num_rules - sel - 1);
+
+ if (opaque_data_len < 2) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ stream->num_rules = GST_READ_UINT16_BE (opaque_data);
+ opaque_data += 2;
+ opaque_data_len -= 2;
+
+ if (stream->codec > stream->num_rules) {
+ GST_DEBUG_OBJECT (ctx, "codec %d > num_rules %d", stream->codec,
+ stream->num_rules);
+ goto strange_opaque_data;
+ }
+
+ for (j = 0; j < stream->codec; j++) {
+ if (opaque_data_len < 4) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ len = GST_READ_UINT32_BE (opaque_data);
+ opaque_data += 4;
+ opaque_data_len -= 4;
+
+ if (opaque_data_len < len) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < len %d",
+ opaque_data_len, len);
+ goto strange_opaque_data;
+ }
+ opaque_data += len;
+ opaque_data_len -= len;
+ }
+
+ if (opaque_data_len < 4) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+ opaque_data_len);
+ goto strange_opaque_data;
+ }
+ stream->type_specific_data_len = GST_READ_UINT32_BE (opaque_data);
+ opaque_data += 4;
+ opaque_data_len -= 4;
+
+ if (opaque_data_len < stream->type_specific_data_len) {
+ GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < %d",
+ opaque_data_len, stream->type_specific_data_len);
+ goto strange_opaque_data;
+ }
+ stream->type_specific_data =
+ g_memdup2 (opaque_data, stream->type_specific_data_len);
+
+ no_type_specific:
+ size =
+ 46 + stream->stream_name_len + stream->mime_type_len +
+ stream->type_specific_data_len;
+ ENSURE_SIZE (offset + size);
+ datap = data + offset;
+
+ memcpy (datap, "MDPR", 4);
+ GST_WRITE_UINT32_BE (datap + 4, size);
+ GST_WRITE_UINT16_BE (datap + 8, 0);
+ GST_WRITE_UINT16_BE (datap + 10, i);
+ GST_WRITE_UINT32_BE (datap + 12, stream->max_bit_rate);
+ GST_WRITE_UINT32_BE (datap + 16, stream->avg_bit_rate);
+ GST_WRITE_UINT32_BE (datap + 20, stream->max_packet_size);
+ GST_WRITE_UINT32_BE (datap + 24, stream->avg_packet_size);
+ GST_WRITE_UINT32_BE (datap + 28, stream->start_time);
+ GST_WRITE_UINT32_BE (datap + 32, stream->preroll);
+ GST_WRITE_UINT32_BE (datap + 36, stream->duration);
+ datap += 40;
+ WRITE_STRING1 (datap, stream->stream_name, stream->stream_name_len);
+ WRITE_STRING1 (datap, stream->mime_type, stream->mime_type_len);
+ GST_WRITE_UINT32_BE (datap, stream->type_specific_data_len);
+ if (stream->type_specific_data_len)
+ memcpy (datap + 4, stream->type_specific_data,
+ stream->type_specific_data_len);
+ offset += size;
+ }
+
+ /* destroy the rulebook hashtable now */
+ g_hash_table_destroy (vars);
+
+ /* strip final , if we added some stream rules */
+ if (rules->len > 0) {
+ rules = g_string_truncate (rules, rules->len - 1);
+ }
+
+ /* and store rules in the context */
+ ctx->rules = g_string_free (rules, FALSE);
+
+ /* DATA */
+ size = 18;
+ ENSURE_SIZE (offset + size);
+ datap = data + offset;
+
+ memcpy (datap, "DATA", 4);
+ GST_WRITE_UINT32_BE (datap + 4, size);
+ GST_WRITE_UINT16_BE (datap + 8, 0);
+ GST_WRITE_UINT32_BE (datap + 10, 0); /* number of packets */
+ GST_WRITE_UINT32_BE (datap + 14, 0); /* next data header */
+ offset += size;
+
+ buf = gst_buffer_new_wrapped (data, offset);
+
+ /* Set on caps */
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
+ gst_structure_set (props, "config", GST_TYPE_BUFFER, buf, NULL);
+ gst_buffer_unref (buf);
+
+ /* Overwrite encoding and media fields */
+ gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-REAL-RDT", NULL);
+ gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
+
+ return TRUE;
+
+ /* ERRORS */
+strange_opaque_data:
+ {
+ g_string_free (rules, TRUE);
+ g_hash_table_destroy (vars);
+ g_free (data);
+
+ GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE, ("Strange opaque data."), (NULL));
+ return FALSE;
+ }
+}
+
+static GstRTSPResult
+rtsp_ext_real_stream_select (GstRTSPExtension * ext, GstRTSPUrl * url)
+{
+ GstRTSPReal *ctx = (GstRTSPReal *) ext;
+ GstRTSPResult res;
+ GstRTSPMessage request = { 0 };
+ GstRTSPMessage response = { 0 };
+ gchar *req_url;
+
+ if (!ctx->isreal)
+ return GST_RTSP_OK;
+
+ if (!ctx->rules)
+ return GST_RTSP_OK;
+
+ req_url = gst_rtsp_url_get_request_uri (url);
+
+ /* create SET_PARAMETER */
+ if ((res = gst_rtsp_message_init_request (&request, GST_RTSP_SET_PARAMETER,
+ req_url)) < 0)
+ goto create_request_failed;
+
+ g_free (req_url);
+
+ gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SUBSCRIBE, ctx->rules);
+
+ /* send SET_PARAMETER */
+ if ((res = gst_rtsp_extension_send (ext, &request, &response)) < 0)
+ goto send_error;
+
+ gst_rtsp_message_unset (&request);
+ gst_rtsp_message_unset (&response);
+
+ return GST_RTSP_OK;
+
+ /* ERRORS */
+create_request_failed:
+ {
+ GST_ELEMENT_ERROR (ctx, LIBRARY, INIT,
+ ("Could not create request."), (NULL));
+ g_free (req_url);
+ goto reset;
+ }
+send_error:
+ {
+ GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE,
+ ("Could not send message."), (NULL));
+ goto reset;
+ }
+reset:
+ {
+ gst_rtsp_message_unset (&request);
+ gst_rtsp_message_unset (&response);
+ return res;
+ }
+}
+
+static void gst_rtsp_real_extension_init (gpointer g_iface,
+ gpointer iface_data);
+static void gst_rtsp_real_finalize (GObject * obj);
+
+#define gst_rtsp_real_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstRTSPReal, gst_rtsp_real, GST_TYPE_ELEMENT,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
+ gst_rtsp_real_extension_init));
+GST_ELEMENT_REGISTER_DEFINE (rtspreal, "rtspreal",
+ GST_RANK_MARGINAL, GST_TYPE_RTSP_REAL);
+
+static void
+gst_rtsp_real_class_init (GstRTSPRealClass * g_class)
+{
+ GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *gstelement_class = (GstElementClass *) g_class;
+
+ gobject_class->finalize = gst_rtsp_real_finalize;
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "RealMedia RTSP Extension", "Network/Extension/Protocol",
+ "Extends RTSP so that it can handle RealMedia setup",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
+ GST_DEBUG_CATEGORY_INIT (rtspreal_debug, "rtspreal", 0,
+ "RealMedia RTSP extension");
+}
+
+static void
+gst_rtsp_real_init (GstRTSPReal * rtspreal)
+{
+ rtspreal->isreal = FALSE;
+}
+
+static void
+gst_rtsp_stream_free (GstRTSPRealStream * stream)
+{
+ g_free (stream->stream_name);
+ g_free (stream->mime_type);
+ gst_asm_rule_book_free (stream->rulebook);
+ g_free (stream->type_specific_data);
+
+ g_free (stream);
+}
+
+static void
+gst_rtsp_real_finalize (GObject * obj)
+{
+ GstRTSPReal *r = (GstRTSPReal *) obj;
+
+ g_list_foreach (r->streams, (GFunc) gst_rtsp_stream_free, NULL);
+ g_list_free (r->streams);
+ g_free (r->rules);
+
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_rtsp_real_extension_init (gpointer g_iface, gpointer iface_data)
+{
+ GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
+
+ iface->before_send = rtsp_ext_real_before_send;
+ iface->after_send = rtsp_ext_real_after_send;
+ iface->parse_sdp = rtsp_ext_real_parse_sdp;
+ iface->stream_select = rtsp_ext_real_stream_select;
+ iface->get_transports = rtsp_ext_real_get_transports;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RTSP_REAL_H__
+#define __GST_RTSP_REAL_H__
+
+#include <gst/gst.h>
+
+#include "asmrules.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTSP_REAL (gst_rtsp_real_get_type())
+#define GST_IS_RTSP_REAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_REAL))
+#define GST_IS_RTSP_REAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_REAL))
+#define GST_RTSP_REAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_REAL, GstRTSPReal))
+#define GST_RTSP_REAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_REAL, GstRTSPRealClass))
+
+typedef struct _GstRTSPReal GstRTSPReal;
+typedef struct _GstRTSPRealClass GstRTSPRealClass;
+
+typedef struct _GstRTSPRealStream GstRTSPRealStream;
+
+struct _GstRTSPRealStream {
+ guint id;
+ guint max_bit_rate;
+ guint avg_bit_rate;
+ guint max_packet_size;
+ guint avg_packet_size;
+ guint start_time;
+ guint preroll;
+ guint duration;
+ gchar *stream_name;
+ guint stream_name_len;
+ gchar *mime_type;
+ guint mime_type_len;
+
+ GstASMRuleBook *rulebook;
+
+ gchar *type_specific_data;
+ guint type_specific_data_len;
+
+ guint16 num_rules, j, sel, codec;
+};
+
+struct _GstRTSPReal {
+ GstElement element;
+
+ gchar checksum[34];
+ gchar challenge2[64];
+ gchar etag[64];
+ gboolean isreal;
+
+ guint n_streams;
+ GList *streams;
+
+ guint max_bit_rate;
+ guint avg_bit_rate;
+ guint max_packet_size;
+ guint avg_packet_size;
+ guint duration;
+
+ gchar *rules;
+};
+
+struct _GstRTSPRealClass {
+ GstElementClass parent_class;
+};
+
+GType gst_rtsp_real_get_type(void);
+
+GST_ELEMENT_REGISTER_DECLARE (rtspreal);
+
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_REAL_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2006 Christophe Fergeau <teuf@gnome.org>
+ * Copyright (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
+
+
+/**
+ * SECTION:element-xingmux
+ * @title: xingmux
+ *
+ * xingmux adds a Xing header to MP3 files. This contains information about the duration and size
+ * of the file and a seek table and is very useful for getting an almost correct duration and better
+ * seeking on VBR MP3 files.
+ *
+ * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 audiotestsrc num-buffers=1000 ! audioconvert ! lamemp3enc ! xingmux ! filesink location=test.mp3
+ * gst-launch-1.0 filesrc location=test.mp3 ! xingmux ! filesink location=test2.mp3
+ * gst-launch-1.0 filesrc location=test.mp3 ! mp3parse ! xingmux ! filesink location=test2.mp3
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include "gstxingmux.h"
+
+GST_DEBUG_CATEGORY_STATIC (xing_mux_debug);
+#define GST_CAT_DEFAULT xing_mux_debug
+
+#define gst_xing_mux_parent_class parent_class
+G_DEFINE_TYPE (GstXingMux, gst_xing_mux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (xingmux, "xingmux", GST_RANK_MARGINAL,
+ GST_TYPE_XING_MUX);
+
+/* Xing Header stuff */
+#define GST_XING_FRAME_FIELD (1 << 0)
+#define GST_XING_BYTES_FIELD (1 << 1)
+#define GST_XING_TOC_FIELD (1 << 2)
+#define GST_XING_QUALITY_FIELD (1 << 3)
+
+typedef struct _GstXingSeekEntry
+{
+ gint64 timestamp;
+ gint byte;
+} GstXingSeekEntry;
+
+static inline GstXingSeekEntry *
+gst_xing_seek_entry_new (void)
+{
+ return g_slice_new (GstXingSeekEntry);
+}
+
+static inline void
+gst_xing_seek_entry_free (GstXingSeekEntry * entry)
+{
+ g_slice_free (GstXingSeekEntry, entry);
+}
+
+static void gst_xing_mux_finalize (GObject * obj);
+static GstStateChangeReturn
+gst_xing_mux_change_state (GstElement * element, GstStateChange transition);
+static GstFlowReturn gst_xing_mux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_xing_mux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+
+static GstStaticPadTemplate gst_xing_mux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, "
+ "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
+
+
+static GstStaticPadTemplate gst_xing_mux_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, "
+ "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
+static const guint mp3types_bitrates[2][3][16] = {
+ {
+ {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,},
+ {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
+ {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}
+ },
+ {
+ {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
+ {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
+ {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}
+ },
+};
+
+static const guint mp3types_freqs[3][3] = { {44100, 48000, 32000},
+{22050, 24000, 16000},
+{11025, 12000, 8000}
+};
+
+static gboolean
+parse_header (guint32 header, guint * ret_size, guint * ret_spf,
+ gulong * ret_rate)
+{
+ guint length, spf;
+ gulong samplerate, bitrate, layer, padding;
+ gint lsf, mpg25;
+
+ if ((header & 0xffe00000) != 0xffe00000) {
+ g_warning ("invalid sync");
+ return FALSE;
+ }
+
+ if (((header >> 19) & 3) == 0x01) {
+ g_warning ("invalid MPEG version");
+ return FALSE;
+ }
+
+ if (((header >> 17) & 3) == 0x00) {
+ g_warning ("invalid MPEG layer");
+ return FALSE;
+ }
+
+ if (((header >> 12) & 0xf) == 0xf || ((header >> 12) & 0xf) == 0x0) {
+ g_warning ("invalid bitrate");
+ return FALSE;
+ }
+
+ if (((header >> 10) & 0x3) == 0x3) {
+ g_warning ("invalid sampling rate");
+ return FALSE;
+ }
+
+ if (header & 0x00000002) {
+ g_warning ("invalid emphasis");
+ return FALSE;
+ }
+
+ if (header & (1 << 20)) {
+ lsf = (header & (1 << 19)) ? 0 : 1;
+ mpg25 = 0;
+ } else {
+ lsf = 1;
+ mpg25 = 1;
+ }
+
+ layer = 4 - ((header >> 17) & 0x3);
+
+ bitrate = (header >> 12) & 0xF;
+ bitrate = mp3types_bitrates[lsf][layer - 1][bitrate] * 1000;
+ if (bitrate == 0)
+ return FALSE;
+
+ samplerate = (header >> 10) & 0x3;
+ samplerate = mp3types_freqs[lsf + mpg25][samplerate];
+
+ padding = (header >> 9) & 0x1;
+
+ switch (layer) {
+ case 1:
+ length = 4 * ((bitrate * 12) / samplerate + padding);
+ break;
+ case 2:
+ length = (bitrate * 144) / samplerate + padding;
+ break;
+ default:
+ case 3:
+ length = (bitrate * 144) / (samplerate << lsf) + padding;
+ break;
+ }
+
+ if (layer == 1)
+ spf = 384;
+ else if (layer == 2 || lsf == 0)
+ spf = 1152;
+ else
+ spf = 576;
+
+ if (ret_size)
+ *ret_size = length;
+ if (ret_spf)
+ *ret_spf = spf;
+ if (ret_rate)
+ *ret_rate = samplerate;
+
+ return TRUE;
+}
+
+static guint
+get_xing_offset (guint32 header)
+{
+ guint mpeg_version = (header >> 19) & 0x3;
+ guint channel_mode = (header >> 6) & 0x3;
+
+ if (mpeg_version == 0x3) {
+ if (channel_mode == 0x3) {
+ return 0x11;
+ } else {
+ return 0x20;
+ }
+ } else {
+ if (channel_mode == 0x3) {
+ return 0x09;
+ } else {
+ return 0x11;
+ }
+ }
+}
+
+static gboolean
+has_xing_header (guint32 header, GstBuffer * buffer, gsize size)
+{
+ gboolean ret;
+ GstMapInfo map;
+ guint8 *data;
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ data = map.data;
+ data += 4;
+ data += get_xing_offset (header);
+
+ if (memcmp (data, "Xing", 4) == 0 ||
+ memcmp (data, "Info", 4) == 0 || memcmp (data, "VBRI", 4) == 0)
+ ret = TRUE;
+ else
+ ret = FALSE;
+
+ gst_buffer_unmap (buffer, &map);
+ return ret;
+}
+
+static GstBuffer *
+generate_xing_header (GstXingMux * xing)
+{
+ guint8 *xing_flags;
+ guint32 xing_flags_tmp = 0;
+ GstBuffer *xing_header;
+ GstMapInfo map;
+ guchar *data;
+
+ guint32 header;
+ guint32 header_be;
+ guint size, spf, xing_offset;
+ gulong rate;
+ guint bitrate = 0x00;
+
+ gint64 duration;
+ gint64 byte_count;
+
+ header = xing->first_header;
+
+ /* Set bitrate and choose lowest possible size */
+ do {
+ bitrate++;
+
+ header &= 0xffff0fff;
+ header |= bitrate << 12;
+
+ if (!parse_header (header, &size, &spf, &rate)) {
+ GST_ERROR ("Failed to parse header!");
+ return NULL;
+ }
+ xing_offset = get_xing_offset (header);
+ } while (size < (4 + xing_offset + 4 + 4 + 4 + 4 + 100) && bitrate < 0xe);
+
+ if (bitrate == 0xe) {
+ GST_ERROR ("No usable bitrate found!");
+ return NULL;
+ }
+
+ xing_header = gst_buffer_new_and_alloc (size);
+
+ gst_buffer_map (xing_header, &map, GST_MAP_WRITE);
+ data = map.data;
+ memset (data, 0, size);
+ header_be = GUINT32_TO_BE (header);
+ memcpy (data, &header_be, 4);
+
+ data += 4;
+ data += xing_offset;
+
+ memcpy (data, "Xing", 4);
+ data += 4;
+
+ xing_flags = data;
+ data += 4;
+
+ if (xing->duration != GST_CLOCK_TIME_NONE) {
+ duration = xing->duration;
+ } else {
+ GstFormat fmt = GST_FORMAT_TIME;
+
+ if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &duration))
+ duration = GST_CLOCK_TIME_NONE;
+ }
+
+ if (duration != GST_CLOCK_TIME_NONE) {
+ guint32 number_of_frames;
+
+ /* The Xing Header contains a NumberOfFrames field, which verifies to:
+ * Duration = NumberOfFrames *SamplesPerFrame/SamplingRate
+ * SamplesPerFrame and SamplingRate are values for the current frame.
+ */
+ number_of_frames = gst_util_uint64_scale (duration, rate, GST_SECOND) / spf;
+ number_of_frames += 1; /* Xing Header Frame */
+ GST_DEBUG ("Setting number of frames to %u", number_of_frames);
+ number_of_frames = GUINT32_TO_BE (number_of_frames);
+ memcpy (data, &number_of_frames, 4);
+ xing_flags_tmp |= GST_XING_FRAME_FIELD;
+ data += 4;
+ }
+
+ if (xing->byte_count != 0) {
+ byte_count = xing->byte_count;
+ } else {
+ GstFormat fmt = GST_FORMAT_BYTES;
+
+ if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &byte_count))
+ byte_count = 0;
+ if (byte_count == -1)
+ byte_count = 0;
+ }
+
+ if (byte_count != 0) {
+ guint32 nbytes;
+
+ if (byte_count > G_MAXUINT32) {
+ GST_DEBUG ("Too large stream: %" G_GINT64_FORMAT " > %u bytes",
+ byte_count, G_MAXUINT32);
+ } else {
+ nbytes = byte_count;
+ GST_DEBUG ("Setting number of bytes to %u", nbytes);
+ nbytes = GUINT32_TO_BE (nbytes);
+ memcpy (data, &nbytes, 4);
+ xing_flags_tmp |= GST_XING_BYTES_FIELD;
+ data += 4;
+ }
+ }
+
+ if (xing->seek_table != NULL && byte_count != 0
+ && duration != GST_CLOCK_TIME_NONE) {
+ GList *it;
+ gint percent = 0;
+
+ xing_flags_tmp |= GST_XING_TOC_FIELD;
+
+ GST_DEBUG ("Writing seek table");
+ for (it = xing->seek_table; it != NULL && percent < 100; it = it->next) {
+ GstXingSeekEntry *entry = (GstXingSeekEntry *) it->data;
+ gint64 pos;
+ guchar byte;
+
+ while ((entry->timestamp * 100) / duration >= percent) {
+ pos = (entry->byte * 256) / byte_count;
+ GST_DEBUG (" %d %% -- %" G_GINT64_FORMAT " 1/256", percent, pos);
+ byte = (guchar) pos;
+ memcpy (data, &byte, 1);
+ data++;
+ percent++;
+ }
+ }
+
+ if (percent < 100) {
+ guchar b;
+ gint i;
+
+ memcpy (&b, data - 1, 1);
+
+ for (i = percent; i < 100; i++) {
+ GST_DEBUG (" %d %% -- %d 1/256", i, b);
+ memcpy (data, &b, 1);
+ data++;
+ }
+ }
+ }
+
+ GST_DEBUG ("Setting Xing flags to 0x%x\n", xing_flags_tmp);
+ xing_flags_tmp = GUINT32_TO_BE (xing_flags_tmp);
+ memcpy (xing_flags, &xing_flags_tmp, 4);
+ gst_buffer_unmap (xing_header, &map);
+ return xing_header;
+}
+
+static void
+gst_xing_mux_class_init (GstXingMuxClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_xing_mux_finalize);
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_xing_mux_change_state);
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_xing_mux_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_xing_mux_sink_template);
+
+ GST_DEBUG_CATEGORY_INIT (xing_mux_debug, "xingmux", 0, "Xing Header Muxer");
+
+ gst_element_class_set_static_metadata (gstelement_class, "MP3 Xing muxer",
+ "Formatter/Muxer/Metadata",
+ "Adds a Xing header to the beginning of a VBR MP3 file",
+ "Christophe Fergeau <teuf@gnome.org>");
+}
+
+static void
+gst_xing_mux_finalize (GObject * obj)
+{
+ GstXingMux *xing = GST_XING_MUX (obj);
+
+ if (xing->adapter) {
+ g_object_unref (xing->adapter);
+ xing->adapter = NULL;
+ }
+
+ if (xing->seek_table) {
+ g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
+ g_list_free (xing->seek_table);
+ xing->seek_table = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+xing_reset (GstXingMux * xing)
+{
+ xing->duration = GST_CLOCK_TIME_NONE;
+ xing->byte_count = 0;
+
+ gst_adapter_clear (xing->adapter);
+
+ if (xing->seek_table) {
+ g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
+ g_list_free (xing->seek_table);
+ xing->seek_table = NULL;
+ }
+
+ xing->sent_xing = FALSE;
+}
+
+
+static void
+gst_xing_mux_init (GstXingMux * xing)
+{
+ /* pad through which data comes in to the element */
+ xing->sinkpad =
+ gst_pad_new_from_static_template (&gst_xing_mux_sink_template, "sink");
+ gst_pad_set_chain_function (xing->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_xing_mux_chain));
+ gst_pad_set_event_function (xing->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_xing_mux_sink_event));
+ GST_PAD_SET_PROXY_CAPS (xing->sinkpad);
+ gst_element_add_pad (GST_ELEMENT (xing), xing->sinkpad);
+
+ /* pad through which data goes out of the element */
+ xing->srcpad =
+ gst_pad_new_from_static_template (&gst_xing_mux_src_template, "src");
+ gst_element_add_pad (GST_ELEMENT (xing), xing->srcpad);
+
+ xing->adapter = gst_adapter_new ();
+
+ xing_reset (xing);
+}
+
+static GstFlowReturn
+gst_xing_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstXingMux *xing = GST_XING_MUX (parent);
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ gst_adapter_push (xing->adapter, buffer);
+
+ while (gst_adapter_available (xing->adapter) >= 4) {
+ const guchar *data;
+ guint32 header;
+ GstBuffer *outbuf;
+ GstClockTime duration;
+ guint size, spf;
+ gulong rate;
+ GstXingSeekEntry *seek_entry;
+
+ data = gst_adapter_map (xing->adapter, 4);
+ header = GST_READ_UINT32_BE (data);
+ gst_adapter_unmap (xing->adapter);
+
+ if (!parse_header (header, &size, &spf, &rate)) {
+ GST_DEBUG ("Lost sync, resyncing");
+ gst_adapter_flush (xing->adapter, 1);
+ continue;
+ }
+
+ if (gst_adapter_available (xing->adapter) < size)
+ break;
+
+ outbuf = gst_adapter_take_buffer (xing->adapter, size);
+
+ if (!xing->sent_xing) {
+ if (has_xing_header (header, outbuf, size)) {
+ GST_LOG_OBJECT (xing, "Dropping old Xing header");
+ gst_buffer_unref (outbuf);
+ continue;
+ } else {
+ GstBuffer *xing_header;
+ guint64 xing_header_size;
+
+ xing->first_header = header;
+
+ xing_header = generate_xing_header (xing);
+
+ if (xing_header == NULL) {
+ GST_ERROR ("Can't generate Xing header");
+ gst_buffer_unref (outbuf);
+ return GST_FLOW_ERROR;
+ }
+
+ xing_header_size = gst_buffer_get_size (xing_header);
+
+ if ((ret = gst_pad_push (xing->srcpad, xing_header)) != GST_FLOW_OK) {
+ GST_ERROR_OBJECT (xing, "Failed to push Xing header: %s",
+ gst_flow_get_name (ret));
+ gst_buffer_unref (xing_header);
+ gst_buffer_unref (outbuf);
+ return ret;
+ }
+
+ xing->byte_count += xing_header_size;
+ xing->sent_xing = TRUE;
+ }
+ }
+
+ seek_entry = gst_xing_seek_entry_new ();
+ seek_entry->timestamp =
+ (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
+ /* Workaround for parsers checking that the first seek table entry is 0 */
+ seek_entry->byte = (seek_entry->timestamp == 0) ? 0 : xing->byte_count;
+ xing->seek_table = g_list_append (xing->seek_table, seek_entry);
+
+ duration = gst_util_uint64_scale_ceil (spf, GST_SECOND, rate);
+
+ GST_BUFFER_TIMESTAMP (outbuf) =
+ (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
+ GST_BUFFER_DURATION (outbuf) = duration;
+ GST_BUFFER_OFFSET (outbuf) = xing->byte_count;
+ xing->byte_count += gst_buffer_get_size (outbuf);
+ GST_BUFFER_OFFSET_END (outbuf) = xing->byte_count;
+
+ if (xing->duration == GST_CLOCK_TIME_NONE)
+ xing->duration = duration;
+ else
+ xing->duration += duration;
+
+ if ((ret = gst_pad_push (xing->srcpad, outbuf)) != GST_FLOW_OK) {
+ GST_ERROR_OBJECT (xing, "Failed to push MP3 frame: %s",
+ gst_flow_get_name (ret));
+ return ret;
+ }
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_xing_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstXingMux *xing;
+ gboolean result;
+
+ xing = GST_XING_MUX (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ if (xing->sent_xing) {
+ GST_ERROR ("Already sent Xing header, dropping NEWSEGMENT event!");
+ gst_event_unref (event);
+ result = FALSE;
+ } else {
+ GstSegment segment;
+
+ gst_event_copy_segment (event, &segment);
+
+ if (segment.format == GST_FORMAT_BYTES) {
+ result = gst_pad_push_event (xing->srcpad, event);
+ } else {
+
+ gst_event_unref (event);
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ event = gst_event_new_segment (&segment);
+
+ result = gst_pad_push_event (xing->srcpad, event);
+ }
+ }
+ break;
+
+ case GST_EVENT_EOS:{
+ GstEvent *n_event;
+
+ GST_DEBUG_OBJECT (xing, "handling EOS event");
+
+ if (xing->sent_xing) {
+ GstSegment segment;
+
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ n_event = gst_event_new_segment (&segment);
+
+ if (G_UNLIKELY (!gst_pad_push_event (xing->srcpad, n_event))) {
+ GST_WARNING
+ ("Failed to seek to position 0 for pushing the Xing header");
+ } else {
+ GstBuffer *header;
+ GstFlowReturn ret;
+
+ header = generate_xing_header (xing);
+
+ if (header == NULL) {
+ GST_ERROR ("Can't generate Xing header");
+ } else {
+
+ GST_INFO ("Writing real Xing header to beginning of stream");
+
+ if ((ret = gst_pad_push (xing->srcpad, header)) != GST_FLOW_OK)
+ GST_WARNING ("Failed to push updated Xing header: %s\n",
+ gst_flow_get_name (ret));
+ }
+ }
+ }
+ result = gst_pad_push_event (xing->srcpad, event);
+ break;
+ }
+ default:
+ result = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
+ return result;
+}
+
+
+static GstStateChangeReturn
+gst_xing_mux_change_state (GstElement * element, GstStateChange transition)
+{
+ GstXingMux *xing;
+ GstStateChangeReturn result;
+
+ xing = GST_XING_MUX (element);
+
+ result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ xing_reset (xing);
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
--- /dev/null
+/*
+ * Copyright (c) 2006 Christophe Fergeau <teuf@gnome.org>
+ * Copyright (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+#ifndef __GST_XINGMUX_H__
+#define __GST_XINGMUX_H__
+
+G_BEGIN_DECLS
+
+/* Standard macros for defining types for this element. */
+#define GST_TYPE_XING_MUX \
+ (gst_xing_mux_get_type())
+#define GST_XING_MUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
+#define GST_XING_MUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
+#define GST_IS_XING_MUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
+#define GST_IS_XING_MUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
+
+typedef struct _GstXingMux GstXingMux;
+typedef struct _GstXingMuxClass GstXingMuxClass;
+
+/* Definition of structure storing data for this element. */
+
+/**
+ * GstXingMux:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMux {
+ GstElement element;
+
+ GstPad *sinkpad, *srcpad;
+
+ /* < private > */
+
+ GstAdapter *adapter;
+ GstClockTime duration;
+ guint64 byte_count;
+ guint64 frame_count;
+ GList *seek_table;
+ gboolean sent_xing;
+
+ /* Copy of the first frame header */
+ guint32 first_header;
+};
+
+/* Standard definition defining a class for this element. */
+
+/**
+ * GstXingMuxClass:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMuxClass {
+ GstElementClass parent_class;
+};
+
+/* Standard function returning type information. */
+GType gst_xing_mux_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (xingmux);
+
+G_END_DECLS
+
+#endif /* __GST_XINGMUX_H__ */
--- /dev/null
+xing_sources = [
+ 'plugin.c',
+ 'gstxingmux.c',
+]
+
+gstxingmux = library('gstxingmux',
+ xing_sources,
+ c_args : ugly_args,
+ include_directories : [configinc],
+ dependencies : [gstbase_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstxingmux, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstxingmux]
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2008> Jan Schmidt <jan.schmidt@sun.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include "gstxingmux.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return GST_ELEMENT_REGISTER (xingmux, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ xingmux,
+ "Add XING tags to mpeg audio files",
+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
--- /dev/null
+#!/bin/sh
+#
+# Check that the code follows a consistent code style
+#
+
+# Check for existence of indent, and error out if not present.
+# On some *bsd systems the binary seems to be called gnunindent,
+# so check for that first.
+
+version=`gnuindent --version 2>/dev/null`
+if test "x$version" = "x"; then
+ version=`gindent --version 2>/dev/null`
+ if test "x$version" = "x"; then
+ version=`indent --version 2>/dev/null`
+ if test "x$version" = "x"; then
+ echo "GStreamer git pre-commit hook:"
+ echo "Did not find GNU indent, please install it before continuing."
+ exit 1
+ else
+ INDENT=indent
+ fi
+ else
+ INDENT=gindent
+ fi
+else
+ INDENT=gnuindent
+fi
+
+case `$INDENT --version` in
+ GNU*)
+ ;;
+ default)
+ echo "GStreamer git pre-commit hook:"
+ echo "Did not find GNU indent, please install it before continuing."
+ echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
+ exit 1
+ ;;
+esac
+
+INDENT_PARAMETERS="--braces-on-if-line \
+ --case-brace-indentation0 \
+ --case-indentation2 \
+ --braces-after-struct-decl-line \
+ --line-length80 \
+ --no-tabs \
+ --cuddle-else \
+ --dont-line-up-parentheses \
+ --continuation-indentation4 \
+ --honour-newlines \
+ --tab-size8 \
+ --indent-level2 \
+ --leave-preprocessor-space"
+
+echo "--Checking style--"
+for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
+ # nf is the temporary checkout. This makes sure we check against the
+ # revision in the index (and not the checked out version).
+ nf=`git checkout-index --temp ${file} | cut -f 1`
+ newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
+ $INDENT ${INDENT_PARAMETERS} \
+ $nf -o $newfile 2>> /dev/null
+ # FIXME: Call indent twice as it tends to do line-breaks
+ # different for every second call.
+ $INDENT ${INDENT_PARAMETERS} \
+ $newfile 2>> /dev/null
+ diff -u -p "${nf}" "${newfile}"
+ r=$?
+ rm "${newfile}"
+ rm "${nf}"
+ if [ $r != 0 ] ; then
+echo "================================================================================================="
+echo " Code style error in: $file "
+echo " "
+echo " Please fix before committing. Don't forget to run git add before trying to commit again. "
+echo " If the whole file is to be committed, this should work (run from the top-level directory): "
+echo " "
+echo " gst-indent $file; git add $file; git commit"
+echo " "
+echo "================================================================================================="
+ exit 1
+ fi
+done
+echo "--Checking style pass--"
--- /dev/null
+project('gst-plugins-ugly', 'c',
+ version : '1.19.2',
+ meson_version : '>= 0.54',
+ default_options : [ 'warning_level=1',
+ 'buildtype=debugoptimized' ])
+
+gst_version = meson.project_version()
+version_arr = gst_version.split('.')
+gst_version_major = version_arr[0].to_int()
+gst_version_minor = version_arr[1].to_int()
+gst_version_micro = version_arr[2].to_int()
+ if version_arr.length() == 4
+ gst_version_nano = version_arr[3].to_int()
+else
+ gst_version_nano = 0
+endif
+gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90
+
+have_cxx = add_languages('cpp', native: false, required: false)
+
+glib_req = '>= 2.56.0'
+gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)
+
+api_version = '1.0'
+
+plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
+plugins = []
+
+cc = meson.get_compiler('c')
+if have_cxx
+ cxx = meson.get_compiler('cpp')
+endif
+
+if cc.get_id() == 'msvc'
+ msvc_args = [
+ # Ignore several spurious warnings for things gstreamer does very commonly
+ # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
+ # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
+ # NOTE: Only add warnings here if you are sure they're spurious
+ '/wd4018', # implicit signed/unsigned conversion
+ '/wd4146', # unary minus on unsigned (beware INT_MIN)
+ '/wd4244', # lossy type conversion (e.g. double -> int)
+ '/wd4305', # truncating type conversion (e.g. double -> float)
+ cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
+
+ # Enable some warnings on MSVC to match GCC/Clang behaviour
+ '/w14062', # enumerator 'identifier' in switch of enum 'enumeration' is not handled
+ '/w14101', # 'identifier' : unreferenced local variable
+ '/w14189', # 'identifier' : local variable is initialized but not referenced
+ ]
+ if have_cxx
+ add_project_arguments(msvc_args, language: ['c', 'cpp'])
+ else
+ add_project_arguments(msvc_args, language: 'c')
+ endif
+ # Disable SAFESEH with MSVC for plugins and libs that use external deps that
+ # are built with MinGW
+ noseh_link_args = ['/SAFESEH:NO']
+else
+ noseh_link_args = []
+endif
+
+if cc.has_link_argument('-Wl,-Bsymbolic-functions')
+ add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
+endif
+if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
+ add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
+endif
+
+cdata = configuration_data()
+check_headers = [
+ ['HAVE_DLFCN_H', 'dlfcn.h'],
+ ['HAVE_INTTYPES_H', 'inttypes.h'],
+ ['HAVE_MALLOC_H', 'malloc.h'],
+ ['HAVE_MEMORY_H', 'memory.h'],
+ ['HAVE_STDINT_H', 'stdint.h'],
+ ['HAVE_STDLIB_H', 'stdlib.h'],
+ ['HAVE_STRINGS_H', 'strings.h'],
+ ['HAVE_STRING_H', 'string.h'],
+ ['HAVE_SYS_STAT_H', 'sys/stat.h'],
+ ['HAVE_SYS_TYPES_H', 'sys/types.h'],
+ ['HAVE_UNISTD_H', 'unistd.h'],
+ ['HAVE_WINSOCK2_H', 'winsock2.h'],
+]
+
+foreach h : check_headers
+ if cc.has_header(h.get(1))
+ cdata.set(h.get(0), 1)
+ endif
+endforeach
+
+check_functions = [
+ ['HAVE_DCGETTEXT', 'dcgettext'], # FIXME: this looks unused
+]
+
+foreach f : check_functions
+ if cc.has_function(f.get(1))
+ cdata.set(f.get(0), 1)
+ endif
+endforeach
+
+cdata.set('SIZEOF_CHAR', cc.sizeof('char'))
+cdata.set('SIZEOF_INT', cc.sizeof('int'))
+cdata.set('SIZEOF_LONG', cc.sizeof('long'))
+cdata.set('SIZEOF_SHORT', cc.sizeof('short'))
+cdata.set('SIZEOF_VOIDP', cc.sizeof('void*'))
+
+cdata.set_quoted('VERSION', gst_version)
+cdata.set_quoted('PACKAGE', 'gst-plugins-ugly')
+cdata.set_quoted('GST_LICENSE', 'LGPL')
+cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-ugly-1.0')
+cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
+
+# GStreamer package name and origin url
+gst_package_name = get_option('package-name')
+if gst_package_name == ''
+ if gst_version_nano == 0
+ gst_package_name = 'GStreamer Ugly Plug-ins source release'
+ elif gst_version_nano == 1
+ gst_package_name = 'GStreamer Ugly Plug-ins git'
+ else
+ gst_package_name = 'GStreamer Ugly Plug-ins prerelease'
+ endif
+endif
+cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name)
+cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin'))
+
+# Mandatory GST deps
+gst_dep = dependency('gstreamer-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_dep'])
+gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'app_dep'])
+gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'video_dep'])
+gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'pbutils_dep'])
+gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'tag_dep'])
+gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'fft_dep'])
+gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'audio_dep'])
+gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_base_dep'])
+gstriff_dep = dependency('gstreamer-riff-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'riff_dep'])
+gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'rtp_dep'])
+gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_net_dep'])
+gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'sdp_dep'])
+gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'rtsp_dep'])
+gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
+ required : get_option('tests'),
+ fallback : ['gstreamer', 'gst_check_dep'])
+gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_controller_dep'])
+
+orc_dep = dependency('orc-0.4', version : '>= 0.4.16', required : get_option('orc'),
+ fallback : ['orc', 'orc_dep'])
+if orc_dep.found()
+ cdata.set('HAVE_ORC', 1) # used by a52dec for cpu detection
+else
+ cdata.set('DISABLE_ORC', 1)
+endif
+
+gmodule_dep = dependency('gmodule-2.0', fallback : ['glib', 'libgmodule_dep'])
+
+if gmodule_dep.version().version_compare('< 2.67.4')
+ cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)')
+endif
+
+ugly_args = ['-DHAVE_CONFIG_H']
+configinc = include_directories('.')
+libsinc = include_directories('gst-libs')
+
+# Disable compiler warnings for unused variables and args if gst debug system is disabled
+if gst_dep.type_name() == 'internal'
+ gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
+else
+ # We can't check that in the case of subprojects as we won't
+ # be able to build against an internal dependency (which is not built yet)
+ gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
+endif
+
+if gst_debug_disabled
+ message('GStreamer debug system is disabled')
+ if cc.has_argument('-Wno-unused')
+ add_project_arguments('-Wno-unused', language: 'c')
+ endif
+ if have_cxx and cxx.has_argument ('-Wno-unused')
+ add_project_arguments('-Wno-unused', language: 'cpp')
+ endif
+else
+ message('GStreamer debug system is enabled')
+endif
+
+warning_flags = [
+ '-Wmissing-declarations',
+ '-Wredundant-decls',
+ '-Wwrite-strings',
+ '-Wformat',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Winit-self',
+ '-Wmissing-include-dirs',
+ '-Waddress',
+ '-Wno-multichar',
+ '-Wvla',
+ '-Wpointer-arith',
+ '-Waggregate-return',
+ '-fno-strict-aliasing',
+ # Symbol visibility
+ '-fvisibility=hidden',
+]
+
+warning_c_flags = [
+ '-Wmissing-prototypes',
+ '-Wold-style-definition',
+ '-Wdeclaration-after-statement',
+ '-Wnested-externs'
+]
+
+foreach extra_arg : warning_flags
+ if cc.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'c')
+ endif
+ if have_cxx and cxx.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'cpp')
+ endif
+endforeach
+
+foreach extra_arg : warning_c_flags
+ if cc.has_argument (extra_arg)
+ add_project_arguments([extra_arg], language: 'c')
+ endif
+endforeach
+
+# Define G_DISABLE_DEPRECATED for development versions
+if gst_version_is_dev
+ message('Disabling deprecated GLib API')
+ add_project_arguments('-DG_DISABLE_DEPRECATED', language: 'c')
+endif
+
+cast_checks = get_option('gobject-cast-checks')
+if cast_checks.disabled() or (cast_checks.auto() and not gst_version_is_dev)
+ message('Disabling GLib cast checks')
+ add_project_arguments('-DG_DISABLE_CAST_CHECKS', language: 'c')
+endif
+
+glib_asserts = get_option('glib-asserts')
+if glib_asserts.disabled() or (glib_asserts.auto() and not gst_version_is_dev)
+ message('Disabling GLib asserts')
+ add_project_arguments('-DG_DISABLE_ASSERT', language: 'c')
+endif
+
+glib_checks = get_option('glib-checks')
+if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev)
+ message('Disabling GLib checks')
+ add_project_arguments('-DG_DISABLE_CHECKS', language: 'c')
+endif
+
+presetdir = join_paths(get_option('datadir'), 'gstreamer-' + api_version, 'presets')
+
+pkgconfig = import('pkgconfig')
+plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig')
+if get_option('default_library') == 'shared'
+ # If we don't build static plugins there is no need to generate pc files
+ plugins_pkgconfig_install_dir = disabler()
+endif
+
+python3 = import('python').find_installation()
+subdir('gst')
+subdir('ext')
+subdir('tests')
+
+# xgettext is optional (on Windows for instance)
+if find_program('xgettext', required : get_option('nls')).found()
+ cdata.set('ENABLE_NLS', 1)
+ subdir('po')
+endif
+subdir('docs')
+subdir('scripts')
+
+# Set release date
+if gst_version_nano == 0
+ extract_release_date = find_program('scripts/extract-release-date-from-doap-file.py')
+ run_result = run_command(extract_release_date, gst_version, files('gst-plugins-ugly.doap'))
+ if run_result.returncode() == 0
+ release_date = run_result.stdout().strip()
+ cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date)
+ message('Package release date: ' + release_date)
+ else
+ # Error out if our release can't be found in the .doap file
+ error(run_result.stderr())
+ endif
+endif
+
+configure_file(output : 'config.h', configuration : cdata)
+
+run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
+
+if meson.version().version_compare('>= 0.54')
+ plugin_names = []
+ foreach plugin: plugins
+ # FIXME: Use str.subtring() when we can depend on Meson 0.56
+ split = plugin.name().split('gst')
+ if split.length() == 2
+ plugin_names += [split[1]]
+ else
+ warning('Need substring API in meson >= 0.56 to properly parse plugin name: ' + plugin.name())
+ plugin_names += [plugin.name()]
+ endif
+ endforeach
+ summary({'Plugins':plugin_names}, list_sep: ', ')
+endif
--- /dev/null
+option('x264_libraries', type : 'string', value : '',
+ description : 'Colon separated list of additional x264 library paths, e.g. for 10-bit version')
+
+# Feature options for plugins without external deps
+option('asfdemux', type : 'feature', value : 'auto')
+option('dvdlpcmdec', type : 'feature', value : 'auto')
+option('dvdsub', type : 'feature', value : 'auto')
+option('realmedia', type : 'feature', value : 'auto')
+option('xingmux', type : 'feature', value : 'auto')
+
+# Feature options for plugins that need external deps
+option('a52dec', type : 'feature', value : 'auto', description : 'Dolby Digital (AC-3) audio decoder plugin')
+option('amrnb', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Narrow-Band audio codec plugin')
+option('amrwbdec', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Wide-Band audio decoder plugin')
+option('cdio', type : 'feature', value : 'auto', description : 'CD audio source plugin')
+option('dvdread', type : 'feature', value : 'auto', description : 'DVD video source plugin')
+option('mpeg2dec', type : 'feature', value : 'auto', description : 'MPEG 2 video decoder plugin')
+option('sidplay', type : 'feature', value : 'auto', description : 'Commodore 64 audio decoder plugin')
+option('x264', type : 'feature', value : 'auto', description : 'H.264 video encoder plugin')
+
+# Common feature options
+option('nls', type : 'feature', value : 'auto', yield: true,
+ description : 'Enable native language support (translations)')
+option('orc', type : 'feature', value : 'auto', yield : true)
+option('tests', type : 'feature', value : 'auto', yield : true)
+option('gobject-cast-checks', type : 'feature', value : 'auto', yield : true,
+ description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)')
+option('glib-asserts', type : 'feature', value : 'enabled', yield : true,
+ description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)')
+option('glib-checks', type : 'feature', value : 'enabled', yield : true,
+ description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)')
+
+# Common options
+option('package-name', type : 'string', yield : true,
+ description : 'package name to use in plugins')
+option('package-origin', type : 'string', value : 'Unknown package origin', yield: true,
+ description : 'package origin URL to use in plugins')
+option('doc', type : 'feature', value : 'auto', yield: true,
+ description: 'Enable documentation.')
\ No newline at end of file
--- /dev/null
+af ast az bg ca cs da de el en_GB eo es eu fi fr fur gl hr hu id it ja lt lv ms mt nb nl or pl pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN
--- /dev/null
+ext/cdio/gstcdiocddasrc.c
+ext/dvdread/dvdreadsrc.c
+gst/asfdemux/gstasfdemux.c
--- /dev/null
+# Translation of gstreamer plugin messages to Afrikaans.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Petri Jooste <rkwjpj@puk.ac.za>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.7.6\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-03-18 14:16+0200\n"
+"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
+"Language-Team: Afrikaans <i18n@af.org.za>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+msgid "Could not open CD device for reading."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Toestel is nie oop nie."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om in te skryf nie."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Fout tydens toemaak van lêer \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om te lees nie."
+
+#~ msgid "No filename specified."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Kon nie oudio-toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Kon nie beheertoestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" konfigureer nie."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Kon nie klanktoestel \"%s\" verstel na %d Hz nie."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Kon nie beheertoestel \"%s\" toemaak nie."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Kon nie video-toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Kon nie video-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Kon nie skryf na toestel \"%s\" nie."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "OSS-toestel \"%s\" is reeds in gebruik deur 'n ander program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Kon nie toegang kry tot toestel \"%s\" nie, kyk na toegangsregte."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Toestel \"%s\" bestaan nie."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees nie."
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Sintetiseerder"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Luidspreker"
+
+#~ msgid "Line-in"
+#~ msgstr "Lyn-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofoon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Menger"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Neem op"
+
+#~ msgid "In-gain"
+#~ msgstr "In-versterking"
+
+#~ msgid "Out-gain"
+#~ msgstr "Uit-versterking"
+
+#~ msgid "Line-1"
+#~ msgstr "Lyn-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Lyn-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Lyn-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digitaal-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digitaal-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digitaal-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefoon-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefoon-uit"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Luidspreker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir lees nie."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir skryf nie."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "No device specified."
+#~ msgstr "Geen toestel gespesifiseer"
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
+
+#~ msgid "Device is open."
+#~ msgstr "Toestel is oop."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Toestel \"%s\" is nie 'n vasleggingtoestel nie."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Kon nie genoeg buffers vanaf toestel \"%s\" kry nie."
--- /dev/null
+# Asturian translation for gst-plugins-ugly
+# This file is put in the public domain.
+#
+# enolp <enolp@softastur.org>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2016-11-01 17:53+0200\n"
+"PO-Revision-Date: 2018-07-14 12:03+0100\n"
+"Last-Translator: enolp <enolp@softastur.org>\n"
+"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
+"Language: ast\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Nun pudo lleese dende'l CD."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Nun pudo abrise'l preséu de CDs pa la llectura."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "El discu nun ye un CD d'audiu."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "Nun pudo abrise'l DVD"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:621
+#: ext/dvdread/dvdreadsrc.c:628
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nun pudo abrise'l titulu del DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Fallu al dir al capítulu %d del títulu del DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:635
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Nun pudo abrise'l títulu del DVD %d. Esti elementu nun sofita los elementos interactivos."
+
+#: ext/dvdread/dvdreadsrc.c:990
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Nun pudo lleese'l DVD. Esto podría ser porque'l DVD ta cifráu y nun s'instaló una biblioteca de descifráu de DVDs."
+
+#: ext/dvdread/dvdreadsrc.c:993
+msgid "Could not read DVD."
+msgstr "Nun pudo lleese'l DVD."
+
+#: ext/lame/gstlamemp3enc.c:395
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Fallu al configurar el codificador d'audiu MP3 de LAME. Comprueba los parámetros de codificación."
+
+#: ext/lame/gstlamemp3enc.c:427 ext/twolame/gsttwolamemp2enc.c:488
+#, c-format
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "La tasa de bits %d kbit/s solicitada pa la propieda «%s» nun ta permitida. Camudóse la tasa de bits a %d kbit/s."
+
+#: ext/twolame/gsttwolamemp2enc.c:411
+msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+msgstr "Fallu al configurar el codificador TwoLAME. Comprueba los parámetros de codificación."
+
+#: gst/asfdemux/gstasfdemux.c:446
+msgid "This stream contains no data."
+msgstr "Esti fluxu nun contién datos."
--- /dev/null
+# Translation of 'gst-plugins' messages to Azerbaijani.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Mətin Əmirov <metin@karegen.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-03-19 18:29+0200\n"
+"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
+"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "\"%s\" faylına yazıla bilmədi."
+
+msgid "Could not open CD device for reading."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Avadanlıq açıq deyil."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "\"%s\" faylına yazıla bilmədi."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "\"%s\" faylına yazıla bilmədi."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" faylı yazma üçün açıla bilmədi."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "\"%s\" faylı bağlana bilmədi."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" faylı oxuma üçün açıla bilmədi."
+
+#~ msgid "No filename specified."
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "\"%s\" audio avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" idarə avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı quraşdırıla bilmədi."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" audio avadanlığı %d Hz-ə keçirilə bilmədi."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" idarə avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" video avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" video avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "\"%s\" avadanlığına yazıla bilmədi."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "\"%s\" OSS avadanlığı başqa bir proqram tərəfindən istifadədədir."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" avadanlığına yetişə bilmədi, səlahiyyətlərini yoxlayın."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" avadanlığı mövcud deyil."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" avadanlığı oxuma üçün açıla bilmədi."
+
+#~ msgid "Volume"
+#~ msgstr "Səs"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "İncə"
+
+#~ msgid "Synth"
+#~ msgstr "Sint"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Spiker"
+
+#~ msgid "Line-in"
+#~ msgstr "Xətd-giriş"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mikser"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Qeyd"
+
+#~ msgid "In-gain"
+#~ msgstr "Giriş-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Çıxış-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Xətd-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Xətd-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Xətd-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dijital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dijital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dijital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefon-girişi"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefon-çıxışı"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Spiker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "\"%s\" vfs faylı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Fayl adı verilməyib."
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "\"%s\" vfs faylı yazma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "No device specified."
+#~ msgstr "Avadanlıq bildirilməyib."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
+
+#~ msgid "Device is open."
+#~ msgstr "Avadanlıq açıqdır."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "\"%s\" avadanlığı capture avadanlığı deyil."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından kifayət qədər bufferlər alına bilmədi."
--- /dev/null
+# Bulgarian translation of gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2016 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011, 2016.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2016-02-21 21:03+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "CD-то не може да бъде прочетено."
+
+msgid "Could not open CD device for reading."
+msgstr "Не може да се чете от устройството за CD-та."
+
+msgid "Disc is not an Audio CD."
+msgstr "Дискът не е аудио CD."
+
+msgid "Could not open DVD"
+msgstr "DVD-то не може да бъде отворено"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Заглавната част %d от DVD-то не може да бъде отворена"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Не може да се премине към раздел %d от заглавната част %d на DVD-то"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Заглавната част %d от DVD-то не може да бъде отворена. Интерактивни части не "
+"се поддържат от този елемент"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD-то не може да бъде прочетено. Причината може да е, че DVD-то е шифрирано "
+"и не е инсталирана библиотека за дешифриране."
+
+msgid "Could not read DVD."
+msgstr "DVD-то не може да бъде прочетено."
+
+msgid "This stream contains no data."
+msgstr "Потокът не съдържа данни."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Кодерът за mp3 — LAME не може да бъде настроен. Проверете настройките за "
+#~ "кодиране."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Поисканата честота в битове %d kbit/s за свойството „%s“ не е позволена. "
+#~ "Тя бе променена на %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Кодерът TwoLAME не може да бъде настроен. Проверете настройките за "
+#~ "кодиране."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Вътрешна грешка в потока от данни."
--- /dev/null
+# Catalan translation for gstreamer.
+# Copyright © 2004, 2005, 2010 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Jordi Mallach <jordi@sindominio.net>, 2004, 2005, 2010.
+# Jordi Estrada <jordi.estrada@yamaha-motor.es>, 2011.
+# Gil Forcada <gforcada@gnome.org>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-01-01 14:19+0100\n"
+"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "No s'ha pogut llegir des del CD."
+
+msgid "Could not open CD device for reading."
+msgstr "No s'ha pogut obrir el dispositiu de CD per a lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "El disc no és un CD d'àudio."
+
+msgid "Could not open DVD"
+msgstr "No s'ha pogut obrir el DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "No s'ha pogut obrir el títol %d del DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "No s'ha pogut anar al capítol %d del títol %d del DVD."
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"No s'ha pogut obrir el títol %d del DVD. Els títols interactius no són "
+"compatibles amb aquest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"No s'ha pogut llegir el DVD. Possiblement el DVD està encriptat i la "
+"biblioteca de desencriptació de DVD no està instal·lada."
+
+msgid "Could not read DVD."
+msgstr "No s'ha pogut llegir el DVD."
+
+msgid "This stream contains no data."
+msgstr "Aquest flux no conté dades."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "No s'ha pogut configurar el codificador LAME. Comproveu els paràmetres de "
+#~ "codificació."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La taxa de bits %d kbit/s per a la propietat «%s» no és permesa. S'ha "
+#~ "canviat la taxa de bits a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "No s'ha pogut configurar el codificador TwoLAME. Comproveu els paràmetres "
+#~ "de codificació."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
--- /dev/null
+# Czech translations of gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009 the author(s) of gst-plugins-ugly.
+# Copyright (C) 2004 Miloslav Trmac <mitr@volny.cz>.
+# This file is put in the public domain.
+#
+# Miloslav Trmac <mitr@volny.cz>, 2004.
+# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
+# Marek Černocký <marek@manet.cz>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2013-09-07 07:06+0200\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+msgid "Could not read from CD."
+msgstr "Nezdařilo se čtení z CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nezdařilo se otevřít zařízení CD pro čtení."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk není zvukovým CD."
+
+msgid "Could not open DVD"
+msgstr "Nezdařilo se otevřít DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nezdařilo se otevřít titul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nezdařil se přechod na kapitolu %d titulu DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nezdařilo se otevřít titul DVD %d. Interaktivní tituly nejsou tímto prvkem "
+"podporovány"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nezdařilo se čtení DVD. To může být způsobeno tím, že je DVD šifrováno a "
+"knihovna pro dešifrování DVD není nainstalována."
+
+msgid "Could not read DVD."
+msgstr "Nezdařilo se čtení DVD."
+
+msgid "This stream contains no data."
+msgstr "Tento proud neobsahuje žádná data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Selhalo nastavení zvukového kodéru LAME mp3. Zkontrolujte parametry "
+#~ "kódování."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Požadovaný datový tok %d kb/s za sekundu není u vlastnosti „%s“ povolen. "
+#~ "Datový tok byl změněn na %d kb/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "Selhalo nastavení kodéru TwoLAME. Zkontrolujte parametry kódování."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interní chyba datového proudu."
--- /dev/null
+# Danish translation of gst-plugins-ugly.
+# Copyright (C) 2011 gst.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Mogens Jaeger <mogens@jaeger.tf>, 2007.
+# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-09 03:56+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Kunne ikke åbne cd."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke åbne cd-enhed."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk er ikke en lyd-cd."
+
+msgid "Could not open DVD"
+msgstr "Kunne ikke åbne dvd"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunne ikke åbne dvd-titel %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Kunne ikke gå til kapitel %d i dvd-titel %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kunne ikke åbne dvd-titel %d. Interaktive titler er ikke understøttet i "
+"dette element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kunne ikke læse dvd. Dette kan være fordi dvd'en er krypteret og et dvd-"
+"dekrypteringsbibliotek ikke er installeret."
+
+msgid "Could not read DVD."
+msgstr "Kunne ikke læse dvd."
+
+msgid "This stream contains no data."
+msgstr "Denne strøm indeholder ingen data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere LAME mp3-lydindkoderen. Kontroller dine "
+#~ "indkoderparametre."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Den krævede bithastighed %d kbit/s for egenskab %s er ikke tilladt. "
+#~ "Bithastigheden blev ændret til %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere TwoLAME-indkoderen. Kontroller dine "
+#~ "indkoderparametre."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern datastrømfejl."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ugyldig titelinformation på dvd."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kunne ikke læse titelinformation på dvd."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kunne ikke åbne dvd-enhed %s."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Mislykkedes i at indstille PGC-baseret søgning."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Filen er krypteret og kan ikke afspilles."
--- /dev/null
+# German translations for gst-plugins-ugly 1.3.2
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# PCM = PCM
+# Line-in = Eingang
+# Line-out = Ausgang
+# Pipeline = Weiterleitung
+# Stream = Strom
+# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2011, 2012, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.3.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-05-22 18:29+0100\n"
+"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "Von der CD konnte nicht gelesen werden."
+
+msgid "Could not open CD device for reading."
+msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
+
+msgid "Disc is not an Audio CD."
+msgstr "Das Medium ist keine Audio-CD."
+
+msgid "Could not open DVD"
+msgstr "Die DVD konnte nicht geöffnet werden."
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Der Titel »%d« der DVD konnte nicht geöffnet werden."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Springen zu Kapitel %d des DVD-Titels »%d« schlug fehl"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Der DVD-Titel »%d« konnte nicht geöffnet werden. Interaktive Titel werden "
+"von diesem Element nicht unterstützt"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD konnten nicht gelesen werden. Dies könnte daran liegen, dass die DVD "
+"verschlüsselt ist und eine Bibliothek zur DVD-Entschlüsselung nicht "
+"installiert ist."
+
+msgid "Could not read DVD."
+msgstr "DVD konnten nicht gelesen werden."
+
+msgid "This stream contains no data."
+msgstr "Dieser Strom enthält keine Daten."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Konfigurieren des MP3 Audio-Enkodierers »LAME« schlug fehl. Überprüfen "
+#~ "Sie die Parameter zum Enkodieren."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Die angeforderte Bitrate von %d kBit/s ist für die Eigenschaft »%s« nicht "
+#~ "erlaubt. Die Bitrate wurde auf %d kBit/s abgeändert."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Konfigurieren des Enkodierers »TwoLAME« schlug fehl. Überprüfen Sie die "
+#~ "Parameter zum Enkodieren. "
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interner Datenstromfehler."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ungültige Titelinformation auf der DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Die Titelinformationen der DVD konnten nicht gelesen werden."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Öffnen des DVD-Geräts »%s« schlug fehl."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC-basiertes Suchen schlug fehl."
--- /dev/null
+# Greek translation for gst-plugins-ugly package of GStreamer project.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Simos Xenitellis <simos.lists@googlemail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-03-18 01:04+0100\n"
+"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Δέν μπόρεσε να γινει ανάγνωση το CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Δέν ήταν δυνατό το άνοιγμα της συσκευής CD για την ανάγνωση. "
+
+msgid "Disc is not an Audio CD."
+msgstr "Ο δίσκος δεν είναι ένα ακουστικό CD."
+
+msgid "Could not open DVD"
+msgstr "Δεν ήταν δυνατό το άνοιγμα του DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Αποτυχία μετάβασης στο κεφάλαιο %d του τίτλου του DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d. Οι διαδραστικοί τίτλοι δεν "
+"υποστηρίζονται από αυτό το στοιχείο"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Δεν είναι δυνατή η ανάγνωση του DVD. Αυτό μπορεί να οφείλεται στο ότι το DVD "
+"είναι κρυπτογραφημένο και μια βιβλιοθήκη αποκρυπτογράφησης DVD δεν έχει "
+"εγκατασταθεί."
+
+msgid "Could not read DVD."
+msgstr "Δεν είναι δυνατή η ανάγνωση του DVD."
+
+msgid "This stream contains no data."
+msgstr "Η ροή αυτή δεν περιέχει καθόλου δεδομένα."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Αδυναμία ρύθμισης του κωδικοποιητή LAME. Ελέγξτε τις παραμέτρους "
+#~ "κωδικοποίησης."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Ο αιτούμενος ρυθμός μετάδοσης %d kbit/s για την ιδιοκτησία '%s' δεν είναι "
+#~ "επιτρεπτός.Ορυθμός μετάδοσης άλλαξε σε %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Αδυναμία ρύθμισης του κωδικοποιητή TwoLAME. Ελέγξτε τις παραμέτρους "
+#~ "κωδικοποίησης."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
--- /dev/null
+# English (British) translation.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Gareth Owen <gowen72@yahoo.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-04-26 10:41-0400\n"
+"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
+"Language-Team: English (British) <en_gb@li.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Could not write to file \"%s\"."
+
+msgid "Could not open CD device for reading."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Device is not open."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "Could not close vfs file \"%s\"."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Could not write to file \"%s\"."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Could not write to file \"%s\"."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Could not close vfs file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Could not open file \"%s\" for writing."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Error closing file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Could not open file \"%s\" for reading."
+
+#~ msgid "No filename specified."
+#~ msgstr "No filename specified."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "No or invalid input audio, AVI stream will be corrupt."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Could not open audio device \"%s\" for writing."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Could not open control device \"%s\" for writing."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Could not configure audio device \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Could not set audio device \"%s\" to %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Could not close audio device \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Could not close control device \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Could not open video device \"%s\" for writing."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Could not close video device \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Could not write to device \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "OSS device \"%s\" is already in use by another program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Could not access device \"%s\", check its permissions."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Device \"%s\" does not exist."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Could not open device \"%s\" for writing."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Could not open device \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Your oss device could not be probed correctly"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Bass"
+#~ msgstr "Bass"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Synth"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Speaker"
+
+#~ msgid "Line-in"
+#~ msgstr "Line-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Microphone"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Record"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Line-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Line-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Line-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-out"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Speaker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Could not open vfs file \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "No filename given"
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Could not open vfs file \"%s\" for writing."
+
+#~ msgid "No filename given"
+#~ msgstr "No filename given"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Your oss device could not be probed correctly"
+
+#~ msgid "No device specified."
+#~ msgstr "No device specified."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Could not open device \"%s\" for reading and writing."
+
+#~ msgid "Device is open."
+#~ msgstr "Device is open."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Device \"%s\" is not a capture device."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Could not get buffers from device \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Could not get enough buffers from device \"%s\"."
--- /dev/null
+# Esperanto translations for gst-plugins-ugly.
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
+# Benno Schulenberg <benno@vertaalt.nl>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.4.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-09-21 21:03+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Lokalize 1.0\n"
+
+msgid "Could not read from CD."
+msgstr "Ne eblis legi de la KD."
+
+msgid "Could not open CD device for reading."
+msgstr "Ne eblis malfermi la KD-aparaton por legi."
+
+msgid "Disc is not an Audio CD."
+msgstr "La disko ne estas son-KD."
+
+msgid "Could not open DVD"
+msgstr "Ne eblis malfermi la DVD-n"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ne eblis malfermi titolon \"%d\" de la DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Fiaskis iri al ĉapitro %d de la DVD-titolo %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ne eblis malfermi DVD-titolon \"%d\"; ĉi tiu elemento ne subtenas interagajn "
+"titolojn"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Ne eblis legi la DVD-n. Eble la DVD estas ĉifrita sed biblioteko por DVD-"
+"malĉifrado ne estas instalita."
+
+msgid "Could not read DVD."
+msgstr "Ne eblis legi la DVD-n."
+
+msgid "This stream contains no data."
+msgstr "Tiu fluo enhavas neniun datumon."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "Fiaskis agordi la LAME-kodilon. Kontrolu viajn kodad-parametrojn."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La petita bitrapido je %d kbit/s ne estas permesata por la atributo \"%s"
+#~ "\". La bitrapido estas ŝanĝite al %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Fiaskis agordi la TwoLAME-kodilon. Kontrolu viajn kodad-parametrojn."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna datum-flu-eraro."
--- /dev/null
+# translation of gst-plugins-ugly-0.10.17.2.po to Español
+# spanish translation for gst-plugins-ugly
+# This file is put in the public domain.
+# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2009, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2011-10-02 15:45+0200\n"
+"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+msgid "Could not read from CD."
+msgstr "No se pudo leer del CD."
+
+msgid "Could not open CD device for reading."
+msgstr "No se pudo abrir el dispositivo de CD para su lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "El disco no es un CD de sonido."
+
+msgid "Could not open DVD"
+msgstr "No se pudo abrir el DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "No se pudo abrir el título %d del DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Falló al ir al capítulo %d del título %d del DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"No se pudo abrir el título %d del DVD. Los títulos interactivos no están "
+"soportados por este elemento."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"No se pudo leer el DVD. Puede ser debido a que el DVD está cifrado y la "
+"biblioteca de descifrado del DVD no está instalada."
+
+msgid "Could not read DVD."
+msgstr "No se pudo leer el DVD."
+
+msgid "This stream contains no data."
+msgstr "Este medio no contiene datos."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Falló al configurar el codificador LAME. Compruebe sus parámetros de "
+#~ "codificación."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La tasa de bits %d kbps solicitada para la propiedad «%s» no está "
+#~ "permitida. La tasa de bits se cambió a %d kbps."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Falló al configurar el codificador TwoLAME. Compruebe sus parámetros de "
+#~ "codificación."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Error del flujo de datos interno."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Información del título del DVD no válida."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "No se pudo leer la información del título para el DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Falló abrir el dispositivo DVD «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Falló al establecer la búsqueda basada en PGC."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Este archivo está cifrado y no se puede reproducir."
--- /dev/null
+# translation of gst-plugins-ugly.master.po to Basque
+# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
+# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.13.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2010-03-07 13:12+0200\n"
+"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Ezin izan da CDtik irakurri."
+
+msgid "Could not open CD device for reading."
+msgstr "Ezin izan da CD gailua ireki irakurtzeko."
+
+msgid "Disc is not an Audio CD."
+msgstr "Ez da Audio CD disko bat."
+
+msgid "Could not open DVD"
+msgstr "Ezin izan da DVDa ireki"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ezin izan da DVDko %d. titulua ireki"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Huts egin du DVDko %2$d. tituluaren %1$d. kapitulura joatean"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ezin izan da DVDko %d. titulua ireki. Elementu honek ez ditu onartzen titulu "
+"interaktiboak"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Ezin izan da DVDa ireki"
+
+msgid "This stream contains no data."
+msgstr "Korronte honek ez du daturik."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Ez da onartzen '%2$s' propietatearentzat eskatutako %1$d kbit/s-ko bit-"
+#~ "emaria. Bit-emaria aldatu egin da, eta orain %3$d kbit/s-koa da."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Huts egin du LAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ezin izan da CDtik irakurri."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Ezin izan da DVDko %d. titulua ireki"
--- /dev/null
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Finnish messages for gst-plugins-ugly.
+# Copyright (C) 2007 Ilkka Tuohela.
+# Copyright (C) 2008-2009 Tommi Vainikainen.
+# Suomennos: http://gnome.fi/
+#
+# Ilkka Tuohela <hile@iki.fi>, 2007.
+# Tommi Vainikainen <thv@iki.fi>, 2008-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.10.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2009-03-10 20:41+0200\n"
+"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.2\n"
+
+msgid "Could not read from CD."
+msgstr "Lukeminen CD:ltä ei onnistunut."
+
+msgid "Could not open CD device for reading."
+msgstr "CD-laitetta ei voitu avata luettavaksi."
+
+msgid "Disc is not an Audio CD."
+msgstr "Levy ei ole ääni-CD."
+
+msgid "Could not open DVD"
+msgstr "DVD:tä ei voitu avata"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD:n ohjelmaa %d ei voitu avata"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Ei voitu siirtyä kappaleeseen %d DVD:n ohjelmassa %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVD:n ohjelmaa %d ei voitu avata. Tämä elementti ei tue interaktiivisia "
+"ohjelmia"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "DVD:tä ei voitu avata"
+
+msgid "This stream contains no data."
+msgstr "Virta ei sisällä tietoa."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pyydetty bittinopeus %d kb/s ominaisuudelle \"%s\" ei ole sallittu. "
+#~ "Bittinopeus asetettiin arvoon %d kb/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Sisäinen tietovirtavirhe."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr "LAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD:llä on virheellisiä ohjelmatietoja."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ohjelmatietoja ei voitu lukea DVD:ltä."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVD-laitetta \"%s\" ei voitu avata."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC-pohjaista siirtymistä ei voitu asettaa."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Tiedosto on salattu eikä sitä voi toistaa."
--- /dev/null
+# Translation of gst-plugins-ugly to French
+# Copyright (C) 2003-2011 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Claude Paroz <claude@2xlibre.net>, 2008-2011.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-12-27 01:51+0100\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Impossible de lire le CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossible d’ouvrir le lecteur de CD."
+
+msgid "Disc is not an Audio CD."
+msgstr "Le disque n’est pas un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Impossible d’ouvrir le DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impossible d’ouvrir le DVD intitulé %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Impossible d’aller au chapitre %d du DVD intitulé %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impossible d’ouvrir le DVD intitulé %d. Les titres interactifs ne sont pas "
+"pris en charge par cet élément"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impossible de lire le DVD. Il se peut que le DVD soit chiffré et qu’aucune "
+"bibliothèque de déchiffrement de DVD de ne soit installée."
+
+msgid "Could not read DVD."
+msgstr "Impossible de lire le DVD."
+
+msgid "This stream contains no data."
+msgstr "Ce flux ne contient aucune données."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "La configuration de l’encodeur audio mp3 LAME a échoué. Vérifiez vos "
+#~ "paramètres d’encodage."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Le débit de transfert demandé de %d kbit/s pour la propriété « %s » n’est "
+#~ "pas autorisé. Le débit de transfert a été défini à %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "La configuration de l’encodeur TwoLAME a échoué. Vérifiez vos paramètres "
+#~ "d’encodage."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erreur du flux de données interne."
--- /dev/null
+# Friulian messages for gst-plugins-ugly-1.10.0.
+# This file is put in the public domain.
+# Fabio Tomat <f.t.public@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2016-11-30 16:23+0100\n"
+"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <f.t.public@gmail.com>\n"
+"Language: fur\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Impussibil lei dal CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impussibil vierzi il dispositîf CD par lei."
+
+msgid "Disc is not an Audio CD."
+msgstr "Il disc nol è un CD Audio."
+
+msgid "Could not open DVD"
+msgstr "Impussibil vierzi il DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impussibil vierzi il titul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "No si è rivâts a lâ al cjapitul %d dal titul DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impussibil vierzi il titul DVD %d. I titui interatîfs no son supuartâts di "
+"chest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impussibil lei il DVD. Al podarès jessi par vie che il DVD al è cifrât e une "
+"librarie di decifradure no je instalade."
+
+msgid "Could not read DVD."
+msgstr "Impussibil lei il DVD."
+
+msgid "This stream contains no data."
+msgstr "Il flus nol conten dâts."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "No si è rivâts a configurâ il codificadôr audio mp3 LAME. Controle i "
+#~ "parametris di codifiche."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Il bitrate domandât (%d kbit/s) pe proprietât '%s' nol è permetût. Il "
+#~ "bitrate al è stât cambiât a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "No si è rivâts a configurâ il codificadôr TwoLAME. Controle i parametris "
+#~ "di codifiche."
--- /dev/null
+# Galician translation of gst-plugins-ugly.
+# Copyright (C) 2009 gst-plugins-ugly's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010.
+# Fran Dieguez <frandieguez@gnome.org>, 2012.
+# Francisco Diéguez <frandieguez@ubuntu.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-15 03:47+0200\n"
+"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
+
+msgid "Could not read from CD."
+msgstr "Non foi posíbel ler desde o CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Non foi posíbel abrir o dispositivo de CD para a súa lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "O disco non é un CD de son."
+
+msgid "Could not open DVD"
+msgstr "Non foi posíbel abrir o DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Non foi posíbel abrir o título %d do DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Produciuse un erro ao ir ao capítulo %d do título %d do DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Non foi posíbel abrir o título %d de DVD. Este elemento non é compatíbel cos "
+"títulos interactivos"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Non foi posíbel ler o DVD. Isto pode ser porque o DVD está cifrado e non ten "
+"instalada unha biblioteca de descifrado de DVD."
+
+msgid "Could not read DVD."
+msgstr "Non foi posíbel ler o DVD"
+
+msgid "This stream contains no data."
+msgstr "Este fluxo non contén datos."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Produciuse un erro ao configurar o codificador LAME mp3. Comprobe os seus "
+#~ "parámetros de codificación."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Non se permite o bitrate solicitado %d kbit/s para a propiedade '%s'. O "
+#~ "bitrate cambiouse a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Produciuse un fallo ao configurar o codificador TwoLAME. Comprobe os seus "
+#~ "parámetros de codificación."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro de fluxo de datos interno."
--- /dev/null
+# Translation of gst-plugins-ugly messages to Croatian.
+# This file is put in the public domain.
+# Copyright (C) 2004-2010, 2019 GStreamer core team.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+# Božidar Putanec <bozidarp@yahoo.com>, 2016, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2019-02-03 13:14-0800\n"
+"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+msgid "Could not read from CD."
+msgstr "Nije moguće čitati CD."
+
+msgid "Could not open CD device for reading."
+msgstr "CD uređaj nije moguće otvoriti za čitanje."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk nije Audio CD."
+
+msgid "Could not open DVD"
+msgstr "DVD nije moguće otvoriti"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nije moguće otvoriti DVD naslov %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nije uspjelo otvoriti poglavlje %d DVD naslova %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nije moguće otvoriti DVD naslov %d. Ovaj element ne podržava interaktivne "
+"naslove"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD nije moguće čitati. DVD je možda je šifriran a biblioteka za "
+"dešifriranje\n"
+"nije instalirana."
+
+msgid "Could not read DVD."
+msgstr "DVD nije moguće čitati."
+
+msgid "This stream contains no data."
+msgstr "Ovaj protok ne sadrži podatke."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Konfiguracija LAME mp3 audiokodera nije uspjela. Provjerite parametre "
+#~ "kodiranja."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Tražena brzina (bitrate) %d kbit/s za svojstvo „%s“ nije dopuštena. "
+#~ "Brzina (bitrate) je promijenjena u %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Konfiguracija TwoLAME kodera nije uspjela. Provjerite parametre kodiranja."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna greška toka (stream) podataka."
--- /dev/null
+# Hungarian translation of gst-plugins-ugly
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Gabor Kelemen <kelemeng@gnome.hu>, 2007, 2008, 2009, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-30 15:02+0100\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "A CD nem olvasható."
+
+msgid "Could not open CD device for reading."
+msgstr "Nem nyitható meg a CD eszköz olvasásra."
+
+msgid "Disc is not an Audio CD."
+msgstr "A lemez nem hang CD."
+
+msgid "Could not open DVD"
+msgstr "A DVD nem nyitható meg"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nem nyitható meg a(z) %d. DVD cím"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "A(z) $%2d. DVD cím $%1d. fejezetére ugrás meghiúsult"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nem nyitható meg a(z) %d. DVD cím. Ez az elem nem támogatja az interaktív "
+"címeket."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nem olvasható a DVD. Ezt az okozhatja, hogy a DVD titkosított, és a DVD-"
+"visszafejtő programkönyvtár nincs telepítve."
+
+msgid "Could not read DVD."
+msgstr "Nem olvasható a DVD."
+
+msgid "This stream contains no data."
+msgstr "Ez az adatfolyam nem tartalmaz adatokat."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "A LAME MP3 hangkódoló beállítása meghiúsult. Ellenőrizze a kódolás "
+#~ "beállításait."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "A kért %d kbit/s bitsebesség nem engedélyezett a(z) „%s” tulajdonsághoz. "
+#~ "A bitsebesség módosítva %d kbit/s-re."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "A TwoLAME kódoló beállítása meghiúsult. Ellenőrizze a kódolás "
+#~ "beállításait."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Belső adatfolyam-hiba."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "A DVD címinformációi érvénytelenek."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "A DVD címinformációi nem olvashatók."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nem nyitható meg a DVD eszköz („%s”)."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "A PGC alapú keresés beállítása meghiúsult."
--- /dev/null
+# Indonesian translations for gst-plugins-ugly package.
+# This file is put in the public domain.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2009-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2013-11-09 15:57+0100\n"
+"PO-Revision-Date: 2014-01-27 20:04+0700\n"
+"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Tak dapat membaca dari CD."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Tak dapat membuka divais CD untuk dibaca."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "Cakram bukan CD Audio."
+
+#: ext/dvdread/dvdreadsrc.c:228 ext/dvdread/dvdreadsrc.c:235
+msgid "Could not open DVD"
+msgstr "Tak dapat membuka DVD"
+
+#: ext/dvdread/dvdreadsrc.c:242 ext/dvdread/dvdreadsrc.c:618
+#: ext/dvdread/dvdreadsrc.c:625
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Tak dapat membuka judul DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:248
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gagal pergi ke bab %d dari judul DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:632
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Tak dapat membuka judul DVD %d. Judul interaktif tidak didukung oleh elemen ini"
+
+#: ext/dvdread/dvdreadsrc.c:985
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Tak dapat membaca DVD. Hal ini karena DVD terenkripsi dan pustaka dekripsi DVD tidak diinstal."
+
+#: ext/dvdread/dvdreadsrc.c:988
+msgid "Could not read DVD."
+msgstr "Tak dapat membaca DVD."
+
+#: ext/lame/gstlamemp3enc.c:394
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Gagal mengatur penyandi audio mp3 LAME. Cek parameter penyandian anda."
+
+#: ext/lame/gstlamemp3enc.c:426 ext/twolame/gsttwolamemp2enc.c:486
+#, c-format
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "Bitrasi %d kbit/s yang diminta untuk properti '%s' tidak diizinkan. Bitrasi diubah ke %d kbit/s."
+
+#: ext/twolame/gsttwolamemp2enc.c:411
+msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+msgstr "Gagal mengatur penyandi TwoLAME. Cek parameter penyandian anda."
+
+#: gst/asfdemux/gstasfdemux.c:412
+msgid "This stream contains no data."
+msgstr "Arus ini tidak berisi data."
+
+#: gst/asfdemux/gstasfdemux.c:419 gst/asfdemux/gstasfdemux.c:1971
+msgid "Internal data stream error."
+msgstr "Galat arus data internal."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Informasi judul tidak sah pada DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Tak dapat membaca informasi judul untuk DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Gagal membuka divais DVD '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Gagal mengatur pencarian berbasis PGC."
--- /dev/null
+# Italian translation for gst-plugins-ugly package of GStreamer project.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Luca Ferretti <elle.uca@infinito.it>, 2007, 2008, 2009.Luca Ferretti <elle.uca@infinito.it>, 2009.
+# Sebastiano Pistore <sebastianopistore.info@protonmail.ch>", 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2017-09-15 09:56+0200\n"
+"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.0.3\n"
+
+msgid "Could not read from CD."
+msgstr "Impossibile leggere dal CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossibile aprire il dispositivo CD in lettura."
+
+msgid "Disc is not an Audio CD."
+msgstr "Il disco non è un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Impossibile aprire il DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impossibile aprire il titolo %d del DVD"
+
+# go --> open (più comune in italiano)
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Apertura del capitolo %d del titolo %d del DVD non riuscita"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impossibile aprire il titolo %d del DVD. I titoli interattivi non sono "
+"supportati da questo elemento"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impossibile leggere il DVD. Questo potrebbe essere dovuto al fatto che il "
+"DVD è crittografato ed all'assenza nel sistema di una libreria di decodifica "
+"DVD."
+
+msgid "Could not read DVD."
+msgstr "Impossibile leggere il DVD."
+
+# NEW
+msgid "This stream contains no data."
+msgstr "Questo flusso non contiene dati."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Configurazione dell'encoder LAME mp3 non riuscita. Verificare i parametri "
+#~ "di codifica."
+
+# NEW
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Il bitrate richiesto di %d kbit/s per la proprietà «%s» non è consentito. "
+#~ "Il bitrate è stato cambiato a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Configurazione dell'encoder TwoLAME non riuscita. Verificare i parametri "
+#~ "di codifica."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Informazioni del titolo non valide sul DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Impossibile leggere le informazioni del titolo per il DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Apertura del device DVD «%s» non riuscita."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Impostazione del posizionamento basato su PGC non riuscita."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Errore interno dello stream di dati."
--- /dev/null
+# Japanese translation of gst-plugins-ugly
+# Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Makoto Kato <makoto.kt@gmail.com>, 2009-2011
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-22 19:42+0900\n"
+"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "CDを読むことができません。"
+
+msgid "Could not open CD device for reading."
+msgstr "読み込み用にCDデバイスを開くことができません。"
+
+msgid "Disc is not an Audio CD."
+msgstr "ディスクは音声CDではありません。"
+
+msgid "Could not open DVD"
+msgstr "DVDを開くことができません"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVDタイトル %d を開くことができません"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "DVDタイトル %2$d のチャプター %1$d へ移動できません"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVDタイトル %d を開くことができません。この要素はインタラクティブタイトルをサ"
+"ポートしていません。"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVDを読み込むことができませんでした。DVDが暗号化されているかDVDを解読するライ"
+"ブラリがインストールされていないからかもしれません。"
+
+msgid "Could not read DVD."
+msgstr "DVDを読み込むことができません。"
+
+msgid "This stream contains no data."
+msgstr "このストリームはデータを含んでいません。"
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "LAME MP3 音声エンコーダーの構成に失敗しました。エンコーディングパラメータ"
+#~ "をチェックしてください。"
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "要求されたビットレート %d kbit/s はプロパティ '%s' では許可されません。そ"
+#~ "のためビットレートは %d kbit/s へ変更されました。"
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "TwoLAMEエンコーダーの構成に失敗しました。エンコード用のパラメータをチェッ"
+#~ "クしてください。"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "内部データストリームエラー。"
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD上のタイトル情報が不正です。"
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "DVDからタイトル情報を読み込むことができません。"
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVDデバイス '%s' を開くことができません。"
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "プログラム・チェーン (PGC) のシークに失敗しました。"
--- /dev/null
+# translation of gst-plugins-ugly-0.10.7.2 to Lithuanian
+# This file is put in the public domain.
+#
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.7.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2008-05-14 02:52+0300\n"
+"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Nepavyko perskaityti DVD įrašo informacijos."
+
+#, fuzzy
+msgid "Could not open CD device for reading."
+msgstr "Nepavyko atverti %d DVD įrašo"
+
+msgid "Disc is not an Audio CD."
+msgstr ""
+
+msgid "Could not open DVD"
+msgstr "Nepavyko atverti DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nepavyko atverti %d DVD įrašo"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nepavyko peršokti į %2$d DVD įrašo %1$d dalį"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nepavyko atverti %d DVD įrašo. Šis elementas nepalaiko interaktyvių įrašų"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Nepavyko atverti DVD"
+
+msgid "This stream contains no data."
+msgstr "Šiame sraute nėra duomenų."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pageidautas bitų dažnis %d kbit/s savybei „%s“ neleidžiamas. Bitų dažnis "
+#~ "pakeistas į %d kbit/s."
+
+#, fuzzy
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Netaisyklinga DVD įrašo informacija."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nepavyko perskaityti DVD įrašo informacijos."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nepavyko atverti DVD įrenginio „%s“."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Nepavyko nustatyti PGC paieškos."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Šis failas užšifruotas ir negali būti parodytas."
--- /dev/null
+# Latvain translation of gst-plugins
+# This file is put in the public domain.
+# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
+# Rihards Prieditis <rprieditis@gmail.com>, 2011.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-04-20 16:24+0300\n"
+"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
+"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Lokalize 1.5\n"
+
+msgid "Could not read from CD."
+msgstr "Nevarēja nolasīt no CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nevarēja atvērt CD ierīci lasīšanai."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disks nav Audio CD."
+
+msgid "Could not open DVD"
+msgstr "Nevarēja atvērt DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nevarēja atvērt DVD nosaukumu %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Neizdevās pāriet uz %d nodaļu DVD nosaukumā %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nevarēja atvērt DVD nosaukumu %d. Šis elements nenodrošina interaktīvos "
+"nosaukumus."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nevarēja nolasīt DVD. Iespējams, ka DVD ir šifrēts un DVD atšifrēšanas "
+"bibliotēka nav instalēta."
+
+msgid "Could not read DVD."
+msgstr "Nevarēja nolasīt DVD."
+
+msgid "This stream contains no data."
+msgstr "Šī straume nesatur datus."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Neizdevās konfigurēt LAME mp3 audio kodētāju. Pārbaudiet savus kodēšanas "
+#~ "parametrus."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pieprasītais straumēšanas ātrums %d kbiti/s nepieciešamajai īpašībai “%s” "
+#~ "nav atļauts. Straumēšanas ātrums tika mainīts uz %d kbitiem/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Neizdevās konfigurēt TwoLAME kodētāju. Pārbaudiet savus kodēšanas "
+#~ "parametrus."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Nederīga DVD virsraksta informācija."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nevarēja nolasīt virsrakstu informāciju no DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Neizdevās atvērt DVD ierīci \"%s\"."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Neizdevās uzstādīt PCG balstīto meklēšanu."
--- /dev/null
+i18n = import('i18n')
+
+i18n.gettext('gst-plugins-ugly-1.0', preset: 'glib')
--- /dev/null
+# translation of gst-plugins-ugly-0.10.11.2.po to Malay
+# This file is put in the public domain.
+#
+# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.11.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2009-07-16 15:07+0800\n"
+"Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid "Could not read from CD."
+msgstr "Tidak dapat baca dari CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Tidak dapat buka peranti CD untuk baca."
+
+msgid "Disc is not an Audio CD."
+msgstr "Cakera bukan CD Audio"
+
+msgid "Could not open DVD"
+msgstr "Tidak dapat buka DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Tidak dapat buka tajuk %d DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gagal untuk ke bab %d pata tajuk DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Gagal buka tajuk %d DVD. Tajuk interaktrif tidak disokong oleh elemen ini"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Tidak dapat buka DVD"
+
+msgid "This stream contains no data."
+msgstr "Aliran ini tiada data."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Kadarbit %d yang diminta untuk properti '%s' tidak dibenarkan. Kadarbit "
+#~ "telah ditukar ke %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Ralat aliran data dalaman."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr "Gagal mengkonfigur pengekod LAME. Periksa parameter pengenkod anda."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Maklumat tajuk pada DVD tidak sah."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Tidak dapat baca maklumat tajuk pada DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Gagal membuka peranti DVD %s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Gagal untuk menetapkan carian berasaskan PGC."
--- /dev/null
+# Maltese translation for gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# NAME OF AUTHOR <michelbugeja@rabatmalta.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.9.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2008-11-13 18:18+0100\n"
+"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
+"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
+"Language: mt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Maltese\n"
+"X-Poedit-Country: Malta\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Ma nistax naqra mis-CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Ma nistax niftaħ is-CD biex naqra."
+
+msgid "Disc is not an Audio CD."
+msgstr "Id-diska mijhiex CD tal-awdjo."
+
+msgid "Could not open DVD"
+msgstr "Ma nistax niftaħ DVD."
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ma nistax niftaħ titlu %d tad-DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Problema biex immur kapitlu %d mit-titlu %d tad-DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ma nistax niftaħ titlu %d tad-DVD. Titli nterattivi mhux issapportjati minn "
+"dan l-element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Ma nistax niftaħ DVD."
+
+msgid "This stream contains no data."
+msgstr "L-istream ma fiha l-ebda data."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Mhux permess il-bitrate %d kbit/s rikjesta għal '%s'. Għalhekk il-bitrate "
+#~ "ġiet mibdula għal %d kbit/s."
+
+#, fuzzy
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Problema interna fid-data stream."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "L-informazzjoni tat-titlu tad-DVD mhux validu."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ma nistax naqra l-informazzjoni tat-titlu tad-DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Problema biex niftaħ l-apparat tad-DVD '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Problema biex nissettja tfittxija bbażata fuq PGC."
--- /dev/null
+# Norwegian bokmaal translation of gst-plugins-ugly.
+# This file is put in the public domain.
+#
+# Kjartan Maraas <kmaraas@gnome.org>, 2004-2007.
+# Johnny A. Solbu <johnny@solbu.net>, 2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-21 21:38+0100\n"
+"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "Kunne ikke lese fra CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disken er ikke en lyd-CD."
+
+msgid "Could not open DVD"
+msgstr "Kunne ikke åpne DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunne ikke åpne DVD-tittel %d."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Klarte ikke å gå til kapittel %d på DVD tittel %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kunne ikke åpne DVD-tittel %d. Interaktive titler er ikke støttet av dette "
+"elementet"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kunne ikke lese DVD-en. Dette kan være fordi DVD-en er kryptert DVD-"
+"dekrypteringsbiblioteket ikke er installert."
+
+msgid "Could not read DVD."
+msgstr "Kunne ikke lese DVD"
+
+msgid "This stream contains no data."
+msgstr "Denne strømmen inneholde ikke data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "Kunne ikke konfigurere LAME-koder. Sjekk parametere for kodingen."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Forespurt bitrate %d kbit/s for egenskap «%s» er ikke tillatt. Bitraten "
+#~ "ble endret til %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere TwoLAME-enkoder. Sjekk parameterene for kodingen."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern feil i datastrøm."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Denne filen er kryptert og kan ikke spilles av."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ugyldig tittelinformasjon på DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kunne ikke åpne DVD-enhet «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Kunne ikke sette PGC-basert søking."
--- /dev/null
+# translation of gst-plugins-ugly-1.10.0.nl.po to Dutch
+# Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2012, 2014, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2017-10-24 23:30+0100\n"
+"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "Kan niet van de cd lezen."
+
+msgid "Could not open CD device for reading."
+msgstr "Kan het CD-apparaat niet openen voor lezen."
+
+msgid "Disc is not an Audio CD."
+msgstr "De schrijf is geen audio-CD"
+
+msgid "Could not open DVD"
+msgstr "Kan DVD niet openen"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kan DVD-titel %d niet openen"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Kan niet naar hoofdstuk %d van DVD-titel %d gaan"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kan de DVD-titel %d niet openen. Interactieve titels worden door dit element "
+"niet ondersteund"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kon dvd niet lezen. Dit kan veroorzaakt zijn omdat de dvd versleuteld is en "
+"een bibliotheek voor ontcijferen van een dvd niet is geïnstalleerd."
+
+msgid "Could not read DVD."
+msgstr "Kon dvd niet lezen"
+
+msgid "This stream contains no data."
+msgstr "Deze stroom bevat geen gegevens."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Instellen van de LAME mp3-encoder is mislukt. Controleer uw parameters "
+#~ "voor codering."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "De gevraagde bitsnelheid %d kbits/s voor eigenschap '%s' is niet "
+#~ "toegestaan. De bitsnelheid is gewijzigd in %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kan de TwoLAME-encoder niet configureren. Controleer uw "
+#~ "encodingparameters."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Fout met interne gegevensstroom."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ongeldige titelinformatie op de DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kan de titelinformatie van de DVD niet lezen."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kan het DVD-apparaat '%s' niet openen."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Kan op PGC gebaseerd zoeken niet instellen."
--- /dev/null
+# Oriya translation of gst-plugins-0.8.3.pot.
+# Copyright (C) 2004, Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-0.8.3 package.
+# Gora Mohanty <gora_mohanty@yahoo.co.in>, 2004.
+# $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-09-27 13:32+0530\n"
+"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
+"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
+"Language: or\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "Could not open CD device for reading."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇ ନାହିଁ."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" ଫାଇଲ ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "No filename specified."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଉଲ୍ଲେଖିତ ହୋଇ ନାହିଁ."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ରକୁ %d ହର୍ଜରେ ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରେ ଲେଖିହେଲା ନାହିଁ."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "\"%s\" ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ର ପୂର୍ବରୁ ଅନ୍ଯ କାରିକା ଦ୍ବାରା ବ୍ଯବହାର କରାଯାଉଛି."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ବ୍ଯବହାର କରିହେଲା ନାହିଁ, ତାହାର ଅନୁମତି ଦେଖନ୍ତୁ."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଅବସ୍ଥିତ ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Volume"
+#~ msgstr "ପ୍ରବଳତା"
+
+#~ msgid "Bass"
+#~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
+
+#~ msgid "Treble"
+#~ msgstr "ଉଚ୍ଚ ସ୍ବର"
+
+#~ msgid "Synth"
+#~ msgstr "ସିନ୍ଥେସାଇଜର"
+
+#~ msgid "PCM"
+#~ msgstr "ପି.ସି.ଏମ."
+
+#~ msgid "Speaker"
+#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+#~ msgid "Line-in"
+#~ msgstr "ଲାଇନ-ଇନ"
+
+#~ msgid "Microphone"
+#~ msgstr "ମାଇକ୍ରୋଫୋନ୍"
+
+#~ msgid "CD"
+#~ msgstr "ସି.ଡି."
+
+#~ msgid "Mixer"
+#~ msgstr "ମିଶ୍ରଣ ଯନ୍ତ୍ର"
+
+#~ msgid "PCM-2"
+#~ msgstr "ପି.ସି.ଏମ.-୨"
+
+#~ msgid "Record"
+#~ msgstr "ଅନୁଲିପିକରଣ"
+
+#~ msgid "In-gain"
+#~ msgstr "ନିବେଶ-ବୃଦ୍ଧି"
+
+#~ msgid "Out-gain"
+#~ msgstr "ନିର୍ଗମ-ବୃଦ୍ଧି"
+
+#~ msgid "Line-1"
+#~ msgstr "ଲାଇନ-୧"
+
+#~ msgid "Line-2"
+#~ msgstr "ଲାଇନ-୨"
+
+#~ msgid "Line-3"
+#~ msgstr "ଲାଇନ-୩"
+
+#~ msgid "Digital-1"
+#~ msgstr "ସାଂଖ୍ଯିକ-୧"
+
+#~ msgid "Digital-2"
+#~ msgstr "ସାଂଖ୍ଯିକ-୨"
+
+#~ msgid "Digital-3"
+#~ msgstr "ସାଂଖ୍ଯିକ-୩"
+
+#~ msgid "Phone-in"
+#~ msgstr "ଫୋନ-ନିବେଶ"
+
+#~ msgid "Phone-out"
+#~ msgstr "ଫୋନ-ନିର୍ଗମ"
+
+#~ msgid "Video"
+#~ msgstr "ଭିଡିଓ"
+
+#~ msgid "Radio"
+#~ msgstr "ରେଡିଓ"
+
+#~ msgid "Monitor"
+#~ msgstr "ପ୍ରଦର୍ଶିକା"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "No device specified."
+#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Device is open."
+#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇଚ୍ଛି."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଗୋଟିଏ ଅନୁଲିପିକାର ନୁହେଁ."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ପର୍ଯ୍ଯାପ୍ତ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "%s ଉପାଦାନ ମିଳିଲା ନାହିଁ. ପୁନଃପ୍ରଦର୍ଶନ ପାଇଁ ଏହି ଉପାଦାନଟି ଆବଶ୍ଯକ. ଦୟା କରି ସଠିକ ପ୍ଲଗ୍ଇନ୍ "
+#~ "ସ୍ଥାପିତ କରନ୍ତୁ, ଓ 'gst-inspect %s' ଚଳାଇ ଯାଞ୍ଚ କରନ୍ତୁ କି ଏହା କାର୍ଯ୍ଯକାରୀ ଅଛି"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "କୌଣସି ବ୍ଯବହାରଯୋଗ୍ଯ ରଙ୍ଗକ୍ଷେତ୍ର ଉପାଦାନ ମିଳିଲା ନାହିଁ.\n"
+#~ "ଦୟା କରି ଗୋଟିଏ ଉପାଦାନ ସ୍ଥାପିତ କରି ପୁନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ."
--- /dev/null
+# Polish translation for gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-28 19:34+0100\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Odczyt z CD nie powiódł się."
+
+msgid "Could not open CD device for reading."
+msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
+
+msgid "Disc is not an Audio CD."
+msgstr "Płyta nie jest płytą CD Audio."
+
+msgid "Could not open DVD"
+msgstr "Nie udało się otworzyć DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nie udało się otworzyć tytułu DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nie udało się przemieścić do rozdziału %d tytułu DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nie udało się otworzyć tytułu DVD %d. Interaktywne tytułu nie są obsługiwane "
+"przez ten element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nie udało się odczytać DVD. Powodem może być to, że płyta jest zaszyfrowana, "
+"a biblioteka odszyfrowująca nie została zainstalowana."
+
+msgid "Could not read DVD."
+msgstr "Nie udało się odczytać DVD."
+
+msgid "This stream contains no data."
+msgstr "Ten strumień nie zawiera danych."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nie udało się skonfigurować kodera dźwięku mp3 LAME. Proszę sprawdzić "
+#~ "parametry kodowania."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Żądana prędkość bitowa %d kbit/s dla właściwości '%s' nie jest dozwolona. "
+#~ "Prędkość bitowa zmieniona na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nie udało się skonfigurować kodera TwoLAME. Proszę sprawdzić parametry "
+#~ "kodowania."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Błąd wewnętrzny strumienia danych."
--- /dev/null
+# Brazilian Portuguese translation of gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Copyright (C) 2007-2013 Free Software Foundation, Inc.
+# Raphael Higino <In memoriam>, 2007.
+# Fabrício Godoy <skarllot@gmail.com>, 2008-2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-12-28 19:54-0200\n"
+"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Não foi possível ler as informações do CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Não foi possível abrir o dispositivo de CD para leitura."
+
+msgid "Disc is not an Audio CD."
+msgstr "O disco não é um CD de áudio."
+
+msgid "Could not open DVD"
+msgstr "Não foi possível abrir o DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Não foi possível abrir o título %d do DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Falha ao avançar para o capítulo %d do título %d do DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Não foi possível abrir o título %d do DVD. Não há suporte a títulos "
+"interativos por este elemento"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Não foi possível ler o DVD. O motivo pode ser que o DVD está criptografado e "
+"uma biblioteca de descriptografia de DVD não está instalada."
+
+msgid "Could not read DVD."
+msgstr "Não foi possível ler o DVD."
+
+msgid "This stream contains no data."
+msgstr "Este fluxo não contém dados."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Falha ao configurar o codificador de áudio MP3 LAME. Verifique seus "
+#~ "parâmetros de codificação."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "A taxa de bits, %d kbits/s, requisitada pela propriedade \"%s\" não é "
+#~ "permitida. A taxa de bits foi alterada para %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Falha ao configurar o codificador TwoLAME. Verifique seus parâmetros de "
+#~ "codificação."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro interno no fluxo de dados."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "As informações de título no DVD são inválidas."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Não foi possível ler as informações de título do DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Falha ao abrir o dispositivo de DVD \"%s\"."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Falha ao definir busca baseada em PGC."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Este arquivo está criptografado e não pôde ser reproduzido."
--- /dev/null
+# Romanian translation for gst-plugins-ugly
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2010-08-16 03:32+0300\n"
+"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+msgid "Could not read from CD."
+msgstr "Nu s-a putut citi de pe CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nu s-a putut deschide dispozitivul CD pentru citire."
+
+msgid "Disc is not an Audio CD."
+msgstr "Discul nu este un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Nu s-a putut deschide DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nu s-a putut deschide titlul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nu s-a putut sări la capitolul %d al titlului DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nu s-a putut deschide titlul DVD %d. Titlurile interactive nu sunt suportate "
+"de acest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Nu s-a putut deschide DVD"
+
+msgid "This stream contains no data."
+msgstr "Fluxul acesta nu conține date."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Rata de biți solicitată de %d kbiți/s pentru proprietatea „%s” nu este "
+#~ "permisă. Rata de biți a fost modificată la %d kbiți/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Eroare internă a fluxului de date."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul LAME. Verificați parametrii de codare."
--- /dev/null
+# Translation for gst-plugins-ugly messages to Russian
+# This file is put in the public domain.
+#
+# Артём Попов <artfwo@gmail.com>, 2009.
+# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-01 13:38+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgid "Could not read from CD."
+msgstr "Не удалось прочесть CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Не удалось открыть CD-устройство для чтения."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск не в формате аудио-CD."
+
+msgid "Could not open DVD"
+msgstr "Не удалось открыть DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не удалось открыть DVD-раздел %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Ошибка перехода к эпизоду %d DVD-раздела %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не удалось открыть DVD-раздел %d. Интерактивные разделы не поддерживаются "
+"этим элементом"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не удалось прочесть DVD. Это могло произойти из-за того, что DVD закодирован "
+"и не установлена библиотека декодирования DVD."
+
+msgid "Could not read DVD."
+msgstr "Не удалось прочесть DVD."
+
+msgid "This stream contains no data."
+msgstr "Поток не содержит данных."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Не удалось настроить аудио-кодировщик mp3 LAME. Проверьте параметры "
+#~ "кодирования."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Запрошенный битрейт в %d кбит/с для свойства «%s» недопустим. Битрейт был "
+#~ "изменён на %d кбит/с."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Не удалось настроить кодировщик TwoLAME. Проверьте параметры кодирования."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Неверные сведения о разделах на DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Не удалось прочесть сведения о разделах для DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Ошибка при открытии DVD-устройства «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Не удалось включить PGC-позиционирование."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Файл зашифрован и не может быть воспроизведён."
--- /dev/null
+# Czech translations of gst-plugins.
+# Copyright (C) 2004 gst-plugins' COPYRIGHT HOLDER
+# This file is put in the public domain.
+# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2009, 2010, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-01-30 10:28+0100\n"
+"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+
+msgid "Could not read from CD."
+msgstr "Nepodarilo sa čítať z CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
+
+msgid "Disc is not an Audio CD."
+msgstr "Tento disk nie je zvukové CD."
+
+msgid "Could not open DVD"
+msgstr "Nepodarilo sa otvoriť DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nepodarilo sa otvoriť DVD titul %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nepodarilo sa preskočiť na kapitolu %d pre DVD titul %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nepodarilo sa otvoriť DVD titul %d. Interaktívne tituly nie sú podporované "
+"týmto prvkom"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nepodarilo sa čítať DVD. Možno je DVD šifrované a nie je nainštalovaná "
+"dešifrovacia knižnica."
+
+msgid "Could not read DVD."
+msgstr "Nepodarilo sa čítať DVD."
+
+msgid "This stream contains no data."
+msgstr "Tento prúd neobsahuje žiadne údaje."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nepodarilo sa nastaviť LAME mp3 enkodér. Skontrolujte svoje kódovacie "
+#~ "nastavenia, prosím."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Požadovaná bitová rýchlosť %d kbit/s pre vlastnosť '%s' nie je dovolená. "
+#~ "Bitová rýchlosť bola nastavená na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepodarilo sa nastaviť TwoLAME enkodér. Skontrolujte svoje kódovacie "
+#~ "nastavenia, prosím."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Chybný titul na DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nepodarilo sa načítať informáciu o titule DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nepodarilo sa otvoriť DVD zariadenie '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Nepodarilo sa nastaviť preskočenie na báze PGC. "
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Tento súbor je šifrovaný a nedá sa prehrať."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Nemohu otevřít soubor \"%s\" pro zápis."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Chyba při zavírání souboru \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Nemohu otevřít soubor \"%s\" pro čtení."
+
+#~ msgid "No filename specified."
+#~ msgstr "Nezadán název souboru."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Žádný nebo neplatný vstup zvuku, proud AVI bude poškozen."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zařízení zvuku \"%s\" pro zápis."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít řídicí zařízení \"%s\" pro zápis."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\" na %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Nemohu zavřít zařízení zvuku \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Nemohu zavřít řídicí zařízení \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zařízení videa \"%s\" pro zápis."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Nemohu zavřít zařízení videa \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Nemohu zapisovat do zařízení \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "Zařízení OSS \"%s\" již používá jiný program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Nemohu přistupovat k zařízení \"%s\", zkontrolujte jeho oprávnění."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Zařízení \"%s\" neexistuje."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zažízení \"%s\" pro zápis."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Nemohu otevřít zažízení \"%s\" pro čtení."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
+
+#~ msgid "Volume"
+#~ msgstr "Hlasitost"
+
+#~ msgid "Bass"
+#~ msgstr "Basy"
+
+#~ msgid "Treble"
+#~ msgstr "Výšky"
+
+#~ msgid "Synth"
+#~ msgstr "Synth"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Reproduktor"
+
+#~ msgid "Line-in"
+#~ msgstr "Line-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixér"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Nahrávání"
+
+#~ msgid "In-gain"
+#~ msgstr "Vstupní-zisk"
+
+#~ msgid "Out-gain"
+#~ msgstr "Výstupní-zisk"
+
+#~ msgid "Line-1"
+#~ msgstr "Line-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Line-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Line-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digitální-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digitální-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digitální-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefon-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefon-out"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Rádio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Reproduktor"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro čtení."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Nezadán název souboru"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro zápis: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nezadán název souboru"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
+
+#~ msgid "No device specified."
+#~ msgstr "Nezadáno zařízení."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nemohu otevřít zařízení \"%s\" pro čtení a zápis."
+
+#~ msgid "Device is open."
+#~ msgstr "Zařízení je otevřeno."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Zařízení \"%s\" není zachytávací zařízení."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Nemohu od zařízení \"%s\" získat vyrovnávací paměti."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Nemohu od zařízení \"%s\" získat dost vyrovnávacích pamětí."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "Element %s nelze najít. Tento element je pro přehrávání nutný. "
+#~ "Nainstalujte prosím potřebný modul a ověřte, že funguje, spuštěním 'gst-"
+#~ "inspect %s'"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Nenalezen použitelný element colorspace.\n"
+#~ "Nainstalujte prosím nějaký a restartujte."
--- /dev/null
+# Slovenian translation for gst-plugins-ugly.
+# Copyright (C) 2009 - 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Matej Urbančič <matej.urban@gmail.com>, 2009.
+# Klemen Košir <klemen.kosir@gmx.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-03-26 22:48+0100\n"
+"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+msgid "Could not read from CD."
+msgstr "S CD-ja ni mogoče brati."
+
+msgid "Could not open CD device for reading."
+msgstr "Naprave CD ni mogoče odpreti za branje."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk ni zvočni CD."
+
+msgid "Could not open DVD"
+msgstr "DVD-ja ni mogoče odpreti"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD naslova %d ni mogoče odpreti."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Napaka med odpiranjem poglavja %d DVD naslova %d."
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr "DVD naslova %d ni mogoče odpreti. Interaktivni naslovi niso podprti."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD-ja ni mogoče prebrati. Verjetno je DVD šifriran, knjižnica za "
+"dešifriranje pa ni nameščena."
+
+msgid "Could not read DVD."
+msgstr "DVD-ja ni mogoče prebrati."
+
+msgid "This stream contains no data."
+msgstr "Pretok ne vsebuje podatkov."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem zvočnega kodirnika mp3 LAME. Preverite parametre "
+#~ "kodiranja."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Zahtevana bitna hitrost %d kbit/s za lastnost \"%s\" ni dovoljena. Bitna "
+#~ "hitrost je bila spremenjena na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem kodirnika TwoLAME. Preverite parametre kodiranja."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
+#~ msgid "Failed to configure LAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem kodirnika LAME. Preverite parametre kodiranja."
--- /dev/null
+# Përkthimi i mesazheve të gst-plugins në shqip.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Laurent Dhima <laurenti@alblinux.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-08-07 20:29+0200\n"
+"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
+"Language-Team: Albanian <begraj@hotmail.com>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "I pamundur shkrimi tek file \"%s\"."
+
+msgid "Could not open CD device for reading."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Dispozitivi nuk është hapur."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "I pamundur shkrimi tek file \"%s\"."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "I pamundur shkrimi tek file \"%s\"."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "E pamundur hapja e file \"%s\" në shkrim."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Gabim gjatë mbylljes së file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file \"%s\" për lexim."
+
+#~ msgid "No filename specified."
+#~ msgstr "Nuk është përcaktuar emri i file."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit të zërit \"%s\" për shkrim."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit të kontrollit \"%s\" për shkrim."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "I pamundur konfigurimi i dispozitivit të zërit \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "I pamundur rregullimi i dispozitivit audio \"%s\" në %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit të kontrollit \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit video \"%s\" për shkrim."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit video \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "I pamundur shkrimi në dispozitivin \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr ""
+#~ "Dispozitivi OSS \"%s\" është duke u përdorur nga një tjetër program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr ""
+#~ "E pamundur futja në dispozitivin \"%s\", kontrollo të drejtat e tij."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Dispozitivi \"%s\" nuk ekziston."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për shkrim."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "Volume"
+#~ msgstr "Volumi"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Sintetizuesi"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Zë folës"
+
+#~ msgid "Line-in"
+#~ msgstr "Linja-hyrje"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofoni"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Kontrolli i volumit"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Regjistrimi"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Linja-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Linja-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Linja-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dixhitale-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dixhitale-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dixhitale-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-hyrja"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-dalja"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Ekrani"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Zë folës"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për lexim."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për shkrim: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "No device specified."
+#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
+
+#~ msgid "Device is open."
+#~ msgstr "Dispozitivi është i hapur."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Dispozitivi \"%s\" nuk është një dispozitiv marrje."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers të mjaftueshëm nga dispozitivi \"%s\"."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "E pamundur gjetja e elementit %s. Ky element është thelbësor për "
+#~ "playback. Ju lutem instaloni plug-in e duhur dhe kontrollo funksionimin "
+#~ "duke ekzekutuar 'gst-inspect %s'"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Nuk arrin të gjehet asnjë element ngjyra e hapësirës.\n"
+#~ "Ju lutem instaloni një dhe rinisni."
--- /dev/null
+# Serbian translation of gst-plugins
+# This file is put in the public domain.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.1.4\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2013-10-03 22:30+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Project-Style: gnome\n"
+
+msgid "Could not read from CD."
+msgstr "Не могу да читам ЦД."
+
+msgid "Could not open CD device for reading."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск није Звучни ЦД."
+
+msgid "Could not open DVD"
+msgstr "Не могу да отворим ДВД"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не могу да отворим ДВД наслов „%d“"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Нисам успео да стигнем до поглавља „%d“ ДВД наслова „%d“"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не могу да отворим ДВД наслов „%d“. Овај елемент не подржава међудејствене "
+"наслове"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не могу да читам ДВД. Можда зато што је ДВД шифрован а библиотека за "
+"дешифровање ДВД-а није инсталирана."
+
+msgid "Could not read DVD."
+msgstr "Не могу да читам ДВД."
+
+msgid "This stream contains no data."
+msgstr "Овај ток не садржи податке."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Нисам успео да подесим енкодер звука ЛАМЕ мп3. Проверите ваше параметре "
+#~ "кодирања."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Тражени проток података од %d kbit/s за „%s“ није допуштен. Проток "
+#~ "података је постављен на %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Нисам успео да подесим ДваЛАМЕ енкодер. Проверите ваше параметре кодирања."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Унутрашња грешка тока података."
--- /dev/null
+# Swedish translation for gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009, 2014, 2015, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Daniel Nylander <po@danielnylander.se>, 2007, 2008, 2009.
+# Sebastian Rasmussen <sebras@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-01-17 02:02+0000\n"
+"PO-Revision-Date: 2019-01-17 02:02+0000\n"
+"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.6\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Kunde inte läsa från cd."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Kunde inte öppna cd-enheten för läsning."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "Skivan är inte en ljud-cd."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "Kunde inte öppna dvd"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
+#: ext/dvdread/dvdreadsrc.c:629
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunde inte öppna dvd-titel %d"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Misslyckades med att gå till kapitel %d för dvd-titel %d"
+
+#: ext/dvdread/dvdreadsrc.c:636
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Kunde inte öppna dvd-titel %d. Interaktiva titlar stöds inte av det här elementet"
+
+#: ext/dvdread/dvdreadsrc.c:991
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Kunde ej läsa dvd. Detta kan vara för att dvd:n är krypterad och ett dvd-avkrypteringsbibliotek inte är installerat."
+
+#: ext/dvdread/dvdreadsrc.c:994
+msgid "Could not read DVD."
+msgstr "Kunde inte läsa dvd."
+
+#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
+msgid "This stream contains no data."
+msgstr "Den här strömmen innehåller inget data."
+
+#~ msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+#~ msgstr "Misslyckades med att konfigurera LAME mp3 ljudkodare. Kontrollera dina kodningsparametrar."
+
+#~ msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+#~ msgstr "Den begärda bitfrekvensen %d kbit/s för egenskapen \"%s\" tillåts inte. Bitfrekvensen ändrades till %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "Misslyckades med att konfigurera TwoLAME-kodaren. Kontrollera dina kodningsparametrar."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Fel i intern dataström."
--- /dev/null
+# Tamil messages for gst-plugins-ugly.
+# This file is put in the public domain.
+# List of contributors follow:
+# Poorajith <gokulkannanst@gmail.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-01-17 02:02+0000\n"
+"PO-Revision-Date: 2019-02-06 01:10+0530\n"
+"Last-Translator: Arun Isaac <arunisaac@systemreboot.net>\n"
+"Language-Team: Tamil <tamil@systemreboot.net>\n"
+"Language: ta\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "குறுவட்டைப் படிக்க இயலவில்லை."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "குறுவட்டுக் கருவியைப் படிப்பதற்காகத் திறக்க இயலவில்லை."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "இவ்வட்டு ஒலி குறுவட்டல்ல."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "இறுவட்டைத் திறக்க இயல்வில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
+#: ext/dvdread/dvdreadsrc.c:629
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "இறுவட்டுத் தலைப்பு %2$d யில் %1$d என்ற அத்தியாயத்திற்குச் செல்ல இயலவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:636
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை. ஊடாட்ட தலைப்புகளுக்கு இவ்வுறுப்பில் ஆதரவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:991
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr ""
+"இறுவட்டைப் படிக்க இயலவில்லை. இது இறுவட்டு மறையாக்கப்பட்டிருந்து அதனை மறைவிலக்க\n"
+"தேவையான நிரலகம் நிறுவப்படாததால் இருக்கலாம்."
+
+#: ext/dvdread/dvdreadsrc.c:994
+msgid "Could not read DVD."
+msgstr "இறுவட்டைப் படிக்க இயலவில்லை."
+
+#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
+msgid "This stream contains no data."
+msgstr "இத்தரவுத்தொடரில் எத்தரவுமில்லை."
--- /dev/null
+# translation of gst-plugins-ugly-1.0.3.po to Turkish
+# This file is put in the public domain.
+# Server Acim <sacim@kde.org.tr>, 2009.
+# Server Acim <sacim@kde.org.tr>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-01 01:19+0200\n"
+"Last-Translator: Server Acim <serveracim@gmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid "Could not read from CD."
+msgstr "CD okuyamıyor."
+
+msgid "Could not open CD device for reading."
+msgstr "Okumak için CD aygıtını açamıyor."
+
+msgid "Disc is not an Audio CD."
+msgstr "Bu disk bir Ses CD'si değil."
+
+msgid "Could not open DVD"
+msgstr "DVD açılamıyor"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD başlığı açılamıyor %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Bu dosyalara okunamadı:bölüm %d ve DVD başlığı %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVD başlığı açılamadı %d. Bu öğede etkileşimli Interactive başlıklar "
+"desteklenmiyor"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD okunamıyor. Bunun sebebi, DVD'nin şifrelenmiş olması veya DVD şifre "
+"çzöme kitaplığının kurulu olmaması olabilir."
+
+msgid "Could not read DVD."
+msgstr "DVD okunamıyor."
+
+msgid "This stream contains no data."
+msgstr "Akış veri içermiyor."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "LAME mp3 kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
+#~ "denetleyiniz."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "İstenen bit oranı %d kbit/s bu özellik için '%s' onaylanmadı. Bu yüzden "
+#~ "bit oranı şuna dönüştürüldü %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "TwoLAME kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
+#~ "denetleyiniz."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "İç veri akış hatası."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD'de geçersiz başlık bilgisi."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "DVD'deki başlık bilgisi okunamıyor."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVD aygıtı açılamadı '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC tabanlı arama ayarlanamadı."
--- /dev/null
+# Ukrainian translation to gst-plugins-ugly.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-28 20:25+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.5\n"
+
+msgid "Could not read from CD."
+msgstr "Не вдалося прочитати дані з компакт-диска."
+
+msgid "Could not open CD device for reading."
+msgstr "Не вдалося відкрити носій для читання."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск не записано у форматі Audio CD."
+
+msgid "Could not open DVD"
+msgstr "Не вдалося відкрити DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не вдалося відкрити частину DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Не вдалося перейти до розділу %d частини DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не вдалося відкрити заголовок DVD %d. Інтерактивні заголовки не "
+"підтримуються цим елементом"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не вдалося прочитати DVD. Причиною може бути те, що DVD зашифровано, а "
+"бібліотеку розшифрування DVD не встановлено."
+
+msgid "Could not read DVD."
+msgstr "Не вдалося прочитати DVD."
+
+msgid "This stream contains no data."
+msgstr "Потік не містить даних."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Помилка при налаштовуванні кодера LAME для звукових даних у форматі MP3. "
+#~ "Перевірте параметри кодування."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Запитана бітова швидкість %d кбіт/с для властивості «%s» є неприпустимою. "
+#~ "Бітову швидкість змінено на %d кбіт/с."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Помилка при налаштовуванні кодувальника TwoLAME. Перевірте параметри "
+#~ "кодування."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Помилка внутрішнього потоку даних."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Файл зашифрований та не може бути відтворений."
--- /dev/null
+# Vietnamese translation for GST Plugins Ugly.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.3.90\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-06-30 09:20+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+msgid "Could not read from CD."
+msgstr "Không thể đọc từ đĩa CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Không thể mở thiết bị đĩa CD để đọc."
+
+msgid "Disc is not an Audio CD."
+msgstr "Đây không phải là một đĩa CD âm nhạc."
+
+msgid "Could not open DVD"
+msgstr "Không thể mở đĩa DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Không thể mở đĩa DVD tên %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gặp lỗi khi nhảy đến chương %d của đĩa DVD tên %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Không thể mở đĩa DVD tên %d. Phần tử này không hỗ trợ tiêu đề tương tác."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Không thể đọc đĩa DVD. Nguyên nhân có thể là DVD đã bị mã hóa và thư viện "
+"giải mã DVD chưa được cài đặt."
+
+msgid "Could not read DVD."
+msgstr "Không thể đọc đĩa DVD."
+
+msgid "This stream contains no data."
+msgstr "Luồng này không chứa dữ liệu."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Gặp lỗi khi cấu hình bộ giải mã âm thanh mp3 của LAME. Hãy kiểm tra các "
+#~ "tham số giải mã."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Không cho phép tỷ lệ đã yêu cầu %d kbit/giây cho thuộc tính “%s” nên tỷ "
+#~ "lệ bit bị thay đổi thành %d kbit/g."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Gặp lỗi khi cấu hình bộ biên mã TwoLAME. Hãy kiểm tra lại các tham số "
+#~ "giải mã."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
--- /dev/null
+# Chinese (simplified) translation for gst-plugins-ugly.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Wenzheng Hu <db_lobster@163.com>, 2007.
+# LI Daobing <lidaobing@gmail.com>, 2008, 2009.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.5.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-08-28 15:36+0800\n"
+"Last-Translator: Mingye Wang <arthur200126@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.4\n"
+
+msgid "Could not read from CD."
+msgstr "无法读取 CD。"
+
+msgid "Could not open CD device for reading."
+msgstr "无法打开以读方式打开 CD 设备。"
+
+msgid "Disc is not an Audio CD."
+msgstr "盘类型不是音频 CD。"
+
+msgid "Could not open DVD"
+msgstr "无法打开 DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "无法打开 DVD 标题 %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "跳转到章节 %d, DVD 标题 %d 失败"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr "无法打开 DVD 标题 %d. 这个元素不支持互动标题"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr "无法读取 DVD。可能 DVD 光盘已加密,但 DVD 解密库没有安装。"
+
+msgid "Could not read DVD."
+msgstr "无法读取 DVD。"
+
+msgid "This stream contains no data."
+msgstr "这个串流中没有包含数据."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "配置 LAME mp3 编码器失败. 请检查你的编码参数."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr "不允许的比特率 %d kbit/s 于 '%s'. 比特率已改变成 %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "设置 TwoLAME 编码器失败. 请检查你的编码参数."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "内部数据流错误。"
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "无效的 DVD 标题信息。"
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "无法读取为 DVD 读取标题信息。"
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "无法打开 DVD 设备 '%s'。"
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "设置基于 PGC 的定位失败。"
--- /dev/null
+#!/usr/bin/env python3
+#
+# Copyright (C) 2020 Tim-Philipp Müller <tim centricular net>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+import os
+import subprocess
+import shutil
+import tempfile
+
+if __name__ == "__main__":
+ dist_root = os.environ['MESON_DIST_ROOT']
+ build_root = os.environ['MESON_BUILD_ROOT']
+ source_root = os.environ['MESON_SOURCE_ROOT']
+ pwd = os.environ['PWD']
+ tmpdir = tempfile.gettempdir()
+
+ module = os.path.basename(os.path.normpath(source_root))
+
+ # Generate pot file
+ print('Generating pot file ...')
+ subprocess.run(['ninja', '-C', build_root, module + '-1.0-pot'], check=True)
+
+ # Dist pot file in tarball
+ print('Copying pot file into dist staging directory ...')
+ pot_src = os.path.join(source_root, 'po', module + '-1.0.pot')
+ dist_po_dir = os.path.join(dist_root, 'po')
+ shutil.copy2(pot_src, dist_po_dir)
--- /dev/null
+#!/usr/bin/env python3
+#
+# extract-release-date-from-doap-file.py VERSION DOAP-FILE
+#
+# Extract release date for the given release version from a DOAP file
+#
+# Copyright (C) 2020 Tim-Philipp Müller <tim centricular com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+import sys
+import xml.etree.ElementTree as ET
+
+if len(sys.argv) != 3:
+ sys.exit('Usage: {} VERSION DOAP-FILE'.format(sys.argv[0]))
+
+release_version = sys.argv[1]
+doap_fn = sys.argv[2]
+
+tree = ET.parse(doap_fn)
+root = tree.getroot()
+
+namespaces = {'doap': 'http://usefulinc.com/ns/doap#'}
+
+for v in root.findall('doap:release/doap:Version', namespaces=namespaces):
+ if v.findtext('doap:revision', namespaces=namespaces) == release_version:
+ release_date = v.findtext('doap:created', namespaces=namespaces)
+ if release_date:
+ print(release_date)
+ sys.exit(0)
+
+sys.exit('Could not find a release with version {} in {}'.format(release_version, doap_fn))
--- /dev/null
+# dist scripts
+if not meson.is_subproject()
+ meson.add_dist_script('dist-translations.py')
+endif
--- /dev/null
+/*
+ * GStreamer
+ *
+ * unit test for amrnbenc
+ *
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+#define SRC_CAPS "audio/x-raw, format = (string)" GST_AUDIO_NE (S16) ", " \
+ "layout = (string) interleaved, channels = (int) 1, rate = (int) 8000"
+#define SINK_CAPS "audio/AMR"
+
+static GstPad *srcpad, *sinkpad;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (SINK_CAPS)
+ );
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (SRC_CAPS)
+ );
+
+static void
+buffer_unref (void *buffer, void *user_data)
+{
+ gst_buffer_unref (GST_BUFFER (buffer));
+}
+
+static GstElement *
+setup_amrnbenc (void)
+{
+ GstElement *amrnbenc;
+ GstCaps *caps;
+ GstBus *bus;
+
+ GST_DEBUG ("setup_amrnbenc");
+
+ amrnbenc = gst_check_setup_element ("amrnbenc");
+ srcpad = gst_check_setup_src_pad (amrnbenc, &srctemplate);
+ sinkpad = gst_check_setup_sink_pad (amrnbenc, &sinktemplate);
+ gst_pad_set_active (srcpad, TRUE);
+ gst_pad_set_active (sinkpad, TRUE);
+
+ bus = gst_bus_new ();
+ gst_element_set_bus (amrnbenc, bus);
+
+ fail_unless (gst_element_set_state (amrnbenc,
+ GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE,
+ "could not set to playing");
+
+ caps = gst_caps_from_string (SRC_CAPS);
+ gst_check_setup_events (srcpad, amrnbenc, caps, GST_FORMAT_TIME);
+ gst_caps_unref (caps);
+
+ buffers = NULL;
+ return amrnbenc;
+}
+
+static void
+cleanup_amrnbenc (GstElement * amrnbenc)
+{
+ GstBus *bus;
+
+ /* free encoded buffers */
+ g_list_foreach (buffers, buffer_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+
+ bus = GST_ELEMENT_BUS (amrnbenc);
+ gst_bus_set_flushing (bus, TRUE);
+ gst_object_unref (bus);
+
+ GST_DEBUG ("cleanup_amrnbenc");
+ gst_pad_set_active (srcpad, FALSE);
+ gst_pad_set_active (sinkpad, FALSE);
+ gst_check_teardown_src_pad (amrnbenc);
+ gst_check_teardown_sink_pad (amrnbenc);
+ gst_check_teardown_element (amrnbenc);
+}
+
+/* push a random block of audio of the given size */
+static void
+push_data (gint size, GstFlowReturn expected_return)
+{
+ GstBuffer *buffer;
+ GstFlowReturn res;
+
+ buffer = gst_buffer_new_and_alloc (size);
+ /* make valgrind happier */
+ gst_buffer_memset (buffer, 0, 0, size);
+
+ res = gst_pad_push (srcpad, buffer);
+ fail_unless (res == expected_return,
+ "pushing audio returned %d (%s) not %d (%s)", res,
+ gst_flow_get_name (res), expected_return,
+ gst_flow_get_name (expected_return));
+}
+
+GST_START_TEST (test_enc)
+{
+ GstElement *amrnbenc;
+
+ amrnbenc = setup_amrnbenc ();
+ push_data (1000, GST_FLOW_OK);
+
+ cleanup_amrnbenc (amrnbenc);
+}
+
+GST_END_TEST;
+
+static Suite *
+amrnbenc_suite ()
+{
+ Suite *s = suite_create ("amrnbenc");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_enc);
+ return s;
+}
+
+GST_CHECK_MAIN (amrnbenc);
--- /dev/null
+/* GStreamer
+ *
+ * unit test for mpeg2dec
+ *
+ * Copyright (c) 2006 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/video/video-info.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=176,height=144,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
+*/
+
+static const guint8 test_stream1[] = {
+ 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00, 0x90, 0x13,
+ 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
+ 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
+ 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
+ 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+ 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x88, 0x00, 0x00, 0x01, 0x02, 0x13, 0xf8, 0xe5,
+ 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x03, 0x13,
+ 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+ 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+ 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+ 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+ 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x88, 0x00, 0x00, 0x01, 0x06, 0x13, 0xf8, 0xe5,
+ 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x07, 0x13,
+ 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+ 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+ 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+ 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+ 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x88, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
+ 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+ 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+ 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+ 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x57, 0xff,
+ 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+ 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01,
+ 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+ 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+ 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0x57, 0xff,
+ 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+ 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02,
+ 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+ 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+ 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+ 0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x03, 0x57, 0xff,
+ 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+ 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+ 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x03,
+ 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0xb3, 0x0b, 0x00, 0x90, 0x13, 0xff, 0xff, 0xe0,
+ 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00,
+ 0x08, 0x07, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f,
+ 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+ 0x01, 0x02, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
+ 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
+ 0x00, 0x00, 0x01, 0x03, 0x13, 0xf8, 0xe5, 0x29,
+ 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x88, 0x00, 0x00, 0x01, 0x04, 0x13, 0xf8,
+ 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x05,
+ 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+ 0x01, 0x06, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
+ 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
+ 0x00, 0x00, 0x01, 0x07, 0x13, 0xf8, 0xe5, 0x29,
+ 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x88, 0x00, 0x00, 0x01, 0x08, 0x13, 0xf8,
+ 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x09,
+ 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb,
+ 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+ 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0xd7,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+ 0x01, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+ 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+ 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb,
+ 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+ 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0xd7,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+ 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+ 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb,
+ 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+ 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0xd7,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+ 0x03, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+ 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+ 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+ 0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+ 0x00, 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb,
+ 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+ 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+ 0xb3, 0x80, 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00,
+ 0x90, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00,
+ 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x22, 0x80,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8,
+ 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5,
+ 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x02, 0x13,
+ 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+ 0x03, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+ 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+ 0x00, 0x01, 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+ 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x88, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5,
+ 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x06, 0x13,
+ 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+ 0x07, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+ 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+ 0x00, 0x01, 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+ 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x88, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5,
+ 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xb3, 0x80,
+};
+
+static const guint test_stream_sizes[] = {
+ 497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 497, 90
+};
+
+/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=183,height=217,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
+*/
+
+static const guint8 test_stream2[] = {
+ 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13,
+ 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
+ 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
+ 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
+ 0x00, 0x01, 0x01, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x02, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x03, 0x23,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x04, 0x23, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x05, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x06, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x07, 0x23,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x08, 0x23, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x09, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x0a, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0b, 0x23,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x0c, 0x23, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x0d, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x0e, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x1a,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x1a, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x1a, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x1a, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x1a, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x1a,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x1a, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x1a, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x1a, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
+ 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
+ 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
+ 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
+ 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03,
+ 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+ 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb, 0x80,
+ 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+ 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0xb3, 0x0b,
+ 0x70, 0xd9, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00,
+ 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x07,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff,
+ 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3,
+ 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf9,
+ 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+ 0x00, 0x00, 0x01, 0x02, 0x13, 0xf9, 0x45, 0x29,
+ 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+ 0x01, 0x03, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+ 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x04,
+ 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x20, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf9,
+ 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+ 0x00, 0x00, 0x01, 0x06, 0x13, 0xf9, 0x45, 0x29,
+ 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+ 0x01, 0x07, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+ 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x08,
+ 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x20, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf9,
+ 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+ 0x00, 0x00, 0x01, 0x0a, 0x13, 0xf9, 0x45, 0x29,
+ 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+ 0x01, 0x0b, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+ 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0c,
+ 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x20, 0x00, 0x00, 0x01, 0x0d, 0x13, 0xf9,
+ 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+ 0x00, 0x00, 0x01, 0x0e, 0x13, 0xf9, 0x45, 0x29,
+ 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x97,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x17,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x97,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x17,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x97,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x17,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
+ 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+ 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x97,
+ 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+ 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13, 0xff, 0xff,
+ 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8,
+ 0x00, 0x08, 0x22, 0x80, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5,
+ 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+ 0x01, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x02, 0x13,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x03, 0x13, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x04, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x05, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x06, 0x13,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x07, 0x13, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x08, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x09, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0a, 0x13,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x0b, 0x13, 0xf9, 0x45,
+ 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+ 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+ 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+ 0x00, 0x01, 0x0c, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+ 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+ 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+ 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+ 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+ 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+ 0x0d, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+ 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+ 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+ 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+ 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0e, 0x13,
+ 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+ 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+ 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+ 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+ 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+ 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+ 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
+ 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+ 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+ 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+ 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08,
+ 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+ 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12,
+ 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+ 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70,
+ 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+ 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1,
+ 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+ 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc,
+ 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+ 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+ 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+ 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+ 0xa5, 0xfb, 0x85, 0xe6, 0xc0
+};
+
+static const guint test_stream2_sizes[] = {
+ 803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 803, 228
+};
+
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/mpeg, "
+ "systemstream=(boolean)false, " "mpegversion=(int)2")
+ );
+
+GstElement *
+setup_mpeg2dec ()
+{
+ GstElement *mpeg2dec;
+ GstCaps *caps;
+
+ GST_DEBUG ("setup_mpeg2dec");
+ mpeg2dec = gst_check_setup_element ("mpeg2dec");
+ mysrcpad = gst_check_setup_src_pad (mpeg2dec, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (mpeg2dec, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ caps = gst_caps_new_simple ("video/mpeg",
+ "systemstream", G_TYPE_BOOLEAN, FALSE,
+ "mpegversion", G_TYPE_INT, 2, NULL);
+ gst_check_setup_events (mysrcpad, mpeg2dec, caps, GST_FORMAT_TIME);
+ gst_caps_unref (caps);
+
+ return mpeg2dec;
+}
+
+void
+cleanup_mpeg2dec (GstElement * mpeg2dec)
+{
+ GST_DEBUG ("cleanup_mpeg2dec");
+ gst_element_set_state (mpeg2dec, GST_STATE_NULL);
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (mpeg2dec);
+ gst_check_teardown_sink_pad (mpeg2dec);
+ gst_check_teardown_element (mpeg2dec);
+}
+
+GST_START_TEST (test_decode_stream1)
+{
+ GstElement *mpeg2dec;
+ GstBuffer *inbuffer, *outbuffer;
+ GstBus *bus;
+ int i, num_buffers;
+ GstCaps *out_caps, *caps;
+ guint offset = 0;
+ GstVideoInfo info;
+
+ mpeg2dec = setup_mpeg2dec ();
+
+ fail_unless (gst_element_set_state (mpeg2dec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ gst_element_set_bus (mpeg2dec, bus);
+
+ for (i = 0; i < G_N_ELEMENTS (test_stream_sizes); i++) {
+ inbuffer =
+ gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ (guint8 *) test_stream1 + offset, test_stream_sizes[i], 0,
+ test_stream_sizes[i], NULL, NULL);
+ offset += test_stream_sizes[i];
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+ gst_buffer_ref (inbuffer);
+ /* should decode the buffer without problems */
+ fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+ gst_buffer_unref (inbuffer);
+ }
+
+ num_buffers = g_list_length (buffers);
+
+ /* should be 30 buffers, one per decoded frame */
+ fail_unless_equals_int (num_buffers, 30);
+
+ /* each buffer should have these caps */
+ gst_video_info_init (&info);
+ gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 176, 144);
+ GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
+ GST_VIDEO_INFO_FPS_N (&info) = 25;
+ GST_VIDEO_INFO_FPS_D (&info) = 1;
+ GST_VIDEO_INFO_FPS_D (&info) = 1;
+ GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
+ gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
+ "2:0:0:0");
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
+
+ out_caps = gst_video_info_to_caps (&info);
+
+ caps = gst_pad_get_current_caps (mysinkpad);
+ GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
+ fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
+ gst_caps_unref (caps);
+
+ for (i = 0; i < num_buffers; ++i) {
+ outbuffer = GST_BUFFER (buffers->data);
+ fail_if (outbuffer == NULL);
+
+ /* I420 with 176x144 should have this size if nothing else was negotiated */
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), 38016);
+
+ buffers = g_list_remove (buffers, outbuffer);
+ gst_buffer_unref (outbuffer);
+ outbuffer = NULL;
+ }
+
+ gst_caps_unref (out_caps);
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpeg2dec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+ cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_decode_stream2)
+{
+ GstElement *mpeg2dec;
+ GstBuffer *inbuffer, *outbuffer;
+ GstBus *bus;
+ int i, num_buffers;
+ GstCaps *out_caps;
+ GstCaps *caps;
+ guint offset = 0;
+ GstVideoInfo info;
+
+ mpeg2dec = setup_mpeg2dec ();
+
+ fail_unless (gst_element_set_state (mpeg2dec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ gst_element_set_bus (mpeg2dec, bus);
+
+ for (i = 0; i < G_N_ELEMENTS (test_stream2_sizes); i++) {
+ inbuffer =
+ gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ (guint8 *) test_stream2 + offset, test_stream2_sizes[i], 0,
+ test_stream2_sizes[i], NULL, NULL);
+ offset += test_stream2_sizes[i];
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+ gst_buffer_ref (inbuffer);
+ /* should decode the buffer without problems */
+ fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+ gst_buffer_unref (inbuffer);
+ }
+
+
+ num_buffers = g_list_length (buffers);
+
+ /* should be 30 buffers, one per decoded frame */
+ fail_unless_equals_int (num_buffers, 30);
+
+ /* each buffer should have these caps */
+ gst_video_info_init (&info);
+ gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 183, 217);
+ GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
+ GST_VIDEO_INFO_FPS_N (&info) = 25;
+ GST_VIDEO_INFO_FPS_D (&info) = 1;
+ GST_VIDEO_INFO_FPS_D (&info) = 1;
+ GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
+ gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
+ "2:0:0:0");
+ GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
+
+ out_caps = gst_video_info_to_caps (&info);
+
+ caps = gst_pad_get_current_caps (mysinkpad);
+ GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
+ GST_LOG ("expected caps %" GST_PTR_FORMAT, out_caps);
+ fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
+ gst_caps_unref (caps);
+
+ for (i = 0; i < num_buffers; ++i) {
+ outbuffer = GST_BUFFER (buffers->data);
+ fail_if (outbuffer == NULL);
+
+ /* I420 with 183x217 must have this size */
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), 60168);
+
+ buffers = g_list_remove (buffers, outbuffer);
+ gst_buffer_unref (outbuffer);
+ outbuffer = NULL;
+ }
+
+ gst_caps_unref (out_caps);
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpeg2dec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+ cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_decode_garbage)
+{
+ GstElement *mpeg2dec;
+ GstBuffer *inbuffer;
+ GstBus *bus;
+ int i, num_buffers;
+ guint32 *tmpbuf;
+
+ mpeg2dec = setup_mpeg2dec ();
+
+ fail_unless (gst_element_set_state (mpeg2dec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ /* initialize the buffer with something that is no mpeg2 */
+ tmpbuf = g_new (guint32, 4096);
+ for (i = 0; i < 4096; i++) {
+ tmpbuf[i] = i;
+ }
+ inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+ gst_buffer_ref (inbuffer);
+
+ gst_element_set_bus (mpeg2dec, bus);
+
+ /* should be possible to push without problems but nothing gets decoded */
+ fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+ gst_buffer_unref (inbuffer);
+
+ num_buffers = g_list_length (buffers);
+
+ /* should be 0 buffers as decoding should've been impossible */
+ fail_unless_equals_int (num_buffers, 0);
+
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpeg2dec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+ cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+Suite *
+mpeg2dec_suite (void)
+{
+ Suite *s = suite_create ("mpeg2dec");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_decode_stream1);
+ tcase_add_test (tc_chain, test_decode_stream2);
+ tcase_add_test (tc_chain, test_decode_garbage);
+
+ return s;
+}
+
+GST_CHECK_MAIN (mpeg2dec);
--- /dev/null
+/* GStreamer
+ *
+ * unit test for x264enc
+ *
+ * Copyright (C) <2008> Mark Nauwelaerts <mnauw@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/video/video.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+#define VIDEO_CAPS_STRING "video/x-raw, " \
+ "width = (int) 384, " \
+ "height = (int) 288, " \
+ "framerate = (fraction) 25/1"
+
+#define H264_CAPS_STRING "video/x-h264, " \
+ "width = (int) 384, " \
+ "height = (int) 288, " \
+ "framerate = (fraction) 25/1"
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (VIDEO_CAPS_STRING));
+
+static void cleanup_x264enc (GstElement * x264enc);
+
+static GstElement *
+setup_x264enc (const gchar * profile, const gchar * stream_format,
+ GstVideoFormat input_format)
+{
+ GstPadTemplate *sink_tmpl, *tmpl;
+ GstElement *x264enc;
+ GstCaps *caps, *tmpl_caps;
+
+ GST_DEBUG ("setup_x264enc");
+
+ caps = gst_caps_from_string (H264_CAPS_STRING);
+ gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile,
+ "stream-format", G_TYPE_STRING, stream_format, NULL);
+ sink_tmpl = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
+ gst_caps_unref (caps);
+
+ x264enc = gst_check_setup_element ("x264enc");
+ mysrcpad = gst_check_setup_src_pad (x264enc, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad_from_template (x264enc, sink_tmpl);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ caps = gst_caps_from_string (VIDEO_CAPS_STRING);
+ gst_caps_set_simple (caps, "format", G_TYPE_STRING,
+ gst_video_format_to_string (input_format), NULL);
+
+ tmpl = gst_element_get_pad_template (x264enc, "sink");
+ tmpl_caps = gst_pad_template_get_caps (tmpl);
+
+ if (gst_caps_can_intersect (caps, tmpl_caps)) {
+ gst_check_setup_events (mysrcpad, x264enc, caps, GST_FORMAT_TIME);
+ } else {
+ cleanup_x264enc (x264enc);
+ x264enc = NULL;
+ }
+
+ gst_caps_unref (tmpl_caps);
+ gst_caps_unref (caps);
+ gst_object_unref (sink_tmpl);
+
+ return x264enc;
+}
+
+static void
+cleanup_x264enc (GstElement * x264enc)
+{
+ GST_DEBUG ("cleanup_x264enc");
+ gst_element_set_state (x264enc, GST_STATE_NULL);
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (x264enc);
+ gst_check_teardown_sink_pad (x264enc);
+ gst_check_teardown_element (x264enc);
+}
+
+static void
+check_caps (GstCaps * caps, const gchar * profile, gint profile_id)
+{
+ GstStructure *s;
+ const GValue *sf, *avcc, *pf;
+ const gchar *stream_format;
+ const gchar *caps_profile;
+
+ fail_unless (caps != NULL);
+
+ GST_INFO ("caps %" GST_PTR_FORMAT, caps);
+ s = gst_caps_get_structure (caps, 0);
+ fail_unless (s != NULL);
+ fail_if (!gst_structure_has_name (s, "video/x-h264"));
+ sf = gst_structure_get_value (s, "stream-format");
+ fail_unless (sf != NULL);
+ fail_unless (G_VALUE_HOLDS_STRING (sf));
+ stream_format = g_value_get_string (sf);
+ fail_unless (stream_format != NULL);
+ if (strcmp (stream_format, "avc") == 0) {
+ GstMapInfo map;
+ GstBuffer *buf;
+
+ avcc = gst_structure_get_value (s, "codec_data");
+ fail_unless (avcc != NULL);
+ fail_unless (GST_VALUE_HOLDS_BUFFER (avcc));
+ buf = gst_value_get_buffer (avcc);
+ fail_unless (buf != NULL);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ fail_unless_equals_int (map.data[0], 1);
+ fail_unless (map.data[1] == profile_id,
+ "Expected profile ID %#04x, got %#04x", profile_id, map.data[1]);
+ gst_buffer_unmap (buf, &map);
+ } else if (strcmp (stream_format, "byte-stream") == 0) {
+ fail_if (gst_structure_get_value (s, "codec_data") != NULL);
+ } else {
+ fail_if (TRUE, "unexpected stream-format in caps: %s", stream_format);
+ }
+
+ pf = gst_structure_get_value (s, "profile");
+ fail_unless (pf != NULL);
+ fail_unless (G_VALUE_HOLDS_STRING (pf));
+ caps_profile = g_value_get_string (pf);
+ fail_unless (caps_profile != NULL);
+ fail_unless (!strcmp (caps_profile, profile));
+}
+
+static const GstVideoFormat formats_420_8[] =
+ { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_NV12,
+ GST_VIDEO_FORMAT_UNKNOWN
+};
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+static const GstVideoFormat formats_420_10[] =
+ { GST_VIDEO_FORMAT_I420_10LE, GST_VIDEO_FORMAT_UNKNOWN };
+static const GstVideoFormat formats_422[] =
+ { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10LE,
+ GST_VIDEO_FORMAT_UNKNOWN
+};
+
+static const GstVideoFormat formats_444[] =
+ { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10LE,
+ GST_VIDEO_FORMAT_UNKNOWN
+};
+#else
+static const GstVideoFormat formats_420_10[] =
+ { GST_VIDEO_FORMAT_I420_10BE, GST_VIDEO_FORMAT_UNKNOWN };
+static const GstVideoFormat formats_422[] =
+ { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10BE,
+ GST_VIDEO_FORMAT_UNKNOWN
+};
+
+static const GstVideoFormat formats_444[] =
+ { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10BE,
+ GST_VIDEO_FORMAT_UNKNOWN
+};
+#endif
+
+static void
+test_video_profile (const gchar * profile, gint profile_id,
+ const GstVideoFormat input_formats[], gint input_format_index)
+{
+ GstVideoFormat input_format = input_formats[input_format_index];
+ GstElement *x264enc;
+ GstBuffer *inbuffer, *outbuffer;
+ int i, num_buffers;
+ GstVideoInfo vinfo;
+ GstCaps *caps;
+
+ fail_unless (gst_video_info_set_format (&vinfo, input_format, 384, 288));
+
+ x264enc = setup_x264enc (profile, "avc", input_format);
+ if (x264enc == NULL) {
+ g_printerr ("WARNING: input format '%s' not supported\n",
+ gst_video_format_to_string (input_format));
+ return;
+ }
+
+ fail_unless (gst_element_set_state (x264enc,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ /* check that we only accept input formats compatible with the output caps */
+ caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+ for (i = 0; i < gst_caps_get_size (caps); i++) {
+ GstStructure *s = gst_caps_get_structure (caps, i);
+ const GValue *v, *vi;
+ guint vlen, j = 0;
+
+ v = gst_structure_get_value (s, "format");
+
+ if (G_VALUE_TYPE (v) == G_TYPE_STRING) {
+ vlen = 1;
+ vi = v;
+ } else if (G_VALUE_TYPE (v) == GST_TYPE_LIST) {
+ vlen = gst_value_list_get_size (v);
+ fail_unless (vlen > 0, "Got empty format list");
+ vi = gst_value_list_get_value (v, 0);
+ } else {
+ fail ("Bad format in structure: %" GST_PTR_FORMAT, s);
+ g_assert_not_reached ();
+ }
+
+ while (TRUE) {
+ const gchar *str = g_value_get_string (vi);
+ GstVideoFormat format = gst_video_format_from_string (str);
+ int k;
+
+ for (k = 0;; k++) {
+ fail_unless (input_formats[k] != GST_VIDEO_FORMAT_UNKNOWN,
+ "Bad format: %s", str);
+ if (input_formats[k] == format)
+ break;
+ }
+
+ if (++j < vlen)
+ vi = gst_value_list_get_value (v, j);
+ else
+ break;
+ }
+ }
+ gst_caps_unref (caps);
+
+ /* corresponds to buffer for the size mentioned in the caps */
+ inbuffer = gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&vinfo));
+
+ /* makes valgrind's memcheck happier */
+ gst_buffer_memset (inbuffer, 0, 0, -1);
+ GST_BUFFER_TIMESTAMP (inbuffer) = 0;
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ /* send eos to have all flushed if needed */
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
+
+ num_buffers = g_list_length (buffers);
+ fail_unless (num_buffers == 1);
+
+ /* check output caps */
+ {
+ GstCaps *outcaps;
+
+ outcaps = gst_pad_get_current_caps (mysinkpad);
+ check_caps (outcaps, profile, profile_id);
+ gst_caps_unref (outcaps);
+ }
+
+ /* validate buffers */
+ for (i = 0; i < num_buffers; ++i) {
+ outbuffer = GST_BUFFER (buffers->data);
+ fail_if (outbuffer == NULL);
+
+ switch (i) {
+ case 0:
+ {
+ gint nsize, npos, j, type, next_type;
+ GstMapInfo map;
+ const guint8 *data;
+ gsize size;
+
+ gst_buffer_map (outbuffer, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+
+ npos = 0;
+ j = 0;
+ /* need SPS first */
+ next_type = 7;
+ /* loop through NALs */
+ while (npos < size) {
+ fail_unless (size - npos >= 4);
+ nsize = GST_READ_UINT32_BE (data + npos);
+ fail_unless (nsize > 0);
+ fail_unless (npos + 4 + nsize <= size);
+ type = data[npos + 4] & 0x1F;
+ /* check the first NALs, disregard AU (9), SEI (6) */
+ if (type != 9 && type != 6) {
+ fail_unless (type == next_type);
+ switch (type) {
+ case 7:
+ /* SPS */
+ next_type = 8;
+ break;
+ case 8:
+ /* PPS */
+ next_type = 5;
+ break;
+ default:
+ break;
+ }
+ j++;
+ }
+ npos += nsize + 4;
+ }
+ gst_buffer_unmap (outbuffer, &map);
+ /* should have reached the exact end */
+ fail_unless (npos == size);
+ break;
+ }
+ default:
+ break;
+ }
+
+ buffers = g_list_remove (buffers, outbuffer);
+
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+ gst_buffer_unref (outbuffer);
+ outbuffer = NULL;
+ }
+
+ cleanup_x264enc (x264enc);
+ g_list_free (buffers);
+ buffers = NULL;
+}
+
+GST_START_TEST (test_video_baseline)
+{
+ gint i;
+
+ for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("constrained-baseline", 0x42, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_main)
+{
+ gint i;
+
+ for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("main", 0x4d, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high)
+{
+ gint i;
+
+ for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("high", 0x64, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high10)
+{
+ gint i;
+
+ for (i = 0; formats_420_10[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("high-10", 0x6e, formats_420_10, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high422)
+{
+ gint i;
+
+ for (i = 0; formats_422[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("high-4:2:2", 0x7A, formats_422, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high444)
+{
+ gint i;
+
+ for (i = 0; formats_444[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+ test_video_profile ("high-4:4:4", 0xF4, formats_444, i);
+}
+
+GST_END_TEST;
+
+Suite *
+x264enc_suite (void)
+{
+ Suite *s = suite_create ("x264enc");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_video_baseline);
+ tcase_add_test (tc_chain, test_video_main);
+ tcase_add_test (tc_chain, test_video_high);
+ tcase_add_test (tc_chain, test_video_high10);
+ tcase_add_test (tc_chain, test_video_high422);
+ tcase_add_test (tc_chain, test_video_high444);
+
+ return s;
+}
+
+GST_CHECK_MAIN (x264enc);
--- /dev/null
+/* GStreamer
+ *
+ * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * xingmux.c: Unit test for the xingmux element
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/check/gstcheck.h>
+
+#include <math.h>
+
+#include "xingmux_testdata.h"
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+GstPad *mysrcpad, *mysinkpad;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
+ );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
+ );
+
+GstElement *
+setup_xingmux ()
+{
+ GstElement *xingmux;
+ GstCaps *caps;
+
+ GST_DEBUG ("setup_xingmux");
+ xingmux = gst_check_setup_element ("xingmux");
+ mysrcpad = gst_check_setup_src_pad (xingmux, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (xingmux, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
+ gst_check_setup_events (mysrcpad, xingmux, caps, GST_FORMAT_TIME);
+ gst_caps_unref (caps);
+
+ return xingmux;
+}
+
+void
+cleanup_xingmux (GstElement * xingmux)
+{
+ GST_DEBUG ("cleanup_xingmux");
+
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (xingmux);
+ gst_check_teardown_sink_pad (xingmux);
+ gst_check_teardown_element (xingmux);
+}
+
+GST_START_TEST (test_xing_remux)
+{
+ GstElement *xingmux;
+ GstBuffer *inbuffer;
+ GList *it;
+ const guint8 *verify_data;
+
+ xingmux = setup_xingmux ();
+
+ fail_unless (gst_element_set_state (xingmux,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ inbuffer = gst_buffer_new_and_alloc (sizeof (test_xing));
+ gst_buffer_fill (inbuffer, 0, test_xing, sizeof (test_xing));
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference ... */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+ /* ... and puts a new buffer on the global list */
+ fail_unless_equals_int (g_list_length (buffers), 93);
+
+ verify_data = test_xing;
+ for (it = buffers; it != NULL; it = it->next) {
+ GstBuffer *outbuffer = (GstBuffer *) it->data;
+ GstMapInfo map;
+
+ gst_buffer_map (outbuffer, &map, GST_MAP_READ);
+
+ if (it == buffers) {
+ gint j;
+
+ /* Empty Xing header, should be the same as input data until the "Xing" marker
+ * and zeroes afterwards. */
+ fail_unless (memcmp (map.data, test_xing, 25) == 0);
+ for (j = 26; j < map.size; j++)
+ fail_unless (map.data[j] == 0);
+ verify_data += map.size;
+ } else if (it->next != NULL) {
+ /* Should contain the raw MP3 data without changes */
+ fail_unless (memcmp (map.data, verify_data, map.size) == 0);
+ verify_data += map.size;
+ } else {
+ /* Last buffer is the rewrite of the first buffer and should be exactly the same
+ * as the old Xing header we had */
+ fail_unless (memcmp (test_xing, map.data, map.size) == 0);
+ }
+ gst_buffer_unmap (outbuffer, &map);
+ }
+
+ /* cleanup */
+ cleanup_xingmux (xingmux);
+}
+
+GST_END_TEST;
+
+Suite *
+xingmux_suite (void)
+{
+ Suite *s = suite_create ("xingmux");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_xing_remux);
+
+ return s;
+}
+
+GST_CHECK_MAIN (xingmux);
--- /dev/null
+static const guint8 test_xing[] = {
+0xff, 0xfb, 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x6e,
+0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+0x5c, 0x00, 0x00, 0x95, 0x2e, 0x00, 0x03, 0x06,
+0x09, 0x0c, 0x0f, 0x11, 0x14, 0x17, 0x1a, 0x1d,
+0x1f, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2d, 0x30,
+0x33, 0x36, 0x39, 0x3b, 0x3b, 0x3e, 0x41, 0x44,
+0x47, 0x49, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x57,
+0x5a, 0x5d, 0x60, 0x63, 0x65, 0x68, 0x6b, 0x6e,
+0x71, 0x73, 0x73, 0x76, 0x79, 0x7c, 0x7f, 0x81,
+0x84, 0x87, 0x8a, 0x8d, 0x8f, 0x8f, 0x92, 0x95,
+0x98, 0x9b, 0x9d, 0xa0, 0xa3, 0xa6, 0xa9, 0xab,
+0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xb9, 0xbc, 0xbf,
+0xc2, 0xc5, 0xc7, 0xc7, 0xca, 0xcd, 0xd0, 0xd3,
+0xd5, 0xd8, 0xdb, 0xde, 0xe1, 0xe3, 0xe3, 0xe6,
+0xe9, 0xec, 0xef, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd,
+0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0xfb, 0x90, 0xc4,
+0x00, 0x03, 0x8f, 0xd4, 0x59, 0x42, 0x6d, 0xe1,
+0x27, 0x02, 0xde, 0x92, 0x67, 0x09, 0xed, 0x25,
+0x29, 0x00, 0x00, 0x0a, 0x70, 0xcc, 0x4b, 0x4c,
+0xac, 0xbc, 0xcc, 0x4a, 0xcc, 0xbd, 0x24, 0xd7,
+0xce, 0xcc, 0xca, 0xa8, 0xf5, 0x2b, 0x8d, 0x80,
+0xa8, 0xfd, 0x43, 0x9a, 0xc1, 0xcb, 0x43, 0x30,
+0x10, 0xd0, 0x06, 0x91, 0x6a, 0x0e, 0xbb, 0xd9,
+0x7b, 0x5c, 0x72, 0x1c, 0x87, 0x20, 0x0c, 0x02,
+0x00, 0x80, 0x60, 0x50, 0x2b, 0x15, 0x8a, 0xc5,
+0x62, 0xb2, 0x74, 0x68, 0xd1, 0xa0, 0x40, 0x81,
+0x02, 0x04, 0x08, 0x18, 0x04, 0xc1, 0xf0, 0x7c,
+0x1f, 0x07, 0xc1, 0x00, 0x40, 0x10, 0x04, 0x01,
+0x30, 0x7c, 0x1f, 0x07, 0xc1, 0xf0, 0x40, 0x10,
+0x04, 0x01, 0x03, 0x22, 0x70, 0xff, 0xe6, 0x4b,
+0x87, 0xff, 0x97, 0x07, 0xc1, 0xfb, 0xbf, 0xc1,
+0x00, 0x40, 0x10, 0x0c, 0x27, 0xfc, 0xb8, 0x3e,
+0x0f, 0x83, 0xe1, 0xf0, 0x40, 0x10, 0x04, 0x01,
+0x04, 0x89, 0xc1, 0xf0, 0x7e, 0xe2, 0x80, 0x80,
+0x34, 0x60, 0x02, 0x05, 0x06, 0x08, 0xa0, 0xa0,
+0x60, 0xba, 0x0f, 0x06, 0x11, 0xa0, 0xf8, 0x61,
+0x0e, 0x25, 0x06, 0x51, 0xab, 0x64, 0x67, 0xb4,
+0x1b, 0x66, 0x12, 0x01, 0x3a, 0x60, 0xf0, 0x0a,
+0x26, 0x06, 0x20, 0x90, 0x70, 0x53, 0x1a, 0x38,
+0x80, 0x12, 0x86, 0x3c, 0x51, 0x87, 0x0c, 0x61,
+0x41, 0x18, 0x10, 0x00, 0x10, 0x05, 0xc1, 0x2f,
+0x0a, 0x0e, 0xa4, 0x4a, 0x82, 0xaa, 0x55, 0x8a,
+0xbb, 0x56, 0x15, 0x87, 0x33, 0xa6, 0x74, 0xe5,
+0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x06, 0x04,
+0x41, 0x10, 0x44, 0x11, 0x14, 0x8a, 0x45, 0x22,
+0x91, 0x48, 0xa8, 0x54, 0x2a, 0x15, 0x13, 0x22,
+0x44, 0x88, 0x89, 0x0a, 0x14, 0x28, 0x50, 0xa1,
+0x42, 0x85, 0x0a, 0x24, 0x48, 0x91, 0x22, 0x44,
+0x89, 0x12, 0x25, 0x41, 0x41, 0x41, 0x41, 0x42,
+0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 0x41,
+0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41,
+0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41,
+0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41,
+0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82,
+0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82,
+0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82,
+0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x95,
+0x32, 0x88, 0xad, 0x32, 0xe4, 0xdc, 0x34, 0x09,
+0x55, 0x36, 0xd6, 0x8e, 0x30, 0xf8, 0x87, 0xdd,
+0x36, 0x72, 0xfd, 0x01, 0x36, 0x47, 0x87, 0xab,
+0x30, 0xe7, 0xc2, 0x26, 0x30, 0x42, 0x80, 0x71,
+0x30, 0x0e, 0xc0, 0x94, 0x36, 0xa3, 0x8c, 0xe3,
+0x3b, 0x43, 0x5f, 0xa1, 0x8c, 0x50, 0x07, 0x43,
+0x67, 0x16, 0x5d, 0xe2, 0x17, 0xf6, 0xbf, 0xdd,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xbf, 0xff, 0xe9, 0x30, 0x05, 0xc0, 0x37, 0x30,
+0x1e, 0x80, 0x9e, 0x30, 0x3d, 0x41, 0x33, 0x30,
+0x73, 0x82, 0x72, 0x31, 0x0c, 0xff, 0xfb, 0x92,
+0xc4, 0x2a, 0x83, 0xc8, 0x60, 0x25, 0x16, 0x0e,
+0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 0xff,
+0xec, 0x90, 0xc7, 0x7f, 0x36, 0xd8, 0xb9, 0x6d,
+0x36, 0xaf, 0xc7, 0x81, 0x31, 0x13, 0x02, 0xaa,
+0x30, 0x83, 0x41, 0xbb, 0x30, 0x49, 0x41, 0x3b,
+0x30, 0x44, 0x81, 0x14, 0x30, 0x45, 0x41, 0xd5,
+0x3a, 0xf8, 0xf3, 0x22, 0x06, 0x47, 0xf6, 0xb8,
+0xff, 0xc3, 0x94, 0x99, 0x9c, 0xed, 0xfa, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xd6, 0x32, 0x84, 0xae, 0x32, 0xd8, 0xe3,
+0x33, 0xed, 0x5e, 0x36, 0x9a, 0xa1, 0x30, 0xf0,
+0xc8, 0x12, 0x36, 0x3e, 0x3e, 0x9e, 0x36, 0x14,
+0xc7, 0xe2, 0x30, 0xdf, 0x02, 0x3d, 0x30, 0x3d,
+0xc0, 0x84, 0x30, 0x12, 0x00, 0x87, 0x36, 0xfb,
+0x60, 0xe4, 0x1a, 0x73, 0x62, 0x20, 0x4c, 0x56,
+0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52,
+0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xa0, 0xc0, 0x26, 0x00, 0xe0, 0xc0,
+0x97, 0x02, 0xbc, 0xc1, 0x22, 0x05, 0x50, 0xc2,
+0x23, 0x0a, 0xdc, 0xc4, 0xea, 0x21, 0x18, 0xe0,
+0x01, 0xfd, 0x18, 0xdf, 0x3e, 0x21, 0x28, 0xc5,
+0x05, 0x0b, 0xec, 0xc2, 0x60, 0x07, 0xe0, 0xc1,
+0x4e, 0x05, 0xb8, 0xc1, 0x35, 0x05, 0x1c, 0xc1,
+0x34, 0x08, 0xa0, 0xf1, 0x2a, 0x8c, 0xac, 0x35,
+0x00, 0x0c, 0xed, 0xd8, 0x87, 0xe9, 0xec, 0x3d,
+0x5f, 0xea, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff,
+0xf7, 0xd7, 0xff, 0xff, 0xff, 0xf5, 0x26, 0x20,
+0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x20, 0x97,
+0x32, 0x64, 0xc6, 0x33, 0x41, 0x39, 0x35, 0x86,
+0x5a, 0x30, 0xca, 0x87, 0x43, 0x35, 0x4a, 0xf8,
+0x53, 0x35, 0x27, 0x07, 0x17, 0x30, 0xbb, 0x42,
+0x04, 0x30, 0x30, 0x80, 0x81, 0x30, 0x11, 0xc0,
+0x68, 0x36, 0x42, 0xcc, 0xe0, 0x36, 0x03, 0x56,
+0x9a, 0x00, 0x44, 0x54, 0xd6, 0x75, 0x67, 0x94,
+0x12, 0xeb, 0xfa, 0x0c, 0x02, 0xf0, 0x0b, 0xcc,
+0x09, 0xe0, 0x29, 0x0c, 0x12, 0xd0, 0x51, 0xcc,
+0x23, 0x00, 0xa7, 0x0c, 0x50, 0x91, 0xff, 0x4e,
+0x0c, 0x0f, 0x42, 0xcd, 0xff, 0xb2, 0x00, 0xcc,
+0x52, 0x00, 0xb9, 0x8c, 0x26, 0x90, 0x7d, 0x4c,
+0x14, 0xd0, 0x5c, 0xcc, 0x12, 0xc0, 0x53, 0x0c,
+0x12, 0x90, 0x8d, 0xce, 0xf6, 0xc4, 0xc9, 0x83,
+0x90, 0x7d, 0x9c, 0x3f, 0xf0, 0xe5, 0x25, 0xff,
+0xfb, 0x92, 0xc4, 0xaa, 0x83, 0xc8, 0x18, 0x23,
+0x16, 0x0e, 0xff, 0x82, 0x81, 0x2d, 0x85, 0x22,
+0x81, 0xff, 0xec, 0x90, 0xbe, 0x5b, 0xbf, 0xff,
+0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x8f, 0xff,
+0xfa, 0x3f, 0xd1, 0xf6, 0xe8, 0x4c, 0x41, 0x4d,
+0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32,
+0x1c, 0x98, 0x32, 0x50, 0xcb, 0x33, 0x25, 0x3e,
+0x35, 0x4a, 0x6b, 0x30, 0xc3, 0x47, 0x6c, 0x35,
+0x19, 0x39, 0x9a, 0x34, 0xf6, 0xc7, 0x42, 0x30,
+0xb2, 0x82, 0x17, 0x30, 0x2c, 0x40, 0x90, 0x30,
+0x14, 0x80, 0x5d, 0x36, 0x7a, 0xa0, 0xe1, 0x15,
+0x33, 0x59, 0x19, 0x40, 0x44, 0xa4, 0xd5, 0x75,
+0xa7, 0x56, 0x1c, 0xea, 0xfa, 0x7f, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x18, 0x07,
+0x00, 0x12, 0x18, 0x14, 0xa0, 0x4d, 0x98, 0x26,
+0x80, 0x9c, 0x18, 0x47, 0xa1, 0x41, 0x98, 0xa4,
+0x83, 0xd7, 0x1c, 0x2e, 0xfd, 0x5c, 0x1c, 0x15,
+0x83, 0xdc, 0x18, 0xa7, 0x21, 0x68, 0x98, 0x4d,
+0x80, 0xf7, 0x18, 0x29, 0x00, 0xba, 0x18, 0x24,
+0xa0, 0xaa, 0x98, 0x23, 0xc1, 0x21, 0x1d, 0x95,
+0xa1, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
+0xc8, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 0x33,
+0x05, 0x62, 0x81, 0xff, 0xec, 0x90, 0x92, 0x87,
+0xa0, 0xe3, 0x3b, 0x76, 0x21, 0xfa, 0x7b, 0x0f,
+0x56, 0x8f, 0xab, 0xfd, 0x54, 0x7f, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xd4, 0x98,
+0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0x32, 0x18, 0x99, 0x32, 0x44, 0xce, 0x33,
+0x01, 0x47, 0x35, 0x16, 0x78, 0x30, 0xba, 0x87,
+0x97, 0x34, 0xe5, 0x7a, 0xcf, 0x34, 0xc3, 0x87,
+0x6d, 0x30, 0xaa, 0x42, 0x26, 0x30, 0x27, 0x00,
+0xa1, 0x30, 0x17, 0x40, 0x4e, 0x36, 0xb2, 0x7c,
+0xe1, 0xf4, 0x43, 0x5b, 0x97, 0x80, 0xc4, 0x94,
+0xd6, 0x75, 0x67, 0x86, 0x13, 0xeb, 0xfa, 0x3f,
+0xe8, 0x30, 0x10, 0x40, 0x1b, 0x30, 0x2b, 0x00,
+0x90, 0x30, 0x4f, 0x41, 0x2b, 0x30, 0x92, 0x02,
+0x68, 0x31, 0x4f, 0xc7, 0x5f, 0x38, 0x88, 0xb8,
+0x4d, 0x38, 0x54, 0xc7, 0x6b, 0x31, 0x54, 0x02,
+0xba, 0x30, 0x9c, 0xc1, 0xeb, 0x30, 0x51, 0x41,
+0x79, 0x30, 0x46, 0x81, 0x5a, 0x30, 0x44, 0xc2,
+0x4f, 0x3a, 0xbb, 0x93, 0x22, 0x10, 0x41, 0xf6,
+0x70, 0xed, 0xc6, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xc7, 0xe4, 0x23, 0x18, 0x0e, 0xff, 0x82,
+0x81, 0x2f, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90,
+0x29, 0x2d, 0xf2, 0xdd, 0xfe, 0x8f, 0xfb, 0x6f,
+0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xd1,
+0xfe, 0x8f, 0xb7, 0x42, 0x62, 0x0a, 0x6a, 0x29,
+0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x32, 0x14, 0x98, 0x32, 0x30,
+0xd3, 0x32, 0xe5, 0x4c, 0x34, 0xda, 0x85, 0x30,
+0xb2, 0x47, 0xbc, 0x34, 0xae, 0xbb, 0xf0, 0x34,
+0x8e, 0xc7, 0x94, 0x30, 0xa1, 0x02, 0x37, 0x30,
+0x21, 0xc0, 0xae, 0x30, 0x19, 0x80, 0x43, 0x36,
+0xea, 0x58, 0xe2, 0x93, 0x53, 0x5d, 0x16, 0xc0,
+0xc4, 0xe4, 0xd5, 0x75, 0xa4, 0x2b, 0x67, 0x52,
+0x0c, 0x05, 0x60, 0x05, 0x0c, 0x0d, 0x10, 0x27,
+0x4c, 0x17, 0x40, 0x51, 0x0c, 0x2a, 0xb0, 0xa8,
+0x4c, 0x61, 0x82, 0x02, 0x0e, 0x79, 0xbf, 0x50,
+0x8e, 0x6a, 0x82, 0x06, 0x0c, 0x62, 0x90, 0xc1,
+0xcc, 0x2d, 0x20, 0x8a, 0x8c, 0x17, 0x20, 0x6c,
+0x8c, 0x13, 0xb0, 0x65, 0x4c, 0x12, 0xc0, 0xac,
+0x8e, 0xf3, 0x68, 0xc9, 0xc5, 0xcb, 0xb8, 0xc3,
+0xdd, 0x87, 0xfe, 0x5f, 0x60, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xc7, 0x00, 0x23, 0x18, 0x0e,
+0xff, 0x82, 0x81, 0x36, 0x85, 0x62, 0x81, 0xff,
+0xec, 0x90, 0xfa, 0xb2, 0x5f, 0x7f, 0xaf, 0xaa,
+0x8f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff,
+0xef, 0xff, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14,
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x08, 0x9b,
+0x32, 0x1c, 0xd4, 0x32, 0xc1, 0x53, 0x34, 0x9e,
+0x90, 0x30, 0xa9, 0x87, 0xe1, 0x34, 0x76, 0x7c,
+0xff, 0x34, 0x57, 0x87, 0xb9, 0x30, 0x98, 0x42,
+0x46, 0x30, 0x1c, 0x00, 0xbd, 0x30, 0x1c, 0x40,
+0x34, 0x37, 0x22, 0x34, 0xe3, 0x72, 0x43, 0x5f,
+0x95, 0x01, 0x45, 0x14, 0xba, 0x75, 0x67, 0xb0,
+0x15, 0x67, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51,
+0x80, 0xbe, 0x00, 0x39, 0x81, 0xac, 0x04, 0x71,
+0x82, 0xfa, 0x09, 0x99, 0x85, 0x6c, 0x14, 0x01,
+0x8c, 0x66, 0x3d, 0x29, 0xd0, 0x8d, 0xd2, 0x39,
+0xce, 0x9e, 0x3d, 0xc9, 0x8c, 0x80, 0x17, 0x51,
+0x85, 0xae, 0x11, 0x19, 0x82, 0xda, 0x0d, 0xa9,
+0x82, 0x60, 0x0c, 0xd1, 0x82, 0x3e, 0x15, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa8, 0x23,
+0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3a, 0x05, 0x22,
+0x41, 0xff, 0xec, 0x90, 0xf9, 0xd8, 0xf0, 0x99,
+0x20, 0xc1, 0x77, 0xd8, 0x63, 0xb7, 0x0c, 0x4b,
+0x2d, 0xb9, 0x6f, 0x91, 0xfb, 0xbd, 0x5d, 0x74,
+0xff, 0xff, 0xff, 0xff, 0xef, 0x5b, 0x5d, 0xff,
+0xff, 0x77, 0xfb, 0xbd, 0x69, 0x88, 0x29, 0xa8,
+0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x32,
+0x04, 0x9a, 0x32, 0x08, 0xd7, 0x32, 0xa5, 0x58,
+0x34, 0x52, 0x9d, 0x30, 0xa0, 0x48, 0x02, 0x34,
+0x3b, 0xbd, 0xfa, 0x34, 0x1e, 0xc7, 0xda, 0x30,
+0x8e, 0x02, 0x55, 0x30, 0x16, 0xc0, 0xca, 0x30,
+0x1e, 0x80, 0x25, 0x37, 0x5a, 0x00, 0xe4, 0x11,
+0x53, 0x60, 0x13, 0xc1, 0x45, 0x24, 0xb9, 0x75,
+0xa4, 0x21, 0x76, 0x7a, 0x01, 0xc0, 0x78, 0x18,
+0x20, 0x20, 0x4b, 0x98, 0x37, 0xc0, 0xa6, 0x18,
+0x65, 0x21, 0x5b, 0x98, 0xe5, 0xc4, 0x21, 0x1d,
+0xd2, 0xbf, 0x6c, 0x1d, 0xae, 0xc4, 0x2e, 0x18,
+0xe7, 0x61, 0x9b, 0x98, 0x68, 0x41, 0x35, 0x18,
+0x33, 0x80, 0xfc, 0x18, 0x2a, 0x20, 0xef, 0x98,
+0x27, 0x01, 0x98, 0x1b, 0x02, 0x0c, 0x62, 0x91,
+0x09, 0x67, 0x16, 0x1d, 0xac, 0x3f, 0xf1, 0xbb,
+0x0f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8,
+0x54, 0x25, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3f,
+0x05, 0x22, 0x41, 0xff, 0xec, 0x90, 0x53, 0xa1,
+0xef, 0xbf, 0xd7, 0xfe, 0xef, 0xff, 0x5f, 0xd9,
+0xfb, 0xff, 0xdf, 0x5a, 0x3e, 0xff, 0x57, 0x7f,
+0xfb, 0xdd, 0xd4, 0x98, 0x82, 0x9a, 0x8a, 0x66,
+0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x31, 0xf8, 0x9b, 0x31, 0xf4, 0xd8, 0x32,
+0x79, 0x5f, 0x34, 0x16, 0xa6, 0x30, 0x96, 0x88,
+0x23, 0x33, 0xff, 0x7e, 0xe3, 0x33, 0xe3, 0x07,
+0xfb, 0x30, 0x84, 0x42, 0x62, 0x30, 0x10, 0x00,
+0xd9, 0x30, 0x20, 0xc0, 0x14, 0x37, 0x81, 0xdc,
+0xe4, 0xb0, 0x23, 0x62, 0x92, 0x01, 0xc5, 0x54,
+0xba, 0x79, 0x64, 0x41, 0x06, 0xdb, 0x5a, 0x46,
+0x81, 0x06, 0x30, 0x41, 0x80, 0x86, 0x30, 0x71,
+0xc1, 0x37, 0x30, 0xcd, 0x02, 0x8c, 0x31, 0xd2,
+0x47, 0xc9, 0x3b, 0xce, 0xbb, 0x2b, 0x3b, 0x86,
+0x47, 0xe5, 0x31, 0xd3, 0x83, 0x14, 0x30, 0xd1,
+0x42, 0x61, 0x30, 0x65, 0xc1, 0xf9, 0x30, 0x50,
+0x81, 0xe4, 0x30, 0x49, 0xc3, 0x3b, 0x35, 0xac,
+0x2c, 0xc4, 0x82, 0x22, 0xd5, 0xae, 0x46, 0xb6,
+0xfa, 0x4b, 0x2d, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xc6, 0xa8, 0x23, 0x18, 0x0e, 0xff, 0x82,
+0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 0xf0, 0x90,
+0xb8, 0xae, 0x47, 0xe3, 0x7d, 0x5d, 0x76, 0xfd,
+0x8f, 0xf7, 0x7f, 0x7f, 0xfb, 0xbf, 0xb1, 0xd5,
+0x7f, 0xf5, 0xf7, 0x7f, 0xbb, 0xd6, 0x98, 0x82,
+0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x31, 0xf4, 0x9a, 0x31, 0xe0,
+0xdd, 0x32, 0x55, 0x62, 0x33, 0xca, 0xb1, 0x30,
+0x8c, 0xc8, 0x3e, 0x33, 0xbf, 0xbf, 0xb8, 0x33,
+0xa5, 0x48, 0x18, 0x30, 0x79, 0x82, 0x6f, 0x30,
+0x09, 0x40, 0xe4, 0x30, 0x23, 0x00, 0x03, 0x37,
+0xa9, 0xa8, 0xe5, 0x4f, 0x13, 0x63, 0x10, 0xc2,
+0x0a, 0xc9, 0x72, 0xf3, 0x48, 0x42, 0xec, 0xf4,
+0x18, 0x14, 0x40, 0x03, 0x98, 0x27, 0x20, 0x45,
+0x98, 0x42, 0x00, 0xa5, 0x18, 0x76, 0xe1, 0x5d,
+0x99, 0x0d, 0x44, 0x28, 0x1e, 0xcf, 0x7f, 0x86,
+0x1e, 0xa5, 0x44, 0x3a, 0x19, 0x0d, 0xa1, 0xaf,
+0x98, 0x77, 0xc1, 0x56, 0x18, 0x39, 0x41, 0x22,
+0x18, 0x2c, 0x61, 0x18, 0x98, 0x27, 0x81, 0xdf,
+0x18, 0x18, 0x40, 0x9c, 0x18, 0x05, 0x20, 0x15,
+0x82, 0x00, 0x04, 0x02, 0x6e, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xc6, 0xc8, 0x23, 0x18, 0x0e,
+0xff, 0x82, 0xa1, 0x46, 0x85, 0x22, 0x01, 0xff,
+0xf0, 0x90, 0x15, 0x01, 0x2f, 0x1e, 0xe5, 0x03,
+0x76, 0xab, 0xce, 0xb3, 0x7c, 0x77, 0xf4, 0xaa,
+0x95, 0xaf, 0xb7, 0xa6, 0xff, 0xec, 0xfb, 0xaa,
+0xfa, 0xb7, 0x3e, 0x84, 0x7a, 0x9f, 0xd0, 0x9e,
+0xff, 0xa7, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14,
+0xcc, 0xb8, 0xe4, 0xde, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x98, 0x85,
+0x31, 0x84, 0xbe, 0x31, 0xd9, 0x37, 0x33, 0x06,
+0x60, 0x30, 0x71, 0x87, 0x51, 0x33, 0x10, 0x78,
+0x9d, 0x32, 0xfa, 0x07, 0x31, 0x30, 0x60, 0xc2,
+0x2a, 0x30, 0x00, 0x00, 0xcf, 0x1e, 0x03, 0xf8,
+0xdb, 0x05, 0x13, 0x83, 0xb0, 0x0d, 0x5e, 0x30,
+0x0c, 0x22, 0xa9, 0x27, 0x96, 0x7b, 0x02, 0x26,
+0x05, 0x58, 0x03, 0x46, 0x09, 0xf0, 0x0e, 0xc6,
+0x10, 0xc8, 0x25, 0xe6, 0x1e, 0x00, 0x51, 0x06,
+0x44, 0x18, 0xf7, 0x67, 0xb8, 0xc7, 0x51, 0x27,
+0xae, 0x28, 0xfc, 0x66, 0x44, 0x00, 0x66, 0x86,
+0x1e, 0x08, 0x53, 0xe6, 0x0e, 0x18, 0x48, 0xa6,
+0x0a, 0x80, 0x46, 0xc6, 0x09, 0x38, 0x79, 0x26,
+0xb1, 0x9e, 0x98, 0x90, 0x58, 0x0d, 0x02, 0xa9,
+0x43, 0x2b, 0x7d, 0x23, 0x13, 0xf6, 0x3a, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa4, 0x23,
+0x18, 0x0e, 0xff, 0x82, 0xa1, 0x7a, 0x87, 0xa1,
+0xc1, 0xff, 0xb4, 0x98, 0x05, 0xd8, 0xcf, 0x1b,
+0xfe, 0xb6, 0xa3, 0xec, 0x7f, 0xff, 0xeb, 0xfd,
+0x8d, 0xeb, 0xda, 0xea, 0xfe, 0x87, 0x7d, 0x75,
+0x9c, 0xe9, 0x59, 0xf1, 0xd7, 0x74, 0x2d, 0x31,
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31,
+0x94, 0x82, 0x31, 0x70, 0xc1, 0x31, 0xb5, 0x3a,
+0x32, 0xc2, 0x69, 0x30, 0x68, 0x47, 0x64, 0x32,
+0xd3, 0xb9, 0x38, 0x32, 0xbf, 0x47, 0x44, 0x30,
+0x56, 0x82, 0x35, 0x10, 0x01, 0xb4, 0x10, 0x08,
+0x61, 0xb7, 0x48, 0x87, 0x08, 0x57, 0x9a, 0xc0,
+0x56, 0x1c, 0x46, 0x54, 0x2f, 0x34, 0xee, 0x75,
+0x18, 0x1a, 0x00, 0x1b, 0x98, 0x2f, 0x20, 0x39,
+0x98, 0x4e, 0x00, 0x9e, 0x18, 0x8a, 0xe1, 0x55,
+0x99, 0x39, 0x84, 0x0f, 0x1f, 0xec, 0x7e, 0xa7,
+0x1f, 0xbb, 0x44, 0x29, 0x19, 0x38, 0xe1, 0xbc,
+0x98, 0x89, 0x01, 0x77, 0x18, 0x3f, 0x41, 0x4c,
+0x18, 0x2d, 0xe1, 0x46, 0x98, 0x27, 0x02, 0x2f,
+0x18, 0x17, 0x40, 0xb8, 0x18, 0x04, 0xe0, 0x1b,
+0x83, 0x00, 0x08, 0x03, 0x2c, 0x26, 0x82, 0x4e,
+0x39, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
+0x4c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x69,
+0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0xc9, 0x43,
+0xed, 0x49, 0x4d, 0x9d, 0xff, 0xd4, 0xea, 0xfd,
+0xd5, 0xfd, 0xd8, 0xe7, 0x7d, 0x48, 0xff, 0x5f,
+0xf4, 0xff, 0xe5, 0x5e, 0x96, 0xfc, 0xff, 0xf5,
+0x7f, 0xfd, 0xdb, 0x4d, 0xfd, 0x17, 0xd3, 0xe8,
+0xbf, 0xef, 0xfd, 0x07, 0xfd, 0x3a, 0x4f, 0xb2,
+0xbf, 0xfe, 0x09, 0xa9, 0x4c, 0x41, 0x4d, 0x45,
+0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0x31, 0x88, 0x83, 0x31, 0x5c, 0xc0, 0x31,
+0x91, 0x3f, 0x32, 0x7e, 0x6e, 0x30, 0x5e, 0x07,
+0x79, 0x32, 0x95, 0x79, 0xc1, 0x32, 0x82, 0x07,
+0x59, 0x30, 0x4c, 0x42, 0x3c, 0x30, 0x04, 0xc0,
+0xe3, 0x30, 0x23, 0x40, 0x07, 0x37, 0x00, 0xec,
+0xe1, 0xa9, 0xc3, 0x59, 0x89, 0x04, 0x89, 0x2a,
+0x89, 0xed, 0x93, 0xe0, 0x44, 0xc0, 0xdb, 0x01,
+0x20, 0xc1, 0x7e, 0x01, 0x60, 0xc2, 0x77, 0x04,
+0x6c, 0xc4, 0x60, 0x09, 0xb0, 0xc9, 0xe3, 0x1d,
+0x94, 0xff, 0xf0, 0xde, 0xe4, 0xfe, 0x65, 0x1e,
+0x74, 0xc9, 0xd6, 0x0d, 0x18, 0xc4, 0x47, 0x0b,
+0x7c, 0xc1, 0xef, 0x0a, 0x5c, 0xc1, 0x5a, 0x0a,
+0x48, 0xc1, 0x1d, 0x11, 0xa4, 0xc0, 0xa7, 0x05,
+0xd4, 0xc0, 0x20, 0x00, 0xe0, 0x2a, 0x00, 0x48,
+0x0e, 0xc0, 0x9b, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xc6, 0x24, 0x25, 0x1a, 0x0e, 0xff, 0x82,
+0xa9, 0xbb, 0xb3, 0x61, 0x81, 0xf6, 0x89, 0xb8,
+0x89, 0x20, 0xe4, 0x29, 0x9e, 0x4a, 0x8f, 0x9c,
+0xd7, 0xfd, 0x68, 0x27, 0xfb, 0x69, 0xff, 0x5d,
+0xad, 0xff, 0xd9, 0xed, 0xfb, 0xbf, 0xff, 0xff,
+0xa7, 0xcb, 0xdb, 0xd7, 0xfe, 0xfd, 0x2c, 0xdd,
+0x7e, 0xba, 0xd6, 0xdf, 0xa7, 0xcf, 0xd4, 0x46,
+0x8a, 0x06, 0x9f, 0xc6, 0x5f, 0x4a, 0xd3, 0x10,
+0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x31, 0x84, 0x82, 0x31, 0x40,
+0xc3, 0x31, 0x6d, 0x40, 0x32, 0x32, 0x75, 0x30,
+0x54, 0x47, 0x88, 0x32, 0x53, 0xba, 0x3a, 0x32,
+0x42, 0x47, 0x6a, 0x30, 0x41, 0x02, 0x45, 0x30,
+0x0b, 0x00, 0xec, 0x30, 0x24, 0x80, 0x16, 0x37,
+0x28, 0xb8, 0xe1, 0xc8, 0xb3, 0x59, 0x07, 0xc4,
+0x89, 0x4a, 0x85, 0xee, 0x93, 0x66, 0x58, 0xa9,
+0xc8, 0x0c, 0x07, 0xc0, 0x0a, 0xcc, 0x0d, 0xd0,
+0x06, 0x4c, 0x16, 0xe0, 0x21, 0x8c, 0x29, 0x30,
+0x4f, 0xcc, 0x5d, 0xe0, 0xf9, 0x0e, 0x64, 0x37,
+0x66, 0x8e, 0x55, 0x41, 0x02, 0x8c, 0x5d, 0x50,
+0x71, 0xce, 0x7e, 0x67, 0x0d, 0x12, 0x5f, 0x0c,
+0xb5, 0x5f, 0x4c, 0x8c, 0xa6, 0x0c, 0x4a, 0x34,
+0x8c, 0x03, 0x05, 0xd2, 0xd1, 0xb9, 0xbe, 0x92,
+0xb9, 0x7d, 0x8b, 0xff, 0x4f, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xc6, 0x78, 0x25, 0x1a, 0x0e,
+0xff, 0x82, 0xa9, 0xb2, 0x2c, 0x21, 0x81, 0xf6,
+0x89, 0xb8, 0x5e, 0xfa, 0x3a, 0x51, 0x51, 0xe4,
+0xaa, 0x8e, 0xa5, 0x29, 0x20, 0x30, 0x71, 0x3f,
+0xff, 0xff, 0xff, 0x7f, 0xff, 0xd5, 0xff, 0xef,
+0xff, 0xfa, 0x93, 0x10, 0x53, 0x51, 0x4c, 0xcb,
+0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x70, 0x81,
+0x31, 0x34, 0xc2, 0x31, 0x39, 0x43, 0x31, 0xee,
+0x78, 0x30, 0x49, 0x07, 0x97, 0x32, 0x0f, 0x7a,
+0xa3, 0x31, 0xff, 0x07, 0x79, 0x30, 0x35, 0xc2,
+0x4c, 0x30, 0x10, 0xc0, 0xf7, 0x30, 0x26, 0x40,
+0x25, 0x37, 0x40, 0x84, 0xe2, 0x27, 0x63, 0x5a,
+0x86, 0x05, 0x89, 0x2a, 0xb9, 0xed, 0x93, 0xd8,
+0x22, 0x60, 0x67, 0x80, 0xb4, 0x60, 0xac, 0x00,
+0x2c, 0x61, 0x18, 0x81, 0x66, 0x61, 0xf1, 0x03,
+0x50, 0x64, 0x64, 0x8a, 0x36, 0x7c, 0x75, 0x4c,
+0xc2, 0x7b, 0xc4, 0x8a, 0xb2, 0x64, 0x5a, 0x04,
+0xf8, 0x61, 0xdc, 0x84, 0xc2, 0x60, 0xcc, 0x84,
+0x7e, 0x60, 0x82, 0x04, 0x84, 0x60, 0x61, 0x87,
+0xd6, 0x66, 0x9a, 0x49, 0x83, 0x05, 0xc2, 0x30,
+0x2a, 0xc0, 0x34, 0xb8, 0x02, 0x31, 0x3f, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x46, 0x78, 0x25,
+0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x5a, 0x0c, 0xa2,
+0x9d, 0xfe, 0x88, 0xe0, 0x7b, 0xa0, 0x1a, 0x99,
+0xeb, 0x2f, 0xdc, 0x37, 0xad, 0x28, 0xbf, 0xfe,
+0xff, 0xef, 0xff, 0x3b, 0xfe, 0xea, 0xbe, 0xb7,
+0x7d, 0x3b, 0xbe, 0xfd, 0xdd, 0x0b, 0x4c, 0x41,
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0x16, 0xc0, 0x80, 0x30, 0x11, 0x80, 0xc3, 0x30,
+0x11, 0x41, 0x44, 0x30, 0x19, 0x02, 0x7d, 0x30,
+0x3d, 0xc7, 0xa2, 0x31, 0xc6, 0xba, 0xfa, 0x36,
+0xe1, 0x78, 0x63, 0x0a, 0x22, 0x55, 0x30, 0x58,
+0x0f, 0xe3, 0x09, 0xe0, 0x30, 0x30, 0xeb, 0x01,
+0x23, 0x11, 0x20, 0x63, 0x3b, 0x61, 0x11, 0xa4,
+0xa5, 0x5a, 0xf7, 0x49, 0xad, 0xe6, 0xcf, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xd2, 0x60, 0x6a, 0x00, 0xd2, 0x18,
+0x15, 0xf9, 0x84, 0x6c, 0x04, 0x71, 0x87, 0xce,
+0x0b, 0x49, 0x91, 0xa4, 0x22, 0xf1, 0xf2, 0x6f,
+0x05, 0x61, 0xef, 0xa0, 0x25, 0x11, 0x91, 0x7a,
+0x12, 0x59, 0x87, 0x64, 0x12, 0x71, 0x83, 0x1c,
+0x11, 0xd1, 0x81, 0xde, 0x12, 0x29, 0x81, 0x48,
+0x1f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
+0x7c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x60,
+0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0x71, 0x95,
+0x29, 0x46, 0x07, 0x17, 0x8a, 0x01, 0x16, 0x0d,
+0xb8, 0x40, 0x72, 0xf9, 0xce, 0xb9, 0x92, 0xbf,
+0x21, 0xec, 0x66, 0x60, 0x87, 0xea, 0xf7, 0xfd,
+0x3f, 0xbb, 0xff, 0x7e, 0x5a, 0xbf, 0xcb, 0xff,
+0xa7, 0xef, 0x74, 0x4d, 0xf6, 0x50, 0x98, 0x82,
+0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x15, 0x80, 0x7f, 0x30, 0x10, 0x40,
+0xc2, 0x30, 0x0e, 0x01, 0x47, 0x30, 0x14, 0x42,
+0x80, 0x30, 0x31, 0x87, 0xad, 0x31, 0x7a, 0x7b,
+0x41, 0x35, 0xb4, 0x79, 0x13, 0x06, 0xd2, 0x5a,
+0x30, 0x6b, 0x10, 0x73, 0x0a, 0x50, 0x3d, 0x30,
+0xee, 0x00, 0x53, 0x11, 0x50, 0x4c, 0x3b, 0x70,
+0xa1, 0xe4, 0xd5, 0x5c, 0xf6, 0xc9, 0xec, 0x60,
+0xde, 0xa3, 0x03, 0x74, 0x07, 0x43, 0x05, 0x88,
+0x00, 0x33, 0x08, 0xec, 0x06, 0x93, 0x0f, 0xa8,
+0x12, 0x43, 0x23, 0x6c, 0x39, 0x53, 0xe5, 0xc1,
+0xa9, 0x33, 0xe0, 0x2c, 0x3e, 0x13, 0x23, 0x00,
+0x21, 0x63, 0x0e, 0xbc, 0x23, 0xb3, 0x06, 0x0c,
+0x23, 0x73, 0x03, 0x60, 0x24, 0x63, 0x02, 0x1c,
+0x3f, 0x33, 0x1f, 0xd3, 0x40, 0x02, 0xe1, 0x90,
+0x2a, 0xc8, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xc8, 0x7c, 0x27, 0x1a, 0x0f, 0xfb, 0x64,
+0xa1, 0x58, 0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90,
+0x70, 0x44, 0xb2, 0x7e, 0xf6, 0x65, 0x5f, 0x60,
+0xaf, 0x5b, 0xfd, 0x7d, 0x68, 0xfd, 0xbf, 0x6f,
+0xff, 0xa3, 0x6b, 0xbf, 0xa9, 0xd4, 0xfd, 0x0e,
+0xfa, 0xb7, 0x7d, 0xef, 0x8d, 0xbb, 0x5a, 0x62,
+0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x00, 0x24, 0x40, 0x00, 0x62,
+0xf2, 0x51, 0x87, 0x0f, 0x66, 0x15, 0x6a, 0x18,
+0x73, 0x56, 0x60, 0x2c, 0x8a, 0x5c, 0x61, 0x8b,
+0x50, 0x70, 0x61, 0x7c, 0x8a, 0x34, 0x60, 0x0a,
+0x03, 0x26, 0x60, 0x26, 0x01, 0x58, 0x60, 0x35,
+0x00, 0x4c, 0x36, 0x64, 0x76, 0x43, 0x60, 0xee,
+0x52, 0x62, 0x26, 0xa3, 0x27, 0xbd, 0x98, 0x5b,
+0xdb, 0xf7, 0x7f, 0xa8, 0xc0, 0xe4, 0x02, 0x0c,
+0xc1, 0x67, 0x00, 0x80, 0xc2, 0x3c, 0x00, 0xf8,
+0xc3, 0xef, 0x03, 0x74, 0xc8, 0xe0, 0x0a, 0xe8,
+0xf9, 0x9d, 0x4f, 0xb0, 0xf8, 0x32, 0x0c, 0x40,
+0xc8, 0xc3, 0x07, 0x7c, 0xc3, 0xa6, 0x08, 0xa0,
+0xc1, 0x74, 0x08, 0xc8, 0xcc, 0x39, 0x1c, 0xc6,
+0x6f, 0xd8, 0xc2, 0x65, 0x30, 0x1a, 0x18, 0x90,
+0x00, 0x8b, 0x6d, 0xb8, 0x41, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xc7, 0x10, 0x27, 0x1a, 0x0f,
+0xfb, 0x64, 0xa1, 0x60, 0x85, 0xa1, 0xc1, 0xff,
+0xf0, 0x90, 0x72, 0xf9, 0xcb, 0xfc, 0xfd, 0x7f,
+0x3f, 0xf1, 0xfd, 0xff, 0xdb, 0xff, 0x7f, 0x5b,
+0x02, 0xdd, 0x66, 0xaf, 0xff, 0xf5, 0xb2, 0xcc,
+0x9f, 0xf6, 0x16, 0xa9, 0x9f, 0x4f, 0xb1, 0xfa,
+0x7f, 0x3b, 0x27, 0xf6, 0x50, 0x98, 0x82, 0x9a,
+0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x20, 0x00, 0x03,
+0x14, 0x07, 0xd3, 0x0c, 0xcc, 0x23, 0x08, 0x14,
+0x73, 0x07, 0xe8, 0x43, 0x01, 0x58, 0x7b, 0x93,
+0x0c, 0xb7, 0xb9, 0xb3, 0x0c, 0x20, 0x79, 0xf3,
+0x00, 0x08, 0x26, 0x43, 0x02, 0x44, 0x11, 0x53,
+0x02, 0xc4, 0x05, 0x31, 0x2f, 0x21, 0xc6, 0x43,
+0x40, 0xeb, 0x91, 0x11, 0x35, 0x5a, 0x9f, 0x29,
+0x3d, 0x80, 0x8f, 0xb3, 0xe2, 0x73, 0x03, 0xac,
+0x08, 0xe3, 0x05, 0xa8, 0x03, 0xd3, 0x08, 0xfc,
+0x00, 0xb3, 0x0f, 0xc0, 0x08, 0xa3, 0x23, 0x94,
+0x1c, 0x53, 0xe6, 0xd8, 0xc6, 0x53, 0xe1, 0x34,
+0x22, 0xd3, 0x23, 0x08, 0x1a, 0x43, 0x0e, 0x7c,
+0x21, 0x53, 0x05, 0x9c, 0x22, 0xd3, 0x02, 0xa8,
+0x24, 0x63, 0x01, 0x14, 0x3f, 0x93, 0x05, 0xd3,
+0xc5, 0x06, 0x04, 0xa0, 0x55, 0xb0, 0xdc, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x25,
+0x20, 0xce, 0x7f, 0x62, 0xa1, 0x70, 0x8f, 0x61,
+0xc1, 0xfe, 0x89, 0x28, 0xe4, 0x93, 0x93, 0xf7,
+0x8d, 0x86, 0xff, 0xa7, 0xa2, 0xee, 0xd7, 0xbf,
+0xd6, 0x8f, 0xff, 0xff, 0x52, 0xb6, 0x69, 0xa1,
+0x1b, 0x7e, 0x8f, 0xd9, 0x46, 0xfd, 0x28, 0x6a,
+0x19, 0xe4, 0xd3, 0x10, 0x53, 0x51, 0x4c, 0xcb,
+0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
+0x13, 0x40, 0x7a, 0x30, 0x0b, 0x00, 0xc3, 0x30,
+0x04, 0xc1, 0x46, 0x30, 0x00, 0x02, 0x85, 0x30,
+0x03, 0x47, 0xbc, 0x30, 0x5e, 0xbb, 0xac, 0x31,
+0x5b, 0x7a, 0x23, 0x04, 0xf2, 0x69, 0x30, 0xa0,
+0x11, 0xc3, 0x0b, 0x40, 0x5c, 0x30, 0xf5, 0x00,
+0x30, 0x51, 0x18, 0x8b, 0xb8, 0x93, 0x27, 0x28,
+0xc3, 0xe7, 0x20, 0xb7, 0x9b, 0x3a, 0xc8, 0x24,
+0x80, 0xc0, 0x5e, 0x00, 0xdc, 0xc0, 0x99, 0x00,
+0x58, 0x30, 0x1f, 0x13, 0x06, 0xfc, 0x00, 0x33,
+0x10, 0x10, 0x03, 0x63, 0x69, 0xac, 0x11, 0x43,
+0x67, 0x10, 0x07, 0x43, 0x0f, 0xcc, 0x09, 0x53,
+0xca, 0x36, 0x8d, 0x1c, 0xec, 0x31, 0x9b, 0xec,
+0x09, 0xc2, 0x2a, 0xa2, 0x0b, 0x00, 0x76, 0xa9,
+0x06, 0xcc, 0x5d, 0xb7, 0x7b, 0xbf, 0xff, 0xff,
+0x8c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x47,
+0x10, 0x25, 0x1a, 0x4e, 0xff, 0x82, 0xa1, 0x5f,
+0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x43, 0x22,
+0x97, 0xe8, 0x11, 0x5c, 0xaf, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 0x14,
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x12, 0x00, 0x79, 0x30, 0x09, 0x40,
+0xc0, 0x30, 0x01, 0x01, 0x47, 0x0b, 0x05, 0x0c,
+0x60, 0x12, 0x8f, 0x7a, 0x60, 0x83, 0x77, 0x5e,
+0x62, 0x2e, 0xf4, 0xa6, 0x11, 0x04, 0xd8, 0x61,
+0x62, 0x24, 0x66, 0x17, 0x20, 0xce, 0x61, 0xec,
+0x02, 0x40, 0x62, 0x33, 0x27, 0x73, 0x2b, 0x26,
+0x51, 0x97, 0xb2, 0x47, 0x63, 0x06, 0xf5, 0x30,
+0xc0, 0xd5, 0x02, 0x30, 0xc1, 0x40, 0x01, 0x64,
+0xc1, 0xf9, 0x00, 0xc8, 0xc3, 0x72, 0x00, 0xac,
+0xc7, 0xcb, 0x03, 0x38, 0xf2, 0xac, 0x23, 0x08,
+0xf1, 0x6f, 0x01, 0x08, 0xc7, 0xa4, 0x04, 0x00,
+0xf1, 0x96, 0xa4, 0xd1, 0xf7, 0x6c, 0xc6, 0x47,
+0xe0, 0x93, 0x79, 0x30, 0x19, 0x23, 0x15, 0x09,
+0x89, 0x00, 0x15, 0x3a, 0x7a, 0xe4, 0x94, 0x97,
+0xef, 0x76, 0x5f, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x82, 0x46, 0xe8, 0x27, 0x1a, 0x0f, 0xfb, 0x64,
+0xa1, 0x22, 0x0a, 0x63, 0x5d, 0xfe, 0x08, 0xe0,
+0x7f, 0xfe, 0x3b, 0x77, 0x3b, 0xae, 0x9f, 0xdd,
+0xee, 0xff, 0xff, 0xfd, 0xfb, 0xaa, 0xfd, 0xdf,
+0x46, 0xef, 0xbf, 0xfa, 0xd3, 0x10, 0x53, 0x51,
+0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x30, 0x11, 0x40, 0x76, 0x30,
+0x07, 0x00, 0xc1, 0x11, 0x82, 0x8c, 0x60, 0x0b,
+0x85, 0x0a, 0x60, 0x34, 0x0f, 0x78, 0x61, 0x6a,
+0xf7, 0x40, 0x65, 0xa8, 0xf4, 0x86, 0x17, 0xa4,
+0xde, 0x61, 0x80, 0x25, 0x06, 0x17, 0x80, 0xdc,
+0x61, 0xee, 0x04, 0x26, 0x23, 0x00, 0x34, 0x1e,
+0xe0, 0x4c, 0x9e, 0xad, 0x0f, 0x7c, 0x82, 0xde,
+0x67, 0x3a, 0xcc, 0x0f, 0xc0, 0x2c, 0x4c, 0x17,
+0x50, 0x1f, 0x8c, 0x24, 0x20, 0x1a, 0x4c, 0x3e,
+0xf0, 0x25, 0x0c, 0x8e, 0x00, 0x81, 0xcf, 0x9a,
+0x34, 0x7a, 0x4f, 0x83, 0x60, 0x64, 0x4c, 0x8b,
+0x10, 0x38, 0xcc, 0x38, 0x00, 0x74, 0x0c, 0x13,
+0xa0, 0x86, 0x8c, 0x05, 0x90, 0x90, 0x4c, 0x01,
+0xf0, 0xfd, 0x8c, 0x53, 0x4e, 0x06, 0x0c, 0x47,
+0x40, 0xca, 0x3a, 0xf4, 0x49, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0x46, 0xc4, 0x27, 0x1a, 0x0f,
+0xfb, 0x64, 0xa1, 0x40, 0x8a, 0xa2, 0x05, 0xfe,
+0x88, 0xe0, 0x65, 0xf4, 0x57, 0xdc, 0xf9, 0x47,
+0xfa, 0x19, 0xa6, 0xdd, 0xe8, 0xba, 0x9d, 0x7e,
+0xff, 0xf2, 0x9a, 0x7f, 0xfa, 0x34, 0xed, 0x6d,
+0x9f, 0xdf, 0xd3, 0xf9, 0xeb, 0x7e, 0x7a, 0x94,
+0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 0x75,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x10, 0x00,
+0x73, 0x30, 0x05, 0x40, 0xbe, 0x11, 0x82, 0x8e,
+0x60, 0x18, 0x05, 0x08, 0x60, 0x50, 0x8f, 0x72,
+0x62, 0x27, 0x77, 0x02, 0x68, 0x86, 0xf4, 0x26,
+0x1d, 0xc4, 0xe0, 0x61, 0xa2, 0x25, 0xe6, 0x18,
+0x20, 0xf2, 0x61, 0xf0, 0x05, 0x86, 0x23, 0x20,
+0x6a, 0x07, 0x73, 0x22, 0x4c, 0x56, 0xb7, 0xb2,
+0x47, 0x39, 0x81, 0xfe, 0xaf, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+0x06, 0x08, 0x18, 0x17, 0x46, 0x0b, 0xb0, 0x12,
+0x66, 0x12, 0x18, 0x11, 0xc6, 0x1f, 0x60, 0x1c,
+0xa6, 0x46, 0xc8, 0x5e, 0x87, 0xcb, 0xe3, 0x18,
+0x47, 0xc0, 0x88, 0x51, 0x06, 0x45, 0x30, 0x12,
+0x86, 0x1b, 0xa8, 0x37, 0x26, 0x09, 0x58, 0x42,
+0x66, 0x01, 0xc0, 0x47, 0xc6, 0x02, 0x30, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xe8, 0x27,
+0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x61, 0x05, 0x61,
+0xc1, 0xff, 0xf0, 0x90, 0x7e, 0x66, 0x3e, 0xa6,
+0x98, 0x04, 0x60, 0x30, 0x05, 0x5b, 0x4f, 0x5c,
+0x7a, 0x92, 0x8e, 0xf3, 0xdd, 0x2e, 0xaf, 0x49,
+0xde, 0x96, 0x73, 0xab, 0xfa, 0x91, 0xff, 0xff,
+0xf2, 0xaa, 0xfd, 0xa8, 0xff, 0x31, 0xfb, 0xa8,
+0xf4, 0xa7, 0x5b, 0x7c, 0x36, 0x98, 0x82, 0x9a,
+0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0xf4, 0x70, 0x30, 0x30, 0xbd, 0x30, 0x09, 0x44,
+0x31, 0x26, 0x83, 0x30, 0x35, 0x07, 0xb2, 0x31,
+0x68, 0x7b, 0x50, 0x31, 0x62, 0x87, 0x9c, 0x30,
+0x46, 0xc2, 0x71, 0x30, 0x37, 0x81, 0x34, 0x30,
+0x31, 0x00, 0x80, 0x37, 0xc8, 0xec, 0xe3, 0x04,
+0xc3, 0x5b, 0x01, 0x08, 0x89, 0xea, 0xb1, 0xef,
+0x90, 0x4f, 0x83, 0x9e, 0xdf, 0xff, 0xd4, 0x60,
+0x83, 0x01, 0x8a, 0x60, 0xbb, 0x81, 0x48, 0x61,
+0x20, 0x01, 0x66, 0x61, 0xf4, 0x82, 0x58, 0x64,
+0x68, 0x07, 0x92, 0x7c, 0xa2, 0xbd, 0xfe, 0x7b,
+0xec, 0x06, 0xc6, 0x64, 0x4c, 0x80, 0x72, 0x61,
+0xb3, 0x03, 0x40, 0x60, 0x8d, 0x04, 0x10, 0x60,
+0x0a, 0x84, 0x76, 0x60, 0x34, 0x87, 0xdc, 0x65,
+0x5a, 0x51, 0x81, 0x85, 0xe2, 0xa0, 0x45, 0x92,
+0xf4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8,
+0x6c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x5e,
+0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x47, 0x67,
+0xe8, 0xaf, 0xf1, 0x38, 0x65, 0xbd, 0x63, 0x3d,
+0x7c, 0xb7, 0xf6, 0xfd, 0xdf, 0xff, 0xef, 0xfd,
+0x4d, 0xff, 0x59, 0xbe, 0x8f, 0x7f, 0xef, 0x77,
+0xcb, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c,
+0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x00, 0x82, 0x60, 0x00, 0x61, 0xc2, 0x08,
+0x34, 0xe8, 0x60, 0x36, 0x89, 0x8d, 0xb5, 0x06,
+0x05, 0x38, 0xa4, 0xe6, 0x24, 0xd4, 0xfe, 0xa6,
+0x24, 0x28, 0xa3, 0x26, 0x06, 0x90, 0x33, 0xc6,
+0x04, 0xb8, 0x19, 0x66, 0x03, 0xf8, 0x0a, 0xa7,
+0x3c, 0x48, 0x76, 0x67, 0x20, 0x2e, 0x72, 0x22,
+0x06, 0xa7, 0x20, 0x9f, 0xb0, 0x09, 0xff, 0xee,
+0xff, 0x5a, 0x10, 0x60, 0x85, 0x81, 0x9c, 0x60,
+0xbc, 0x01, 0x6e, 0x61, 0x1f, 0x81, 0xa8, 0x61,
+0xf2, 0x02, 0xe2, 0x64, 0x62, 0x89, 0x20, 0x7c,
+0x7e, 0x49, 0x98, 0x7b, 0xc9, 0x88, 0x58, 0x64,
+0x44, 0x00, 0x3e, 0x61, 0xac, 0x83, 0x0e, 0x60,
+0x85, 0x84, 0x02, 0x42, 0x11, 0xb1, 0x81, 0x10,
+0x1f, 0x59, 0x9a, 0xa9, 0x66, 0x0d, 0x17, 0x08,
+0x80, 0xab, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xc6, 0xfc, 0x25, 0x1a, 0x0e, 0xff, 0x82,
+0x81, 0x55, 0x05, 0xa1, 0xc1, 0xff, 0xf0, 0x90,
+0xf1, 0x8f, 0x58, 0xa3, 0xbc, 0xf7, 0x4b, 0xa3,
+0xe7, 0x7d, 0x9c, 0x9d, 0xc9, 0xea, 0xff, 0xfa,
+0x7e, 0x77, 0x47, 0xf6, 0x23, 0x6f, 0xd1, 0xf7,
+0x68, 0xfd, 0x1a, 0x3c, 0xcd, 0x29, 0x88, 0x29,
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x30, 0xcc, 0x6a, 0x04, 0x17, 0x26,
+0x10, 0x28, 0x06, 0x39, 0xcf, 0xa6, 0x09, 0x80,
+0xf4, 0x06, 0x3f, 0xff, 0x57, 0x86, 0x3e, 0xc0,
+0xf1, 0x86, 0x0b, 0x78, 0x4e, 0x66, 0x07, 0xc0,
+0x27, 0xc6, 0x06, 0x60, 0x12, 0x46, 0xf9, 0x28,
+0x9c, 0x50, 0xec, 0x6b, 0x40, 0xa0, 0xd1, 0x2d,
+0x56, 0x3c, 0xf2, 0x09, 0x78, 0x61, 0x82, 0x1c,
+0x06, 0xb9, 0x82, 0xf2, 0x06, 0x41, 0x84, 0x78,
+0x07, 0x99, 0x87, 0xbe, 0x0d, 0x71, 0x91, 0x6c,
+0x2a, 0x59, 0xf1, 0x4b, 0x52, 0x49, 0xee, 0x74,
+0x27, 0x59, 0x90, 0xee, 0x04, 0x01, 0x86, 0x90,
+0x0b, 0x51, 0x81, 0xf0, 0x0f, 0xb1, 0x80, 0x30,
+0x11, 0x89, 0x81, 0x4e, 0x1f, 0x11, 0x80, 0xfa,
+0x0a, 0x41, 0x80, 0x24, 0x01, 0x78, 0x84, 0x00,
+0x40, 0x6e, 0x8b, 0x22, 0x69, 0xff, 0xfb, 0x90,
+0xc4, 0xff, 0x82, 0x47, 0x3c, 0x25, 0x20, 0xce,
+0x7f, 0x62, 0xa1, 0x56, 0x05, 0x61, 0xc1, 0xff,
+0xf0, 0x90, 0xf2, 0xc3, 0xed, 0x7f, 0x39, 0x3f,
+0xff, 0x5b, 0xf5, 0x53, 0xf7, 0x75, 0xff, 0xdd,
+0x67, 0xef, 0xfe, 0xc6, 0x7f, 0x9b, 0xf4, 0xf7,
+0xfa, 0x97, 0xaf, 0xcb, 0x26, 0x20, 0xa6, 0xa2,
+0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 0x80, 0x69,
+0x15, 0x02, 0xd8, 0xc0, 0x2d, 0x04, 0xfc, 0xc0,
+0x86, 0x09, 0xe0, 0xc1, 0x5d, 0x1e, 0x4c, 0xc9,
+0x14, 0xe9, 0x64, 0xe3, 0x9d, 0xe0, 0x4c, 0x65,
+0x09, 0xc0, 0xc4, 0x1c, 0x50, 0xcc, 0x33, 0xc2,
+0x6c, 0xc3, 0xe0, 0x16, 0x8c, 0x44, 0xc2, 0x2c,
+0xec, 0xc6, 0xc5, 0x92, 0x15, 0x1b, 0xc9, 0x17,
+0x96, 0x60, 0x7e, 0xdf, 0xe8, 0x30, 0x44, 0xc0,
+0xe0, 0x30, 0x5e, 0x00, 0xd9, 0x30, 0x8e, 0xc1,
+0x10, 0x30, 0xf5, 0x81, 0xeb, 0x32, 0x29, 0x45,
+0xfa, 0x3e, 0x0e, 0xaf, 0x7c, 0x3d, 0xb5, 0x45,
+0x9c, 0x32, 0x18, 0x80, 0xd1, 0x30, 0xce, 0x41,
+0x4f, 0x30, 0x39, 0xc1, 0xed, 0x30, 0x0f, 0x42,
+0x2a, 0x30, 0x30, 0x83, 0xdd, 0x30, 0x24, 0x01,
+0x45, 0x30, 0x06, 0x40, 0x2e, 0x0b, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc6, 0x74, 0x25, 0x1a,
+0x0e, 0xff, 0x82, 0xa9, 0x66, 0x07, 0xa1, 0xc1,
+0xff, 0xb4, 0x98, 0x00, 0x0a, 0x0d, 0xe1, 0xa4,
+0x9c, 0x78, 0xb4, 0xf3, 0xdb, 0xce, 0xdd, 0xe8,
+0xee, 0x57, 0x5d, 0x1f, 0xfd, 0xff, 0xd3, 0x63,
+0xff, 0xfb, 0xf7, 0x7a, 0xed, 0xff, 0xcc, 0x7e,
+0xfd, 0xfd, 0x09, 0x88, 0x29, 0xa8, 0xa6, 0x65,
+0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x0a,
+0x40, 0x64, 0x1d, 0x02, 0xcc, 0xc0, 0x38, 0x04,
+0xe8, 0xc0, 0x99, 0x09, 0xcc, 0xc1, 0x84, 0x1e,
+0x10, 0xca, 0x1d, 0xe7, 0x90, 0xe7, 0x99, 0xdc,
+0x8c, 0x6e, 0xc9, 0xbc, 0xc4, 0x48, 0x51, 0x8c,
+0x34, 0x82, 0x80, 0xc3, 0xe4, 0x19, 0x4c, 0x44,
+0x02, 0x70, 0xec, 0x88, 0x84, 0x92, 0xd5, 0x03,
+0xcf, 0x14, 0x97, 0xd7, 0x39, 0x66, 0x83, 0x05,
+0x08, 0x10, 0xd3, 0x06, 0xcc, 0x10, 0xc3, 0x0a,
+0x20, 0x15, 0xd3, 0x11, 0x64, 0x27, 0x23, 0x27,
+0x10, 0x79, 0x53, 0xfe, 0x0f, 0xbc, 0x13, 0xf7,
+0xb0, 0x72, 0xb3, 0x25, 0xd4, 0x14, 0x23, 0x0e,
+0x68, 0x16, 0x03, 0x03, 0xc8, 0x22, 0x63, 0x01,
+0xb0, 0x27, 0x53, 0x04, 0x04, 0x45, 0xe3, 0x02,
+0xf4, 0x17, 0x23, 0x00, 0x98, 0x03, 0x90, 0x68,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0x20,
+0x27, 0x1a, 0x0f, 0xfb, 0x64, 0x81, 0x61, 0x87,
+0xa1, 0xc1, 0xff, 0xb4, 0x98, 0x01, 0x00, 0x64,
+0x89, 0xb1, 0x34, 0xa6, 0x51, 0x3e, 0xce, 0xed,
+0xce, 0x27, 0xd3, 0xd3, 0x4f, 0x65, 0xf4, 0xea,
+0x21, 0xde, 0xdf, 0x5e, 0x53, 0x7f, 0xaf, 0xee,
+0x44, 0x5c, 0xb6, 0xd7, 0x58, 0xaa, 0x5f, 0xf7,
+0xd3, 0xf6, 0x58, 0xa4, 0x7b, 0xe8, 0x4c, 0x41,
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0x30, 0x07, 0x00, 0x53, 0x0b, 0x01, 0x2c, 0x60,
+0x1c, 0x82, 0x1e, 0x60, 0x49, 0x04, 0x3c, 0x60,
+0xba, 0x8d, 0x0e, 0x64, 0xdd, 0x64, 0xbe, 0x73,
+0x0e, 0xcf, 0x26, 0x34, 0x04, 0x38, 0x61, 0xf2,
+0x23, 0xa6, 0x16, 0xe1, 0x22, 0x61, 0xa8, 0x0b,
+0x86, 0x1d, 0x61, 0x2e, 0x72, 0xe3, 0xe2, 0xc6,
+0x8b, 0x3e, 0x04, 0x97, 0xce, 0x60, 0x7f, 0xfe,
+0x83, 0x04, 0x6c, 0x0f, 0x03, 0x05, 0xe0, 0x0f,
+0x93, 0x08, 0xcc, 0x14, 0xa3, 0x0f, 0x10, 0x25,
+0xb3, 0x21, 0xec, 0x74, 0x63, 0xdc, 0xe3, 0x93,
+0x83, 0xd7, 0x5c, 0x6e, 0xa3, 0x20, 0xc0, 0x15,
+0x93, 0x0c, 0x4c, 0x11, 0x53, 0x02, 0xfc, 0x1d,
+0x53, 0x01, 0xe4, 0x21, 0xc3, 0x03, 0xd8, 0x3c,
+0x93, 0x02, 0xc8, 0x13, 0xf3, 0x00, 0x94, 0x02,
+0xc0, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc7, 0x10, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1,
+0x8a, 0x07, 0x61, 0x81, 0xff, 0xb4, 0x98, 0x00,
+0xa0, 0xea, 0x18, 0xa4, 0xe3, 0xc6, 0xc7, 0x9d,
+0xd9, 0xf9, 0xd2, 0x9e, 0x87, 0x7f, 0xd4, 0xea,
+0x75, 0xfb, 0x99, 0xfc, 0xb6, 0x8d, 0xdf, 0xec,
+0xb7, 0xdd, 0xff, 0xf4, 0x3b, 0xed, 0xff, 0xa1,
+0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x30, 0x07, 0xc0, 0x5e, 0x30, 0x00,
+0xc0, 0xad, 0x30, 0x13, 0x81, 0x34, 0x30, 0x2f,
+0x42, 0x67, 0x30, 0x74, 0x07, 0x60, 0x33, 0x03,
+0x78, 0xca, 0x3b, 0xca, 0x75, 0x23, 0x20, 0x12,
+0x69, 0x31, 0x2a, 0x14, 0xc3, 0x0d, 0x60, 0xae,
+0x30, 0xf5, 0x07, 0x73, 0x10, 0xc0, 0xc0, 0x3a,
+0xe2, 0xe0, 0xe4, 0x75, 0x20, 0xf3, 0xc5, 0x25,
+0xf5, 0xf0, 0xa8, 0x27, 0x12, 0xd6, 0x60, 0x43,
+0x00, 0xea, 0x60, 0x5b, 0x80, 0xf4, 0x60, 0x8a,
+0x01, 0x5a, 0x60, 0xf2, 0x82, 0x8c, 0x62, 0x29,
+0x08, 0x1e, 0x6e, 0x3b, 0xc0, 0x6e, 0x6d, 0xe0,
+0x07, 0xc2, 0x62, 0x15, 0x81, 0x8c, 0x78, 0x23,
+0x81, 0x92, 0x9c, 0x06, 0x3e, 0x84, 0x9a, 0x07,
+0xcc, 0x65, 0x74, 0xb1, 0x82, 0x01, 0x2a, 0xdc,
+0xfa, 0xcd, 0x6e, 0xdd, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc7, 0x10, 0x27, 0x1c, 0x0f, 0xfb,
+0x64, 0xb1, 0x69, 0x07, 0x61, 0xc1, 0xff, 0xb4,
+0x98, 0x9e, 0xfe, 0xdc, 0x14, 0xff, 0xbe, 0x39,
+0x08, 0xe2, 0x29, 0x32, 0x50, 0x9a, 0x03, 0x83,
+0xc0, 0xc4, 0xb4, 0xa9, 0x9f, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xe9, 0x4c, 0x41, 0x4d, 0x45, 0x33,
+0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x08, 0x00, 0x6b,
+0x30, 0x04, 0x00, 0xc6, 0x30, 0x1a, 0xc1, 0x5f,
+0x30, 0x3b, 0x02, 0xb8, 0x30, 0x8f, 0xc8, 0x53,
+0x33, 0xb1, 0x3f, 0xf3, 0x3e, 0x73, 0x84, 0x33,
+0x27, 0x22, 0xbe, 0x31, 0x65, 0x18, 0x13, 0x0f,
+0xb0, 0xd3, 0x31, 0x1a, 0x09, 0x63, 0x13, 0x30,
+0xf3, 0x3c, 0x73, 0xf0, 0x85, 0x44, 0xcf, 0x75,
+0x22, 0xf1, 0x4a, 0x43, 0xf6, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xdb, 0xa0, 0xc0, 0xf9, 0x03, 0x70, 0xc1, 0x44,
+0x03, 0xc4, 0xc1, 0xe1, 0x05, 0x30, 0xc3, 0x36,
+0x09, 0x9c, 0xc7, 0x41, 0x1d, 0xa8, 0xef, 0x5e,
+0xe8, 0x68, 0xee, 0x2d, 0x1c, 0x68, 0xc6, 0xfa,
+0x06, 0x54, 0xc2, 0x8d, 0x02, 0xd4, 0xc0, 0x7f,
+0x06, 0x0c, 0xc0, 0x95, 0x07, 0x28, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x29, 0x1a,
+0x0f, 0xfb, 0x64, 0xa1, 0x4d, 0x0a, 0x63, 0x29,
+0xfe, 0x08, 0xe0, 0xc1, 0x00, 0x0c, 0xec, 0xd6,
+0x90, 0xf3, 0x12, 0x88, 0x8b, 0x52, 0xb9, 0xa1,
+0x9a, 0xd7, 0xad, 0x71, 0xe9, 0xad, 0x1e, 0x8f,
+0xf8, 0x6f, 0xf5, 0xff, 0xff, 0xf4, 0xe8, 0xff,
+0x5e, 0xd7, 0x79, 0x0f, 0x77, 0x47, 0xe8, 0x4c,
+0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x06,
+0xc0, 0x66, 0x30, 0x06, 0xc0, 0xc3, 0x30, 0x1d,
+0x01, 0x58, 0x30, 0x3f, 0xc2, 0xb1, 0x30, 0x99,
+0x88, 0x36, 0x33, 0xf1, 0x7f, 0x22, 0x3f, 0x6c,
+0x82, 0x83, 0x29, 0x72, 0xb9, 0x31, 0x70, 0x18,
+0x43, 0x0f, 0xc0, 0xda, 0x31, 0x19, 0x09, 0xf3,
+0x12, 0xe1, 0x04, 0x3c, 0x44, 0x40, 0x85, 0x74,
+0xb8, 0x75, 0xe2, 0x91, 0x7a, 0xf8, 0x3d, 0x5b,
+0x3f, 0xff, 0x51, 0x81, 0xf4, 0x07, 0x19, 0x82,
+0x86, 0x07, 0xe1, 0x83, 0xb4, 0x0b, 0x19, 0x86,
+0x5a, 0x14, 0x81, 0x8e, 0x4c, 0x3f, 0x49, 0xdd,
+0x77, 0xee, 0x99, 0xdb, 0x18, 0x3c, 0xd9, 0x8d,
+0xba, 0x0e, 0x31, 0x84, 0xf0, 0x04, 0xb1, 0x80,
+0xd4, 0x0b, 0xa1, 0x81, 0x50, 0x0e, 0x19, 0x82,
+0x2a, 0x19, 0x81, 0xb0, 0xe1, 0x46, 0x28, 0x11,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xb8,
+0x27, 0x18, 0x0f, 0xfb, 0x64, 0x81, 0x41, 0x05,
+0x62, 0x01, 0xff, 0xf0, 0x90, 0x96, 0x79, 0x72,
+0xc3, 0x55, 0x6f, 0xd9, 0x34, 0x9d, 0x87, 0xfc,
+0x77, 0x7a, 0x9f, 0x96, 0xff, 0xff, 0xfb, 0xbf,
+0xdf, 0xff, 0xab, 0xf7, 0xff, 0xbf, 0xfd, 0x69,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x30, 0x04, 0x80, 0x63, 0x30, 0x08, 0x80, 0xbc,
+0x30, 0x20, 0x41, 0x53, 0x30, 0x44, 0x02, 0xa6,
+0x30, 0xa3, 0x48, 0x1b, 0x34, 0x2e, 0xbe, 0x3f,
+0x34, 0x16, 0xc8, 0x0d, 0x30, 0xae, 0x82, 0xb2,
+0x30, 0x5e, 0xc1, 0x87, 0x30, 0x3f, 0xc0, 0xe1,
+0x30, 0x45, 0x00, 0xa8, 0x30, 0x4a, 0xc1, 0x15,
+0x3c, 0x14, 0xb0, 0x72, 0x82, 0x5d, 0xba, 0x91,
+0x78, 0xa5, 0x26, 0x6c, 0x5e, 0xdf, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xd6, 0x60, 0x6d, 0x81, 0x90, 0x60, 0x8b, 0x01,
+0xc6, 0x60, 0xcc, 0x82, 0x88, 0x61, 0x5d, 0x04,
+0xc2, 0x63, 0x16, 0x8e, 0xb0, 0x74, 0x34, 0x72,
+0xd0, 0x73, 0xb2, 0x8e, 0x28, 0x62, 0xf4, 0x03,
+0x6a, 0x61, 0x0b, 0x80, 0xca, 0x60, 0x23, 0x82,
+0x72, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc7, 0x94, 0x29, 0x18, 0x0f, 0xfb, 0x64, 0x81,
+0x3f, 0x05, 0x22, 0x01, 0xff, 0xf0, 0x90, 0x51,
+0x83, 0x00, 0x60, 0x7f, 0x05, 0x7a, 0x76, 0x5c,
+0x66, 0x4a, 0x30, 0x5d, 0xd6, 0x1d, 0x0c, 0xe5,
+0xcb, 0x4e, 0xed, 0x77, 0x8d, 0xf5, 0xf5, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x77, 0xfb, 0xbd, 0x1d,
+0xdf, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14,
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x30, 0x02, 0xc0, 0x5c, 0x30, 0x0b,
+0x40, 0xb9, 0x30, 0x22, 0x81, 0x4c, 0x30, 0x48,
+0x42, 0x9b, 0x30, 0xac, 0x07, 0xfa, 0x34, 0x69,
+0xfd, 0x48, 0x34, 0x50, 0x07, 0xee, 0x30, 0xb7,
+0x42, 0xad, 0x30, 0x61, 0x81, 0x86, 0x30, 0x3f,
+0x80, 0xe8, 0x30, 0x44, 0xc0, 0xb3, 0x30, 0x49,
+0x01, 0x24, 0x3b, 0xc5, 0x00, 0x52, 0x9a, 0x5c,
+0x3a, 0xf0, 0xe4, 0x5e, 0xb8, 0x46, 0xca, 0xbf,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x81,
+0xb4, 0x06, 0x79, 0x82, 0x2a, 0x07, 0x61, 0x83,
+0x24, 0x0a, 0xb9, 0x85, 0x5e, 0x14, 0x21, 0x8c,
+0x20, 0x3d, 0xf9, 0xcf, 0x83, 0xe3, 0x69, 0xcd,
+0x80, 0x3b, 0xd9, 0x8b, 0x96, 0x0e, 0xd1, 0x84,
+0x08, 0x02, 0x21, 0x80, 0x64, 0x09, 0x71, 0x81,
+0x64, 0x0b, 0xc9, 0x82, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc9, 0x1c, 0x29, 0x18, 0x0f, 0xff,
+0x64, 0x81, 0x37, 0x85, 0x22, 0x41, 0xff, 0xec,
+0x90, 0x1e, 0x15, 0x81, 0xde, 0xef, 0x19, 0x30,
+0xc9, 0x72, 0x98, 0x6c, 0x6b, 0x79, 0x59, 0xef,
+0x52, 0x7d, 0x3f, 0x67, 0xdd, 0xff, 0xff, 0xff,
+0xff, 0x47, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35,
+0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 0x80, 0x59,
+0x30, 0x0d, 0x00, 0xb4, 0x30, 0x25, 0x41, 0x47,
+0x30, 0x4c, 0x02, 0x90, 0x30, 0xb4, 0xc7, 0xd9,
+0x34, 0xa2, 0xbc, 0x3f, 0x34, 0x87, 0xc7, 0xcf,
+0x30, 0xbf, 0x02, 0xa4, 0x30, 0x64, 0x41, 0x89,
+0x30, 0x40, 0x40, 0xef, 0x30, 0x43, 0x80, 0xba,
+0x30, 0x48, 0x41, 0x35, 0x3b, 0xb5, 0x70, 0x52,
+0x62, 0x6b, 0xb8, 0x90, 0xfc, 0x52, 0x93, 0x37,
+0x2f, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xeb, 0x30, 0x37, 0x40,
+0xd2, 0x30, 0x44, 0x00, 0xf7, 0x30, 0x62, 0xc1,
+0x68, 0x30, 0xa8, 0x82, 0xa5, 0x31, 0x7d, 0x48,
+0x20, 0x39, 0xc3, 0x3f, 0x54, 0x39, 0x83, 0xc7,
+0xde, 0x31, 0x6b, 0x02, 0x01, 0x30, 0x7c, 0x40,
+0x21, 0x30, 0x06, 0xc1, 0x21, 0x30, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x94, 0x27, 0x18,
+0x0f, 0xff, 0x64, 0x81, 0x24, 0x85, 0x62, 0x41,
+0xff, 0xec, 0x90, 0x31, 0x41, 0x6e, 0x30, 0x47,
+0x82, 0xa5, 0x3c, 0x6d, 0x93, 0x2b, 0x16, 0x2e,
+0x4b, 0x0e, 0x8c, 0xeb, 0x1b, 0x47, 0x7b, 0x9d,
+0xe3, 0x7f, 0xf4, 0xfd, 0x9d, 0x1f, 0xff, 0xff,
+0xf5, 0xfe, 0xbe, 0xef, 0xf7, 0x7f, 0xff, 0xfe,
+0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93,
+0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x80,
+0xa4, 0x60, 0x1e, 0x81, 0x5e, 0x60, 0x4f, 0x02,
+0x80, 0x60, 0xa0, 0x85, 0x06, 0x61, 0x7a, 0x0f,
+0x64, 0x69, 0xb2, 0xf6, 0x44, 0x69, 0x79, 0x0f,
+0x54, 0x61, 0x8d, 0x85, 0x3a, 0x60, 0xcc, 0x03,
+0x10, 0x60, 0x80, 0x01, 0xe4, 0x60, 0x86, 0x81,
+0x86, 0x60, 0x8d, 0x02, 0x88, 0x76, 0xcb, 0x80,
+0x64, 0xb4, 0xd4, 0x71, 0xe1, 0xc8, 0xbd, 0x38,
+0x66, 0xca, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0x49, 0x97,
+0xc5, 0xc9, 0x9d, 0x66, 0xe1, 0xaa, 0x4a, 0x39,
+0xc8, 0x33, 0x51, 0x8a, 0x38, 0x3b, 0x99, 0xc3,
+0x3f, 0xd0, 0x69, 0xc1, 0x84, 0x39, 0xc9, 0x89,
+0xb6, 0x0e, 0xf0, 0x90, 0x67, 0x80, 0x00, 0x3b,
+0x8c, 0xb6, 0x4d, 0xcd, 0x07, 0x90, 0x8c, 0xb5,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x20,
+0x29, 0x18, 0x0f, 0xff, 0x64, 0x81, 0x3a, 0x05,
+0x22, 0x41, 0xff, 0xec, 0x90, 0x2d, 0x8c, 0x24,
+0x04, 0x50, 0x79, 0x9c, 0xc6, 0x84, 0xc1, 0xbf,
+0x4f, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x4a, 0x62, 0x0a, 0x6a, 0x29, 0x99,
+0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0x11, 0x00, 0x9a, 0x60, 0x22, 0x01, 0x50, 0x60,
+0x53, 0x82, 0x72, 0x60, 0xa7, 0x04, 0xec, 0x61,
+0x8a, 0x8f, 0x1a, 0x6a, 0x1b, 0x73, 0xe6, 0x69,
+0xe0, 0x8f, 0x0a, 0x61, 0x9c, 0x05, 0x24, 0x60,
+0xd1, 0x83, 0x12, 0x60, 0x80, 0x81, 0xf2, 0x60,
+0x84, 0x01, 0x94, 0x60, 0x8a, 0x82, 0xaa, 0x76,
+0x2c, 0x20, 0x64, 0x84, 0xd7, 0x71, 0x21, 0xf8,
+0xa5, 0x26, 0x75, 0xed, 0xfb, 0xff, 0xd7, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+0x66, 0x5f, 0x97, 0x86, 0x73, 0x1c, 0xa6, 0xa5,
+0xaa, 0x87, 0x1a, 0x50, 0xe6, 0x28, 0x08, 0xf8,
+0x47, 0x07, 0x57, 0x8c, 0xc7, 0x00, 0x98, 0xf1,
+0x06, 0x25, 0xd0, 0x3f, 0xe6, 0x0c, 0x68, 0x01,
+0x43, 0x00, 0x72, 0x99, 0x86, 0x97, 0x1a, 0x25,
+0x1b, 0x99, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc9, 0x14, 0x27, 0x18, 0x0f, 0xff, 0x64, 0x80,
+0xfc, 0x04, 0x62, 0x81, 0xdf, 0xf4, 0x50, 0x78,
+0x59, 0x98, 0x4e, 0x07, 0x20, 0x05, 0x9d, 0x46,
+0x7c, 0x16, 0x77, 0xbb, 0xff, 0xff, 0xec, 0xff,
+0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfb, 0xbe, 0x9f,
+0xff, 0xf5, 0xa6, 0x20, 0xa6, 0xa2, 0x99, 0x97,
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x24, 0x01, 0x18, 0xc0, 0x4b, 0x02,
+0x8c, 0xc0, 0xb0, 0x04, 0xc0, 0xc1, 0x5d, 0x09,
+0xa4, 0xc3, 0x34, 0x1d, 0x88, 0xd5, 0x01, 0xe2,
+0xc8, 0xd4, 0x84, 0x1d, 0x70, 0xc3, 0x57, 0x0a,
+0x24, 0xc1, 0xaa, 0x06, 0x20, 0xc1, 0x00, 0x03,
+0xf8, 0xc1, 0x05, 0x03, 0x4c, 0xc1, 0x0e, 0x05,
+0x88, 0xeb, 0x19, 0x80, 0x48, 0xe9, 0xa8, 0xe3,
+0xc3, 0x92, 0xfa, 0x73, 0x96, 0x55, 0xf4, 0x7f,
+0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xa4, 0xcb, 0xe2, 0xfc, 0xce, 0x53,
+0xa8, 0xd4, 0x45, 0x84, 0xe2, 0x7a, 0x80, 0xc4,
+0xe2, 0x20, 0x3c, 0xe0, 0x2b, 0xfa, 0x9c, 0xdf,
+0x58, 0x1f, 0x54, 0xc4, 0x9b, 0x08, 0x68, 0xc1,
+0x78, 0x00, 0xb4, 0xc0, 0x09, 0x03, 0x60, 0xcd,
+0x04, 0x9c, 0xd1, 0xf8, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc9, 0x0c, 0x29, 0x18, 0x0f, 0xff,
+0x64, 0x81, 0x13, 0x04, 0xa2, 0x81, 0xdf, 0xf4,
+0x50, 0xa0, 0xcc, 0x52, 0xb8, 0xc2, 0xa0, 0x3d,
+0x00, 0x4d, 0x76, 0x34, 0xa0, 0xdf, 0xa7, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xd9, 0xf4,
+0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8,
+0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x0b, 0x80, 0x9e, 0x60,
+0x31, 0x01, 0x6c, 0x60, 0x6b, 0x82, 0xaa, 0x60,
+0xd0, 0x05, 0x60, 0x61, 0xe6, 0x90, 0x76, 0x6c,
+0x65, 0x7e, 0x22, 0x6c, 0x1b, 0x90, 0x6e, 0x61,
+0xf7, 0x05, 0xb4, 0x60, 0xf9, 0x83, 0x86, 0x60,
+0x94, 0x82, 0x56, 0x60, 0x93, 0x01, 0xf8, 0x60,
+0x98, 0x83, 0x4e, 0x78, 0x6f, 0xe6, 0x54, 0x04,
+0x8e, 0x6d, 0x71, 0xff, 0x87, 0x29, 0x33, 0x38,
+0xbd, 0xbf, 0x7f, 0xfa, 0xe8, 0xff, 0xff, 0xff,
+0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xac, 0xca,
+0x32, 0x98, 0xcc, 0x23, 0x44, 0xd1, 0x34, 0xf8,
+0xdd, 0x49, 0x84, 0xc4, 0x2b, 0x1d, 0x40, 0xdb,
+0x8a, 0xe3, 0x98, 0xda, 0xd5, 0x1c, 0x78, 0xc3,
+0xea, 0x07, 0xbc, 0xc1, 0x37, 0x00, 0xf0, 0xc0,
+0x16, 0x02, 0xbc, 0xd7, 0xef, 0x63, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x18, 0x27, 0x18,
+0x0f, 0xff, 0x64, 0x81, 0x08, 0x04, 0x62, 0x81,
+0xdf, 0xf4, 0x50, 0x81, 0x75, 0x4d, 0x60, 0x91,
+0x31, 0x18, 0x21, 0x1f, 0x5a, 0xf4, 0xb4, 0xa8,
+0x33, 0xe8, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xe8, 0x4c, 0x41, 0x4d, 0x45,
+0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x00,
+0x00, 0x48, 0x30, 0x1a, 0x40, 0xb1, 0x30, 0x38,
+0x01, 0x4c, 0x30, 0x6b, 0xc2, 0x9f, 0x30, 0xfb,
+0x08, 0x06, 0x36, 0x67, 0x7d, 0x78, 0x36, 0x41,
+0x08, 0x02, 0x31, 0x03, 0x42, 0xcd, 0x30, 0x7f,
+0x01, 0xc0, 0x30, 0x49, 0x81, 0x30, 0x30, 0x48,
+0x41, 0x05, 0x30, 0x4a, 0x01, 0xb4, 0x3b, 0xe8,
+0x23, 0x29, 0x05, 0x43, 0x46, 0xbe, 0xfe, 0x43,
+0xf4, 0xe1, 0x9b, 0x2a, 0xfa, 0x3f, 0xec, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
+0xec, 0xd2, 0x65, 0x11, 0x52, 0x65, 0xf9, 0xac,
+0x68, 0x62, 0x92, 0x6e, 0x3c, 0xe8, 0x62, 0x06,
+0x0f, 0x1e, 0x6d, 0x68, 0xf5, 0x6e, 0x6d, 0x0f,
+0x0e, 0xba, 0x61, 0xe5, 0x84, 0x0c, 0x60, 0x92,
+0x00, 0xaa, 0x60, 0x13, 0x81, 0x48, 0x6c, 0x87,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x58,
+0x29, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x01, 0x04,
+0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x79, 0xc3, 0x79,
+0x06, 0xb7, 0x46, 0x18, 0x90, 0x0e, 0x8f, 0xce,
+0x2c, 0xba, 0x1b, 0xeb, 0x4f, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xa6, 0x20,
+0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0x30, 0x02, 0xc0, 0x41, 0x30, 0x1c, 0x00, 0xa8,
+0x30, 0x3a, 0x41, 0x41, 0x30, 0x6f, 0x82, 0x8c,
+0x31, 0x02, 0xc7, 0xcf, 0x36, 0x99, 0xbb, 0xcb,
+0x36, 0x72, 0x47, 0xcd, 0x31, 0x0a, 0x02, 0xbe,
+0x30, 0x81, 0x41, 0xbf, 0x30, 0x49, 0xc1, 0x35,
+0x30, 0x46, 0x81, 0x0a, 0x30, 0x48, 0x41, 0xc3,
+0x3b, 0x98, 0x93, 0x26, 0x06, 0x47, 0xf6, 0xb8,
+0xff, 0xc3, 0x94, 0x96, 0xf9, 0x6d, 0x7f, 0x4f,
+0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xa3, 0xff,
+0xfe, 0x8f, 0xff, 0xdb, 0xa0, 0xca, 0x32, 0xa8,
+0xcb, 0xa3, 0x74, 0xd0, 0x55, 0x48, 0xdb, 0x8a,
+0x24, 0xc3, 0xef, 0x1f, 0x20, 0xda, 0x0c, 0xf1,
+0xc8, 0xd9, 0x61, 0x1e, 0x60, 0xc3, 0xaa, 0x08,
+0x7c, 0xc1, 0x11, 0x01, 0xa8, 0xc0, 0x34, 0x02,
+0x64, 0xda, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc9, 0x7c, 0x27, 0x16, 0x0f, 0xff, 0x64, 0x80,
+0xfd, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x6e,
+0x43, 0x8a, 0x6e, 0xcd, 0x78, 0x89, 0x31, 0x38,
+0x19, 0x0d, 0x5c, 0x69, 0x6a, 0xc3, 0x9d, 0x48,
+0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xd1, 0xfe, 0x84, 0xc4, 0x14, 0xd4, 0x53, 0x32,
+0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x30, 0x04, 0x80, 0x38, 0x30, 0x1e,
+0x40, 0xa1, 0x30, 0x3c, 0x01, 0x36, 0x30, 0x72,
+0xc2, 0x79, 0x31, 0x0a, 0x07, 0x92, 0x36, 0xc9,
+0x7a, 0x06, 0x36, 0xa0, 0x87, 0x94, 0x31, 0x11,
+0x42, 0xaf, 0x30, 0x82, 0x81, 0xbc, 0x30, 0x49,
+0x01, 0x38, 0x30, 0x45, 0x41, 0x13, 0x30, 0x46,
+0x01, 0xd0, 0x3b, 0x08, 0xc3, 0x25, 0x07, 0x47,
+0xc6, 0xbe, 0xfe, 0x43, 0xf4, 0xf8, 0x3d, 0x5b,
+0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+0xff, 0xfd, 0xff, 0xff, 0x51, 0x94, 0x05, 0x69,
+0x96, 0xe7, 0x01, 0x9f, 0x8a, 0xe9, 0xb5, 0x74,
+0xd1, 0x87, 0x98, 0x40, 0x09, 0xb2, 0x83, 0xf0,
+0xb9, 0xb1, 0x30, 0x3e, 0x89, 0x87, 0x12, 0x11,
+0xa1, 0x81, 0xf8, 0x03, 0xf9, 0x80, 0x8a, 0x04,
+0x51, 0xb6, 0x9b, 0xa7, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc9, 0x98, 0x2b, 0x16, 0x0f, 0xff,
+0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 0xdf, 0xf0,
+0x50, 0x1f, 0xd5, 0x1b, 0x0d, 0x04, 0x62, 0x80,
+0x2a, 0x1b, 0x38, 0xb1, 0x65, 0x06, 0xfa, 0xd3,
+0xe8, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xfd, 0x29, 0x88, 0x29, 0xa8, 0xa6, 0x65,
+0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x30, 0x06, 0xc0, 0x31,
+0x30, 0x1f, 0x80, 0x98, 0x30, 0x3e, 0x41, 0x2b,
+0x30, 0x76, 0x02, 0x64, 0x31, 0x11, 0x47, 0x57,
+0x36, 0xf6, 0xb8, 0x2f, 0x36, 0xcc, 0xc7, 0x59,
+0x31, 0x17, 0x02, 0x9e, 0x30, 0x84, 0x41, 0xb9,
+0x30, 0x48, 0xc1, 0x3d, 0x30, 0x43, 0x81, 0x18,
+0x30, 0x43, 0xc1, 0xdd, 0x3a, 0xb9, 0x33, 0x22,
+0x08, 0x47, 0xf6, 0xb8, 0xff, 0xc6, 0x29, 0x01,
+0xcf, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xf4, 0x19, 0x42, 0x57, 0x19, 0x64,
+0x72, 0x99, 0xea, 0xb2, 0x1b, 0x39, 0x56, 0x98,
+0x75, 0xa4, 0x1b, 0x1b, 0x0d, 0x1f, 0xd4, 0x1a,
+0xf8, 0xe4, 0x03, 0x18, 0x6c, 0x81, 0x25, 0x98,
+0x1d, 0x20, 0x48, 0x18, 0x0a, 0x00, 0x3f, 0x9b,
+0x95, 0xa4, 0x72, 0x6c, 0xe9, 0xb1, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x54, 0x29, 0x16,
+0x0f, 0xff, 0x64, 0x81, 0x03, 0x04, 0x62, 0xc1,
+0xdf, 0xf0, 0x50, 0x8f, 0xe6, 0x2b, 0x02, 0x23,
+0x8b, 0x8d, 0x15, 0x58, 0x33, 0xd4, 0x8f, 0x4f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x1f,
+0xe8, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39,
+0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x0b,
+0x00, 0x32, 0x30, 0x27, 0x40, 0xa9, 0x30, 0x4a,
+0x01, 0x4a, 0x30, 0x8a, 0xc2, 0xa5, 0x31, 0x3f,
+0x88, 0x14, 0x38, 0x20, 0xfd, 0xcc, 0x37, 0xef,
+0x08, 0x1c, 0x31, 0x45, 0xc2, 0xed, 0x30, 0x99,
+0x81, 0xf6, 0x30, 0x53, 0x01, 0x70, 0x30, 0x4b,
+0xc1, 0x4b, 0x30, 0x4b, 0x02, 0x32, 0x3b, 0xea,
+0xe3, 0x29, 0x0f, 0x40, 0x03, 0x3b, 0x76, 0x1f,
+0xfa, 0x7b, 0x07, 0xd5, 0xff, 0xff, 0x57, 0xff,
+0xff, 0xfe, 0xaf, 0xff, 0x7f, 0xff, 0xfd, 0xff,
+0xef, 0xf5, 0x19, 0x10, 0x4b, 0x99, 0x2e, 0x65,
+0x19, 0x98, 0x9e, 0x9a, 0xb3, 0x32, 0x18, 0x62,
+0xc3, 0xaf, 0x9a, 0x94, 0xfc, 0x97, 0x9a, 0x83,
+0x83, 0x9a, 0x98, 0x5a, 0xe1, 0x08, 0x18, 0x16,
+0xc0, 0x46, 0x98, 0x09, 0xe0, 0x30, 0x1b, 0x31,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xe4,
+0x27, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x03, 0x84,
+0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x5a, 0x70, 0x7a,
+0xc1, 0xac, 0x4c, 0xc0, 0x22, 0x2a, 0x6b, 0x3a,
+0xb3, 0xca, 0x0d, 0xf5, 0xa7, 0xd1, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31,
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x30, 0x0d, 0x40, 0x29, 0x30, 0x28, 0x80, 0x9e,
+0x30, 0x4c, 0xc1, 0x3d, 0x30, 0x8e, 0x02, 0x8c,
+0x31, 0x46, 0xc7, 0xc9, 0x38, 0x4f, 0x3b, 0x83,
+0x38, 0x1c, 0xc7, 0xd3, 0x31, 0x4c, 0x02, 0xd8,
+0x30, 0x9a, 0xc1, 0xf1, 0x30, 0x52, 0x41, 0x75,
+0x30, 0x49, 0x81, 0x52, 0x30, 0x48, 0xc2, 0x3f,
+0x3b, 0x7b, 0x33, 0x24, 0x0e, 0x41, 0xf6, 0x70,
+0xff, 0xbf, 0x94, 0x96, 0xf9, 0x6d, 0x1f, 0xff,
+0xdb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xe8, 0xff, 0xfd, 0xba, 0x0c, 0x87, 0x26, 0x0c,
+0x92, 0x33, 0x4c, 0xc5, 0x51, 0x0d, 0x4a, 0x9c,
+0xcc, 0x2f, 0x71, 0xe2, 0x0d, 0x3d, 0xae, 0x9a,
+0x8d, 0x35, 0x51, 0xd7, 0x8c, 0x2b, 0x40, 0x88,
+0x4c, 0x0a, 0x30, 0x26, 0x8c, 0x05, 0xa0, 0x14,
+0xcd, 0xaa, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc9, 0x84, 0x29, 0x14, 0x0f, 0xff, 0x64, 0x80,
+0xfe, 0x84, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xa2,
+0x38, 0x65, 0x2c, 0xd6, 0x86, 0x10, 0x11, 0x29,
+0x35, 0x5d, 0x69, 0xd0, 0xbb, 0x3a, 0xbf, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x30, 0x0f, 0x00, 0x1e, 0x30, 0x2a,
+0xc0, 0x93, 0x30, 0x4e, 0x81, 0x2e, 0x30, 0x91,
+0x42, 0x71, 0x31, 0x4d, 0x87, 0x78, 0x38, 0x7a,
+0xf9, 0x1e, 0x38, 0x47, 0x07, 0x84, 0x31, 0x52,
+0x42, 0xc3, 0x30, 0x9c, 0x01, 0xec, 0x30, 0x51,
+0x81, 0x76, 0x30, 0x47, 0xc1, 0x59, 0x30, 0x45,
+0x82, 0x4a, 0x3a, 0xeb, 0x83, 0x23, 0x11, 0x41,
+0xc6, 0x76, 0xec, 0x43, 0x74, 0xf6, 0x1e, 0xaf,
+0xf7, 0xff, 0xaa, 0x8f, 0xff, 0xff, 0xff, 0xff,
+0xbf, 0xff, 0xfe, 0xff, 0xf7, 0xfa, 0x8c, 0x84,
+0x26, 0x4c, 0x8d, 0x34, 0x0c, 0xbc, 0x52, 0xcd,
+0x3b, 0xa0, 0x0c, 0x2d, 0x41, 0xec, 0x4d, 0x30,
+0x5e, 0xe4, 0x4d, 0x28, 0x21, 0xe1, 0xcc, 0x29,
+0x10, 0x8c, 0x8c, 0x08, 0xe0, 0x2a, 0xcc, 0x06,
+0x50, 0x11, 0x8d, 0xb4, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc9, 0x88, 0x2b, 0x14, 0x0f, 0xff,
+0x64, 0x80, 0xfa, 0x84, 0x63, 0x01, 0xdf, 0xf0,
+0x50, 0x99, 0x38, 0x9c, 0xe8, 0xd7, 0x25, 0xc0,
+0x31, 0x35, 0x35, 0x9d, 0x59, 0xe0, 0x83, 0x7a,
+0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xfd, 0x3f, 0xff, 0xf4, 0x26, 0x20, 0xa6,
+0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x30, 0x14, 0xc0, 0x19,
+0x30, 0x33, 0x00, 0xa0, 0x30, 0x5c, 0xc1, 0x4b,
+0x30, 0xa9, 0x82, 0xac, 0x31, 0x84, 0x48, 0x29,
+0x39, 0xd7, 0xbe, 0x3b, 0x39, 0x9b, 0xc8, 0x39,
+0x31, 0x88, 0x03, 0x0e, 0x30, 0xb4, 0x42, 0x2d,
+0x30, 0x5c, 0xc1, 0xb3, 0x30, 0x4f, 0x81, 0x92,
+0x30, 0x4c, 0xc2, 0xad, 0x3c, 0x1d, 0xb3, 0x28,
+0x16, 0x2e, 0x5b, 0x0c, 0x72, 0xdf, 0xca, 0x4b,
+0x67, 0x17, 0xbb, 0xee, 0xff, 0x5d, 0x3f, 0x6f,
+0xff, 0xff, 0xee, 0xfb, 0xf7, 0x7f, 0x5f, 0xa3,
+0xdd, 0xfe, 0xef, 0x2a, 0x64, 0x19, 0x34, 0x64,
+0x41, 0xaa, 0x65, 0x9a, 0xa0, 0x69, 0x55, 0x1a,
+0x61, 0x59, 0x8f, 0xa8, 0x69, 0x13, 0x79, 0x4c,
+0x68, 0xd4, 0x8f, 0x58, 0x61, 0x36, 0x04, 0x82,
+0x60, 0x3c, 0x81, 0x70, 0x60, 0x37, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x88, 0x29, 0x14,
+0x0f, 0xff, 0x64, 0x81, 0x07, 0x84, 0x63, 0x01,
+0xdf, 0xf0, 0x50, 0x00, 0x72, 0x6e, 0x34, 0x71,
+0xc6, 0x25, 0x66, 0xbc, 0x2b, 0x82, 0x89, 0xc9,
+0x22, 0xeb, 0x48, 0x42, 0xec, 0xb2, 0xa4, 0x7f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0x42, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x02,
+0xc0, 0x49, 0x00, 0x00, 0x06, 0xf0, 0xbb, 0x66,
+0x71, 0x07, 0x9d, 0xa6, 0x12, 0x41, 0x80, 0x68,
+0x96, 0xcd, 0x06, 0x86, 0x01, 0x84, 0x61, 0x2a,
+0x07, 0x26, 0x06, 0x80, 0x44, 0x60, 0x1c, 0x02,
+0xc6, 0x4a, 0x66, 0x36, 0x45, 0x9c, 0x87, 0xf0,
+0xa7, 0xa9, 0x98, 0x38, 0xff, 0xf5, 0x9b, 0xda,
+0xf1, 0xbd, 0x54, 0x20, 0xc8, 0x02, 0x6c, 0xc8,
+0x53, 0x58, 0xca, 0xa5, 0x5c, 0xd1, 0xba, 0x60,
+0xc2, 0x8c, 0x1f, 0xe4, 0xd1, 0x3f, 0xf6, 0xa4,
+0xd0, 0xc6, 0x1f, 0x44, 0xc2, 0x47, 0x09, 0x40,
+0xc0, 0x62, 0x03, 0x1c, 0xc0, 0x77, 0x00, 0xa8,
+0xdd, 0x08, 0x53, 0x8f, 0xc6, 0x8d, 0x82, 0x50,
+0x05, 0x14, 0x52, 0xe9, 0xd5, 0x91, 0x04, 0x1b,
+0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xfc,
+0x29, 0x12, 0x0f, 0xff, 0x64, 0x80, 0xff, 0x04,
+0x63, 0x01, 0xdf, 0xf0, 0x50, 0xff, 0xd3, 0xfe,
+0x9f, 0xff, 0xfa, 0x13, 0x10, 0x53, 0x51, 0x4c,
+0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0x03, 0x01, 0x96, 0x60, 0x6d, 0x01, 0x0c, 0x60,
+0xc1, 0x82, 0x4e, 0x61, 0x5f, 0x04, 0xd0, 0x63,
+0x22, 0x8e, 0xc2, 0x74, 0x58, 0x70, 0x72, 0x73,
+0xdb, 0x8e, 0xee, 0x63, 0x27, 0x05, 0xb0, 0x61,
+0x6c, 0x84, 0x3e, 0x60, 0xb4, 0x83, 0x6e, 0x60,
+0x94, 0x03, 0x3c, 0x60, 0x8a, 0x85, 0x8a, 0x75,
+0x7c, 0x66, 0x40, 0x30, 0x5f, 0xf6, 0x18, 0xed,
+0xc3, 0x14, 0x96, 0xdc, 0xbd, 0x9f, 0x77, 0x77,
+0x4f, 0xff, 0xa3, 0xff, 0xfe, 0xbf, 0xfb, 0xbf,
+0xfd, 0x3e, 0xef, 0xaf, 0x77, 0xa0, 0xc7, 0xf2,
+0x68, 0xc7, 0xe3, 0x64, 0xca, 0x15, 0x70, 0xd0,
+0xaa, 0x8c, 0xc2, 0x67, 0x20, 0x60, 0xd0, 0x4e,
+0xfa, 0x60, 0xcf, 0xdd, 0x1f, 0xc0, 0xc2, 0x1e,
+0x09, 0x7c, 0xc0, 0x49, 0x03, 0x48, 0xc0, 0x80,
+0x00, 0x6c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82,
+0xc6, 0xb8, 0x25, 0x35, 0x4c, 0xfb, 0x22, 0xb1,
+0x0a, 0x04, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xdd,
+0xe7, 0xa3, 0x92, 0x42, 0x4d, 0x84, 0x4b, 0x07,
+0x15, 0x92, 0xe5, 0xd6, 0x90, 0x83, 0xec, 0xb2,
+0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x26, 0x03, 0xf0, 0xc1, 0x05, 0x02, 0x34,
+0xc1, 0xc2, 0x04, 0xf0, 0xc3, 0x31, 0x0a, 0x6c,
+0xc7, 0x40, 0x1f, 0xc8, 0xef, 0x05, 0xf1, 0xa0,
+0xed, 0xe4, 0x20, 0x30, 0xc7, 0x49, 0x0c, 0x84,
+0xc3, 0x44, 0x09, 0x88, 0xc1, 0x98, 0x07, 0xe0,
+0xc1, 0x47, 0x07, 0x8c, 0xc1, 0x2c, 0x0c, 0xe0,
+0xd7, 0x10, 0xa3, 0x13, 0x88, 0x4b, 0x50, 0xb9,
+0xda, 0xc3, 0xef, 0x2f, 0xb0, 0xf1, 0x9b, 0x5b,
+0xe6, 0xfd, 0x7d, 0x5f, 0xff, 0xff, 0xff, 0xbf,
+0xfb, 0x9f, 0x5f, 0xd1, 0xfa, 0x73, 0xfd, 0x37,
+0x63, 0xfa, 0x14, 0x63, 0xe1, 0x36, 0x63, 0xd9,
+0xb4, 0x64, 0xc2, 0xc2, 0x67, 0xcd, 0x58, 0x61,
+0x20, 0x10, 0x6a, 0x67, 0xaa, 0xfe, 0xea, 0x67,
+0x74, 0x10, 0x1e, 0x60, 0xfa, 0x84, 0xd4, 0x60,
+0x17, 0x01, 0xc2, 0x60, 0xff, 0xfb, 0x90, 0xc4,
+0xff, 0x83, 0xc9, 0xb8, 0x29, 0x12, 0x0f, 0xff,
+0x64, 0x80, 0xfd, 0x84, 0x63, 0x01, 0xdf, 0xf0,
+0x50, 0x44, 0x80, 0x14, 0x6f, 0x43, 0x79, 0xca,
+0x5e, 0xc6, 0xc7, 0x22, 0x03, 0x8a, 0xa9, 0x74,
+0xf2, 0xc8, 0x81, 0x06, 0xdb, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31,
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x00, 0x01, 0xd4, 0x48, 0xc0,
+0x00, 0x01, 0x60, 0x17, 0x8c, 0x06, 0xa0, 0x0a,
+0x0c, 0x0c, 0x30, 0x1d, 0xcc, 0x16, 0xa0, 0x43,
+0x8c, 0x34, 0xf0, 0xd6, 0xcd, 0x5c, 0x66, 0x7a,
+0x4d, 0x54, 0x10, 0xda, 0x4c, 0x35, 0x00, 0x53,
+0x8e, 0xe3, 0x03, 0x35, 0x4b, 0x64, 0xcf, 0xcc,
+0xe3, 0x38, 0xdb, 0xcc, 0x7e, 0x6d, 0x00, 0x00,
+0x19, 0x5b, 0xb1, 0x0d, 0xca, 0x25, 0x96, 0xec,
+0x76, 0xbe, 0x9f, 0xfc, 0x62, 0x62, 0xda, 0x1f,
+0x51, 0xb2, 0x66, 0x34, 0x90, 0x86, 0x31, 0x17,
+0xe6, 0x3c, 0xa6, 0xc6, 0x63, 0x4b, 0xe6, 0x0e,
+0x98, 0xe9, 0x06, 0x64, 0x77, 0x0c, 0xc6, 0x61,
+0xa8, 0xe5, 0x06, 0x0c, 0x70, 0x44, 0xe6, 0x00,
+0x58, 0x19, 0x81, 0xc0, 0x7c, 0x9b, 0x5c, 0xa4,
+0x70, 0x46, 0x29, 0xab, 0x06, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xca, 0x3c, 0x29, 0x10, 0x0f,
+0xff, 0x84, 0x80, 0xfb, 0x84, 0x63, 0x01, 0xdf,
+0xf0, 0x50, 0x61, 0x84, 0x65, 0x22, 0xf3, 0x4e,
+0xe6, 0x59, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8,
+0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x81, 0xc8,
+0x00, 0x00, 0x01, 0x80, 0x95, 0x30, 0x25, 0xc0,
+0x33, 0x30, 0x42, 0x00, 0x94, 0x30, 0x79, 0xc1,
+0x4d, 0x31, 0x17, 0x84, 0x14, 0x37, 0x27, 0x5f,
+0x4e, 0x36, 0xfa, 0x84, 0x2a, 0x31, 0x17, 0xc1,
+0xa7, 0x30, 0x79, 0x81, 0x52, 0x30, 0x37, 0x81,
+0x20, 0x03, 0x52, 0xc6, 0x40, 0xd2, 0x1e, 0xa0,
+0x32, 0x82, 0x58, 0x0c, 0x0a, 0x09, 0x0f, 0x40,
+0x72, 0xc8, 0x01, 0x36, 0x5f, 0x34, 0x7f, 0xeb,
+0xff, 0xd1, 0xcd, 0xeb, 0xce, 0xdb, 0xf8, 0x25,
+0x73, 0xcd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xfd, 0x26, 0x33, 0x10, 0x66, 0x2f, 0x98, 0x06,
+0x38, 0x27, 0x66, 0x5b, 0xcc, 0xc6, 0x0d, 0x60,
+0xeb, 0xe6, 0x5d, 0x0f, 0x20, 0xe6, 0x5a, 0x60,
+0xe7, 0xe6, 0x0b, 0x48, 0x46, 0x05, 0x40, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0xc8, 0xec, 0x53,
+0x1d, 0x4f, 0xf0, 0x47, 0x20, 0xc9, 0x84, 0xa3,
+0x41, 0xdf, 0xf0, 0x55, 0x35, 0xc5, 0x81, 0x07,
+0x36, 0xd1, 0x24, 0xe1, 0x2b, 0x43, 0x57, 0x8b,
+0x03, 0x88, 0xaa, 0x49, 0xe5, 0x9e, 0xc0, 0x23,
+0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0x33, 0xc0, 0x30, 0x30, 0x5d, 0x00, 0x7a, 0x30,
+0x9b, 0x41, 0x47, 0x31, 0x14, 0x82, 0xbe, 0x32,
+0x71, 0x48, 0x5b, 0x3f, 0xcb, 0xbf, 0x1f, 0x3f,
+0x6a, 0x48, 0x8d, 0x32, 0x6f, 0x83, 0x8a, 0x31,
+0x12, 0x42, 0xf5, 0x30, 0x7f, 0xc2, 0x99, 0x31,
+0x76, 0x28, 0xc3, 0x14, 0x14, 0x5b, 0x30, 0xc3,
+0x17, 0x13, 0x02, 0x80, 0x36, 0x04, 0x80, 0x4a,
+0x54, 0x30, 0x37, 0x02, 0x1c, 0x9f, 0xbd, 0xdd,
+0xef, 0xbd, 0xff, 0xb9, 0xff, 0x7d, 0x7a, 0xb2,
+0xd3, 0xfb, 0xfa, 0x5c, 0x1e, 0xe6, 0x0d, 0xd5,
+0xd8, 0x79, 0xbe, 0x86, 0xd3, 0xdd, 0xd2, 0x8f,
+0xf4, 0x6d, 0x65, 0xb9, 0x45, 0x76, 0xbb, 0x47,
+0xec, 0x6a, 0x3e, 0x1b, 0xa4, 0xc6, 0x32, 0x08,
+0xc5, 0x83, 0x04, 0xc6, 0x74, 0xf0, 0xca, 0x49,
+0xb4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca,
+0x8c, 0x7b, 0x18, 0xef, 0xd4, 0x49, 0x40, 0xc9,
+0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x54, 0xc1, 0x87,
+0x1d, 0xc8, 0xca, 0xaa, 0xe6, 0x50, 0xca, 0x5b,
+0x1d, 0x48, 0xc1, 0x3e, 0x08, 0xec, 0xc0, 0x08,
+0x03, 0x80, 0xc0, 0x8a, 0x00, 0x08, 0xdb, 0xe3,
+0xc3, 0x85, 0x28, 0xcd, 0x60, 0x27, 0x12, 0x25,
+0x2a, 0x17, 0x9a, 0x8b, 0x32, 0xc9, 0x88, 0x29,
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x36, 0x00, 0x43, 0x30, 0x5f, 0x40,
+0x63, 0x30, 0x9d, 0x01, 0x24, 0x31, 0x17, 0x42,
+0x81, 0x32, 0x76, 0x87, 0xa2, 0x3f, 0xf0, 0xf9,
+0x9c, 0x3f, 0x8e, 0x07, 0xda, 0x32, 0x74, 0x43,
+0x57, 0x31, 0x12, 0x02, 0xe4, 0x30, 0x7c, 0x82,
+0x98, 0x30, 0x58, 0x42, 0x91, 0x30, 0x49, 0x84,
+0x66, 0x30, 0x2b, 0x01, 0x72, 0x30, 0x08, 0xc0,
+0x39, 0x06, 0x00, 0x10, 0x03, 0xbc, 0x26, 0x82,
+0x4e, 0x3d, 0xca, 0x07, 0xda, 0xa6, 0xe7, 0x6a,
+0xea, 0x07, 0xbb, 0xc6, 0x75, 0x31, 0x3d, 0x16,
+0xbb, 0xdb, 0xff, 0xfd, 0x3f, 0x99, 0xdf, 0x2d,
+0xf6, 0x3f, 0xd2, 0xad, 0xfd, 0x33, 0xaf, 0x8e,
+0xbb, 0x51, 0x8c, 0x04, 0x19, 0x8a, 0x66, 0x11,
+0x8b, 0x89, 0xf9, 0x92, 0x73, 0x91, 0x82, 0xb8,
+0x3c, 0x19, 0x93, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xcc, 0xb8, 0x7b, 0x0c, 0x0f, 0xf8, 0x49,
+0x40, 0xce, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
+0x53, 0xd0, 0xa9, 0x92, 0xbc, 0x3b, 0x29, 0x82,
+0x26, 0x12, 0x11, 0x80, 0x4a, 0x07, 0x59, 0x81,
+0x22, 0x00, 0x89, 0xb8, 0x86, 0x67, 0x0f, 0x48,
+0x1a, 0xcc, 0x40, 0x24, 0x49, 0x54, 0x4f, 0x6c,
+0x9f, 0x00, 0x8d, 0x7f, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa6,
+0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x00, 0x00, 0xd4, 0x49, 0x00,
+0x00, 0x03, 0x01, 0x24, 0x01, 0x03, 0x02, 0x28,
+0x00, 0xa3, 0x03, 0xbc, 0x05, 0x73, 0x06, 0xd0,
+0x0d, 0x63, 0x0f, 0xbc, 0x2b, 0x53, 0x67, 0x39,
+0x4c, 0xf3, 0x64, 0xbc, 0x2c, 0xd3, 0x0f, 0xa0,
+0x13, 0x23, 0xd3, 0xc4, 0x4d, 0x66, 0xf9, 0x33,
+0xa3, 0xe0, 0xcb, 0x3b, 0x73, 0x16, 0xa1, 0x41,
+0x00, 0x46, 0x47, 0x00, 0x4a, 0xea, 0x46, 0x27,
+0xef, 0x76, 0xbe, 0x9f, 0xe8, 0xea, 0x80, 0xd9,
+0xfc, 0xd1, 0x76, 0xff, 0xa6, 0xef, 0x83, 0x46,
+0x2f, 0x90, 0x06, 0x27, 0x18, 0x66, 0x29, 0xa8,
+0x46, 0x40, 0x4e, 0xe6, 0x09, 0x98, 0xf2, 0x46,
+0x44, 0xd7, 0x50, 0x46, 0x42, 0xb8, 0xee, 0x86,
+0x07, 0x20, 0x49, 0x66, 0x01, 0xd0, 0x1e, 0x46,
+0x04, 0xb0, 0x03, 0xc6, 0xe7, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xcc, 0x14, 0x3d, 0x0c, 0x0f,
+0xfd, 0xa4, 0xc1, 0x02, 0x04, 0xa3, 0x41, 0xdf,
+0xf0, 0x50, 0x12, 0x1c, 0x40, 0xfe, 0x6b, 0x40,
+0xd8, 0xb1, 0x29, 0x50, 0xbd, 0xd2, 0x60, 0x7d,
+0x9f, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x32, 0x80,
+0x57, 0x30, 0x55, 0xc0, 0x21, 0x30, 0x8c, 0x00,
+0xbe, 0x30, 0xf8, 0x41, 0xbd, 0x32, 0x30, 0x85,
+0x58, 0x3e, 0x33, 0x68, 0x36, 0x3d, 0xdb, 0x05,
+0x94, 0x32, 0x2c, 0xc2, 0x8d, 0x30, 0xee, 0x02,
+0x66, 0x30, 0x67, 0x02, 0x3e, 0x30, 0x42, 0xc2,
+0x43, 0x30, 0x32, 0x83, 0xe8, 0x33, 0x75, 0x20,
+0xc1, 0xe2, 0xf1, 0x00, 0x11, 0x60, 0xda, 0x44,
+0x07, 0x1b, 0x9c, 0xbf, 0xc5, 0x3a, 0x4d, 0xbe,
+0x2d, 0xde, 0xae, 0xa6, 0xa7, 0xf7, 0x7b, 0xbf,
+0xbb, 0xd5, 0xb4, 0xf3, 0x7f, 0xbe, 0xbf, 0xdf,
+0xfe, 0xfe, 0x87, 0x1d, 0x75, 0xfe, 0xa3, 0x16,
+0x88, 0x13, 0x12, 0x4c, 0x23, 0x12, 0x14, 0x53,
+0x1b, 0x67, 0xa3, 0x04, 0x18, 0x79, 0xf3, 0x1d,
+0xff, 0xad, 0xf3, 0x1d, 0x00, 0x78, 0x33, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x49, 0x8c, 0x55,
+0x1b, 0x4f, 0xf0, 0x47, 0x28, 0xd7, 0x04, 0x63,
+0x41, 0xdf, 0xf0, 0x50, 0x02, 0xd4, 0x25, 0x23,
+0x01, 0x44, 0x0f, 0xb3, 0x02, 0x74, 0x02, 0xd3,
+0x75, 0x06, 0x4e, 0x26, 0x68, 0x35, 0xb8, 0x50,
+0x68, 0x92, 0xab, 0x9e, 0xd9, 0x3d, 0x80, 0x8f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29,
+0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0x34, 0xc0, 0x64, 0x30, 0x57, 0x00, 0x00, 0x30,
+0x8d, 0x40, 0x9b, 0x30, 0xf9, 0x01, 0x7e, 0x32,
+0x33, 0xc4, 0x9f, 0x3e, 0x47, 0xa2, 0x9d, 0x3d,
+0xee, 0xc4, 0xe1, 0x32, 0x2e, 0x82, 0x5c, 0x30,
+0xed, 0x42, 0x55, 0x30, 0x64, 0xc2, 0x3d, 0x30,
+0x3d, 0x82, 0x44, 0x30, 0x2b, 0xc3, 0xed, 0x32,
+0xdd, 0x2c, 0xc1, 0x02, 0xe1, 0x50, 0x2a, 0xc0,
+0x34, 0xb8, 0x02, 0x59, 0x3f, 0x79, 0xed, 0x96,
+0x19, 0xe9, 0xfb, 0x79, 0x3f, 0xd7, 0xed, 0xff,
+0x4f, 0xff, 0xfb, 0x4a, 0xec, 0xfb, 0x7d, 0xcf,
+0xc9, 0x7e, 0x76, 0x8f, 0x93, 0xa0, 0xc5, 0x91,
+0xf8, 0xc4, 0x23, 0x0c, 0xc3, 0xd5, 0x10, 0xc5,
+0x69, 0xfc, 0xc0, 0xd7, 0x1e, 0xa0, 0xc6, 0x50,
+0xec, 0xa8, 0xc6, 0x1b, 0x1e, 0x30, 0xc0, 0x7e,
+0x09, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
+0x30, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x00,
+0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x64, 0xc0,
+0x64, 0x04, 0x10, 0xc0, 0xa2, 0x00, 0xe0, 0xdd,
+0xa0, 0x83, 0x8a, 0x15, 0x4d, 0x6c, 0x0d, 0x1a,
+0x27, 0x2a, 0xd7, 0xba, 0x4d, 0x6c, 0xb2, 0x62,
+0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x36, 0x80, 0x71, 0x08, 0x0b, 0x08,
+0xc2, 0x38, 0x01, 0xd8, 0xc3, 0xeb, 0x04, 0xf4,
+0xc8, 0xd8, 0x0f, 0x60, 0xf9, 0x5f, 0x72, 0x98,
+0xf7, 0xf8, 0x10, 0x88, 0xc8, 0xbf, 0x08, 0xa4,
+0xc3, 0xb0, 0x09, 0x08, 0xc1, 0x86, 0x08, 0xe0,
+0xc0, 0xe1, 0x09, 0x1c, 0xc0, 0x92, 0x0f, 0xc8,
+0xc8, 0xd4, 0xc3, 0x01, 0x8b, 0xc6, 0x00, 0x8b,
+0x2d, 0xb8, 0x40, 0x72, 0xf9, 0xcb, 0xfc, 0x53,
+0xa4, 0xfe, 0x12, 0xf5, 0x75, 0x31, 0xbf, 0x14,
+0xfb, 0xbf, 0xff, 0xde, 0xdf, 0xef, 0xfe, 0x97,
+0xfa, 0x91, 0xbf, 0xa7, 0x5d, 0xee, 0xea, 0x31,
+0x50, 0x7f, 0x30, 0xf4, 0xc2, 0x30, 0xc1, 0x47,
+0x31, 0x06, 0x82, 0x30, 0x28, 0x87, 0xb3, 0x31,
+0x43, 0xfb, 0x65, 0x31, 0x37, 0x87, 0x97, 0x30,
+0x10, 0xc2, 0x5e, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xca, 0xd8, 0x2b, 0x0e, 0x0f, 0xff, 0x84,
+0x80, 0xcf, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
+0x30, 0x1e, 0x41, 0x0d, 0x30, 0x2a, 0x40, 0x45,
+0x07, 0x77, 0x4e, 0x2e, 0x3c, 0x35, 0xb8, 0x10,
+0x78, 0x9a, 0xab, 0x9f, 0x29, 0x3d, 0x80, 0x8f,
+0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a,
+0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x30, 0x38, 0x40, 0x7e, 0x30,
+0x59, 0x00, 0x19, 0x30, 0x8f, 0x40, 0x4d, 0x30,
+0xfb, 0x00, 0xf4, 0x32, 0x38, 0x43, 0x05, 0x3e,
+0x63, 0x96, 0x37, 0x3e, 0x09, 0xc3, 0x59, 0x32,
+0x30, 0x81, 0xf0, 0x30, 0xea, 0x42, 0x2f, 0x30,
+0x5e, 0x42, 0x35, 0x33, 0x2a, 0x46, 0x31, 0xcf,
+0xf5, 0x30, 0xbd, 0x4d, 0x04, 0x06, 0x03, 0xa0,
+0x2a, 0xc8, 0x6e, 0x71, 0xc9, 0x64, 0xfd, 0xee,
+0xfe, 0xff, 0xff, 0xf2, 0xe7, 0xff, 0xdf, 0xff,
+0x57, 0xfc, 0x1e, 0xfa, 0x75, 0xfb, 0x3f, 0xff,
+0x76, 0x8f, 0xf4, 0x7d, 0xbf, 0xde, 0xdd, 0x0e,
+0xf6, 0xe8, 0x4f, 0x93, 0xa0, 0x12, 0x28, 0x0c,
+0x3c, 0x80, 0xc1, 0x0f, 0x40, 0xae, 0x40, 0x0f,
+0x33, 0x00, 0x64, 0x30, 0xa3, 0x05, 0xa1, 0x7e,
+0x83, 0x05, 0x64, 0x2f, 0xe2, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xca, 0xc0, 0x2d, 0x0e, 0x0f,
+0xff, 0x84, 0x81, 0x02, 0x84, 0xa3, 0x41, 0xdf,
+0xf0, 0x50, 0x00, 0x39, 0x4c, 0x02, 0x60, 0x17,
+0x0c, 0x03, 0x40, 0x03, 0x8a, 0x51, 0x81, 0xde,
+0x8d, 0x71, 0x46, 0x28, 0x3a, 0xf9, 0x91, 0x6f,
+0x6b, 0xbd, 0xde, 0xa4, 0xc4, 0x14, 0xd4, 0x53,
+0x32, 0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x3a, 0x00,
+0x8b, 0x30, 0x5a, 0x40, 0x32, 0x30, 0x8f, 0x80,
+0x1e, 0x30, 0xfc, 0x40, 0xa7, 0x32, 0x39, 0x02,
+0x1a, 0x3e, 0x6b, 0xcf, 0x0a, 0x3e, 0x11, 0x82,
+0x7c, 0x32, 0x30, 0xc1, 0xb9, 0x30, 0xe8, 0x82,
+0x1a, 0x30, 0x5b, 0x02, 0x2e, 0x30, 0x2c, 0xc2,
+0x47, 0x30, 0x14, 0x03, 0xf6, 0x30, 0xa5, 0x38,
+0x42, 0x31, 0x20, 0x02, 0x2d, 0xb7, 0x42, 0x0b,
+0x97, 0xce, 0x5f, 0x30, 0xc9, 0x57, 0xf9, 0x5f,
+0xa3, 0x90, 0xba, 0x9d, 0x5f, 0x6f, 0xf4, 0x68,
+0xd9, 0xfe, 0x8b, 0x4b, 0x6c, 0xd9, 0xa7, 0xec,
+0x75, 0x3e, 0xee, 0x96, 0x7b, 0x28, 0x31, 0x30,
+0x7b, 0x30, 0xbc, 0xc2, 0x30, 0x61, 0x47, 0x30,
+0x36, 0x84, 0x30, 0x0a, 0x07, 0xbb, 0x30, 0x85,
+0xfb, 0xa9, 0x30, 0x7d, 0x87, 0xa3, 0x30, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x38, 0x7b,
+0x0e, 0x0f, 0xf4, 0x49, 0x40, 0xc7, 0x04, 0x25,
+0x25, 0xbf, 0xe8, 0x56, 0x0d, 0x82, 0x66, 0x30,
+0x26, 0xc1, 0x1b, 0x30, 0x2c, 0xc0, 0x59, 0x01,
+0x79, 0x0e, 0x32, 0x06, 0x0e, 0xb9, 0x13, 0x13,
+0x55, 0xa9, 0xf2, 0x93, 0xd8, 0x08, 0xfb, 0x3f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99,
+0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
+0x3b, 0xc0, 0x96, 0x30, 0x5b, 0x00, 0x4d, 0x0e,
+0x12, 0x08, 0xc3, 0xf0, 0x01, 0x30, 0xc8, 0xe7,
+0x04, 0x24, 0xf9, 0xbe, 0x19, 0x74, 0xf8, 0x55,
+0x06, 0x0c, 0xc8, 0xc0, 0x05, 0xf0, 0xc3, 0x99,
+0x08, 0x1c, 0xc1, 0x5f, 0x08, 0xa4, 0xc0, 0x98,
+0x09, 0x10, 0xc0, 0x2b, 0x0f, 0xe4, 0x43, 0x4f,
+0x20, 0x18, 0x16, 0x00, 0xaa, 0x38, 0xdd, 0xe3,
+0x92, 0xca, 0x3b, 0xcf, 0x6d, 0x27, 0x7d, 0x2d,
+0xd1, 0x4f, 0x6d, 0xff, 0xf7, 0x23, 0xfa, 0xaa,
+0xe9, 0xff, 0x4d, 0x88, 0xaf, 0xb7, 0x47, 0xdd,
+0xa3, 0xed, 0x4d, 0x1f, 0x26, 0x60, 0x25, 0x80,
+0xf0, 0x60, 0x13, 0x01, 0x82, 0x60, 0x04, 0x82,
+0x8c, 0x58, 0x0a, 0x1c, 0xc0, 0x08, 0x1e, 0xf0,
+0xc0, 0x27, 0xee, 0xc0, 0xc1, 0x21, 0xe9, 0x0c,
+0x1d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
+0x20, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x80, 0xfe,
+0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0xc9, 0xac,
+0xc2, 0xb0, 0x48, 0x0c, 0x2e, 0x01, 0x88, 0xc3,
+0xd4, 0x03, 0xc5, 0x88, 0xc0, 0xa5, 0xc4, 0xa1,
+0x39, 0x46, 0x1e, 0xf9, 0x05, 0xba, 0xec, 0xb2,
+0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93,
+0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x3d, 0x00, 0xa1, 0x30, 0x5c, 0x40,
+0x62, 0x30, 0x90, 0x00, 0x2f, 0x30, 0xfc, 0x40,
+0x0c, 0x32, 0x39, 0x00, 0x7b, 0x3e, 0x6f, 0xc6,
+0xe1, 0x3e, 0x14, 0x80, 0x38, 0x32, 0x2e, 0xc1,
+0x3d, 0x30, 0xe3, 0x81, 0xf0, 0x30, 0x53, 0x82,
+0x22, 0x30, 0x1f, 0xc2, 0x45, 0x04, 0x07, 0xf0,
+0x60, 0x1a, 0x70, 0xc0, 0xc4, 0x94, 0x08, 0xa3,
+0x6f, 0x04, 0x96, 0x5f, 0x45, 0x7d, 0xcc, 0xa0,
+0x7f, 0xa3, 0xa6, 0x8e, 0xcb, 0xbf, 0xef, 0x4f,
+0xf5, 0x54, 0x9d, 0x1f, 0xe8, 0x8a, 0x16, 0xdb,
+0xf2, 0x3f, 0x7e, 0x9f, 0xd1, 0x4f, 0xc8, 0x18,
+0x8c, 0x3b, 0x98, 0x42, 0x60, 0x03, 0x14, 0x73,
+0x03, 0x28, 0x63, 0x01, 0x4c, 0x7b, 0xd3, 0x09,
+0x23, 0xba, 0x93, 0x09, 0x34, 0x7a, 0x53, 0x02,
+0xb0, 0x26, 0xe3, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xca, 0xbc, 0x2b, 0x0e, 0x0f, 0xff, 0x84,
+0x80, 0xda, 0x84, 0xe3, 0x41, 0xff, 0x6c, 0x94,
+0x02, 0xec, 0x12, 0x73, 0x02, 0xf4, 0x06, 0xd3,
+0x7b, 0x07, 0x0e, 0x32, 0x13, 0x12, 0xb9, 0x94,
+0x13, 0x15, 0xad, 0xec, 0x91, 0xd8, 0x04, 0xfd,
+0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14,
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x30, 0x3e, 0xc0, 0xac, 0x30,
+0x5c, 0x80, 0x77, 0x30, 0x90, 0xc0, 0x5a, 0x30,
+0xfc, 0x00, 0x77, 0x32, 0x38, 0xc1, 0xb0, 0x3e,
+0x6b, 0x0f, 0x6e, 0x3e, 0x10, 0x41, 0x32, 0x32,
+0x2d, 0x00, 0xfa, 0x30, 0xe1, 0x41, 0xd9, 0x30,
+0x50, 0x42, 0x1d, 0x30, 0x18, 0x82, 0x42, 0x30,
+0x03, 0x83, 0xf7, 0x30, 0xf5, 0x3c, 0x2e, 0x30,
+0x20, 0x02, 0xa8, 0xf3, 0xd7, 0x24, 0x96, 0x51,
+0xde, 0x37, 0x97, 0x09, 0x79, 0x76, 0xfa, 0x78,
+0x9e, 0xfa, 0x35, 0x7f, 0xfd, 0x3a, 0x7e, 0xbf,
+0xa6, 0x2e, 0x8d, 0x9f, 0x47, 0xef, 0xa3, 0xde,
+0xde, 0xcf, 0x27, 0x49, 0x10, 0x61, 0xb1, 0xc1,
+0x80, 0x8c, 0xa4, 0x8b, 0x63, 0x06, 0xdc, 0xcc,
+0x04, 0x81, 0x23, 0x0c, 0x23, 0xd8, 0xd7, 0x0c,
+0x23, 0x61, 0x1f, 0x8c, 0x07, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xca, 0xc4, 0x2b, 0x0e, 0x0f,
+0xff, 0x84, 0x80, 0xfe, 0x84, 0xa3, 0x41, 0xdf,
+0xf0, 0x50, 0x90, 0x59, 0xcc, 0x06, 0xc0, 0x29,
+0x8c, 0x06, 0x60, 0x0e, 0x8e, 0x1c, 0x34, 0xe6,
+0x83, 0x84, 0xb0, 0x0a, 0x05, 0xdc, 0xc9, 0x1d,
+0x80, 0x7c, 0xe7, 0xfd, 0x29, 0x88, 0x29, 0xa8,
+0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x40, 0x00,
+0xb7, 0x30, 0x5d, 0x40, 0x8a, 0x30, 0x90, 0x80,
+0x83, 0x30, 0xfb, 0xc0, 0xca, 0x32, 0x37, 0x02,
+0xa9, 0x3e, 0x62, 0xd6, 0x8f, 0x3e, 0x07, 0x82,
+0x39, 0x32, 0x2a, 0xc0, 0xaf, 0x30, 0xde, 0x01,
+0xc0, 0x30, 0x4c, 0x02, 0x14, 0x30, 0x11, 0x42,
+0x3f, 0x30, 0x0e, 0xc3, 0xf4, 0x31, 0xcd, 0x30,
+0x00, 0x31, 0x1d, 0x02, 0x2d, 0x97, 0xa2, 0x4b,
+0x2f, 0xa2, 0xbe, 0xec, 0xa3, 0xfd, 0x0c, 0xf6,
+0xfa, 0xb4, 0x5a, 0xbf, 0x67, 0xff, 0xef, 0xd3,
+0xfe, 0x9f, 0xf6, 0x7b, 0xba, 0x5f, 0xfe, 0x8f,
+0x21, 0x49, 0x87, 0xc3, 0x89, 0x82, 0x25, 0xe0,
+0x15, 0x45, 0x31, 0x02, 0x82, 0x30, 0x31, 0x47,
+0xb5, 0x31, 0x4d, 0x3b, 0x63, 0x31, 0x48, 0x47,
+0x9f, 0x30, 0x43, 0x02, 0x70, 0x30, 0x36, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x14, 0x2b,
+0x0e, 0x0f, 0xff, 0x84, 0x80, 0xcf, 0x04, 0x64,
+0x55, 0xcf, 0xec, 0x56, 0x41, 0x33, 0x30, 0x31,
+0x40, 0x7f, 0x37, 0xc0, 0xd8, 0xe3, 0x24, 0x53,
+0x5b, 0x80, 0xc8, 0x89, 0x8a, 0xbd, 0xec, 0x91,
+0xce, 0x02, 0x7e, 0xcf, 0xff, 0xd7, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x69,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
+0x41, 0x40, 0xc0, 0x30, 0x5d, 0x80, 0x9f, 0x30,
+0x90, 0x40, 0xa6, 0x30, 0xfa, 0x81, 0x17, 0x32,
+0x34, 0xc3, 0x84, 0x3e, 0x56, 0x1c, 0xf8, 0x3d,
+0xfb, 0x43, 0x1c, 0x32, 0x27, 0x00, 0x5a, 0x30,
+0xda, 0xc1, 0xa9, 0x30, 0x48, 0x42, 0x0d, 0x30,
+0x08, 0x82, 0x3a, 0x30, 0x17, 0x83, 0xf1, 0x32,
+0x75, 0x34, 0xc0, 0xa2, 0xe1, 0x40, 0x2a, 0xda,
+0x7c, 0x66, 0xa7, 0x28, 0xef, 0x65, 0x7c, 0x4a,
+0x73, 0xcf, 0xfa, 0xba, 0xed, 0xfb, 0x3e, 0xff,
+0xfa, 0x35, 0xf7, 0x37, 0xfb, 0xbf, 0xa1, 0xdf,
+0x4e, 0xee, 0x85, 0xbd, 0x7b, 0xfa, 0xcc, 0x39,
+0x1b, 0x8c, 0x06, 0x2e, 0xcc, 0x0c, 0x50, 0x8c,
+0x57, 0xa0, 0x4c, 0x0f, 0x41, 0xeb, 0x0c, 0x67,
+0x5e, 0xc9, 0x8c, 0x65, 0x81, 0xe6, 0x0c, 0x13,
+0x90, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xca,
+0x94, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x03,
+0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x9c, 0xcc,
+0x0e, 0x60, 0x4e, 0x0c, 0x0c, 0x80, 0x21, 0x8d,
+0xf2, 0x41, 0x38, 0xb1, 0x70, 0xd6, 0xc0, 0xa1,
+0xe2, 0x5a, 0xac, 0x7b, 0xe4, 0x13, 0xe1, 0x89,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0x30, 0x42, 0x80, 0xcb, 0x30, 0x5e, 0x40,
+0xb0, 0x30, 0x90, 0x00, 0xc9, 0x30, 0xf9, 0x41,
+0x5a, 0x32, 0x32, 0x04, 0x4f, 0x3e, 0x45, 0xe2,
+0xe9, 0x3d, 0xeb, 0x03, 0xed, 0x12, 0x44, 0x78,
+0xc3, 0x5c, 0x06, 0x38, 0xc1, 0x10, 0x08, 0x08,
+0x2a, 0x11, 0xb9, 0x80, 0xfe, 0x1f, 0x51, 0x98,
+0xe9, 0x46, 0x0a, 0x17, 0x88, 0xc0, 0x8b, 0x25,
+0xf0, 0x99, 0x9f, 0xa2, 0xbe, 0xe4, 0x4a, 0x1e,
+0xf2, 0x4c, 0xd3, 0x6f, 0x0e, 0x6d, 0xeb, 0xf6,
+0xff, 0xa3, 0xb3, 0xff, 0xda, 0x9a, 0xd9, 0xb3,
+0xfb, 0xfa, 0x7f, 0x3f, 0x6f, 0xc8, 0x18, 0x68,
+0x36, 0x81, 0x4b, 0x83, 0x06, 0xd4, 0x13, 0x1b,
+0x27, 0xc3, 0x04, 0x8c, 0x7a, 0x33, 0x1e, 0x7b,
+0xad, 0xb3, 0x1d, 0xec, 0x79, 0x13, 0x05, 0x80,
+0x27, 0x23, 0x03, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xca, 0xe8, 0x2d, 0x0e, 0x0f, 0xff, 0x84,
+0x80, 0xd0, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
+0xd4, 0x13, 0xd3, 0x03, 0x2c, 0x08, 0xf3, 0x7c,
+0x13, 0x0e, 0x2e, 0x71, 0x35, 0xa8, 0x4c, 0x68,
+0x90, 0xab, 0xde, 0x49, 0x1c, 0xe0, 0x27, 0x5f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 0xa8, 0xa6,
+0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x30, 0x43, 0xc0, 0xd4, 0x30,
+0x5e, 0x00, 0xc3, 0x30, 0x8f, 0xc0, 0xe8, 0x30,
+0xf8, 0x01, 0x9b, 0x32, 0x2e, 0xc5, 0x0c, 0x3e,
+0x30, 0xa8, 0x7c, 0x3d, 0xd6, 0xc4, 0xac, 0x32,
+0x1f, 0x00, 0x63, 0x30, 0xd3, 0xc1, 0x75, 0x30,
+0x3f, 0xc1, 0xfb, 0x30, 0x03, 0x42, 0x32, 0x30,
+0x27, 0x03, 0xe5, 0x33, 0xb5, 0x24, 0xc2, 0x22,
+0xe1, 0x00, 0x15, 0x60, 0x9e, 0x99, 0xab, 0xd4,
+0x77, 0x9e, 0x9a, 0xc3, 0x5e, 0xbe, 0x8b, 0x38,
+0x4e, 0xe4, 0xfa, 0x7d, 0x3f, 0xd3, 0xfd, 0x65,
+0x17, 0xfc, 0xae, 0xdd, 0xba, 0x3f, 0xd1, 0xe6,
+0xc4, 0xe9, 0xac, 0x86, 0x01, 0x38, 0x0b, 0x02,
+0x20, 0x27, 0x4c, 0x02, 0x00, 0x45, 0x0c, 0x06,
+0xd0, 0x8a, 0x4c, 0x12, 0x01, 0xa9, 0x8c, 0x7a,
+0x5c, 0xd6, 0x0d, 0xdf, 0x9a, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xca, 0xa4, 0x2b, 0x0e, 0x0f,
+0xff, 0x84, 0x81, 0x01, 0x04, 0xa3, 0x41, 0xdf,
+0xf0, 0x50, 0x58, 0xc5, 0x54, 0x88, 0x4c, 0x37,
+0x84, 0x58, 0xc2, 0xc0, 0x20, 0x0c, 0x35, 0xc1,
+0x24, 0xc3, 0xb8, 0x1c, 0x0e, 0x68, 0x48, 0x68,
+0xed, 0x6e, 0x40, 0xf3, 0x93, 0xf5, 0xce, 0x7f,
+0xd2, 0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72,
+0x6e, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x44, 0x80,
+0xdd, 0x30, 0x5e, 0x40, 0xd2, 0x30, 0x8e, 0x81,
+0x09, 0x30, 0xf6, 0x41, 0xd6, 0x32, 0x2a, 0x85,
+0xc1, 0x3e, 0x18, 0x6d, 0xc7, 0x3d, 0xbe, 0x05,
+0x63, 0x32, 0x1a, 0x40, 0xb6, 0x30, 0xcf, 0x81,
+0x58, 0x30, 0x3b, 0x01, 0xee, 0x30, 0x0c, 0x82,
+0x2d, 0x30, 0x2e, 0xc3, 0xde, 0x30, 0x22, 0xc1,
+0x46, 0x30, 0x05, 0x80, 0x2f, 0x0b, 0x80, 0x08,
+0x0d, 0xd1, 0x64, 0x4d, 0x29, 0x94, 0x4f, 0xb6,
+0x8f, 0x38, 0x1d, 0xf6, 0xf4, 0xdb, 0xbd, 0x97,
+0xd9, 0xa3, 0xde, 0x8f, 0x56, 0xaa, 0xbf, 0xfc,
+0xd5, 0x9e, 0xcb, 0x32, 0x7e, 0x73, 0xa7, 0xb3,
+0xa1, 0xbf, 0x0e, 0x56, 0x60, 0x15, 0x00, 0xce,
+0x54, 0x02, 0xd0, 0xc0, 0x35, 0x04, 0xf4, 0xc0,
+0x92, 0x09, 0xd0, 0xc1, 0x77, 0x1e, 0x2c, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 0xf8, 0x2b,
+0x0e, 0x0f, 0xff, 0x84, 0x80, 0xe4, 0x84, 0xe3,
+0x95, 0xff, 0x6c, 0x94, 0xc9, 0xc4, 0xe8, 0x3c,
+0xe6, 0x4d, 0xde, 0x4c, 0x6b, 0x89, 0xc0, 0xc4,
+0x3c, 0x51, 0x4c, 0x34, 0x42, 0x7c, 0xc3, 0xe0,
+0x18, 0x0c, 0x44, 0xc2, 0x5c, 0xec, 0xc8, 0x45,
+0x92, 0x15, 0x1b, 0xc9, 0x17, 0x96, 0x54, 0xce,
+0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xfa, 0xd3, 0x10, 0x53, 0x51,
+0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0x50, 0x41, 0x0a, 0x30, 0x6c, 0x81, 0x07, 0x30,
+0xa2, 0xc1, 0x50, 0x31, 0x17, 0x02, 0x5f, 0x32,
+0x73, 0x47, 0x54, 0x3f, 0xec, 0xb9, 0xe4, 0x3f,
+0x87, 0x46, 0xea, 0x32, 0x5f, 0x81, 0x29, 0x30,
+0xe8, 0x41, 0x6d, 0x30, 0x3e, 0xc2, 0x2d, 0x30,
+0x18, 0x42, 0x76, 0x30, 0x3d, 0x84, 0x63, 0x30,
+0x2d, 0x01, 0x75, 0x30, 0x09, 0x40, 0x38, 0x06,
+0x00, 0x12, 0x07, 0x61, 0x35, 0x27, 0x1e, 0x29,
+0x1e, 0x7d, 0xf9, 0xd5, 0xa0, 0xdf, 0xd4, 0x8b,
+0x3f, 0xda, 0xea, 0xfe, 0xb4, 0x9a, 0xdf, 0xdf,
+0x5b, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x55, 0xe8,
+0xdf, 0xfe, 0xff, 0x2f, 0x93, 0xff, 0x4b, 0x7f,
+0xed, 0x4f, 0x1b, 0xd0, 0xb3, 0xee, 0xaa, 0xfd,
+0x06, 0x01, 0x38, 0x0c, 0x42, 0x10, 0x2c, 0xcc,
+0x04, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
+0xdc, 0x3b, 0x0e, 0x0f, 0xfd, 0xa4, 0xc1, 0x0d,
+0x85, 0x23, 0x41, 0xff, 0x6c, 0x90, 0x00, 0x4e,
+0x0c, 0x0a, 0x50, 0x9b, 0xcc, 0x19, 0xe1, 0xde,
+0x0c, 0xac, 0x7e, 0x63, 0x8e, 0xa3, 0x1d, 0xa0,
+0xc7, 0x4c, 0x9b, 0x4c, 0x46, 0x85, 0x20, 0xc3,
+0x48, 0x29, 0x8c, 0x3d, 0xc1, 0xac, 0xc4, 0x40,
+0x2a, 0x0e, 0xc0, 0x98, 0x49, 0x2d, 0x50, 0x3c,
+0xf1, 0x49, 0x7d, 0x7c, 0x2a, 0x4c, 0x41, 0x4d,
+0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0x30, 0x51, 0x01, 0x13, 0x30, 0x6c, 0x41,
+0x18, 0x30, 0xa1, 0x01, 0x71, 0x31, 0x14, 0xc2,
+0x9c, 0x32, 0x6d, 0x08, 0x11, 0x3f, 0xc7, 0x7f,
+0x65, 0x3f, 0x62, 0x07, 0xa7, 0x32, 0x58, 0xc1,
+0x74, 0x30, 0xe3, 0x01, 0x4a, 0x30, 0x39, 0x02,
+0x1e, 0x30, 0x20, 0x82, 0x6f, 0x30, 0x45, 0x44,
+0x58, 0x30, 0x32, 0x41, 0x70, 0x30, 0x0a, 0x80,
+0x37, 0x04, 0x80, 0x10, 0x06, 0x48, 0x93, 0x13,
+0x4b, 0x4b, 0x0f, 0xb6, 0xcd, 0x9c, 0x52, 0x76,
+0xed, 0xad, 0xf5, 0x7f, 0x6f, 0x55, 0xbd, 0xfd,
+0x7e, 0x9f, 0xed, 0x5f, 0xfc, 0xfd, 0xed, 0xf9,
+0xff, 0xd9, 0x5f, 0xf4, 0xff, 0xd3, 0xaa, 0xd3,
+0xff, 0x7a, 0x7e, 0xb7, 0xfc, 0x7f, 0xb1, 0x96,
+0xfc, 0x39, 0x41, 0x80, 0x40, 0x02, 0xf8, 0x00,
+0x0a, 0xe3, 0x01, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xcd, 0x2d, 0x61, 0x0c, 0x0f, 0xb4, 0x4d,
+0xc0, 0xde, 0x85, 0x23, 0x41, 0xff, 0x6c, 0x94,
+0x2c, 0x13, 0x53, 0x02, 0xd8, 0x26, 0x83, 0x07,
+0x14, 0x76, 0x73, 0x2e, 0xf3, 0x8f, 0xf3, 0xb7,
+0xd7, 0x59, 0x31, 0xf6, 0x26, 0xa3, 0x12, 0x71,
+0x4b, 0x30, 0xd7, 0x0a, 0xd3, 0x0f, 0x60, 0x74,
+0x31, 0x0d, 0x0b, 0xb3, 0xaf, 0x2d, 0x0e, 0x44,
+0x52, 0x6f, 0x24, 0x5e, 0x59, 0x53, 0x3a, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33,
+0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0x30, 0x47, 0x40, 0xf6, 0x30,
+0x5e, 0x01, 0x03, 0x30, 0x8b, 0xc1, 0x5c, 0x30,
+0xef, 0x02, 0x7d, 0x32, 0x1a, 0xc7, 0xae, 0x3d,
+0xb5, 0x3c, 0x4a, 0x3d, 0x5d, 0x47, 0x52, 0x32,
+0x07, 0x81, 0x83, 0x30, 0xc1, 0xc0, 0xff, 0x30,
+0x2c, 0x41, 0xcd, 0x30, 0x22, 0xc2, 0x18, 0x30,
+0x42, 0x03, 0xc3, 0x35, 0xe4, 0xf4, 0xc5, 0x22,
+0xc0, 0x40, 0x15, 0x5b, 0xa0, 0x1a, 0xd6, 0x2d,
+0x19, 0xed, 0x08, 0xf5, 0x18, 0xf4, 0xf5, 0xb5,
+0x17, 0xdb, 0x6b, 0xfd, 0xdf, 0xff, 0xed, 0xf5,
+0x6e, 0x3b, 0x4f, 0xd0, 0xef, 0xa3, 0x75, 0x14,
+0xad, 0xff, 0xa1, 0x06, 0x00, 0xd8, 0x0b, 0x46,
+0x00, 0x48, 0x15, 0x66, 0x02, 0xb0, 0x26, 0x06,
+0x06, 0x38, 0x4c, 0x66, 0x0f, 0x40, 0xea, 0x46,
+0x65, 0x4f, 0x0b, 0x87, 0x8c, 0xff, 0xfb, 0x92,
+0xc4, 0xff, 0x83, 0xcd, 0x35, 0x5f, 0x0c, 0x0f,
+0xb4, 0x4d, 0xc1, 0x0d, 0x85, 0x23, 0x41, 0xff,
+0x6c, 0x90, 0x4e, 0x88, 0x64, 0x32, 0x4c, 0xe6,
+0x26, 0x02, 0x9c, 0x61, 0xb0, 0x16, 0x86, 0x1e,
+0xa0, 0xfa, 0x62, 0x14, 0x19, 0x47, 0x58, 0x64,
+0x1c, 0x8e, 0xa4, 0x1e, 0x78, 0xa4, 0xbe, 0xbe,
+0x15, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xd4, 0x98, 0x82, 0x9a,
+0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0xc9,
+0xd9, 0x00, 0x00, 0x03, 0x01, 0x48, 0x04, 0x73,
+0x01, 0xc4, 0x04, 0xc3, 0x02, 0xc0, 0x07, 0x13,
+0x04, 0xec, 0x0e, 0x03, 0x0b, 0x70, 0x2d, 0x93,
+0x4c, 0x55, 0x6d, 0x13, 0x4a, 0x68, 0x2b, 0x93,
+0x0b, 0x04, 0x08, 0xa3, 0x7c, 0x0e, 0x8c, 0x48,
+0x8a, 0x31, 0x32, 0xa4, 0xca, 0x73, 0xc3, 0x1a,
+0x96, 0x8b, 0x4a, 0xe1, 0x43, 0x35, 0xb7, 0xdb,
+0x3d, 0xff, 0xd2, 0xfe, 0xb4, 0xc7, 0x71, 0xa7,
+0x33, 0x59, 0x01, 0x8e, 0xac, 0xc0, 0x1c, 0x01,
+0xa4, 0xc0, 0x16, 0x03, 0x08, 0xc0, 0x71, 0x05,
+0x6c, 0xc0, 0xf8, 0x0a, 0xc8, 0xc2, 0x59, 0x21,
+0x04, 0xcf, 0x70, 0xfd, 0xa4, 0xfc, 0x6e, 0x0c,
+0xcc, 0xa2, 0x8a, 0xe8, 0xc5, 0xb4, 0x60, 0xcc,
+0x3f, 0x43, 0x64, 0xc4, 0x60, 0x27, 0x0c, 0xff,
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 0x0c, 0x29,
+0x0e, 0x0f, 0xff, 0x84, 0x81, 0x12, 0x05, 0x23,
+0x41, 0xff, 0x6c, 0x90, 0x4b, 0xc3, 0xfc, 0xf1,
+0x50, 0xc2, 0x15, 0x12, 0xed, 0xd4, 0x8b, 0xc5,
+0x2a, 0x67, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff,
+0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
+0x3e, 0xc0, 0xe0, 0x30, 0x51, 0x00, 0xf9, 0x30,
+0x77, 0x41, 0x5a, 0x30, 0xcc, 0x02, 0x83, 0x31,
+0xcc, 0x47, 0xbe, 0x3b, 0xbc, 0xbc, 0x98, 0x3b,
+0x71, 0x47, 0x70, 0x31, 0xb9, 0x81, 0xb7, 0x30,
+0xa0, 0x40, 0xa1, 0x30, 0x1c, 0x41, 0x7b, 0x30,
+0x28, 0xc1, 0xc4, 0x30, 0x43, 0x03, 0x35, 0x35,
+0xf4, 0x2c, 0xc5, 0x22, 0x22, 0xce, 0xae, 0x68,
+0x67, 0x2b, 0x16, 0x9c, 0xfd, 0xae, 0xf3, 0x1e,
+0xbe, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xdf, 0xdf,
+0xaf, 0xf7, 0x7d, 0x1b, 0xba, 0x2f, 0xd7, 0xd2,
+0x83, 0x00, 0x54, 0x06, 0x23, 0x00, 0x84, 0x0b,
+0xf3, 0x01, 0xf0, 0x15, 0x43, 0x04, 0x2c, 0x2a,
+0x93, 0x09, 0xf8, 0x82, 0x43, 0x41, 0xaf, 0xe8,
+0xc3, 0x40, 0x30, 0x81, 0x63, 0x0a, 0xbc, 0x2b,
+0x53, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0x48,
+0xf8, 0x55, 0x1f, 0x4f, 0xf0, 0x47, 0x21, 0x16,
+0x85, 0x23, 0x01, 0xff, 0x6c, 0x90, 0x05, 0xd8,
+0x18, 0x43, 0x03, 0xf0, 0x0d, 0xe3, 0x04, 0x5c,
+0x0a, 0x73, 0x04, 0xa8, 0x10, 0xe3, 0xc2, 0x48,
+0x07, 0x29, 0xa5, 0xc3, 0xaf, 0x0e, 0x45, 0xeb,
+0x9c, 0xb2, 0xaf, 0xff, 0xec, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcd, 0x29,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x30, 0x36, 0x00, 0xc7, 0x30, 0x45, 0xc0,
+0xe0, 0x30, 0x66, 0x81, 0x3f, 0x30, 0xaf, 0xc2,
+0x56, 0x31, 0x8d, 0x07, 0x35, 0x3a, 0x27, 0xf8,
+0x61, 0x39, 0xe6, 0x06, 0xf1, 0x31, 0x7c, 0x41,
+0xa6, 0x30, 0x87, 0x00, 0x6c, 0x30, 0x13, 0x01,
+0x3c, 0x30, 0x27, 0x01, 0x83, 0x30, 0x3e, 0xc2,
+0xc0, 0x3a, 0xfe, 0x23, 0x22, 0x19, 0x2e, 0xf3,
+0x29, 0x8d, 0x63, 0xdb, 0x2f, 0xec, 0x7f, 0x8e,
+0xef, 0xe8, 0x57, 0xff, 0x4f, 0xff, 0xfd, 0x7f,
+0xf7, 0xfa, 0xbf, 0xa3, 0xdf, 0xf5, 0xff, 0x49,
+0x80, 0x1c, 0x02, 0xf9, 0x80, 0x50, 0x05, 0xd1,
+0x81, 0x0e, 0x0a, 0x79, 0x82, 0x34, 0x14, 0xf1,
+0x85, 0x4a, 0x40, 0x29, 0xa2, 0xb1, 0xec, 0xe9,
+0xa1, 0xea, 0x3f, 0xc9, 0x85, 0xa0, 0x15, 0x71,
+0x83, 0x06, 0x0c, 0xff, 0xfb, 0x92, 0xc4, 0xff,
+0x83, 0xca, 0x30, 0x29, 0x10, 0x0f, 0xff, 0x84,
+0x81, 0x27, 0x84, 0xe3, 0x01, 0xff, 0xec, 0x90,
+0x39, 0x81, 0xfe, 0x07, 0x29, 0x82, 0x24, 0x05,
+0x71, 0x82, 0x4e, 0x09, 0x09, 0xdf, 0xa7, 0x83,
+0x94, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 0x2a, 0x67,
+0x5e, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 0x88, 0x29,
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x30, 0x36, 0xc0, 0xcc, 0x30, 0x45,
+0x00, 0xeb, 0x30, 0x65, 0x41, 0x50, 0x30, 0xac,
+0x82, 0x79, 0x31, 0x86, 0xc7, 0x9c, 0x39, 0xfe,
+0xbb, 0x6e, 0x39, 0xbe, 0x47, 0x58, 0x31, 0x75,
+0x01, 0xcf, 0x30, 0x82, 0xc0, 0x4f, 0x30, 0x0e,
+0x41, 0x31, 0x30, 0x2b, 0xc1, 0x7a, 0x30, 0x42,
+0x82, 0xb7, 0x3b, 0x8d, 0xf3, 0x27, 0x18, 0x2e,
+0xeb, 0x0e, 0x8c, 0xe5, 0xcb, 0x5c, 0xeb, 0x47,
+0xa3, 0xa2, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xfe,
+0x9f, 0xfe, 0x8f, 0xdb, 0x47, 0xd2, 0x60, 0x03,
+0x80, 0xb0, 0x60, 0x19, 0x81, 0x6a, 0x60, 0x48,
+0x02, 0x90, 0x60, 0x95, 0x85, 0x2a, 0x61, 0x64,
+0x0f, 0xc8, 0x69, 0x1f, 0xf9, 0x30, 0x68, 0xeb,
+0x0f, 0xb0, 0x61, 0x79, 0x85, 0x4e, 0x60, 0xc6,
+0x03, 0x10, 0x60, 0x80, 0x01, 0xff, 0xfb, 0x90,
+0xc4, 0xff, 0x83, 0xc9, 0xd4, 0x29, 0x12, 0x0f,
+0xff, 0x64, 0x81, 0x23, 0x05, 0x23, 0x01, 0xff,
+0xec, 0x90, 0xd8, 0x60, 0x88, 0x81, 0x72, 0x60,
+0x91, 0x02, 0x60, 0x77, 0x4a, 0x80, 0xa4, 0xf4,
+0xf8, 0x71, 0xe1, 0xc8, 0xbd, 0x70, 0x4e, 0xca,
+0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xb3, 0x4a, 0x62, 0x0a, 0x6a,
+0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x30, 0x36, 0x80, 0xd1,
+0x30, 0x44, 0xc0, 0xf2, 0x30, 0x63, 0x81, 0x63,
+0x30, 0xa9, 0xc2, 0x9a, 0x31, 0x7f, 0x88, 0x01,
+0x39, 0xd2, 0xfe, 0x61, 0x39, 0x92, 0x87, 0xbd,
+0x31, 0x6d, 0xc1, 0xf4, 0x30, 0x7d, 0x80, 0x2c,
+0x30, 0x08, 0x81, 0x26, 0x30, 0x2f, 0x81, 0x73,
+0x30, 0x46, 0xc2, 0xa8, 0x3c, 0x5d, 0xa3, 0x2a,
+0x19, 0x2e, 0x53, 0x0d, 0x8d, 0x63, 0x95, 0x9c,
+0xba, 0x53, 0xe9, 0x67, 0xfe, 0xef, 0x5f, 0xff,
+0xff, 0xe9, 0xfa, 0x3f, 0xf9, 0x3f, 0x7b, 0xf4,
+0xff, 0xfe, 0xfa, 0x40, 0x80, 0x2a, 0x98, 0x07,
+0x40, 0x58, 0x18, 0x13, 0x60, 0xa1, 0x98, 0x27,
+0x41, 0x44, 0x18, 0x5d, 0x63, 0xe0, 0x9a, 0x63,
+0x9d, 0xc1, 0x9a, 0x55, 0xa3, 0xdb, 0x98, 0x62,
+0x01, 0x4f, 0x18, 0x32, 0xe0, 0xc4, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x7c, 0x2b, 0x12,
+0x0f, 0xff, 0x64, 0x81, 0x27, 0x04, 0xe3, 0x01,
+0xff, 0xec, 0x90, 0x98, 0x20, 0x20, 0x79, 0x98,
+0x21, 0x80, 0x60, 0x18, 0x23, 0xa0, 0xa0, 0x9d,
+0xba, 0xd8, 0x19, 0x31, 0x35, 0xdc, 0x48, 0x7e,
+0x1c, 0xa4, 0xce, 0xbd, 0xbf, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad,
+0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0xfc,
+0xb6, 0x33, 0xa8, 0xdb, 0x35, 0x55, 0x42, 0x39,
+0x12, 0x63, 0x31, 0x49, 0xc7, 0x58, 0x38, 0x75,
+0xb9, 0x3e, 0x38, 0x3e, 0xc7, 0x1c, 0x31, 0x39,
+0x01, 0xd5, 0x30, 0x69, 0x40, 0x01, 0x30, 0x01,
+0xc0, 0xf3, 0x32, 0xc5, 0x3a, 0x34, 0x02, 0x47,
+0x32, 0xc0, 0xb9, 0x30, 0x94, 0x10, 0x41, 0xd6,
+0x75, 0x19, 0x10, 0x87, 0x3d, 0x1e, 0x8f, 0xfe,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+0x21, 0x01, 0x38, 0xc0, 0x41, 0x02, 0xac, 0xc0,
+0xa4, 0x04, 0xe8, 0xc1, 0x4b, 0x09, 0xec, 0xc3,
+0x0a, 0x1e, 0x60, 0xd3, 0xf3, 0xe9, 0x68, 0xd3,
+0x7c, 0x1e, 0x48, 0xc3, 0x2f, 0x0a, 0x5c, 0xc1,
+0x9e, 0x06, 0x20, 0xc1, 0x00, 0x03, 0xd8, 0xc1,
+0x09, 0x03, 0x24, 0xc1, 0x16, 0x05, 0x38, 0xec,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xe8,
+0x2b, 0x12, 0x0f, 0xff, 0x64, 0x81, 0x1e, 0x05,
+0x23, 0x01, 0xff, 0xec, 0x90, 0x98, 0x00, 0xc9,
+0x69, 0xa8, 0xe3, 0xc3, 0x91, 0xba, 0xf8, 0x55,
+0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+0xff, 0xff, 0xff, 0xff, 0x52, 0x62, 0x0a, 0x6a,
+0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0x32, 0xf8, 0xbb, 0x33, 0xa4, 0xe2, 0x35, 0x31,
+0x51, 0x38, 0xe6, 0x7c, 0x31, 0x42, 0x87, 0xa9,
+0x38, 0x49, 0xfb, 0xa1, 0x38, 0x13, 0x87, 0x6f,
+0x31, 0x31, 0xc1, 0xf4, 0x01, 0x06, 0x4a, 0x40,
+0x07, 0x41, 0x97, 0xc9, 0x89, 0xa1, 0xf1, 0xd1,
+0x97, 0x65, 0xa1, 0x84, 0xc0, 0x7a, 0x0f, 0x33,
+0x98, 0xd6, 0xc1, 0x97, 0xfb, 0xff, 0xff, 0x77,
+0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb,
+0xff, 0xfe, 0x92, 0x40, 0x12, 0x4c, 0x04, 0x80,
+0x29, 0x0c, 0x0a, 0xd0, 0x4c, 0xcc, 0x15, 0x80,
+0x9b, 0x0c, 0x32, 0xb1, 0xdc, 0x4d, 0x4b, 0xee,
+0x47, 0xcd, 0x44, 0x51, 0xda, 0xcc, 0x34, 0xc0,
+0xa3, 0x0c, 0x1a, 0x90, 0x62, 0x4c, 0x10, 0x10,
+0x3f, 0x4c, 0x10, 0x40, 0x34, 0x0c, 0x11, 0x10,
+0x57, 0x4e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc8, 0x3c, 0x23, 0x14, 0x0e, 0xff, 0xa2, 0x81,
+0x1f, 0x05, 0x23, 0x01, 0xff, 0xec, 0x90, 0xbd,
+0x94, 0x04, 0x88, 0x9a, 0xee, 0x24, 0x3f, 0x0e,
+0x52, 0x66, 0xe5, 0xed, 0xfb, 0xff, 0xd7, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+0x69, 0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26,
+0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x32, 0xfc, 0xbe, 0x33, 0x90, 0xe9,
+0x35, 0x1d, 0x5c, 0x38, 0xaa, 0x97, 0x31, 0x3b,
+0x47, 0xf6, 0x38, 0x1b, 0x3d, 0xea, 0x37, 0xe5,
+0xc7, 0xbc, 0x31, 0x29, 0x82, 0x13, 0x30, 0x60,
+0x40, 0x22, 0x30, 0x00, 0x00, 0xdd, 0x33, 0x35,
+0x28, 0x34, 0x6a, 0x2d, 0x33, 0x08, 0xb1, 0x30,
+0xa4, 0x0e, 0x40, 0x0b, 0x3a, 0x8c, 0xac, 0x39,
+0x4e, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+0xff, 0x6f, 0xff, 0xe8, 0xff, 0xff, 0xa4, 0x44,
+0x02, 0x81, 0x80, 0xbe, 0x05, 0xc9, 0x81, 0xa4,
+0x0a, 0xc1, 0x83, 0x3a, 0x15, 0xb9, 0x87, 0x80,
+0x42, 0x61, 0xb1, 0x07, 0xfc, 0xa1, 0xaf, 0xe0,
+0x42, 0x31, 0x87, 0xca, 0x16, 0xf9, 0x83, 0xe0,
+0x0e, 0x11, 0x82, 0x50, 0x09, 0x41, 0x82, 0x52,
+0x07, 0xc9, 0x82, 0x64, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc8, 0x50, 0x25, 0x14, 0x0e, 0xff,
+0xa2, 0x81, 0x23, 0x85, 0x23, 0x01, 0xff, 0xec,
+0x90, 0x0d, 0x01, 0xe2, 0x3e, 0x19, 0x58, 0x1a,
+0x38, 0x35, 0xf8, 0x72, 0x1f, 0xa7, 0xc0, 0xfa,
+0xb6, 0x7d, 0xdf, 0xea, 0xff, 0xff, 0xff, 0xff,
+0xfe, 0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41,
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x32, 0x88, 0xa7, 0x33,
+0x0c, 0xce, 0x34, 0x51, 0x3b, 0x37, 0x66, 0x58,
+0x31, 0x0c, 0x87, 0x3d, 0x36, 0xf1, 0xf8, 0x47,
+0x36, 0xc4, 0x07, 0x09, 0x30, 0xfd, 0x41, 0xe6,
+0x30, 0x4f, 0x00, 0x35, 0x30, 0x04, 0x40, 0xb2,
+0x35, 0xd3, 0xe4, 0xdf, 0xfd, 0x83, 0x56, 0xa4,
+0x8c, 0x44, 0x09, 0x47, 0xe7, 0x26, 0x5d, 0x0d,
+0xfa, 0x7f, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xf4, 0xff, 0xa4, 0x0a, 0x02, 0x59, 0x80,
+0xcc, 0x05, 0x91, 0x81, 0xba, 0x0a, 0x79, 0x83,
+0x54, 0x15, 0x21, 0x87, 0xc6, 0x40, 0xb9, 0xb2,
+0xb1, 0xf0, 0x19, 0xb1, 0x82, 0x40, 0xa9, 0x88,
+0x04, 0x16, 0x81, 0x83, 0xf2, 0x0e, 0x09, 0x82,
+0x4e, 0x09, 0x79, 0x82, 0x44, 0x08, 0x01, 0x82,
+0x5a, 0x0d, 0x89, 0xe0, 0xc1, 0x99, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x98, 0x23, 0x14,
+0x0e, 0xff, 0xa2, 0x81, 0x29, 0x05, 0x22, 0xc1,
+0xff, 0xec, 0x90, 0x40, 0x22, 0x1b, 0xb5, 0xc7,
+0xfe, 0x1c, 0xa4, 0xb7, 0x85, 0xb5, 0xfd, 0x3f,
+0xf6, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff,
+0xff, 0xff, 0xff, 0x6e, 0x84, 0xc4, 0x14, 0xd4,
+0x53, 0x32, 0xe3, 0x93, 0x75, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x8c,
+0xa8, 0x32, 0xf8, 0xd5, 0x34, 0x3d, 0x44, 0x37,
+0x2a, 0x6f, 0x31, 0x05, 0xc7, 0x7a, 0x36, 0xc4,
+0x3a, 0x1e, 0x36, 0x97, 0x47, 0x48, 0x30, 0xf5,
+0x01, 0xff, 0x30, 0x4a, 0xc0, 0x4c, 0x30, 0x08,
+0x00, 0xa7, 0x36, 0x2b, 0xc0, 0xe1, 0x1c, 0xd3,
+0x5a, 0x23, 0xcc, 0x4a, 0x06, 0x47, 0xd7, 0x1a,
+0x5b, 0x0e, 0x75, 0x23, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xfa, 0x0c, 0x00, 0x60,
+0x10, 0x8c, 0x06, 0xf0, 0x2a, 0xcc, 0x0e, 0x60,
+0x51, 0x0c, 0x1b, 0x90, 0xa4, 0xcc, 0x40, 0x01,
+0xf8, 0x0d, 0xa2, 0x5f, 0x17, 0x0d, 0x98, 0x61,
+0xf8, 0x0c, 0x42, 0x10, 0xb0, 0xcc, 0x20, 0x00,
+0x6f, 0x8c, 0x12, 0x60, 0x4c, 0x8c, 0x11, 0xd0,
+0x42, 0x4c, 0x12, 0x20, 0x6f, 0x8e, 0xea, 0x18,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0xf8,
+0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x05,
+0x62, 0xc1, 0xff, 0xec, 0x90, 0xc9, 0xc1, 0x51,
+0xf1, 0xaf, 0xbf, 0x90, 0xfd, 0x3d, 0x87, 0xab,
+0x67, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 0x4d,
+0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x32, 0x88, 0xab, 0x32, 0xf4, 0xda, 0x34, 0x19,
+0x4f, 0x36, 0xfe, 0x82, 0x30, 0xfe, 0x07, 0xb7,
+0x36, 0x93, 0xfb, 0xe1, 0x36, 0x68, 0x07, 0x85,
+0x30, 0xed, 0x42, 0x16, 0x30, 0x45, 0x80, 0x63,
+0x30, 0x0c, 0x40, 0x9c, 0x36, 0x73, 0xa4, 0xe2,
+0x7b, 0xe3, 0x5d, 0xa2, 0x0c, 0x4c, 0x07, 0x43,
+0x67, 0x16, 0x5c, 0xa0, 0xdf, 0x5a, 0x7d, 0x1f,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+0x4c, 0x01, 0x10, 0x0e, 0xcc, 0x07, 0x60, 0x28,
+0x8c, 0x0e, 0xf0, 0x4e, 0xcc, 0x1c, 0x60, 0xa0,
+0x0c, 0x41, 0xf1, 0xe9, 0xcd, 0xae, 0x6e, 0xa8,
+0x4d, 0xa4, 0x51, 0xea, 0x4c, 0x43, 0xa0, 0xad,
+0x0c, 0x20, 0x90, 0x6f, 0x4c, 0x12, 0x50, 0x4d,
+0xcc, 0x11, 0x60, 0x44, 0x0c, 0x11, 0xb0, 0x73,
+0x4e, 0xce, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc7, 0xe8, 0x23, 0x16, 0x0e, 0xff, 0x82, 0x81,
+0x2b, 0x05, 0x22, 0xc1, 0xff, 0xec, 0x90, 0x2c,
+0xc9, 0x01, 0x91, 0xfd, 0xae, 0x3f, 0xf0, 0xe5,
+0x26, 0x6e, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff,
+0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69,
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x32, 0x84, 0xac, 0x32, 0xe0, 0xdf,
+0x33, 0xfd, 0x58, 0x36, 0xba, 0x95, 0x30, 0xf6,
+0x47, 0xee, 0x36, 0x61, 0x3d, 0x8c, 0x36, 0x36,
+0xc7, 0xbe, 0x30, 0xe4, 0x82, 0x2d, 0x30, 0x41,
+0x40, 0x76, 0x30, 0x0f, 0x80, 0x8f, 0x36, 0xcb,
+0x78, 0xe3, 0x5b, 0x13, 0x60, 0x21, 0x4c, 0x52,
+0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52,
+0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x47, 0xfa, 0x0c, 0x01, 0x80, 0x0c, 0x8c,
+0x07, 0xd0, 0x26, 0xcc, 0x0f, 0x60, 0x4b, 0x8c,
+0x1d, 0x50, 0x9b, 0x4c, 0x43, 0xc1, 0xda, 0x8d,
+0xba, 0x1e, 0x33, 0x8d, 0xaf, 0x81, 0xdb, 0x0c,
+0x45, 0x50, 0xa9, 0x4c, 0x20, 0xe0, 0x6e, 0x8c,
+0x12, 0x20, 0x4e, 0x8c, 0x11, 0x10, 0x45, 0xcc,
+0x11, 0x20, 0x76, 0x0e, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc8, 0x08, 0x23, 0x16, 0x0e, 0xff,
+0x82, 0x81, 0x28, 0x85, 0x22, 0xc1, 0xff, 0xec,
+0x90, 0xb2, 0x40, 0xc8, 0xc1, 0xd1, 0xf1, 0xaf,
+0xbf, 0x90, 0xfd, 0x3e, 0x07, 0xd5, 0xfe, 0xaf,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xf5, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x32, 0x80, 0xaf, 0x32,
+0xd4, 0xe4, 0x33, 0xd9, 0x63, 0x36, 0x86, 0xa6,
+0x30, 0xed, 0x88, 0x25, 0x36, 0x2c, 0xff, 0x25,
+0x36, 0x03, 0x07, 0xf5, 0x30, 0xdc, 0x42, 0x42,
+0x30, 0x3c, 0x00, 0x8b, 0x30, 0x13, 0x40, 0x82,
+0x37, 0x13, 0x54, 0xe4, 0xba, 0x03, 0x63, 0x9f,
+0x8c, 0x54, 0x05, 0x47, 0x27, 0x16, 0x2d, 0xe2,
+0x17, 0xf6, 0xbf, 0xdd, 0xff, 0xa7, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xee,
+0xf5, 0x18, 0x05, 0x20, 0x1a, 0x98, 0x13, 0x00,
+0x55, 0x18, 0x24, 0xe0, 0xa8, 0x98, 0x44, 0xc1,
+0x57, 0x18, 0x9e, 0xa4, 0x17, 0x9c, 0x08, 0x1f,
+0x45, 0x9b, 0xef, 0xe4, 0x1a, 0x98, 0xa1, 0xc1,
+0x79, 0x18, 0x4c, 0x60, 0xfb, 0x98, 0x29, 0xa0,
+0xb7, 0x98, 0x26, 0x40, 0xa4, 0x18, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x28, 0x23, 0x16,
+0x0e, 0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1,
+0xff, 0xec, 0x90, 0x26, 0x21, 0x16, 0x9e, 0x0d,
+0x69, 0x94, 0x06, 0x20, 0x0d, 0x9c, 0x3f, 0xef,
+0xe5, 0x25, 0xb7, 0x2f, 0xff, 0xfe, 0xbf, 0xff,
+0xff, 0xff, 0xff, 0xee, 0xab, 0xff, 0xfb, 0xbf,
+0xdd, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e,
+0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x24,
+0x96, 0x32, 0x58, 0xc9, 0x33, 0x3d, 0x3a, 0x35,
+0x72, 0x61, 0x30, 0xc8, 0x47, 0x50, 0x35, 0x3a,
+0xb8, 0xc2, 0x35, 0x17, 0x47, 0x26, 0x30, 0xb8,
+0x02, 0x0b, 0x30, 0x2f, 0x40, 0x86, 0x30, 0x12,
+0x80, 0x65, 0x36, 0x5a, 0xb8, 0xe0, 0x95, 0xd3,
+0x57, 0x1a, 0x40, 0x44, 0x64, 0xd5, 0x75, 0xa5,
+0xab, 0x3d, 0xd4, 0x8f, 0x4f, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xfd, 0x1f, 0xe8, 0x30, 0x0c,
+0x80, 0x2c, 0x30, 0x28, 0x40, 0xa1, 0x30, 0x4b,
+0x81, 0x42, 0x30, 0x8d, 0x42, 0x95, 0x31, 0x44,
+0x87, 0xe2, 0x38, 0x3f, 0xfc, 0x48, 0x38, 0x0d,
+0x87, 0xea, 0x31, 0x4a, 0x42, 0xdf, 0x30, 0x9a,
+0x81, 0xf2, 0x30, 0x52, 0x81, 0x72, 0x30, 0x4a,
+0xc1, 0x51, 0x30, 0x49, 0x82, 0x3a, 0x3b, 0x8b,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xa4,
+0x25, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x85,
+0x22, 0x81, 0xff, 0xec, 0x90, 0x23, 0x27, 0x0f,
+0x41, 0xc6, 0x76, 0xec, 0x3f, 0xf4, 0xf6, 0x1e,
+0xaf, 0xff, 0xfa, 0xbf, 0xb3, 0xff, 0xff, 0xf7,
+0xff, 0xbf, 0xff, 0xfe, 0xff, 0xa3, 0xfa, 0x93,
+0x10, 0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xd5,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x32, 0x18, 0x99, 0x32, 0x4c, 0xcc, 0x33, 0x19,
+0x43, 0x35, 0x3e, 0x6e, 0x30, 0xc0, 0x07, 0x7b,
+0x35, 0x07, 0xfa, 0x03, 0x34, 0xe5, 0x87, 0x51,
+0x30, 0xb0, 0x42, 0x1c, 0x30, 0x2a, 0x00, 0x97,
+0x30, 0x15, 0xc0, 0x56, 0x36, 0x92, 0x9c, 0xe1,
+0x74, 0xe3, 0x59, 0x98, 0x80, 0x44, 0x94, 0xd6,
+0x75, 0x67, 0x94, 0x77, 0xad, 0x3e, 0x8f, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x26,
+0x01, 0xd8, 0x04, 0x26, 0x05, 0x40, 0x12, 0xc6,
+0x09, 0xb8, 0x26, 0xa6, 0x12, 0x00, 0x4f, 0x46,
+0x29, 0x68, 0xf2, 0xa7, 0x0d, 0x97, 0x3d, 0xa7,
+0x07, 0x28, 0xf3, 0xe6, 0x2a, 0x00, 0x59, 0x46,
+0x13, 0x78, 0x3d, 0xe6, 0x0a, 0x38, 0x2e, 0xe6,
+0x09, 0x00, 0x2a, 0xc6, 0x08, 0xd8, 0x48, 0xe7,
+0x63, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
+0xc8, 0x00, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81,
+0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 0x64,
+0x81, 0xc8, 0x3e, 0xce, 0x1d, 0xb7, 0xf2, 0x92,
+0xdb, 0x97, 0xff, 0xff, 0x5d, 0x3f, 0xff, 0xff,
+0xeb, 0xff, 0xf7, 0x7f, 0xff, 0xdd, 0xfe, 0xef,
+0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0x32, 0x14, 0x98, 0x32, 0x38, 0xd1,
+0x32, 0xfd, 0x48, 0x35, 0x02, 0x7d, 0x30, 0xb8,
+0x47, 0xa2, 0x34, 0xd3, 0x3b, 0x30, 0x34, 0xb2,
+0x47, 0x7a, 0x30, 0xa7, 0x02, 0x2d, 0x30, 0x25,
+0x40, 0xa4, 0x30, 0x18, 0x00, 0x4b, 0x36, 0xca,
+0x70, 0xe2, 0x14, 0x13, 0x5b, 0x17, 0x40, 0xc4,
+0xe4, 0xd5, 0x75, 0xa7, 0x47, 0x90, 0xea, 0x47,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xf4, 0x18, 0x0a, 0x00, 0x0f, 0x18, 0x19, 0x60,
+0x52, 0x98, 0x2d, 0xc0, 0xa8, 0x18, 0x54, 0x61,
+0x5b, 0x98, 0xc0, 0xc4, 0x24, 0x1c, 0xe4, 0x7f,
+0x97, 0x1c, 0xc6, 0x84, 0x2b, 0x18, 0xc3, 0x21,
+0x8c, 0x98, 0x59, 0xc1, 0x18, 0x18, 0x2e, 0x80,
+0xd8, 0x18, 0x28, 0x60, 0xc8, 0x98, 0x26, 0xc1,
+0x54, 0x1e, 0x16, 0xc1, 0xff, 0xfb, 0x92, 0xc4,
+0xff, 0x83, 0xc7, 0xec, 0x23, 0x18, 0x0e, 0xff,
+0x82, 0x81, 0x31, 0x05, 0x22, 0x81, 0xff, 0xec,
+0x90, 0x94, 0x8b, 0x97, 0x21, 0x77, 0xbb, 0x0f,
+0xfc, 0xbe, 0xc1, 0xf5, 0x67, 0xfe, 0xff, 0x5f,
+0x55, 0x1f, 0x67, 0x4f, 0xff, 0xff, 0xfd, 0x77,
+0xff, 0xff, 0xdf, 0xfe, 0xff, 0x52, 0x62, 0x0a,
+0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x32, 0x10, 0x9b, 0x32,
+0x2c, 0xd2, 0x32, 0xd9, 0x4f, 0x34, 0xc6, 0x88,
+0x30, 0xaf, 0x07, 0xc9, 0x34, 0x9c, 0x7c, 0x4d,
+0x34, 0x7c, 0x87, 0xa1, 0x30, 0x9e, 0x42, 0x3c,
+0x30, 0x20, 0x00, 0xb5, 0x30, 0x1a, 0xc0, 0x3e,
+0x37, 0x02, 0x4c, 0xe2, 0xf3, 0x03, 0x5d, 0x96,
+0x00, 0xc4, 0xd4, 0xd6, 0x75, 0x67, 0x86, 0x37,
+0xac, 0x60, 0x30, 0x0f, 0xc0, 0x05, 0x30, 0x26,
+0x80, 0x6e, 0x30, 0x46, 0xc0, 0xef, 0x30, 0x82,
+0x81, 0xf8, 0x31, 0x2d, 0x46, 0x13, 0x37, 0xac,
+0x2e, 0x75, 0x37, 0x7d, 0x46, 0x1f, 0x31, 0x30,
+0x02, 0x48, 0x30, 0x8a, 0x41, 0xa5, 0x30, 0x45,
+0x41, 0x49, 0x30, 0x3a, 0x81, 0x32, 0x30, 0x37,
+0xc2, 0x11, 0x38, 0x7a, 0x33, 0x16, 0x0a, 0x4c,
+0x77, 0x21, 0xff, 0x8c, 0x52, 0x5b, 0xff, 0xfb,
+0x92, 0xc4, 0xff, 0x83, 0xc7, 0xe4, 0x23, 0x18,
+0x0e, 0xff, 0x82, 0x81, 0x3e, 0x05, 0x22, 0x41,
+0xff, 0xec, 0x90, 0x04, 0xc5, 0x69, 0x38, 0xcf,
+0x1b, 0x48, 0x0c, 0x68, 0xa2, 0x1d, 0x5d, 0x3f,
+0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xfd, 0xdf,
+0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71,
+0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x40, 0x00,
+0x64, 0xdb, 0x6d, 0xb5, 0xb2, 0x4a, 0xc1, 0xdb,
+0xa3, 0xf9, 0x04, 0xa6, 0x38, 0xaf, 0x01, 0x21,
+0xc3, 0xcc, 0xe2, 0x0f, 0x5c, 0x8f, 0x60, 0x85,
+0x53, 0x5c, 0x72, 0xa0, 0x86, 0x38, 0x52, 0x42,
+0x98, 0x90, 0xe2, 0xdd, 0x4d, 0x8c, 0x93, 0x72,
+0x2c, 0xc7, 0x36, 0x37, 0x48, 0x08, 0x50, 0x9b,
+0x75, 0xa6, 0x14, 0x51, 0xac, 0x54, 0x3d, 0x08,
+0xcd, 0x2c, 0x34, 0x40, 0x0c, 0x1a, 0x13, 0xa6,
+0xcc, 0x91, 0x91, 0xce, 0x84, 0x64, 0x0a, 0x9c,
+0x38, 0x64, 0x5b, 0x4d, 0x6c, 0x53, 0x76, 0x3c,
+0xc6, 0x36, 0x37, 0xc9, 0x88, 0x11, 0x9b, 0xb6,
+0xa6, 0x34, 0x41, 0xb2, 0x64, 0x51, 0x6c, 0xcf,
+0x36, 0x35, 0xc2, 0x8c, 0x1a, 0x93, 0x66, 0x7c,
+0x64, 0xc1, 0xae, 0x54, 0x62, 0x00, 0x9a, 0x75,
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x46, 0x98,
+0x23, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x4f, 0x85,
+0x22, 0xc9, 0xff, 0xec, 0x90, 0x23, 0xd2, 0x0c,
+0xaa, 0xb3, 0x4e, 0x24, 0x08, 0x78, 0xd4, 0x18,
+0x14, 0x22, 0x69, 0xd1, 0x82, 0x87, 0x19, 0xe4,
+0x03, 0x4f, 0xcc, 0x72, 0x23, 0x40, 0x18, 0x2a,
+0x64, 0xe3, 0x54, 0x46, 0x41, 0xbc, 0xe0, 0x41,
+0xa6, 0xbb, 0x62, 0x5a, 0x19, 0x2e, 0x9b, 0x62,
+0x88, 0x12, 0x37, 0x12, 0x10, 0x0a, 0x6c, 0xb2,
+0x1c, 0x51, 0xa0, 0xb0, 0x95, 0xe6, 0x12, 0xc6,
+0xb0, 0x82, 0xa6, 0x9b, 0x28, 0x97, 0x38, 0xd4,
+0x58, 0x58, 0x93, 0x35, 0x30, 0xea, 0x00, 0x29,
+0x9a, 0xa2, 0x8e, 0x10, 0x6a, 0x1c, 0x5e, 0xd3,
+0x45, 0x31, 0xe1, 0x8c, 0x83, 0x83, 0x23, 0x04,
+0x1c, 0x68, 0x04, 0x4a, 0x29, 0xa2, 0x6a, 0x12,
+0x8c, 0xc4, 0x09, 0x85, 0x31, 0x4d, 0x0c, 0x70,
+0x1a, 0x59, 0x9e, 0x19, 0x54, 0x23, 0x38, 0xa4,
+0x89, 0x32, 0xcf, 0x2b, 0x0c, 0xc2, 0x20, 0x21,
+0xf0, 0xb1, 0x06, 0x60, 0x48, 0x7a, 0x66, 0x92,
+0x8f, 0xc6, 0x31, 0x84, 0xc2, 0x00, 0x47, 0x08,
+0x60, 0x42, 0x39, 0x96, 0x1a, 0x3b, 0x19, 0x44,
+0x25, 0x69, 0x8a, 0x59, 0x10, 0xe0, 0x41, 0x02,
+0x17, 0x11, 0x08, 0x64, 0x04, 0x96, 0xa6, 0x48,
+0xe9, 0xf4, 0x61, 0x10, 0x3c, 0x00, 0x24, 0x30,
+0x72, 0x83, 0x20, 0x99, 0x21, 0xa6, 0x91, 0x8c,
+0x32, 0x66, 0x98, 0x23, 0x8d, 0x06, 0x0c, 0x00,
+0x1c, 0x9a, 0x1c, 0x0c, 0x60, 0x14, 0xa4, 0xc5,
+0x1d, 0x38, 0x80, 0x03, 0x0b, 0x00, 0x5b, 0xb0,
+0x72, 0x09, 0x2e, 0x62, 0x82, 0xa6, 0x46, 0x10,
+0x8a, 0x12, 0x05, 0x14, 0x48, 0x32, 0xe6, 0x02,
+0x8f, 0x49, 0xc3, 0x10, 0x05, 0x4a, 0x60, 0x8a,
+0xa2, 0x20, 0x81, 0x04, 0x80, 0x40, 0x58, 0x28,
+0xc4, 0xdb, 0x30, 0xc1, 0x58, 0xc6, 0x00, 0x49,
+0xe0, 0x0d, 0x0c, 0x38, 0x34, 0x6c, 0x05, 0x16,
+0xaa, 0x46, 0x10, 0x0a, 0xe4, 0x02, 0x1a, 0x4d,
+0x85, 0x02, 0x0e, 0x01, 0x23, 0xc1, 0x44, 0x2c,
+0x93, 0x04, 0x15, 0xac, 0x04, 0x09, 0x20, 0x02,
+0xa0, 0x86, 0x06, 0x9e, 0x80, 0xa1, 0xd7, 0x91,
+0x82, 0x10, 0x99, 0x10, 0xb9, 0x0a, 0x11, 0xb7,
+0x94, 0x1b, 0x65, 0xb9, 0xac, 0x3c, 0x1e, 0x9b,
+0xd1, 0xa4, 0x51, 0x91, 0x70, 0x19, 0x51, 0x59,
+0x95, 0x12, 0x8c, 0x13, 0x19, 0xa8, 0xd0, 0xa0,
+0xd9, 0x93, 0x0c, 0x85, 0x04, 0x77, 0xb0, 0xd2,
+0xcc, 0x6e, 0x0e, 0x90, 0x21, 0xa0, 0x6e, 0x8a,
+0x98, 0xda, 0x44, 0xd3, 0x32, 0x15, 0x48, 0x02,
+0x06, 0x81, 0xa1, 0x71, 0x04, 0x19, 0x1d, 0x40,
+0xc5, 0x60, 0x05, 0x92, 0x62, 0xe5, 0xee, 0x4f,
+0xa4, 0x26, 0x97, 0xc5, 0x45, 0x8b, 0x8c, 0xd2,
+0xcb, 0xba, 0xd4, 0x11, 0xe5, 0x58, 0x53, 0x49,
+0x0d, 0x98, 0x4a, 0x00, 0x5d, 0x84, 0x56, 0x6c,
+0xea, 0xdc, 0xb5, 0x96, 0x8a, 0x74, 0xb4, 0x64,
+0x8a, 0x7f, 0xd4, 0x05, 0xcd, 0x60, 0x2c, 0x95,
+0x91, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x80,
+0x31, 0x95, 0xa3, 0x65, 0xac, 0xeb, 0x2d, 0xf4,
+0xf1, 0x3a, 0xe6, 0xc1, 0xbc, 0x3d, 0xb8, 0xb1,
+0xb2, 0x21, 0xa8, 0x60, 0xb7, 0x18, 0xc3, 0xe8,
+0x93, 0x17, 0x51, 0xc2, 0x7c, 0x09, 0xb2, 0x8c,
+0x5b, 0x4f, 0x12, 0x7a, 0x58, 0x4b, 0xb0, 0xe2,
+0x49, 0x8b, 0x8a, 0xa0, 0x83, 0x1e, 0x45, 0xf8,
+0xb1, 0x1d, 0xa4, 0x25, 0x20, 0x3d, 0x4a, 0xb2,
+0x52, 0x70, 0x9b, 0xa5, 0x84, 0xf6, 0x21, 0x4a,
+0x71, 0xe9, 0x58, 0x2d, 0xc7, 0x11, 0xbc, 0x65,
+0x24, 0x49, 0x6a, 0x90, 0x9d, 0x2d, 0x96, 0xd3,
+0x84, 0xfd, 0x32, 0x53, 0x05, 0xc9, 0x8c, 0x9c,
+0xb4, 0x17, 0xe3, 0x89, 0x14, 0x65, 0x2f, 0x97,
+0x16, 0x02, 0xdc, 0xd2, 0x5f, 0x4e, 0x14, 0x49,
+0x92, 0xb8, 0x2e, 0x4a, 0xf2, 0xda, 0xb2, 0x73,
+0x19, 0x4a, 0x63, 0x29, 0x76, 0x68, 0xb2, 0x1a,
+0x4b, 0x47, 0xe9, 0xd2, 0xb9, 0x34, 0x5b, 0x0d,
+0x26, 0x73, 0x45, 0x64, 0xfe, 0x3a, 0x97, 0x46,
+0x93, 0x19, 0xa2, 0xc8, 0x73, 0x2a, 0x8f, 0xd3,
+0xa5, 0x72, 0x68, 0xb0, 0x1a, 0x4e, 0x67, 0x2a,
+0xa4, 0xfe, 0x3a, 0x97, 0x8d, 0x26, 0x33, 0x45,
+0xc0, 0xe6, 0x55, 0x22, 0x4e, 0x96, 0xb3, 0x45,
+0xe1, 0xcc, 0xe6, 0x72, 0xaa, 0x54, 0xc7, 0x53,
+0x51, 0xa4, 0xfc, 0xe5, 0x74, 0x7f, 0x2a, 0x94,
+0xa7, 0x4b, 0x59, 0xa2, 0xf0, 0xe6, 0x76, 0x7e,
+0xaa, 0x54, 0xc7, 0x53, 0x61, 0xa4, 0xce, 0x72,
+0xb8, 0xa7, 0x94, 0x4b, 0x93, 0xa5, 0xbc, 0xd1,
+0x70, 0x43, 0x96, 0x93, 0xaa, 0x15, 0xd1, 0xd4,
+0xd9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39,
+0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e,
+0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x92, 0xc4,
+0x61, 0x83, 0xc0, 0x00, 0x01, 0xa4, 0x00, 0x00,
+0x00, 0x20, 0x00, 0x00, 0x34, 0x80, 0x00, 0x00,
+0x04, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+};
+
--- /dev/null
+/* GStreamer
+ * unit test for index setting on all elements
+ * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup (void)
+{
+ GList *features, *f;
+ GList *plugins, *p;
+ gchar **ignorelist = NULL;
+ const gchar *INDEX_IGNORE_ELEMENTS = NULL;
+
+ GST_DEBUG ("getting elements for package %s", PACKAGE);
+ INDEX_IGNORE_ELEMENTS = g_getenv ("GST_INDEX_IGNORE_ELEMENTS");
+ if (!g_getenv ("GST_NO_INDEX_IGNORE_ELEMENTS") && INDEX_IGNORE_ELEMENTS) {
+ GST_DEBUG ("Will ignore element factories: '%s'", INDEX_IGNORE_ELEMENTS);
+ ignorelist = g_strsplit (INDEX_IGNORE_ELEMENTS, " ", 0);
+ }
+
+ plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
+
+ for (p = plugins; p; p = p->next) {
+ GstPlugin *plugin = p->data;
+
+ if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+ continue;
+
+ features =
+ gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
+ gst_plugin_get_name (plugin));
+
+ for (f = features; f; f = f->next) {
+ GstPluginFeature *feature = f->data;
+ const gchar *name = gst_plugin_feature_get_name (feature);
+ gboolean ignore = FALSE;
+
+ if (!GST_IS_ELEMENT_FACTORY (feature))
+ continue;
+
+ if (ignorelist) {
+ gchar **s;
+
+ for (s = ignorelist; s && *s; ++s) {
+ if (g_str_has_prefix (name, *s)) {
+ GST_DEBUG ("ignoring element %s", name);
+ ignore = TRUE;
+ }
+ }
+ if (ignore)
+ continue;
+ }
+
+ GST_DEBUG ("adding element %s", name);
+ elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+ }
+ gst_plugin_feature_list_free (features);
+ }
+ gst_plugin_list_free (plugins);
+ g_strfreev (ignorelist);
+}
+
+static void
+teardown (void)
+{
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ g_free (e->data);
+ }
+ g_list_free (elements);
+ elements = NULL;
+}
+
+GST_START_TEST (test_set_index)
+{
+ GstElement *element;
+ GstIndex *idx;
+ GList *e;
+
+ idx = gst_index_factory_make ("memindex");
+ if (idx == NULL)
+ return;
+
+ gst_object_ref_sink (idx);
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ gst_element_set_index (element, idx);
+ gst_object_unref (element);
+ }
+
+ gst_object_unref (idx);
+}
+
+GST_END_TEST;
+
+static Suite *
+index_suite (void)
+{
+ Suite *s = suite_create ("index");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_checked_fixture (tc_chain, setup, teardown);
+ tcase_add_test (tc_chain, test_set_index);
+
+ return s;
+}
+
+GST_CHECK_MAIN (index);
--- /dev/null
+/* GStreamer
+ *
+ * unit test for state changes on all elements
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup ()
+{
+ GList *features, *f;
+ GList *plugins, *p;
+ gchar **ignorelist = NULL;
+ const gchar *STATE_IGNORE_ELEMENTS = NULL;
+
+ GST_DEBUG ("getting elements for package %s", PACKAGE);
+ STATE_IGNORE_ELEMENTS = g_getenv ("GST_STATE_IGNORE_ELEMENTS");
+ if (!g_getenv ("GST_NO_STATE_IGNORE_ELEMENTS") && STATE_IGNORE_ELEMENTS) {
+ GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
+ ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
+ }
+
+ plugins = gst_registry_get_plugin_list (gst_registry_get ());
+
+ for (p = plugins; p; p = p->next) {
+ GstPlugin *plugin = p->data;
+
+ if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+ continue;
+
+ features =
+ gst_registry_get_feature_list_by_plugin (gst_registry_get (),
+ gst_plugin_get_name (plugin));
+
+ for (f = features; f; f = f->next) {
+ GstPluginFeature *feature = f->data;
+ const gchar *name = gst_plugin_feature_get_name (feature);
+ gboolean ignore = FALSE;
+
+ if (!GST_IS_ELEMENT_FACTORY (feature))
+ continue;
+
+ if (ignorelist) {
+ gchar **s;
+
+ for (s = ignorelist; s && *s; ++s) {
+ if (g_str_has_prefix (name, *s)) {
+ GST_DEBUG ("ignoring element %s", name);
+ ignore = TRUE;
+ }
+ }
+ if (ignore)
+ continue;
+ }
+
+ GST_DEBUG ("adding element %s", name);
+ elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+ }
+ gst_plugin_feature_list_free (features);
+ }
+ gst_plugin_list_free (plugins);
+ g_strfreev (ignorelist);
+}
+
+static void
+teardown ()
+{
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ g_free (e->data);
+ }
+ g_list_free (elements);
+ elements = NULL;
+}
+
+
+GST_START_TEST (test_state_changes_up_and_down_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_up_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_down_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+Suite *
+states_suite (void)
+{
+ Suite *s = suite_create ("states_ugly");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_checked_fixture (tc_chain, setup, teardown);
+ tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
+ tcase_add_test (tc_chain, test_state_changes_up_seq);
+ tcase_add_test (tc_chain, test_state_changes_down_seq);
+
+ return s;
+}
+
+GST_CHECK_MAIN (states);
--- /dev/null
+### amrnb suppressions
+### these should/could be submitted to amrnb
+
+{
+ <amrnb>
+ Memcheck:Cond
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <amrnb>
+ Memcheck:Cond
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <amrnb>
+ Memcheck:Cond
+ obj:/usr/lib/libamrnb.so*
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <amrnb>
+ Memcheck:Cond
+ obj:/usr/lib/libamrnb.so*
+ obj:/usr/lib/libamrnb.so*
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <amrnb>
+ Memcheck:Cond
+ obj:/usr/lib/libamrnb.so*
+ obj:/usr/lib/libamrnb.so*
+ obj:/usr/lib/libamrnb.so*
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <amrnb acos>
+ Memcheck:Cond
+ fun:acos
+ obj:/usr/lib/libamrnb.so*
+ obj:/usr/lib/libamrnb.so*
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+ fun:gst_amrnbenc_chain
+ fun:gst_pad_chain
+ fun:gst_pad_push
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Levinson
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Az_lsp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:acos
+ fun:Lsp_lsf
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Lsf_wt
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Vq_subvec
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Lag_max
+ fun:Pitch_ol
+ fun:ol_ltp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:Pitch_ol
+ fun:ol_ltp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:cl_ltp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:searchFrac
+ fun:cl_ltp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:q_gain_pitch
+ fun:cl_ltp
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:set_sign12k2
+ fun:code_10i40_35bits
+ fun:cbsearch
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:code_10i40_35bits
+ fun:cbsearch
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder>
+ Memcheck:Cond
+ fun:gainQuant
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
+
+{
+ <AMR encoder on FC4>
+ Memcheck:Value2
+ obj:/usr/lib/libamrnb.so.0.0.0
+ fun:Speech_Encode_Frame
+ fun:Encoder_Interface_Encode
+}
--- /dev/null
+# name, condition when to skip the test and extra dependencies
+ugly_tests = [
+ [ 'elements/x264enc', not x264_dep.found(), [ x264_dep, gmodule_dep ] ],
+ [ 'elements/xingmux' ],
+ [ 'generic/states' ],
+]
+
+# FIXME: unistd dependency or not tested yet on windows
+if host_machine.system() != 'windows'
+ ugly_tests += [
+ [ 'elements/amrnbenc', not amrnb_dep.found() ],
+ [ 'elements/mpeg2dec', not mpeg2_dep.found() or not cdata.has('HAVE_UNISTD_H'), [ gstvideo_dep ] ],
+ ]
+endif
+
+test_defines = [
+ '-UG_DISABLE_ASSERT',
+ '-UG_DISABLE_CAST_CHECKS',
+ '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"',
+ '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"',
+ '-DGST_USE_UNSTABLE_API',
+]
+
+pluginsdirs = []
+if gst_dep.type_name() == 'pkgconfig'
+ pbase = dependency('gstreamer-plugins-base-' + api_version, required: true)
+ pluginsdirs = [gst_dep.get_pkgconfig_variable('pluginsdir'),
+ pbase.get_pkgconfig_variable('pluginsdir')]
+ gst_plugin_scanner_dir = gst_dep.get_pkgconfig_variable('pluginscannerdir')
+else
+ gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir')
+endif
+gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
+
+test_deps = [gst_dep, gstbase_dep, gstcheck_dep, gstaudio_dep, gstapp_dep,
+ gstfft_dep, gstvideo_dep, gstpbutils_dep]
+
+libm = cc.find_library('m', required : false)
+
+# FIXME: valgrind_args: add suppressions $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp
+
+no_warn_args = []
+foreach arg : [
+ '-Wno-missing-prototypes',
+ '-Wno-missing-declarations',
+ '-Wno-old-style-definition']
+ if cc.has_argument(arg)
+ no_warn_args += [arg]
+ endif
+endforeach
+
+foreach t : ugly_tests
+ fname = '@0@.c'.format(t.get(0))
+ test_name = t.get(0).underscorify()
+ extra_deps = [ ]
+ if t.length() == 3
+ extra_deps = t.get(2)
+ skip_test = t.get(1)
+ elif t.length() == 2
+ skip_test = t.get(1)
+ else
+ skip_test = false
+ endif
+ if not skip_test
+ exe = executable(test_name, fname,
+ include_directories : [configinc],
+ c_args : ['-DHAVE_CONFIG_H=1' ] + test_defines + no_warn_args,
+ dependencies : [libm] + test_deps + extra_deps,
+ )
+
+ env = environment()
+ env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
+ env.set('CK_DEFAULT_TIMEOUT', '20')
+ env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base',
+ 'gst-plugins-good', 'gst-plugins-ugly@' + meson.build_root())
+ env.set('GST_PLUGIN_PATH_1_0', [meson.build_root()] + pluginsdirs)
+ env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name)))
+ env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path)
+ test(test_name, exe, env: env, timeout: 3 * 60)
+ endif
+endforeach
--- /dev/null
+if not get_option('tests').disabled() and gstcheck_dep.found()
+ subdir('check')
+endif
+++ /dev/null
-/*
- * GStreamer
- *
- * unit test for amrnbenc
- *
- * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/check/gstcheck.h>
-#include <gst/audio/audio.h>
-
-#define SRC_CAPS "audio/x-raw, format = (string)" GST_AUDIO_NE (S16) ", " \
- "layout = (string) interleaved, channels = (int) 1, rate = (int) 8000"
-#define SINK_CAPS "audio/AMR"
-
-static GstPad *srcpad, *sinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (SINK_CAPS)
- );
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (SRC_CAPS)
- );
-
-static void
-buffer_unref (void *buffer, void *user_data)
-{
- gst_buffer_unref (GST_BUFFER (buffer));
-}
-
-static GstElement *
-setup_amrnbenc (void)
-{
- GstElement *amrnbenc;
- GstCaps *caps;
- GstBus *bus;
-
- GST_DEBUG ("setup_amrnbenc");
-
- amrnbenc = gst_check_setup_element ("amrnbenc");
- srcpad = gst_check_setup_src_pad (amrnbenc, &srctemplate);
- sinkpad = gst_check_setup_sink_pad (amrnbenc, &sinktemplate);
- gst_pad_set_active (srcpad, TRUE);
- gst_pad_set_active (sinkpad, TRUE);
-
- bus = gst_bus_new ();
- gst_element_set_bus (amrnbenc, bus);
-
- fail_unless (gst_element_set_state (amrnbenc,
- GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE,
- "could not set to playing");
-
- caps = gst_caps_from_string (SRC_CAPS);
- gst_check_setup_events (srcpad, amrnbenc, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
-
- buffers = NULL;
- return amrnbenc;
-}
-
-static void
-cleanup_amrnbenc (GstElement * amrnbenc)
-{
- GstBus *bus;
-
- /* free encoded buffers */
- g_list_foreach (buffers, buffer_unref, NULL);
- g_list_free (buffers);
- buffers = NULL;
-
- bus = GST_ELEMENT_BUS (amrnbenc);
- gst_bus_set_flushing (bus, TRUE);
- gst_object_unref (bus);
-
- GST_DEBUG ("cleanup_amrnbenc");
- gst_pad_set_active (srcpad, FALSE);
- gst_pad_set_active (sinkpad, FALSE);
- gst_check_teardown_src_pad (amrnbenc);
- gst_check_teardown_sink_pad (amrnbenc);
- gst_check_teardown_element (amrnbenc);
-}
-
-/* push a random block of audio of the given size */
-static void
-push_data (gint size, GstFlowReturn expected_return)
-{
- GstBuffer *buffer;
- GstFlowReturn res;
-
- buffer = gst_buffer_new_and_alloc (size);
- /* make valgrind happier */
- gst_buffer_memset (buffer, 0, 0, size);
-
- res = gst_pad_push (srcpad, buffer);
- fail_unless (res == expected_return,
- "pushing audio returned %d (%s) not %d (%s)", res,
- gst_flow_get_name (res), expected_return,
- gst_flow_get_name (expected_return));
-}
-
-GST_START_TEST (test_enc)
-{
- GstElement *amrnbenc;
-
- amrnbenc = setup_amrnbenc ();
- push_data (1000, GST_FLOW_OK);
-
- cleanup_amrnbenc (amrnbenc);
-}
-
-GST_END_TEST;
-
-static Suite *
-amrnbenc_suite ()
-{
- Suite *s = suite_create ("amrnbenc");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_enc);
- return s;
-}
-
-GST_CHECK_MAIN (amrnbenc);
+++ /dev/null
-/* GStreamer
- *
- * unit test for mpeg2dec
- *
- * Copyright (c) 2006 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-
-#include <gst/check/gstcheck.h>
-#include <gst/video/video-info.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=176,height=144,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
-*/
-
-static const guint8 test_stream1[] = {
- 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00, 0x90, 0x13,
- 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
- 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
- 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
- 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
- 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x88, 0x00, 0x00, 0x01, 0x02, 0x13, 0xf8, 0xe5,
- 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x03, 0x13,
- 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
- 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
- 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
- 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
- 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x88, 0x00, 0x00, 0x01, 0x06, 0x13, 0xf8, 0xe5,
- 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x07, 0x13,
- 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
- 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
- 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
- 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
- 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x88, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
- 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
- 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
- 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
- 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x57, 0xff,
- 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
- 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01,
- 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
- 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
- 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0x57, 0xff,
- 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
- 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02,
- 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
- 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
- 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
- 0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
- 0x80, 0x00, 0x00, 0x01, 0x00, 0x03, 0x57, 0xff,
- 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
- 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
- 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x03,
- 0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0xb3, 0x0b, 0x00, 0x90, 0x13, 0xff, 0xff, 0xe0,
- 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00,
- 0x08, 0x07, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f,
- 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
- 0x01, 0x02, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
- 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
- 0x00, 0x00, 0x01, 0x03, 0x13, 0xf8, 0xe5, 0x29,
- 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x88, 0x00, 0x00, 0x01, 0x04, 0x13, 0xf8,
- 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x05,
- 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
- 0x01, 0x06, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
- 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
- 0x00, 0x00, 0x01, 0x07, 0x13, 0xf8, 0xe5, 0x29,
- 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x88, 0x00, 0x00, 0x01, 0x08, 0x13, 0xf8,
- 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x09,
- 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb,
- 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
- 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0xd7,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
- 0x01, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
- 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
- 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb,
- 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
- 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0xd7,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
- 0x02, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
- 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
- 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb,
- 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
- 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0xd7,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
- 0x03, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
- 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
- 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
- 0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
- 0x00, 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb,
- 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
- 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
- 0xb3, 0x80, 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00,
- 0x90, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00,
- 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x22, 0x80,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8,
- 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5,
- 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x02, 0x13,
- 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
- 0x03, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
- 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
- 0x00, 0x01, 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
- 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x88, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5,
- 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x06, 0x13,
- 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
- 0x07, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
- 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
- 0x00, 0x01, 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
- 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x88, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5,
- 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xb3, 0x80,
-};
-
-static const guint test_stream_sizes[] = {
- 497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 497, 90
-};
-
-/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=183,height=217,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
-*/
-
-static const guint8 test_stream2[] = {
- 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13,
- 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
- 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
- 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
- 0x00, 0x01, 0x01, 0x23, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x02, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x03, 0x23,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x04, 0x23, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x05, 0x23, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x06, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x07, 0x23,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x08, 0x23, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x09, 0x23, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x0a, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0b, 0x23,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x0c, 0x23, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x0d, 0x23, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x0e, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x1a,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x1a, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x1a, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x1a, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x1a, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x1a,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x1a, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x1a, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x1a, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
- 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
- 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
- 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
- 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03,
- 0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
- 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb, 0x80,
- 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
- 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0xb3, 0x0b,
- 0x70, 0xd9, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00,
- 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x07,
- 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff,
- 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3,
- 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf9,
- 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
- 0x00, 0x00, 0x01, 0x02, 0x13, 0xf9, 0x45, 0x29,
- 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
- 0x01, 0x03, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
- 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x04,
- 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x20, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf9,
- 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
- 0x00, 0x00, 0x01, 0x06, 0x13, 0xf9, 0x45, 0x29,
- 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
- 0x01, 0x07, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
- 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x08,
- 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x20, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf9,
- 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
- 0x00, 0x00, 0x01, 0x0a, 0x13, 0xf9, 0x45, 0x29,
- 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
- 0x01, 0x0b, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
- 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0c,
- 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x20, 0x00, 0x00, 0x01, 0x0d, 0x13, 0xf9,
- 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
- 0x00, 0x00, 0x01, 0x0e, 0x13, 0xf9, 0x45, 0x29,
- 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x97,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x17,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x97,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x17,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x97,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x17,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
- 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
- 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x97,
- 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
- 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13, 0xff, 0xff,
- 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8,
- 0x00, 0x08, 0x22, 0x80, 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5,
- 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
- 0x01, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x02, 0x13,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x03, 0x13, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x04, 0x13, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x05, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x06, 0x13,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x07, 0x13, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x08, 0x13, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x09, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0a, 0x13,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x0b, 0x13, 0xf9, 0x45,
- 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
- 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
- 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
- 0x00, 0x01, 0x0c, 0x13, 0xf9, 0x45, 0x29, 0x4b,
- 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
- 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
- 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
- 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
- 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
- 0x0d, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
- 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
- 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
- 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
- 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0e, 0x13,
- 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
- 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
- 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
- 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
- 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
- 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
- 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
- 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
- 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
- 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
- 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08,
- 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
- 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12,
- 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
- 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70,
- 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
- 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1,
- 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
- 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc,
- 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
- 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
- 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
- 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
- 0xa5, 0xfb, 0x85, 0xe6, 0xc0
-};
-
-static const guint test_stream2_sizes[] = {
- 803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
- 803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
- 803, 228
-};
-
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/mpeg, "
- "systemstream=(boolean)false, " "mpegversion=(int)2")
- );
-
-GstElement *
-setup_mpeg2dec ()
-{
- GstElement *mpeg2dec;
- GstCaps *caps;
-
- GST_DEBUG ("setup_mpeg2dec");
- mpeg2dec = gst_check_setup_element ("mpeg2dec");
- mysrcpad = gst_check_setup_src_pad (mpeg2dec, &srctemplate);
- mysinkpad = gst_check_setup_sink_pad (mpeg2dec, &sinktemplate);
- gst_pad_set_active (mysrcpad, TRUE);
- gst_pad_set_active (mysinkpad, TRUE);
-
- caps = gst_caps_new_simple ("video/mpeg",
- "systemstream", G_TYPE_BOOLEAN, FALSE,
- "mpegversion", G_TYPE_INT, 2, NULL);
- gst_check_setup_events (mysrcpad, mpeg2dec, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
-
- return mpeg2dec;
-}
-
-void
-cleanup_mpeg2dec (GstElement * mpeg2dec)
-{
- GST_DEBUG ("cleanup_mpeg2dec");
- gst_element_set_state (mpeg2dec, GST_STATE_NULL);
-
- gst_pad_set_active (mysrcpad, FALSE);
- gst_pad_set_active (mysinkpad, FALSE);
- gst_check_teardown_src_pad (mpeg2dec);
- gst_check_teardown_sink_pad (mpeg2dec);
- gst_check_teardown_element (mpeg2dec);
-}
-
-GST_START_TEST (test_decode_stream1)
-{
- GstElement *mpeg2dec;
- GstBuffer *inbuffer, *outbuffer;
- GstBus *bus;
- int i, num_buffers;
- GstCaps *out_caps, *caps;
- guint offset = 0;
- GstVideoInfo info;
-
- mpeg2dec = setup_mpeg2dec ();
-
- fail_unless (gst_element_set_state (mpeg2dec,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
- "could not set to playing");
- bus = gst_bus_new ();
-
- gst_element_set_bus (mpeg2dec, bus);
-
- for (i = 0; i < G_N_ELEMENTS (test_stream_sizes); i++) {
- inbuffer =
- gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
- (guint8 *) test_stream1 + offset, test_stream_sizes[i], 0,
- test_stream_sizes[i], NULL, NULL);
- offset += test_stream_sizes[i];
- ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
- gst_buffer_ref (inbuffer);
- /* should decode the buffer without problems */
- fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
- gst_buffer_unref (inbuffer);
- }
-
- num_buffers = g_list_length (buffers);
-
- /* should be 30 buffers, one per decoded frame */
- fail_unless_equals_int (num_buffers, 30);
-
- /* each buffer should have these caps */
- gst_video_info_init (&info);
- gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 176, 144);
- GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
- GST_VIDEO_INFO_FPS_N (&info) = 25;
- GST_VIDEO_INFO_FPS_D (&info) = 1;
- GST_VIDEO_INFO_FPS_D (&info) = 1;
- GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
- gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
- "2:0:0:0");
- GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
-
- out_caps = gst_video_info_to_caps (&info);
-
- caps = gst_pad_get_current_caps (mysinkpad);
- GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
- fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
- gst_caps_unref (caps);
-
- for (i = 0; i < num_buffers; ++i) {
- outbuffer = GST_BUFFER (buffers->data);
- fail_if (outbuffer == NULL);
-
- /* I420 with 176x144 should have this size if nothing else was negotiated */
- fail_unless_equals_int (gst_buffer_get_size (outbuffer), 38016);
-
- buffers = g_list_remove (buffers, outbuffer);
- gst_buffer_unref (outbuffer);
- outbuffer = NULL;
- }
-
- gst_caps_unref (out_caps);
- g_list_free (buffers);
- buffers = NULL;
-
- gst_bus_set_flushing (bus, TRUE);
- gst_element_set_bus (mpeg2dec, NULL);
- gst_object_unref (GST_OBJECT (bus));
- cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_decode_stream2)
-{
- GstElement *mpeg2dec;
- GstBuffer *inbuffer, *outbuffer;
- GstBus *bus;
- int i, num_buffers;
- GstCaps *out_caps;
- GstCaps *caps;
- guint offset = 0;
- GstVideoInfo info;
-
- mpeg2dec = setup_mpeg2dec ();
-
- fail_unless (gst_element_set_state (mpeg2dec,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
- "could not set to playing");
- bus = gst_bus_new ();
-
- gst_element_set_bus (mpeg2dec, bus);
-
- for (i = 0; i < G_N_ELEMENTS (test_stream2_sizes); i++) {
- inbuffer =
- gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
- (guint8 *) test_stream2 + offset, test_stream2_sizes[i], 0,
- test_stream2_sizes[i], NULL, NULL);
- offset += test_stream2_sizes[i];
- ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
- gst_buffer_ref (inbuffer);
- /* should decode the buffer without problems */
- fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
- gst_buffer_unref (inbuffer);
- }
-
-
- num_buffers = g_list_length (buffers);
-
- /* should be 30 buffers, one per decoded frame */
- fail_unless_equals_int (num_buffers, 30);
-
- /* each buffer should have these caps */
- gst_video_info_init (&info);
- gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 183, 217);
- GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
- GST_VIDEO_INFO_FPS_N (&info) = 25;
- GST_VIDEO_INFO_FPS_D (&info) = 1;
- GST_VIDEO_INFO_FPS_D (&info) = 1;
- GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
- gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
- "2:0:0:0");
- GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
-
- out_caps = gst_video_info_to_caps (&info);
-
- caps = gst_pad_get_current_caps (mysinkpad);
- GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
- GST_LOG ("expected caps %" GST_PTR_FORMAT, out_caps);
- fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
- gst_caps_unref (caps);
-
- for (i = 0; i < num_buffers; ++i) {
- outbuffer = GST_BUFFER (buffers->data);
- fail_if (outbuffer == NULL);
-
- /* I420 with 183x217 must have this size */
- fail_unless_equals_int (gst_buffer_get_size (outbuffer), 60168);
-
- buffers = g_list_remove (buffers, outbuffer);
- gst_buffer_unref (outbuffer);
- outbuffer = NULL;
- }
-
- gst_caps_unref (out_caps);
- g_list_free (buffers);
- buffers = NULL;
-
- gst_bus_set_flushing (bus, TRUE);
- gst_element_set_bus (mpeg2dec, NULL);
- gst_object_unref (GST_OBJECT (bus));
- cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_decode_garbage)
-{
- GstElement *mpeg2dec;
- GstBuffer *inbuffer;
- GstBus *bus;
- int i, num_buffers;
- guint32 *tmpbuf;
-
- mpeg2dec = setup_mpeg2dec ();
-
- fail_unless (gst_element_set_state (mpeg2dec,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
- "could not set to playing");
- bus = gst_bus_new ();
-
- /* initialize the buffer with something that is no mpeg2 */
- tmpbuf = g_new (guint32, 4096);
- for (i = 0; i < 4096; i++) {
- tmpbuf[i] = i;
- }
- inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
-
- ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
- gst_buffer_ref (inbuffer);
-
- gst_element_set_bus (mpeg2dec, bus);
-
- /* should be possible to push without problems but nothing gets decoded */
- fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
- gst_buffer_unref (inbuffer);
-
- num_buffers = g_list_length (buffers);
-
- /* should be 0 buffers as decoding should've been impossible */
- fail_unless_equals_int (num_buffers, 0);
-
- g_list_free (buffers);
- buffers = NULL;
-
- gst_bus_set_flushing (bus, TRUE);
- gst_element_set_bus (mpeg2dec, NULL);
- gst_object_unref (GST_OBJECT (bus));
- cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-Suite *
-mpeg2dec_suite (void)
-{
- Suite *s = suite_create ("mpeg2dec");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_decode_stream1);
- tcase_add_test (tc_chain, test_decode_stream2);
- tcase_add_test (tc_chain, test_decode_garbage);
-
- return s;
-}
-
-GST_CHECK_MAIN (mpeg2dec);
+++ /dev/null
-/* GStreamer
- *
- * unit test for x264enc
- *
- * Copyright (C) <2008> Mark Nauwelaerts <mnauw@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/check/gstcheck.h>
-#include <gst/video/video.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-#define VIDEO_CAPS_STRING "video/x-raw, " \
- "width = (int) 384, " \
- "height = (int) 288, " \
- "framerate = (fraction) 25/1"
-
-#define H264_CAPS_STRING "video/x-h264, " \
- "width = (int) 384, " \
- "height = (int) 288, " \
- "framerate = (fraction) 25/1"
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (VIDEO_CAPS_STRING));
-
-static void cleanup_x264enc (GstElement * x264enc);
-
-static GstElement *
-setup_x264enc (const gchar * profile, const gchar * stream_format,
- GstVideoFormat input_format)
-{
- GstPadTemplate *sink_tmpl, *tmpl;
- GstElement *x264enc;
- GstCaps *caps, *tmpl_caps;
-
- GST_DEBUG ("setup_x264enc");
-
- caps = gst_caps_from_string (H264_CAPS_STRING);
- gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile,
- "stream-format", G_TYPE_STRING, stream_format, NULL);
- sink_tmpl = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
- gst_caps_unref (caps);
-
- x264enc = gst_check_setup_element ("x264enc");
- mysrcpad = gst_check_setup_src_pad (x264enc, &srctemplate);
- mysinkpad = gst_check_setup_sink_pad_from_template (x264enc, sink_tmpl);
- gst_pad_set_active (mysrcpad, TRUE);
- gst_pad_set_active (mysinkpad, TRUE);
-
- caps = gst_caps_from_string (VIDEO_CAPS_STRING);
- gst_caps_set_simple (caps, "format", G_TYPE_STRING,
- gst_video_format_to_string (input_format), NULL);
-
- tmpl = gst_element_get_pad_template (x264enc, "sink");
- tmpl_caps = gst_pad_template_get_caps (tmpl);
-
- if (gst_caps_can_intersect (caps, tmpl_caps)) {
- gst_check_setup_events (mysrcpad, x264enc, caps, GST_FORMAT_TIME);
- } else {
- cleanup_x264enc (x264enc);
- x264enc = NULL;
- }
-
- gst_caps_unref (tmpl_caps);
- gst_caps_unref (caps);
- gst_object_unref (sink_tmpl);
-
- return x264enc;
-}
-
-static void
-cleanup_x264enc (GstElement * x264enc)
-{
- GST_DEBUG ("cleanup_x264enc");
- gst_element_set_state (x264enc, GST_STATE_NULL);
-
- gst_pad_set_active (mysrcpad, FALSE);
- gst_pad_set_active (mysinkpad, FALSE);
- gst_check_teardown_src_pad (x264enc);
- gst_check_teardown_sink_pad (x264enc);
- gst_check_teardown_element (x264enc);
-}
-
-static void
-check_caps (GstCaps * caps, const gchar * profile, gint profile_id)
-{
- GstStructure *s;
- const GValue *sf, *avcc, *pf;
- const gchar *stream_format;
- const gchar *caps_profile;
-
- fail_unless (caps != NULL);
-
- GST_INFO ("caps %" GST_PTR_FORMAT, caps);
- s = gst_caps_get_structure (caps, 0);
- fail_unless (s != NULL);
- fail_if (!gst_structure_has_name (s, "video/x-h264"));
- sf = gst_structure_get_value (s, "stream-format");
- fail_unless (sf != NULL);
- fail_unless (G_VALUE_HOLDS_STRING (sf));
- stream_format = g_value_get_string (sf);
- fail_unless (stream_format != NULL);
- if (strcmp (stream_format, "avc") == 0) {
- GstMapInfo map;
- GstBuffer *buf;
-
- avcc = gst_structure_get_value (s, "codec_data");
- fail_unless (avcc != NULL);
- fail_unless (GST_VALUE_HOLDS_BUFFER (avcc));
- buf = gst_value_get_buffer (avcc);
- fail_unless (buf != NULL);
- gst_buffer_map (buf, &map, GST_MAP_READ);
- fail_unless_equals_int (map.data[0], 1);
- fail_unless (map.data[1] == profile_id,
- "Expected profile ID %#04x, got %#04x", profile_id, map.data[1]);
- gst_buffer_unmap (buf, &map);
- } else if (strcmp (stream_format, "byte-stream") == 0) {
- fail_if (gst_structure_get_value (s, "codec_data") != NULL);
- } else {
- fail_if (TRUE, "unexpected stream-format in caps: %s", stream_format);
- }
-
- pf = gst_structure_get_value (s, "profile");
- fail_unless (pf != NULL);
- fail_unless (G_VALUE_HOLDS_STRING (pf));
- caps_profile = g_value_get_string (pf);
- fail_unless (caps_profile != NULL);
- fail_unless (!strcmp (caps_profile, profile));
-}
-
-static const GstVideoFormat formats_420_8[] =
- { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_NV12,
- GST_VIDEO_FORMAT_UNKNOWN
-};
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-static const GstVideoFormat formats_420_10[] =
- { GST_VIDEO_FORMAT_I420_10LE, GST_VIDEO_FORMAT_UNKNOWN };
-static const GstVideoFormat formats_422[] =
- { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10LE,
- GST_VIDEO_FORMAT_UNKNOWN
-};
-
-static const GstVideoFormat formats_444[] =
- { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10LE,
- GST_VIDEO_FORMAT_UNKNOWN
-};
-#else
-static const GstVideoFormat formats_420_10[] =
- { GST_VIDEO_FORMAT_I420_10BE, GST_VIDEO_FORMAT_UNKNOWN };
-static const GstVideoFormat formats_422[] =
- { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10BE,
- GST_VIDEO_FORMAT_UNKNOWN
-};
-
-static const GstVideoFormat formats_444[] =
- { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10BE,
- GST_VIDEO_FORMAT_UNKNOWN
-};
-#endif
-
-static void
-test_video_profile (const gchar * profile, gint profile_id,
- const GstVideoFormat input_formats[], gint input_format_index)
-{
- GstVideoFormat input_format = input_formats[input_format_index];
- GstElement *x264enc;
- GstBuffer *inbuffer, *outbuffer;
- int i, num_buffers;
- GstVideoInfo vinfo;
- GstCaps *caps;
-
- fail_unless (gst_video_info_set_format (&vinfo, input_format, 384, 288));
-
- x264enc = setup_x264enc (profile, "avc", input_format);
- if (x264enc == NULL) {
- g_printerr ("WARNING: input format '%s' not supported\n",
- gst_video_format_to_string (input_format));
- return;
- }
-
- fail_unless (gst_element_set_state (x264enc,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
- "could not set to playing");
-
- /* check that we only accept input formats compatible with the output caps */
- caps = gst_pad_peer_query_caps (mysrcpad, NULL);
- for (i = 0; i < gst_caps_get_size (caps); i++) {
- GstStructure *s = gst_caps_get_structure (caps, i);
- const GValue *v, *vi;
- guint vlen, j = 0;
-
- v = gst_structure_get_value (s, "format");
-
- if (G_VALUE_TYPE (v) == G_TYPE_STRING) {
- vlen = 1;
- vi = v;
- } else if (G_VALUE_TYPE (v) == GST_TYPE_LIST) {
- vlen = gst_value_list_get_size (v);
- fail_unless (vlen > 0, "Got empty format list");
- vi = gst_value_list_get_value (v, 0);
- } else {
- fail ("Bad format in structure: %" GST_PTR_FORMAT, s);
- g_assert_not_reached ();
- }
-
- while (TRUE) {
- const gchar *str = g_value_get_string (vi);
- GstVideoFormat format = gst_video_format_from_string (str);
- int k;
-
- for (k = 0;; k++) {
- fail_unless (input_formats[k] != GST_VIDEO_FORMAT_UNKNOWN,
- "Bad format: %s", str);
- if (input_formats[k] == format)
- break;
- }
-
- if (++j < vlen)
- vi = gst_value_list_get_value (v, j);
- else
- break;
- }
- }
- gst_caps_unref (caps);
-
- /* corresponds to buffer for the size mentioned in the caps */
- inbuffer = gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&vinfo));
-
- /* makes valgrind's memcheck happier */
- gst_buffer_memset (inbuffer, 0, 0, -1);
- GST_BUFFER_TIMESTAMP (inbuffer) = 0;
- ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
- fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
-
- /* send eos to have all flushed if needed */
- fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
-
- num_buffers = g_list_length (buffers);
- fail_unless (num_buffers == 1);
-
- /* check output caps */
- {
- GstCaps *outcaps;
-
- outcaps = gst_pad_get_current_caps (mysinkpad);
- check_caps (outcaps, profile, profile_id);
- gst_caps_unref (outcaps);
- }
-
- /* validate buffers */
- for (i = 0; i < num_buffers; ++i) {
- outbuffer = GST_BUFFER (buffers->data);
- fail_if (outbuffer == NULL);
-
- switch (i) {
- case 0:
- {
- gint nsize, npos, j, type, next_type;
- GstMapInfo map;
- const guint8 *data;
- gsize size;
-
- gst_buffer_map (outbuffer, &map, GST_MAP_READ);
- data = map.data;
- size = map.size;
-
- npos = 0;
- j = 0;
- /* need SPS first */
- next_type = 7;
- /* loop through NALs */
- while (npos < size) {
- fail_unless (size - npos >= 4);
- nsize = GST_READ_UINT32_BE (data + npos);
- fail_unless (nsize > 0);
- fail_unless (npos + 4 + nsize <= size);
- type = data[npos + 4] & 0x1F;
- /* check the first NALs, disregard AU (9), SEI (6) */
- if (type != 9 && type != 6) {
- fail_unless (type == next_type);
- switch (type) {
- case 7:
- /* SPS */
- next_type = 8;
- break;
- case 8:
- /* PPS */
- next_type = 5;
- break;
- default:
- break;
- }
- j++;
- }
- npos += nsize + 4;
- }
- gst_buffer_unmap (outbuffer, &map);
- /* should have reached the exact end */
- fail_unless (npos == size);
- break;
- }
- default:
- break;
- }
-
- buffers = g_list_remove (buffers, outbuffer);
-
- ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
- gst_buffer_unref (outbuffer);
- outbuffer = NULL;
- }
-
- cleanup_x264enc (x264enc);
- g_list_free (buffers);
- buffers = NULL;
-}
-
-GST_START_TEST (test_video_baseline)
-{
- gint i;
-
- for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("constrained-baseline", 0x42, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_main)
-{
- gint i;
-
- for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("main", 0x4d, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high)
-{
- gint i;
-
- for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("high", 0x64, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high10)
-{
- gint i;
-
- for (i = 0; formats_420_10[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("high-10", 0x6e, formats_420_10, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high422)
-{
- gint i;
-
- for (i = 0; formats_422[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("high-4:2:2", 0x7A, formats_422, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high444)
-{
- gint i;
-
- for (i = 0; formats_444[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
- test_video_profile ("high-4:4:4", 0xF4, formats_444, i);
-}
-
-GST_END_TEST;
-
-Suite *
-x264enc_suite (void)
-{
- Suite *s = suite_create ("x264enc");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_video_baseline);
- tcase_add_test (tc_chain, test_video_main);
- tcase_add_test (tc_chain, test_video_high);
- tcase_add_test (tc_chain, test_video_high10);
- tcase_add_test (tc_chain, test_video_high422);
- tcase_add_test (tc_chain, test_video_high444);
-
- return s;
-}
-
-GST_CHECK_MAIN (x264enc);
+++ /dev/null
-/* GStreamer
- *
- * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * xingmux.c: Unit test for the xingmux element
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/check/gstcheck.h>
-
-#include <math.h>
-
-#include "xingmux_testdata.h"
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-GstPad *mysrcpad, *mysinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
- );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
- );
-
-GstElement *
-setup_xingmux ()
-{
- GstElement *xingmux;
- GstCaps *caps;
-
- GST_DEBUG ("setup_xingmux");
- xingmux = gst_check_setup_element ("xingmux");
- mysrcpad = gst_check_setup_src_pad (xingmux, &srctemplate);
- mysinkpad = gst_check_setup_sink_pad (xingmux, &sinktemplate);
- gst_pad_set_active (mysrcpad, TRUE);
- gst_pad_set_active (mysinkpad, TRUE);
-
- caps = gst_caps_new_simple ("audio/mpeg",
- "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
- gst_check_setup_events (mysrcpad, xingmux, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
-
- return xingmux;
-}
-
-void
-cleanup_xingmux (GstElement * xingmux)
-{
- GST_DEBUG ("cleanup_xingmux");
-
- g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
- g_list_free (buffers);
- buffers = NULL;
-
- gst_pad_set_active (mysrcpad, FALSE);
- gst_pad_set_active (mysinkpad, FALSE);
- gst_check_teardown_src_pad (xingmux);
- gst_check_teardown_sink_pad (xingmux);
- gst_check_teardown_element (xingmux);
-}
-
-GST_START_TEST (test_xing_remux)
-{
- GstElement *xingmux;
- GstBuffer *inbuffer;
- GList *it;
- const guint8 *verify_data;
-
- xingmux = setup_xingmux ();
-
- fail_unless (gst_element_set_state (xingmux,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
- "could not set to playing");
-
- inbuffer = gst_buffer_new_and_alloc (sizeof (test_xing));
- gst_buffer_fill (inbuffer, 0, test_xing, sizeof (test_xing));
-
- ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
- /* pushing gives away my reference ... */
- fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
- fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
- /* ... and puts a new buffer on the global list */
- fail_unless_equals_int (g_list_length (buffers), 93);
-
- verify_data = test_xing;
- for (it = buffers; it != NULL; it = it->next) {
- GstBuffer *outbuffer = (GstBuffer *) it->data;
- GstMapInfo map;
-
- gst_buffer_map (outbuffer, &map, GST_MAP_READ);
-
- if (it == buffers) {
- gint j;
-
- /* Empty Xing header, should be the same as input data until the "Xing" marker
- * and zeroes afterwards. */
- fail_unless (memcmp (map.data, test_xing, 25) == 0);
- for (j = 26; j < map.size; j++)
- fail_unless (map.data[j] == 0);
- verify_data += map.size;
- } else if (it->next != NULL) {
- /* Should contain the raw MP3 data without changes */
- fail_unless (memcmp (map.data, verify_data, map.size) == 0);
- verify_data += map.size;
- } else {
- /* Last buffer is the rewrite of the first buffer and should be exactly the same
- * as the old Xing header we had */
- fail_unless (memcmp (test_xing, map.data, map.size) == 0);
- }
- gst_buffer_unmap (outbuffer, &map);
- }
-
- /* cleanup */
- cleanup_xingmux (xingmux);
-}
-
-GST_END_TEST;
-
-Suite *
-xingmux_suite (void)
-{
- Suite *s = suite_create ("xingmux");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_xing_remux);
-
- return s;
-}
-
-GST_CHECK_MAIN (xingmux);
+++ /dev/null
-static const guint8 test_xing[] = {
-0xff, 0xfb, 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x6e,
-0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-0x5c, 0x00, 0x00, 0x95, 0x2e, 0x00, 0x03, 0x06,
-0x09, 0x0c, 0x0f, 0x11, 0x14, 0x17, 0x1a, 0x1d,
-0x1f, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2d, 0x30,
-0x33, 0x36, 0x39, 0x3b, 0x3b, 0x3e, 0x41, 0x44,
-0x47, 0x49, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x57,
-0x5a, 0x5d, 0x60, 0x63, 0x65, 0x68, 0x6b, 0x6e,
-0x71, 0x73, 0x73, 0x76, 0x79, 0x7c, 0x7f, 0x81,
-0x84, 0x87, 0x8a, 0x8d, 0x8f, 0x8f, 0x92, 0x95,
-0x98, 0x9b, 0x9d, 0xa0, 0xa3, 0xa6, 0xa9, 0xab,
-0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xb9, 0xbc, 0xbf,
-0xc2, 0xc5, 0xc7, 0xc7, 0xca, 0xcd, 0xd0, 0xd3,
-0xd5, 0xd8, 0xdb, 0xde, 0xe1, 0xe3, 0xe3, 0xe6,
-0xe9, 0xec, 0xef, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd,
-0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0xff, 0xfb, 0x90, 0xc4,
-0x00, 0x03, 0x8f, 0xd4, 0x59, 0x42, 0x6d, 0xe1,
-0x27, 0x02, 0xde, 0x92, 0x67, 0x09, 0xed, 0x25,
-0x29, 0x00, 0x00, 0x0a, 0x70, 0xcc, 0x4b, 0x4c,
-0xac, 0xbc, 0xcc, 0x4a, 0xcc, 0xbd, 0x24, 0xd7,
-0xce, 0xcc, 0xca, 0xa8, 0xf5, 0x2b, 0x8d, 0x80,
-0xa8, 0xfd, 0x43, 0x9a, 0xc1, 0xcb, 0x43, 0x30,
-0x10, 0xd0, 0x06, 0x91, 0x6a, 0x0e, 0xbb, 0xd9,
-0x7b, 0x5c, 0x72, 0x1c, 0x87, 0x20, 0x0c, 0x02,
-0x00, 0x80, 0x60, 0x50, 0x2b, 0x15, 0x8a, 0xc5,
-0x62, 0xb2, 0x74, 0x68, 0xd1, 0xa0, 0x40, 0x81,
-0x02, 0x04, 0x08, 0x18, 0x04, 0xc1, 0xf0, 0x7c,
-0x1f, 0x07, 0xc1, 0x00, 0x40, 0x10, 0x04, 0x01,
-0x30, 0x7c, 0x1f, 0x07, 0xc1, 0xf0, 0x40, 0x10,
-0x04, 0x01, 0x03, 0x22, 0x70, 0xff, 0xe6, 0x4b,
-0x87, 0xff, 0x97, 0x07, 0xc1, 0xfb, 0xbf, 0xc1,
-0x00, 0x40, 0x10, 0x0c, 0x27, 0xfc, 0xb8, 0x3e,
-0x0f, 0x83, 0xe1, 0xf0, 0x40, 0x10, 0x04, 0x01,
-0x04, 0x89, 0xc1, 0xf0, 0x7e, 0xe2, 0x80, 0x80,
-0x34, 0x60, 0x02, 0x05, 0x06, 0x08, 0xa0, 0xa0,
-0x60, 0xba, 0x0f, 0x06, 0x11, 0xa0, 0xf8, 0x61,
-0x0e, 0x25, 0x06, 0x51, 0xab, 0x64, 0x67, 0xb4,
-0x1b, 0x66, 0x12, 0x01, 0x3a, 0x60, 0xf0, 0x0a,
-0x26, 0x06, 0x20, 0x90, 0x70, 0x53, 0x1a, 0x38,
-0x80, 0x12, 0x86, 0x3c, 0x51, 0x87, 0x0c, 0x61,
-0x41, 0x18, 0x10, 0x00, 0x10, 0x05, 0xc1, 0x2f,
-0x0a, 0x0e, 0xa4, 0x4a, 0x82, 0xaa, 0x55, 0x8a,
-0xbb, 0x56, 0x15, 0x87, 0x33, 0xa6, 0x74, 0xe5,
-0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x06, 0x04,
-0x41, 0x10, 0x44, 0x11, 0x14, 0x8a, 0x45, 0x22,
-0x91, 0x48, 0xa8, 0x54, 0x2a, 0x15, 0x13, 0x22,
-0x44, 0x88, 0x89, 0x0a, 0x14, 0x28, 0x50, 0xa1,
-0x42, 0x85, 0x0a, 0x24, 0x48, 0x91, 0x22, 0x44,
-0x89, 0x12, 0x25, 0x41, 0x41, 0x41, 0x41, 0x42,
-0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 0x41,
-0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41,
-0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41,
-0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41,
-0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82,
-0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82,
-0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82,
-0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x95,
-0x32, 0x88, 0xad, 0x32, 0xe4, 0xdc, 0x34, 0x09,
-0x55, 0x36, 0xd6, 0x8e, 0x30, 0xf8, 0x87, 0xdd,
-0x36, 0x72, 0xfd, 0x01, 0x36, 0x47, 0x87, 0xab,
-0x30, 0xe7, 0xc2, 0x26, 0x30, 0x42, 0x80, 0x71,
-0x30, 0x0e, 0xc0, 0x94, 0x36, 0xa3, 0x8c, 0xe3,
-0x3b, 0x43, 0x5f, 0xa1, 0x8c, 0x50, 0x07, 0x43,
-0x67, 0x16, 0x5d, 0xe2, 0x17, 0xf6, 0xbf, 0xdd,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xbf, 0xff, 0xe9, 0x30, 0x05, 0xc0, 0x37, 0x30,
-0x1e, 0x80, 0x9e, 0x30, 0x3d, 0x41, 0x33, 0x30,
-0x73, 0x82, 0x72, 0x31, 0x0c, 0xff, 0xfb, 0x92,
-0xc4, 0x2a, 0x83, 0xc8, 0x60, 0x25, 0x16, 0x0e,
-0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 0xff,
-0xec, 0x90, 0xc7, 0x7f, 0x36, 0xd8, 0xb9, 0x6d,
-0x36, 0xaf, 0xc7, 0x81, 0x31, 0x13, 0x02, 0xaa,
-0x30, 0x83, 0x41, 0xbb, 0x30, 0x49, 0x41, 0x3b,
-0x30, 0x44, 0x81, 0x14, 0x30, 0x45, 0x41, 0xd5,
-0x3a, 0xf8, 0xf3, 0x22, 0x06, 0x47, 0xf6, 0xb8,
-0xff, 0xc3, 0x94, 0x99, 0x9c, 0xed, 0xfa, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xd6, 0x32, 0x84, 0xae, 0x32, 0xd8, 0xe3,
-0x33, 0xed, 0x5e, 0x36, 0x9a, 0xa1, 0x30, 0xf0,
-0xc8, 0x12, 0x36, 0x3e, 0x3e, 0x9e, 0x36, 0x14,
-0xc7, 0xe2, 0x30, 0xdf, 0x02, 0x3d, 0x30, 0x3d,
-0xc0, 0x84, 0x30, 0x12, 0x00, 0x87, 0x36, 0xfb,
-0x60, 0xe4, 0x1a, 0x73, 0x62, 0x20, 0x4c, 0x56,
-0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52,
-0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xa0, 0xc0, 0x26, 0x00, 0xe0, 0xc0,
-0x97, 0x02, 0xbc, 0xc1, 0x22, 0x05, 0x50, 0xc2,
-0x23, 0x0a, 0xdc, 0xc4, 0xea, 0x21, 0x18, 0xe0,
-0x01, 0xfd, 0x18, 0xdf, 0x3e, 0x21, 0x28, 0xc5,
-0x05, 0x0b, 0xec, 0xc2, 0x60, 0x07, 0xe0, 0xc1,
-0x4e, 0x05, 0xb8, 0xc1, 0x35, 0x05, 0x1c, 0xc1,
-0x34, 0x08, 0xa0, 0xf1, 0x2a, 0x8c, 0xac, 0x35,
-0x00, 0x0c, 0xed, 0xd8, 0x87, 0xe9, 0xec, 0x3d,
-0x5f, 0xea, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff,
-0xf7, 0xd7, 0xff, 0xff, 0xff, 0xf5, 0x26, 0x20,
-0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x20, 0x97,
-0x32, 0x64, 0xc6, 0x33, 0x41, 0x39, 0x35, 0x86,
-0x5a, 0x30, 0xca, 0x87, 0x43, 0x35, 0x4a, 0xf8,
-0x53, 0x35, 0x27, 0x07, 0x17, 0x30, 0xbb, 0x42,
-0x04, 0x30, 0x30, 0x80, 0x81, 0x30, 0x11, 0xc0,
-0x68, 0x36, 0x42, 0xcc, 0xe0, 0x36, 0x03, 0x56,
-0x9a, 0x00, 0x44, 0x54, 0xd6, 0x75, 0x67, 0x94,
-0x12, 0xeb, 0xfa, 0x0c, 0x02, 0xf0, 0x0b, 0xcc,
-0x09, 0xe0, 0x29, 0x0c, 0x12, 0xd0, 0x51, 0xcc,
-0x23, 0x00, 0xa7, 0x0c, 0x50, 0x91, 0xff, 0x4e,
-0x0c, 0x0f, 0x42, 0xcd, 0xff, 0xb2, 0x00, 0xcc,
-0x52, 0x00, 0xb9, 0x8c, 0x26, 0x90, 0x7d, 0x4c,
-0x14, 0xd0, 0x5c, 0xcc, 0x12, 0xc0, 0x53, 0x0c,
-0x12, 0x90, 0x8d, 0xce, 0xf6, 0xc4, 0xc9, 0x83,
-0x90, 0x7d, 0x9c, 0x3f, 0xf0, 0xe5, 0x25, 0xff,
-0xfb, 0x92, 0xc4, 0xaa, 0x83, 0xc8, 0x18, 0x23,
-0x16, 0x0e, 0xff, 0x82, 0x81, 0x2d, 0x85, 0x22,
-0x81, 0xff, 0xec, 0x90, 0xbe, 0x5b, 0xbf, 0xff,
-0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x8f, 0xff,
-0xfa, 0x3f, 0xd1, 0xf6, 0xe8, 0x4c, 0x41, 0x4d,
-0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32,
-0x1c, 0x98, 0x32, 0x50, 0xcb, 0x33, 0x25, 0x3e,
-0x35, 0x4a, 0x6b, 0x30, 0xc3, 0x47, 0x6c, 0x35,
-0x19, 0x39, 0x9a, 0x34, 0xf6, 0xc7, 0x42, 0x30,
-0xb2, 0x82, 0x17, 0x30, 0x2c, 0x40, 0x90, 0x30,
-0x14, 0x80, 0x5d, 0x36, 0x7a, 0xa0, 0xe1, 0x15,
-0x33, 0x59, 0x19, 0x40, 0x44, 0xa4, 0xd5, 0x75,
-0xa7, 0x56, 0x1c, 0xea, 0xfa, 0x7f, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x18, 0x07,
-0x00, 0x12, 0x18, 0x14, 0xa0, 0x4d, 0x98, 0x26,
-0x80, 0x9c, 0x18, 0x47, 0xa1, 0x41, 0x98, 0xa4,
-0x83, 0xd7, 0x1c, 0x2e, 0xfd, 0x5c, 0x1c, 0x15,
-0x83, 0xdc, 0x18, 0xa7, 0x21, 0x68, 0x98, 0x4d,
-0x80, 0xf7, 0x18, 0x29, 0x00, 0xba, 0x18, 0x24,
-0xa0, 0xaa, 0x98, 0x23, 0xc1, 0x21, 0x1d, 0x95,
-0xa1, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
-0xc8, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 0x33,
-0x05, 0x62, 0x81, 0xff, 0xec, 0x90, 0x92, 0x87,
-0xa0, 0xe3, 0x3b, 0x76, 0x21, 0xfa, 0x7b, 0x0f,
-0x56, 0x8f, 0xab, 0xfd, 0x54, 0x7f, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xd4, 0x98,
-0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0x32, 0x18, 0x99, 0x32, 0x44, 0xce, 0x33,
-0x01, 0x47, 0x35, 0x16, 0x78, 0x30, 0xba, 0x87,
-0x97, 0x34, 0xe5, 0x7a, 0xcf, 0x34, 0xc3, 0x87,
-0x6d, 0x30, 0xaa, 0x42, 0x26, 0x30, 0x27, 0x00,
-0xa1, 0x30, 0x17, 0x40, 0x4e, 0x36, 0xb2, 0x7c,
-0xe1, 0xf4, 0x43, 0x5b, 0x97, 0x80, 0xc4, 0x94,
-0xd6, 0x75, 0x67, 0x86, 0x13, 0xeb, 0xfa, 0x3f,
-0xe8, 0x30, 0x10, 0x40, 0x1b, 0x30, 0x2b, 0x00,
-0x90, 0x30, 0x4f, 0x41, 0x2b, 0x30, 0x92, 0x02,
-0x68, 0x31, 0x4f, 0xc7, 0x5f, 0x38, 0x88, 0xb8,
-0x4d, 0x38, 0x54, 0xc7, 0x6b, 0x31, 0x54, 0x02,
-0xba, 0x30, 0x9c, 0xc1, 0xeb, 0x30, 0x51, 0x41,
-0x79, 0x30, 0x46, 0x81, 0x5a, 0x30, 0x44, 0xc2,
-0x4f, 0x3a, 0xbb, 0x93, 0x22, 0x10, 0x41, 0xf6,
-0x70, 0xed, 0xc6, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xc7, 0xe4, 0x23, 0x18, 0x0e, 0xff, 0x82,
-0x81, 0x2f, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90,
-0x29, 0x2d, 0xf2, 0xdd, 0xfe, 0x8f, 0xfb, 0x6f,
-0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xd1,
-0xfe, 0x8f, 0xb7, 0x42, 0x62, 0x0a, 0x6a, 0x29,
-0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x32, 0x14, 0x98, 0x32, 0x30,
-0xd3, 0x32, 0xe5, 0x4c, 0x34, 0xda, 0x85, 0x30,
-0xb2, 0x47, 0xbc, 0x34, 0xae, 0xbb, 0xf0, 0x34,
-0x8e, 0xc7, 0x94, 0x30, 0xa1, 0x02, 0x37, 0x30,
-0x21, 0xc0, 0xae, 0x30, 0x19, 0x80, 0x43, 0x36,
-0xea, 0x58, 0xe2, 0x93, 0x53, 0x5d, 0x16, 0xc0,
-0xc4, 0xe4, 0xd5, 0x75, 0xa4, 0x2b, 0x67, 0x52,
-0x0c, 0x05, 0x60, 0x05, 0x0c, 0x0d, 0x10, 0x27,
-0x4c, 0x17, 0x40, 0x51, 0x0c, 0x2a, 0xb0, 0xa8,
-0x4c, 0x61, 0x82, 0x02, 0x0e, 0x79, 0xbf, 0x50,
-0x8e, 0x6a, 0x82, 0x06, 0x0c, 0x62, 0x90, 0xc1,
-0xcc, 0x2d, 0x20, 0x8a, 0x8c, 0x17, 0x20, 0x6c,
-0x8c, 0x13, 0xb0, 0x65, 0x4c, 0x12, 0xc0, 0xac,
-0x8e, 0xf3, 0x68, 0xc9, 0xc5, 0xcb, 0xb8, 0xc3,
-0xdd, 0x87, 0xfe, 0x5f, 0x60, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xc7, 0x00, 0x23, 0x18, 0x0e,
-0xff, 0x82, 0x81, 0x36, 0x85, 0x62, 0x81, 0xff,
-0xec, 0x90, 0xfa, 0xb2, 0x5f, 0x7f, 0xaf, 0xaa,
-0x8f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff,
-0xef, 0xff, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14,
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x08, 0x9b,
-0x32, 0x1c, 0xd4, 0x32, 0xc1, 0x53, 0x34, 0x9e,
-0x90, 0x30, 0xa9, 0x87, 0xe1, 0x34, 0x76, 0x7c,
-0xff, 0x34, 0x57, 0x87, 0xb9, 0x30, 0x98, 0x42,
-0x46, 0x30, 0x1c, 0x00, 0xbd, 0x30, 0x1c, 0x40,
-0x34, 0x37, 0x22, 0x34, 0xe3, 0x72, 0x43, 0x5f,
-0x95, 0x01, 0x45, 0x14, 0xba, 0x75, 0x67, 0xb0,
-0x15, 0x67, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51,
-0x80, 0xbe, 0x00, 0x39, 0x81, 0xac, 0x04, 0x71,
-0x82, 0xfa, 0x09, 0x99, 0x85, 0x6c, 0x14, 0x01,
-0x8c, 0x66, 0x3d, 0x29, 0xd0, 0x8d, 0xd2, 0x39,
-0xce, 0x9e, 0x3d, 0xc9, 0x8c, 0x80, 0x17, 0x51,
-0x85, 0xae, 0x11, 0x19, 0x82, 0xda, 0x0d, 0xa9,
-0x82, 0x60, 0x0c, 0xd1, 0x82, 0x3e, 0x15, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa8, 0x23,
-0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3a, 0x05, 0x22,
-0x41, 0xff, 0xec, 0x90, 0xf9, 0xd8, 0xf0, 0x99,
-0x20, 0xc1, 0x77, 0xd8, 0x63, 0xb7, 0x0c, 0x4b,
-0x2d, 0xb9, 0x6f, 0x91, 0xfb, 0xbd, 0x5d, 0x74,
-0xff, 0xff, 0xff, 0xff, 0xef, 0x5b, 0x5d, 0xff,
-0xff, 0x77, 0xfb, 0xbd, 0x69, 0x88, 0x29, 0xa8,
-0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x32,
-0x04, 0x9a, 0x32, 0x08, 0xd7, 0x32, 0xa5, 0x58,
-0x34, 0x52, 0x9d, 0x30, 0xa0, 0x48, 0x02, 0x34,
-0x3b, 0xbd, 0xfa, 0x34, 0x1e, 0xc7, 0xda, 0x30,
-0x8e, 0x02, 0x55, 0x30, 0x16, 0xc0, 0xca, 0x30,
-0x1e, 0x80, 0x25, 0x37, 0x5a, 0x00, 0xe4, 0x11,
-0x53, 0x60, 0x13, 0xc1, 0x45, 0x24, 0xb9, 0x75,
-0xa4, 0x21, 0x76, 0x7a, 0x01, 0xc0, 0x78, 0x18,
-0x20, 0x20, 0x4b, 0x98, 0x37, 0xc0, 0xa6, 0x18,
-0x65, 0x21, 0x5b, 0x98, 0xe5, 0xc4, 0x21, 0x1d,
-0xd2, 0xbf, 0x6c, 0x1d, 0xae, 0xc4, 0x2e, 0x18,
-0xe7, 0x61, 0x9b, 0x98, 0x68, 0x41, 0x35, 0x18,
-0x33, 0x80, 0xfc, 0x18, 0x2a, 0x20, 0xef, 0x98,
-0x27, 0x01, 0x98, 0x1b, 0x02, 0x0c, 0x62, 0x91,
-0x09, 0x67, 0x16, 0x1d, 0xac, 0x3f, 0xf1, 0xbb,
-0x0f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8,
-0x54, 0x25, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3f,
-0x05, 0x22, 0x41, 0xff, 0xec, 0x90, 0x53, 0xa1,
-0xef, 0xbf, 0xd7, 0xfe, 0xef, 0xff, 0x5f, 0xd9,
-0xfb, 0xff, 0xdf, 0x5a, 0x3e, 0xff, 0x57, 0x7f,
-0xfb, 0xdd, 0xd4, 0x98, 0x82, 0x9a, 0x8a, 0x66,
-0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x31, 0xf8, 0x9b, 0x31, 0xf4, 0xd8, 0x32,
-0x79, 0x5f, 0x34, 0x16, 0xa6, 0x30, 0x96, 0x88,
-0x23, 0x33, 0xff, 0x7e, 0xe3, 0x33, 0xe3, 0x07,
-0xfb, 0x30, 0x84, 0x42, 0x62, 0x30, 0x10, 0x00,
-0xd9, 0x30, 0x20, 0xc0, 0x14, 0x37, 0x81, 0xdc,
-0xe4, 0xb0, 0x23, 0x62, 0x92, 0x01, 0xc5, 0x54,
-0xba, 0x79, 0x64, 0x41, 0x06, 0xdb, 0x5a, 0x46,
-0x81, 0x06, 0x30, 0x41, 0x80, 0x86, 0x30, 0x71,
-0xc1, 0x37, 0x30, 0xcd, 0x02, 0x8c, 0x31, 0xd2,
-0x47, 0xc9, 0x3b, 0xce, 0xbb, 0x2b, 0x3b, 0x86,
-0x47, 0xe5, 0x31, 0xd3, 0x83, 0x14, 0x30, 0xd1,
-0x42, 0x61, 0x30, 0x65, 0xc1, 0xf9, 0x30, 0x50,
-0x81, 0xe4, 0x30, 0x49, 0xc3, 0x3b, 0x35, 0xac,
-0x2c, 0xc4, 0x82, 0x22, 0xd5, 0xae, 0x46, 0xb6,
-0xfa, 0x4b, 0x2d, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xc6, 0xa8, 0x23, 0x18, 0x0e, 0xff, 0x82,
-0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 0xf0, 0x90,
-0xb8, 0xae, 0x47, 0xe3, 0x7d, 0x5d, 0x76, 0xfd,
-0x8f, 0xf7, 0x7f, 0x7f, 0xfb, 0xbf, 0xb1, 0xd5,
-0x7f, 0xf5, 0xf7, 0x7f, 0xbb, 0xd6, 0x98, 0x82,
-0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x31, 0xf4, 0x9a, 0x31, 0xe0,
-0xdd, 0x32, 0x55, 0x62, 0x33, 0xca, 0xb1, 0x30,
-0x8c, 0xc8, 0x3e, 0x33, 0xbf, 0xbf, 0xb8, 0x33,
-0xa5, 0x48, 0x18, 0x30, 0x79, 0x82, 0x6f, 0x30,
-0x09, 0x40, 0xe4, 0x30, 0x23, 0x00, 0x03, 0x37,
-0xa9, 0xa8, 0xe5, 0x4f, 0x13, 0x63, 0x10, 0xc2,
-0x0a, 0xc9, 0x72, 0xf3, 0x48, 0x42, 0xec, 0xf4,
-0x18, 0x14, 0x40, 0x03, 0x98, 0x27, 0x20, 0x45,
-0x98, 0x42, 0x00, 0xa5, 0x18, 0x76, 0xe1, 0x5d,
-0x99, 0x0d, 0x44, 0x28, 0x1e, 0xcf, 0x7f, 0x86,
-0x1e, 0xa5, 0x44, 0x3a, 0x19, 0x0d, 0xa1, 0xaf,
-0x98, 0x77, 0xc1, 0x56, 0x18, 0x39, 0x41, 0x22,
-0x18, 0x2c, 0x61, 0x18, 0x98, 0x27, 0x81, 0xdf,
-0x18, 0x18, 0x40, 0x9c, 0x18, 0x05, 0x20, 0x15,
-0x82, 0x00, 0x04, 0x02, 0x6e, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xc6, 0xc8, 0x23, 0x18, 0x0e,
-0xff, 0x82, 0xa1, 0x46, 0x85, 0x22, 0x01, 0xff,
-0xf0, 0x90, 0x15, 0x01, 0x2f, 0x1e, 0xe5, 0x03,
-0x76, 0xab, 0xce, 0xb3, 0x7c, 0x77, 0xf4, 0xaa,
-0x95, 0xaf, 0xb7, 0xa6, 0xff, 0xec, 0xfb, 0xaa,
-0xfa, 0xb7, 0x3e, 0x84, 0x7a, 0x9f, 0xd0, 0x9e,
-0xff, 0xa7, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14,
-0xcc, 0xb8, 0xe4, 0xde, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x98, 0x85,
-0x31, 0x84, 0xbe, 0x31, 0xd9, 0x37, 0x33, 0x06,
-0x60, 0x30, 0x71, 0x87, 0x51, 0x33, 0x10, 0x78,
-0x9d, 0x32, 0xfa, 0x07, 0x31, 0x30, 0x60, 0xc2,
-0x2a, 0x30, 0x00, 0x00, 0xcf, 0x1e, 0x03, 0xf8,
-0xdb, 0x05, 0x13, 0x83, 0xb0, 0x0d, 0x5e, 0x30,
-0x0c, 0x22, 0xa9, 0x27, 0x96, 0x7b, 0x02, 0x26,
-0x05, 0x58, 0x03, 0x46, 0x09, 0xf0, 0x0e, 0xc6,
-0x10, 0xc8, 0x25, 0xe6, 0x1e, 0x00, 0x51, 0x06,
-0x44, 0x18, 0xf7, 0x67, 0xb8, 0xc7, 0x51, 0x27,
-0xae, 0x28, 0xfc, 0x66, 0x44, 0x00, 0x66, 0x86,
-0x1e, 0x08, 0x53, 0xe6, 0x0e, 0x18, 0x48, 0xa6,
-0x0a, 0x80, 0x46, 0xc6, 0x09, 0x38, 0x79, 0x26,
-0xb1, 0x9e, 0x98, 0x90, 0x58, 0x0d, 0x02, 0xa9,
-0x43, 0x2b, 0x7d, 0x23, 0x13, 0xf6, 0x3a, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa4, 0x23,
-0x18, 0x0e, 0xff, 0x82, 0xa1, 0x7a, 0x87, 0xa1,
-0xc1, 0xff, 0xb4, 0x98, 0x05, 0xd8, 0xcf, 0x1b,
-0xfe, 0xb6, 0xa3, 0xec, 0x7f, 0xff, 0xeb, 0xfd,
-0x8d, 0xeb, 0xda, 0xea, 0xfe, 0x87, 0x7d, 0x75,
-0x9c, 0xe9, 0x59, 0xf1, 0xd7, 0x74, 0x2d, 0x31,
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31,
-0x94, 0x82, 0x31, 0x70, 0xc1, 0x31, 0xb5, 0x3a,
-0x32, 0xc2, 0x69, 0x30, 0x68, 0x47, 0x64, 0x32,
-0xd3, 0xb9, 0x38, 0x32, 0xbf, 0x47, 0x44, 0x30,
-0x56, 0x82, 0x35, 0x10, 0x01, 0xb4, 0x10, 0x08,
-0x61, 0xb7, 0x48, 0x87, 0x08, 0x57, 0x9a, 0xc0,
-0x56, 0x1c, 0x46, 0x54, 0x2f, 0x34, 0xee, 0x75,
-0x18, 0x1a, 0x00, 0x1b, 0x98, 0x2f, 0x20, 0x39,
-0x98, 0x4e, 0x00, 0x9e, 0x18, 0x8a, 0xe1, 0x55,
-0x99, 0x39, 0x84, 0x0f, 0x1f, 0xec, 0x7e, 0xa7,
-0x1f, 0xbb, 0x44, 0x29, 0x19, 0x38, 0xe1, 0xbc,
-0x98, 0x89, 0x01, 0x77, 0x18, 0x3f, 0x41, 0x4c,
-0x18, 0x2d, 0xe1, 0x46, 0x98, 0x27, 0x02, 0x2f,
-0x18, 0x17, 0x40, 0xb8, 0x18, 0x04, 0xe0, 0x1b,
-0x83, 0x00, 0x08, 0x03, 0x2c, 0x26, 0x82, 0x4e,
-0x39, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
-0x4c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x69,
-0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0xc9, 0x43,
-0xed, 0x49, 0x4d, 0x9d, 0xff, 0xd4, 0xea, 0xfd,
-0xd5, 0xfd, 0xd8, 0xe7, 0x7d, 0x48, 0xff, 0x5f,
-0xf4, 0xff, 0xe5, 0x5e, 0x96, 0xfc, 0xff, 0xf5,
-0x7f, 0xfd, 0xdb, 0x4d, 0xfd, 0x17, 0xd3, 0xe8,
-0xbf, 0xef, 0xfd, 0x07, 0xfd, 0x3a, 0x4f, 0xb2,
-0xbf, 0xfe, 0x09, 0xa9, 0x4c, 0x41, 0x4d, 0x45,
-0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0x31, 0x88, 0x83, 0x31, 0x5c, 0xc0, 0x31,
-0x91, 0x3f, 0x32, 0x7e, 0x6e, 0x30, 0x5e, 0x07,
-0x79, 0x32, 0x95, 0x79, 0xc1, 0x32, 0x82, 0x07,
-0x59, 0x30, 0x4c, 0x42, 0x3c, 0x30, 0x04, 0xc0,
-0xe3, 0x30, 0x23, 0x40, 0x07, 0x37, 0x00, 0xec,
-0xe1, 0xa9, 0xc3, 0x59, 0x89, 0x04, 0x89, 0x2a,
-0x89, 0xed, 0x93, 0xe0, 0x44, 0xc0, 0xdb, 0x01,
-0x20, 0xc1, 0x7e, 0x01, 0x60, 0xc2, 0x77, 0x04,
-0x6c, 0xc4, 0x60, 0x09, 0xb0, 0xc9, 0xe3, 0x1d,
-0x94, 0xff, 0xf0, 0xde, 0xe4, 0xfe, 0x65, 0x1e,
-0x74, 0xc9, 0xd6, 0x0d, 0x18, 0xc4, 0x47, 0x0b,
-0x7c, 0xc1, 0xef, 0x0a, 0x5c, 0xc1, 0x5a, 0x0a,
-0x48, 0xc1, 0x1d, 0x11, 0xa4, 0xc0, 0xa7, 0x05,
-0xd4, 0xc0, 0x20, 0x00, 0xe0, 0x2a, 0x00, 0x48,
-0x0e, 0xc0, 0x9b, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xc6, 0x24, 0x25, 0x1a, 0x0e, 0xff, 0x82,
-0xa9, 0xbb, 0xb3, 0x61, 0x81, 0xf6, 0x89, 0xb8,
-0x89, 0x20, 0xe4, 0x29, 0x9e, 0x4a, 0x8f, 0x9c,
-0xd7, 0xfd, 0x68, 0x27, 0xfb, 0x69, 0xff, 0x5d,
-0xad, 0xff, 0xd9, 0xed, 0xfb, 0xbf, 0xff, 0xff,
-0xa7, 0xcb, 0xdb, 0xd7, 0xfe, 0xfd, 0x2c, 0xdd,
-0x7e, 0xba, 0xd6, 0xdf, 0xa7, 0xcf, 0xd4, 0x46,
-0x8a, 0x06, 0x9f, 0xc6, 0x5f, 0x4a, 0xd3, 0x10,
-0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x31, 0x84, 0x82, 0x31, 0x40,
-0xc3, 0x31, 0x6d, 0x40, 0x32, 0x32, 0x75, 0x30,
-0x54, 0x47, 0x88, 0x32, 0x53, 0xba, 0x3a, 0x32,
-0x42, 0x47, 0x6a, 0x30, 0x41, 0x02, 0x45, 0x30,
-0x0b, 0x00, 0xec, 0x30, 0x24, 0x80, 0x16, 0x37,
-0x28, 0xb8, 0xe1, 0xc8, 0xb3, 0x59, 0x07, 0xc4,
-0x89, 0x4a, 0x85, 0xee, 0x93, 0x66, 0x58, 0xa9,
-0xc8, 0x0c, 0x07, 0xc0, 0x0a, 0xcc, 0x0d, 0xd0,
-0x06, 0x4c, 0x16, 0xe0, 0x21, 0x8c, 0x29, 0x30,
-0x4f, 0xcc, 0x5d, 0xe0, 0xf9, 0x0e, 0x64, 0x37,
-0x66, 0x8e, 0x55, 0x41, 0x02, 0x8c, 0x5d, 0x50,
-0x71, 0xce, 0x7e, 0x67, 0x0d, 0x12, 0x5f, 0x0c,
-0xb5, 0x5f, 0x4c, 0x8c, 0xa6, 0x0c, 0x4a, 0x34,
-0x8c, 0x03, 0x05, 0xd2, 0xd1, 0xb9, 0xbe, 0x92,
-0xb9, 0x7d, 0x8b, 0xff, 0x4f, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xc6, 0x78, 0x25, 0x1a, 0x0e,
-0xff, 0x82, 0xa9, 0xb2, 0x2c, 0x21, 0x81, 0xf6,
-0x89, 0xb8, 0x5e, 0xfa, 0x3a, 0x51, 0x51, 0xe4,
-0xaa, 0x8e, 0xa5, 0x29, 0x20, 0x30, 0x71, 0x3f,
-0xff, 0xff, 0xff, 0x7f, 0xff, 0xd5, 0xff, 0xef,
-0xff, 0xfa, 0x93, 0x10, 0x53, 0x51, 0x4c, 0xcb,
-0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x70, 0x81,
-0x31, 0x34, 0xc2, 0x31, 0x39, 0x43, 0x31, 0xee,
-0x78, 0x30, 0x49, 0x07, 0x97, 0x32, 0x0f, 0x7a,
-0xa3, 0x31, 0xff, 0x07, 0x79, 0x30, 0x35, 0xc2,
-0x4c, 0x30, 0x10, 0xc0, 0xf7, 0x30, 0x26, 0x40,
-0x25, 0x37, 0x40, 0x84, 0xe2, 0x27, 0x63, 0x5a,
-0x86, 0x05, 0x89, 0x2a, 0xb9, 0xed, 0x93, 0xd8,
-0x22, 0x60, 0x67, 0x80, 0xb4, 0x60, 0xac, 0x00,
-0x2c, 0x61, 0x18, 0x81, 0x66, 0x61, 0xf1, 0x03,
-0x50, 0x64, 0x64, 0x8a, 0x36, 0x7c, 0x75, 0x4c,
-0xc2, 0x7b, 0xc4, 0x8a, 0xb2, 0x64, 0x5a, 0x04,
-0xf8, 0x61, 0xdc, 0x84, 0xc2, 0x60, 0xcc, 0x84,
-0x7e, 0x60, 0x82, 0x04, 0x84, 0x60, 0x61, 0x87,
-0xd6, 0x66, 0x9a, 0x49, 0x83, 0x05, 0xc2, 0x30,
-0x2a, 0xc0, 0x34, 0xb8, 0x02, 0x31, 0x3f, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x46, 0x78, 0x25,
-0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x5a, 0x0c, 0xa2,
-0x9d, 0xfe, 0x88, 0xe0, 0x7b, 0xa0, 0x1a, 0x99,
-0xeb, 0x2f, 0xdc, 0x37, 0xad, 0x28, 0xbf, 0xfe,
-0xff, 0xef, 0xff, 0x3b, 0xfe, 0xea, 0xbe, 0xb7,
-0x7d, 0x3b, 0xbe, 0xfd, 0xdd, 0x0b, 0x4c, 0x41,
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0x16, 0xc0, 0x80, 0x30, 0x11, 0x80, 0xc3, 0x30,
-0x11, 0x41, 0x44, 0x30, 0x19, 0x02, 0x7d, 0x30,
-0x3d, 0xc7, 0xa2, 0x31, 0xc6, 0xba, 0xfa, 0x36,
-0xe1, 0x78, 0x63, 0x0a, 0x22, 0x55, 0x30, 0x58,
-0x0f, 0xe3, 0x09, 0xe0, 0x30, 0x30, 0xeb, 0x01,
-0x23, 0x11, 0x20, 0x63, 0x3b, 0x61, 0x11, 0xa4,
-0xa5, 0x5a, 0xf7, 0x49, 0xad, 0xe6, 0xcf, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xd2, 0x60, 0x6a, 0x00, 0xd2, 0x18,
-0x15, 0xf9, 0x84, 0x6c, 0x04, 0x71, 0x87, 0xce,
-0x0b, 0x49, 0x91, 0xa4, 0x22, 0xf1, 0xf2, 0x6f,
-0x05, 0x61, 0xef, 0xa0, 0x25, 0x11, 0x91, 0x7a,
-0x12, 0x59, 0x87, 0x64, 0x12, 0x71, 0x83, 0x1c,
-0x11, 0xd1, 0x81, 0xde, 0x12, 0x29, 0x81, 0x48,
-0x1f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6,
-0x7c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x60,
-0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0x71, 0x95,
-0x29, 0x46, 0x07, 0x17, 0x8a, 0x01, 0x16, 0x0d,
-0xb8, 0x40, 0x72, 0xf9, 0xce, 0xb9, 0x92, 0xbf,
-0x21, 0xec, 0x66, 0x60, 0x87, 0xea, 0xf7, 0xfd,
-0x3f, 0xbb, 0xff, 0x7e, 0x5a, 0xbf, 0xcb, 0xff,
-0xa7, 0xef, 0x74, 0x4d, 0xf6, 0x50, 0x98, 0x82,
-0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x15, 0x80, 0x7f, 0x30, 0x10, 0x40,
-0xc2, 0x30, 0x0e, 0x01, 0x47, 0x30, 0x14, 0x42,
-0x80, 0x30, 0x31, 0x87, 0xad, 0x31, 0x7a, 0x7b,
-0x41, 0x35, 0xb4, 0x79, 0x13, 0x06, 0xd2, 0x5a,
-0x30, 0x6b, 0x10, 0x73, 0x0a, 0x50, 0x3d, 0x30,
-0xee, 0x00, 0x53, 0x11, 0x50, 0x4c, 0x3b, 0x70,
-0xa1, 0xe4, 0xd5, 0x5c, 0xf6, 0xc9, 0xec, 0x60,
-0xde, 0xa3, 0x03, 0x74, 0x07, 0x43, 0x05, 0x88,
-0x00, 0x33, 0x08, 0xec, 0x06, 0x93, 0x0f, 0xa8,
-0x12, 0x43, 0x23, 0x6c, 0x39, 0x53, 0xe5, 0xc1,
-0xa9, 0x33, 0xe0, 0x2c, 0x3e, 0x13, 0x23, 0x00,
-0x21, 0x63, 0x0e, 0xbc, 0x23, 0xb3, 0x06, 0x0c,
-0x23, 0x73, 0x03, 0x60, 0x24, 0x63, 0x02, 0x1c,
-0x3f, 0x33, 0x1f, 0xd3, 0x40, 0x02, 0xe1, 0x90,
-0x2a, 0xc8, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xc8, 0x7c, 0x27, 0x1a, 0x0f, 0xfb, 0x64,
-0xa1, 0x58, 0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90,
-0x70, 0x44, 0xb2, 0x7e, 0xf6, 0x65, 0x5f, 0x60,
-0xaf, 0x5b, 0xfd, 0x7d, 0x68, 0xfd, 0xbf, 0x6f,
-0xff, 0xa3, 0x6b, 0xbf, 0xa9, 0xd4, 0xfd, 0x0e,
-0xfa, 0xb7, 0x7d, 0xef, 0x8d, 0xbb, 0x5a, 0x62,
-0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x00, 0x24, 0x40, 0x00, 0x62,
-0xf2, 0x51, 0x87, 0x0f, 0x66, 0x15, 0x6a, 0x18,
-0x73, 0x56, 0x60, 0x2c, 0x8a, 0x5c, 0x61, 0x8b,
-0x50, 0x70, 0x61, 0x7c, 0x8a, 0x34, 0x60, 0x0a,
-0x03, 0x26, 0x60, 0x26, 0x01, 0x58, 0x60, 0x35,
-0x00, 0x4c, 0x36, 0x64, 0x76, 0x43, 0x60, 0xee,
-0x52, 0x62, 0x26, 0xa3, 0x27, 0xbd, 0x98, 0x5b,
-0xdb, 0xf7, 0x7f, 0xa8, 0xc0, 0xe4, 0x02, 0x0c,
-0xc1, 0x67, 0x00, 0x80, 0xc2, 0x3c, 0x00, 0xf8,
-0xc3, 0xef, 0x03, 0x74, 0xc8, 0xe0, 0x0a, 0xe8,
-0xf9, 0x9d, 0x4f, 0xb0, 0xf8, 0x32, 0x0c, 0x40,
-0xc8, 0xc3, 0x07, 0x7c, 0xc3, 0xa6, 0x08, 0xa0,
-0xc1, 0x74, 0x08, 0xc8, 0xcc, 0x39, 0x1c, 0xc6,
-0x6f, 0xd8, 0xc2, 0x65, 0x30, 0x1a, 0x18, 0x90,
-0x00, 0x8b, 0x6d, 0xb8, 0x41, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xc7, 0x10, 0x27, 0x1a, 0x0f,
-0xfb, 0x64, 0xa1, 0x60, 0x85, 0xa1, 0xc1, 0xff,
-0xf0, 0x90, 0x72, 0xf9, 0xcb, 0xfc, 0xfd, 0x7f,
-0x3f, 0xf1, 0xfd, 0xff, 0xdb, 0xff, 0x7f, 0x5b,
-0x02, 0xdd, 0x66, 0xaf, 0xff, 0xf5, 0xb2, 0xcc,
-0x9f, 0xf6, 0x16, 0xa9, 0x9f, 0x4f, 0xb1, 0xfa,
-0x7f, 0x3b, 0x27, 0xf6, 0x50, 0x98, 0x82, 0x9a,
-0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x20, 0x00, 0x03,
-0x14, 0x07, 0xd3, 0x0c, 0xcc, 0x23, 0x08, 0x14,
-0x73, 0x07, 0xe8, 0x43, 0x01, 0x58, 0x7b, 0x93,
-0x0c, 0xb7, 0xb9, 0xb3, 0x0c, 0x20, 0x79, 0xf3,
-0x00, 0x08, 0x26, 0x43, 0x02, 0x44, 0x11, 0x53,
-0x02, 0xc4, 0x05, 0x31, 0x2f, 0x21, 0xc6, 0x43,
-0x40, 0xeb, 0x91, 0x11, 0x35, 0x5a, 0x9f, 0x29,
-0x3d, 0x80, 0x8f, 0xb3, 0xe2, 0x73, 0x03, 0xac,
-0x08, 0xe3, 0x05, 0xa8, 0x03, 0xd3, 0x08, 0xfc,
-0x00, 0xb3, 0x0f, 0xc0, 0x08, 0xa3, 0x23, 0x94,
-0x1c, 0x53, 0xe6, 0xd8, 0xc6, 0x53, 0xe1, 0x34,
-0x22, 0xd3, 0x23, 0x08, 0x1a, 0x43, 0x0e, 0x7c,
-0x21, 0x53, 0x05, 0x9c, 0x22, 0xd3, 0x02, 0xa8,
-0x24, 0x63, 0x01, 0x14, 0x3f, 0x93, 0x05, 0xd3,
-0xc5, 0x06, 0x04, 0xa0, 0x55, 0xb0, 0xdc, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x25,
-0x20, 0xce, 0x7f, 0x62, 0xa1, 0x70, 0x8f, 0x61,
-0xc1, 0xfe, 0x89, 0x28, 0xe4, 0x93, 0x93, 0xf7,
-0x8d, 0x86, 0xff, 0xa7, 0xa2, 0xee, 0xd7, 0xbf,
-0xd6, 0x8f, 0xff, 0xff, 0x52, 0xb6, 0x69, 0xa1,
-0x1b, 0x7e, 0x8f, 0xd9, 0x46, 0xfd, 0x28, 0x6a,
-0x19, 0xe4, 0xd3, 0x10, 0x53, 0x51, 0x4c, 0xcb,
-0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
-0x13, 0x40, 0x7a, 0x30, 0x0b, 0x00, 0xc3, 0x30,
-0x04, 0xc1, 0x46, 0x30, 0x00, 0x02, 0x85, 0x30,
-0x03, 0x47, 0xbc, 0x30, 0x5e, 0xbb, 0xac, 0x31,
-0x5b, 0x7a, 0x23, 0x04, 0xf2, 0x69, 0x30, 0xa0,
-0x11, 0xc3, 0x0b, 0x40, 0x5c, 0x30, 0xf5, 0x00,
-0x30, 0x51, 0x18, 0x8b, 0xb8, 0x93, 0x27, 0x28,
-0xc3, 0xe7, 0x20, 0xb7, 0x9b, 0x3a, 0xc8, 0x24,
-0x80, 0xc0, 0x5e, 0x00, 0xdc, 0xc0, 0x99, 0x00,
-0x58, 0x30, 0x1f, 0x13, 0x06, 0xfc, 0x00, 0x33,
-0x10, 0x10, 0x03, 0x63, 0x69, 0xac, 0x11, 0x43,
-0x67, 0x10, 0x07, 0x43, 0x0f, 0xcc, 0x09, 0x53,
-0xca, 0x36, 0x8d, 0x1c, 0xec, 0x31, 0x9b, 0xec,
-0x09, 0xc2, 0x2a, 0xa2, 0x0b, 0x00, 0x76, 0xa9,
-0x06, 0xcc, 0x5d, 0xb7, 0x7b, 0xbf, 0xff, 0xff,
-0x8c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x47,
-0x10, 0x25, 0x1a, 0x4e, 0xff, 0x82, 0xa1, 0x5f,
-0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x43, 0x22,
-0x97, 0xe8, 0x11, 0x5c, 0xaf, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 0x14,
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x12, 0x00, 0x79, 0x30, 0x09, 0x40,
-0xc0, 0x30, 0x01, 0x01, 0x47, 0x0b, 0x05, 0x0c,
-0x60, 0x12, 0x8f, 0x7a, 0x60, 0x83, 0x77, 0x5e,
-0x62, 0x2e, 0xf4, 0xa6, 0x11, 0x04, 0xd8, 0x61,
-0x62, 0x24, 0x66, 0x17, 0x20, 0xce, 0x61, 0xec,
-0x02, 0x40, 0x62, 0x33, 0x27, 0x73, 0x2b, 0x26,
-0x51, 0x97, 0xb2, 0x47, 0x63, 0x06, 0xf5, 0x30,
-0xc0, 0xd5, 0x02, 0x30, 0xc1, 0x40, 0x01, 0x64,
-0xc1, 0xf9, 0x00, 0xc8, 0xc3, 0x72, 0x00, 0xac,
-0xc7, 0xcb, 0x03, 0x38, 0xf2, 0xac, 0x23, 0x08,
-0xf1, 0x6f, 0x01, 0x08, 0xc7, 0xa4, 0x04, 0x00,
-0xf1, 0x96, 0xa4, 0xd1, 0xf7, 0x6c, 0xc6, 0x47,
-0xe0, 0x93, 0x79, 0x30, 0x19, 0x23, 0x15, 0x09,
-0x89, 0x00, 0x15, 0x3a, 0x7a, 0xe4, 0x94, 0x97,
-0xef, 0x76, 0x5f, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x82, 0x46, 0xe8, 0x27, 0x1a, 0x0f, 0xfb, 0x64,
-0xa1, 0x22, 0x0a, 0x63, 0x5d, 0xfe, 0x08, 0xe0,
-0x7f, 0xfe, 0x3b, 0x77, 0x3b, 0xae, 0x9f, 0xdd,
-0xee, 0xff, 0xff, 0xfd, 0xfb, 0xaa, 0xfd, 0xdf,
-0x46, 0xef, 0xbf, 0xfa, 0xd3, 0x10, 0x53, 0x51,
-0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x30, 0x11, 0x40, 0x76, 0x30,
-0x07, 0x00, 0xc1, 0x11, 0x82, 0x8c, 0x60, 0x0b,
-0x85, 0x0a, 0x60, 0x34, 0x0f, 0x78, 0x61, 0x6a,
-0xf7, 0x40, 0x65, 0xa8, 0xf4, 0x86, 0x17, 0xa4,
-0xde, 0x61, 0x80, 0x25, 0x06, 0x17, 0x80, 0xdc,
-0x61, 0xee, 0x04, 0x26, 0x23, 0x00, 0x34, 0x1e,
-0xe0, 0x4c, 0x9e, 0xad, 0x0f, 0x7c, 0x82, 0xde,
-0x67, 0x3a, 0xcc, 0x0f, 0xc0, 0x2c, 0x4c, 0x17,
-0x50, 0x1f, 0x8c, 0x24, 0x20, 0x1a, 0x4c, 0x3e,
-0xf0, 0x25, 0x0c, 0x8e, 0x00, 0x81, 0xcf, 0x9a,
-0x34, 0x7a, 0x4f, 0x83, 0x60, 0x64, 0x4c, 0x8b,
-0x10, 0x38, 0xcc, 0x38, 0x00, 0x74, 0x0c, 0x13,
-0xa0, 0x86, 0x8c, 0x05, 0x90, 0x90, 0x4c, 0x01,
-0xf0, 0xfd, 0x8c, 0x53, 0x4e, 0x06, 0x0c, 0x47,
-0x40, 0xca, 0x3a, 0xf4, 0x49, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0x46, 0xc4, 0x27, 0x1a, 0x0f,
-0xfb, 0x64, 0xa1, 0x40, 0x8a, 0xa2, 0x05, 0xfe,
-0x88, 0xe0, 0x65, 0xf4, 0x57, 0xdc, 0xf9, 0x47,
-0xfa, 0x19, 0xa6, 0xdd, 0xe8, 0xba, 0x9d, 0x7e,
-0xff, 0xf2, 0x9a, 0x7f, 0xfa, 0x34, 0xed, 0x6d,
-0x9f, 0xdf, 0xd3, 0xf9, 0xeb, 0x7e, 0x7a, 0x94,
-0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 0x75,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x10, 0x00,
-0x73, 0x30, 0x05, 0x40, 0xbe, 0x11, 0x82, 0x8e,
-0x60, 0x18, 0x05, 0x08, 0x60, 0x50, 0x8f, 0x72,
-0x62, 0x27, 0x77, 0x02, 0x68, 0x86, 0xf4, 0x26,
-0x1d, 0xc4, 0xe0, 0x61, 0xa2, 0x25, 0xe6, 0x18,
-0x20, 0xf2, 0x61, 0xf0, 0x05, 0x86, 0x23, 0x20,
-0x6a, 0x07, 0x73, 0x22, 0x4c, 0x56, 0xb7, 0xb2,
-0x47, 0x39, 0x81, 0xfe, 0xaf, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-0x06, 0x08, 0x18, 0x17, 0x46, 0x0b, 0xb0, 0x12,
-0x66, 0x12, 0x18, 0x11, 0xc6, 0x1f, 0x60, 0x1c,
-0xa6, 0x46, 0xc8, 0x5e, 0x87, 0xcb, 0xe3, 0x18,
-0x47, 0xc0, 0x88, 0x51, 0x06, 0x45, 0x30, 0x12,
-0x86, 0x1b, 0xa8, 0x37, 0x26, 0x09, 0x58, 0x42,
-0x66, 0x01, 0xc0, 0x47, 0xc6, 0x02, 0x30, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xe8, 0x27,
-0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x61, 0x05, 0x61,
-0xc1, 0xff, 0xf0, 0x90, 0x7e, 0x66, 0x3e, 0xa6,
-0x98, 0x04, 0x60, 0x30, 0x05, 0x5b, 0x4f, 0x5c,
-0x7a, 0x92, 0x8e, 0xf3, 0xdd, 0x2e, 0xaf, 0x49,
-0xde, 0x96, 0x73, 0xab, 0xfa, 0x91, 0xff, 0xff,
-0xf2, 0xaa, 0xfd, 0xa8, 0xff, 0x31, 0xfb, 0xa8,
-0xf4, 0xa7, 0x5b, 0x7c, 0x36, 0x98, 0x82, 0x9a,
-0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0xf4, 0x70, 0x30, 0x30, 0xbd, 0x30, 0x09, 0x44,
-0x31, 0x26, 0x83, 0x30, 0x35, 0x07, 0xb2, 0x31,
-0x68, 0x7b, 0x50, 0x31, 0x62, 0x87, 0x9c, 0x30,
-0x46, 0xc2, 0x71, 0x30, 0x37, 0x81, 0x34, 0x30,
-0x31, 0x00, 0x80, 0x37, 0xc8, 0xec, 0xe3, 0x04,
-0xc3, 0x5b, 0x01, 0x08, 0x89, 0xea, 0xb1, 0xef,
-0x90, 0x4f, 0x83, 0x9e, 0xdf, 0xff, 0xd4, 0x60,
-0x83, 0x01, 0x8a, 0x60, 0xbb, 0x81, 0x48, 0x61,
-0x20, 0x01, 0x66, 0x61, 0xf4, 0x82, 0x58, 0x64,
-0x68, 0x07, 0x92, 0x7c, 0xa2, 0xbd, 0xfe, 0x7b,
-0xec, 0x06, 0xc6, 0x64, 0x4c, 0x80, 0x72, 0x61,
-0xb3, 0x03, 0x40, 0x60, 0x8d, 0x04, 0x10, 0x60,
-0x0a, 0x84, 0x76, 0x60, 0x34, 0x87, 0xdc, 0x65,
-0x5a, 0x51, 0x81, 0x85, 0xe2, 0xa0, 0x45, 0x92,
-0xf4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8,
-0x6c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x5e,
-0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x47, 0x67,
-0xe8, 0xaf, 0xf1, 0x38, 0x65, 0xbd, 0x63, 0x3d,
-0x7c, 0xb7, 0xf6, 0xfd, 0xdf, 0xff, 0xef, 0xfd,
-0x4d, 0xff, 0x59, 0xbe, 0x8f, 0x7f, 0xef, 0x77,
-0xcb, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c,
-0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x00, 0x82, 0x60, 0x00, 0x61, 0xc2, 0x08,
-0x34, 0xe8, 0x60, 0x36, 0x89, 0x8d, 0xb5, 0x06,
-0x05, 0x38, 0xa4, 0xe6, 0x24, 0xd4, 0xfe, 0xa6,
-0x24, 0x28, 0xa3, 0x26, 0x06, 0x90, 0x33, 0xc6,
-0x04, 0xb8, 0x19, 0x66, 0x03, 0xf8, 0x0a, 0xa7,
-0x3c, 0x48, 0x76, 0x67, 0x20, 0x2e, 0x72, 0x22,
-0x06, 0xa7, 0x20, 0x9f, 0xb0, 0x09, 0xff, 0xee,
-0xff, 0x5a, 0x10, 0x60, 0x85, 0x81, 0x9c, 0x60,
-0xbc, 0x01, 0x6e, 0x61, 0x1f, 0x81, 0xa8, 0x61,
-0xf2, 0x02, 0xe2, 0x64, 0x62, 0x89, 0x20, 0x7c,
-0x7e, 0x49, 0x98, 0x7b, 0xc9, 0x88, 0x58, 0x64,
-0x44, 0x00, 0x3e, 0x61, 0xac, 0x83, 0x0e, 0x60,
-0x85, 0x84, 0x02, 0x42, 0x11, 0xb1, 0x81, 0x10,
-0x1f, 0x59, 0x9a, 0xa9, 0x66, 0x0d, 0x17, 0x08,
-0x80, 0xab, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xc6, 0xfc, 0x25, 0x1a, 0x0e, 0xff, 0x82,
-0x81, 0x55, 0x05, 0xa1, 0xc1, 0xff, 0xf0, 0x90,
-0xf1, 0x8f, 0x58, 0xa3, 0xbc, 0xf7, 0x4b, 0xa3,
-0xe7, 0x7d, 0x9c, 0x9d, 0xc9, 0xea, 0xff, 0xfa,
-0x7e, 0x77, 0x47, 0xf6, 0x23, 0x6f, 0xd1, 0xf7,
-0x68, 0xfd, 0x1a, 0x3c, 0xcd, 0x29, 0x88, 0x29,
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x30, 0xcc, 0x6a, 0x04, 0x17, 0x26,
-0x10, 0x28, 0x06, 0x39, 0xcf, 0xa6, 0x09, 0x80,
-0xf4, 0x06, 0x3f, 0xff, 0x57, 0x86, 0x3e, 0xc0,
-0xf1, 0x86, 0x0b, 0x78, 0x4e, 0x66, 0x07, 0xc0,
-0x27, 0xc6, 0x06, 0x60, 0x12, 0x46, 0xf9, 0x28,
-0x9c, 0x50, 0xec, 0x6b, 0x40, 0xa0, 0xd1, 0x2d,
-0x56, 0x3c, 0xf2, 0x09, 0x78, 0x61, 0x82, 0x1c,
-0x06, 0xb9, 0x82, 0xf2, 0x06, 0x41, 0x84, 0x78,
-0x07, 0x99, 0x87, 0xbe, 0x0d, 0x71, 0x91, 0x6c,
-0x2a, 0x59, 0xf1, 0x4b, 0x52, 0x49, 0xee, 0x74,
-0x27, 0x59, 0x90, 0xee, 0x04, 0x01, 0x86, 0x90,
-0x0b, 0x51, 0x81, 0xf0, 0x0f, 0xb1, 0x80, 0x30,
-0x11, 0x89, 0x81, 0x4e, 0x1f, 0x11, 0x80, 0xfa,
-0x0a, 0x41, 0x80, 0x24, 0x01, 0x78, 0x84, 0x00,
-0x40, 0x6e, 0x8b, 0x22, 0x69, 0xff, 0xfb, 0x90,
-0xc4, 0xff, 0x82, 0x47, 0x3c, 0x25, 0x20, 0xce,
-0x7f, 0x62, 0xa1, 0x56, 0x05, 0x61, 0xc1, 0xff,
-0xf0, 0x90, 0xf2, 0xc3, 0xed, 0x7f, 0x39, 0x3f,
-0xff, 0x5b, 0xf5, 0x53, 0xf7, 0x75, 0xff, 0xdd,
-0x67, 0xef, 0xfe, 0xc6, 0x7f, 0x9b, 0xf4, 0xf7,
-0xfa, 0x97, 0xaf, 0xcb, 0x26, 0x20, 0xa6, 0xa2,
-0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 0x80, 0x69,
-0x15, 0x02, 0xd8, 0xc0, 0x2d, 0x04, 0xfc, 0xc0,
-0x86, 0x09, 0xe0, 0xc1, 0x5d, 0x1e, 0x4c, 0xc9,
-0x14, 0xe9, 0x64, 0xe3, 0x9d, 0xe0, 0x4c, 0x65,
-0x09, 0xc0, 0xc4, 0x1c, 0x50, 0xcc, 0x33, 0xc2,
-0x6c, 0xc3, 0xe0, 0x16, 0x8c, 0x44, 0xc2, 0x2c,
-0xec, 0xc6, 0xc5, 0x92, 0x15, 0x1b, 0xc9, 0x17,
-0x96, 0x60, 0x7e, 0xdf, 0xe8, 0x30, 0x44, 0xc0,
-0xe0, 0x30, 0x5e, 0x00, 0xd9, 0x30, 0x8e, 0xc1,
-0x10, 0x30, 0xf5, 0x81, 0xeb, 0x32, 0x29, 0x45,
-0xfa, 0x3e, 0x0e, 0xaf, 0x7c, 0x3d, 0xb5, 0x45,
-0x9c, 0x32, 0x18, 0x80, 0xd1, 0x30, 0xce, 0x41,
-0x4f, 0x30, 0x39, 0xc1, 0xed, 0x30, 0x0f, 0x42,
-0x2a, 0x30, 0x30, 0x83, 0xdd, 0x30, 0x24, 0x01,
-0x45, 0x30, 0x06, 0x40, 0x2e, 0x0b, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc6, 0x74, 0x25, 0x1a,
-0x0e, 0xff, 0x82, 0xa9, 0x66, 0x07, 0xa1, 0xc1,
-0xff, 0xb4, 0x98, 0x00, 0x0a, 0x0d, 0xe1, 0xa4,
-0x9c, 0x78, 0xb4, 0xf3, 0xdb, 0xce, 0xdd, 0xe8,
-0xee, 0x57, 0x5d, 0x1f, 0xfd, 0xff, 0xd3, 0x63,
-0xff, 0xfb, 0xf7, 0x7a, 0xed, 0xff, 0xcc, 0x7e,
-0xfd, 0xfd, 0x09, 0x88, 0x29, 0xa8, 0xa6, 0x65,
-0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x0a,
-0x40, 0x64, 0x1d, 0x02, 0xcc, 0xc0, 0x38, 0x04,
-0xe8, 0xc0, 0x99, 0x09, 0xcc, 0xc1, 0x84, 0x1e,
-0x10, 0xca, 0x1d, 0xe7, 0x90, 0xe7, 0x99, 0xdc,
-0x8c, 0x6e, 0xc9, 0xbc, 0xc4, 0x48, 0x51, 0x8c,
-0x34, 0x82, 0x80, 0xc3, 0xe4, 0x19, 0x4c, 0x44,
-0x02, 0x70, 0xec, 0x88, 0x84, 0x92, 0xd5, 0x03,
-0xcf, 0x14, 0x97, 0xd7, 0x39, 0x66, 0x83, 0x05,
-0x08, 0x10, 0xd3, 0x06, 0xcc, 0x10, 0xc3, 0x0a,
-0x20, 0x15, 0xd3, 0x11, 0x64, 0x27, 0x23, 0x27,
-0x10, 0x79, 0x53, 0xfe, 0x0f, 0xbc, 0x13, 0xf7,
-0xb0, 0x72, 0xb3, 0x25, 0xd4, 0x14, 0x23, 0x0e,
-0x68, 0x16, 0x03, 0x03, 0xc8, 0x22, 0x63, 0x01,
-0xb0, 0x27, 0x53, 0x04, 0x04, 0x45, 0xe3, 0x02,
-0xf4, 0x17, 0x23, 0x00, 0x98, 0x03, 0x90, 0x68,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0x20,
-0x27, 0x1a, 0x0f, 0xfb, 0x64, 0x81, 0x61, 0x87,
-0xa1, 0xc1, 0xff, 0xb4, 0x98, 0x01, 0x00, 0x64,
-0x89, 0xb1, 0x34, 0xa6, 0x51, 0x3e, 0xce, 0xed,
-0xce, 0x27, 0xd3, 0xd3, 0x4f, 0x65, 0xf4, 0xea,
-0x21, 0xde, 0xdf, 0x5e, 0x53, 0x7f, 0xaf, 0xee,
-0x44, 0x5c, 0xb6, 0xd7, 0x58, 0xaa, 0x5f, 0xf7,
-0xd3, 0xf6, 0x58, 0xa4, 0x7b, 0xe8, 0x4c, 0x41,
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0x30, 0x07, 0x00, 0x53, 0x0b, 0x01, 0x2c, 0x60,
-0x1c, 0x82, 0x1e, 0x60, 0x49, 0x04, 0x3c, 0x60,
-0xba, 0x8d, 0x0e, 0x64, 0xdd, 0x64, 0xbe, 0x73,
-0x0e, 0xcf, 0x26, 0x34, 0x04, 0x38, 0x61, 0xf2,
-0x23, 0xa6, 0x16, 0xe1, 0x22, 0x61, 0xa8, 0x0b,
-0x86, 0x1d, 0x61, 0x2e, 0x72, 0xe3, 0xe2, 0xc6,
-0x8b, 0x3e, 0x04, 0x97, 0xce, 0x60, 0x7f, 0xfe,
-0x83, 0x04, 0x6c, 0x0f, 0x03, 0x05, 0xe0, 0x0f,
-0x93, 0x08, 0xcc, 0x14, 0xa3, 0x0f, 0x10, 0x25,
-0xb3, 0x21, 0xec, 0x74, 0x63, 0xdc, 0xe3, 0x93,
-0x83, 0xd7, 0x5c, 0x6e, 0xa3, 0x20, 0xc0, 0x15,
-0x93, 0x0c, 0x4c, 0x11, 0x53, 0x02, 0xfc, 0x1d,
-0x53, 0x01, 0xe4, 0x21, 0xc3, 0x03, 0xd8, 0x3c,
-0x93, 0x02, 0xc8, 0x13, 0xf3, 0x00, 0x94, 0x02,
-0xc0, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc7, 0x10, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1,
-0x8a, 0x07, 0x61, 0x81, 0xff, 0xb4, 0x98, 0x00,
-0xa0, 0xea, 0x18, 0xa4, 0xe3, 0xc6, 0xc7, 0x9d,
-0xd9, 0xf9, 0xd2, 0x9e, 0x87, 0x7f, 0xd4, 0xea,
-0x75, 0xfb, 0x99, 0xfc, 0xb6, 0x8d, 0xdf, 0xec,
-0xb7, 0xdd, 0xff, 0xf4, 0x3b, 0xed, 0xff, 0xa1,
-0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x30, 0x07, 0xc0, 0x5e, 0x30, 0x00,
-0xc0, 0xad, 0x30, 0x13, 0x81, 0x34, 0x30, 0x2f,
-0x42, 0x67, 0x30, 0x74, 0x07, 0x60, 0x33, 0x03,
-0x78, 0xca, 0x3b, 0xca, 0x75, 0x23, 0x20, 0x12,
-0x69, 0x31, 0x2a, 0x14, 0xc3, 0x0d, 0x60, 0xae,
-0x30, 0xf5, 0x07, 0x73, 0x10, 0xc0, 0xc0, 0x3a,
-0xe2, 0xe0, 0xe4, 0x75, 0x20, 0xf3, 0xc5, 0x25,
-0xf5, 0xf0, 0xa8, 0x27, 0x12, 0xd6, 0x60, 0x43,
-0x00, 0xea, 0x60, 0x5b, 0x80, 0xf4, 0x60, 0x8a,
-0x01, 0x5a, 0x60, 0xf2, 0x82, 0x8c, 0x62, 0x29,
-0x08, 0x1e, 0x6e, 0x3b, 0xc0, 0x6e, 0x6d, 0xe0,
-0x07, 0xc2, 0x62, 0x15, 0x81, 0x8c, 0x78, 0x23,
-0x81, 0x92, 0x9c, 0x06, 0x3e, 0x84, 0x9a, 0x07,
-0xcc, 0x65, 0x74, 0xb1, 0x82, 0x01, 0x2a, 0xdc,
-0xfa, 0xcd, 0x6e, 0xdd, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc7, 0x10, 0x27, 0x1c, 0x0f, 0xfb,
-0x64, 0xb1, 0x69, 0x07, 0x61, 0xc1, 0xff, 0xb4,
-0x98, 0x9e, 0xfe, 0xdc, 0x14, 0xff, 0xbe, 0x39,
-0x08, 0xe2, 0x29, 0x32, 0x50, 0x9a, 0x03, 0x83,
-0xc0, 0xc4, 0xb4, 0xa9, 0x9f, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xe9, 0x4c, 0x41, 0x4d, 0x45, 0x33,
-0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x08, 0x00, 0x6b,
-0x30, 0x04, 0x00, 0xc6, 0x30, 0x1a, 0xc1, 0x5f,
-0x30, 0x3b, 0x02, 0xb8, 0x30, 0x8f, 0xc8, 0x53,
-0x33, 0xb1, 0x3f, 0xf3, 0x3e, 0x73, 0x84, 0x33,
-0x27, 0x22, 0xbe, 0x31, 0x65, 0x18, 0x13, 0x0f,
-0xb0, 0xd3, 0x31, 0x1a, 0x09, 0x63, 0x13, 0x30,
-0xf3, 0x3c, 0x73, 0xf0, 0x85, 0x44, 0xcf, 0x75,
-0x22, 0xf1, 0x4a, 0x43, 0xf6, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xdb, 0xa0, 0xc0, 0xf9, 0x03, 0x70, 0xc1, 0x44,
-0x03, 0xc4, 0xc1, 0xe1, 0x05, 0x30, 0xc3, 0x36,
-0x09, 0x9c, 0xc7, 0x41, 0x1d, 0xa8, 0xef, 0x5e,
-0xe8, 0x68, 0xee, 0x2d, 0x1c, 0x68, 0xc6, 0xfa,
-0x06, 0x54, 0xc2, 0x8d, 0x02, 0xd4, 0xc0, 0x7f,
-0x06, 0x0c, 0xc0, 0x95, 0x07, 0x28, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x29, 0x1a,
-0x0f, 0xfb, 0x64, 0xa1, 0x4d, 0x0a, 0x63, 0x29,
-0xfe, 0x08, 0xe0, 0xc1, 0x00, 0x0c, 0xec, 0xd6,
-0x90, 0xf3, 0x12, 0x88, 0x8b, 0x52, 0xb9, 0xa1,
-0x9a, 0xd7, 0xad, 0x71, 0xe9, 0xad, 0x1e, 0x8f,
-0xf8, 0x6f, 0xf5, 0xff, 0xff, 0xf4, 0xe8, 0xff,
-0x5e, 0xd7, 0x79, 0x0f, 0x77, 0x47, 0xe8, 0x4c,
-0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x06,
-0xc0, 0x66, 0x30, 0x06, 0xc0, 0xc3, 0x30, 0x1d,
-0x01, 0x58, 0x30, 0x3f, 0xc2, 0xb1, 0x30, 0x99,
-0x88, 0x36, 0x33, 0xf1, 0x7f, 0x22, 0x3f, 0x6c,
-0x82, 0x83, 0x29, 0x72, 0xb9, 0x31, 0x70, 0x18,
-0x43, 0x0f, 0xc0, 0xda, 0x31, 0x19, 0x09, 0xf3,
-0x12, 0xe1, 0x04, 0x3c, 0x44, 0x40, 0x85, 0x74,
-0xb8, 0x75, 0xe2, 0x91, 0x7a, 0xf8, 0x3d, 0x5b,
-0x3f, 0xff, 0x51, 0x81, 0xf4, 0x07, 0x19, 0x82,
-0x86, 0x07, 0xe1, 0x83, 0xb4, 0x0b, 0x19, 0x86,
-0x5a, 0x14, 0x81, 0x8e, 0x4c, 0x3f, 0x49, 0xdd,
-0x77, 0xee, 0x99, 0xdb, 0x18, 0x3c, 0xd9, 0x8d,
-0xba, 0x0e, 0x31, 0x84, 0xf0, 0x04, 0xb1, 0x80,
-0xd4, 0x0b, 0xa1, 0x81, 0x50, 0x0e, 0x19, 0x82,
-0x2a, 0x19, 0x81, 0xb0, 0xe1, 0x46, 0x28, 0x11,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xb8,
-0x27, 0x18, 0x0f, 0xfb, 0x64, 0x81, 0x41, 0x05,
-0x62, 0x01, 0xff, 0xf0, 0x90, 0x96, 0x79, 0x72,
-0xc3, 0x55, 0x6f, 0xd9, 0x34, 0x9d, 0x87, 0xfc,
-0x77, 0x7a, 0x9f, 0x96, 0xff, 0xff, 0xfb, 0xbf,
-0xdf, 0xff, 0xab, 0xf7, 0xff, 0xbf, 0xfd, 0x69,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x30, 0x04, 0x80, 0x63, 0x30, 0x08, 0x80, 0xbc,
-0x30, 0x20, 0x41, 0x53, 0x30, 0x44, 0x02, 0xa6,
-0x30, 0xa3, 0x48, 0x1b, 0x34, 0x2e, 0xbe, 0x3f,
-0x34, 0x16, 0xc8, 0x0d, 0x30, 0xae, 0x82, 0xb2,
-0x30, 0x5e, 0xc1, 0x87, 0x30, 0x3f, 0xc0, 0xe1,
-0x30, 0x45, 0x00, 0xa8, 0x30, 0x4a, 0xc1, 0x15,
-0x3c, 0x14, 0xb0, 0x72, 0x82, 0x5d, 0xba, 0x91,
-0x78, 0xa5, 0x26, 0x6c, 0x5e, 0xdf, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xd6, 0x60, 0x6d, 0x81, 0x90, 0x60, 0x8b, 0x01,
-0xc6, 0x60, 0xcc, 0x82, 0x88, 0x61, 0x5d, 0x04,
-0xc2, 0x63, 0x16, 0x8e, 0xb0, 0x74, 0x34, 0x72,
-0xd0, 0x73, 0xb2, 0x8e, 0x28, 0x62, 0xf4, 0x03,
-0x6a, 0x61, 0x0b, 0x80, 0xca, 0x60, 0x23, 0x82,
-0x72, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc7, 0x94, 0x29, 0x18, 0x0f, 0xfb, 0x64, 0x81,
-0x3f, 0x05, 0x22, 0x01, 0xff, 0xf0, 0x90, 0x51,
-0x83, 0x00, 0x60, 0x7f, 0x05, 0x7a, 0x76, 0x5c,
-0x66, 0x4a, 0x30, 0x5d, 0xd6, 0x1d, 0x0c, 0xe5,
-0xcb, 0x4e, 0xed, 0x77, 0x8d, 0xf5, 0xf5, 0xff,
-0xff, 0xff, 0xff, 0xff, 0x77, 0xfb, 0xbd, 0x1d,
-0xdf, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14,
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x30, 0x02, 0xc0, 0x5c, 0x30, 0x0b,
-0x40, 0xb9, 0x30, 0x22, 0x81, 0x4c, 0x30, 0x48,
-0x42, 0x9b, 0x30, 0xac, 0x07, 0xfa, 0x34, 0x69,
-0xfd, 0x48, 0x34, 0x50, 0x07, 0xee, 0x30, 0xb7,
-0x42, 0xad, 0x30, 0x61, 0x81, 0x86, 0x30, 0x3f,
-0x80, 0xe8, 0x30, 0x44, 0xc0, 0xb3, 0x30, 0x49,
-0x01, 0x24, 0x3b, 0xc5, 0x00, 0x52, 0x9a, 0x5c,
-0x3a, 0xf0, 0xe4, 0x5e, 0xb8, 0x46, 0xca, 0xbf,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x81,
-0xb4, 0x06, 0x79, 0x82, 0x2a, 0x07, 0x61, 0x83,
-0x24, 0x0a, 0xb9, 0x85, 0x5e, 0x14, 0x21, 0x8c,
-0x20, 0x3d, 0xf9, 0xcf, 0x83, 0xe3, 0x69, 0xcd,
-0x80, 0x3b, 0xd9, 0x8b, 0x96, 0x0e, 0xd1, 0x84,
-0x08, 0x02, 0x21, 0x80, 0x64, 0x09, 0x71, 0x81,
-0x64, 0x0b, 0xc9, 0x82, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc9, 0x1c, 0x29, 0x18, 0x0f, 0xff,
-0x64, 0x81, 0x37, 0x85, 0x22, 0x41, 0xff, 0xec,
-0x90, 0x1e, 0x15, 0x81, 0xde, 0xef, 0x19, 0x30,
-0xc9, 0x72, 0x98, 0x6c, 0x6b, 0x79, 0x59, 0xef,
-0x52, 0x7d, 0x3f, 0x67, 0xdd, 0xff, 0xff, 0xff,
-0xff, 0x47, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35,
-0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 0x80, 0x59,
-0x30, 0x0d, 0x00, 0xb4, 0x30, 0x25, 0x41, 0x47,
-0x30, 0x4c, 0x02, 0x90, 0x30, 0xb4, 0xc7, 0xd9,
-0x34, 0xa2, 0xbc, 0x3f, 0x34, 0x87, 0xc7, 0xcf,
-0x30, 0xbf, 0x02, 0xa4, 0x30, 0x64, 0x41, 0x89,
-0x30, 0x40, 0x40, 0xef, 0x30, 0x43, 0x80, 0xba,
-0x30, 0x48, 0x41, 0x35, 0x3b, 0xb5, 0x70, 0x52,
-0x62, 0x6b, 0xb8, 0x90, 0xfc, 0x52, 0x93, 0x37,
-0x2f, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xeb, 0x30, 0x37, 0x40,
-0xd2, 0x30, 0x44, 0x00, 0xf7, 0x30, 0x62, 0xc1,
-0x68, 0x30, 0xa8, 0x82, 0xa5, 0x31, 0x7d, 0x48,
-0x20, 0x39, 0xc3, 0x3f, 0x54, 0x39, 0x83, 0xc7,
-0xde, 0x31, 0x6b, 0x02, 0x01, 0x30, 0x7c, 0x40,
-0x21, 0x30, 0x06, 0xc1, 0x21, 0x30, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x94, 0x27, 0x18,
-0x0f, 0xff, 0x64, 0x81, 0x24, 0x85, 0x62, 0x41,
-0xff, 0xec, 0x90, 0x31, 0x41, 0x6e, 0x30, 0x47,
-0x82, 0xa5, 0x3c, 0x6d, 0x93, 0x2b, 0x16, 0x2e,
-0x4b, 0x0e, 0x8c, 0xeb, 0x1b, 0x47, 0x7b, 0x9d,
-0xe3, 0x7f, 0xf4, 0xfd, 0x9d, 0x1f, 0xff, 0xff,
-0xf5, 0xfe, 0xbe, 0xef, 0xf7, 0x7f, 0xff, 0xfe,
-0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93,
-0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x80,
-0xa4, 0x60, 0x1e, 0x81, 0x5e, 0x60, 0x4f, 0x02,
-0x80, 0x60, 0xa0, 0x85, 0x06, 0x61, 0x7a, 0x0f,
-0x64, 0x69, 0xb2, 0xf6, 0x44, 0x69, 0x79, 0x0f,
-0x54, 0x61, 0x8d, 0x85, 0x3a, 0x60, 0xcc, 0x03,
-0x10, 0x60, 0x80, 0x01, 0xe4, 0x60, 0x86, 0x81,
-0x86, 0x60, 0x8d, 0x02, 0x88, 0x76, 0xcb, 0x80,
-0x64, 0xb4, 0xd4, 0x71, 0xe1, 0xc8, 0xbd, 0x38,
-0x66, 0xca, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0x49, 0x97,
-0xc5, 0xc9, 0x9d, 0x66, 0xe1, 0xaa, 0x4a, 0x39,
-0xc8, 0x33, 0x51, 0x8a, 0x38, 0x3b, 0x99, 0xc3,
-0x3f, 0xd0, 0x69, 0xc1, 0x84, 0x39, 0xc9, 0x89,
-0xb6, 0x0e, 0xf0, 0x90, 0x67, 0x80, 0x00, 0x3b,
-0x8c, 0xb6, 0x4d, 0xcd, 0x07, 0x90, 0x8c, 0xb5,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x20,
-0x29, 0x18, 0x0f, 0xff, 0x64, 0x81, 0x3a, 0x05,
-0x22, 0x41, 0xff, 0xec, 0x90, 0x2d, 0x8c, 0x24,
-0x04, 0x50, 0x79, 0x9c, 0xc6, 0x84, 0xc1, 0xbf,
-0x4f, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0x4a, 0x62, 0x0a, 0x6a, 0x29, 0x99,
-0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0x11, 0x00, 0x9a, 0x60, 0x22, 0x01, 0x50, 0x60,
-0x53, 0x82, 0x72, 0x60, 0xa7, 0x04, 0xec, 0x61,
-0x8a, 0x8f, 0x1a, 0x6a, 0x1b, 0x73, 0xe6, 0x69,
-0xe0, 0x8f, 0x0a, 0x61, 0x9c, 0x05, 0x24, 0x60,
-0xd1, 0x83, 0x12, 0x60, 0x80, 0x81, 0xf2, 0x60,
-0x84, 0x01, 0x94, 0x60, 0x8a, 0x82, 0xaa, 0x76,
-0x2c, 0x20, 0x64, 0x84, 0xd7, 0x71, 0x21, 0xf8,
-0xa5, 0x26, 0x75, 0xed, 0xfb, 0xff, 0xd7, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-0x66, 0x5f, 0x97, 0x86, 0x73, 0x1c, 0xa6, 0xa5,
-0xaa, 0x87, 0x1a, 0x50, 0xe6, 0x28, 0x08, 0xf8,
-0x47, 0x07, 0x57, 0x8c, 0xc7, 0x00, 0x98, 0xf1,
-0x06, 0x25, 0xd0, 0x3f, 0xe6, 0x0c, 0x68, 0x01,
-0x43, 0x00, 0x72, 0x99, 0x86, 0x97, 0x1a, 0x25,
-0x1b, 0x99, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc9, 0x14, 0x27, 0x18, 0x0f, 0xff, 0x64, 0x80,
-0xfc, 0x04, 0x62, 0x81, 0xdf, 0xf4, 0x50, 0x78,
-0x59, 0x98, 0x4e, 0x07, 0x20, 0x05, 0x9d, 0x46,
-0x7c, 0x16, 0x77, 0xbb, 0xff, 0xff, 0xec, 0xff,
-0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfb, 0xbe, 0x9f,
-0xff, 0xf5, 0xa6, 0x20, 0xa6, 0xa2, 0x99, 0x97,
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x24, 0x01, 0x18, 0xc0, 0x4b, 0x02,
-0x8c, 0xc0, 0xb0, 0x04, 0xc0, 0xc1, 0x5d, 0x09,
-0xa4, 0xc3, 0x34, 0x1d, 0x88, 0xd5, 0x01, 0xe2,
-0xc8, 0xd4, 0x84, 0x1d, 0x70, 0xc3, 0x57, 0x0a,
-0x24, 0xc1, 0xaa, 0x06, 0x20, 0xc1, 0x00, 0x03,
-0xf8, 0xc1, 0x05, 0x03, 0x4c, 0xc1, 0x0e, 0x05,
-0x88, 0xeb, 0x19, 0x80, 0x48, 0xe9, 0xa8, 0xe3,
-0xc3, 0x92, 0xfa, 0x73, 0x96, 0x55, 0xf4, 0x7f,
-0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xa4, 0xcb, 0xe2, 0xfc, 0xce, 0x53,
-0xa8, 0xd4, 0x45, 0x84, 0xe2, 0x7a, 0x80, 0xc4,
-0xe2, 0x20, 0x3c, 0xe0, 0x2b, 0xfa, 0x9c, 0xdf,
-0x58, 0x1f, 0x54, 0xc4, 0x9b, 0x08, 0x68, 0xc1,
-0x78, 0x00, 0xb4, 0xc0, 0x09, 0x03, 0x60, 0xcd,
-0x04, 0x9c, 0xd1, 0xf8, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc9, 0x0c, 0x29, 0x18, 0x0f, 0xff,
-0x64, 0x81, 0x13, 0x04, 0xa2, 0x81, 0xdf, 0xf4,
-0x50, 0xa0, 0xcc, 0x52, 0xb8, 0xc2, 0xa0, 0x3d,
-0x00, 0x4d, 0x76, 0x34, 0xa0, 0xdf, 0xa7, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xd9, 0xf4,
-0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8,
-0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x0b, 0x80, 0x9e, 0x60,
-0x31, 0x01, 0x6c, 0x60, 0x6b, 0x82, 0xaa, 0x60,
-0xd0, 0x05, 0x60, 0x61, 0xe6, 0x90, 0x76, 0x6c,
-0x65, 0x7e, 0x22, 0x6c, 0x1b, 0x90, 0x6e, 0x61,
-0xf7, 0x05, 0xb4, 0x60, 0xf9, 0x83, 0x86, 0x60,
-0x94, 0x82, 0x56, 0x60, 0x93, 0x01, 0xf8, 0x60,
-0x98, 0x83, 0x4e, 0x78, 0x6f, 0xe6, 0x54, 0x04,
-0x8e, 0x6d, 0x71, 0xff, 0x87, 0x29, 0x33, 0x38,
-0xbd, 0xbf, 0x7f, 0xfa, 0xe8, 0xff, 0xff, 0xff,
-0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xac, 0xca,
-0x32, 0x98, 0xcc, 0x23, 0x44, 0xd1, 0x34, 0xf8,
-0xdd, 0x49, 0x84, 0xc4, 0x2b, 0x1d, 0x40, 0xdb,
-0x8a, 0xe3, 0x98, 0xda, 0xd5, 0x1c, 0x78, 0xc3,
-0xea, 0x07, 0xbc, 0xc1, 0x37, 0x00, 0xf0, 0xc0,
-0x16, 0x02, 0xbc, 0xd7, 0xef, 0x63, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x18, 0x27, 0x18,
-0x0f, 0xff, 0x64, 0x81, 0x08, 0x04, 0x62, 0x81,
-0xdf, 0xf4, 0x50, 0x81, 0x75, 0x4d, 0x60, 0x91,
-0x31, 0x18, 0x21, 0x1f, 0x5a, 0xf4, 0xb4, 0xa8,
-0x33, 0xe8, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xe8, 0x4c, 0x41, 0x4d, 0x45,
-0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x00,
-0x00, 0x48, 0x30, 0x1a, 0x40, 0xb1, 0x30, 0x38,
-0x01, 0x4c, 0x30, 0x6b, 0xc2, 0x9f, 0x30, 0xfb,
-0x08, 0x06, 0x36, 0x67, 0x7d, 0x78, 0x36, 0x41,
-0x08, 0x02, 0x31, 0x03, 0x42, 0xcd, 0x30, 0x7f,
-0x01, 0xc0, 0x30, 0x49, 0x81, 0x30, 0x30, 0x48,
-0x41, 0x05, 0x30, 0x4a, 0x01, 0xb4, 0x3b, 0xe8,
-0x23, 0x29, 0x05, 0x43, 0x46, 0xbe, 0xfe, 0x43,
-0xf4, 0xe1, 0x9b, 0x2a, 0xfa, 0x3f, 0xec, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
-0xec, 0xd2, 0x65, 0x11, 0x52, 0x65, 0xf9, 0xac,
-0x68, 0x62, 0x92, 0x6e, 0x3c, 0xe8, 0x62, 0x06,
-0x0f, 0x1e, 0x6d, 0x68, 0xf5, 0x6e, 0x6d, 0x0f,
-0x0e, 0xba, 0x61, 0xe5, 0x84, 0x0c, 0x60, 0x92,
-0x00, 0xaa, 0x60, 0x13, 0x81, 0x48, 0x6c, 0x87,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x58,
-0x29, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x01, 0x04,
-0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x79, 0xc3, 0x79,
-0x06, 0xb7, 0x46, 0x18, 0x90, 0x0e, 0x8f, 0xce,
-0x2c, 0xba, 0x1b, 0xeb, 0x4f, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xa6, 0x20,
-0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0x30, 0x02, 0xc0, 0x41, 0x30, 0x1c, 0x00, 0xa8,
-0x30, 0x3a, 0x41, 0x41, 0x30, 0x6f, 0x82, 0x8c,
-0x31, 0x02, 0xc7, 0xcf, 0x36, 0x99, 0xbb, 0xcb,
-0x36, 0x72, 0x47, 0xcd, 0x31, 0x0a, 0x02, 0xbe,
-0x30, 0x81, 0x41, 0xbf, 0x30, 0x49, 0xc1, 0x35,
-0x30, 0x46, 0x81, 0x0a, 0x30, 0x48, 0x41, 0xc3,
-0x3b, 0x98, 0x93, 0x26, 0x06, 0x47, 0xf6, 0xb8,
-0xff, 0xc3, 0x94, 0x96, 0xf9, 0x6d, 0x7f, 0x4f,
-0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xa3, 0xff,
-0xfe, 0x8f, 0xff, 0xdb, 0xa0, 0xca, 0x32, 0xa8,
-0xcb, 0xa3, 0x74, 0xd0, 0x55, 0x48, 0xdb, 0x8a,
-0x24, 0xc3, 0xef, 0x1f, 0x20, 0xda, 0x0c, 0xf1,
-0xc8, 0xd9, 0x61, 0x1e, 0x60, 0xc3, 0xaa, 0x08,
-0x7c, 0xc1, 0x11, 0x01, 0xa8, 0xc0, 0x34, 0x02,
-0x64, 0xda, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc9, 0x7c, 0x27, 0x16, 0x0f, 0xff, 0x64, 0x80,
-0xfd, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x6e,
-0x43, 0x8a, 0x6e, 0xcd, 0x78, 0x89, 0x31, 0x38,
-0x19, 0x0d, 0x5c, 0x69, 0x6a, 0xc3, 0x9d, 0x48,
-0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xd1, 0xfe, 0x84, 0xc4, 0x14, 0xd4, 0x53, 0x32,
-0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x30, 0x04, 0x80, 0x38, 0x30, 0x1e,
-0x40, 0xa1, 0x30, 0x3c, 0x01, 0x36, 0x30, 0x72,
-0xc2, 0x79, 0x31, 0x0a, 0x07, 0x92, 0x36, 0xc9,
-0x7a, 0x06, 0x36, 0xa0, 0x87, 0x94, 0x31, 0x11,
-0x42, 0xaf, 0x30, 0x82, 0x81, 0xbc, 0x30, 0x49,
-0x01, 0x38, 0x30, 0x45, 0x41, 0x13, 0x30, 0x46,
-0x01, 0xd0, 0x3b, 0x08, 0xc3, 0x25, 0x07, 0x47,
-0xc6, 0xbe, 0xfe, 0x43, 0xf4, 0xf8, 0x3d, 0x5b,
-0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
-0xff, 0xfd, 0xff, 0xff, 0x51, 0x94, 0x05, 0x69,
-0x96, 0xe7, 0x01, 0x9f, 0x8a, 0xe9, 0xb5, 0x74,
-0xd1, 0x87, 0x98, 0x40, 0x09, 0xb2, 0x83, 0xf0,
-0xb9, 0xb1, 0x30, 0x3e, 0x89, 0x87, 0x12, 0x11,
-0xa1, 0x81, 0xf8, 0x03, 0xf9, 0x80, 0x8a, 0x04,
-0x51, 0xb6, 0x9b, 0xa7, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc9, 0x98, 0x2b, 0x16, 0x0f, 0xff,
-0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 0xdf, 0xf0,
-0x50, 0x1f, 0xd5, 0x1b, 0x0d, 0x04, 0x62, 0x80,
-0x2a, 0x1b, 0x38, 0xb1, 0x65, 0x06, 0xfa, 0xd3,
-0xe8, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xfd, 0x29, 0x88, 0x29, 0xa8, 0xa6, 0x65,
-0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x30, 0x06, 0xc0, 0x31,
-0x30, 0x1f, 0x80, 0x98, 0x30, 0x3e, 0x41, 0x2b,
-0x30, 0x76, 0x02, 0x64, 0x31, 0x11, 0x47, 0x57,
-0x36, 0xf6, 0xb8, 0x2f, 0x36, 0xcc, 0xc7, 0x59,
-0x31, 0x17, 0x02, 0x9e, 0x30, 0x84, 0x41, 0xb9,
-0x30, 0x48, 0xc1, 0x3d, 0x30, 0x43, 0x81, 0x18,
-0x30, 0x43, 0xc1, 0xdd, 0x3a, 0xb9, 0x33, 0x22,
-0x08, 0x47, 0xf6, 0xb8, 0xff, 0xc6, 0x29, 0x01,
-0xcf, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xf4, 0x19, 0x42, 0x57, 0x19, 0x64,
-0x72, 0x99, 0xea, 0xb2, 0x1b, 0x39, 0x56, 0x98,
-0x75, 0xa4, 0x1b, 0x1b, 0x0d, 0x1f, 0xd4, 0x1a,
-0xf8, 0xe4, 0x03, 0x18, 0x6c, 0x81, 0x25, 0x98,
-0x1d, 0x20, 0x48, 0x18, 0x0a, 0x00, 0x3f, 0x9b,
-0x95, 0xa4, 0x72, 0x6c, 0xe9, 0xb1, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x54, 0x29, 0x16,
-0x0f, 0xff, 0x64, 0x81, 0x03, 0x04, 0x62, 0xc1,
-0xdf, 0xf0, 0x50, 0x8f, 0xe6, 0x2b, 0x02, 0x23,
-0x8b, 0x8d, 0x15, 0x58, 0x33, 0xd4, 0x8f, 0x4f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x1f,
-0xe8, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39,
-0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x0b,
-0x00, 0x32, 0x30, 0x27, 0x40, 0xa9, 0x30, 0x4a,
-0x01, 0x4a, 0x30, 0x8a, 0xc2, 0xa5, 0x31, 0x3f,
-0x88, 0x14, 0x38, 0x20, 0xfd, 0xcc, 0x37, 0xef,
-0x08, 0x1c, 0x31, 0x45, 0xc2, 0xed, 0x30, 0x99,
-0x81, 0xf6, 0x30, 0x53, 0x01, 0x70, 0x30, 0x4b,
-0xc1, 0x4b, 0x30, 0x4b, 0x02, 0x32, 0x3b, 0xea,
-0xe3, 0x29, 0x0f, 0x40, 0x03, 0x3b, 0x76, 0x1f,
-0xfa, 0x7b, 0x07, 0xd5, 0xff, 0xff, 0x57, 0xff,
-0xff, 0xfe, 0xaf, 0xff, 0x7f, 0xff, 0xfd, 0xff,
-0xef, 0xf5, 0x19, 0x10, 0x4b, 0x99, 0x2e, 0x65,
-0x19, 0x98, 0x9e, 0x9a, 0xb3, 0x32, 0x18, 0x62,
-0xc3, 0xaf, 0x9a, 0x94, 0xfc, 0x97, 0x9a, 0x83,
-0x83, 0x9a, 0x98, 0x5a, 0xe1, 0x08, 0x18, 0x16,
-0xc0, 0x46, 0x98, 0x09, 0xe0, 0x30, 0x1b, 0x31,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xe4,
-0x27, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x03, 0x84,
-0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x5a, 0x70, 0x7a,
-0xc1, 0xac, 0x4c, 0xc0, 0x22, 0x2a, 0x6b, 0x3a,
-0xb3, 0xca, 0x0d, 0xf5, 0xa7, 0xd1, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31,
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x30, 0x0d, 0x40, 0x29, 0x30, 0x28, 0x80, 0x9e,
-0x30, 0x4c, 0xc1, 0x3d, 0x30, 0x8e, 0x02, 0x8c,
-0x31, 0x46, 0xc7, 0xc9, 0x38, 0x4f, 0x3b, 0x83,
-0x38, 0x1c, 0xc7, 0xd3, 0x31, 0x4c, 0x02, 0xd8,
-0x30, 0x9a, 0xc1, 0xf1, 0x30, 0x52, 0x41, 0x75,
-0x30, 0x49, 0x81, 0x52, 0x30, 0x48, 0xc2, 0x3f,
-0x3b, 0x7b, 0x33, 0x24, 0x0e, 0x41, 0xf6, 0x70,
-0xff, 0xbf, 0x94, 0x96, 0xf9, 0x6d, 0x1f, 0xff,
-0xdb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xe8, 0xff, 0xfd, 0xba, 0x0c, 0x87, 0x26, 0x0c,
-0x92, 0x33, 0x4c, 0xc5, 0x51, 0x0d, 0x4a, 0x9c,
-0xcc, 0x2f, 0x71, 0xe2, 0x0d, 0x3d, 0xae, 0x9a,
-0x8d, 0x35, 0x51, 0xd7, 0x8c, 0x2b, 0x40, 0x88,
-0x4c, 0x0a, 0x30, 0x26, 0x8c, 0x05, 0xa0, 0x14,
-0xcd, 0xaa, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc9, 0x84, 0x29, 0x14, 0x0f, 0xff, 0x64, 0x80,
-0xfe, 0x84, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xa2,
-0x38, 0x65, 0x2c, 0xd6, 0x86, 0x10, 0x11, 0x29,
-0x35, 0x5d, 0x69, 0xd0, 0xbb, 0x3a, 0xbf, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
-0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x30, 0x0f, 0x00, 0x1e, 0x30, 0x2a,
-0xc0, 0x93, 0x30, 0x4e, 0x81, 0x2e, 0x30, 0x91,
-0x42, 0x71, 0x31, 0x4d, 0x87, 0x78, 0x38, 0x7a,
-0xf9, 0x1e, 0x38, 0x47, 0x07, 0x84, 0x31, 0x52,
-0x42, 0xc3, 0x30, 0x9c, 0x01, 0xec, 0x30, 0x51,
-0x81, 0x76, 0x30, 0x47, 0xc1, 0x59, 0x30, 0x45,
-0x82, 0x4a, 0x3a, 0xeb, 0x83, 0x23, 0x11, 0x41,
-0xc6, 0x76, 0xec, 0x43, 0x74, 0xf6, 0x1e, 0xaf,
-0xf7, 0xff, 0xaa, 0x8f, 0xff, 0xff, 0xff, 0xff,
-0xbf, 0xff, 0xfe, 0xff, 0xf7, 0xfa, 0x8c, 0x84,
-0x26, 0x4c, 0x8d, 0x34, 0x0c, 0xbc, 0x52, 0xcd,
-0x3b, 0xa0, 0x0c, 0x2d, 0x41, 0xec, 0x4d, 0x30,
-0x5e, 0xe4, 0x4d, 0x28, 0x21, 0xe1, 0xcc, 0x29,
-0x10, 0x8c, 0x8c, 0x08, 0xe0, 0x2a, 0xcc, 0x06,
-0x50, 0x11, 0x8d, 0xb4, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc9, 0x88, 0x2b, 0x14, 0x0f, 0xff,
-0x64, 0x80, 0xfa, 0x84, 0x63, 0x01, 0xdf, 0xf0,
-0x50, 0x99, 0x38, 0x9c, 0xe8, 0xd7, 0x25, 0xc0,
-0x31, 0x35, 0x35, 0x9d, 0x59, 0xe0, 0x83, 0x7a,
-0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xfd, 0x3f, 0xff, 0xf4, 0x26, 0x20, 0xa6,
-0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x30, 0x14, 0xc0, 0x19,
-0x30, 0x33, 0x00, 0xa0, 0x30, 0x5c, 0xc1, 0x4b,
-0x30, 0xa9, 0x82, 0xac, 0x31, 0x84, 0x48, 0x29,
-0x39, 0xd7, 0xbe, 0x3b, 0x39, 0x9b, 0xc8, 0x39,
-0x31, 0x88, 0x03, 0x0e, 0x30, 0xb4, 0x42, 0x2d,
-0x30, 0x5c, 0xc1, 0xb3, 0x30, 0x4f, 0x81, 0x92,
-0x30, 0x4c, 0xc2, 0xad, 0x3c, 0x1d, 0xb3, 0x28,
-0x16, 0x2e, 0x5b, 0x0c, 0x72, 0xdf, 0xca, 0x4b,
-0x67, 0x17, 0xbb, 0xee, 0xff, 0x5d, 0x3f, 0x6f,
-0xff, 0xff, 0xee, 0xfb, 0xf7, 0x7f, 0x5f, 0xa3,
-0xdd, 0xfe, 0xef, 0x2a, 0x64, 0x19, 0x34, 0x64,
-0x41, 0xaa, 0x65, 0x9a, 0xa0, 0x69, 0x55, 0x1a,
-0x61, 0x59, 0x8f, 0xa8, 0x69, 0x13, 0x79, 0x4c,
-0x68, 0xd4, 0x8f, 0x58, 0x61, 0x36, 0x04, 0x82,
-0x60, 0x3c, 0x81, 0x70, 0x60, 0x37, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x88, 0x29, 0x14,
-0x0f, 0xff, 0x64, 0x81, 0x07, 0x84, 0x63, 0x01,
-0xdf, 0xf0, 0x50, 0x00, 0x72, 0x6e, 0x34, 0x71,
-0xc6, 0x25, 0x66, 0xbc, 0x2b, 0x82, 0x89, 0xc9,
-0x22, 0xeb, 0x48, 0x42, 0xec, 0xb2, 0xa4, 0x7f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0x42, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x02,
-0xc0, 0x49, 0x00, 0x00, 0x06, 0xf0, 0xbb, 0x66,
-0x71, 0x07, 0x9d, 0xa6, 0x12, 0x41, 0x80, 0x68,
-0x96, 0xcd, 0x06, 0x86, 0x01, 0x84, 0x61, 0x2a,
-0x07, 0x26, 0x06, 0x80, 0x44, 0x60, 0x1c, 0x02,
-0xc6, 0x4a, 0x66, 0x36, 0x45, 0x9c, 0x87, 0xf0,
-0xa7, 0xa9, 0x98, 0x38, 0xff, 0xf5, 0x9b, 0xda,
-0xf1, 0xbd, 0x54, 0x20, 0xc8, 0x02, 0x6c, 0xc8,
-0x53, 0x58, 0xca, 0xa5, 0x5c, 0xd1, 0xba, 0x60,
-0xc2, 0x8c, 0x1f, 0xe4, 0xd1, 0x3f, 0xf6, 0xa4,
-0xd0, 0xc6, 0x1f, 0x44, 0xc2, 0x47, 0x09, 0x40,
-0xc0, 0x62, 0x03, 0x1c, 0xc0, 0x77, 0x00, 0xa8,
-0xdd, 0x08, 0x53, 0x8f, 0xc6, 0x8d, 0x82, 0x50,
-0x05, 0x14, 0x52, 0xe9, 0xd5, 0x91, 0x04, 0x1b,
-0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xfc,
-0x29, 0x12, 0x0f, 0xff, 0x64, 0x80, 0xff, 0x04,
-0x63, 0x01, 0xdf, 0xf0, 0x50, 0xff, 0xd3, 0xfe,
-0x9f, 0xff, 0xfa, 0x13, 0x10, 0x53, 0x51, 0x4c,
-0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0x03, 0x01, 0x96, 0x60, 0x6d, 0x01, 0x0c, 0x60,
-0xc1, 0x82, 0x4e, 0x61, 0x5f, 0x04, 0xd0, 0x63,
-0x22, 0x8e, 0xc2, 0x74, 0x58, 0x70, 0x72, 0x73,
-0xdb, 0x8e, 0xee, 0x63, 0x27, 0x05, 0xb0, 0x61,
-0x6c, 0x84, 0x3e, 0x60, 0xb4, 0x83, 0x6e, 0x60,
-0x94, 0x03, 0x3c, 0x60, 0x8a, 0x85, 0x8a, 0x75,
-0x7c, 0x66, 0x40, 0x30, 0x5f, 0xf6, 0x18, 0xed,
-0xc3, 0x14, 0x96, 0xdc, 0xbd, 0x9f, 0x77, 0x77,
-0x4f, 0xff, 0xa3, 0xff, 0xfe, 0xbf, 0xfb, 0xbf,
-0xfd, 0x3e, 0xef, 0xaf, 0x77, 0xa0, 0xc7, 0xf2,
-0x68, 0xc7, 0xe3, 0x64, 0xca, 0x15, 0x70, 0xd0,
-0xaa, 0x8c, 0xc2, 0x67, 0x20, 0x60, 0xd0, 0x4e,
-0xfa, 0x60, 0xcf, 0xdd, 0x1f, 0xc0, 0xc2, 0x1e,
-0x09, 0x7c, 0xc0, 0x49, 0x03, 0x48, 0xc0, 0x80,
-0x00, 0x6c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82,
-0xc6, 0xb8, 0x25, 0x35, 0x4c, 0xfb, 0x22, 0xb1,
-0x0a, 0x04, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xdd,
-0xe7, 0xa3, 0x92, 0x42, 0x4d, 0x84, 0x4b, 0x07,
-0x15, 0x92, 0xe5, 0xd6, 0x90, 0x83, 0xec, 0xb2,
-0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x26, 0x03, 0xf0, 0xc1, 0x05, 0x02, 0x34,
-0xc1, 0xc2, 0x04, 0xf0, 0xc3, 0x31, 0x0a, 0x6c,
-0xc7, 0x40, 0x1f, 0xc8, 0xef, 0x05, 0xf1, 0xa0,
-0xed, 0xe4, 0x20, 0x30, 0xc7, 0x49, 0x0c, 0x84,
-0xc3, 0x44, 0x09, 0x88, 0xc1, 0x98, 0x07, 0xe0,
-0xc1, 0x47, 0x07, 0x8c, 0xc1, 0x2c, 0x0c, 0xe0,
-0xd7, 0x10, 0xa3, 0x13, 0x88, 0x4b, 0x50, 0xb9,
-0xda, 0xc3, 0xef, 0x2f, 0xb0, 0xf1, 0x9b, 0x5b,
-0xe6, 0xfd, 0x7d, 0x5f, 0xff, 0xff, 0xff, 0xbf,
-0xfb, 0x9f, 0x5f, 0xd1, 0xfa, 0x73, 0xfd, 0x37,
-0x63, 0xfa, 0x14, 0x63, 0xe1, 0x36, 0x63, 0xd9,
-0xb4, 0x64, 0xc2, 0xc2, 0x67, 0xcd, 0x58, 0x61,
-0x20, 0x10, 0x6a, 0x67, 0xaa, 0xfe, 0xea, 0x67,
-0x74, 0x10, 0x1e, 0x60, 0xfa, 0x84, 0xd4, 0x60,
-0x17, 0x01, 0xc2, 0x60, 0xff, 0xfb, 0x90, 0xc4,
-0xff, 0x83, 0xc9, 0xb8, 0x29, 0x12, 0x0f, 0xff,
-0x64, 0x80, 0xfd, 0x84, 0x63, 0x01, 0xdf, 0xf0,
-0x50, 0x44, 0x80, 0x14, 0x6f, 0x43, 0x79, 0xca,
-0x5e, 0xc6, 0xc7, 0x22, 0x03, 0x8a, 0xa9, 0x74,
-0xf2, 0xc8, 0x81, 0x06, 0xdb, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31,
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x00, 0x01, 0xd4, 0x48, 0xc0,
-0x00, 0x01, 0x60, 0x17, 0x8c, 0x06, 0xa0, 0x0a,
-0x0c, 0x0c, 0x30, 0x1d, 0xcc, 0x16, 0xa0, 0x43,
-0x8c, 0x34, 0xf0, 0xd6, 0xcd, 0x5c, 0x66, 0x7a,
-0x4d, 0x54, 0x10, 0xda, 0x4c, 0x35, 0x00, 0x53,
-0x8e, 0xe3, 0x03, 0x35, 0x4b, 0x64, 0xcf, 0xcc,
-0xe3, 0x38, 0xdb, 0xcc, 0x7e, 0x6d, 0x00, 0x00,
-0x19, 0x5b, 0xb1, 0x0d, 0xca, 0x25, 0x96, 0xec,
-0x76, 0xbe, 0x9f, 0xfc, 0x62, 0x62, 0xda, 0x1f,
-0x51, 0xb2, 0x66, 0x34, 0x90, 0x86, 0x31, 0x17,
-0xe6, 0x3c, 0xa6, 0xc6, 0x63, 0x4b, 0xe6, 0x0e,
-0x98, 0xe9, 0x06, 0x64, 0x77, 0x0c, 0xc6, 0x61,
-0xa8, 0xe5, 0x06, 0x0c, 0x70, 0x44, 0xe6, 0x00,
-0x58, 0x19, 0x81, 0xc0, 0x7c, 0x9b, 0x5c, 0xa4,
-0x70, 0x46, 0x29, 0xab, 0x06, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xca, 0x3c, 0x29, 0x10, 0x0f,
-0xff, 0x84, 0x80, 0xfb, 0x84, 0x63, 0x01, 0xdf,
-0xf0, 0x50, 0x61, 0x84, 0x65, 0x22, 0xf3, 0x4e,
-0xe6, 0x59, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8,
-0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x81, 0xc8,
-0x00, 0x00, 0x01, 0x80, 0x95, 0x30, 0x25, 0xc0,
-0x33, 0x30, 0x42, 0x00, 0x94, 0x30, 0x79, 0xc1,
-0x4d, 0x31, 0x17, 0x84, 0x14, 0x37, 0x27, 0x5f,
-0x4e, 0x36, 0xfa, 0x84, 0x2a, 0x31, 0x17, 0xc1,
-0xa7, 0x30, 0x79, 0x81, 0x52, 0x30, 0x37, 0x81,
-0x20, 0x03, 0x52, 0xc6, 0x40, 0xd2, 0x1e, 0xa0,
-0x32, 0x82, 0x58, 0x0c, 0x0a, 0x09, 0x0f, 0x40,
-0x72, 0xc8, 0x01, 0x36, 0x5f, 0x34, 0x7f, 0xeb,
-0xff, 0xd1, 0xcd, 0xeb, 0xce, 0xdb, 0xf8, 0x25,
-0x73, 0xcd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xfd, 0x26, 0x33, 0x10, 0x66, 0x2f, 0x98, 0x06,
-0x38, 0x27, 0x66, 0x5b, 0xcc, 0xc6, 0x0d, 0x60,
-0xeb, 0xe6, 0x5d, 0x0f, 0x20, 0xe6, 0x5a, 0x60,
-0xe7, 0xe6, 0x0b, 0x48, 0x46, 0x05, 0x40, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0xc8, 0xec, 0x53,
-0x1d, 0x4f, 0xf0, 0x47, 0x20, 0xc9, 0x84, 0xa3,
-0x41, 0xdf, 0xf0, 0x55, 0x35, 0xc5, 0x81, 0x07,
-0x36, 0xd1, 0x24, 0xe1, 0x2b, 0x43, 0x57, 0x8b,
-0x03, 0x88, 0xaa, 0x49, 0xe5, 0x9e, 0xc0, 0x23,
-0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0x33, 0xc0, 0x30, 0x30, 0x5d, 0x00, 0x7a, 0x30,
-0x9b, 0x41, 0x47, 0x31, 0x14, 0x82, 0xbe, 0x32,
-0x71, 0x48, 0x5b, 0x3f, 0xcb, 0xbf, 0x1f, 0x3f,
-0x6a, 0x48, 0x8d, 0x32, 0x6f, 0x83, 0x8a, 0x31,
-0x12, 0x42, 0xf5, 0x30, 0x7f, 0xc2, 0x99, 0x31,
-0x76, 0x28, 0xc3, 0x14, 0x14, 0x5b, 0x30, 0xc3,
-0x17, 0x13, 0x02, 0x80, 0x36, 0x04, 0x80, 0x4a,
-0x54, 0x30, 0x37, 0x02, 0x1c, 0x9f, 0xbd, 0xdd,
-0xef, 0xbd, 0xff, 0xb9, 0xff, 0x7d, 0x7a, 0xb2,
-0xd3, 0xfb, 0xfa, 0x5c, 0x1e, 0xe6, 0x0d, 0xd5,
-0xd8, 0x79, 0xbe, 0x86, 0xd3, 0xdd, 0xd2, 0x8f,
-0xf4, 0x6d, 0x65, 0xb9, 0x45, 0x76, 0xbb, 0x47,
-0xec, 0x6a, 0x3e, 0x1b, 0xa4, 0xc6, 0x32, 0x08,
-0xc5, 0x83, 0x04, 0xc6, 0x74, 0xf0, 0xca, 0x49,
-0xb4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca,
-0x8c, 0x7b, 0x18, 0xef, 0xd4, 0x49, 0x40, 0xc9,
-0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x54, 0xc1, 0x87,
-0x1d, 0xc8, 0xca, 0xaa, 0xe6, 0x50, 0xca, 0x5b,
-0x1d, 0x48, 0xc1, 0x3e, 0x08, 0xec, 0xc0, 0x08,
-0x03, 0x80, 0xc0, 0x8a, 0x00, 0x08, 0xdb, 0xe3,
-0xc3, 0x85, 0x28, 0xcd, 0x60, 0x27, 0x12, 0x25,
-0x2a, 0x17, 0x9a, 0x8b, 0x32, 0xc9, 0x88, 0x29,
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x36, 0x00, 0x43, 0x30, 0x5f, 0x40,
-0x63, 0x30, 0x9d, 0x01, 0x24, 0x31, 0x17, 0x42,
-0x81, 0x32, 0x76, 0x87, 0xa2, 0x3f, 0xf0, 0xf9,
-0x9c, 0x3f, 0x8e, 0x07, 0xda, 0x32, 0x74, 0x43,
-0x57, 0x31, 0x12, 0x02, 0xe4, 0x30, 0x7c, 0x82,
-0x98, 0x30, 0x58, 0x42, 0x91, 0x30, 0x49, 0x84,
-0x66, 0x30, 0x2b, 0x01, 0x72, 0x30, 0x08, 0xc0,
-0x39, 0x06, 0x00, 0x10, 0x03, 0xbc, 0x26, 0x82,
-0x4e, 0x3d, 0xca, 0x07, 0xda, 0xa6, 0xe7, 0x6a,
-0xea, 0x07, 0xbb, 0xc6, 0x75, 0x31, 0x3d, 0x16,
-0xbb, 0xdb, 0xff, 0xfd, 0x3f, 0x99, 0xdf, 0x2d,
-0xf6, 0x3f, 0xd2, 0xad, 0xfd, 0x33, 0xaf, 0x8e,
-0xbb, 0x51, 0x8c, 0x04, 0x19, 0x8a, 0x66, 0x11,
-0x8b, 0x89, 0xf9, 0x92, 0x73, 0x91, 0x82, 0xb8,
-0x3c, 0x19, 0x93, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xcc, 0xb8, 0x7b, 0x0c, 0x0f, 0xf8, 0x49,
-0x40, 0xce, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
-0x53, 0xd0, 0xa9, 0x92, 0xbc, 0x3b, 0x29, 0x82,
-0x26, 0x12, 0x11, 0x80, 0x4a, 0x07, 0x59, 0x81,
-0x22, 0x00, 0x89, 0xb8, 0x86, 0x67, 0x0f, 0x48,
-0x1a, 0xcc, 0x40, 0x24, 0x49, 0x54, 0x4f, 0x6c,
-0x9f, 0x00, 0x8d, 0x7f, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa6,
-0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x00, 0x00, 0xd4, 0x49, 0x00,
-0x00, 0x03, 0x01, 0x24, 0x01, 0x03, 0x02, 0x28,
-0x00, 0xa3, 0x03, 0xbc, 0x05, 0x73, 0x06, 0xd0,
-0x0d, 0x63, 0x0f, 0xbc, 0x2b, 0x53, 0x67, 0x39,
-0x4c, 0xf3, 0x64, 0xbc, 0x2c, 0xd3, 0x0f, 0xa0,
-0x13, 0x23, 0xd3, 0xc4, 0x4d, 0x66, 0xf9, 0x33,
-0xa3, 0xe0, 0xcb, 0x3b, 0x73, 0x16, 0xa1, 0x41,
-0x00, 0x46, 0x47, 0x00, 0x4a, 0xea, 0x46, 0x27,
-0xef, 0x76, 0xbe, 0x9f, 0xe8, 0xea, 0x80, 0xd9,
-0xfc, 0xd1, 0x76, 0xff, 0xa6, 0xef, 0x83, 0x46,
-0x2f, 0x90, 0x06, 0x27, 0x18, 0x66, 0x29, 0xa8,
-0x46, 0x40, 0x4e, 0xe6, 0x09, 0x98, 0xf2, 0x46,
-0x44, 0xd7, 0x50, 0x46, 0x42, 0xb8, 0xee, 0x86,
-0x07, 0x20, 0x49, 0x66, 0x01, 0xd0, 0x1e, 0x46,
-0x04, 0xb0, 0x03, 0xc6, 0xe7, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xcc, 0x14, 0x3d, 0x0c, 0x0f,
-0xfd, 0xa4, 0xc1, 0x02, 0x04, 0xa3, 0x41, 0xdf,
-0xf0, 0x50, 0x12, 0x1c, 0x40, 0xfe, 0x6b, 0x40,
-0xd8, 0xb1, 0x29, 0x50, 0xbd, 0xd2, 0x60, 0x7d,
-0x9f, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x32, 0x80,
-0x57, 0x30, 0x55, 0xc0, 0x21, 0x30, 0x8c, 0x00,
-0xbe, 0x30, 0xf8, 0x41, 0xbd, 0x32, 0x30, 0x85,
-0x58, 0x3e, 0x33, 0x68, 0x36, 0x3d, 0xdb, 0x05,
-0x94, 0x32, 0x2c, 0xc2, 0x8d, 0x30, 0xee, 0x02,
-0x66, 0x30, 0x67, 0x02, 0x3e, 0x30, 0x42, 0xc2,
-0x43, 0x30, 0x32, 0x83, 0xe8, 0x33, 0x75, 0x20,
-0xc1, 0xe2, 0xf1, 0x00, 0x11, 0x60, 0xda, 0x44,
-0x07, 0x1b, 0x9c, 0xbf, 0xc5, 0x3a, 0x4d, 0xbe,
-0x2d, 0xde, 0xae, 0xa6, 0xa7, 0xf7, 0x7b, 0xbf,
-0xbb, 0xd5, 0xb4, 0xf3, 0x7f, 0xbe, 0xbf, 0xdf,
-0xfe, 0xfe, 0x87, 0x1d, 0x75, 0xfe, 0xa3, 0x16,
-0x88, 0x13, 0x12, 0x4c, 0x23, 0x12, 0x14, 0x53,
-0x1b, 0x67, 0xa3, 0x04, 0x18, 0x79, 0xf3, 0x1d,
-0xff, 0xad, 0xf3, 0x1d, 0x00, 0x78, 0x33, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x49, 0x8c, 0x55,
-0x1b, 0x4f, 0xf0, 0x47, 0x28, 0xd7, 0x04, 0x63,
-0x41, 0xdf, 0xf0, 0x50, 0x02, 0xd4, 0x25, 0x23,
-0x01, 0x44, 0x0f, 0xb3, 0x02, 0x74, 0x02, 0xd3,
-0x75, 0x06, 0x4e, 0x26, 0x68, 0x35, 0xb8, 0x50,
-0x68, 0x92, 0xab, 0x9e, 0xd9, 0x3d, 0x80, 0x8f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29,
-0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0x34, 0xc0, 0x64, 0x30, 0x57, 0x00, 0x00, 0x30,
-0x8d, 0x40, 0x9b, 0x30, 0xf9, 0x01, 0x7e, 0x32,
-0x33, 0xc4, 0x9f, 0x3e, 0x47, 0xa2, 0x9d, 0x3d,
-0xee, 0xc4, 0xe1, 0x32, 0x2e, 0x82, 0x5c, 0x30,
-0xed, 0x42, 0x55, 0x30, 0x64, 0xc2, 0x3d, 0x30,
-0x3d, 0x82, 0x44, 0x30, 0x2b, 0xc3, 0xed, 0x32,
-0xdd, 0x2c, 0xc1, 0x02, 0xe1, 0x50, 0x2a, 0xc0,
-0x34, 0xb8, 0x02, 0x59, 0x3f, 0x79, 0xed, 0x96,
-0x19, 0xe9, 0xfb, 0x79, 0x3f, 0xd7, 0xed, 0xff,
-0x4f, 0xff, 0xfb, 0x4a, 0xec, 0xfb, 0x7d, 0xcf,
-0xc9, 0x7e, 0x76, 0x8f, 0x93, 0xa0, 0xc5, 0x91,
-0xf8, 0xc4, 0x23, 0x0c, 0xc3, 0xd5, 0x10, 0xc5,
-0x69, 0xfc, 0xc0, 0xd7, 0x1e, 0xa0, 0xc6, 0x50,
-0xec, 0xa8, 0xc6, 0x1b, 0x1e, 0x30, 0xc0, 0x7e,
-0x09, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
-0x30, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x00,
-0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x64, 0xc0,
-0x64, 0x04, 0x10, 0xc0, 0xa2, 0x00, 0xe0, 0xdd,
-0xa0, 0x83, 0x8a, 0x15, 0x4d, 0x6c, 0x0d, 0x1a,
-0x27, 0x2a, 0xd7, 0xba, 0x4d, 0x6c, 0xb2, 0x62,
-0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x36, 0x80, 0x71, 0x08, 0x0b, 0x08,
-0xc2, 0x38, 0x01, 0xd8, 0xc3, 0xeb, 0x04, 0xf4,
-0xc8, 0xd8, 0x0f, 0x60, 0xf9, 0x5f, 0x72, 0x98,
-0xf7, 0xf8, 0x10, 0x88, 0xc8, 0xbf, 0x08, 0xa4,
-0xc3, 0xb0, 0x09, 0x08, 0xc1, 0x86, 0x08, 0xe0,
-0xc0, 0xe1, 0x09, 0x1c, 0xc0, 0x92, 0x0f, 0xc8,
-0xc8, 0xd4, 0xc3, 0x01, 0x8b, 0xc6, 0x00, 0x8b,
-0x2d, 0xb8, 0x40, 0x72, 0xf9, 0xcb, 0xfc, 0x53,
-0xa4, 0xfe, 0x12, 0xf5, 0x75, 0x31, 0xbf, 0x14,
-0xfb, 0xbf, 0xff, 0xde, 0xdf, 0xef, 0xfe, 0x97,
-0xfa, 0x91, 0xbf, 0xa7, 0x5d, 0xee, 0xea, 0x31,
-0x50, 0x7f, 0x30, 0xf4, 0xc2, 0x30, 0xc1, 0x47,
-0x31, 0x06, 0x82, 0x30, 0x28, 0x87, 0xb3, 0x31,
-0x43, 0xfb, 0x65, 0x31, 0x37, 0x87, 0x97, 0x30,
-0x10, 0xc2, 0x5e, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xca, 0xd8, 0x2b, 0x0e, 0x0f, 0xff, 0x84,
-0x80, 0xcf, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
-0x30, 0x1e, 0x41, 0x0d, 0x30, 0x2a, 0x40, 0x45,
-0x07, 0x77, 0x4e, 0x2e, 0x3c, 0x35, 0xb8, 0x10,
-0x78, 0x9a, 0xab, 0x9f, 0x29, 0x3d, 0x80, 0x8f,
-0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a,
-0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x30, 0x38, 0x40, 0x7e, 0x30,
-0x59, 0x00, 0x19, 0x30, 0x8f, 0x40, 0x4d, 0x30,
-0xfb, 0x00, 0xf4, 0x32, 0x38, 0x43, 0x05, 0x3e,
-0x63, 0x96, 0x37, 0x3e, 0x09, 0xc3, 0x59, 0x32,
-0x30, 0x81, 0xf0, 0x30, 0xea, 0x42, 0x2f, 0x30,
-0x5e, 0x42, 0x35, 0x33, 0x2a, 0x46, 0x31, 0xcf,
-0xf5, 0x30, 0xbd, 0x4d, 0x04, 0x06, 0x03, 0xa0,
-0x2a, 0xc8, 0x6e, 0x71, 0xc9, 0x64, 0xfd, 0xee,
-0xfe, 0xff, 0xff, 0xf2, 0xe7, 0xff, 0xdf, 0xff,
-0x57, 0xfc, 0x1e, 0xfa, 0x75, 0xfb, 0x3f, 0xff,
-0x76, 0x8f, 0xf4, 0x7d, 0xbf, 0xde, 0xdd, 0x0e,
-0xf6, 0xe8, 0x4f, 0x93, 0xa0, 0x12, 0x28, 0x0c,
-0x3c, 0x80, 0xc1, 0x0f, 0x40, 0xae, 0x40, 0x0f,
-0x33, 0x00, 0x64, 0x30, 0xa3, 0x05, 0xa1, 0x7e,
-0x83, 0x05, 0x64, 0x2f, 0xe2, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xca, 0xc0, 0x2d, 0x0e, 0x0f,
-0xff, 0x84, 0x81, 0x02, 0x84, 0xa3, 0x41, 0xdf,
-0xf0, 0x50, 0x00, 0x39, 0x4c, 0x02, 0x60, 0x17,
-0x0c, 0x03, 0x40, 0x03, 0x8a, 0x51, 0x81, 0xde,
-0x8d, 0x71, 0x46, 0x28, 0x3a, 0xf9, 0x91, 0x6f,
-0x6b, 0xbd, 0xde, 0xa4, 0xc4, 0x14, 0xd4, 0x53,
-0x32, 0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x3a, 0x00,
-0x8b, 0x30, 0x5a, 0x40, 0x32, 0x30, 0x8f, 0x80,
-0x1e, 0x30, 0xfc, 0x40, 0xa7, 0x32, 0x39, 0x02,
-0x1a, 0x3e, 0x6b, 0xcf, 0x0a, 0x3e, 0x11, 0x82,
-0x7c, 0x32, 0x30, 0xc1, 0xb9, 0x30, 0xe8, 0x82,
-0x1a, 0x30, 0x5b, 0x02, 0x2e, 0x30, 0x2c, 0xc2,
-0x47, 0x30, 0x14, 0x03, 0xf6, 0x30, 0xa5, 0x38,
-0x42, 0x31, 0x20, 0x02, 0x2d, 0xb7, 0x42, 0x0b,
-0x97, 0xce, 0x5f, 0x30, 0xc9, 0x57, 0xf9, 0x5f,
-0xa3, 0x90, 0xba, 0x9d, 0x5f, 0x6f, 0xf4, 0x68,
-0xd9, 0xfe, 0x8b, 0x4b, 0x6c, 0xd9, 0xa7, 0xec,
-0x75, 0x3e, 0xee, 0x96, 0x7b, 0x28, 0x31, 0x30,
-0x7b, 0x30, 0xbc, 0xc2, 0x30, 0x61, 0x47, 0x30,
-0x36, 0x84, 0x30, 0x0a, 0x07, 0xbb, 0x30, 0x85,
-0xfb, 0xa9, 0x30, 0x7d, 0x87, 0xa3, 0x30, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x38, 0x7b,
-0x0e, 0x0f, 0xf4, 0x49, 0x40, 0xc7, 0x04, 0x25,
-0x25, 0xbf, 0xe8, 0x56, 0x0d, 0x82, 0x66, 0x30,
-0x26, 0xc1, 0x1b, 0x30, 0x2c, 0xc0, 0x59, 0x01,
-0x79, 0x0e, 0x32, 0x06, 0x0e, 0xb9, 0x13, 0x13,
-0x55, 0xa9, 0xf2, 0x93, 0xd8, 0x08, 0xfb, 0x3f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99,
-0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
-0x3b, 0xc0, 0x96, 0x30, 0x5b, 0x00, 0x4d, 0x0e,
-0x12, 0x08, 0xc3, 0xf0, 0x01, 0x30, 0xc8, 0xe7,
-0x04, 0x24, 0xf9, 0xbe, 0x19, 0x74, 0xf8, 0x55,
-0x06, 0x0c, 0xc8, 0xc0, 0x05, 0xf0, 0xc3, 0x99,
-0x08, 0x1c, 0xc1, 0x5f, 0x08, 0xa4, 0xc0, 0x98,
-0x09, 0x10, 0xc0, 0x2b, 0x0f, 0xe4, 0x43, 0x4f,
-0x20, 0x18, 0x16, 0x00, 0xaa, 0x38, 0xdd, 0xe3,
-0x92, 0xca, 0x3b, 0xcf, 0x6d, 0x27, 0x7d, 0x2d,
-0xd1, 0x4f, 0x6d, 0xff, 0xf7, 0x23, 0xfa, 0xaa,
-0xe9, 0xff, 0x4d, 0x88, 0xaf, 0xb7, 0x47, 0xdd,
-0xa3, 0xed, 0x4d, 0x1f, 0x26, 0x60, 0x25, 0x80,
-0xf0, 0x60, 0x13, 0x01, 0x82, 0x60, 0x04, 0x82,
-0x8c, 0x58, 0x0a, 0x1c, 0xc0, 0x08, 0x1e, 0xf0,
-0xc0, 0x27, 0xee, 0xc0, 0xc1, 0x21, 0xe9, 0x0c,
-0x1d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
-0x20, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x80, 0xfe,
-0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0xc9, 0xac,
-0xc2, 0xb0, 0x48, 0x0c, 0x2e, 0x01, 0x88, 0xc3,
-0xd4, 0x03, 0xc5, 0x88, 0xc0, 0xa5, 0xc4, 0xa1,
-0x39, 0x46, 0x1e, 0xf9, 0x05, 0xba, 0xec, 0xb2,
-0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93,
-0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x3d, 0x00, 0xa1, 0x30, 0x5c, 0x40,
-0x62, 0x30, 0x90, 0x00, 0x2f, 0x30, 0xfc, 0x40,
-0x0c, 0x32, 0x39, 0x00, 0x7b, 0x3e, 0x6f, 0xc6,
-0xe1, 0x3e, 0x14, 0x80, 0x38, 0x32, 0x2e, 0xc1,
-0x3d, 0x30, 0xe3, 0x81, 0xf0, 0x30, 0x53, 0x82,
-0x22, 0x30, 0x1f, 0xc2, 0x45, 0x04, 0x07, 0xf0,
-0x60, 0x1a, 0x70, 0xc0, 0xc4, 0x94, 0x08, 0xa3,
-0x6f, 0x04, 0x96, 0x5f, 0x45, 0x7d, 0xcc, 0xa0,
-0x7f, 0xa3, 0xa6, 0x8e, 0xcb, 0xbf, 0xef, 0x4f,
-0xf5, 0x54, 0x9d, 0x1f, 0xe8, 0x8a, 0x16, 0xdb,
-0xf2, 0x3f, 0x7e, 0x9f, 0xd1, 0x4f, 0xc8, 0x18,
-0x8c, 0x3b, 0x98, 0x42, 0x60, 0x03, 0x14, 0x73,
-0x03, 0x28, 0x63, 0x01, 0x4c, 0x7b, 0xd3, 0x09,
-0x23, 0xba, 0x93, 0x09, 0x34, 0x7a, 0x53, 0x02,
-0xb0, 0x26, 0xe3, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xca, 0xbc, 0x2b, 0x0e, 0x0f, 0xff, 0x84,
-0x80, 0xda, 0x84, 0xe3, 0x41, 0xff, 0x6c, 0x94,
-0x02, 0xec, 0x12, 0x73, 0x02, 0xf4, 0x06, 0xd3,
-0x7b, 0x07, 0x0e, 0x32, 0x13, 0x12, 0xb9, 0x94,
-0x13, 0x15, 0xad, 0xec, 0x91, 0xd8, 0x04, 0xfd,
-0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14,
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x30, 0x3e, 0xc0, 0xac, 0x30,
-0x5c, 0x80, 0x77, 0x30, 0x90, 0xc0, 0x5a, 0x30,
-0xfc, 0x00, 0x77, 0x32, 0x38, 0xc1, 0xb0, 0x3e,
-0x6b, 0x0f, 0x6e, 0x3e, 0x10, 0x41, 0x32, 0x32,
-0x2d, 0x00, 0xfa, 0x30, 0xe1, 0x41, 0xd9, 0x30,
-0x50, 0x42, 0x1d, 0x30, 0x18, 0x82, 0x42, 0x30,
-0x03, 0x83, 0xf7, 0x30, 0xf5, 0x3c, 0x2e, 0x30,
-0x20, 0x02, 0xa8, 0xf3, 0xd7, 0x24, 0x96, 0x51,
-0xde, 0x37, 0x97, 0x09, 0x79, 0x76, 0xfa, 0x78,
-0x9e, 0xfa, 0x35, 0x7f, 0xfd, 0x3a, 0x7e, 0xbf,
-0xa6, 0x2e, 0x8d, 0x9f, 0x47, 0xef, 0xa3, 0xde,
-0xde, 0xcf, 0x27, 0x49, 0x10, 0x61, 0xb1, 0xc1,
-0x80, 0x8c, 0xa4, 0x8b, 0x63, 0x06, 0xdc, 0xcc,
-0x04, 0x81, 0x23, 0x0c, 0x23, 0xd8, 0xd7, 0x0c,
-0x23, 0x61, 0x1f, 0x8c, 0x07, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xca, 0xc4, 0x2b, 0x0e, 0x0f,
-0xff, 0x84, 0x80, 0xfe, 0x84, 0xa3, 0x41, 0xdf,
-0xf0, 0x50, 0x90, 0x59, 0xcc, 0x06, 0xc0, 0x29,
-0x8c, 0x06, 0x60, 0x0e, 0x8e, 0x1c, 0x34, 0xe6,
-0x83, 0x84, 0xb0, 0x0a, 0x05, 0xdc, 0xc9, 0x1d,
-0x80, 0x7c, 0xe7, 0xfd, 0x29, 0x88, 0x29, 0xa8,
-0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x40, 0x00,
-0xb7, 0x30, 0x5d, 0x40, 0x8a, 0x30, 0x90, 0x80,
-0x83, 0x30, 0xfb, 0xc0, 0xca, 0x32, 0x37, 0x02,
-0xa9, 0x3e, 0x62, 0xd6, 0x8f, 0x3e, 0x07, 0x82,
-0x39, 0x32, 0x2a, 0xc0, 0xaf, 0x30, 0xde, 0x01,
-0xc0, 0x30, 0x4c, 0x02, 0x14, 0x30, 0x11, 0x42,
-0x3f, 0x30, 0x0e, 0xc3, 0xf4, 0x31, 0xcd, 0x30,
-0x00, 0x31, 0x1d, 0x02, 0x2d, 0x97, 0xa2, 0x4b,
-0x2f, 0xa2, 0xbe, 0xec, 0xa3, 0xfd, 0x0c, 0xf6,
-0xfa, 0xb4, 0x5a, 0xbf, 0x67, 0xff, 0xef, 0xd3,
-0xfe, 0x9f, 0xf6, 0x7b, 0xba, 0x5f, 0xfe, 0x8f,
-0x21, 0x49, 0x87, 0xc3, 0x89, 0x82, 0x25, 0xe0,
-0x15, 0x45, 0x31, 0x02, 0x82, 0x30, 0x31, 0x47,
-0xb5, 0x31, 0x4d, 0x3b, 0x63, 0x31, 0x48, 0x47,
-0x9f, 0x30, 0x43, 0x02, 0x70, 0x30, 0x36, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x14, 0x2b,
-0x0e, 0x0f, 0xff, 0x84, 0x80, 0xcf, 0x04, 0x64,
-0x55, 0xcf, 0xec, 0x56, 0x41, 0x33, 0x30, 0x31,
-0x40, 0x7f, 0x37, 0xc0, 0xd8, 0xe3, 0x24, 0x53,
-0x5b, 0x80, 0xc8, 0x89, 0x8a, 0xbd, 0xec, 0x91,
-0xce, 0x02, 0x7e, 0xcf, 0xff, 0xd7, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x69,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30,
-0x41, 0x40, 0xc0, 0x30, 0x5d, 0x80, 0x9f, 0x30,
-0x90, 0x40, 0xa6, 0x30, 0xfa, 0x81, 0x17, 0x32,
-0x34, 0xc3, 0x84, 0x3e, 0x56, 0x1c, 0xf8, 0x3d,
-0xfb, 0x43, 0x1c, 0x32, 0x27, 0x00, 0x5a, 0x30,
-0xda, 0xc1, 0xa9, 0x30, 0x48, 0x42, 0x0d, 0x30,
-0x08, 0x82, 0x3a, 0x30, 0x17, 0x83, 0xf1, 0x32,
-0x75, 0x34, 0xc0, 0xa2, 0xe1, 0x40, 0x2a, 0xda,
-0x7c, 0x66, 0xa7, 0x28, 0xef, 0x65, 0x7c, 0x4a,
-0x73, 0xcf, 0xfa, 0xba, 0xed, 0xfb, 0x3e, 0xff,
-0xfa, 0x35, 0xf7, 0x37, 0xfb, 0xbf, 0xa1, 0xdf,
-0x4e, 0xee, 0x85, 0xbd, 0x7b, 0xfa, 0xcc, 0x39,
-0x1b, 0x8c, 0x06, 0x2e, 0xcc, 0x0c, 0x50, 0x8c,
-0x57, 0xa0, 0x4c, 0x0f, 0x41, 0xeb, 0x0c, 0x67,
-0x5e, 0xc9, 0x8c, 0x65, 0x81, 0xe6, 0x0c, 0x13,
-0x90, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xca,
-0x94, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x03,
-0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x9c, 0xcc,
-0x0e, 0x60, 0x4e, 0x0c, 0x0c, 0x80, 0x21, 0x8d,
-0xf2, 0x41, 0x38, 0xb1, 0x70, 0xd6, 0xc0, 0xa1,
-0xe2, 0x5a, 0xac, 0x7b, 0xe4, 0x13, 0xe1, 0x89,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0x30, 0x42, 0x80, 0xcb, 0x30, 0x5e, 0x40,
-0xb0, 0x30, 0x90, 0x00, 0xc9, 0x30, 0xf9, 0x41,
-0x5a, 0x32, 0x32, 0x04, 0x4f, 0x3e, 0x45, 0xe2,
-0xe9, 0x3d, 0xeb, 0x03, 0xed, 0x12, 0x44, 0x78,
-0xc3, 0x5c, 0x06, 0x38, 0xc1, 0x10, 0x08, 0x08,
-0x2a, 0x11, 0xb9, 0x80, 0xfe, 0x1f, 0x51, 0x98,
-0xe9, 0x46, 0x0a, 0x17, 0x88, 0xc0, 0x8b, 0x25,
-0xf0, 0x99, 0x9f, 0xa2, 0xbe, 0xe4, 0x4a, 0x1e,
-0xf2, 0x4c, 0xd3, 0x6f, 0x0e, 0x6d, 0xeb, 0xf6,
-0xff, 0xa3, 0xb3, 0xff, 0xda, 0x9a, 0xd9, 0xb3,
-0xfb, 0xfa, 0x7f, 0x3f, 0x6f, 0xc8, 0x18, 0x68,
-0x36, 0x81, 0x4b, 0x83, 0x06, 0xd4, 0x13, 0x1b,
-0x27, 0xc3, 0x04, 0x8c, 0x7a, 0x33, 0x1e, 0x7b,
-0xad, 0xb3, 0x1d, 0xec, 0x79, 0x13, 0x05, 0x80,
-0x27, 0x23, 0x03, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xca, 0xe8, 0x2d, 0x0e, 0x0f, 0xff, 0x84,
-0x80, 0xd0, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55,
-0xd4, 0x13, 0xd3, 0x03, 0x2c, 0x08, 0xf3, 0x7c,
-0x13, 0x0e, 0x2e, 0x71, 0x35, 0xa8, 0x4c, 0x68,
-0x90, 0xab, 0xde, 0x49, 0x1c, 0xe0, 0x27, 0x5f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 0xa8, 0xa6,
-0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x30, 0x43, 0xc0, 0xd4, 0x30,
-0x5e, 0x00, 0xc3, 0x30, 0x8f, 0xc0, 0xe8, 0x30,
-0xf8, 0x01, 0x9b, 0x32, 0x2e, 0xc5, 0x0c, 0x3e,
-0x30, 0xa8, 0x7c, 0x3d, 0xd6, 0xc4, 0xac, 0x32,
-0x1f, 0x00, 0x63, 0x30, 0xd3, 0xc1, 0x75, 0x30,
-0x3f, 0xc1, 0xfb, 0x30, 0x03, 0x42, 0x32, 0x30,
-0x27, 0x03, 0xe5, 0x33, 0xb5, 0x24, 0xc2, 0x22,
-0xe1, 0x00, 0x15, 0x60, 0x9e, 0x99, 0xab, 0xd4,
-0x77, 0x9e, 0x9a, 0xc3, 0x5e, 0xbe, 0x8b, 0x38,
-0x4e, 0xe4, 0xfa, 0x7d, 0x3f, 0xd3, 0xfd, 0x65,
-0x17, 0xfc, 0xae, 0xdd, 0xba, 0x3f, 0xd1, 0xe6,
-0xc4, 0xe9, 0xac, 0x86, 0x01, 0x38, 0x0b, 0x02,
-0x20, 0x27, 0x4c, 0x02, 0x00, 0x45, 0x0c, 0x06,
-0xd0, 0x8a, 0x4c, 0x12, 0x01, 0xa9, 0x8c, 0x7a,
-0x5c, 0xd6, 0x0d, 0xdf, 0x9a, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xca, 0xa4, 0x2b, 0x0e, 0x0f,
-0xff, 0x84, 0x81, 0x01, 0x04, 0xa3, 0x41, 0xdf,
-0xf0, 0x50, 0x58, 0xc5, 0x54, 0x88, 0x4c, 0x37,
-0x84, 0x58, 0xc2, 0xc0, 0x20, 0x0c, 0x35, 0xc1,
-0x24, 0xc3, 0xb8, 0x1c, 0x0e, 0x68, 0x48, 0x68,
-0xed, 0x6e, 0x40, 0xf3, 0x93, 0xf5, 0xce, 0x7f,
-0xd2, 0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72,
-0x6e, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x44, 0x80,
-0xdd, 0x30, 0x5e, 0x40, 0xd2, 0x30, 0x8e, 0x81,
-0x09, 0x30, 0xf6, 0x41, 0xd6, 0x32, 0x2a, 0x85,
-0xc1, 0x3e, 0x18, 0x6d, 0xc7, 0x3d, 0xbe, 0x05,
-0x63, 0x32, 0x1a, 0x40, 0xb6, 0x30, 0xcf, 0x81,
-0x58, 0x30, 0x3b, 0x01, 0xee, 0x30, 0x0c, 0x82,
-0x2d, 0x30, 0x2e, 0xc3, 0xde, 0x30, 0x22, 0xc1,
-0x46, 0x30, 0x05, 0x80, 0x2f, 0x0b, 0x80, 0x08,
-0x0d, 0xd1, 0x64, 0x4d, 0x29, 0x94, 0x4f, 0xb6,
-0x8f, 0x38, 0x1d, 0xf6, 0xf4, 0xdb, 0xbd, 0x97,
-0xd9, 0xa3, 0xde, 0x8f, 0x56, 0xaa, 0xbf, 0xfc,
-0xd5, 0x9e, 0xcb, 0x32, 0x7e, 0x73, 0xa7, 0xb3,
-0xa1, 0xbf, 0x0e, 0x56, 0x60, 0x15, 0x00, 0xce,
-0x54, 0x02, 0xd0, 0xc0, 0x35, 0x04, 0xf4, 0xc0,
-0x92, 0x09, 0xd0, 0xc1, 0x77, 0x1e, 0x2c, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 0xf8, 0x2b,
-0x0e, 0x0f, 0xff, 0x84, 0x80, 0xe4, 0x84, 0xe3,
-0x95, 0xff, 0x6c, 0x94, 0xc9, 0xc4, 0xe8, 0x3c,
-0xe6, 0x4d, 0xde, 0x4c, 0x6b, 0x89, 0xc0, 0xc4,
-0x3c, 0x51, 0x4c, 0x34, 0x42, 0x7c, 0xc3, 0xe0,
-0x18, 0x0c, 0x44, 0xc2, 0x5c, 0xec, 0xc8, 0x45,
-0x92, 0x15, 0x1b, 0xc9, 0x17, 0x96, 0x54, 0xce,
-0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xfa, 0xd3, 0x10, 0x53, 0x51,
-0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0x50, 0x41, 0x0a, 0x30, 0x6c, 0x81, 0x07, 0x30,
-0xa2, 0xc1, 0x50, 0x31, 0x17, 0x02, 0x5f, 0x32,
-0x73, 0x47, 0x54, 0x3f, 0xec, 0xb9, 0xe4, 0x3f,
-0x87, 0x46, 0xea, 0x32, 0x5f, 0x81, 0x29, 0x30,
-0xe8, 0x41, 0x6d, 0x30, 0x3e, 0xc2, 0x2d, 0x30,
-0x18, 0x42, 0x76, 0x30, 0x3d, 0x84, 0x63, 0x30,
-0x2d, 0x01, 0x75, 0x30, 0x09, 0x40, 0x38, 0x06,
-0x00, 0x12, 0x07, 0x61, 0x35, 0x27, 0x1e, 0x29,
-0x1e, 0x7d, 0xf9, 0xd5, 0xa0, 0xdf, 0xd4, 0x8b,
-0x3f, 0xda, 0xea, 0xfe, 0xb4, 0x9a, 0xdf, 0xdf,
-0x5b, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x55, 0xe8,
-0xdf, 0xfe, 0xff, 0x2f, 0x93, 0xff, 0x4b, 0x7f,
-0xed, 0x4f, 0x1b, 0xd0, 0xb3, 0xee, 0xaa, 0xfd,
-0x06, 0x01, 0x38, 0x0c, 0x42, 0x10, 0x2c, 0xcc,
-0x04, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb,
-0xdc, 0x3b, 0x0e, 0x0f, 0xfd, 0xa4, 0xc1, 0x0d,
-0x85, 0x23, 0x41, 0xff, 0x6c, 0x90, 0x00, 0x4e,
-0x0c, 0x0a, 0x50, 0x9b, 0xcc, 0x19, 0xe1, 0xde,
-0x0c, 0xac, 0x7e, 0x63, 0x8e, 0xa3, 0x1d, 0xa0,
-0xc7, 0x4c, 0x9b, 0x4c, 0x46, 0x85, 0x20, 0xc3,
-0x48, 0x29, 0x8c, 0x3d, 0xc1, 0xac, 0xc4, 0x40,
-0x2a, 0x0e, 0xc0, 0x98, 0x49, 0x2d, 0x50, 0x3c,
-0xf1, 0x49, 0x7d, 0x7c, 0x2a, 0x4c, 0x41, 0x4d,
-0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0x30, 0x51, 0x01, 0x13, 0x30, 0x6c, 0x41,
-0x18, 0x30, 0xa1, 0x01, 0x71, 0x31, 0x14, 0xc2,
-0x9c, 0x32, 0x6d, 0x08, 0x11, 0x3f, 0xc7, 0x7f,
-0x65, 0x3f, 0x62, 0x07, 0xa7, 0x32, 0x58, 0xc1,
-0x74, 0x30, 0xe3, 0x01, 0x4a, 0x30, 0x39, 0x02,
-0x1e, 0x30, 0x20, 0x82, 0x6f, 0x30, 0x45, 0x44,
-0x58, 0x30, 0x32, 0x41, 0x70, 0x30, 0x0a, 0x80,
-0x37, 0x04, 0x80, 0x10, 0x06, 0x48, 0x93, 0x13,
-0x4b, 0x4b, 0x0f, 0xb6, 0xcd, 0x9c, 0x52, 0x76,
-0xed, 0xad, 0xf5, 0x7f, 0x6f, 0x55, 0xbd, 0xfd,
-0x7e, 0x9f, 0xed, 0x5f, 0xfc, 0xfd, 0xed, 0xf9,
-0xff, 0xd9, 0x5f, 0xf4, 0xff, 0xd3, 0xaa, 0xd3,
-0xff, 0x7a, 0x7e, 0xb7, 0xfc, 0x7f, 0xb1, 0x96,
-0xfc, 0x39, 0x41, 0x80, 0x40, 0x02, 0xf8, 0x00,
-0x0a, 0xe3, 0x01, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xcd, 0x2d, 0x61, 0x0c, 0x0f, 0xb4, 0x4d,
-0xc0, 0xde, 0x85, 0x23, 0x41, 0xff, 0x6c, 0x94,
-0x2c, 0x13, 0x53, 0x02, 0xd8, 0x26, 0x83, 0x07,
-0x14, 0x76, 0x73, 0x2e, 0xf3, 0x8f, 0xf3, 0xb7,
-0xd7, 0x59, 0x31, 0xf6, 0x26, 0xa3, 0x12, 0x71,
-0x4b, 0x30, 0xd7, 0x0a, 0xd3, 0x0f, 0x60, 0x74,
-0x31, 0x0d, 0x0b, 0xb3, 0xaf, 0x2d, 0x0e, 0x44,
-0x52, 0x6f, 0x24, 0x5e, 0x59, 0x53, 0x3a, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33,
-0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0x30, 0x47, 0x40, 0xf6, 0x30,
-0x5e, 0x01, 0x03, 0x30, 0x8b, 0xc1, 0x5c, 0x30,
-0xef, 0x02, 0x7d, 0x32, 0x1a, 0xc7, 0xae, 0x3d,
-0xb5, 0x3c, 0x4a, 0x3d, 0x5d, 0x47, 0x52, 0x32,
-0x07, 0x81, 0x83, 0x30, 0xc1, 0xc0, 0xff, 0x30,
-0x2c, 0x41, 0xcd, 0x30, 0x22, 0xc2, 0x18, 0x30,
-0x42, 0x03, 0xc3, 0x35, 0xe4, 0xf4, 0xc5, 0x22,
-0xc0, 0x40, 0x15, 0x5b, 0xa0, 0x1a, 0xd6, 0x2d,
-0x19, 0xed, 0x08, 0xf5, 0x18, 0xf4, 0xf5, 0xb5,
-0x17, 0xdb, 0x6b, 0xfd, 0xdf, 0xff, 0xed, 0xf5,
-0x6e, 0x3b, 0x4f, 0xd0, 0xef, 0xa3, 0x75, 0x14,
-0xad, 0xff, 0xa1, 0x06, 0x00, 0xd8, 0x0b, 0x46,
-0x00, 0x48, 0x15, 0x66, 0x02, 0xb0, 0x26, 0x06,
-0x06, 0x38, 0x4c, 0x66, 0x0f, 0x40, 0xea, 0x46,
-0x65, 0x4f, 0x0b, 0x87, 0x8c, 0xff, 0xfb, 0x92,
-0xc4, 0xff, 0x83, 0xcd, 0x35, 0x5f, 0x0c, 0x0f,
-0xb4, 0x4d, 0xc1, 0x0d, 0x85, 0x23, 0x41, 0xff,
-0x6c, 0x90, 0x4e, 0x88, 0x64, 0x32, 0x4c, 0xe6,
-0x26, 0x02, 0x9c, 0x61, 0xb0, 0x16, 0x86, 0x1e,
-0xa0, 0xfa, 0x62, 0x14, 0x19, 0x47, 0x58, 0x64,
-0x1c, 0x8e, 0xa4, 0x1e, 0x78, 0xa4, 0xbe, 0xbe,
-0x15, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xd4, 0x98, 0x82, 0x9a,
-0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0xc9,
-0xd9, 0x00, 0x00, 0x03, 0x01, 0x48, 0x04, 0x73,
-0x01, 0xc4, 0x04, 0xc3, 0x02, 0xc0, 0x07, 0x13,
-0x04, 0xec, 0x0e, 0x03, 0x0b, 0x70, 0x2d, 0x93,
-0x4c, 0x55, 0x6d, 0x13, 0x4a, 0x68, 0x2b, 0x93,
-0x0b, 0x04, 0x08, 0xa3, 0x7c, 0x0e, 0x8c, 0x48,
-0x8a, 0x31, 0x32, 0xa4, 0xca, 0x73, 0xc3, 0x1a,
-0x96, 0x8b, 0x4a, 0xe1, 0x43, 0x35, 0xb7, 0xdb,
-0x3d, 0xff, 0xd2, 0xfe, 0xb4, 0xc7, 0x71, 0xa7,
-0x33, 0x59, 0x01, 0x8e, 0xac, 0xc0, 0x1c, 0x01,
-0xa4, 0xc0, 0x16, 0x03, 0x08, 0xc0, 0x71, 0x05,
-0x6c, 0xc0, 0xf8, 0x0a, 0xc8, 0xc2, 0x59, 0x21,
-0x04, 0xcf, 0x70, 0xfd, 0xa4, 0xfc, 0x6e, 0x0c,
-0xcc, 0xa2, 0x8a, 0xe8, 0xc5, 0xb4, 0x60, 0xcc,
-0x3f, 0x43, 0x64, 0xc4, 0x60, 0x27, 0x0c, 0xff,
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 0x0c, 0x29,
-0x0e, 0x0f, 0xff, 0x84, 0x81, 0x12, 0x05, 0x23,
-0x41, 0xff, 0x6c, 0x90, 0x4b, 0xc3, 0xfc, 0xf1,
-0x50, 0xc2, 0x15, 0x12, 0xed, 0xd4, 0x8b, 0xc5,
-0x2a, 0x67, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff,
-0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30,
-0x3e, 0xc0, 0xe0, 0x30, 0x51, 0x00, 0xf9, 0x30,
-0x77, 0x41, 0x5a, 0x30, 0xcc, 0x02, 0x83, 0x31,
-0xcc, 0x47, 0xbe, 0x3b, 0xbc, 0xbc, 0x98, 0x3b,
-0x71, 0x47, 0x70, 0x31, 0xb9, 0x81, 0xb7, 0x30,
-0xa0, 0x40, 0xa1, 0x30, 0x1c, 0x41, 0x7b, 0x30,
-0x28, 0xc1, 0xc4, 0x30, 0x43, 0x03, 0x35, 0x35,
-0xf4, 0x2c, 0xc5, 0x22, 0x22, 0xce, 0xae, 0x68,
-0x67, 0x2b, 0x16, 0x9c, 0xfd, 0xae, 0xf3, 0x1e,
-0xbe, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xdf, 0xdf,
-0xaf, 0xf7, 0x7d, 0x1b, 0xba, 0x2f, 0xd7, 0xd2,
-0x83, 0x00, 0x54, 0x06, 0x23, 0x00, 0x84, 0x0b,
-0xf3, 0x01, 0xf0, 0x15, 0x43, 0x04, 0x2c, 0x2a,
-0x93, 0x09, 0xf8, 0x82, 0x43, 0x41, 0xaf, 0xe8,
-0xc3, 0x40, 0x30, 0x81, 0x63, 0x0a, 0xbc, 0x2b,
-0x53, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0x48,
-0xf8, 0x55, 0x1f, 0x4f, 0xf0, 0x47, 0x21, 0x16,
-0x85, 0x23, 0x01, 0xff, 0x6c, 0x90, 0x05, 0xd8,
-0x18, 0x43, 0x03, 0xf0, 0x0d, 0xe3, 0x04, 0x5c,
-0x0a, 0x73, 0x04, 0xa8, 0x10, 0xe3, 0xc2, 0x48,
-0x07, 0x29, 0xa5, 0xc3, 0xaf, 0x0e, 0x45, 0xeb,
-0x9c, 0xb2, 0xaf, 0xff, 0xec, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcd, 0x29,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x30, 0x36, 0x00, 0xc7, 0x30, 0x45, 0xc0,
-0xe0, 0x30, 0x66, 0x81, 0x3f, 0x30, 0xaf, 0xc2,
-0x56, 0x31, 0x8d, 0x07, 0x35, 0x3a, 0x27, 0xf8,
-0x61, 0x39, 0xe6, 0x06, 0xf1, 0x31, 0x7c, 0x41,
-0xa6, 0x30, 0x87, 0x00, 0x6c, 0x30, 0x13, 0x01,
-0x3c, 0x30, 0x27, 0x01, 0x83, 0x30, 0x3e, 0xc2,
-0xc0, 0x3a, 0xfe, 0x23, 0x22, 0x19, 0x2e, 0xf3,
-0x29, 0x8d, 0x63, 0xdb, 0x2f, 0xec, 0x7f, 0x8e,
-0xef, 0xe8, 0x57, 0xff, 0x4f, 0xff, 0xfd, 0x7f,
-0xf7, 0xfa, 0xbf, 0xa3, 0xdf, 0xf5, 0xff, 0x49,
-0x80, 0x1c, 0x02, 0xf9, 0x80, 0x50, 0x05, 0xd1,
-0x81, 0x0e, 0x0a, 0x79, 0x82, 0x34, 0x14, 0xf1,
-0x85, 0x4a, 0x40, 0x29, 0xa2, 0xb1, 0xec, 0xe9,
-0xa1, 0xea, 0x3f, 0xc9, 0x85, 0xa0, 0x15, 0x71,
-0x83, 0x06, 0x0c, 0xff, 0xfb, 0x92, 0xc4, 0xff,
-0x83, 0xca, 0x30, 0x29, 0x10, 0x0f, 0xff, 0x84,
-0x81, 0x27, 0x84, 0xe3, 0x01, 0xff, 0xec, 0x90,
-0x39, 0x81, 0xfe, 0x07, 0x29, 0x82, 0x24, 0x05,
-0x71, 0x82, 0x4e, 0x09, 0x09, 0xdf, 0xa7, 0x83,
-0x94, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 0x2a, 0x67,
-0x5e, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 0x88, 0x29,
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x30, 0x36, 0xc0, 0xcc, 0x30, 0x45,
-0x00, 0xeb, 0x30, 0x65, 0x41, 0x50, 0x30, 0xac,
-0x82, 0x79, 0x31, 0x86, 0xc7, 0x9c, 0x39, 0xfe,
-0xbb, 0x6e, 0x39, 0xbe, 0x47, 0x58, 0x31, 0x75,
-0x01, 0xcf, 0x30, 0x82, 0xc0, 0x4f, 0x30, 0x0e,
-0x41, 0x31, 0x30, 0x2b, 0xc1, 0x7a, 0x30, 0x42,
-0x82, 0xb7, 0x3b, 0x8d, 0xf3, 0x27, 0x18, 0x2e,
-0xeb, 0x0e, 0x8c, 0xe5, 0xcb, 0x5c, 0xeb, 0x47,
-0xa3, 0xa2, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xfe,
-0x9f, 0xfe, 0x8f, 0xdb, 0x47, 0xd2, 0x60, 0x03,
-0x80, 0xb0, 0x60, 0x19, 0x81, 0x6a, 0x60, 0x48,
-0x02, 0x90, 0x60, 0x95, 0x85, 0x2a, 0x61, 0x64,
-0x0f, 0xc8, 0x69, 0x1f, 0xf9, 0x30, 0x68, 0xeb,
-0x0f, 0xb0, 0x61, 0x79, 0x85, 0x4e, 0x60, 0xc6,
-0x03, 0x10, 0x60, 0x80, 0x01, 0xff, 0xfb, 0x90,
-0xc4, 0xff, 0x83, 0xc9, 0xd4, 0x29, 0x12, 0x0f,
-0xff, 0x64, 0x81, 0x23, 0x05, 0x23, 0x01, 0xff,
-0xec, 0x90, 0xd8, 0x60, 0x88, 0x81, 0x72, 0x60,
-0x91, 0x02, 0x60, 0x77, 0x4a, 0x80, 0xa4, 0xf4,
-0xf8, 0x71, 0xe1, 0xc8, 0xbd, 0x70, 0x4e, 0xca,
-0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xb3, 0x4a, 0x62, 0x0a, 0x6a,
-0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x30, 0x36, 0x80, 0xd1,
-0x30, 0x44, 0xc0, 0xf2, 0x30, 0x63, 0x81, 0x63,
-0x30, 0xa9, 0xc2, 0x9a, 0x31, 0x7f, 0x88, 0x01,
-0x39, 0xd2, 0xfe, 0x61, 0x39, 0x92, 0x87, 0xbd,
-0x31, 0x6d, 0xc1, 0xf4, 0x30, 0x7d, 0x80, 0x2c,
-0x30, 0x08, 0x81, 0x26, 0x30, 0x2f, 0x81, 0x73,
-0x30, 0x46, 0xc2, 0xa8, 0x3c, 0x5d, 0xa3, 0x2a,
-0x19, 0x2e, 0x53, 0x0d, 0x8d, 0x63, 0x95, 0x9c,
-0xba, 0x53, 0xe9, 0x67, 0xfe, 0xef, 0x5f, 0xff,
-0xff, 0xe9, 0xfa, 0x3f, 0xf9, 0x3f, 0x7b, 0xf4,
-0xff, 0xfe, 0xfa, 0x40, 0x80, 0x2a, 0x98, 0x07,
-0x40, 0x58, 0x18, 0x13, 0x60, 0xa1, 0x98, 0x27,
-0x41, 0x44, 0x18, 0x5d, 0x63, 0xe0, 0x9a, 0x63,
-0x9d, 0xc1, 0x9a, 0x55, 0xa3, 0xdb, 0x98, 0x62,
-0x01, 0x4f, 0x18, 0x32, 0xe0, 0xc4, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x7c, 0x2b, 0x12,
-0x0f, 0xff, 0x64, 0x81, 0x27, 0x04, 0xe3, 0x01,
-0xff, 0xec, 0x90, 0x98, 0x20, 0x20, 0x79, 0x98,
-0x21, 0x80, 0x60, 0x18, 0x23, 0xa0, 0xa0, 0x9d,
-0xba, 0xd8, 0x19, 0x31, 0x35, 0xdc, 0x48, 0x7e,
-0x1c, 0xa4, 0xce, 0xbd, 0xbf, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad,
-0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0xfc,
-0xb6, 0x33, 0xa8, 0xdb, 0x35, 0x55, 0x42, 0x39,
-0x12, 0x63, 0x31, 0x49, 0xc7, 0x58, 0x38, 0x75,
-0xb9, 0x3e, 0x38, 0x3e, 0xc7, 0x1c, 0x31, 0x39,
-0x01, 0xd5, 0x30, 0x69, 0x40, 0x01, 0x30, 0x01,
-0xc0, 0xf3, 0x32, 0xc5, 0x3a, 0x34, 0x02, 0x47,
-0x32, 0xc0, 0xb9, 0x30, 0x94, 0x10, 0x41, 0xd6,
-0x75, 0x19, 0x10, 0x87, 0x3d, 0x1e, 0x8f, 0xfe,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
-0x21, 0x01, 0x38, 0xc0, 0x41, 0x02, 0xac, 0xc0,
-0xa4, 0x04, 0xe8, 0xc1, 0x4b, 0x09, 0xec, 0xc3,
-0x0a, 0x1e, 0x60, 0xd3, 0xf3, 0xe9, 0x68, 0xd3,
-0x7c, 0x1e, 0x48, 0xc3, 0x2f, 0x0a, 0x5c, 0xc1,
-0x9e, 0x06, 0x20, 0xc1, 0x00, 0x03, 0xd8, 0xc1,
-0x09, 0x03, 0x24, 0xc1, 0x16, 0x05, 0x38, 0xec,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xe8,
-0x2b, 0x12, 0x0f, 0xff, 0x64, 0x81, 0x1e, 0x05,
-0x23, 0x01, 0xff, 0xec, 0x90, 0x98, 0x00, 0xc9,
-0x69, 0xa8, 0xe3, 0xc3, 0x91, 0xba, 0xf8, 0x55,
-0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
-0xff, 0xff, 0xff, 0xff, 0x52, 0x62, 0x0a, 0x6a,
-0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0x32, 0xf8, 0xbb, 0x33, 0xa4, 0xe2, 0x35, 0x31,
-0x51, 0x38, 0xe6, 0x7c, 0x31, 0x42, 0x87, 0xa9,
-0x38, 0x49, 0xfb, 0xa1, 0x38, 0x13, 0x87, 0x6f,
-0x31, 0x31, 0xc1, 0xf4, 0x01, 0x06, 0x4a, 0x40,
-0x07, 0x41, 0x97, 0xc9, 0x89, 0xa1, 0xf1, 0xd1,
-0x97, 0x65, 0xa1, 0x84, 0xc0, 0x7a, 0x0f, 0x33,
-0x98, 0xd6, 0xc1, 0x97, 0xfb, 0xff, 0xff, 0x77,
-0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb,
-0xff, 0xfe, 0x92, 0x40, 0x12, 0x4c, 0x04, 0x80,
-0x29, 0x0c, 0x0a, 0xd0, 0x4c, 0xcc, 0x15, 0x80,
-0x9b, 0x0c, 0x32, 0xb1, 0xdc, 0x4d, 0x4b, 0xee,
-0x47, 0xcd, 0x44, 0x51, 0xda, 0xcc, 0x34, 0xc0,
-0xa3, 0x0c, 0x1a, 0x90, 0x62, 0x4c, 0x10, 0x10,
-0x3f, 0x4c, 0x10, 0x40, 0x34, 0x0c, 0x11, 0x10,
-0x57, 0x4e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc8, 0x3c, 0x23, 0x14, 0x0e, 0xff, 0xa2, 0x81,
-0x1f, 0x05, 0x23, 0x01, 0xff, 0xec, 0x90, 0xbd,
-0x94, 0x04, 0x88, 0x9a, 0xee, 0x24, 0x3f, 0x0e,
-0x52, 0x66, 0xe5, 0xed, 0xfb, 0xff, 0xd7, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-0x69, 0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26,
-0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x32, 0xfc, 0xbe, 0x33, 0x90, 0xe9,
-0x35, 0x1d, 0x5c, 0x38, 0xaa, 0x97, 0x31, 0x3b,
-0x47, 0xf6, 0x38, 0x1b, 0x3d, 0xea, 0x37, 0xe5,
-0xc7, 0xbc, 0x31, 0x29, 0x82, 0x13, 0x30, 0x60,
-0x40, 0x22, 0x30, 0x00, 0x00, 0xdd, 0x33, 0x35,
-0x28, 0x34, 0x6a, 0x2d, 0x33, 0x08, 0xb1, 0x30,
-0xa4, 0x0e, 0x40, 0x0b, 0x3a, 0x8c, 0xac, 0x39,
-0x4e, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
-0xff, 0x6f, 0xff, 0xe8, 0xff, 0xff, 0xa4, 0x44,
-0x02, 0x81, 0x80, 0xbe, 0x05, 0xc9, 0x81, 0xa4,
-0x0a, 0xc1, 0x83, 0x3a, 0x15, 0xb9, 0x87, 0x80,
-0x42, 0x61, 0xb1, 0x07, 0xfc, 0xa1, 0xaf, 0xe0,
-0x42, 0x31, 0x87, 0xca, 0x16, 0xf9, 0x83, 0xe0,
-0x0e, 0x11, 0x82, 0x50, 0x09, 0x41, 0x82, 0x52,
-0x07, 0xc9, 0x82, 0x64, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc8, 0x50, 0x25, 0x14, 0x0e, 0xff,
-0xa2, 0x81, 0x23, 0x85, 0x23, 0x01, 0xff, 0xec,
-0x90, 0x0d, 0x01, 0xe2, 0x3e, 0x19, 0x58, 0x1a,
-0x38, 0x35, 0xf8, 0x72, 0x1f, 0xa7, 0xc0, 0xfa,
-0xb6, 0x7d, 0xdf, 0xea, 0xff, 0xff, 0xff, 0xff,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41,
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x32, 0x88, 0xa7, 0x33,
-0x0c, 0xce, 0x34, 0x51, 0x3b, 0x37, 0x66, 0x58,
-0x31, 0x0c, 0x87, 0x3d, 0x36, 0xf1, 0xf8, 0x47,
-0x36, 0xc4, 0x07, 0x09, 0x30, 0xfd, 0x41, 0xe6,
-0x30, 0x4f, 0x00, 0x35, 0x30, 0x04, 0x40, 0xb2,
-0x35, 0xd3, 0xe4, 0xdf, 0xfd, 0x83, 0x56, 0xa4,
-0x8c, 0x44, 0x09, 0x47, 0xe7, 0x26, 0x5d, 0x0d,
-0xfa, 0x7f, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xf4, 0xff, 0xa4, 0x0a, 0x02, 0x59, 0x80,
-0xcc, 0x05, 0x91, 0x81, 0xba, 0x0a, 0x79, 0x83,
-0x54, 0x15, 0x21, 0x87, 0xc6, 0x40, 0xb9, 0xb2,
-0xb1, 0xf0, 0x19, 0xb1, 0x82, 0x40, 0xa9, 0x88,
-0x04, 0x16, 0x81, 0x83, 0xf2, 0x0e, 0x09, 0x82,
-0x4e, 0x09, 0x79, 0x82, 0x44, 0x08, 0x01, 0x82,
-0x5a, 0x0d, 0x89, 0xe0, 0xc1, 0x99, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x98, 0x23, 0x14,
-0x0e, 0xff, 0xa2, 0x81, 0x29, 0x05, 0x22, 0xc1,
-0xff, 0xec, 0x90, 0x40, 0x22, 0x1b, 0xb5, 0xc7,
-0xfe, 0x1c, 0xa4, 0xb7, 0x85, 0xb5, 0xfd, 0x3f,
-0xf6, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff,
-0xff, 0xff, 0xff, 0x6e, 0x84, 0xc4, 0x14, 0xd4,
-0x53, 0x32, 0xe3, 0x93, 0x75, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x8c,
-0xa8, 0x32, 0xf8, 0xd5, 0x34, 0x3d, 0x44, 0x37,
-0x2a, 0x6f, 0x31, 0x05, 0xc7, 0x7a, 0x36, 0xc4,
-0x3a, 0x1e, 0x36, 0x97, 0x47, 0x48, 0x30, 0xf5,
-0x01, 0xff, 0x30, 0x4a, 0xc0, 0x4c, 0x30, 0x08,
-0x00, 0xa7, 0x36, 0x2b, 0xc0, 0xe1, 0x1c, 0xd3,
-0x5a, 0x23, 0xcc, 0x4a, 0x06, 0x47, 0xd7, 0x1a,
-0x5b, 0x0e, 0x75, 0x23, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xfa, 0x0c, 0x00, 0x60,
-0x10, 0x8c, 0x06, 0xf0, 0x2a, 0xcc, 0x0e, 0x60,
-0x51, 0x0c, 0x1b, 0x90, 0xa4, 0xcc, 0x40, 0x01,
-0xf8, 0x0d, 0xa2, 0x5f, 0x17, 0x0d, 0x98, 0x61,
-0xf8, 0x0c, 0x42, 0x10, 0xb0, 0xcc, 0x20, 0x00,
-0x6f, 0x8c, 0x12, 0x60, 0x4c, 0x8c, 0x11, 0xd0,
-0x42, 0x4c, 0x12, 0x20, 0x6f, 0x8e, 0xea, 0x18,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0xf8,
-0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x05,
-0x62, 0xc1, 0xff, 0xec, 0x90, 0xc9, 0xc1, 0x51,
-0xf1, 0xaf, 0xbf, 0x90, 0xfd, 0x3d, 0x87, 0xab,
-0x67, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
-0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 0x4d,
-0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x32, 0x88, 0xab, 0x32, 0xf4, 0xda, 0x34, 0x19,
-0x4f, 0x36, 0xfe, 0x82, 0x30, 0xfe, 0x07, 0xb7,
-0x36, 0x93, 0xfb, 0xe1, 0x36, 0x68, 0x07, 0x85,
-0x30, 0xed, 0x42, 0x16, 0x30, 0x45, 0x80, 0x63,
-0x30, 0x0c, 0x40, 0x9c, 0x36, 0x73, 0xa4, 0xe2,
-0x7b, 0xe3, 0x5d, 0xa2, 0x0c, 0x4c, 0x07, 0x43,
-0x67, 0x16, 0x5c, 0xa0, 0xdf, 0x5a, 0x7d, 0x1f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
-0x4c, 0x01, 0x10, 0x0e, 0xcc, 0x07, 0x60, 0x28,
-0x8c, 0x0e, 0xf0, 0x4e, 0xcc, 0x1c, 0x60, 0xa0,
-0x0c, 0x41, 0xf1, 0xe9, 0xcd, 0xae, 0x6e, 0xa8,
-0x4d, 0xa4, 0x51, 0xea, 0x4c, 0x43, 0xa0, 0xad,
-0x0c, 0x20, 0x90, 0x6f, 0x4c, 0x12, 0x50, 0x4d,
-0xcc, 0x11, 0x60, 0x44, 0x0c, 0x11, 0xb0, 0x73,
-0x4e, 0xce, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc7, 0xe8, 0x23, 0x16, 0x0e, 0xff, 0x82, 0x81,
-0x2b, 0x05, 0x22, 0xc1, 0xff, 0xec, 0x90, 0x2c,
-0xc9, 0x01, 0x91, 0xfd, 0xae, 0x3f, 0xf0, 0xe5,
-0x26, 0x6e, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff,
-0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69,
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x32, 0x84, 0xac, 0x32, 0xe0, 0xdf,
-0x33, 0xfd, 0x58, 0x36, 0xba, 0x95, 0x30, 0xf6,
-0x47, 0xee, 0x36, 0x61, 0x3d, 0x8c, 0x36, 0x36,
-0xc7, 0xbe, 0x30, 0xe4, 0x82, 0x2d, 0x30, 0x41,
-0x40, 0x76, 0x30, 0x0f, 0x80, 0x8f, 0x36, 0xcb,
-0x78, 0xe3, 0x5b, 0x13, 0x60, 0x21, 0x4c, 0x52,
-0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52,
-0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff,
-0xff, 0x47, 0xfa, 0x0c, 0x01, 0x80, 0x0c, 0x8c,
-0x07, 0xd0, 0x26, 0xcc, 0x0f, 0x60, 0x4b, 0x8c,
-0x1d, 0x50, 0x9b, 0x4c, 0x43, 0xc1, 0xda, 0x8d,
-0xba, 0x1e, 0x33, 0x8d, 0xaf, 0x81, 0xdb, 0x0c,
-0x45, 0x50, 0xa9, 0x4c, 0x20, 0xe0, 0x6e, 0x8c,
-0x12, 0x20, 0x4e, 0x8c, 0x11, 0x10, 0x45, 0xcc,
-0x11, 0x20, 0x76, 0x0e, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc8, 0x08, 0x23, 0x16, 0x0e, 0xff,
-0x82, 0x81, 0x28, 0x85, 0x22, 0xc1, 0xff, 0xec,
-0x90, 0xb2, 0x40, 0xc8, 0xc1, 0xd1, 0xf1, 0xaf,
-0xbf, 0x90, 0xfd, 0x3e, 0x07, 0xd5, 0xfe, 0xaf,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xf5, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97,
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x32, 0x80, 0xaf, 0x32,
-0xd4, 0xe4, 0x33, 0xd9, 0x63, 0x36, 0x86, 0xa6,
-0x30, 0xed, 0x88, 0x25, 0x36, 0x2c, 0xff, 0x25,
-0x36, 0x03, 0x07, 0xf5, 0x30, 0xdc, 0x42, 0x42,
-0x30, 0x3c, 0x00, 0x8b, 0x30, 0x13, 0x40, 0x82,
-0x37, 0x13, 0x54, 0xe4, 0xba, 0x03, 0x63, 0x9f,
-0x8c, 0x54, 0x05, 0x47, 0x27, 0x16, 0x2d, 0xe2,
-0x17, 0xf6, 0xbf, 0xdd, 0xff, 0xa7, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xee,
-0xf5, 0x18, 0x05, 0x20, 0x1a, 0x98, 0x13, 0x00,
-0x55, 0x18, 0x24, 0xe0, 0xa8, 0x98, 0x44, 0xc1,
-0x57, 0x18, 0x9e, 0xa4, 0x17, 0x9c, 0x08, 0x1f,
-0x45, 0x9b, 0xef, 0xe4, 0x1a, 0x98, 0xa1, 0xc1,
-0x79, 0x18, 0x4c, 0x60, 0xfb, 0x98, 0x29, 0xa0,
-0xb7, 0x98, 0x26, 0x40, 0xa4, 0x18, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x28, 0x23, 0x16,
-0x0e, 0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1,
-0xff, 0xec, 0x90, 0x26, 0x21, 0x16, 0x9e, 0x0d,
-0x69, 0x94, 0x06, 0x20, 0x0d, 0x9c, 0x3f, 0xef,
-0xe5, 0x25, 0xb7, 0x2f, 0xff, 0xfe, 0xbf, 0xff,
-0xff, 0xff, 0xff, 0xee, 0xab, 0xff, 0xfb, 0xbf,
-0xdd, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e,
-0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x24,
-0x96, 0x32, 0x58, 0xc9, 0x33, 0x3d, 0x3a, 0x35,
-0x72, 0x61, 0x30, 0xc8, 0x47, 0x50, 0x35, 0x3a,
-0xb8, 0xc2, 0x35, 0x17, 0x47, 0x26, 0x30, 0xb8,
-0x02, 0x0b, 0x30, 0x2f, 0x40, 0x86, 0x30, 0x12,
-0x80, 0x65, 0x36, 0x5a, 0xb8, 0xe0, 0x95, 0xd3,
-0x57, 0x1a, 0x40, 0x44, 0x64, 0xd5, 0x75, 0xa5,
-0xab, 0x3d, 0xd4, 0x8f, 0x4f, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xfd, 0x1f, 0xe8, 0x30, 0x0c,
-0x80, 0x2c, 0x30, 0x28, 0x40, 0xa1, 0x30, 0x4b,
-0x81, 0x42, 0x30, 0x8d, 0x42, 0x95, 0x31, 0x44,
-0x87, 0xe2, 0x38, 0x3f, 0xfc, 0x48, 0x38, 0x0d,
-0x87, 0xea, 0x31, 0x4a, 0x42, 0xdf, 0x30, 0x9a,
-0x81, 0xf2, 0x30, 0x52, 0x81, 0x72, 0x30, 0x4a,
-0xc1, 0x51, 0x30, 0x49, 0x82, 0x3a, 0x3b, 0x8b,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xa4,
-0x25, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x85,
-0x22, 0x81, 0xff, 0xec, 0x90, 0x23, 0x27, 0x0f,
-0x41, 0xc6, 0x76, 0xec, 0x3f, 0xf4, 0xf6, 0x1e,
-0xaf, 0xff, 0xfa, 0xbf, 0xb3, 0xff, 0xff, 0xf7,
-0xff, 0xbf, 0xff, 0xfe, 0xff, 0xa3, 0xfa, 0x93,
-0x10, 0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xd5,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x32, 0x18, 0x99, 0x32, 0x4c, 0xcc, 0x33, 0x19,
-0x43, 0x35, 0x3e, 0x6e, 0x30, 0xc0, 0x07, 0x7b,
-0x35, 0x07, 0xfa, 0x03, 0x34, 0xe5, 0x87, 0x51,
-0x30, 0xb0, 0x42, 0x1c, 0x30, 0x2a, 0x00, 0x97,
-0x30, 0x15, 0xc0, 0x56, 0x36, 0x92, 0x9c, 0xe1,
-0x74, 0xe3, 0x59, 0x98, 0x80, 0x44, 0x94, 0xd6,
-0x75, 0x67, 0x94, 0x77, 0xad, 0x3e, 0x8f, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x26,
-0x01, 0xd8, 0x04, 0x26, 0x05, 0x40, 0x12, 0xc6,
-0x09, 0xb8, 0x26, 0xa6, 0x12, 0x00, 0x4f, 0x46,
-0x29, 0x68, 0xf2, 0xa7, 0x0d, 0x97, 0x3d, 0xa7,
-0x07, 0x28, 0xf3, 0xe6, 0x2a, 0x00, 0x59, 0x46,
-0x13, 0x78, 0x3d, 0xe6, 0x0a, 0x38, 0x2e, 0xe6,
-0x09, 0x00, 0x2a, 0xc6, 0x08, 0xd8, 0x48, 0xe7,
-0x63, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83,
-0xc8, 0x00, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81,
-0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 0x64,
-0x81, 0xc8, 0x3e, 0xce, 0x1d, 0xb7, 0xf2, 0x92,
-0xdb, 0x97, 0xff, 0xff, 0x5d, 0x3f, 0xff, 0xff,
-0xeb, 0xff, 0xf7, 0x7f, 0xff, 0xdd, 0xfe, 0xef,
-0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9,
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0x32, 0x14, 0x98, 0x32, 0x38, 0xd1,
-0x32, 0xfd, 0x48, 0x35, 0x02, 0x7d, 0x30, 0xb8,
-0x47, 0xa2, 0x34, 0xd3, 0x3b, 0x30, 0x34, 0xb2,
-0x47, 0x7a, 0x30, 0xa7, 0x02, 0x2d, 0x30, 0x25,
-0x40, 0xa4, 0x30, 0x18, 0x00, 0x4b, 0x36, 0xca,
-0x70, 0xe2, 0x14, 0x13, 0x5b, 0x17, 0x40, 0xc4,
-0xe4, 0xd5, 0x75, 0xa7, 0x47, 0x90, 0xea, 0x47,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xf4, 0x18, 0x0a, 0x00, 0x0f, 0x18, 0x19, 0x60,
-0x52, 0x98, 0x2d, 0xc0, 0xa8, 0x18, 0x54, 0x61,
-0x5b, 0x98, 0xc0, 0xc4, 0x24, 0x1c, 0xe4, 0x7f,
-0x97, 0x1c, 0xc6, 0x84, 0x2b, 0x18, 0xc3, 0x21,
-0x8c, 0x98, 0x59, 0xc1, 0x18, 0x18, 0x2e, 0x80,
-0xd8, 0x18, 0x28, 0x60, 0xc8, 0x98, 0x26, 0xc1,
-0x54, 0x1e, 0x16, 0xc1, 0xff, 0xfb, 0x92, 0xc4,
-0xff, 0x83, 0xc7, 0xec, 0x23, 0x18, 0x0e, 0xff,
-0x82, 0x81, 0x31, 0x05, 0x22, 0x81, 0xff, 0xec,
-0x90, 0x94, 0x8b, 0x97, 0x21, 0x77, 0xbb, 0x0f,
-0xfc, 0xbe, 0xc1, 0xf5, 0x67, 0xfe, 0xff, 0x5f,
-0x55, 0x1f, 0x67, 0x4f, 0xff, 0xff, 0xfd, 0x77,
-0xff, 0xff, 0xdf, 0xfe, 0xff, 0x52, 0x62, 0x0a,
-0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x32, 0x10, 0x9b, 0x32,
-0x2c, 0xd2, 0x32, 0xd9, 0x4f, 0x34, 0xc6, 0x88,
-0x30, 0xaf, 0x07, 0xc9, 0x34, 0x9c, 0x7c, 0x4d,
-0x34, 0x7c, 0x87, 0xa1, 0x30, 0x9e, 0x42, 0x3c,
-0x30, 0x20, 0x00, 0xb5, 0x30, 0x1a, 0xc0, 0x3e,
-0x37, 0x02, 0x4c, 0xe2, 0xf3, 0x03, 0x5d, 0x96,
-0x00, 0xc4, 0xd4, 0xd6, 0x75, 0x67, 0x86, 0x37,
-0xac, 0x60, 0x30, 0x0f, 0xc0, 0x05, 0x30, 0x26,
-0x80, 0x6e, 0x30, 0x46, 0xc0, 0xef, 0x30, 0x82,
-0x81, 0xf8, 0x31, 0x2d, 0x46, 0x13, 0x37, 0xac,
-0x2e, 0x75, 0x37, 0x7d, 0x46, 0x1f, 0x31, 0x30,
-0x02, 0x48, 0x30, 0x8a, 0x41, 0xa5, 0x30, 0x45,
-0x41, 0x49, 0x30, 0x3a, 0x81, 0x32, 0x30, 0x37,
-0xc2, 0x11, 0x38, 0x7a, 0x33, 0x16, 0x0a, 0x4c,
-0x77, 0x21, 0xff, 0x8c, 0x52, 0x5b, 0xff, 0xfb,
-0x92, 0xc4, 0xff, 0x83, 0xc7, 0xe4, 0x23, 0x18,
-0x0e, 0xff, 0x82, 0x81, 0x3e, 0x05, 0x22, 0x41,
-0xff, 0xec, 0x90, 0x04, 0xc5, 0x69, 0x38, 0xcf,
-0x1b, 0x48, 0x0c, 0x68, 0xa2, 0x1d, 0x5d, 0x3f,
-0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xfd, 0xdf,
-0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71,
-0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x40, 0x00,
-0x64, 0xdb, 0x6d, 0xb5, 0xb2, 0x4a, 0xc1, 0xdb,
-0xa3, 0xf9, 0x04, 0xa6, 0x38, 0xaf, 0x01, 0x21,
-0xc3, 0xcc, 0xe2, 0x0f, 0x5c, 0x8f, 0x60, 0x85,
-0x53, 0x5c, 0x72, 0xa0, 0x86, 0x38, 0x52, 0x42,
-0x98, 0x90, 0xe2, 0xdd, 0x4d, 0x8c, 0x93, 0x72,
-0x2c, 0xc7, 0x36, 0x37, 0x48, 0x08, 0x50, 0x9b,
-0x75, 0xa6, 0x14, 0x51, 0xac, 0x54, 0x3d, 0x08,
-0xcd, 0x2c, 0x34, 0x40, 0x0c, 0x1a, 0x13, 0xa6,
-0xcc, 0x91, 0x91, 0xce, 0x84, 0x64, 0x0a, 0x9c,
-0x38, 0x64, 0x5b, 0x4d, 0x6c, 0x53, 0x76, 0x3c,
-0xc6, 0x36, 0x37, 0xc9, 0x88, 0x11, 0x9b, 0xb6,
-0xa6, 0x34, 0x41, 0xb2, 0x64, 0x51, 0x6c, 0xcf,
-0x36, 0x35, 0xc2, 0x8c, 0x1a, 0x93, 0x66, 0x7c,
-0x64, 0xc1, 0xae, 0x54, 0x62, 0x00, 0x9a, 0x75,
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x46, 0x98,
-0x23, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x4f, 0x85,
-0x22, 0xc9, 0xff, 0xec, 0x90, 0x23, 0xd2, 0x0c,
-0xaa, 0xb3, 0x4e, 0x24, 0x08, 0x78, 0xd4, 0x18,
-0x14, 0x22, 0x69, 0xd1, 0x82, 0x87, 0x19, 0xe4,
-0x03, 0x4f, 0xcc, 0x72, 0x23, 0x40, 0x18, 0x2a,
-0x64, 0xe3, 0x54, 0x46, 0x41, 0xbc, 0xe0, 0x41,
-0xa6, 0xbb, 0x62, 0x5a, 0x19, 0x2e, 0x9b, 0x62,
-0x88, 0x12, 0x37, 0x12, 0x10, 0x0a, 0x6c, 0xb2,
-0x1c, 0x51, 0xa0, 0xb0, 0x95, 0xe6, 0x12, 0xc6,
-0xb0, 0x82, 0xa6, 0x9b, 0x28, 0x97, 0x38, 0xd4,
-0x58, 0x58, 0x93, 0x35, 0x30, 0xea, 0x00, 0x29,
-0x9a, 0xa2, 0x8e, 0x10, 0x6a, 0x1c, 0x5e, 0xd3,
-0x45, 0x31, 0xe1, 0x8c, 0x83, 0x83, 0x23, 0x04,
-0x1c, 0x68, 0x04, 0x4a, 0x29, 0xa2, 0x6a, 0x12,
-0x8c, 0xc4, 0x09, 0x85, 0x31, 0x4d, 0x0c, 0x70,
-0x1a, 0x59, 0x9e, 0x19, 0x54, 0x23, 0x38, 0xa4,
-0x89, 0x32, 0xcf, 0x2b, 0x0c, 0xc2, 0x20, 0x21,
-0xf0, 0xb1, 0x06, 0x60, 0x48, 0x7a, 0x66, 0x92,
-0x8f, 0xc6, 0x31, 0x84, 0xc2, 0x00, 0x47, 0x08,
-0x60, 0x42, 0x39, 0x96, 0x1a, 0x3b, 0x19, 0x44,
-0x25, 0x69, 0x8a, 0x59, 0x10, 0xe0, 0x41, 0x02,
-0x17, 0x11, 0x08, 0x64, 0x04, 0x96, 0xa6, 0x48,
-0xe9, 0xf4, 0x61, 0x10, 0x3c, 0x00, 0x24, 0x30,
-0x72, 0x83, 0x20, 0x99, 0x21, 0xa6, 0x91, 0x8c,
-0x32, 0x66, 0x98, 0x23, 0x8d, 0x06, 0x0c, 0x00,
-0x1c, 0x9a, 0x1c, 0x0c, 0x60, 0x14, 0xa4, 0xc5,
-0x1d, 0x38, 0x80, 0x03, 0x0b, 0x00, 0x5b, 0xb0,
-0x72, 0x09, 0x2e, 0x62, 0x82, 0xa6, 0x46, 0x10,
-0x8a, 0x12, 0x05, 0x14, 0x48, 0x32, 0xe6, 0x02,
-0x8f, 0x49, 0xc3, 0x10, 0x05, 0x4a, 0x60, 0x8a,
-0xa2, 0x20, 0x81, 0x04, 0x80, 0x40, 0x58, 0x28,
-0xc4, 0xdb, 0x30, 0xc1, 0x58, 0xc6, 0x00, 0x49,
-0xe0, 0x0d, 0x0c, 0x38, 0x34, 0x6c, 0x05, 0x16,
-0xaa, 0x46, 0x10, 0x0a, 0xe4, 0x02, 0x1a, 0x4d,
-0x85, 0x02, 0x0e, 0x01, 0x23, 0xc1, 0x44, 0x2c,
-0x93, 0x04, 0x15, 0xac, 0x04, 0x09, 0x20, 0x02,
-0xa0, 0x86, 0x06, 0x9e, 0x80, 0xa1, 0xd7, 0x91,
-0x82, 0x10, 0x99, 0x10, 0xb9, 0x0a, 0x11, 0xb7,
-0x94, 0x1b, 0x65, 0xb9, 0xac, 0x3c, 0x1e, 0x9b,
-0xd1, 0xa4, 0x51, 0x91, 0x70, 0x19, 0x51, 0x59,
-0x95, 0x12, 0x8c, 0x13, 0x19, 0xa8, 0xd0, 0xa0,
-0xd9, 0x93, 0x0c, 0x85, 0x04, 0x77, 0xb0, 0xd2,
-0xcc, 0x6e, 0x0e, 0x90, 0x21, 0xa0, 0x6e, 0x8a,
-0x98, 0xda, 0x44, 0xd3, 0x32, 0x15, 0x48, 0x02,
-0x06, 0x81, 0xa1, 0x71, 0x04, 0x19, 0x1d, 0x40,
-0xc5, 0x60, 0x05, 0x92, 0x62, 0xe5, 0xee, 0x4f,
-0xa4, 0x26, 0x97, 0xc5, 0x45, 0x8b, 0x8c, 0xd2,
-0xcb, 0xba, 0xd4, 0x11, 0xe5, 0x58, 0x53, 0x49,
-0x0d, 0x98, 0x4a, 0x00, 0x5d, 0x84, 0x56, 0x6c,
-0xea, 0xdc, 0xb5, 0x96, 0x8a, 0x74, 0xb4, 0x64,
-0x8a, 0x7f, 0xd4, 0x05, 0xcd, 0x60, 0x2c, 0x95,
-0x91, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x80,
-0x31, 0x95, 0xa3, 0x65, 0xac, 0xeb, 0x2d, 0xf4,
-0xf1, 0x3a, 0xe6, 0xc1, 0xbc, 0x3d, 0xb8, 0xb1,
-0xb2, 0x21, 0xa8, 0x60, 0xb7, 0x18, 0xc3, 0xe8,
-0x93, 0x17, 0x51, 0xc2, 0x7c, 0x09, 0xb2, 0x8c,
-0x5b, 0x4f, 0x12, 0x7a, 0x58, 0x4b, 0xb0, 0xe2,
-0x49, 0x8b, 0x8a, 0xa0, 0x83, 0x1e, 0x45, 0xf8,
-0xb1, 0x1d, 0xa4, 0x25, 0x20, 0x3d, 0x4a, 0xb2,
-0x52, 0x70, 0x9b, 0xa5, 0x84, 0xf6, 0x21, 0x4a,
-0x71, 0xe9, 0x58, 0x2d, 0xc7, 0x11, 0xbc, 0x65,
-0x24, 0x49, 0x6a, 0x90, 0x9d, 0x2d, 0x96, 0xd3,
-0x84, 0xfd, 0x32, 0x53, 0x05, 0xc9, 0x8c, 0x9c,
-0xb4, 0x17, 0xe3, 0x89, 0x14, 0x65, 0x2f, 0x97,
-0x16, 0x02, 0xdc, 0xd2, 0x5f, 0x4e, 0x14, 0x49,
-0x92, 0xb8, 0x2e, 0x4a, 0xf2, 0xda, 0xb2, 0x73,
-0x19, 0x4a, 0x63, 0x29, 0x76, 0x68, 0xb2, 0x1a,
-0x4b, 0x47, 0xe9, 0xd2, 0xb9, 0x34, 0x5b, 0x0d,
-0x26, 0x73, 0x45, 0x64, 0xfe, 0x3a, 0x97, 0x46,
-0x93, 0x19, 0xa2, 0xc8, 0x73, 0x2a, 0x8f, 0xd3,
-0xa5, 0x72, 0x68, 0xb0, 0x1a, 0x4e, 0x67, 0x2a,
-0xa4, 0xfe, 0x3a, 0x97, 0x8d, 0x26, 0x33, 0x45,
-0xc0, 0xe6, 0x55, 0x22, 0x4e, 0x96, 0xb3, 0x45,
-0xe1, 0xcc, 0xe6, 0x72, 0xaa, 0x54, 0xc7, 0x53,
-0x51, 0xa4, 0xfc, 0xe5, 0x74, 0x7f, 0x2a, 0x94,
-0xa7, 0x4b, 0x59, 0xa2, 0xf0, 0xe6, 0x76, 0x7e,
-0xaa, 0x54, 0xc7, 0x53, 0x61, 0xa4, 0xce, 0x72,
-0xb8, 0xa7, 0x94, 0x4b, 0x93, 0xa5, 0xbc, 0xd1,
-0x70, 0x43, 0x96, 0x93, 0xaa, 0x15, 0xd1, 0xd4,
-0xd9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39,
-0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e,
-0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x92, 0xc4,
-0x61, 0x83, 0xc0, 0x00, 0x01, 0xa4, 0x00, 0x00,
-0x00, 0x20, 0x00, 0x00, 0x34, 0x80, 0x00, 0x00,
-0x04, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-};
-
+++ /dev/null
-/* GStreamer
- * unit test for index setting on all elements
- * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org>
- * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <gst/check/gstcheck.h>
-
-static GList *elements = NULL;
-
-static void
-setup (void)
-{
- GList *features, *f;
- GList *plugins, *p;
- gchar **ignorelist = NULL;
- const gchar *INDEX_IGNORE_ELEMENTS = NULL;
-
- GST_DEBUG ("getting elements for package %s", PACKAGE);
- INDEX_IGNORE_ELEMENTS = g_getenv ("GST_INDEX_IGNORE_ELEMENTS");
- if (!g_getenv ("GST_NO_INDEX_IGNORE_ELEMENTS") && INDEX_IGNORE_ELEMENTS) {
- GST_DEBUG ("Will ignore element factories: '%s'", INDEX_IGNORE_ELEMENTS);
- ignorelist = g_strsplit (INDEX_IGNORE_ELEMENTS, " ", 0);
- }
-
- plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
-
- for (p = plugins; p; p = p->next) {
- GstPlugin *plugin = p->data;
-
- if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
- continue;
-
- features =
- gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
- gst_plugin_get_name (plugin));
-
- for (f = features; f; f = f->next) {
- GstPluginFeature *feature = f->data;
- const gchar *name = gst_plugin_feature_get_name (feature);
- gboolean ignore = FALSE;
-
- if (!GST_IS_ELEMENT_FACTORY (feature))
- continue;
-
- if (ignorelist) {
- gchar **s;
-
- for (s = ignorelist; s && *s; ++s) {
- if (g_str_has_prefix (name, *s)) {
- GST_DEBUG ("ignoring element %s", name);
- ignore = TRUE;
- }
- }
- if (ignore)
- continue;
- }
-
- GST_DEBUG ("adding element %s", name);
- elements = g_list_prepend (elements, (gpointer) g_strdup (name));
- }
- gst_plugin_feature_list_free (features);
- }
- gst_plugin_list_free (plugins);
- g_strfreev (ignorelist);
-}
-
-static void
-teardown (void)
-{
- GList *e;
-
- for (e = elements; e; e = e->next) {
- g_free (e->data);
- }
- g_list_free (elements);
- elements = NULL;
-}
-
-GST_START_TEST (test_set_index)
-{
- GstElement *element;
- GstIndex *idx;
- GList *e;
-
- idx = gst_index_factory_make ("memindex");
- if (idx == NULL)
- return;
-
- gst_object_ref_sink (idx);
-
- for (e = elements; e; e = e->next) {
- const gchar *name = e->data;
-
- GST_INFO ("testing element %s", name);
- element = gst_element_factory_make (name, name);
- fail_if (element == NULL, "Could not make element from factory %s", name);
-
- gst_element_set_index (element, idx);
- gst_object_unref (element);
- }
-
- gst_object_unref (idx);
-}
-
-GST_END_TEST;
-
-static Suite *
-index_suite (void)
-{
- Suite *s = suite_create ("index");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_checked_fixture (tc_chain, setup, teardown);
- tcase_add_test (tc_chain, test_set_index);
-
- return s;
-}
-
-GST_CHECK_MAIN (index);
+++ /dev/null
-/* GStreamer
- *
- * unit test for state changes on all elements
- *
- * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <gst/check/gstcheck.h>
-
-static GList *elements = NULL;
-
-static void
-setup ()
-{
- GList *features, *f;
- GList *plugins, *p;
- gchar **ignorelist = NULL;
- const gchar *STATE_IGNORE_ELEMENTS = NULL;
-
- GST_DEBUG ("getting elements for package %s", PACKAGE);
- STATE_IGNORE_ELEMENTS = g_getenv ("GST_STATE_IGNORE_ELEMENTS");
- if (!g_getenv ("GST_NO_STATE_IGNORE_ELEMENTS") && STATE_IGNORE_ELEMENTS) {
- GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
- ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
- }
-
- plugins = gst_registry_get_plugin_list (gst_registry_get ());
-
- for (p = plugins; p; p = p->next) {
- GstPlugin *plugin = p->data;
-
- if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
- continue;
-
- features =
- gst_registry_get_feature_list_by_plugin (gst_registry_get (),
- gst_plugin_get_name (plugin));
-
- for (f = features; f; f = f->next) {
- GstPluginFeature *feature = f->data;
- const gchar *name = gst_plugin_feature_get_name (feature);
- gboolean ignore = FALSE;
-
- if (!GST_IS_ELEMENT_FACTORY (feature))
- continue;
-
- if (ignorelist) {
- gchar **s;
-
- for (s = ignorelist; s && *s; ++s) {
- if (g_str_has_prefix (name, *s)) {
- GST_DEBUG ("ignoring element %s", name);
- ignore = TRUE;
- }
- }
- if (ignore)
- continue;
- }
-
- GST_DEBUG ("adding element %s", name);
- elements = g_list_prepend (elements, (gpointer) g_strdup (name));
- }
- gst_plugin_feature_list_free (features);
- }
- gst_plugin_list_free (plugins);
- g_strfreev (ignorelist);
-}
-
-static void
-teardown ()
-{
- GList *e;
-
- for (e = elements; e; e = e->next) {
- g_free (e->data);
- }
- g_list_free (elements);
- elements = NULL;
-}
-
-
-GST_START_TEST (test_state_changes_up_and_down_seq)
-{
- GstElement *element;
- GList *e;
-
- for (e = elements; e; e = e->next) {
- const gchar *name = e->data;
-
- GST_INFO ("testing element %s", name);
- element = gst_element_factory_make (name, name);
- fail_if (element == NULL, "Could not make element from factory %s", name);
-
- if (GST_IS_PIPELINE (element)) {
- GST_DEBUG ("element %s is a pipeline", name);
- }
-
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_PLAYING);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_NULL);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_PLAYING);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_NULL);
- gst_object_unref (GST_OBJECT (element));
- }
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_state_changes_up_seq)
-{
- GstElement *element;
- GList *e;
-
- for (e = elements; e; e = e->next) {
- const gchar *name = e->data;
-
- GST_INFO ("testing element %s", name);
- element = gst_element_factory_make (name, name);
- fail_if (element == NULL, "Could not make element from factory %s", name);
-
- if (GST_IS_PIPELINE (element)) {
- GST_DEBUG ("element %s is a pipeline", name);
- }
-
- gst_element_set_state (element, GST_STATE_READY);
-
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
-
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_PLAYING);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
-
- gst_element_set_state (element, GST_STATE_NULL);
- gst_object_unref (GST_OBJECT (element));
- }
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_state_changes_down_seq)
-{
- GstElement *element;
- GList *e;
-
- for (e = elements; e; e = e->next) {
- const gchar *name = e->data;
-
- GST_INFO ("testing element %s", name);
- element = gst_element_factory_make (name, name);
- fail_if (element == NULL, "Could not make element from factory %s", name);
-
- if (GST_IS_PIPELINE (element)) {
- GST_DEBUG ("element %s is a pipeline", name);
- }
-
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_PLAYING);
-
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_PLAYING);
-
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_PLAYING);
-
- gst_element_set_state (element, GST_STATE_PAUSED);
- gst_element_set_state (element, GST_STATE_READY);
- gst_element_set_state (element, GST_STATE_NULL);
- gst_object_unref (GST_OBJECT (element));
- }
-}
-
-GST_END_TEST;
-
-Suite *
-states_suite (void)
-{
- Suite *s = suite_create ("states_ugly");
- TCase *tc_chain = tcase_create ("general");
-
- suite_add_tcase (s, tc_chain);
- tcase_add_checked_fixture (tc_chain, setup, teardown);
- tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
- tcase_add_test (tc_chain, test_state_changes_up_seq);
- tcase_add_test (tc_chain, test_state_changes_down_seq);
-
- return s;
-}
-
-GST_CHECK_MAIN (states);
+++ /dev/null
-### amrnb suppressions
-### these should/could be submitted to amrnb
-
-{
- <amrnb>
- Memcheck:Cond
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <amrnb>
- Memcheck:Cond
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <amrnb>
- Memcheck:Cond
- obj:/usr/lib/libamrnb.so*
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <amrnb>
- Memcheck:Cond
- obj:/usr/lib/libamrnb.so*
- obj:/usr/lib/libamrnb.so*
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <amrnb>
- Memcheck:Cond
- obj:/usr/lib/libamrnb.so*
- obj:/usr/lib/libamrnb.so*
- obj:/usr/lib/libamrnb.so*
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <amrnb acos>
- Memcheck:Cond
- fun:acos
- obj:/usr/lib/libamrnb.so*
- obj:/usr/lib/libamrnb.so*
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
- fun:gst_amrnbenc_chain
- fun:gst_pad_chain
- fun:gst_pad_push
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Levinson
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Az_lsp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:acos
- fun:Lsp_lsf
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Lsf_wt
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Vq_subvec
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Lag_max
- fun:Pitch_ol
- fun:ol_ltp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:Pitch_ol
- fun:ol_ltp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:cl_ltp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:searchFrac
- fun:cl_ltp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:q_gain_pitch
- fun:cl_ltp
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:set_sign12k2
- fun:code_10i40_35bits
- fun:cbsearch
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:code_10i40_35bits
- fun:cbsearch
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder>
- Memcheck:Cond
- fun:gainQuant
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
-
-{
- <AMR encoder on FC4>
- Memcheck:Value2
- obj:/usr/lib/libamrnb.so.0.0.0
- fun:Speech_Encode_Frame
- fun:Encoder_Interface_Encode
-}
+++ /dev/null
-# name, condition when to skip the test and extra dependencies
-ugly_tests = [
- [ 'elements/x264enc', not x264_dep.found(), [ x264_dep, gmodule_dep ] ],
- [ 'elements/xingmux' ],
- [ 'generic/states' ],
-]
-
-# FIXME: unistd dependency or not tested yet on windows
-if host_machine.system() != 'windows'
- ugly_tests += [
- [ 'elements/amrnbenc', not amrnb_dep.found() ],
- [ 'elements/mpeg2dec', not mpeg2_dep.found() or not cdata.has('HAVE_UNISTD_H'), [ gstvideo_dep ] ],
- ]
-endif
-
-test_defines = [
- '-UG_DISABLE_ASSERT',
- '-UG_DISABLE_CAST_CHECKS',
- '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"',
- '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"',
- '-DGST_USE_UNSTABLE_API',
-]
-
-pluginsdirs = []
-if gst_dep.type_name() == 'pkgconfig'
- pbase = dependency('gstreamer-plugins-base-' + api_version, required: true)
- pluginsdirs = [gst_dep.get_pkgconfig_variable('pluginsdir'),
- pbase.get_pkgconfig_variable('pluginsdir')]
- gst_plugin_scanner_dir = gst_dep.get_pkgconfig_variable('pluginscannerdir')
-else
- gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir')
-endif
-gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
-
-test_deps = [gst_dep, gstbase_dep, gstcheck_dep, gstaudio_dep, gstapp_dep,
- gstfft_dep, gstvideo_dep, gstpbutils_dep]
-
-libm = cc.find_library('m', required : false)
-
-# FIXME: valgrind_args: add suppressions $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp
-
-no_warn_args = []
-foreach arg : [
- '-Wno-missing-prototypes',
- '-Wno-missing-declarations',
- '-Wno-old-style-definition']
- if cc.has_argument(arg)
- no_warn_args += [arg]
- endif
-endforeach
-
-foreach t : ugly_tests
- fname = '@0@.c'.format(t.get(0))
- test_name = t.get(0).underscorify()
- extra_deps = [ ]
- if t.length() == 3
- extra_deps = t.get(2)
- skip_test = t.get(1)
- elif t.length() == 2
- skip_test = t.get(1)
- else
- skip_test = false
- endif
- if not skip_test
- exe = executable(test_name, fname,
- include_directories : [configinc],
- c_args : ['-DHAVE_CONFIG_H=1' ] + test_defines + no_warn_args,
- dependencies : [libm] + test_deps + extra_deps,
- )
-
- env = environment()
- env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
- env.set('CK_DEFAULT_TIMEOUT', '20')
- env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base',
- 'gst-plugins-good', 'gst-plugins-ugly@' + meson.build_root())
- env.set('GST_PLUGIN_PATH_1_0', [meson.build_root()] + pluginsdirs)
- env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name)))
- env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path)
- test(test_name, exe, env: env, timeout: 3 * 60)
- endif
-endforeach
+++ /dev/null
-if not get_option('tests').disabled() and gstcheck_dep.found()
- subdir('check')
-endif