merge libOggFLAC into libFLAC and libOggFLAC++ into FLAC++; documentation still needs...
authorJosh Coalson <jcoalson@users.sourceforce.net>
Sun, 15 Oct 2006 04:24:05 +0000 (04:24 +0000)
committerJosh Coalson <jcoalson@users.sourceforce.net>
Sun, 15 Oct 2006 04:24:05 +0000 (04:24 +0000)
120 files changed:
FLAC.dsw
Makefile.lite
README
configure.in
doc/html/changelog.html
include/FLAC++/decoder.h
include/FLAC++/encoder.h
include/FLAC/export.h
include/FLAC/stream_decoder.h
include/FLAC/stream_encoder.h
include/Makefile.am
include/OggFLAC++/Makefile.am [deleted file]
include/OggFLAC++/all.h [deleted file]
include/OggFLAC++/decoder.h [deleted file]
include/OggFLAC++/encoder.h [deleted file]
include/OggFLAC++/export.h [deleted file]
include/OggFLAC/Makefile.am [deleted file]
include/OggFLAC/all.h [deleted file]
include/OggFLAC/export.h [deleted file]
include/OggFLAC/stream_decoder.h [deleted file]
include/OggFLAC/stream_encoder.h [deleted file]
include/test_libs_common/Makefile.am
include/test_libs_common/file_utils_flac.h
include/test_libs_common/file_utils_oggflac.h [deleted file]
src/Makefile.am
src/Makefile.lite
src/flac/Makefile.am
src/flac/Makefile.lite
src/flac/decode.c
src/flac/encode.c
src/flac/flac.dsp
src/libFLAC++/Makefile.am
src/libFLAC++/Makefile.lite
src/libFLAC++/file_decoder.cpp [deleted file]
src/libFLAC++/file_encoder.cpp [deleted file]
src/libFLAC++/libFLAC++_dynamic.dsp
src/libFLAC++/libFLAC++_static.dsp
src/libFLAC++/stream_decoder.cpp
src/libFLAC++/stream_encoder.cpp
src/libFLAC/Makefile.am
src/libFLAC/Makefile.lite
src/libFLAC/include/private/Makefile.am
src/libFLAC/include/private/ogg_decoder_aspect.h [moved from src/libOggFLAC/include/private/ogg_decoder_aspect.h with 59% similarity]
src/libFLAC/include/private/ogg_encoder_aspect.h [moved from src/libOggFLAC/include/private/ogg_encoder_aspect.h with 63% similarity]
src/libFLAC/include/private/ogg_helper.h [moved from src/libOggFLAC/include/private/ogg_helper.h with 72% similarity]
src/libFLAC/include/private/ogg_mapping.h [moved from src/libOggFLAC/include/private/ogg_mapping.h with 70% similarity]
src/libFLAC/include/protected/stream_decoder.h
src/libFLAC/include/protected/stream_encoder.h
src/libFLAC/libFLAC_dynamic.dsp
src/libFLAC/libFLAC_static.dsp
src/libFLAC/ogg_decoder_aspect.c [moved from src/libOggFLAC/ogg_decoder_aspect.c with 77% similarity]
src/libFLAC/ogg_encoder_aspect.c [moved from src/libOggFLAC/ogg_encoder_aspect.c with 80% similarity]
src/libFLAC/ogg_helper.c [moved from src/libOggFLAC/ogg_helper.c with 77% similarity]
src/libFLAC/ogg_mapping.c [moved from src/libOggFLAC/ogg_mapping.c with 77% similarity]
src/libFLAC/stream_decoder.c
src/libFLAC/stream_encoder.c
src/libOggFLAC++/Makefile.am [deleted file]
src/libOggFLAC++/Makefile.lite [deleted file]
src/libOggFLAC++/file_decoder.cpp [deleted file]
src/libOggFLAC++/file_encoder.cpp [deleted file]
src/libOggFLAC++/libOggFLAC++.m4 [deleted file]
src/libOggFLAC++/libOggFLAC++_dynamic.dsp [deleted file]
src/libOggFLAC++/libOggFLAC++_static.dsp [deleted file]
src/libOggFLAC++/stream_decoder.cpp [deleted file]
src/libOggFLAC++/stream_encoder.cpp [deleted file]
src/libOggFLAC/Makefile.am [deleted file]
src/libOggFLAC/Makefile.lite [deleted file]
src/libOggFLAC/include/Makefile.am [deleted file]
src/libOggFLAC/include/private/Makefile.am [deleted file]
src/libOggFLAC/include/private/all.h [deleted file]
src/libOggFLAC/include/protected/Makefile.am [deleted file]
src/libOggFLAC/include/protected/all.h [deleted file]
src/libOggFLAC/include/protected/stream_decoder.h [deleted file]
src/libOggFLAC/include/protected/stream_encoder.h [deleted file]
src/libOggFLAC/libOggFLAC.m4 [deleted file]
src/libOggFLAC/libOggFLAC_dynamic.dsp [deleted file]
src/libOggFLAC/libOggFLAC_static.dsp [deleted file]
src/libOggFLAC/stream_decoder.c [deleted file]
src/libOggFLAC/stream_encoder.c [deleted file]
src/metaflac/Makefile.am
src/metaflac/Makefile.lite
src/test_libFLAC++/decoders.cpp
src/test_libFLAC++/encoders.cpp
src/test_libFLAC++/metadata_manip.cpp
src/test_libFLAC/decoders.c
src/test_libFLAC/encoders.c
src/test_libFLAC/metadata_manip.c
src/test_libOggFLAC++/Makefile.am [deleted file]
src/test_libOggFLAC++/Makefile.lite [deleted file]
src/test_libOggFLAC++/decoders.cpp [deleted file]
src/test_libOggFLAC++/decoders.h [deleted file]
src/test_libOggFLAC++/encoders.cpp [deleted file]
src/test_libOggFLAC++/encoders.h [deleted file]
src/test_libOggFLAC++/main.cpp [deleted file]
src/test_libOggFLAC++/test_libOggFLAC++.dsp [deleted file]
src/test_libOggFLAC/Makefile.am [deleted file]
src/test_libOggFLAC/Makefile.lite [deleted file]
src/test_libOggFLAC/decoders.c [deleted file]
src/test_libOggFLAC/decoders.h [deleted file]
src/test_libOggFLAC/encoders.c [deleted file]
src/test_libOggFLAC/encoders.h [deleted file]
src/test_libOggFLAC/main.c [deleted file]
src/test_libOggFLAC/test_libOggFLAC.dsp [deleted file]
src/test_libs_common/Makefile.am
src/test_libs_common/Makefile.lite
src/test_libs_common/file_utils_flac.c
src/test_libs_common/file_utils_oggflac.c [deleted file]
src/test_libs_common/test_libs_common_static.dsp
src/test_seeking/Makefile.am
src/test_seeking/Makefile.lite
src/test_seeking/main.c
src/test_seeking/test_seeking.dsp
test/Makefile.am
test/Makefile.lite
test/test_bins.sh
test/test_flac.sh
test/test_libOggFLAC++.sh [deleted file]
test/test_libOggFLAC.sh [deleted file]
test/test_metaflac.sh
test/test_seeking.sh

index 2b75fec..3b94b2c 100644 (file)
--- a/FLAC.dsw
+++ b/FLAC.dsw
@@ -69,18 +69,6 @@ Package=<4>
     Project_Dep_Name libFLAC++_static\r
     End Project Dependency\r
     Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_dynamic\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC++_dynamic\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC++_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
     Project_Dep_Name test_libs_common_static\r
     End Project Dependency\r
     Begin Project Dependency\r
@@ -102,12 +90,6 @@ Package=<4>
     Project_Dep_Name test_libFLAC++\r
     End Project Dependency\r
     Begin Project Dependency\r
-    Project_Dep_Name test_libOggFLAC\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name test_libOggFLAC++\r
-    End Project Dependency\r
-    Begin Project Dependency\r
     Project_Dep_Name test_seeking\r
     End Project Dependency\r
     Begin Project Dependency\r
@@ -159,12 +141,6 @@ Package=<4>
     Project_Dep_Name libFLAC++_static\r
     End Project Dependency\r
     Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC++_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
     Project_Dep_Name test_libs_common_static\r
     End Project Dependency\r
     Begin Project Dependency\r
@@ -186,12 +162,6 @@ Package=<4>
     Project_Dep_Name test_libFLAC++\r
     End Project Dependency\r
     Begin Project Dependency\r
-    Project_Dep_Name test_libOggFLAC\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name test_libOggFLAC++\r
-    End Project Dependency\r
-    Begin Project Dependency\r
     Project_Dep_Name test_seeking\r
     End Project Dependency\r
     Begin Project Dependency\r
@@ -225,9 +195,6 @@ Package=<4>
     Project_Dep_Name libFLAC_static\r
     End Project Dependency\r
     Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
     Project_Dep_Name utf8_static\r
     End Project Dependency\r
 }}}\r
@@ -384,72 +351,6 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "libOggFLAC_dynamic"=.\src\libOggFLAC\libOggFLAC_dynamic.dsp - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libFLAC_dynamic\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "libOggFLAC_static"=.\src\libOggFLAC\libOggFLAC_static.dsp - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libFLAC_static\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "libOggFLAC++_dynamic"=".\src\libOggFLAC++\libOggFLAC++_dynamic.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_dynamic\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libFLAC++_dynamic\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "libOggFLAC++_static"=".\src\libOggFLAC++\libOggFLAC++_static.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libFLAC++_static\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
 Project: "metaflac"=.\src\metaflac\metaflac.dsp - Package Owner=<4>\r
 \r
 Package=<5>\r
@@ -536,9 +437,6 @@ Package=<4>
     Begin Project Dependency\r
     Project_Dep_Name libFLAC_static\r
     End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
 }}}\r
 \r
 ###############################################################################\r
@@ -579,42 +477,6 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "test_libOggFLAC"=.\src\test_libOggFLAC\test_libOggFLAC.dsp - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name test_libs_common_static\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "test_libOggFLAC++"=".\src\test_libOggFLAC++\test_libOggFLAC++.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name libOggFLAC++_static\r
-    End Project Dependency\r
-    Begin Project Dependency\r
-    Project_Dep_Name test_libs_common_static\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
 Project: "test_seeking"=.\src\test_seeking\test_seeking.dsp - Package Owner=<4>\r
 \r
 Package=<5>\r
index 2245bed..5911c4a 100644 (file)
@@ -30,7 +30,7 @@
 
 topdir = .
 
-.PHONY: all doc src libFLAC libFLAC++ libOggFLAC libOggFLAC++ share plugin_common plugin_xmms flac metaflac test_grabbag test_libFLAC test_libFLAC++ test_libOggFLAC test_libOggFLAC++ test_seeking test_streams
+.PHONY: all doc src libFLAC libFLAC++ share plugin_common plugin_xmms flac metaflac test_grabbag test_libFLAC test_libFLAC++ test_seeking test_streams
 all: doc src
 
 DEFAULT_CONFIG = release
@@ -57,16 +57,10 @@ libFLAC:
 libFLAC++: libFLAC
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
-libOggFLAC: libFLAC
-       (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
-
-libOggFLAC++: libFLAC
-       (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
-
 share: libFLAC
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
-flac: libFLAC libOggFLAC share
+flac: libFLAC share
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
 metaflac: libFLAC share
@@ -78,7 +72,7 @@ plugin_common: libFLAC
 plugin_xmms: libFLAC plugin_common
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
-test_seeking: libFLAC libOggFLAC
+test_seeking: libFLAC
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
 test_streams: libFLAC
@@ -93,12 +87,6 @@ test_libFLAC: libFLAC
 test_libFLAC++: libFLAC libFLAC++
        (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
-test_libOggFLAC: libFLAC libOggFLAC
-       (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
-
-test_libOggFLAC++: libFLAC libOggFLAC libOggFLAC++
-       (cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))
-
 test: debug
        (cd test ; $(MAKE) -f Makefile.lite debug)
 
diff --git a/README b/README
index 9934e7a..c4fd672 100644 (file)
--- a/README
+++ b/README
@@ -22,17 +22,15 @@ codec developed by Josh Coalson.
 
 FLAC is comprised of
   * `libFLAC', a library which implements reference encoders and
-    decoders, and a metadata interface
+    decoders for native FLAC and Ogg FLAC, and a metadata interface
   * `libFLAC++', a C++ object wrapper library around libFLAC
-  * `libOggFLAC' and `libOggFLAC++', which provide encoders and
-    decoders for FLAC streams in an Ogg container
   * `flac', a command-line program for encoding and decoding files
   * `metaflac', a command-line program for viewing and editing FLAC
     metadata
   * player plugins for XMMS and Winamp
   * user and API documentation
 
-The libraries (libFLAC, libFLAC++, libOggFLAC, and libOggFLAC++) are
+The libraries (libFLAC, libFLAC++) are
 licensed under Xiph.org's BSD-like license (see COPYING.Xiph).  All other
 programs and plugins are licensed under the GNU General Public License
 (see COPYING.GPL).  The documentation is licensed under the GNU Free
index 2a7d2d8..b1f04ac 100644 (file)
@@ -289,11 +289,6 @@ AC_CONFIG_FILES([ \
        src/libFLAC/include/private/Makefile \
        src/libFLAC/include/protected/Makefile \
        src/libFLAC++/Makefile \
-       src/libOggFLAC/Makefile \
-       src/libOggFLAC/include/Makefile \
-       src/libOggFLAC/include/private/Makefile \
-       src/libOggFLAC/include/protected/Makefile \
-       src/libOggFLAC++/Makefile \
        src/flac/Makefile \
        src/metaflac/Makefile \
        src/monkeys_audio_utilities/Makefile \
@@ -318,15 +313,11 @@ AC_CONFIG_FILES([ \
        src/test_libs_common/Makefile \
        src/test_libFLAC/Makefile \
        src/test_libFLAC++/Makefile \
-       src/test_libOggFLAC/Makefile \
-       src/test_libOggFLAC++/Makefile \
        src/test_seeking/Makefile \
        src/test_streams/Makefile \
        include/Makefile \
        include/FLAC/Makefile \
        include/FLAC++/Makefile \
-       include/OggFLAC/Makefile \
-       include/OggFLAC++/Makefile \
        include/share/Makefile \
        include/share/grabbag/Makefile \
        include/test_libs_common/Makefile \
index 459c06c..3aedd12 100644 (file)
@@ -72,7 +72,7 @@
                                        <li><span class="commandname">flac</span> now supports FLAC as input to the encoder (i.e. can re-encode FLAC to FLAC) and preserve all the metadata like tags, etc.</li>
                                        <li>New <a href="format.html#def_PICTURE"><span class="code">PICTURE</span></a> metadata block for storing things like cover art, new <span class="argument"><a href="documentation.html#flac_options_picture">--picture</a></span> option to <span class="commandname">flac</span> and <span class="argument"><a href="documentation.html#metaflac_shorthand_import_picture">--import-picture</a></span> option to <span class="commandname">metaflac</span> for importing pictures, and metadata API <a href="api/group__flac__metadata__level0.html#ga3">additions</a> for searching for suitable pictures based on type, size and color constraints.</li>
                                        <li>Support for new <tt>REPLAYGAIN_REFERENCE_LOUDNESS</tt> tag.</li>
-                                       <li>In the developer libraries, the interface has been simplfied by merging the three decoding layers into a single class; ditto for the encoders.</li>
+                                       <li>In the developer libraries, the interface has been simplfied by merging the three decoding layers into a single class; ditto for the encoders.  Also, libOggFLAC has been merged into libFLAC and libOggFLAC++ has been merged into libFLAC++ so there is a single API supporting both native FLAC and Ogg FLAC.</li>
                                </ul>
                        </li>
                        <li>
                        <li>
                                libraries:
                                <ul>
+                                       <li>Merged libOggFLAC into libFLAC; both formats are now supporte through the same API.</li>
+                                       <li>Merged libOggFLAC++ into libFLAC++; both formats are now supporte through the same API.</li>
                                        <li>libFLAC: Improved compression with no impact on FLAC format or decoding time by adding a windowing stage before LPC analysis.</li>
                                        <li>libFLAC: Fixed a bug in cuesheet parsing where it would return an error if the last line of the cuesheet did not end with a newline.</li>
                                        <li>libFLAC: Fixed UTF-8 decoder to disallow non-shortest-form and surrogate sequences (see <a href="http://www.unicode.org/versions/corrigendum1.html">here</a>).</li>
                                        <li>
                                                all libraries;
                                                <ul>
+                                                       <li>Merged libOggFLAC into libFLAC; both formats are now supporte through the same API.</li>
+                                                       <li>Merged libOggFLAC++ into libFLAC++; both formats are now supporte through the same API.</li>
                                                        <li>Merged seekable stream decoder and file decoder into the stream decoder.</li>
                                                        <li>Merged seekable stream encoder and file encoder into the stream encoder.</li>
                                                        <li>Added #defines for the API version number to make porting easier; see <tt>include/lib*FLAC*/export.h</tt>.</li>
                                        <li>
                                                libOggFLAC:
                                                <ul>
-                                                       <li><b>Added</b> OggFLAC__stream_encoder_set_apodization()</li>
-                                                       <li><b>Added</b> OggFLAC__metadata_object_cuesheet_calculate_cddb_id()</li>
-                                                       <li><b>Added</b> OggFLAC__metadata_get_cuesheet()</li>
-                                                       <li><b>Added</b> OggFLAC__metadata_get_picture()</li>
+                                                       <li>Merged into libFLAC.</li>
                                                </ul>
                                        </li>
                                        <li>
                                                libOggFLAC++:
                                                <ul>
-                                                       <li><b>Added</b> OggFLAC::Encoder::Stream::set_apodization()</li>
-                                                       <li><b>Added</b> OggFLAC::Metadata::CueSheet::calculate_cddb_id()</li>
-                                                       <li><b>Added</b> OggFLAC::Metadata::get_cuesheet()</li>
-                                                       <li><b>Added</b> OggFLAC::Metadata::get_picture()</li>
+                                                       <li>Merged into libFLAC++.</li>
                                                </ul>
                                        </li>
                                </ul>
index cecdd2b..49fa0fe 100644 (file)
@@ -129,6 +129,7 @@ namespace FLAC {
                        inline operator bool() const { return is_valid(); }
                        //@}
 
+                       virtual bool set_serial_number(long value);                            ///< See FLAC__stream_decoder_set_serial_number()
                        virtual bool set_md5_checking(bool value);                             ///< See FLAC__stream_decoder_set_md5_checking()
                        virtual bool set_metadata_respond(::FLAC__MetadataType type);          ///< See FLAC__stream_decoder_set_metadata_respond()
                        virtual bool set_metadata_respond_application(const FLAC__byte id[4]); ///< See FLAC__stream_decoder_set_metadata_respond_application()
@@ -147,13 +148,8 @@ namespace FLAC {
                        virtual unsigned get_sample_rate() const;                         ///< See FLAC__stream_decoder_get_sample_rate()
                        virtual unsigned get_blocksize() const;                           ///< See FLAC__stream_decoder_get_blocksize()
 
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See FLAC__stream_decoder_init_stream().
-                        */
-                       virtual ::FLAC__StreamDecoderInitStatus init();
+                       virtual ::FLAC__StreamDecoderInitStatus init();      ///< Seek FLAC__stream_decoder_init_stream()
+                       virtual ::FLAC__StreamDecoderInitStatus init_ogg();  ///< Seek FLAC__stream_decoder_init_ogg_stream()
 
                        virtual void finish(); ///< See FLAC__stream_decoder_finish()
 
@@ -250,18 +246,12 @@ namespace FLAC {
                        File();
                        virtual ~File();
 
-                       //@{
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See FLAC__stream_decoder_init_FILE() and
-                        *  FLAC__stream_decoder_init_file().
-                        */
-                       ::FLAC__StreamDecoderInitStatus init(FILE *file);
-                       ::FLAC__StreamDecoderInitStatus init(const char *filename);
-                       ::FLAC__StreamDecoderInitStatus init(const std::string &filename);
-                       //@}
+                       virtual ::FLAC__StreamDecoderInitStatus init(FILE *file);                      ///< See FLAC__stream_decoder_init_FILE()
+                       virtual ::FLAC__StreamDecoderInitStatus init(const char *filename);            ///< See FLAC__stream_decoder_init_file()
+                       virtual ::FLAC__StreamDecoderInitStatus init(const std::string &filename);     ///< See FLAC__stream_decoder_init_file()
+                       virtual ::FLAC__StreamDecoderInitStatus init_ogg(FILE *file);                  ///< See FLAC__stream_decoder_init_ogg_FILE()
+                       virtual ::FLAC__StreamDecoderInitStatus init_ogg(const char *filename);        ///< See FLAC__stream_decoder_init_ogg_file()
+                       virtual ::FLAC__StreamDecoderInitStatus init_ogg(const std::string &filename); ///< See FLAC__stream_decoder_init_ogg_file()
                protected:
                        // this is a dummy implementation to satisfy the pure virtual in Stream that is actually supplied internally by the C layer
                        virtual ::FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
index 3db9bc1..327cd6a 100644 (file)
@@ -56,7 +56,7 @@
  *  This module describes the encoder layers provided by libFLAC++.
  *
  * The libFLAC++ encoder classes are object wrappers around their
- * counterparts in libFLAC.  All decoding layers available in
+ * counterparts in libFLAC.  All encoding layers available in
  * libFLAC are also provided here.  The interface is very similar;
  * make sure to read the \link flac_encoder libFLAC encoder module \endlink.
  *
@@ -132,6 +132,7 @@ namespace FLAC {
                        inline operator bool() const { return is_valid(); }
                        //@}
 
+                       virtual bool set_serial_number(long value);                     ///< See FLAC__stream_encoder_set_serial_number()
                        virtual bool set_verify(bool value);                            ///< See FLAC__stream_encoder_set_verify()
                        virtual bool set_streamable_subset(bool value);                 ///< See FLAC__stream_encoder_set_streamable_subset()
                        virtual bool set_do_mid_side_stereo(bool value);                ///< See FLAC__stream_encoder_set_do_mid_side_stereo()
@@ -175,19 +176,17 @@ namespace FLAC {
                        virtual unsigned get_rice_parameter_search_dist() const;   ///< See FLAC__stream_encoder_get_rice_parameter_search_dist()
                        virtual FLAC__uint64 get_total_samples_estimate() const;   ///< See FLAC__stream_encoder_get_total_samples_estimate()
 
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See FLAC__stream_encoder_init_stream().
-                        */
-                       virtual ::FLAC__StreamEncoderInitStatus init();
+                       virtual ::FLAC__StreamEncoderInitStatus init();            ///< See FLAC__stream_encoder_init_stream()
+                       virtual ::FLAC__StreamEncoderInitStatus init_ogg();        ///< See FLAC__stream_encoder_init_ogg_stream()
 
                        virtual void finish(); ///< See FLAC__stream_encoder_finish()
 
                        virtual bool process(const FLAC__int32 * const buffer[], unsigned samples);     ///< See FLAC__stream_encoder_process()
                        virtual bool process_interleaved(const FLAC__int32 buffer[], unsigned samples); ///< See FLAC__stream_encoder_process_interleaved()
                protected:
+                       /// See FLAC__StreamEncoderReadCallback
+                       virtual ::FLAC__StreamEncoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
+
                        /// See FLAC__StreamEncoderWriteCallback
                        virtual ::FLAC__StreamEncoderWriteStatus write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame) = 0;
 
@@ -209,6 +208,7 @@ namespace FLAC {
 
                        ::FLAC__StreamEncoder *encoder_;
 
+                       static ::FLAC__StreamEncoderReadStatus read_callback_(const ::FLAC__StreamEncoder *encoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
                        static ::FLAC__StreamEncoderWriteStatus write_callback_(const ::FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data);
                        static ::FLAC__StreamEncoderSeekStatus seek_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
                        static ::FLAC__StreamEncoderTellStatus tell_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
@@ -256,18 +256,12 @@ namespace FLAC {
                        File();
                        virtual ~File();
 
-                       //@{
-                       /* Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See FLAC__stream_encoder_init_FILE() and
-                        *  FLAC__stream_encoder_init_file().
-                        */
-                       ::FLAC__StreamEncoderInitStatus init(FILE *file);
-                       ::FLAC__StreamEncoderInitStatus init(const char *filename);
-                       ::FLAC__StreamEncoderInitStatus init(const std::string &filename);
-                       //@}
+                       virtual ::FLAC__StreamEncoderInitStatus init(FILE *file);                      ///< See FLAC__stream_encoder_init_FILE()
+                       virtual ::FLAC__StreamEncoderInitStatus init(const char *filename);            ///< See FLAC__stream_encoder_init_file()
+                       virtual ::FLAC__StreamEncoderInitStatus init(const std::string &filename);     ///< See FLAC__stream_encoder_init_file()
+                       virtual ::FLAC__StreamEncoderInitStatus init_ogg(FILE *file);                  ///< See FLAC__stream_encoder_init_ogg_FILE()
+                       virtual ::FLAC__StreamEncoderInitStatus init_ogg(const char *filename);        ///< See FLAC__stream_encoder_init_ogg_file()
+                       virtual ::FLAC__StreamEncoderInitStatus init_ogg(const std::string &filename); ///< See FLAC__stream_encoder_init_ogg_file()
                protected:
                        /// See FLAC__StreamEncoderProgressCallback
                        virtual void progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate);
@@ -282,8 +276,6 @@ namespace FLAC {
                        void operator=(const Stream &);
                };
 
-               /* \} */
-
        }
 }
 
index 5696bcc..febed1a 100644 (file)
@@ -52,4 +52,7 @@
 #define FLAC_API_VERSION_REVISION 0
 #define FLAC_API_VERSION_AGE 0
 
+/** \c 1 if the library has been compiled with support for Ogg FLAC, else \c 0. */
+extern int FLAC_API_SUPPORTS_OGG_FLAC;
+
 #endif
index ce2b927..06ba1b2 100644 (file)
@@ -208,6 +208,9 @@ typedef enum {
        FLAC__STREAM_DECODER_END_OF_STREAM,
        /**< The decoder has reached the end of the stream. */
 
+       FLAC__STREAM_DECODER_OGG_ERROR,
+       /**< An error occurred in the underlying Ogg layer.  */
+
        FLAC__STREAM_DECODER_SEEK_ERROR,
        /**< An error occurred while seeking.  The decoder must be flushed
         * with FLAC__stream_decoder_flush() or reset with
@@ -245,6 +248,11 @@ typedef enum {
        FLAC__STREAM_DECODER_INIT_STATUS_OK = 0,
        /**< Initialization was successful. */
 
+       FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
+       /**< The library was not compiled with support for the given container
+        * format.
+        */
+
        FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS,
        /**< A required callback was not supplied. */
 
@@ -659,6 +667,21 @@ FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
  *
  ***********************************************************************/
 
+/** Set the serial number for the Ogg stream.
+ *  The default behavior is to use the serial number of the first Ogg
+ *  page.  Setting a serial number here will explicitly specify which
+ *  stream is to be decoded.
+ *
+ * \default \c use serial number of first page
+ * \param  decoder        A decoder instance to set.
+ * \param  serial_number  See above.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__bool
+ *    \c false if the decoder is already initialized, else \c true.
+ */
+FLAC_API FLAC__bool FLAC__stream_decoder_set_serial_number(FLAC__StreamDecoder *decoder, long serial_number);
+
 /** Set the "MD5 signature checking" flag.  If \c true, the decoder will
  *  compute the MD5 signature of the unencoded audio data while decoding
  *  and compare it to the signature from the STREAMINFO block, if it
@@ -875,24 +898,28 @@ FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *
  *  there may still be undecoded bytes in the decoder's read FIFO.
  *  The returned position is correct even after a seek.
  *
+ *  \warning This function currently only works for native FLAC,
+ *           not Ogg FLAC streams.
+ *
  * \param  decoder   A decoder instance to query.
  * \param  position  Address at which to return the desired position.
  * \assert
  *    \code decoder != NULL \endcode
  *    \code position != NULL \endcode
  * \retval FLAC__bool
- *    \c true if successful, \c false if there was an error from
- *    the 'tell' callback or it returned
+ *    \c true if successful, \c false if the stream is not native FLAC,
+ *    or there was an error from the 'tell' callback or it returned
  *    \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED.
  */
 FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position);
 
-/** Initialize the decoder instance.
+/** Initialize the decoder instance to decode native FLAC streams.
  *
- *  This flavor of initialization sets up the decoder to decode from a stream.
- *  I/O is performed via callbacks to the client.  For decoding from a plain file
- *  via filename or open FILE*, FLAC__stream_decoder_init_file() and
- *  FLAC__stream_decoder_init_FILE() provide a simpler interface.
+ *  This flavor of initialization sets up the decoder to decode from a
+ *  native FLAC stream. I/O is performed via callbacks to the client.
+ *  For decoding from a plain file via filename or open FILE*,
+ *  FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE()
+ *  provide a simpler interface.
  *
  *  This function should be called after FLAC__stream_decoder_new() and
  *  FLAC__stream_decoder_set_*() but before any of the
@@ -963,10 +990,91 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        void *client_data
 );
 
-/** Initialize the decoder instance.
+/** Initialize the decoder instance to decode Ogg FLAC streams.
  *
- *  This flavor of initialization sets up the decoder to decode from a plain
- *  file.  For non-stdio streams, you must use
+ *  This flavor of initialization sets up the decoder to decode from a
+ *  FLAC stream in an Ogg container. I/O is performed via callbacks to the
+ *  client.  For decoding from a plain file via filename or open FILE*,
+ *  FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE()
+ *  provide a simpler interface.
+ *
+ *  This function should be called after FLAC__stream_decoder_new() and
+ *  FLAC__stream_decoder_set_*() but before any of the
+ *  FLAC__stream_decoder_process_*() functions.  Will set and return the
+ *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
+ *  if initialization succeeded.
+ *
+ *  \note Support for Ogg FLAC in the library is optional.  If this
+ *  library has been built without support for Ogg FLAC, this function
+ *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
+ *
+ * \param  decoder            An uninitialized decoder instance.
+ * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
+ *                            pointer may be \c NULL if seeking is not
+ *                            supported.  If \a seek_callback is not \c NULL then a
+ *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
+ *                            Alternatively, a dummy seek callback that just
+ *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
+ *                            pointer may be \c NULL if not supported by the client.  If
+ *                            \a seek_callback is not \c NULL then a
+ *                            \a tell_callback must also be supplied.
+ *                            Alternatively, a dummy tell callback that just
+ *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
+ *                            pointer may be \c NULL if not supported by the client.  If
+ *                            \a seek_callback is not \c NULL then a
+ *                            \a length_callback must also be supplied.
+ *                            Alternatively, a dummy length callback that just
+ *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
+ *                            pointer may be \c NULL if not supported by the client.  If
+ *                            \a seek_callback is not \c NULL then a
+ *                            \a eof_callback must also be supplied.
+ *                            Alternatively, a dummy length callback that just
+ *                            returns \c false
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.
+ * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__StreamDecoderInitStatus
+ *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
+       FLAC__StreamDecoder *decoder,
+       FLAC__StreamDecoderReadCallback read_callback,
+       FLAC__StreamDecoderSeekCallback seek_callback,
+       FLAC__StreamDecoderTellCallback tell_callback,
+       FLAC__StreamDecoderLengthCallback length_callback,
+       FLAC__StreamDecoderEofCallback eof_callback,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+);
+
+/** Initialize the decoder instance to decode native FLAC files.
+ *
+ *  This flavor of initialization sets up the decoder to decode from a
+ *  plain native FLAC file.  For non-stdio streams, you must use
  *  FLAC__stream_decoder_init_stream() and provide callbacks for the I/O.
  *
  *  This function should be called after FLAC__stream_decoder_new() and
@@ -1009,11 +1117,61 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
        void *client_data
 );
 
-/** Initialize the decoder instance.
+/** Initialize the decoder instance to decode Ogg FLAC files.
+ *
+ *  This flavor of initialization sets up the decoder to decode from a
+ *  plain Ogg FLAC file.  For non-stdio streams, you must use
+ *  FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O.
+ *
+ *  This function should be called after FLAC__stream_decoder_new() and
+ *  FLAC__stream_decoder_set_*() but before any of the
+ *  FLAC__stream_decoder_process_*() functions.  Will set and return the
+ *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
+ *  if initialization succeeded.
+ *
+ *  \note Support for Ogg FLAC in the library is optional.  If this
+ *  library has been built without support for Ogg FLAC, this function
+ *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
+ *
+ * \param  decoder            An uninitialized decoder instance.
+ * \param  file               An open FLAC file.  The file should have been
+ *                            opened with mode \c "rb" and rewound.  The file
+ *                            becomes owned by the decoder and should not be
+ *                            manipulated by the client while decoding.
+ *                            Unless \a file is \c stdin, it will be closed
+ *                            when FLAC__stream_decoder_finish() is called.
+ *                            Note however that seeking will not work when
+ *                            decoding from \c stdout since it is not seekable.
+ * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.
+ * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code decoder != NULL \endcode
+ *    \code file != NULL \endcode
+ * \retval FLAC__StreamDecoderInitStatus
+ *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
+       FLAC__StreamDecoder *decoder,
+       FILE *file,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+);
+
+/** Initialize the decoder instance to decode native FLAC files.
  *
  *  This flavor of initialization sets up the decoder to decode from a plain
- *  file.  If POSIX fopen() semantics are not sufficient, (for example, with
- *  Unicode filenames on Windows), you must use
+ *  native FLAC file.  If POSIX fopen() semantics are not sufficient, (for
+ *  example, with Unicode filenames on Windows), you must use
  *  FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream()
  *  and provide callbacks for the I/O.
  *
@@ -1051,6 +1209,52 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
        void *client_data
 );
 
+/** Initialize the decoder instance to decode Ogg FLAC files.
+ *
+ *  This flavor of initialization sets up the decoder to decode from a plain
+ *  Ogg FLAC file.  If POSIX fopen() semantics are not sufficient, (for
+ *  example, with Unicode filenames on Windows), you must use
+ *  FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream()
+ *  and provide callbacks for the I/O.
+ *
+ *  This function should be called after FLAC__stream_decoder_new() and
+ *  FLAC__stream_decoder_set_*() but before any of the
+ *  FLAC__stream_decoder_process_*() functions.  Will set and return the
+ *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
+ *  if initialization succeeded.
+ *
+ *  \note Support for Ogg FLAC in the library is optional.  If this
+ *  library has been built without support for Ogg FLAC, this function
+ *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
+ *
+ * \param  decoder            An uninitialized decoder instance.
+ * \param  filename           The name of the file to decode from.  The file will
+ *                            be opened with fopen().  Use \c NULL to decode from
+ *                            \c stdin.  Note that \c stdin is not seekable.
+ * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.
+ * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__StreamDecoderInitStatus
+ *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
+       FLAC__StreamDecoder *decoder,
+       const char *filename,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+);
+
 /** Finish the decoding process.
  *  Flushes the decoding buffer, releases resources, resets the decoder
  *  settings to their defaults, and returns the decoder state to
index 9770479..85a2b46 100644 (file)
@@ -219,6 +219,9 @@ typedef enum {
         * can be processed.
         */
 
+       FLAC__STREAM_ENCODER_OGG_ERROR,
+       /**< An error occurred in the underlying Ogg layer.  */
+
        FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
        /**< An error occurred in the underlying verify stream decoder;
         * check FLAC__stream_encoder_get_verify_decoder_state().
@@ -254,6 +257,7 @@ typedef enum {
  */
 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
 
+
 /** Possible return values for the FLAC__stream_encoder_init_*() functions.
  */
 typedef enum {
@@ -264,6 +268,11 @@ typedef enum {
        FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
        /**< General failure to set up encoder; call FLAC__stream_encoder_get_state() for cause. */
 
+       FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
+       /**< The library was not compiled with support for the given container
+        * format.
+        */
+
        FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
        /**< A required callback was not supplied. */
 
@@ -324,6 +333,33 @@ typedef enum {
  */
 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
 
+
+/** Return values for the FLAC__StreamEncoder read callback.
+ */
+typedef enum {
+
+       FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
+       /**< The read was OK and decoding can continue. */
+
+       FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
+       /**< The read was attempted at the end of the stream. */
+
+       FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
+       /**< An unrecoverable error occurred. */
+
+       FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
+       /**< Client does not support reading back from the output. */
+
+} FLAC__StreamEncoderReadStatus;
+
+/** Maps a FLAC__StreamEncoderReadStatus to a C string.
+ *
+ *  Using a FLAC__StreamEncoderReadStatus as the index to this array
+ *  will give the string equivalent.  The contents should not be modified.
+ */
+extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
+
+
 /** Return values for the FLAC__StreamEncoder write callback.
  */
 typedef enum {
@@ -343,6 +379,7 @@ typedef enum {
  */
 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
 
+
 /** Return values for the FLAC__StreamEncoder seek callback.
  */
 typedef enum {
@@ -406,6 +443,38 @@ typedef struct {
        struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
 } FLAC__StreamEncoder;
 
+/** Signature for the read callback.
+ *
+ *  A function pointer matching this signature must be passed to
+ *  FLAC__stream_encoder_init_ogg_stream() if seeking is supported.
+ *  The supplied function will be called when the encoder needs to read back
+ *  encoded data.  This happens during the metadata callback, when the encoder
+ *  has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered
+ *  while encoding.  The address of the buffer to be filled is supplied, along
+ *  with the number of bytes the buffer can hold.  The callback may choose to
+ *  supply less data and modify the byte count but must be careful not to
+ *  overflow the buffer.  The callback then returns a status code chosen from
+ *  FLAC__StreamEncoderReadStatus.
+ *
+ * \note In general, FLAC__StreamEncoder functions which change the
+ * state should not be called on the \a encoder while in the callback.
+ *
+ * \param  encoder  The encoder instance calling the callback.
+ * \param  buffer   A pointer to a location for the callee to store
+ *                  data to be encoded.
+ * \param  bytes    A pointer to the size of the buffer.  On entry
+ *                  to the callback, it contains the maximum number
+ *                  of bytes that may be stored in \a buffer.  The
+ *                  callee must set it to the actual number of bytes
+ *                  stored (0 in case of error or end-of-stream) before
+ *                  returning.
+ * \param  client_data  The callee's client data set through
+ *                      FLAC__stream_encoder_set_client_data().
+ * \retval FLAC__StreamEncoderReadStatus
+ *    The callee's return status.
+ */
+typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
+
 /** Signature for the write callback.
  *
  *  A function pointer matching this signature must be passed to
@@ -421,6 +490,13 @@ typedef struct {
  *  number that is being written; otherwise it indicates that the write
  *  callback is being called to write metadata.
  *
+ * \note
+ * Unlike when writing to native FLAC, when writing to Ogg FLAC the
+ * write callback will be called twice when writing each audio
+ * frame; once for the page header, and once for the page body.
+ * When writing the page header, the \a samples argument to the
+ * write callback will be \c 0.
+ *
  * \note In general, FLAC__StreamEncoder functions which change the
  * state should not be called on the \a encoder while in the callback.
  *
@@ -558,6 +634,25 @@ FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
  *
  ***********************************************************************/
 
+/** Set the serial number for the FLAC stream to use in the Ogg container.
+ *
+ * \note
+ * This does not need to be set for native FLAC encoding.
+ *
+ * \note
+ * It is recommended to set a serial number explicitly as the default of '0'
+ * may collide with other streams.
+ *
+ * \default \c 0
+ * \param  encoder        An encoder instance to set.
+ * \param  serial_number  See above.
+ * \assert
+ *    \code encoder != NULL \endcode
+ * \retval FLAC__bool
+ *    \c false if the encoder is already initialized, else \c true.
+ */
+FLAC_API FLAC__bool FLAC__stream_encoder_set_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
+
 /** Set the "verify" flag.  If \c true, the encoder will verify it's own
  *  encoded output by feeding it through an internal decoder and comparing
  *  the original signal against the decoded signal.  If a mismatch occurs,
@@ -919,6 +1014,19 @@ FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__Stream
  * block is present in the \a metadata array, libFLAC will write an
  * empty one, containing only the vendor string.
  *
+ * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be
+ * the second metadata block of the stream.  The encoder already supplies
+ * the STREAMINFO block automatically.  If \a metadata does not contain a
+ * VORBIS_COMMENT block, the encoder will supply that too.  Otherwise, if
+ * \a metadata does contain a VORBIS_COMMENT block and it is not the
+ * first, this function will reorder \a metadata by moving the
+ * VORBIS_COMMENT block to the front; the relative ordering of the other
+ * blocks will remain as they were.
+ *
+ * \note The Ogg FLAC mapping limits the number of metadata blocks per
+ * stream to \c 65535.  If \a num_blocks exceeds this the function will
+ * return \c false.
+ *
  * \default \c NULL, 0
  * \param  encoder     An encoder instance to set.
  * \param  metadata    See above.
@@ -927,6 +1035,8 @@ FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__Stream
  *    \code encoder != NULL \endcode
  * \retval FLAC__bool
  *    \c false if the encoder is already initialized, else \c true.
+ *    \c false if the encoder is already initialized, or if
+ *    \a num_blocks > 65535 if encoding to Ogg FLAC, else \c true.
  */
 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
 
@@ -1157,12 +1267,13 @@ FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC
  */
 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
 
-/** Initialize the encoder instance.
+/** Initialize the encoder instance to encode native FLAC streams.
  *
- *  This flavor of initialization sets up the encoder to encode to a stream.
- *  I/O is performed via callbacks to the client.  For encoding to a plain file
- *  via filename or open \c FILE*, FLAC__stream_encoder_init_file() and
- *  FLAC__stream_encoder_init_FILE() provide a simpler interface.
+ *  This flavor of initialization sets up the encoder to encode to a
+ *  native FLAC stream. I/O is performed via callbacks to the client.
+ *  For encoding to a plain file via filename or open \c FILE*,
+ *  FLAC__stream_encoder_init_file() and FLAC__stream_encoder_init_FILE()
+ *  provide a simpler interface.
  *
  *  This function should be called after FLAC__stream_encoder_new() and
  *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
@@ -1219,20 +1330,84 @@ FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC
  */
 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
 
-/** Initialize the encoder instance.
+/** Initialize the encoder instance to encode Ogg FLAC streams.
  *
- *  This flavor of initialization sets up the encoder to encode to a plain
- *  file.  For non-stdio streams, you must use
- *  FLAC__stream_encoder_init_stream() and provide callbacks for the I/O.
+ *  This flavor of initialization sets up the encoder to encode to a FLAC
+ *  stream in an Ogg container.  I/O is performed via callbacks to the
+ *  client.  For encoding to a plain file via filename or open \c FILE*,
+ *  FLAC__stream_encoder_init_ogg_file() and FLAC__stream_encoder_init_ogg_FILE()
+ *  provide a simpler interface.
  *
  *  This function should be called after FLAC__stream_encoder_new() and
  *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
  *  or FLAC__stream_encoder_process_interleaved().
  *  initialization succeeded.
  *
- *  The call to FLAC__stream_encoder_init_stream() currently will also immediately
- *  call the write callback several times, once with the \c fLaC signature,
- *  and once for each encoded metadata block.
+ *  The call to FLAC__stream_encoder_init_ogg_stream() currently will
+ *  also immediately call the write callback several times, once with
+ *  the \c fLaC signature, and once for each encoded metadata block.@@@@@@
+ *
+ * \param  encoder            An uninitialized encoder instance.
+ * \param  read_callback      See FLAC__StreamEncoderReadCallback.  This
+ *                            pointer must not be \c NULL if \a seek_callback
+ *                            is non-NULL since they are both needed to be
+ *                            able to write data back to the Ogg FLAC stream
+ *                            in the post-encode phase.
+ * \param  write_callback     See FLAC__StreamEncoderWriteCallback.  This
+ *                            pointer must not be \c NULL.
+ * \param  seek_callback      See FLAC__StreamEncoderSeekCallback.  This
+ *                            pointer may be \c NULL if seeking is not
+ *                            supported.  The encoder uses seeking to go back
+ *                            and write some some stream statistics to the
+ *                            STREAMINFO block; this is recommended but not
+ *                            necessary to create a valid FLAC stream.  If
+ *                            \a seek_callback is not \c NULL then a
+ *                            \a tell_callback must also be supplied.
+ *                            Alternatively, a dummy seek callback that just
+ *                            returns \c FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  tell_callback      See FLAC__StreamEncoderTellCallback.  This
+ *                            pointer may be \c NULL if seeking is not
+ *                            supported.  If \a seek_callback is \c NULL then
+ *                            this argument will be ignored.  If
+ *                            \a seek_callback is not \c NULL then a
+ *                            \a tell_callback must also be supplied.
+ *                            Alternatively, a dummy tell callback that just
+ *                            returns \c FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
+ *                            may also be supplied, all though this is slightly
+ *                            less efficient for the decoder.
+ * \param  metadata_callback  See FLAC__StreamEncoderMetadataCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.  If the client provides a seek callback,
+ *                            this function is not necessary as the encoder
+ *                            will automatically seek back and update the
+ *                            STREAMINFO block.  It may also be \c NULL if the
+ *                            client does not support seeking, since it will
+ *                            have no way of going back to update the
+ *                            STREAMINFO.  However the client can still supply
+ *                            a callback if it would like to know the details
+ *                            from the STREAMINFO.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code encoder != NULL \endcode
+ * \retval FLAC__StreamEncoderInitStatus
+ *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderReadCallback read_callback, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
+
+/** Initialize the encoder instance to encode native FLAC files.
+ *
+ *  This flavor of initialization sets up the encoder to encode to a
+ *  plain native FLAC file.  For non-stdio streams, you must use
+ *  FLAC__stream_encoder_init_stream() and provide callbacks for the I/O.
+ *
+ *  This function should be called after FLAC__stream_encoder_new() and
+ *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
+ *  or FLAC__stream_encoder_process_interleaved().
+ *  initialization succeeded.
  *
  * \param  encoder            An uninitialized encoder instance.
  * \param  file               An open file.  The file should have been opened
@@ -1258,12 +1433,47 @@ FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream(FLAC__St
  */
 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
 
-/** Initialize the encoder instance.
+/** Initialize the encoder instance to encode Ogg FLAC files.
+ *
+ *  This flavor of initialization sets up the encoder to encode to a
+ *  plain Ogg FLAC file.  For non-stdio streams, you must use
+ *  FLAC__stream_encoder_init_ogg_stream() and provide callbacks for the I/O.
+ *
+ *  This function should be called after FLAC__stream_encoder_new() and
+ *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
+ *  or FLAC__stream_encoder_process_interleaved().
+ *  initialization succeeded.
+ *
+ * \param  encoder            An uninitialized encoder instance.
+ * \param  file               An open file.  The file should have been opened
+ *                            with mode \c "w+b" and rewound.  The file
+ *                            becomes owned by the encoder and should not be
+ *                            manipulated by the client while encoding.
+ *                            Unless \a file is \c stdout, it will be closed
+ *                            when FLAC__stream_encoder_finish() is called.
+ *                            Note however that a proper SEEKTABLE cannot be
+ *                            created when encoding to \c stdout since it is
+ *                            not seekable.
+ * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code encoder != NULL \endcode
+ *    \code file != NULL \endcode
+ * \retval FLAC__StreamEncoderInitStatus
+ *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
+
+/** Initialize the encoder instance to encode native FLAC files.
  *
  *  This flavor of initialization sets up the encoder to encode to a plain
- *  file.  If POSIX fopen() semantics are not sufficient (for example,
+ *  FLAC file.  If POSIX fopen() semantics are not sufficient (for example,
  *  with Unicode filenames on Windows), you must use
- *  FLAC__stream_encodeR_init_FILE(), or FLAC__stream_encoder_init_stream()
+ *  FLAC__stream_encoder_init_FILE(), or FLAC__stream_encoder_init_stream()
  *  and provide callbacks for the I/O.
  *
  *  This function should be called after FLAC__stream_encoder_new() and
@@ -1271,10 +1481,6 @@ FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__Stre
  *  or FLAC__stream_encoder_process_interleaved().
  *  initialization succeeded.
  *
- *  The call to FLAC__stream_encoder_init_stream() currently will also immediately
- *  call the write callback several times, once with the \c fLaC signature,
- *  and once for each encoded metadata block.
- *
  * \param  encoder            An uninitialized encoder instance.
  * \param  filename           The name of the file to encode to.  The file will
  *                            be opened with fopen().  Use \c NULL to encode to
@@ -1294,6 +1500,38 @@ FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__Stre
  */
 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
 
+/** Initialize the encoder instance to encode Ogg FLAC files.
+ *
+ *  This flavor of initialization sets up the encoder to encode to a plain
+ *  Ogg FLAC file.  If POSIX fopen() semantics are not sufficient (for example,
+ *  with Unicode filenames on Windows), you must use
+ *  FLAC__stream_encoder_init_ogg_FILE(), or FLAC__stream_encoder_init_ogg_stream()
+ *  and provide callbacks for the I/O.
+ *
+ *  This function should be called after FLAC__stream_encoder_new() and
+ *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
+ *  or FLAC__stream_encoder_process_interleaved().
+ *  initialization succeeded.
+ *
+ * \param  encoder            An uninitialized encoder instance.
+ * \param  filename           The name of the file to encode to.  The file will
+ *                            be opened with fopen().  Use \c NULL to encode to
+ *                            \c stdout.  Note however that a proper SEEKTABLE
+ *                            cannot be created when encoding to \c stdout since
+ *                            it is not seekable.
+ * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
+ *                            pointer may be \c NULL if the callback is not
+ *                            desired.
+ * \param  client_data        This value will be supplied to callbacks in their
+ *                            \a client_data argument.
+ * \assert
+ *    \code encoder != NULL \endcode
+ * \retval FLAC__StreamEncoderInitStatus
+ *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
+ *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
+ */
+FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
+
 /** Finish the encoding process.
  *  Flushes the encoding buffer, releases resources, resets the encoder
  *  settings to their defaults, and returns the encoder state to
index 31b7e5f..aeddca5 100644 (file)
@@ -15,8 +15,4 @@
 #  restrictive of those mentioned above.  See the file COPYING.Xiph in this
 #  distribution.
 
-if FLaC__HAS_OGG
-OGGFLAC_DIRS = OggFLAC OggFLAC++
-endif
-
-SUBDIRS = FLAC FLAC++ $(OGGFLAC_DIRS) share test_libs_common
+SUBDIRS = FLAC FLAC++ share test_libs_common
diff --git a/include/OggFLAC++/Makefile.am b/include/OggFLAC++/Makefile.am
deleted file mode 100644 (file)
index 39cfd09..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#  libOggFLAC++ - Free Lossless Audio Codec + Ogg library
-#  Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
-#
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions
-#  are met:
-#
-#  - Redistributions of source code must retain the above copyright
-#  notice, this list of conditions and the following disclaimer.
-#
-#  - Redistributions in binary form must reproduce the above copyright
-#  notice, this list of conditions and the following disclaimer in the
-#  documentation and/or other materials provided with the distribution.
-#
-#  - Neither the name of the Xiph.org Foundation nor the names of its
-#  contributors may be used to endorse or promote products derived from
-#  this software without specific prior written permission.
-#
-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-#  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-#  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-#  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-#  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-#  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-#  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-oggflaccppincludedir = $(includedir)/OggFLAC++
-
-oggflaccppinclude_HEADERS = \
-       all.h \
-       decoder.h \
-       encoder.h \
-       export.h
diff --git a/include/OggFLAC++/all.h b/include/OggFLAC++/all.h
deleted file mode 100644 (file)
index d1101d2..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* libOggFLAC++ - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLACPP__ALL_H
-#define OggFLACPP__ALL_H
-
-#include "export.h"
-
-#include "encoder.h"
-#include "decoder.h"
-
-/** \defgroup oggflacpp OggFLAC C++ API
- *
- * The OggFLAC C++ API is the interface to libOggFLAC++, a set of classes
- * that encapsulate the encoders and decoders in libOggFLAC.
- *
- */
-
-#endif
diff --git a/include/OggFLAC++/decoder.h b/include/OggFLAC++/decoder.h
deleted file mode 100644 (file)
index e882e29..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/* libOggFLAC++ - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLACPP__DECODER_H
-#define OggFLACPP__DECODER_H
-
-#include "export.h"
-
-#include "OggFLAC/stream_decoder.h"
-// we only need this for the state abstraction really...
-#include "FLAC++/decoder.h"
-
-
-/** \file include/OggFLAC++/decoder.h
- *
- *  \brief
- *  This module contains the classes which implement the various
- *  decoders.
- *
- *  See the detailed documentation in the
- *  \link oggflacpp_decoder decoder \endlink module.
- */
-
-/** \defgroup oggflacpp_decoder OggFLAC++/decoder.h: decoder classes
- *  \ingroup oggflacpp
- *
- *  \brief
- *  This module describes the decoder layers provided by libOggFLAC++.
- *
- * The libOggFLAC++ decoder classes are object wrappers around their
- * counterparts in libOggFLAC.  All decoding layers available in
- * libOggFLAC are also provided here.  The interface is very similar;
- * make sure to read the \link oggflac_decoder libOggFLAC decoder module \endlink.
- *
- * There are only two significant differences here.  First, instead of
- * passing in C function pointers for callbacks, you inherit from the
- * decoder class and provide implementations for the callbacks in your
- * derived class; because of this there is no need for a 'client_data'
- * property.
- *
- * Second, there are two stream decoder classes.  OggFLAC::Decoder::Stream
- * is used for the same cases that OggFLAC__stream_decoder_init_stream() is
- * used, and OggFLAC::Decoder::File is used for the same cases that
- * OggFLAC__stream_decoder_init_FILE() and OggFLAC__stream_decoder_init_file()
- * are used.
- *
- * Note that OggFLAC::Decoder::Stream inherits from FLAC::Decoder::Stream so
- * it is possible to support both FLAC and Ogg FLAC decoding with only a
- * little specialized code (just up to initialization).  For example,
- * \code
- * class MyFLACDecoder: public FLAC::Decoder::Stream
- * {
- *     // implement callbacks
- * };
- * FLAC::Decoder::Stream *flac = new MyFLACDecoder();
- * if(*flac) {
- *     flac->set_...();
- *     // continue set_ calls()
- *     if(flac->init() == ::FLAC__STREAM_DECODER_INIT_STATUS_OK)
- *         my_process_stream(flac);
- * }
- * 
- * ...
- * 
- * class MyOggFLACDecoder: public OggFLAC::Decoder::Stream
- * {
- *     // implement callbacks
- * };
- * FLAC::Decoder::Stream *oggflac = new MyOggFLACDecoder();
- * if(*oggflac) {
- *     oggflac->set_serial_number();
- *     // continue set_ calls()
- *     if(oggflac->init() == ::FLAC__STREAM_DECODER_INIT_STATUS_OK)
- *         my_process_stream(oggflac);
- * }
- * \endcode
- */
-
-namespace OggFLAC {
-       namespace Decoder {
-
-               /** \defgroup oggflacpp_stream_decoder OggFLAC++/decoder.h: stream decoder class
-                *  \ingroup oggflacpp_decoder
-                *
-                *  \brief
-                *  This class wraps the ::OggFLAC__StreamDecoder.
-                *
-                * See the \link oggflac_stream_decoder libOggFLAC stream decoder module \endlink
-                * for basic usage.
-                *
-                * \{
-                */
-
-               /** This class wraps the ::OggFLAC__StreamDecoder.  If you are
-                *  decoding from a file, OggFLAC::Decoder::File may be more
-                *  convenient.
-                *
-                * The usage of this class is similar to OggFLAC__StreamDecoder,
-                * except instead of providing callbacks to
-                * OggFLAC__stream_decoder_init_stream(), you will inherit from this
-                * class and override the virtual callback functions with your
-                * own implementations, then call Stream::init().  The rest of
-                * the calls work the same as in the C layer.
-                *
-                * Only the read, write, and error callbacks are mandatory.  The
-                * others are optional; this class provides default
-                * implementations that do nothing.  In order for seeking to work
-                * you must overide seek_callback(), tell_callback(),
-                * length_callback(), and eof_callback().
-                */
-               class OggFLACPP_API Stream: public FLAC::Decoder::Stream {
-               public:
-                       /** This class is a wrapper around OggFLAC__StreamDecoderState.
-                        */
-                       class OggFLACPP_API State {
-                       public:
-                               inline State(::OggFLAC__StreamDecoderState state): state_(state) { }
-                               inline operator ::OggFLAC__StreamDecoderState() const { return state_; }
-                               inline const char *as_cstring() const { return ::OggFLAC__StreamDecoderStateString[state_]; }
-                               inline const char *resolved_as_cstring(const Stream &decoder) const { return ::OggFLAC__stream_decoder_get_resolved_state_string((const OggFLAC__StreamDecoder*)decoder.decoder_); }
-                       protected:
-                               ::OggFLAC__StreamDecoderState state_;
-                       };
-
-                       Stream();
-                       virtual ~Stream();
-
-                       bool set_serial_number(long value);                            ///< See OggFLAC__stream_decoder_set_serial_number()
-                       bool set_md5_checking(bool value);                             ///< See OggFLAC__stream_decoder_set_md5_checking()
-                       bool set_metadata_respond(::FLAC__MetadataType type);          ///< See OggFLAC__stream_decoder_set_metadata_respond()
-                       bool set_metadata_respond_application(const FLAC__byte id[4]); ///< See OggFLAC__stream_decoder_set_metadata_respond_application()
-                       bool set_metadata_respond_all();                               ///< See OggFLAC__stream_decoder_set_metadata_respond_all()
-                       bool set_metadata_ignore(::FLAC__MetadataType type);           ///< See OggFLAC__stream_decoder_set_metadata_ignore()
-                       bool set_metadata_ignore_application(const FLAC__byte id[4]);  ///< See OggFLAC__stream_decoder_set_metadata_ignore_application()
-                       bool set_metadata_ignore_all();                                ///< See OggFLAC__stream_decoder_set_metadata_ignore_all()
-
-                       State get_state() const;                                  ///< See OggFLAC__stream_decoder_get_state()
-                       FLAC::Decoder::Stream::State get_FLAC_stream_decoder_state() const; ///< See OggFLAC__stream_decoder_get_FLAC_stream_decoder_state()
-                       bool get_md5_checking() const;                            ///< See OggFLAC__stream_decoder_get_md5_checking()
-                       FLAC__uint64 get_total_samples() const;                   ///< See OggFLAC__stream_decoder_get_total_samples()
-                       unsigned get_channels() const;                            ///< See OggFLAC__stream_decoder_get_channels()
-                       ::FLAC__ChannelAssignment get_channel_assignment() const; ///< See OggFLAC__stream_decoder_get_channel_assignment()
-                       unsigned get_bits_per_sample() const;                     ///< See OggFLAC__stream_decoder_get_bits_per_sample()
-                       unsigned get_sample_rate() const;                         ///< See OggFLAC__stream_decoder_get_sample_rate()
-                       unsigned get_blocksize() const;                           ///< See OggFLAC__stream_decoder_get_blocksize()
-
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See OggFLAC__stream_decoder_init_stream().
-                        */
-                       ::FLAC__StreamDecoderInitStatus init();
-
-                       void finish(); ///< See OggFLAC__stream_decoder_finish()
-
-                       bool flush(); ///< See OggFLAC__stream_decoder_flush()
-                       bool reset(); ///< See OggFLAC__stream_decoder_reset()
-
-                       bool process_single();                ///< See OggFLAC__stream_decoder_process_single()
-                       bool process_until_end_of_metadata(); ///< See OggFLAC__stream_decoder_process_until_end_of_metadata()
-                       bool process_until_end_of_stream();   ///< See OggFLAC__stream_decoder_process_until_end_of_stream()
-                       bool skip_single_frame();             ///< See OggFLAC__stream_decoder_skip_single_frame()
-
-                       bool seek_absolute(FLAC__uint64 sample); ///< See OggFLAC__stream_decoder_seek_absolute()
-               protected:
-#if (defined _MSC_VER) || (defined __GNUG__ && (__GNUG__ < 2 || (__GNUG__ == 2 && __GNUC_MINOR__ < 96))) || (defined __SUNPRO_CC)
-                       // lame hack: some MSVC/GCC versions can't see a protected decoder_ from nested State::resolved_as_cstring()
-                       friend State;
-#endif
-               private:
-                       // Private and undefined so you can't use them:
-                       Stream(const Stream &);
-                       void operator=(const Stream &);
-               };
-
-               /* \} */
-
-               /** \defgroup oggflacpp_file_decoder OggFLAC++/decoder.h: file decoder class
-                *  \ingroup oggflacpp_decoder
-                *
-                *  \brief
-                *  This class wraps the ::OggFLAC__FileDecoder.
-                *
-                * See the \link oggflac_stream_decoder libOggFLAC stream decoder module \endlink
-                * for basic usage.
-                *
-                * \{
-                */
-
-               /** This class wraps the ::OggFLAC__StreamDecoder.  If you are
-                *  not decoding from a file, you may need to use
-                *  OggFLAC::Decoder::Stream.
-                *
-                * The usage of this class is similar to OggFLAC__StreamDecoder,
-                * except instead of providing callbacks to
-                * OggFLAC__stream_decoder_init_FILE() or
-                * OggFLAC__stream_decoder_init_file(), you will inherit from this
-                * class and override the virtual callback functions with your
-                * own implementations, then call File::init().  The rest of
-                * the calls work the same as in the C layer.
-                *
-                * Only the write, and error callbacks from OggFLAC::Decoder::Stream
-                * are mandatory.  The others are optional; this class provides
-                * full working implementations for all other callbacks and
-                * supports seeking.
-                */
-               class OggFLACPP_API File: public Stream {
-               public:
-                       File();
-                       virtual ~File();
-
-                       //@{
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See OggFLAC__stream_decoder_init_FILE() and
-                        *  OggFLAC__stream_decoder_init_file().
-                        */
-                       ::FLAC__StreamDecoderInitStatus init(FILE *file);
-                       ::FLAC__StreamDecoderInitStatus init(const char *filename);
-                       ::FLAC__StreamDecoderInitStatus init(const std::string &filename);
-                       //@}
-               protected:
-                       // this is a dummy implementation to satisfy the pure virtual in Stream that is actually supplied internally by the C layer
-                       virtual ::FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
-               private:
-                       // Private and undefined so you can't use them:
-                       File(const File &);
-                       void operator=(const File &);
-               };
-
-               /* \} */
-
-       }
-}
-
-#endif
diff --git a/include/OggFLAC++/encoder.h b/include/OggFLAC++/encoder.h
deleted file mode 100644 (file)
index ca48baf..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-/* libOggFLAC++ - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLACPP__ENCODER_H
-#define OggFLACPP__ENCODER_H
-
-#include "export.h"
-
-#include "OggFLAC/stream_encoder.h"
-#include "decoder.h"
-// we only need these for the state abstractions really...
-#include "FLAC++/decoder.h"
-#include "FLAC++/encoder.h"
-
-
-/** \file include/OggFLAC++/encoder.h
- *
- *  \brief
- *  This module contains the classes which implement the various
- *  encoders.
- *
- *  See the detailed documentation in the
- *  \link oggflacpp_encoder encoder \endlink module.
- */
-
-/** \defgroup oggflacpp_encoder OggFLAC++/encoder.h: encoder classes
- *  \ingroup oggflacpp
- *
- *  \brief
- *  This module describes the encoder layers provided by libOggFLAC++.
- *
- * The libOggFLAC++ encoder classes are object wrappers around their
- * counterparts in libOggFLAC.  All decoding layers available in
- * libOggFLAC are also provided here.  The interface is very similar;
- * make sure to read the \link oggflac_encoder libOggFLAC encoder module \endlink.
- *
- * There are only two significant differences here.  First, instead of
- * passing in C function pointers for callbacks, you inherit from the
- * encoder class and provide implementations for the callbacks in your
- * derived class; because of this there is no need for a 'client_data'
- * property.
- *
- * Second, there are two stream encoder classes.  OggFLAC::Encoder::Stream
- * is used for the same cases that OggFLAC__stream_encoder_init_stream() is
- * used, and OggFLAC::Encoder::File is used for the same cases that
- * OggFLAC__stream_encoder_init_FILE() and OggFLAC__stream_encoder_init_file()
- * are used.
- *
- * Note that OggFLAC::Encoder::Stream inherits from FLAC::Encoder::Stream so
- * it is possible to support both FLAC and Ogg FLAC encoding with only a
- * little specialized code (just up to initialization).  For example,
- * \code
- * class MyFLACEncoder: public FLAC::Encoder::Stream
- * {
- *     // implement callbacks
- * };
- * FLAC::Encoder::Stream *flac = new MyFLACEncoder();
- * if(*flac) {
- *     flac->set_...();
- *     // continue set_ calls()
- *     if(flac->init() == ::FLAC__STREAM_ENCODER_INIT_STATUS_OK)
- *         my_process_stream(flac);
- * }
- * 
- * ...
- * 
- * class MyOggFLACEncoder: public OggFLAC::Encoder::Stream
- * {
- *     // implement callbacks
- * };
- * FLAC::Encoder::Stream *oggflac = new MyOggFLACEncoder();
- * if(*oggflac) {
- *     oggflac->set_serial_number();
- *     // continue set_ calls()
- *     if(oggflac->init() == ::FLAC__STREAM_ENCODER_INIT_STATUS_OK)
- *         my_process_stream(oggflac);
- * }
- * \endcode
- */
-
-namespace OggFLAC {
-       namespace Encoder {
-
-               /** \defgroup oggflacpp_stream_encoder OggFLAC++/encoder.h: stream encoder class
-                *  \ingroup oggflacpp_encoder
-                *
-                *  \brief
-                *  This class wraps the ::OggFLAC__StreamEncoder.
-                *
-                * See the \link oggflac_stream_encoder libOggFLAC stream encoder module \endlink
-                * for basic usage.
-                *
-                * \{
-                */
-
-               /** This class wraps the ::OggFLAC__StreamEncoder.  If you are
-                *  encoding to a file, OggFLAC::Encoder::File may be more
-                *  convenient.
-                *
-                * The usage of this class is similar to OggFLAC__StreamEncoder,
-                * except instead of providing callbacks to
-                * OggFLAC__stream_encoder_init_stream(), you will inherit from this
-                * class and override the virtual callback functions with your
-                * own implementations, then call Stream::init().  The rest of
-                * the calls work the same as in the C layer.
-                *
-                * Only the write callback is mandatory.  The others are
-                * optional; this class provides default implementations that do
-                * nothing.  In order for some STREAMINFO and SEEKTABLE data to
-                * be written properly, you must overide read_callback(), seek_callback() and
-                * tell_callback(); see OggFLAC__stream_encoder_init_stream() as to
-                * why.
-                */
-               class OggFLACPP_API Stream: public FLAC::Encoder::Stream {
-               public:
-                       /** This class is a wrapper around OggFLAC__StreamEncoderState.
-                        */
-                       class OggFLACPP_API State {
-                       public:
-                               inline State(::OggFLAC__StreamEncoderState state): state_(state) { }
-                               inline operator ::OggFLAC__StreamEncoderState() const { return state_; }
-                               inline const char *as_cstring() const { return ::OggFLAC__StreamEncoderStateString[state_]; }
-                               inline const char *resolved_as_cstring(const Stream &encoder) const { return ::OggFLAC__stream_encoder_get_resolved_state_string((const OggFLAC__StreamEncoder*)encoder.encoder_); }
-                       protected:
-                               ::OggFLAC__StreamEncoderState state_;
-                       };
-
-                       Stream();
-                       virtual ~Stream();
-
-                       bool set_serial_number(long value);                     ///< See OggFLAC__stream_encoder_set_serial_number()
-                       bool set_verify(bool value);                            ///< See OggFLAC__stream_encoder_set_verify()
-                       bool set_streamable_subset(bool value);                 ///< See OggFLAC__stream_encoder_set_streamable_subset()
-                       bool set_do_mid_side_stereo(bool value);                ///< See OggFLAC__stream_encoder_set_do_mid_side_stereo()
-                       bool set_loose_mid_side_stereo(bool value);             ///< See OggFLAC__stream_encoder_set_loose_mid_side_stereo()
-                       bool set_channels(unsigned value);                      ///< See OggFLAC__stream_encoder_set_channels()
-                       bool set_bits_per_sample(unsigned value);               ///< See OggFLAC__stream_encoder_set_bits_per_sample()
-                       bool set_sample_rate(unsigned value);                   ///< See OggFLAC__stream_encoder_set_sample_rate()
-                       bool set_blocksize(unsigned value);                     ///< See OggFLAC__stream_encoder_set_blocksize()
-                       bool set_apodization(const char *specification);        ///< See OggFLAC__stream_encoder_set_apodization()
-                       bool set_max_lpc_order(unsigned value);                 ///< See OggFLAC__stream_encoder_set_max_lpc_order()
-                       bool set_qlp_coeff_precision(unsigned value);           ///< See OggFLAC__stream_encoder_set_qlp_coeff_precision()
-                       bool set_do_qlp_coeff_prec_search(bool value);          ///< See OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search()
-                       bool set_do_escape_coding(bool value);                  ///< See OggFLAC__stream_encoder_set_do_escape_coding()
-                       bool set_do_exhaustive_model_search(bool value);        ///< See OggFLAC__stream_encoder_set_do_exhaustive_model_search()
-                       bool set_min_residual_partition_order(unsigned value);  ///< See OggFLAC__stream_encoder_set_min_residual_partition_order()
-                       bool set_max_residual_partition_order(unsigned value);  ///< See OggFLAC__stream_encoder_set_max_residual_partition_order()
-                       bool set_rice_parameter_search_dist(unsigned value);    ///< See OggFLAC__stream_encoder_set_rice_parameter_search_dist()
-                       bool set_total_samples_estimate(FLAC__uint64 value);    ///< See OggFLAC__stream_encoder_set_total_samples_estimate()
-                       bool set_metadata(::FLAC__StreamMetadata **metadata, unsigned num_blocks);     ///< See OggFLAC__stream_encoder_set_metadata()
-                       bool set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks); ///< See OggFLAC__stream_encoder_set_metadata()
-
-                       State    get_state() const;                                         ///< See OggFLAC__stream_encoder_get_state()
-                       FLAC::Encoder::Stream::State get_FLAC_stream_encoder_state() const; ///< See OggFLAC__stream_encoder_get_FLAC_stream_encoder_state()
-                       FLAC::Decoder::Stream::State get_verify_decoder_state() const;      ///< See OggFLAC__stream_encoder_get_verify_decoder_state()
-                       void get_verify_decoder_error_stats(FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got); ///< See OggFLAC__stream_encoder_get_verify_decoder_error_stats()
-                       bool     get_verify() const;                       ///< See OggFLAC__stream_encoder_get_verify()
-                       bool     get_streamable_subset() const;            ///< See OggFLAC__stream_encoder_get_streamable_subset()
-                       bool     get_do_mid_side_stereo() const;           ///< See OggFLAC__stream_encoder_get_do_mid_side_stereo()
-                       bool     get_loose_mid_side_stereo() const;        ///< See OggFLAC__stream_encoder_get_loose_mid_side_stereo()
-                       unsigned get_channels() const;                     ///< See OggFLAC__stream_encoder_get_channels()
-                       unsigned get_bits_per_sample() const;              ///< See OggFLAC__stream_encoder_get_bits_per_sample()
-                       unsigned get_sample_rate() const;                  ///< See OggFLAC__stream_encoder_get_sample_rate()
-                       unsigned get_blocksize() const;                    ///< See OggFLAC__stream_encoder_get_blocksize()
-                       unsigned get_max_lpc_order() const;                ///< See OggFLAC__stream_encoder_get_max_lpc_order()
-                       unsigned get_qlp_coeff_precision() const;          ///< See OggFLAC__stream_encoder_get_qlp_coeff_precision()
-                       bool     get_do_qlp_coeff_prec_search() const;     ///< See OggFLAC__stream_encoder_get_do_qlp_coeff_prec_search()
-                       bool     get_do_escape_coding() const;             ///< See OggFLAC__stream_encoder_get_do_escape_coding()
-                       bool     get_do_exhaustive_model_search() const;   ///< See OggFLAC__stream_encoder_get_do_exhaustive_model_search()
-                       unsigned get_min_residual_partition_order() const; ///< See OggFLAC__stream_encoder_get_min_residual_partition_order()
-                       unsigned get_max_residual_partition_order() const; ///< See OggFLAC__stream_encoder_get_max_residual_partition_order()
-                       unsigned get_rice_parameter_search_dist() const;   ///< See OggFLAC__stream_encoder_get_rice_parameter_search_dist()
-                       FLAC__uint64 get_total_samples_estimate() const;   ///< See OggFLAC__stream_encoder_get_total_samples_estimate()
-
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See OggFLAC__stream_encoder_init_stream().
-                        */
-                       ::FLAC__StreamEncoderInitStatus init();
-
-                       void finish(); ///< See OggFLAC__stream_encoder_finish()
-
-                       bool process(const FLAC__int32 * const buffer[], unsigned samples);     ///< See OggFLAC__stream_encoder_process()
-                       bool process_interleaved(const FLAC__int32 buffer[], unsigned samples); ///< See OggFLAC__stream_encoder_process_interleaved()
-               protected:
-                       /// See OggFLAC__StreamEncoderReadCallback
-                       virtual ::OggFLAC__StreamEncoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
-
-#if (defined _MSC_VER) || (defined __GNUG__ && (__GNUG__ < 2 || (__GNUG__ == 2 && __GNUC_MINOR__ < 96))) || (defined __SUNPRO_CC)
-                       // lame hack: some MSVC/GCC versions can't see a protected encoder_ from nested State::resolved_as_cstring()
-                       friend State;
-#endif
-                       static ::OggFLAC__StreamEncoderReadStatus read_callback_(const ::OggFLAC__StreamEncoder *encoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
-               private:
-                       // Private and undefined so you can't use them:
-                       Stream(const Stream &);
-                       void operator=(const Stream &);
-               };
-
-               /* \} */
-
-               /** \defgroup oggflacpp_file_encoder OggFLAC++/encoder.h: file encoder class
-                *  \ingroup oggflacpp_encoder
-                *
-                *  \brief
-                *  This class wraps the ::OggFLAC__FileEncoder.
-                *
-                * See the \link oggflac_stream_encoder libOggFLAC stream encoder module \endlink
-                * for basic usage.
-                *
-                * \{
-                */
-
-               /** This class wraps the ::OggFLAC__StreamEncoder.  If you are
-                *  not encoding to a file, you may need to use
-                *  OggFLAC::Encoder::Stream.
-                *
-                * The usage of this class is similar to OggFLAC__StreamEncoder,
-                * except instead of providing callbacks to
-                * OggFLAC__stream_encoder_init_FILE() or
-                * OggFLAC__stream_encoder_init_file(), you will inherit from this
-                * class and override the virtual callback functions with your
-                * own implementations, then call File::init().  The rest of
-                * the calls work the same as in the C layer.
-                *
-                * There are no mandatory callbacks; all the callbacks from
-                * OggFLAC::Encoder::Stream are implemented here fully and support
-                * full post-encode STREAMINFO and SEEKTABLE updating.  There is
-                * only an optional progress callback which you may override to
-                * get periodic reports on the progress of the encode.
-                */
-               class OggFLACPP_API File: public Stream {
-               public:
-                       File();
-                       virtual ~File();
-
-                       //@{
-                       /** Initialize the instance; as with the C interface,
-                        *  init() should be called after construction and 'set'
-                        *  calls but before any of the 'process' calls.
-                        *
-                        *  See OggFLAC__stream_encoder_init_FILE() and
-                        *  OggFLAC__stream_encoder_init_file().
-                        */
-                       ::FLAC__StreamEncoderInitStatus init(FILE *file);
-                       ::FLAC__StreamEncoderInitStatus init(const char *filename);
-                       ::FLAC__StreamEncoderInitStatus init(const std::string &filename);
-                       //@}
-               protected:
-                       /// See FLAC__StreamEncoderProgressCallback
-                       virtual void progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate);
-
-                       /// This is a dummy implementation to satisfy the pure virtual in Stream that is actually supplied internally by the C layer
-                       virtual ::FLAC__StreamEncoderWriteStatus write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame);
-               private:
-                       static void progress_callback_(const ::FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data);
-
-                       // Private and undefined so you can't use them:
-                       File(const Stream &);
-                       void operator=(const Stream &);
-               };
-
-               /* \} */
-
-       }
-}
-
-#endif
diff --git a/include/OggFLAC++/export.h b/include/OggFLAC++/export.h
deleted file mode 100644 (file)
index 0e293f9..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* libOggFLAC++ - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLACPP__EXPORT_H
-#define OggFLACPP__EXPORT_H
-
-#if defined(FLAC__NO_DLL) || !defined(_MSC_VER)
-#define OggFLACPP_API
-
-#else
-
-#ifdef OggFLACPP_API_EXPORTS
-#define        OggFLACPP_API   _declspec(dllexport)
-#else
-#define OggFLACPP_API  _declspec(dllimport)
-
-#endif
-#endif
-
-/* These #defines will mirror the libtool-based library version number, see
- * http://www.gnu.org/software/libtool/manual.html#Libtool-versioning
- */
-#define OggFLACPP_API_VERSION_CURRENT 3
-#define OggFLACPP_API_VERSION_REVISION 0
-#define OggFLACPP_API_VERSION_AGE 0
-
-#endif
diff --git a/include/OggFLAC/Makefile.am b/include/OggFLAC/Makefile.am
deleted file mode 100644 (file)
index 5c8e4df..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#  libOggFLAC - Free Lossless Audio Codec + Ogg library
-#  Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
-#
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions
-#  are met:
-#
-#  - Redistributions of source code must retain the above copyright
-#  notice, this list of conditions and the following disclaimer.
-#
-#  - Redistributions in binary form must reproduce the above copyright
-#  notice, this list of conditions and the following disclaimer in the
-#  documentation and/or other materials provided with the distribution.
-#
-#  - Neither the name of the Xiph.org Foundation nor the names of its
-#  contributors may be used to endorse or promote products derived from
-#  this software without specific prior written permission.
-#
-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-#  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-#  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-#  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-#  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-#  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-#  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-oggflaccincludedir = $(includedir)/OggFLAC
-
-# NOTE: file_decoder.h and seekable_stream_decoder.h are NOT ready
-# for distribution yet.
-
-oggflaccinclude_HEADERS = \
-       all.h \
-       export.h \
-       stream_decoder.h \
-       stream_encoder.h
diff --git a/include/OggFLAC/all.h b/include/OggFLAC/all.h
deleted file mode 100644 (file)
index d4080ed..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLAC__ALL_H
-#define OggFLAC__ALL_H
-
-/* NOTE: file_decoder.h and seekable_stream_decoder.h are NOT ready
- * for distribution yet.
- */
-
-#include "export.h"
-
-#include "stream_decoder.h"
-#include "stream_encoder.h"
-
-/** \defgroup oggflac OggFLAC C API
- *
- * The OggFLAC C API is the interface to libOggFLAC, a set of encoders
- * and decoders that wrap around the libFLAC API to provide encoding
- * to and decoding from FLAC streams in an Ogg transport.
- */
-
-#endif
diff --git a/include/OggFLAC/export.h b/include/OggFLAC/export.h
deleted file mode 100644 (file)
index 075f77f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLAC__EXPORT_H
-#define OggFLAC__EXPORT_H
-
-#if defined(FLAC__NO_DLL) || !defined(_MSC_VER)
-#define OggFLAC_API
-
-#else
-
-#ifdef OggFLAC_API_EXPORTS
-#define        OggFLAC_API     _declspec(dllexport)
-#else
-#define OggFLAC_API    _declspec(dllimport)
-
-#endif
-#endif
-
-/* These #defines will mirror the libtool-based library version number, see
- * http://www.gnu.org/software/libtool/manual.html#Libtool-versioning
- */
-#define OggFLAC_API_VERSION_CURRENT 4
-#define OggFLAC_API_VERSION_REVISION 0
-#define OggFLAC_API_VERSION_AGE 0
-
-#endif
diff --git a/include/OggFLAC/stream_decoder.h b/include/OggFLAC/stream_decoder.h
deleted file mode 100644 (file)
index 7d01680..0000000
+++ /dev/null
@@ -1,689 +0,0 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLAC__STREAM_DECODER_H
-#define OggFLAC__STREAM_DECODER_H
-
-#include <stdio.h> /* for FILE */
-#include "export.h"
-#include "FLAC/stream_decoder.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** \file include/OggFLAC/stream_decoder.h
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  decoder.
- *
- *  See the detailed documentation in the
- *  \link oggflac_stream_decoder stream decoder \endlink module.
- */
-
-/** \defgroup oggflac_decoder OggFLAC/ *_decoder.h: decoder interfaces
- *  \ingroup oggflac
- *
- *  \brief
- *  This module describes the decoder layers provided by libOggFLAC.
- *
- * libOggFLAC currently provides the same layers of access as
- * libFLAC; the interfaces are nearly identical, with th addition of a
- * method for specifying the Ogg serial number.  See the
- * \link flac_decoder FLAC decoder module \endlink for full documentation.
- */
-
-/** \defgroup oggflac_stream_decoder OggFLAC/stream_decoder.h: stream decoder interface
- *  \ingroup oggflac_decoder
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  decoder.
- *
- * The interface here is nearly identical to FLAC's stream decoder,
- * including the callbacks, with the addition of
- * OggFLAC__stream_decoder_set_serial_number().  See the
- * \link flac_stream_decoder FLAC stream decoder module \endlink
- * for full documentation.
- *
- * \{
- */
-
-
-/** State values for an OggFLAC__StreamDecoder
- *
- *  The decoder's state can be obtained by calling OggFLAC__stream_decoder_get_state().
- */
-typedef enum {
-
-       OggFLAC__STREAM_DECODER_OK = 0,
-       /**< The decoder is in the normal OK state. */
-
-       OggFLAC__STREAM_DECODER_END_OF_STREAM,
-       /**< The decoder has reached the end of the stream. */
-
-       OggFLAC__STREAM_DECODER_OGG_ERROR,
-       /**< An error occurred in the underlying Ogg layer.  */
-
-       OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR,
-       /**< An error occurred in the underlying FLAC stream decoder;
-        * check OggFLAC__stream_decoder_get_FLAC_stream_decoder_state().
-        */
-
-       OggFLAC__STREAM_DECODER_SEEK_ERROR,
-       /**< An error occurred while seeking or the seek or tell
-        * callback returned an error.  The decoder must be flushed with
-        * OggFLAC__stream_decoder_flush() or reset with
-        * OggFLAC__stream_decoder_reset() before decoding can continue.
-        */
-
-       OggFLAC__STREAM_DECODER_READ_ERROR,
-       /**< The read callback returned an error. */
-
-       OggFLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
-       /**< An error occurred allocating memory.  The decoder is in an invalid
-        * state and can no longer be used.
-        */
-
-       OggFLAC__STREAM_DECODER_UNINITIALIZED
-       /**< The decoder is in the uninitialized state; one of the
-        * OggFLAC__stream_decoder_init_*() functions must be called before samples
-        * can be processed.
-        */
-
-} OggFLAC__StreamDecoderState;
-
-/** Maps an OggFLAC__StreamDecoderState to a C string.
- *
- *  Using an OggFLAC__StreamDecoderState as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern OggFLAC_API const char * const OggFLAC__StreamDecoderStateString[];
-
-
-/***********************************************************************
- *
- * class OggFLAC__StreamDecoder
- *
- ***********************************************************************/
-
-struct OggFLAC__StreamDecoderProtected;
-struct OggFLAC__StreamDecoderPrivate;
-/** The opaque structure definition for the stream decoder type.
- *  See the \link oggflac_stream_decoder stream decoder module \endlink
- *  for a detailed description.
- */
-typedef struct {
-       FLAC__StreamDecoder super_;
-       struct OggFLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
-       struct OggFLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
-} OggFLAC__StreamDecoder;
-
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-/** Create a new stream decoder instance.  The instance is created with
- *  default settings; see the individual OggFLAC__stream_decoder_set_*()
- *  functions for each setting's default.
- *
- * \retval OggFLAC__StreamDecoder*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-OggFLAC_API OggFLAC__StreamDecoder *OggFLAC__stream_decoder_new();
-
-/** Free a decoder instance.  Deletes the object pointed to by \a decoder.
- *
- * \param decoder  A pointer to an existing decoder.
- * \assert
- *    \code decoder != NULL \endcode
- */
-OggFLAC_API void OggFLAC__stream_decoder_delete(OggFLAC__StreamDecoder *decoder);
-
-
-/***********************************************************************
- *
- * Public class method prototypes
- *
- ***********************************************************************/
-
-/** Set the serial number for the Ogg stream.
- * The default behavior is to use the serial number of the first Ogg
- * page.  Setting a serial number here will explicitly specify which
- * stream is to be decoded.
- *
- * \default \c use serial number of first page
- * \param  decoder        A decoder instance to set.
- * \param  serial_number  See above.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_serial_number(OggFLAC__StreamDecoder *decoder, long serial_number);
-
-/** Set the "MD5 signature checking" flag.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_md5_checking()
- *
- * \default \c false
- * \param  decoder  A decoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_md5_checking(OggFLAC__StreamDecoder *decoder, FLAC__bool value);
-
-/** Direct the decoder to pass on all metadata blocks of type \a type.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  type     See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \a type is valid
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
-
-/** Direct the decoder to pass on all APPLICATION metadata blocks of the
- *  given \a id.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_application()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  id       See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code id != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
-
-/** Direct the decoder to pass on all metadata blocks of any type.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_all()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_all(OggFLAC__StreamDecoder *decoder);
-
-/** Direct the decoder to filter out all metadata blocks of type \a type.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  type     See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \a type is valid
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
-
-/** Direct the decoder to filter out all APPLICATION metadata blocks of
- *  the given \a id.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_application()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  id       See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code id != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
-
-/** Direct the decoder to filter out all metadata blocks of any type.
- * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_all()
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_all(OggFLAC__StreamDecoder *decoder);
-
-/** Get the current decoder state.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval OggFLAC__StreamDecoderState
- *    The current decoder state.
- */
-OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_get_state(const OggFLAC__StreamDecoder *decoder);
-
-/** Get the state of the underlying FLAC stream decoder.
- *  Useful when the stream decoder state is
- *  \c OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderState
- *    The FLAC stream decoder state.
- */
-OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__StreamDecoder *decoder);
-
-/** Get the current decoder state as a C string.
- *  This version automatically resolves
- *  \c OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR
- *  by getting the FLAC stream decoder's state.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval const char *
- *    The decoder state as a C string.  Do not modify the contents.
- */
-OggFLAC_API const char *OggFLAC__stream_decoder_get_resolved_state_string(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_md5_checking()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    See above.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_get_md5_checking(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_total_samples()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-OggFLAC_API FLAC__uint64 OggFLAC__stream_decoder_get_total_samples(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channels()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-OggFLAC_API unsigned OggFLAC__stream_decoder_get_channels(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channel_assignment()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval OggFLAC__ChannelAssignment
- *    See above.
- */
-OggFLAC_API FLAC__ChannelAssignment OggFLAC__stream_decoder_get_channel_assignment(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_bits_per_sample()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-OggFLAC_API unsigned OggFLAC__stream_decoder_get_bits_per_sample(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_sample_rate()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-OggFLAC_API unsigned OggFLAC__stream_decoder_get_sample_rate(const OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_blocksize()
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-OggFLAC_API unsigned OggFLAC__stream_decoder_get_blocksize(const OggFLAC__StreamDecoder *decoder);
-
-/** Initialize the decoder instance.
- *
- *  This flavor of initialization sets up the decoder to decode from a stream.
- *  I/O is performed via callbacks to the client.  For decoding from a plain file
- *  via filename or open FILE*, OggFLAC__stream_decoder_init_file() and
- *  OggFLAC__stream_decoder_init_FILE() provide a simpler interface.
- *
- *  This function should be called after OggFLAC__stream_decoder_new() and
- *  OggFLAC__stream_decoder_set_*() but before any of the
- *  OggFLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be OggFLAC__STREAM_DECODER_OK
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is not \c NULL then a
- *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a length_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a eof_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c false
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamDecoderInitStatus OggFLAC__stream_decoder_init_stream(
-       OggFLAC__StreamDecoder *decoder,
-       FLAC__StreamDecoderReadCallback read_callback,
-       FLAC__StreamDecoderSeekCallback seek_callback,
-       FLAC__StreamDecoderTellCallback tell_callback,
-       FLAC__StreamDecoderLengthCallback length_callback,
-       FLAC__StreamDecoderEofCallback eof_callback,
-       FLAC__StreamDecoderWriteCallback write_callback,
-       FLAC__StreamDecoderMetadataCallback metadata_callback,
-       FLAC__StreamDecoderErrorCallback error_callback,
-       void *client_data
-);
-
-/** Initialize the decoder instance.
- *
- *  This flavor of initialization sets up the decoder to decode from a plain
- *  file.  For non-stdio streams, you must use
- *  OggFLAC__stream_decoder_init_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after OggFLAC__stream_decoder_new() and
- *  OggFLAC__stream_decoder_set_*() but before any of the
- *  OggFLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be OggFLAC__STREAM_DECODER_OK
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  file               An open Ogg FLAC file.  The file should have been
- *                            opened with mode \c "rb" and rewound.  The file
- *                            becomes owned by the decoder and should not be
- *                            manipulated by the client while decoding.
- *                            Unless \a file is \c stdin, it will be closed
- *                            when OggFLAC__stream_decoder_finish() is called.
- *                            Note however that seeking will not work when
- *                            decoding from \c stdout since it is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamDecoderInitStatus OggFLAC__stream_decoder_init_FILE(
-       OggFLAC__StreamDecoder *decoder,
-       FILE *file,
-       FLAC__StreamDecoderWriteCallback write_callback,
-       FLAC__StreamDecoderMetadataCallback metadata_callback,
-       FLAC__StreamDecoderErrorCallback error_callback,
-       void *client_data
-);
-
-/** Initialize the decoder instance.
- *
- *  This flavor of initialization sets up the decoder to decode from a plain
- *  file.  If POSIX fopen() semantics are not sufficient, (for example, with
- *  Unicode filenames on Windows), you must use
- *  OggFLAC__stream_decoder_init_FILE(), or OggFLAC__stream_decoder_init_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after OggFLAC__stream_decoder_new() and
- *  OggFLAC__stream_decoder_set_*() but before any of the
- *  OggFLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be OggFLAC__STREAM_DECODER_OK
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  filename           The name of the file to decode from.  The file will
- *                            be opened with fopen().  Use \c NULL to decode from
- *                            \c stdin.  Note that \c stdin is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamDecoderInitStatus OggFLAC__stream_decoder_init_file(
-       OggFLAC__StreamDecoder *decoder,
-       const char *filename,
-       FLAC__StreamDecoderWriteCallback write_callback,
-       FLAC__StreamDecoderMetadataCallback metadata_callback,
-       FLAC__StreamDecoderErrorCallback error_callback,
-       void *client_data
-);
-
-/** Finish the decoding process.
- *  Flushes the decoding buffer, releases resources, resets the decoder
- *  settings to their defaults, and returns the decoder state to
- *  OggFLAC__STREAM_DECODER_UNINITIALIZED.
- *
- *  In the event of a prematurely-terminated decode, it is not strictly
- *  necessary to call this immediately before OggFLAC__stream_decoder_delete()
- *  but it is good practice to match every OggFLAC__stream_decoder_init()
- *  with an OggFLAC__stream_decoder_finish().
- *
- * \param  decoder  An uninitialized decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_finish(OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_flush()
- *
- * \param  decoder  A decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false if a memory allocation
- *    error occurs.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_flush(OggFLAC__StreamDecoder *decoder);
-
-/** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_reset()
- *
- * \param  decoder  A decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false if a memory allocation
- *    or seek error occurs.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_reset(OggFLAC__StreamDecoder *decoder);
-
-/** Decode one metadata block or audio frame.
- *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_single()
- *
- * \param  decoder  An initialized decoder instance in the state
- *                  \c OggFLAC__STREAM_DECODER_OK.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    OggFLAC__stream_decoder_get_state().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_single(OggFLAC__StreamDecoder *decoder);
-
-/** Decode until the end of the metadata.
- *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_metadata()
- *
- * \param  decoder  An initialized decoder instance in the state
- *                  \c OggFLAC__STREAM_DECODER_OK.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    OggFLAC__stream_decoder_get_state().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_metadata(OggFLAC__StreamDecoder *decoder);
-
-/** Decode until the end of the stream.
- *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_stream()
- *
- * \param  decoder  An initialized decoder instance in the state
- *                  \c OggFLAC__STREAM_DECODER_OK.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    OggFLAC__stream_decoder_get_state().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_stream(OggFLAC__StreamDecoder *decoder);
-
-/** Skip one audio frame.
- *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_skip_single_frame()
- *
- * \param  decoder  An initialized decoder instance not in a metadata
- *                  state.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), or if the underlying FLAC
- *    stream decoder is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or
- *    FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more
- *    information about the decoder, check the decoder state with
- *    OggFLAC__stream_decoder_get_FLAC_stream_decoder_state().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_skip_single_frame(OggFLAC__StreamDecoder *decoder);
-
-/** Flush the input and seek to an absolute sample.
- *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_seek_absolute().
- *
- * \param  decoder  A decoder instance.
- * \param  sample   The target sample number to seek to.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_decoder_seek_absolute(OggFLAC__StreamDecoder *decoder, FLAC__uint64 sample);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/OggFLAC/stream_encoder.h b/include/OggFLAC/stream_encoder.h
deleted file mode 100644 (file)
index e971b38..0000000
+++ /dev/null
@@ -1,959 +0,0 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
- * Copyright (C) 2002,2003,2004,2005,2006 Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OggFLAC__STREAM_ENCODER_H
-#define OggFLAC__STREAM_ENCODER_H
-
-#include "export.h"
-
-#include "FLAC/stream_encoder.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** \file include/OggFLAC/stream_encoder.h
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  encoder.
- *
- *  See the detailed documentation in the
- *  \link oggflac_stream_encoder stream encoder \endlink module.
- */
-
-/** \defgroup oggflac_encoder OggFLAC/ *_encoder.h: encoder interfaces
- *  \ingroup oggflac
- *
- *  \brief
- *  This module describes the encoder layers provided by libOggFLAC.
- *
- * libOggFLAC currently provides the same layers of access as libFLAC;
- * the interfaces are nearly identical, with the addition of a method for
- * specifying the Ogg serial number.  See the \link flac_encoder FLAC
- * encoder module \endlink for full documentation.
- */
-
-/** \defgroup oggflac_stream_encoder OggFLAC/stream_encoder.h: stream encoder interface
- *  \ingroup oggflac_encoder
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  encoder.  The Ogg stream encoder is derived
- *  from the FLAC stream encoder.
- *
- * The interface here is nearly identical to FLAC's stream encoder,
- * including the callbacks, with the addition of
- * OggFLAC__stream_encoder_set_serial_number().  See the
- * \link flac_stream_encoder FLAC stream encoder module \endlink
- * for full documentation.
- *
- * \{
- */
-
-
-/** State values for an OggFLAC__StreamEncoder
- *
- *  The encoder's state can be obtained by calling OggFLAC__stream_encoder_get_state().
- */
-typedef enum {
-
-       OggFLAC__STREAM_ENCODER_OK = 0,
-       /**< The encoder is in the normal OK state and samples can be processed. */
-
-       OggFLAC__STREAM_ENCODER_UNINITIALIZED,
-       /**< The encoder is in the uninitialized state; one of the
-        * OggFLAC__stream_encoder_init_*() functions must be called before samples
-        * can be processed.
-        */
-
-       OggFLAC__STREAM_ENCODER_OGG_ERROR,
-       /**< An error occurred in the underlying Ogg layer.  */
-
-       OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR,
-       /**< An error occurred in the underlying FLAC stream encoder;
-        * check OggFLAC__stream_encoder_get_FLAC_stream_encoder_state().
-        */
-
-       OggFLAC__STREAM_ENCODER_CLIENT_ERROR,
-       /**< One of the callbacks returned a fatal error. */
-
-       OggFLAC__STREAM_ENCODER_IO_ERROR,
-       /**< An I/O error occurred while opening/reading/writing a file.
-        * Check \c errno.
-        */
-
-       OggFLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
-       /**< Memory allocation failed. */
-
-} OggFLAC__StreamEncoderState;
-
-/** Maps an OggFLAC__StreamEncoderState to a C string.
- *
- *  Using an OggFLAC__StreamEncoderState as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern OggFLAC_API const char * const OggFLAC__StreamEncoderStateString[];
-
-
-/** Return values for the OggFLAC__StreamEncoder read callback.
- */
-typedef enum {
-
-       OggFLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
-       /**< The read was OK and decoding can continue. */
-
-       OggFLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
-       /**< The read was attempted at the end of the stream. */
-
-       OggFLAC__STREAM_ENCODER_READ_STATUS_ABORT,
-       /**< An unrecoverable error occurred. */
-
-       OggFLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
-       /**< Client does not support reading back from the output. */
-
-} OggFLAC__StreamEncoderReadStatus;
-
-/** Maps a OggFLAC__StreamEncoderReadStatus to a C string.
- *
- *  Using a OggFLAC__StreamEncoderReadStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern OggFLAC_API const char * const OggFLAC__StreamEncoderReadStatusString[];
-
-
-/***********************************************************************
- *
- * class OggFLAC__StreamEncoder
- *
- ***********************************************************************/
-
-struct OggFLAC__StreamEncoderProtected;
-struct OggFLAC__StreamEncoderPrivate;
-/** The opaque structure definition for the stream encoder type.
- *  See the \link oggflac_stream_encoder stream encoder module \endlink
- *  for a detailed description.
- */
-typedef struct {
-       FLAC__StreamEncoder super_;
-       struct OggFLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
-       struct OggFLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
-} OggFLAC__StreamEncoder;
-
-/** Signature for the read callback.
- *
- *  A function pointer matching this signature must be passed to
- *  OggFLAC__stream_encoder_init_stream() if seeking is supported.
- *  The supplied function will be called when the encoder needs to read back
- *  encoded data.  This happens during the metadata callback, when the encoder
- *  has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered
- *  while encoding.  The address of the buffer to be filled is supplied, along
- *  with the number of bytes the buffer can hold.  The callback may choose to
- *  supply less data and modify the byte count but must be careful not to
- *  overflow the buffer.  The callback then returns a status code chosen from
- *  OggFLAC__StreamEncoderReadStatus.
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder  The encoder instance calling the callback.
- * \param  buffer   A pointer to a location for the callee to store
- *                  data to be encoded.
- * \param  bytes    A pointer to the size of the buffer.  On entry
- *                  to the callback, it contains the maximum number
- *                  of bytes that may be stored in \a buffer.  The
- *                  callee must set it to the actual number of bytes
- *                  stored (0 in case of error or end-of-stream) before
- *                  returning.
- * \param  client_data  The callee's client data set through
- *                      OggFLAC__stream_encoder_set_client_data().
- * \retval OggFLAC__StreamEncoderReadStatus
- *    The callee's return status.
- */
-typedef OggFLAC__StreamEncoderReadStatus (*OggFLAC__StreamEncoderReadCallback)(const OggFLAC__StreamEncoder *encoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
-
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-/** Create a new stream encoder instance.  The instance is created with
- *  default settings; see the individual OggFLAC__stream_encoder_set_*()
- *  functions for each setting's default.
- *
- * \retval OggFLAC__StreamEncoder*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-OggFLAC_API OggFLAC__StreamEncoder *OggFLAC__stream_encoder_new();
-
-/** Free an encoder instance.  Deletes the object pointed to by \a encoder.
- *
- * \param encoder  A pointer to an existing encoder.
- * \assert
- *    \code encoder != NULL \endcode
- */
-OggFLAC_API void OggFLAC__stream_encoder_delete(OggFLAC__StreamEncoder *encoder);
-
-
-/***********************************************************************
- *
- * Public class method prototypes
- *
- ***********************************************************************/
-
-/** Set the serial number for the FLAC stream.
- *
- * \note
- * It is recommended to set a serial number explicitly as the default of '0'
- * may collide with other streams.
- *
- * \default \c 0
- * \param  encoder        An encoder instance to set.
- * \param  serial_number  See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_serial_number(OggFLAC__StreamEncoder *encoder, long serial_number);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_verify()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_verify(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_streamable_subset()
- *
- * \default \c true
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_streamable_subset(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_mid_side_stereo()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_mid_side_stereo(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_loose_mid_side_stereo()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_loose_mid_side_stereo(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_channels()
- *
- * \default \c 2
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_channels(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_bits_per_sample()
- *
- * \default \c 16
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_bits_per_sample(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_sample_rate()
- *
- * \default \c 44100
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_sample_rate(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_blocksize()
- *
- * \default \c 1152
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_blocksize(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_apodization()
- *
- * \default \c 0
- * \param  encoder        An encoder instance to set.
- * \param  specification  See above.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code specification != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_apodization(OggFLAC__StreamEncoder *encoder, const char *specification);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_max_lpc_order()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_max_lpc_order(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_qlp_coeff_precision()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_qlp_coeff_precision(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_qlp_coeff_prec_search()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_escape_coding()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_escape_coding(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_exhaustive_model_search()
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_exhaustive_model_search(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_min_residual_partition_order()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_min_residual_partition_order(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_max_residual_partition_order()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_max_residual_partition_order(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_rice_parameter_search_dist()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_rice_parameter_search_dist(OggFLAC__StreamEncoder *encoder, unsigned value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_total_samples_estimate()
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_total_samples_estimate(OggFLAC__StreamEncoder *encoder, FLAC__uint64 value);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_metadata()
- *
- * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be
- * the second metadata block of the stream.  The encoder already supplies
- * the STREAMINFO block automatically.  If \a metadata does not contain a
- * VORBIS_COMMENT block, the encoder will supply that too.  Otherwise, if
- * \a metadata does contain a VORBIS_COMMENT block and it is not the
- * first, this function will reorder \a metadata by moving the
- * VORBIS_COMMENT block to the front; the relative ordering of the other
- * blocks will remain as they were.
- *
- * \note The Ogg FLAC mapping limits the number of metadata blocks per
- * stream to \c 65535.  If \a num_blocks exceeds this the function will
- * return \c false.
- *
- * \default \c NULL, 0
- * \param  encoder     An encoder instance to set.
- * \param  metadata    See above.
- * \param  num_blocks  See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, or if
- *    \a num_blocks > 65535, else \c true.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_metadata(OggFLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
-
-/** Get the current encoder state.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval OggFLAC__StreamEncoderState
- *    The current encoder state.
- */
-OggFLAC_API OggFLAC__StreamEncoderState OggFLAC__stream_encoder_get_state(const OggFLAC__StreamEncoder *encoder);
-
-/** Get the state of the underlying FLAC stream encoder.
- *  Useful when the stream encoder state is
- *  \c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderState
- *    The FLAC stream encoder state.
- */
-OggFLAC_API FLAC__StreamEncoderState OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(const OggFLAC__StreamEncoder *encoder);
-
-/** Get the state of the underlying FLAC stream encoder's verify decoder.
- *  Useful when the stream encoder state is
- *  \c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR and the
- *  FLAC encoder state is \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamDecoderState
- *    The FLAC verify decoder state.
- */
-OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_encoder_get_verify_decoder_state(const OggFLAC__StreamEncoder *encoder);
-
-/** Get the current encoder state as a C string.
- *  This version automatically resolves
- *  \c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR by getting the
- *  FLAC stream encoder's state.
- *
- * \param  encoder  A encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval const char *
- *    The encoder state as a C string.  Do not modify the contents.
- */
-OggFLAC_API const char *OggFLAC__stream_encoder_get_resolved_state_string(const OggFLAC__StreamEncoder *encoder);
-
-/** Get relevant values about the nature of a verify decoder error.
- *  Inherited from FLAC__stream_encoder_get_verify_decoder_error_stats().
- *  Useful when the stream encoder state is
- *  \c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR and the
- *  FLAC stream encoder state is
- *  \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
- *
- * \param  encoder  An encoder instance to query.
- * \param  absolute_sample  The absolute sample number of the mismatch.
- * \param  frame_number  The number of the frame in which the mismatch occurred.
- * \param  channel       The channel in which the mismatch occurred.
- * \param  sample        The number of the sample (relative to the frame) in
- *                       which the mismatch occurred.
- * \param  expected      The expected value for the sample in question.
- * \param  got           The actual value returned by the decoder.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code absolute_sample != NULL \endcode
- *    \code frame_number != NULL \endcode
- *    \code channel != NULL \endcode
- *    \code sample != NULL \endcode
- *    \code expected != NULL \endcode
- */
-OggFLAC_API void OggFLAC__stream_encoder_get_verify_decoder_error_stats(const OggFLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_verify()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_verify().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_verify(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_streamable_subset()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_streamable_subset().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_streamable_subset(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_mid_side_stereo()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_get_do_mid_side_stereo().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_mid_side_stereo(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_loose_mid_side_stereo()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_loose_mid_side_stereo().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_loose_mid_side_stereo(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_channels()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_channels().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_channels(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_bits_per_sample()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_bits_per_sample().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_bits_per_sample(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_sample_rate()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_sample_rate().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_sample_rate(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_blocksize()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_blocksize().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_blocksize(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_max_lpc_order()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_max_lpc_order().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_max_lpc_order(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_qlp_coeff_precision()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_qlp_coeff_precision().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_qlp_coeff_precision(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_qlp_coeff_prec_search()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_qlp_coeff_prec_search(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_escape_coding()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_do_escape_coding().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_escape_coding(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_exhaustive_model_search()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See OggFLAC__stream_encoder_set_do_exhaustive_model_search().
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_exhaustive_model_search(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_min_residual_partition_order()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_min_residual_partition_order().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_min_residual_partition_order(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_man_residual_partition_order()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_max_residual_partition_order().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_max_residual_partition_order(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_rice_parameter_search_dist()
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See OggFLAC__stream_encoder_set_rice_parameter_search_dist().
- */
-OggFLAC_API unsigned OggFLAC__stream_encoder_get_rice_parameter_search_dist(const OggFLAC__StreamEncoder *encoder);
-
-/** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_total_samples_estimate()
- *
- * \param  encoder  An encoder instance to set.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__uint64
- *    See OggFLAC__stream_encoder_get_total_samples_estimate().
- */
-OggFLAC_API FLAC__uint64 OggFLAC__stream_encoder_get_total_samples_estimate(const OggFLAC__StreamEncoder *encoder);
-
-/** Initialize the encoder instance.
- *
- *  This flavor of initialization sets up the encoder to encode to a stream.
- *  I/O is performed via callbacks to the client.  For encoding to a plain file
- *  via filename or open \c FILE*, OggFLAC__stream_encoder_init_file() and
- *  OggFLAC__stream_encoder_init_FILE() provide a simpler interface.
- *
- *  This function should be called after OggFLAC__stream_encoder_new() and
- *  OggFLAC__stream_encoder_set_*() but before OggFLAC__stream_encoder_process()
- *  or OggFLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- *  The call to OggFLAC__stream_encoder_init_stream() currently will also immediately
- *  call the write callback several times, once with the \c fLaC signature,
- *  and once for each encoded metadata block.
- *
- * \note
- * Unlike the FLAC stream encoder write callback, the Ogg stream
- * encoder write callback will be called twice when writing each audio
- * frame; once for the page header, and once for the page body.
- * When writing the page header, the \a samples argument to the
- * write callback will be \c 0.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  read_callback      See OggFLAC__StreamEncoderReadCallback.  This
- *                            pointer must not be \c NULL if \a seek_callback
- *                            is non-NULL since they are both needed to be
- *                            able to write data back to the Ogg FLAC stream
- *                            in the post-encode phase.
- * \param  write_callback     See FLAC__StreamEncoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamEncoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  The encoder uses seeking to go back
- *                            and write some some stream statistics to the
- *                            STREAMINFO block; this is recommended but not
- *                            necessary to create a valid FLAC stream.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  tell_callback      See FLAC__StreamEncoderTellCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is \c NULL then
- *                            this argument will be ignored.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  metadata_callback  See FLAC__StreamEncoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.  If the client provides a seek callback,
- *                            this function is not necessary as the encoder
- *                            will automatically seek back and update the
- *                            STREAMINFO block.  It may also be \c NULL if the
- *                            client does not support seeking, since it will
- *                            have no way of going back to update the
- *                            STREAMINFO.  However the client can still supply
- *                            a callback if it would like to know the details
- *                            from the STREAMINFO.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamEncoderInitStatus OggFLAC__stream_encoder_init_stream(OggFLAC__StreamEncoder *encoder, OggFLAC__StreamEncoderReadCallback read_callback, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
-
-/** Initialize the encoder instance.
- *
- *  This flavor of initialization sets up the encoder to encode to a plain
- *  file.  For non-stdio streams, you must use
- *  OggFLAC__stream_encoder_init_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after OggFLAC__stream_encoder_new() and
- *  OggFLAC__stream_encoder_set_*() but before OggFLAC__stream_encoder_process()
- *  or OggFLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- *  The call to OggFLAC__stream_encoder_init_stream() currently will also immediately
- *  call the write callback several times, once with the \c fLaC signature,
- *  and once for each encoded metadata block.
- *
- * \note
- * Unlike the FLAC stream encoder write callback, the Ogg stream
- * encoder write callback will be called twice when writing each audio
- * frame; once for the page header, and once for the page body.
- * When writing the page header, the \a samples argument to the
- * write callback will be \c 0.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  file               An open file.  The file should have been opened
- *                            with mode \c "w+b" and rewound.  The file
- *                            becomes owned by the encoder and should not be
- *                            manipulated by the client while encoding.
- *                            Unless \a file is \c stdout, it will be closed
- *                            when OggFLAC__stream_encoder_finish() is called.
- *                            Note however that a proper SEEKTABLE cannot be
- *                            created when encoding to \c stdout since it is
- *                            not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamEncoderInitStatus OggFLAC__stream_encoder_init_FILE(OggFLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Initialize the encoder instance.
- *
- *  This flavor of initialization sets up the encoder to encode to a plain
- *  file.  If POSIX fopen() semantics are not sufficient (for example,
- *  with Unicode filenames on Windows), you must use
- *  OggFLAC__stream_encodeR_init_FILE(), or OggFLAC__stream_encoder_init_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after OggFLAC__stream_encoder_new() and
- *  OggFLAC__stream_encoder_set_*() but before OggFLAC__stream_encoder_process()
- *  or OggFLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- *  The call to OggFLAC__stream_encoder_init_stream() currently will also immediately
- *  call the write callback several times, once with the \c fLaC signature,
- *  and once for each encoded metadata block.
- *
- * \note
- * Unlike the FLAC stream encoder write callback, the Ogg stream
- * encoder write callback will be called twice when writing each audio
- * frame; once for the page header, and once for the page body.
- * When writing the page header, the \a samples argument to the
- * write callback will be \c 0.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  filename           The name of the file to encode to.  The file will
- *                            be opened with fopen().  Use \c NULL to encode to
- *                            \c stdout.  Note however that a proper SEEKTABLE
- *                            cannot be created when encoding to \c stdout since
- *                            it is not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-OggFLAC_API FLAC__StreamEncoderInitStatus OggFLAC__stream_encoder_init_file(OggFLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Finish the encoding process.
- *  Flushes the encoding buffer, releases resources, resets the encoder
- *  settings to their defaults, and returns the encoder state to
- *  OggFLAC__STREAM_ENCODER_UNINITIALIZED.  Note that this can generate
- *  one or more write callbacks before returning.
- *
- *  In the event of a prematurely-terminated encode, it is not strictly
- *  necessary to call this immediately before OggFLAC__stream_encoder_delete()
- *  but it is good practice to match every OggFLAC__stream_encoder_init()
- *  with an OggFLAC__stream_encoder_finish().
- *
- * \param  encoder  An uninitialized encoder instance.
- * \assert
- *    \code encoder != NULL \endcode
- */
-OggFLAC_API void OggFLAC__stream_encoder_finish(OggFLAC__StreamEncoder *encoder);
-
-/** Submit data for encoding.
- * This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_process().
- *
- * \param  encoder  An initialized encoder instance in the OK state.
- * \param  buffer   An array of pointers to each channel's signal.
- * \param  samples  The number of samples in one channel.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code OggFLAC__stream_encoder_get_state(encoder) == OggFLAC__STREAM_ENCODER_OK \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false; in this case, check the
- *    encoder state with OggFLAC__stream_encoder_get_state() to see what
- *    went wrong.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_process(OggFLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
-
-/** Submit data for encoding.
- * This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_process_interleaved().
- *
- * \param  encoder  An initialized encoder instance in the OK state.
- * \param  buffer   An array of channel-interleaved data (see above).
- * \param  samples  The number of samples in one channel, the same as for
- *                  OggFLAC__stream_encoder_process().  For example, if
- *                  encoding two channels, \c 1000 \a samples corresponds
- *                  to a \a buffer of 2000 values.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code OggFLAC__stream_encoder_get_state(encoder) == OggFLAC__STREAM_ENCODER_OK \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false; in this case, check the
- *    encoder state with OggFLAC__stream_encoder_get_state() to see what
- *    went wrong.
- */
-OggFLAC_API FLAC__bool OggFLAC__stream_encoder_process_interleaved(OggFLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
index 8060b67..a0342dc 100644 (file)
@@ -2,12 +2,6 @@
 
 AUTOMAKE_OPTIONS = foreign
 
-if FLaC__HAS_OGG
-OGGFLAC_DIST = \
-       file_utils_oggflac.h
-endif
-
 EXTRA_DIST = \
        file_utils_flac.h \
-       metadata_utils.h \
-       $(OGGFLAC_DIST)
+       metadata_utils.h
index 4b69568..c04c5eb 100644 (file)
@@ -27,6 +27,8 @@
 #include "FLAC/format.h"
 #include <sys/types.h> /* for off_t */
 
-FLAC__bool file_utils__generate_flacfile(const char *output_filename, off_t *output_filesize, unsigned length, const FLAC__StreamMetadata *streaminfo, FLAC__StreamMetadata **metadata, unsigned num_metadata);
+extern const long file_utils__ogg_serial_number;
+
+FLAC__bool file_utils__generate_flacfile(FLAC__bool is_ogg, const char *output_filename, off_t *output_filesize, unsigned length, const FLAC__StreamMetadata *streaminfo, FLAC__StreamMetadata **metadata, unsigned num_metadata);
 
 #endif
diff --git a/include/test_libs_common/file_utils_oggflac.h b/include/test_libs_common/file_utils_oggflac.h
deleted file mode 100644 (file)
index d59127f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* test_libOggFLAC - Unit tester for libOggFLAC
- * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef OggFLAC__TEST_LIBOGGFLAC_FILE_UTILS_H
-#define OggFLAC__TEST_LIBOGGFLAC_FILE_UTILS_H
-
-/* needed because of off_t */
-#if HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "FLAC/format.h"
-#include <sys/types.h> /* for off_t */
-
-extern const long file_utils__serial_number;
-
-FLAC__bool file_utils__generate_oggflacfile(const char *output_filename, off_t *output_filesize, unsigned length, const FLAC__StreamMetadata *streaminfo, FLAC__StreamMetadata **metadata, unsigned num_metadata);
-
-#endif
index 2d97fe2..9de7d7d 100644 (file)
@@ -19,15 +19,9 @@ if FLaC__HAS_XMMS
 XMMS_DIRS = plugin_common plugin_xmms
 endif
 
-if FLaC__HAS_OGG
-OGGFLAC_DIRS = libOggFLAC libOggFLAC++
-OGGFLAC_TEST_DIRS = test_libOggFLAC test_libOggFLAC++
-endif
-
 SUBDIRS = \
        libFLAC \
        libFLAC++ \
-       $(OGGFLAC_DIRS) \
        share \
        flac \
        metaflac \
@@ -38,7 +32,6 @@ SUBDIRS = \
        test_libs_common \
        test_libFLAC \
        test_libFLAC++ \
-       $(OGGFLAC_TEST_DIRS) \
        test_seeking \
        test_streams
 
index f2c2bd2..3fc5110 100644 (file)
@@ -15,8 +15,8 @@
 #  restrictive of those mentioned above.  See the file COPYING.Xiph in this
 #  distribution.
 
-.PHONY: all flac libFLAC libFLAC++ libOggFLAC libOggFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_libOggFLAC test_libOggFLAC++ test_seeking test_streams
-all: flac libFLAC libFLAC++ libOggFLAC libOggFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_libOggFLAC test_libOggFLAC++ test_seeking test_streams
+.PHONY: all flac libFLAC libFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams
+all: flac libFLAC libFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams
 
 DEFAULT_CONFIG = release
 
@@ -30,15 +30,13 @@ debug   : all
 valgrind: all
 release : all
 
-flac libFLAC libFLAC++ libOggFLAC libOggFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_libOggFLAC test_libOggFLAC++ test_seeking test_streams:
+flac libFLAC libFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams:
        (cd $@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
 clean:
        -(cd flac ; $(MAKE) -f Makefile.lite clean)
        -(cd libFLAC ; $(MAKE) -f Makefile.lite clean)
        -(cd libFLAC++ ; $(MAKE) -f Makefile.lite clean)
-       -(cd libOggFLAC ; $(MAKE) -f Makefile.lite clean)
-       -(cd libOggFLAC++ ; $(MAKE) -f Makefile.lite clean)
        -(cd metaflac ; $(MAKE) -f Makefile.lite clean)
        -(cd plugin_common ; $(MAKE) -f Makefile.lite clean)
        -(cd plugin_xmms ; $(MAKE) -f Makefile.lite clean)
@@ -47,15 +45,11 @@ clean:
        -(cd test_libs_common ; $(MAKE) -f Makefile.lite clean)
        -(cd test_libFLAC ; $(MAKE) -f Makefile.lite clean)
        -(cd test_libFLAC++ ; $(MAKE) -f Makefile.lite clean)
-       -(cd test_libOggFLAC ; $(MAKE) -f Makefile.lite clean)
-       -(cd test_libOggFLAC++ ; $(MAKE) -f Makefile.lite clean)
        -(cd test_seeking ; $(MAKE) -f Makefile.lite clean)
        -(cd test_streams ; $(MAKE) -f Makefile.lite clean)
 
-flac: libFLAC libOggFLAC share
+flac: libFLAC share
 libFLAC++: libFLAC
-libOggFLAC++: libFLAC
-libOggFLAC: libFLAC
 metaflac: libFLAC share
 plugin_common: libFLAC
 plugin_xmms: libFLAC plugin_common
@@ -63,7 +57,5 @@ share: libFLAC
 test_grabbag: share
 test_libFLAC++: libFLAC libFLAC++ test_libs_common
 test_libFLAC: libFLAC test_libs_common
-test_libOggFLAC++: libFLAC libOggFLAC libOggFLAC++ test_libs_common
-test_libOggFLAC: libFLAC libOggFLAC test_libs_common
-test_seeking: libFLAC libOggFLAC
+test_seeking: libFLAC
 test_streams: libFLAC
index 8aed4ee..2eedfa6 100644 (file)
@@ -19,10 +19,6 @@ bin_PROGRAMS = flac
 
 AM_CFLAGS = @OGG_CFLAGS@
 
-if FLaC__HAS_OGG
-NEED_OGGFLAC_LIB = $(top_builddir)/src/libOggFLAC/libOggFLAC.la
-endif
-
 EXTRA_DIST = \
        Makefile.lite \
        flac.dsp
@@ -43,7 +39,6 @@ flac_SOURCES = \
        vorbiscomment.h
 
 flac_LDADD = \
-       $(NEED_OGGFLAC_LIB) \
        $(top_builddir)/src/share/grabbag/libgrabbag.la \
        $(top_builddir)/src/share/getopt/libgetopt.a \
        $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \
index 807c6ba..cb63a40 100644 (file)
@@ -27,9 +27,9 @@ PROGRAM_NAME = flac
 INCLUDES = -I./include -I$(topdir)/include -I$(OGG_INCLUDE_DIR)
 
 ifeq ($(DARWIN_BUILD),yes)
-EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libOggFLAC.a $(libdir)/libFLAC.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(libdir)/libgetopt.a $(libdir)/libutf8.a $(OGG_LIB_DIR)/libogg.a -L$(ICONV_LIB_DIR) -liconv -lm
+EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libFLAC.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(libdir)/libgetopt.a $(libdir)/libutf8.a $(OGG_LIB_DIR)/libogg.a -L$(ICONV_LIB_DIR) -liconv -lm
 else
-LIBS = -lgrabbag -lOggFLAC -lFLAC -lreplaygain_analysis -lreplaygain_synthesis -lgetopt -lutf8 -L$(OGG_LIB_DIR) -logg -lm
+LIBS = -lgrabbag -lFLAC -lreplaygain_analysis -lreplaygain_synthesis -lgetopt -lutf8 -L$(OGG_LIB_DIR) -logg -lm
 endif
 
 SRCS_C = \
index fec97d6..157e060 100644 (file)
 #include "share/replaygain_synthesis.h"
 #include "decode.h"
 
-#ifdef FLAC__HAS_OGG
-#include "OggFLAC/stream_decoder.h"
-#endif
-
 typedef struct {
 #ifdef FLAC__HAS_OGG
        FLAC__bool is_ogg;
@@ -90,12 +86,7 @@ typedef struct {
        unsigned sample_rate;
        FLAC__uint32 channel_mask;
 
-       union {
-               FLAC__StreamDecoder *flac;
-#ifdef FLAC__HAS_OGG
-               OggFLAC__StreamDecoder *ogg;
-#endif
-       } decoder;
+       FLAC__StreamDecoder *decoder;
 
        FILE *fout;
 } DecoderSession;
@@ -287,10 +278,7 @@ FLAC__bool DecoderSession_construct(DecoderSession *d, FLAC__bool is_ogg, FLAC__
        d->sample_rate = 0;
        d->channel_mask = 0;
 
-       d->decoder.flac = 0;
-#ifdef FLAC__HAS_OGG
-       d->decoder.ogg = 0;
-#endif
+       d->decoder = 0;
 
        d->fout = 0; /* initialized with an open file later if necessary */
 
@@ -331,52 +319,36 @@ FLAC__bool DecoderSession_init_decoder(DecoderSession *decoder_session, decode_o
 
        is_big_endian_host_ = (*((FLAC__byte*)(&test)))? false : true;
 
-#ifdef FLAC__HAS_OGG
-       if(decoder_session->is_ogg) {
-               decoder_session->decoder.ogg = OggFLAC__stream_decoder_new();
+       decoder_session->decoder = FLAC__stream_decoder_new();
 
-               if(0 == decoder_session->decoder.ogg) {
-                       flac__utils_printf(stderr, 1, "%s: ERROR creating the decoder instance\n", decoder_session->inbasefilename);
-                       return false;
-               }
+       if(0 == decoder_session->decoder) {
+               flac__utils_printf(stderr, 1, "%s: ERROR creating the decoder instance\n", decoder_session->inbasefilename);
+               return false;
+       }
+
+       FLAC__stream_decoder_set_md5_checking(decoder_session->decoder, true);
+       if (0 != decoder_session->cue_specification)
+               FLAC__stream_decoder_set_metadata_respond(decoder_session->decoder, FLAC__METADATA_TYPE_CUESHEET);
+       if (decoder_session->replaygain.spec.apply)
+               FLAC__stream_decoder_set_metadata_respond(decoder_session->decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT);
 
-               OggFLAC__stream_decoder_set_md5_checking(decoder_session->decoder.ogg, true);
+#ifdef FLAC__HAS_OGG
+       if(decoder_session->is_ogg) {
                if(!decode_options.use_first_serial_number)
-                       OggFLAC__stream_decoder_set_serial_number(decoder_session->decoder.ogg, decode_options.serial_number);
-               if (0 != decoder_session->cue_specification)
-                       OggFLAC__stream_decoder_set_metadata_respond(decoder_session->decoder.ogg, FLAC__METADATA_TYPE_CUESHEET);
-               if (decoder_session->replaygain.spec.apply)
-                       OggFLAC__stream_decoder_set_metadata_respond(decoder_session->decoder.ogg, FLAC__METADATA_TYPE_VORBIS_COMMENT);
-
-               init_status = OggFLAC__stream_decoder_init_file(decoder_session->decoder.ogg, strcmp(infilename, "-")? infilename : 0, write_callback, metadata_callback, error_callback, /*client_data=*/decoder_session);
-               if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
-                       print_error_with_init_status(decoder_session, "ERROR initializing decoder", init_status);
-                       return false;
-               }
+                       FLAC__stream_decoder_set_serial_number(decoder_session->decoder, decode_options.serial_number);
+               init_status = FLAC__stream_decoder_init_ogg_file(decoder_session->decoder, strcmp(infilename, "-")? infilename : 0, write_callback, metadata_callback, error_callback, /*client_data=*/decoder_session);
        }
        else
 #else
        (void)decode_options;
 #endif
        {
-               decoder_session->decoder.flac = FLAC__stream_decoder_new();
-
-               if(0 == decoder_session->decoder.flac) {
-                       flac__utils_printf(stderr, 1, "%s: ERROR creating the decoder instance\n", decoder_session->inbasefilename);
-                       return false;
-               }
-
-               FLAC__stream_decoder_set_md5_checking(decoder_session->decoder.flac, true);
-               if (0 != decoder_session->cue_specification)
-                       FLAC__stream_decoder_set_metadata_respond(decoder_session->decoder.flac, FLAC__METADATA_TYPE_CUESHEET);
-               if (decoder_session->replaygain.spec.apply)
-                       FLAC__stream_decoder_set_metadata_respond(decoder_session->decoder.flac, FLAC__METADATA_TYPE_VORBIS_COMMENT);
+               init_status = FLAC__stream_decoder_init_file(decoder_session->decoder, strcmp(infilename, "-")? infilename : 0, write_callback, metadata_callback, error_callback, /*client_data=*/decoder_session);
+       }
 
-               init_status = FLAC__stream_decoder_init_file(decoder_session->decoder.flac, strcmp(infilename, "-")? infilename : 0, write_callback, metadata_callback, error_callback, /*client_data=*/decoder_session);
-               if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
-                       print_error_with_init_status(decoder_session, "ERROR initializing decoder", init_status);
-                       return false;
-               }
+       if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
+               print_error_with_init_status(decoder_session, "ERROR initializing decoder", init_status);
+               return false;
        }
 
        return true;
@@ -384,35 +356,18 @@ FLAC__bool DecoderSession_init_decoder(DecoderSession *decoder_session, decode_o
 
 FLAC__bool DecoderSession_process(DecoderSession *d)
 {
-#ifdef FLAC__HAS_OGG
-       if(d->is_ogg) {
-               if(!OggFLAC__stream_decoder_process_until_end_of_metadata(d->decoder.ogg)) {
-                       flac__utils_printf(stderr, 2, "\n");
-                       print_error_with_state(d, "ERROR while decoding metadata");
-                       return false;
-               }
-               if(OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_OK && OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_END_OF_STREAM) {
-                       flac__utils_printf(stderr, 2, "\n");
-                       print_error_with_state(d, "ERROR during metadata decoding");
-                       if(!d->continue_through_decode_errors)
-                               return false;
-               }
+       if(!FLAC__stream_decoder_process_until_end_of_metadata(d->decoder)) {
+               flac__utils_printf(stderr, 2, "\n");
+               print_error_with_state(d, "ERROR while decoding metadata");
+               return false;
        }
-       else
-#endif
-       {
-               if(!FLAC__stream_decoder_process_until_end_of_metadata(d->decoder.flac)) {
-                       flac__utils_printf(stderr, 2, "\n");
-                       print_error_with_state(d, "ERROR while decoding metadata");
+       if(FLAC__stream_decoder_get_state(d->decoder) > FLAC__STREAM_DECODER_END_OF_STREAM) {
+               flac__utils_printf(stderr, 2, "\n");
+               print_error_with_state(d, "ERROR during metadata decoding");
+               if(!d->continue_through_decode_errors)
                        return false;
-               }
-               if(FLAC__stream_decoder_get_state(d->decoder.flac) > FLAC__STREAM_DECODER_END_OF_STREAM) {
-                       flac__utils_printf(stderr, 2, "\n");
-                       print_error_with_state(d, "ERROR during metadata decoding");
-                       if(!d->continue_through_decode_errors)
-                               return false;
-               }
        }
+
        if(d->abort_flag)
                return false;
 
@@ -457,72 +412,21 @@ FLAC__bool DecoderSession_process(DecoderSession *d)
        if(d->skip_specification->value.samples > 0) {
                const FLAC__uint64 skip = (FLAC__uint64)d->skip_specification->value.samples;
 
-#ifdef FLAC__HAS_OGG
-               if(d->is_ogg) {
-                       if(!OggFLAC__stream_decoder_seek_absolute(d->decoder.ogg, skip)) {
-                               print_error_with_state(d, "ERROR seeking while skipping bytes");
-                               return false;
-                       }
-                       if(!OggFLAC__stream_decoder_process_until_end_of_stream(d->decoder.ogg) && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR while decoding frames");
-                               return false;
-                       }
-                       if(OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_OK && OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR during decoding");
-                               return false;
-                       }
-               }
-               else
-#endif
-               {
-                       if(!FLAC__stream_decoder_seek_absolute(d->decoder.flac, skip)) {
-                               print_error_with_state(d, "ERROR seeking while skipping bytes");
-                               return false;
-                       }
-                       if(!FLAC__stream_decoder_process_until_end_of_stream(d->decoder.flac) && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR while decoding frames");
-                               return false;
-                       }
-                       if(FLAC__stream_decoder_get_state(d->decoder.flac) > FLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR during decoding");
-                               return false;
-                       }
+               if(!FLAC__stream_decoder_seek_absolute(d->decoder, skip)) {
+                       print_error_with_state(d, "ERROR seeking while skipping bytes");
+                       return false;
                }
        }
-       else {
-#ifdef FLAC__HAS_OGG
-               if(d->is_ogg) {
-                       if(!OggFLAC__stream_decoder_process_until_end_of_stream(d->decoder.ogg) && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR while decoding data");
-                               if(!d->continue_through_decode_errors)
-                                       return false;
-                       }
-                       if(OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_OK && OggFLAC__stream_decoder_get_state(d->decoder.ogg) != OggFLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR during decoding");
-                               return false;
-                       }
-               }
-               else
-#endif
-               {
-                       if(!FLAC__stream_decoder_process_until_end_of_stream(d->decoder.flac) && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR while decoding data");
-                               if(!d->continue_through_decode_errors)
-                                       return false;
-                       }
-                       if(FLAC__stream_decoder_get_state(d->decoder.flac) > FLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until) {
-                               flac__utils_printf(stderr, 2, "\n");
-                               print_error_with_state(d, "ERROR during decoding");
-                               return false;
-                       }
-               }
+       if(!FLAC__stream_decoder_process_until_end_of_stream(d->decoder) && !d->aborting_due_to_until) {
+               flac__utils_printf(stderr, 2, "\n");
+               print_error_with_state(d, "ERROR while decoding data");
+               if(!d->continue_through_decode_errors)
+                       return false;
+       }
+       if(FLAC__stream_decoder_get_state(d->decoder) > FLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until) {
+               flac__utils_printf(stderr, 2, "\n");
+               print_error_with_state(d, "ERROR during decoding");
+               return false;
        }
 
        if(!d->analysis_mode && !d->test_only && (d->is_wave_out || d->is_aiff_out) && ((d->total_samples * d->channels * ((d->bps+7)/8)) & 1)) {
@@ -542,22 +446,10 @@ int DecoderSession_finish_ok(DecoderSession *d)
 {
        FLAC__bool ok = true, md5_failure = false;
 
-#ifdef FLAC__HAS_OGG
-       if(d->is_ogg) {
-               if(d->decoder.ogg) {
-                       md5_failure = !OggFLAC__stream_decoder_finish(d->decoder.ogg) && !d->aborting_due_to_until;
-                       print_stats(d);
-                       OggFLAC__stream_decoder_delete(d->decoder.ogg);
-               }
-       }
-       else
-#endif
-       {
-               if(d->decoder.flac) {
-                       md5_failure = !FLAC__stream_decoder_finish(d->decoder.flac) && !d->aborting_due_to_until;
-                       print_stats(d);
-                       FLAC__stream_decoder_delete(d->decoder.flac);
-               }
+       if(d->decoder) {
+               md5_failure = !FLAC__stream_decoder_finish(d->decoder) && !d->aborting_due_to_until;
+               print_stats(d);
+               FLAC__stream_decoder_delete(d->decoder);
        }
        if(d->analysis_mode)
                flac__analyze_finish(d->aopts);
@@ -580,20 +472,9 @@ int DecoderSession_finish_ok(DecoderSession *d)
 
 int DecoderSession_finish_error(DecoderSession *d)
 {
-#ifdef FLAC__HAS_OGG
-       if(d->is_ogg) {
-               if(d->decoder.ogg) {
-                       OggFLAC__stream_decoder_finish(d->decoder.ogg);
-                       OggFLAC__stream_decoder_delete(d->decoder.ogg);
-               }
-       }
-       else
-#endif
-       {
-               if(d->decoder.flac) {
-                       FLAC__stream_decoder_finish(d->decoder.flac);
-                       FLAC__stream_decoder_delete(d->decoder.flac);
-               }
+       if(d->decoder) {
+               FLAC__stream_decoder_finish(d->decoder);
+               FLAC__stream_decoder_delete(d->decoder);
        }
        if(d->analysis_mode)
                flac__analyze_finish(d->aopts);
@@ -1218,21 +1099,9 @@ void print_error_with_init_status(const DecoderSession *d, const char *message,
 void print_error_with_state(const DecoderSession *d, const char *message)
 {
        const int ilen = strlen(d->inbasefilename) + 1;
-       const char *state_string;
 
        flac__utils_printf(stderr, 1, "\n%s: %s\n", d->inbasefilename, message);
-
-#ifdef FLAC__HAS_OGG
-       if(d->is_ogg) {
-               state_string = OggFLAC__stream_decoder_get_resolved_state_string(d->decoder.ogg);
-       }
-       else
-#endif
-       {
-               state_string = FLAC__stream_decoder_get_resolved_state_string(d->decoder.flac);
-       }
-
-       flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", state_string);
+       flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", FLAC__stream_decoder_get_resolved_state_string(d->decoder));
 
        /* print out some more info for some errors: */
        if (d->aborting_due_to_unparseable) {
index c85e2fa..fa414f1 100644 (file)
 #include "share/grabbag.h"
 #include "encode.h"
 
-#ifdef FLAC__HAS_OGG
-#include "OggFLAC/stream_encoder.h"
-#endif
-
 #ifdef min
 #undef min
 #endif
@@ -82,12 +78,7 @@ typedef struct {
        unsigned blocksize;
        unsigned stats_mask;
 
-       union {
-               FLAC__StreamEncoder *flac;
-#ifdef FLAC__HAS_OGG
-               OggFLAC__StreamEncoder *ogg;
-#endif
-       } encoder;
+       FLAC__StreamEncoder *encoder;
 
        FILE *fin;
        FLAC__StreamMetadata *seek_table_template;
@@ -124,11 +115,6 @@ static FLAC__int32 *input_[FLAC__MAX_CHANNELS];
 extern FLAC__bool FLAC__stream_encoder_disable_constant_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value);
 extern FLAC__bool FLAC__stream_encoder_disable_fixed_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value);
 extern FLAC__bool FLAC__stream_encoder_disable_verbatim_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value);
-#ifdef FLAC__HAS_OGG
-extern FLAC__bool OggFLAC__stream_encoder_disable_constant_subframes(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-extern FLAC__bool OggFLAC__stream_encoder_disable_fixed_subframes(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-extern FLAC__bool OggFLAC__stream_encoder_disable_verbatim_subframes(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
-#endif
 
 /*
  * local routines
@@ -1548,10 +1534,7 @@ FLAC__bool EncoderSession_construct(EncoderSession *e, FLAC__bool use_ogg, FLAC_
        e->blocksize = 0;
        e->stats_mask = 0;
 
-       e->encoder.flac = 0;
-#ifdef FLAC__HAS_OGG
-       e->encoder.ogg = 0;
-#endif
+       e->encoder = 0;
 
        e->fin = infile;
        e->seek_table_template = 0;
@@ -1561,19 +1544,8 @@ FLAC__bool EncoderSession_construct(EncoderSession *e, FLAC__bool use_ogg, FLAC_
                return false;
        }
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg) {
-               e->encoder.ogg = OggFLAC__stream_encoder_new();
-               if(0 == e->encoder.ogg) {
-                       flac__utils_printf(stderr, 1, "%s: ERROR creating the encoder instance\n", e->inbasefilename);
-                       EncoderSession_destroy(e);
-                       return false;
-               }
-       }
-       else
-#endif
-       e->encoder.flac = FLAC__stream_encoder_new();
-       if(0 == e->encoder.flac) {
+       e->encoder = FLAC__stream_encoder_new();
+       if(0 == e->encoder) {
                flac__utils_printf(stderr, 1, "%s: ERROR creating the encoder instance\n", e->inbasefilename);
                EncoderSession_destroy(e);
                return false;
@@ -1587,18 +1559,9 @@ void EncoderSession_destroy(EncoderSession *e)
        if(e->fin != stdin)
                fclose(e->fin);
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg) {
-               if(0 != e->encoder.ogg) {
-                       OggFLAC__stream_encoder_delete(e->encoder.ogg);
-                       e->encoder.ogg = 0;
-               }
-       }
-       else
-#endif
-       if(0 != e->encoder.flac) {
-               FLAC__stream_encoder_delete(e->encoder.flac);
-               e->encoder.flac = 0;
+       if(0 != e->encoder) {
+               FLAC__stream_encoder_delete(e->encoder);
+               e->encoder = 0;
        }
 
        if(0 != e->seek_table_template) {
@@ -1612,18 +1575,9 @@ int EncoderSession_finish_ok(EncoderSession *e, int info_align_carry, int info_a
        FLAC__StreamEncoderState fse_state = FLAC__STREAM_ENCODER_OK;
        int ret = 0;
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg) {
-               if(e->encoder.ogg) {
-                       fse_state = OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg);
-                       OggFLAC__stream_encoder_finish(e->encoder.ogg);
-               }
-       }
-       else
-#endif
-       if(e->encoder.flac) {
-               fse_state = FLAC__stream_encoder_get_state(e->encoder.flac);
-               FLAC__stream_encoder_finish(e->encoder.flac);
+       if(e->encoder) {
+               fse_state = FLAC__stream_encoder_get_state(e->encoder);
+               FLAC__stream_encoder_finish(e->encoder);
        }
 
        if(e->total_samples_to_encode > 0) {
@@ -1651,28 +1605,12 @@ int EncoderSession_finish_ok(EncoderSession *e, int info_align_carry, int info_a
 
 int EncoderSession_finish_error(EncoderSession *e)
 {
-       FLAC__StreamEncoderState fse_state;
-
-#ifdef FLAC__HAS_OGG
-       FLAC__ASSERT(e->encoder.ogg || e->encoder.flac);
-#else
-       FLAC__ASSERT(e->encoder.flac);
-#endif
+       FLAC__ASSERT(e->encoder);
 
        if(e->total_samples_to_encode > 0)
                flac__utils_printf(stderr, 2, "\n");
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg) {
-               fse_state = OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg);
-       }
-       else
-#endif
-       {
-               fse_state = FLAC__stream_encoder_get_state(e->encoder.flac);
-       }
-
-       if(fse_state == FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA)
+       if(FLAC__stream_encoder_get_state(e->encoder) == FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA)
                print_verify_error(e);
        else if(e->outputfile_opened)
                /* only want to delete the file if we opened it; otherwise it could be an existing file and our overwrite failed */
@@ -1956,84 +1894,52 @@ FLAC__bool EncoderSession_init_encoder(EncoderSession *e, encode_options_t optio
        e->blocksize = options.blocksize;
        e->stats_mask = (options.do_exhaustive_model_search || options.do_qlp_coeff_prec_search)? 0x0f : 0x3f;
 
+       FLAC__stream_encoder_set_verify(e->encoder, options.verify);
+       FLAC__stream_encoder_set_streamable_subset(e->encoder, !options.lax);
+       FLAC__stream_encoder_set_do_mid_side_stereo(e->encoder, options.do_mid_side);
+       FLAC__stream_encoder_set_loose_mid_side_stereo(e->encoder, options.loose_mid_side);
+       FLAC__stream_encoder_set_channels(e->encoder, channels);
+       FLAC__stream_encoder_set_bits_per_sample(e->encoder, bps);
+       FLAC__stream_encoder_set_sample_rate(e->encoder, sample_rate);
+       FLAC__stream_encoder_set_blocksize(e->encoder, options.blocksize);
+       FLAC__stream_encoder_set_apodization(e->encoder, options.apodizations);
+       FLAC__stream_encoder_set_max_lpc_order(e->encoder, options.max_lpc_order);
+       FLAC__stream_encoder_set_qlp_coeff_precision(e->encoder, options.qlp_coeff_precision);
+       FLAC__stream_encoder_set_do_qlp_coeff_prec_search(e->encoder, options.do_qlp_coeff_prec_search);
+       FLAC__stream_encoder_set_do_escape_coding(e->encoder, options.do_escape_coding);
+       FLAC__stream_encoder_set_do_exhaustive_model_search(e->encoder, options.do_exhaustive_model_search);
+       FLAC__stream_encoder_set_min_residual_partition_order(e->encoder, options.min_residual_partition_order);
+       FLAC__stream_encoder_set_max_residual_partition_order(e->encoder, options.max_residual_partition_order);
+       FLAC__stream_encoder_set_rice_parameter_search_dist(e->encoder, options.rice_parameter_search_dist);
+       FLAC__stream_encoder_set_total_samples_estimate(e->encoder, e->total_samples_to_encode);
+       FLAC__stream_encoder_set_metadata(e->encoder, (num_metadata > 0)? metadata : 0, num_metadata);
+
+       FLAC__stream_encoder_disable_constant_subframes(e->encoder, options.debug.disable_constant_subframes);
+       FLAC__stream_encoder_disable_fixed_subframes(e->encoder, options.debug.disable_fixed_subframes);
+       FLAC__stream_encoder_disable_verbatim_subframes(e->encoder, options.debug.disable_verbatim_subframes);
+
 #ifdef FLAC__HAS_OGG
        if(e->use_ogg) {
-               OggFLAC__stream_encoder_set_serial_number(e->encoder.ogg, options.serial_number);
-               OggFLAC__stream_encoder_set_verify(e->encoder.ogg, options.verify);
-               OggFLAC__stream_encoder_set_streamable_subset(e->encoder.ogg, !options.lax);
-               OggFLAC__stream_encoder_set_do_mid_side_stereo(e->encoder.ogg, options.do_mid_side);
-               OggFLAC__stream_encoder_set_loose_mid_side_stereo(e->encoder.ogg, options.loose_mid_side);
-               OggFLAC__stream_encoder_set_channels(e->encoder.ogg, channels);
-               OggFLAC__stream_encoder_set_bits_per_sample(e->encoder.ogg, bps);
-               OggFLAC__stream_encoder_set_sample_rate(e->encoder.ogg, sample_rate);
-               OggFLAC__stream_encoder_set_blocksize(e->encoder.ogg, options.blocksize);
-               OggFLAC__stream_encoder_set_apodization(e->encoder.ogg, options.apodizations);
-               OggFLAC__stream_encoder_set_max_lpc_order(e->encoder.ogg, options.max_lpc_order);
-               OggFLAC__stream_encoder_set_qlp_coeff_precision(e->encoder.ogg, options.qlp_coeff_precision);
-               OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search(e->encoder.ogg, options.do_qlp_coeff_prec_search);
-               OggFLAC__stream_encoder_set_do_escape_coding(e->encoder.ogg, options.do_escape_coding);
-               OggFLAC__stream_encoder_set_do_exhaustive_model_search(e->encoder.ogg, options.do_exhaustive_model_search);
-               OggFLAC__stream_encoder_set_min_residual_partition_order(e->encoder.ogg, options.min_residual_partition_order);
-               OggFLAC__stream_encoder_set_max_residual_partition_order(e->encoder.ogg, options.max_residual_partition_order);
-               OggFLAC__stream_encoder_set_rice_parameter_search_dist(e->encoder.ogg, options.rice_parameter_search_dist);
-               OggFLAC__stream_encoder_set_total_samples_estimate(e->encoder.ogg, e->total_samples_to_encode);
-               OggFLAC__stream_encoder_set_metadata(e->encoder.ogg, (num_metadata > 0)? metadata : 0, num_metadata);
-
-               OggFLAC__stream_encoder_disable_constant_subframes(e->encoder.ogg, options.debug.disable_constant_subframes);
-               OggFLAC__stream_encoder_disable_fixed_subframes(e->encoder.ogg, options.debug.disable_fixed_subframes);
-               OggFLAC__stream_encoder_disable_verbatim_subframes(e->encoder.ogg, options.debug.disable_verbatim_subframes);
-
-               init_status = OggFLAC__stream_encoder_init_file(e->encoder.ogg, e->is_stdout? 0 : e->outfilename, encoder_progress_callback, /*client_data=*/e);
-               if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
-                       print_error_with_init_status(e, "ERROR initializing encoder", init_status);
-                       if(OggFLAC__stream_encoder_get_state(e->encoder.ogg) != OggFLAC__STREAM_ENCODER_IO_ERROR)
-                               e->outputfile_opened = true;
-                       if(0 != cuesheet)
-                               FLAC__metadata_object_delete(cuesheet);
-                       return false;
-               }
-               else
-                       e->outputfile_opened = true;
+               FLAC__stream_encoder_set_serial_number(e->encoder, options.serial_number);
+
+               init_status = FLAC__stream_encoder_init_ogg_file(e->encoder, e->is_stdout? 0 : e->outfilename, encoder_progress_callback, /*client_data=*/e);
        }
        else
 #endif
        {
-               FLAC__stream_encoder_set_verify(e->encoder.flac, options.verify);
-               FLAC__stream_encoder_set_streamable_subset(e->encoder.flac, !options.lax);
-               FLAC__stream_encoder_set_do_mid_side_stereo(e->encoder.flac, options.do_mid_side);
-               FLAC__stream_encoder_set_loose_mid_side_stereo(e->encoder.flac, options.loose_mid_side);
-               FLAC__stream_encoder_set_channels(e->encoder.flac, channels);
-               FLAC__stream_encoder_set_bits_per_sample(e->encoder.flac, bps);
-               FLAC__stream_encoder_set_sample_rate(e->encoder.flac, sample_rate);
-               FLAC__stream_encoder_set_blocksize(e->encoder.flac, options.blocksize);
-               FLAC__stream_encoder_set_apodization(e->encoder.flac, options.apodizations);
-               FLAC__stream_encoder_set_max_lpc_order(e->encoder.flac, options.max_lpc_order);
-               FLAC__stream_encoder_set_qlp_coeff_precision(e->encoder.flac, options.qlp_coeff_precision);
-               FLAC__stream_encoder_set_do_qlp_coeff_prec_search(e->encoder.flac, options.do_qlp_coeff_prec_search);
-               FLAC__stream_encoder_set_do_escape_coding(e->encoder.flac, options.do_escape_coding);
-               FLAC__stream_encoder_set_do_exhaustive_model_search(e->encoder.flac, options.do_exhaustive_model_search);
-               FLAC__stream_encoder_set_min_residual_partition_order(e->encoder.flac, options.min_residual_partition_order);
-               FLAC__stream_encoder_set_max_residual_partition_order(e->encoder.flac, options.max_residual_partition_order);
-               FLAC__stream_encoder_set_rice_parameter_search_dist(e->encoder.flac, options.rice_parameter_search_dist);
-               FLAC__stream_encoder_set_total_samples_estimate(e->encoder.flac, e->total_samples_to_encode);
-               FLAC__stream_encoder_set_metadata(e->encoder.flac, (num_metadata > 0)? metadata : 0, num_metadata);
-
-               FLAC__stream_encoder_disable_constant_subframes(e->encoder.flac, options.debug.disable_constant_subframes);
-               FLAC__stream_encoder_disable_fixed_subframes(e->encoder.flac, options.debug.disable_fixed_subframes);
-               FLAC__stream_encoder_disable_verbatim_subframes(e->encoder.flac, options.debug.disable_verbatim_subframes);
-
-               init_status = FLAC__stream_encoder_init_file(e->encoder.flac, e->is_stdout? 0 : e->outfilename, encoder_progress_callback, /*client_data=*/e);
-               if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
-                       print_error_with_init_status(e, "ERROR initializing encoder", init_status);
-                       if(FLAC__stream_encoder_get_state(e->encoder.flac) != FLAC__STREAM_ENCODER_IO_ERROR)
-                               e->outputfile_opened = true;
-                       if(0 != cuesheet)
-                               FLAC__metadata_object_delete(cuesheet);
-                       return false;
-               }
-               else
+               init_status = FLAC__stream_encoder_init_file(e->encoder, e->is_stdout? 0 : e->outfilename, encoder_progress_callback, /*client_data=*/e);
+       }
+
+       if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
+               print_error_with_init_status(e, "ERROR initializing encoder", init_status);
+               if(FLAC__stream_encoder_get_state(e->encoder) != FLAC__STREAM_ENCODER_IO_ERROR)
                        e->outputfile_opened = true;
+               if(0 != cuesheet)
+                       FLAC__metadata_object_delete(cuesheet);
+               return false;
        }
+       else
+               e->outputfile_opened = true;
 
        if(0 != cuesheet)
                FLAC__metadata_object_delete(cuesheet);
@@ -2049,12 +1955,7 @@ FLAC__bool EncoderSession_process(EncoderSession *e, const FLAC__int32 * const b
                }
        }
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg)
-               return OggFLAC__stream_encoder_process(e->encoder.ogg, buffer, samples);
-       else
-#endif
-       return FLAC__stream_encoder_process(e->encoder.flac, buffer, samples);
+       return FLAC__stream_encoder_process(e->encoder, buffer, samples);
 }
 
 FLAC__bool convert_to_seek_table_template(const char *requested_seek_points, int num_requested_seek_points, FLAC__StreamMetadata *cuesheet, EncoderSession *e)
@@ -2489,33 +2390,18 @@ void print_error_with_init_status(const EncoderSession *e, const char *message,
        flac__utils_printf(stderr, 1, "%*s init_status = %s\n", ilen, "", FLAC__StreamEncoderInitStatusString[init_status]);
 
        if(init_status == FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR) {
-#ifdef FLAC__HAS_OGG
-               if(e->use_ogg)
-                       state_string = OggFLAC__stream_encoder_get_resolved_state_string(e->encoder.ogg);
-               else
-#endif
-               state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder.flac);
+               state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder);
 
                flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", state_string);
 
                /* print out some more info for some errors: */
-               if(
-                       0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])
-#ifdef FLAC__HAS_OGG
-                       || 0 == strcmp(state_string, OggFLAC__StreamEncoderStateString[OggFLAC__STREAM_ENCODER_CLIENT_ERROR])
-#endif
-               ) {
+               if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])) {
                        flac__utils_printf(stderr, 1,
                                "\n"
                                "An error occurred while writing; the most common cause is that the disk is full.\n"
                        );
                }
-               else if(
-                       0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_IO_ERROR])
-#ifdef FLAC__HAS_OGG
-                       || 0 == strcmp(state_string, OggFLAC__StreamEncoderStateString[OggFLAC__STREAM_ENCODER_IO_ERROR])
-#endif
-               ) {
+               else if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_IO_ERROR])) {
                        flac__utils_printf(stderr, 1,
                                "\n"
                                "An error occurred opening the output file; it is likely that the output\n"
@@ -2542,22 +2428,12 @@ void print_error_with_state(const EncoderSession *e, const char *message)
 
        flac__utils_printf(stderr, 1, "\n%s: %s\n", e->inbasefilename, message);
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg)
-               state_string = OggFLAC__stream_encoder_get_resolved_state_string(e->encoder.ogg);
-       else
-#endif
-       state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder.flac);
+       state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder);
 
        flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", state_string);
 
        /* print out some more info for some errors: */
-       if(
-               0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])
-#ifdef FLAC__HAS_OGG
-               || 0 == strcmp(state_string, OggFLAC__StreamEncoderStateString[OggFLAC__STREAM_ENCODER_CLIENT_ERROR])
-#endif
-       ) {
+       if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])) {
                flac__utils_printf(stderr, 1,
                        "\n"
                        "An error occurred while writing; the most common cause is that the disk is full.\n"
@@ -2574,12 +2450,7 @@ void print_verify_error(EncoderSession *e)
        FLAC__int32 expected;
        FLAC__int32 got;
 
-#ifdef FLAC__HAS_OGG
-       if(e->use_ogg)
-               OggFLAC__stream_encoder_get_verify_decoder_error_stats(e->encoder.ogg, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
-       else
-#endif
-       FLAC__stream_encoder_get_verify_decoder_error_stats(e->encoder.flac, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
+       FLAC__stream_encoder_get_verify_decoder_error_stats(e->encoder, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
 
        flac__utils_printf(stderr, 1, "%s: ERROR: mismatch in decoded data, verify FAILED!\n", e->inbasefilename);
        flac__utils_printf(stderr, 1, "       Absolute sample=%u, frame=%u, channel=%u, sample=%u, expected %d, got %d\n", (unsigned)absolute_sample, frame_number, channel, sample, expected, got);
index 6a3aa09..f91a4d0 100644 (file)
@@ -51,7 +51,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 ..\..\obj\release\lib\grabbag_static.lib ..\..\obj\release\lib\libOggFLAC_static.lib ..\..\obj\release\lib\libFLAC_static.lib ..\..\obj\release\lib\replaygain_analysis_static.lib ..\..\obj\release\lib\replaygain_synthesis_static.lib ..\..\obj\release\lib\getopt_static.lib ..\..\obj\release\lib\utf8_static.lib ..\..\obj\release\lib\ogg_static.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 ..\..\obj\release\lib\grabbag_static.lib ..\..\obj\release\lib\libFLAC_static.lib ..\..\obj\release\lib\replaygain_analysis_static.lib ..\..\obj\release\lib\replaygain_synthesis_static.lib ..\..\obj\release\lib\getopt_static.lib ..\..\obj\release\lib\utf8_static.lib ..\..\obj\release\lib\ogg_static.lib /nologo /subsystem:console /machine:I386\r
 \r
 !ELSEIF  "$(CFG)" == "flac - Win32 Debug"\r
 \r
@@ -76,7 +76,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 ..\..\obj\debug\lib\grabbag_static.lib ..\..\obj\debug\lib\libOggFLAC_static.lib ..\..\obj\debug\lib\libFLAC_static.lib ..\..\obj\debug\lib\replaygain_analysis_static.lib ..\..\obj\debug\lib\replaygain_synthesis_static.lib ..\..\obj\debug\lib\getopt_static.lib ..\..\obj\debug\lib\utf8_static.lib ..\..\obj\release\lib\ogg_static.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 ..\..\obj\debug\lib\grabbag_static.lib ..\..\obj\debug\lib\libFLAC_static.lib ..\..\obj\debug\lib\replaygain_analysis_static.lib ..\..\obj\debug\lib\replaygain_synthesis_static.lib ..\..\obj\debug\lib\getopt_static.lib ..\..\obj\debug\lib\utf8_static.lib ..\..\obj\release\lib\ogg_static.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
 \r
 !ENDIF \r
 \r
index c02e87b..c37dd30 100644 (file)
@@ -44,8 +44,6 @@ libFLAC___la_LDFLAGS = -version-info 6:0:0
 libFLAC___la_LIBADD = ../libFLAC/libFLAC.la
 
 libFLAC___la_SOURCES = \
-       file_decoder.cpp \
-       file_encoder.cpp \
        metadata.cpp \
        stream_decoder.cpp \
        stream_encoder.cpp
index 73f7ce2..8bdb59c 100644 (file)
@@ -38,8 +38,6 @@ LIB_NAME = libFLAC++
 INCLUDES = -I$(topdir)/include
 
 SRCS_CPP = \
-       file_decoder.cpp \
-       file_encoder.cpp \
        metadata.cpp \
        stream_decoder.cpp \
        stream_encoder.cpp
diff --git a/src/libFLAC++/file_decoder.cpp b/src/libFLAC++/file_decoder.cpp
deleted file mode 100644 (file)
index 8281428..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* libFLAC++ - Free Lossless Audio Codec library
- * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "FLAC++/decoder.h"
-#include "FLAC/assert.h"
-
-#ifdef _MSC_VER
-// warning C4800: 'int' : forcing to bool 'true' or 'false' (performance warning)
-#pragma warning ( disable : 4800 )
-#endif
-
-namespace FLAC {
-       namespace Decoder {
-
-               File::File():
-                       Stream()
-               { }
-
-               File::~File()
-               {
-               }
-
-               ::FLAC__StreamDecoderInitStatus File::init(FILE *file)
-               {
-                       FLAC__ASSERT(0 != decoder_);
-                       return ::FLAC__stream_decoder_init_FILE(decoder_, file, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
-               }
-
-               ::FLAC__StreamDecoderInitStatus File::init(const char *filename)
-               {
-                       FLAC__ASSERT(0 != decoder_);
-                       return ::FLAC__stream_decoder_init_file(decoder_, filename, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
-               }
-
-               ::FLAC__StreamDecoderInitStatus File::init(const std::string &filename)
-               {
-                       return init(filename.c_str());
-               }
-
-               // This is a dummy to satisfy the pure virtual from Stream; the
-               // read callback will never be called since we are initializing
-               // with FLAC__stream_decoder_init_FILE() or
-               // FLAC__stream_decoder_init_file() and those supply the read
-               // callback internally.
-               ::FLAC__StreamDecoderReadStatus File::read_callback(FLAC__byte buffer[], unsigned *bytes)
-               {
-                       (void)buffer, (void)bytes;
-                       FLAC__ASSERT(false);
-                       return ::FLAC__STREAM_DECODER_READ_STATUS_ABORT; // double protection
-               }
-
-       }
-}
diff --git a/src/libFLAC++/file_encoder.cpp b/src/libFLAC++/file_encoder.cpp
deleted file mode 100644 (file)
index 89a4164..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* libFLAC++ - Free Lossless Audio Codec library
- * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "FLAC++/encoder.h"
-#include "FLAC/assert.h"
-
-#ifdef _MSC_VER
-// warning C4800: 'int' : forcing to bool 'true' or 'false' (performance warning)
-#pragma warning ( disable : 4800 )
-#endif
-
-namespace FLAC {
-       namespace Encoder {
-
-               File::File():
-                       Stream()
-               { }
-
-               File::~File()
-               {
-               }
-
-               ::FLAC__StreamEncoderInitStatus File::init(FILE *file)
-               {
-                       FLAC__ASSERT(is_valid());
-                       return ::FLAC__stream_encoder_init_FILE(encoder_, file, progress_callback_, /*client_data=*/(void*)this);
-               }
-
-               ::FLAC__StreamEncoderInitStatus File::init(const char *filename)
-               {
-                       FLAC__ASSERT(is_valid());
-                       return ::FLAC__stream_encoder_init_file(encoder_, filename, progress_callback_, /*client_data=*/(void*)this);
-               }
-
-               ::FLAC__StreamEncoderInitStatus File::init(const std::string &filename)
-               {
-                       return init(filename.c_str());
-               }
-
-               // This is a dummy to satisfy the pure virtual from Stream; the
-               // read callback will never be called since we are initializing
-               // with FLAC__stream_decoder_init_FILE() or
-               // FLAC__stream_decoder_init_file() and those supply the read
-               // callback internally.
-               ::FLAC__StreamEncoderWriteStatus File::write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame)
-               {
-                       (void)buffer, (void)bytes, (void)samples, (void)current_frame;
-                       FLAC__ASSERT(false);
-                       return ::FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; // double protection
-               }
-
-               void File::progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate)
-               {
-                       (void)bytes_written, (void)samples_written, (void)frames_written, (void)total_frames_estimate;
-               }
-
-               void File::progress_callback_(const ::FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data)
-               {
-                       (void)encoder;
-                       FLAC__ASSERT(0 != client_data);
-                       File *instance = reinterpret_cast<File *>(client_data);
-                       FLAC__ASSERT(0 != instance);
-                       instance->progress_callback(bytes_written, samples_written, frames_written, total_frames_estimate);
-               }
-
-       }
-}
index ce76786..46607f7 100644 (file)
@@ -92,14 +92,6 @@ LINK32=link.exe
 # PROP Default_Filter "cpp"\r
 # Begin Source File\r
 \r
-SOURCE=.\file_decoder.cpp\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\file_encoder.cpp\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\metadata.cpp\r
 # End Source File\r
 # Begin Source File\r
index 2146872..b47cda0 100644 (file)
@@ -85,14 +85,6 @@ LIB32=link.exe -lib
 # PROP Default_Filter "cpp"\r
 # Begin Source File\r
 \r
-SOURCE=.\file_decoder.cpp\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\file_encoder.cpp\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\metadata.cpp\r
 # End Source File\r
 # Begin Source File\r
index da9efe8..d20a8a0 100644 (file)
 namespace FLAC {
        namespace Decoder {
 
+               // ------------------------------------------------------------
+               //
+               // Stream
+               //
+               // ------------------------------------------------------------
+
                Stream::Stream():
                decoder_(::FLAC__stream_decoder_new())
                { }
@@ -67,6 +73,12 @@ namespace FLAC {
                        return 0 != decoder_;
                }
 
+               bool Stream::set_serial_number(long value)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return (bool)::FLAC__stream_decoder_set_serial_number(decoder_, value);
+               }
+
                bool Stream::set_md5_checking(bool value)
                {
                        FLAC__ASSERT(is_valid());
@@ -163,6 +175,12 @@ namespace FLAC {
                        return ::FLAC__stream_decoder_init_stream(decoder_, read_callback_, seek_callback_, tell_callback_, length_callback_, eof_callback_, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
                }
 
+               ::FLAC__StreamDecoderInitStatus Stream::init_ogg()
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_decoder_init_ogg_stream(decoder_, read_callback_, seek_callback_, tell_callback_, length_callback_, eof_callback_, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
+               }
+
                void Stream::finish()
                {
                        FLAC__ASSERT(is_valid());
@@ -311,5 +329,65 @@ namespace FLAC {
                        instance->error_callback(status);
                }
 
+               // ------------------------------------------------------------
+               //
+               // File
+               //
+               // ------------------------------------------------------------
+
+               File::File():
+                       Stream()
+               { }
+
+               File::~File()
+               {
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init(FILE *file)
+               {
+                       FLAC__ASSERT(0 != decoder_);
+                       return ::FLAC__stream_decoder_init_FILE(decoder_, file, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init(const char *filename)
+               {
+                       FLAC__ASSERT(0 != decoder_);
+                       return ::FLAC__stream_decoder_init_file(decoder_, filename, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init(const std::string &filename)
+               {
+                       return init(filename.c_str());
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init_ogg(FILE *file)
+               {
+                       FLAC__ASSERT(0 != decoder_);
+                       return ::FLAC__stream_decoder_init_ogg_FILE(decoder_, file, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init_ogg(const char *filename)
+               {
+                       FLAC__ASSERT(0 != decoder_);
+                       return ::FLAC__stream_decoder_init_ogg_file(decoder_, filename, write_callback_, metadata_callback_, error_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamDecoderInitStatus File::init_ogg(const std::string &filename)
+               {
+                       return init_ogg(filename.c_str());
+               }
+
+               // This is a dummy to satisfy the pure virtual from Stream; the
+               // read callback will never be called since we are initializing
+               // with FLAC__stream_decoder_init_FILE() or
+               // FLAC__stream_decoder_init_file() and those supply the read
+               // callback internally.
+               ::FLAC__StreamDecoderReadStatus File::read_callback(FLAC__byte buffer[], unsigned *bytes)
+               {
+                       (void)buffer, (void)bytes;
+                       FLAC__ASSERT(false);
+                       return ::FLAC__STREAM_DECODER_READ_STATUS_ABORT; // double protection
+               }
+
        }
 }
index a33a6f3..c0aca1b 100644 (file)
 namespace FLAC {
        namespace Encoder {
 
+               // ------------------------------------------------------------
+               //
+               // Stream
+               //
+               // ------------------------------------------------------------
+
                Stream::Stream():
                encoder_(::FLAC__stream_encoder_new())
                { }
@@ -68,6 +74,12 @@ namespace FLAC {
                        return 0 != encoder_;
                }
 
+               bool Stream::set_serial_number(long value)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return (bool)::FLAC__stream_encoder_set_serial_number(encoder_, value);
+               }
+
                bool Stream::set_verify(bool value)
                {
                        FLAC__ASSERT(is_valid());
@@ -333,6 +345,12 @@ namespace FLAC {
                        return ::FLAC__stream_encoder_init_stream(encoder_, write_callback_, seek_callback_, tell_callback_, metadata_callback_, /*client_data=*/(void*)this);
                }
 
+               ::FLAC__StreamEncoderInitStatus Stream::init_ogg()
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_encoder_init_ogg_stream(encoder_, read_callback_, write_callback_, seek_callback_, tell_callback_, metadata_callback_, /*client_data=*/(void*)this);
+               }
+
                void Stream::finish()
                {
                        FLAC__ASSERT(is_valid());
@@ -351,6 +369,12 @@ namespace FLAC {
                        return (bool)::FLAC__stream_encoder_process_interleaved(encoder_, buffer, samples);
                }
 
+               ::FLAC__StreamEncoderReadStatus Stream::read_callback(FLAC__byte buffer[], unsigned *bytes)
+               {
+                       (void)buffer, (void)bytes;
+                       return ::FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED;
+               }
+
                ::FLAC__StreamEncoderSeekStatus Stream::seek_callback(FLAC__uint64 absolute_byte_offset)
                {
                        (void)absolute_byte_offset;
@@ -368,6 +392,15 @@ namespace FLAC {
                        (void)metadata;
                }
 
+               ::FLAC__StreamEncoderReadStatus Stream::read_callback_(const ::FLAC__StreamEncoder *encoder, FLAC__byte buffer[], unsigned *bytes, void *client_data)
+               {
+                       (void)encoder;
+                       FLAC__ASSERT(0 != client_data);
+                       Stream *instance = reinterpret_cast<Stream *>(client_data);
+                       FLAC__ASSERT(0 != instance);
+                       return instance->read_callback(buffer, bytes);
+               }
+
                ::FLAC__StreamEncoderWriteStatus Stream::write_callback_(const ::FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data)
                {
                        (void)encoder;
@@ -404,5 +437,79 @@ namespace FLAC {
                        instance->metadata_callback(metadata);
                }
 
+               // ------------------------------------------------------------
+               //
+               // File
+               //
+               // ------------------------------------------------------------
+
+               File::File():
+                       Stream()
+               { }
+
+               File::~File()
+               {
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init(FILE *file)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_encoder_init_FILE(encoder_, file, progress_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init(const char *filename)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_encoder_init_file(encoder_, filename, progress_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init(const std::string &filename)
+               {
+                       return init(filename.c_str());
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init_ogg(FILE *file)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_encoder_init_ogg_FILE(encoder_, file, progress_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init_ogg(const char *filename)
+               {
+                       FLAC__ASSERT(is_valid());
+                       return ::FLAC__stream_encoder_init_ogg_file(encoder_, filename, progress_callback_, /*client_data=*/(void*)this);
+               }
+
+               ::FLAC__StreamEncoderInitStatus File::init_ogg(const std::string &filename)
+               {
+                       return init_ogg(filename.c_str());
+               }
+
+               // This is a dummy to satisfy the pure virtual from Stream; the
+               // read callback will never be called since we are initializing
+               // with FLAC__stream_decoder_init_FILE() or
+               // FLAC__stream_decoder_init_file() and those supply the read
+               // callback internally.
+               ::FLAC__StreamEncoderWriteStatus File::write_callback(const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame)
+               {
+                       (void)buffer, (void)bytes, (void)samples, (void)current_frame;
+                       FLAC__ASSERT(false);
+                       return ::FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; // double protection
+               }
+
+               void File::progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate)
+               {
+                       (void)bytes_written, (void)samples_written, (void)frames_written, (void)total_frames_estimate;
+               }
+
+               void File::progress_callback_(const ::FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data)
+               {
+                       (void)encoder;
+                       FLAC__ASSERT(0 != client_data);
+                       File *instance = reinterpret_cast<File *>(client_data);
+                       FLAC__ASSERT(0 != instance);
+                       instance->progress_callback(bytes_written, samples_written, frames_written, total_frames_estimate);
+               }
+
        }
 }
index c84f0a1..1b13746 100644 (file)
@@ -80,6 +80,13 @@ EXTRA_DIST = \
        libFLAC_static.dsp \
        libFLAC.m4
 
+if FLaC__HAS_OGG
+extra_ogg_sources = \
+       ogg_decoder_aspect.c \
+       ogg_encoder_aspect.c \
+       ogg_helper.c \
+       ogg_mapping.c
+endif
 # see 'http://www.gnu.org/software/libtool/manual.html#Libtool-versioning' for numbering convention
 libFLAC_la_LDFLAGS = -version-info 8:0:0 -lm $(LOCAL_EXTRA_LDFLAGS)
 libFLAC_la_SOURCES = \
@@ -98,4 +105,5 @@ libFLAC_la_SOURCES = \
        stream_decoder.c \
        stream_encoder.c \
        stream_encoder_framing.c \
-       window.c
+       window.c \
+       $(extra_ogg_sources)
index aac6f11..5b94ab3 100644 (file)
@@ -73,6 +73,10 @@ SRCS_C = \
        memory.c \
        metadata_iterators.c \
        metadata_object.c \
+       ogg_decoder_aspect.c \
+       ogg_encoder_aspect.c \
+       ogg_helper.c \
+       ogg_mapping.c \
        stream_decoder.c \
        stream_encoder.c \
        stream_encoder_framing.c \
index 9541a7d..023cc50 100644 (file)
@@ -41,5 +41,9 @@ noinst_HEADERS = \
        md5.h \
        memory.h \
        metadata.h \
+       ogg_decoder_aspect.h \
+       ogg_encoder_aspect.h \
+       ogg_helper.h \
+       ogg_mapping.h \
        stream_encoder_framing.h \
        window.h
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef OggFLAC__PRIVATE__OGG_DECODER_ASPECT_H
-#define OggFLAC__PRIVATE__OGG_DECODER_ASPECT_H
+#ifndef FLAC__PRIVATE__OGG_DECODER_ASPECT_H
+#define FLAC__PRIVATE__OGG_DECODER_ASPECT_H
 
 #include <ogg/ogg.h>
 
 #include "FLAC/ordinals.h"
 #include "FLAC/stream_decoder.h" /* for FLAC__StreamDecoderReadStatus */
-#include "OggFLAC/stream_decoder.h"
 
-typedef struct OggFLAC__OggDecoderAspect {
+typedef struct FLAC__OggDecoderAspect {
        /* these are storage for values that can be set through the API */
        FLAC__bool use_first_serial_number;
        long serial_number;
@@ -53,28 +52,28 @@ typedef struct OggFLAC__OggDecoderAspect {
        ogg_page working_page;
        FLAC__bool have_working_packet; /* only if true will the following vars be valid */
        ogg_packet working_packet; /* as we work through the packet we will move working_packet.packet forward and working_packet.bytes down */
-} OggFLAC__OggDecoderAspect;
+} FLAC__OggDecoderAspect;
 
-void OggFLAC__ogg_decoder_aspect_set_serial_number(OggFLAC__OggDecoderAspect *aspect, long value);
-void OggFLAC__ogg_decoder_aspect_set_defaults(OggFLAC__OggDecoderAspect *aspect);
-FLAC__bool OggFLAC__ogg_decoder_aspect_init(OggFLAC__OggDecoderAspect *aspect);
-void OggFLAC__ogg_decoder_aspect_finish(OggFLAC__OggDecoderAspect *aspect);
-void OggFLAC__ogg_decoder_aspect_flush(OggFLAC__OggDecoderAspect *aspect);
-void OggFLAC__ogg_decoder_aspect_reset(OggFLAC__OggDecoderAspect *aspect);
+void FLAC__ogg_decoder_aspect_set_serial_number(FLAC__OggDecoderAspect *aspect, long value);
+void FLAC__ogg_decoder_aspect_set_defaults(FLAC__OggDecoderAspect *aspect);
+FLAC__bool FLAC__ogg_decoder_aspect_init(FLAC__OggDecoderAspect *aspect);
+void FLAC__ogg_decoder_aspect_finish(FLAC__OggDecoderAspect *aspect);
+void FLAC__ogg_decoder_aspect_flush(FLAC__OggDecoderAspect *aspect);
+void FLAC__ogg_decoder_aspect_reset(FLAC__OggDecoderAspect *aspect);
 
 typedef enum {
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_OK = 0,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR,
-       OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR
-} OggFLAC__OggDecoderAspectReadStatus;
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK = 0,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR,
+       FLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR
+} FLAC__OggDecoderAspectReadStatus;
 
-typedef OggFLAC__OggDecoderAspectReadStatus (*OggFLAC__OggDecoderAspectReadCallbackProxy)(const void *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
+typedef FLAC__OggDecoderAspectReadStatus (*FLAC__OggDecoderAspectReadCallbackProxy)(const void *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
 
-OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wrapper(OggFLAC__OggDecoderAspect *aspect, FLAC__byte buffer[], unsigned *bytes, OggFLAC__OggDecoderAspectReadCallbackProxy read_callback, const OggFLAC__StreamDecoder *decoder, void *client_data);
+FLAC__OggDecoderAspectReadStatus FLAC__ogg_decoder_aspect_read_callback_wrapper(FLAC__OggDecoderAspect *aspect, FLAC__byte buffer[], unsigned *bytes, FLAC__OggDecoderAspectReadCallbackProxy read_callback, const FLAC__StreamDecoder *decoder, void *client_data);
 
 #endif
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef OggFLAC__PRIVATE__OGG_ENCODER_ASPECT_H
-#define OggFLAC__PRIVATE__OGG_ENCODER_ASPECT_H
+#ifndef FLAC__PRIVATE__OGG_ENCODER_ASPECT_H
+#define FLAC__PRIVATE__OGG_ENCODER_ASPECT_H
 
 #include <ogg/ogg.h>
 
 #include "FLAC/ordinals.h"
 #include "FLAC/stream_encoder.h" /* for FLAC__StreamEncoderWriteStatus */
 
-typedef struct OggFLAC__OggEncoderAspect {
+typedef struct FLAC__OggEncoderAspect {
        /* these are storage for values that can be set through the API */
        long serial_number;
        unsigned num_metadata;
@@ -48,15 +48,15 @@ typedef struct OggFLAC__OggEncoderAspect {
        FLAC__bool seen_magic; /* true if we've seen the fLaC magic in the write callback yet */
        FLAC__bool is_first_packet;
        FLAC__uint64 samples_written;
-} OggFLAC__OggEncoderAspect;
+} FLAC__OggEncoderAspect;
 
-void OggFLAC__ogg_encoder_aspect_set_serial_number(OggFLAC__OggEncoderAspect *aspect, long value);
-FLAC__bool OggFLAC__ogg_encoder_aspect_set_num_metadata(OggFLAC__OggEncoderAspect *aspect, unsigned value);
-void OggFLAC__ogg_encoder_aspect_set_defaults(OggFLAC__OggEncoderAspect *aspect);
-FLAC__bool OggFLAC__ogg_encoder_aspect_init(OggFLAC__OggEncoderAspect *aspect);
-void OggFLAC__ogg_encoder_aspect_finish(OggFLAC__OggEncoderAspect *aspect);
+void FLAC__ogg_encoder_aspect_set_serial_number(FLAC__OggEncoderAspect *aspect, long value);
+FLAC__bool FLAC__ogg_encoder_aspect_set_num_metadata(FLAC__OggEncoderAspect *aspect, unsigned value);
+void FLAC__ogg_encoder_aspect_set_defaults(FLAC__OggEncoderAspect *aspect);
+FLAC__bool FLAC__ogg_encoder_aspect_init(FLAC__OggEncoderAspect *aspect);
+void FLAC__ogg_encoder_aspect_finish(FLAC__OggEncoderAspect *aspect);
 
-typedef FLAC__StreamEncoderWriteStatus (*OggFLAC__OggEncoderAspectWriteCallbackProxy)(const void *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data);
+typedef FLAC__StreamEncoderWriteStatus (*FLAC__OggEncoderAspectWriteCallbackProxy)(const void *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data);
 
-FLAC__StreamEncoderWriteStatus OggFLAC__ogg_encoder_aspect_write_callback_wrapper(OggFLAC__OggEncoderAspect *aspect, const FLAC__uint64 total_samples_estimate, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, OggFLAC__OggEncoderAspectWriteCallbackProxy write_callback, void *encoder, void *client_data);
+FLAC__StreamEncoderWriteStatus FLAC__ogg_encoder_aspect_write_callback_wrapper(FLAC__OggEncoderAspect *aspect, const FLAC__uint64 total_samples_estimate, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, FLAC__OggEncoderAspectWriteCallbackProxy write_callback, void *encoder, void *client_data);
 #endif
similarity index 72%
rename from src/libOggFLAC/include/private/ogg_helper.h
rename to src/libFLAC/include/private/ogg_helper.h
index 5a0cfaf..98a1429 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef OggFLAC__PRIVATE__OGG_HELPER_H
-#define OggFLAC__PRIVATE__OGG_HELPER_H
+#ifndef FLAC__PRIVATE__OGG_HELPER_H
+#define FLAC__PRIVATE__OGG_HELPER_H
 
 #include <ogg/ogg.h>
-#include "OggFLAC/stream_encoder.h" /* for OggFLAC__StreamEncoder */
+#include "FLAC/stream_encoder.h" /* for FLAC__StreamEncoder */
 
 void simple_ogg_page__init(ogg_page *page);
 void simple_ogg_page__clear(ogg_page *page);
-FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, OggFLAC__StreamEncoderReadCallback read_callback, void *client_data);
-FLAC__bool simple_ogg_page__set_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderWriteCallback write_callback, void *client_data);
+FLAC__bool simple_ogg_page__get_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderReadCallback read_callback, void *client_data);
+FLAC__bool simple_ogg_page__set_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderWriteCallback write_callback, void *client_data);
 
 #endif
similarity index 70%
rename from src/libOggFLAC/include/private/ogg_mapping.h
rename to src/libFLAC/include/private/ogg_mapping.h
index b0cf210..dbc86e1 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef OggFLAC__PRIVATE__OGG_MAPPING_H
-#define OggFLAC__PRIVATE__OGG_MAPPING_H
+#ifndef FLAC__PRIVATE__OGG_MAPPING_H
+#define FLAC__PRIVATE__OGG_MAPPING_H
 
 #include "FLAC/ordinals.h"
 
 /** The length of the 'FLAC' magic in bytes. */
-#define OggFLAC__MAPPING_PACKET_TYPE_LENGTH (1u)
+#define FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH (1u)
 
-extern const unsigned OggFLAC__MAPPING_PACKET_TYPE_LEN; /* = 8 bits */
+extern const unsigned FLAC__OGG_MAPPING_PACKET_TYPE_LEN; /* = 8 bits */
 
-extern const FLAC__byte OggFLAC__MAPPING_FIRST_HEADER_PACKET_TYPE; /* = 0x7f */
+extern const FLAC__byte FLAC__OGG_MAPPING_FIRST_HEADER_PACKET_TYPE; /* = 0x7f */
 
 /** The length of the 'FLAC' magic in bytes. */
-#define OggFLAC__MAPPING_MAGIC_LENGTH (4u)
+#define FLAC__OGG_MAPPING_MAGIC_LENGTH (4u)
 
-extern const FLAC__byte * const OggFLAC__MAPPING_MAGIC; /* = "FLAC" */
+extern const FLAC__byte * const FLAC__OGG_MAPPING_MAGIC; /* = "FLAC" */
 
-extern const unsigned OggFLAC__MAPPING_VERSION_MAJOR_LEN; /* = 8 bits */
-extern const unsigned OggFLAC__MAPPING_VERSION_MINOR_LEN; /* = 8 bits */
+extern const unsigned FLAC__OGG_MAPPING_VERSION_MAJOR_LEN; /* = 8 bits */
+extern const unsigned FLAC__OGG_MAPPING_VERSION_MINOR_LEN; /* = 8 bits */
 
 /** The length of the Ogg FLAC mapping major version number in bytes. */
-#define OggFLAC__MAPPING_VERSION_MAJOR_LENGTH (1u)
+#define FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH (1u)
 
 /** The length of the Ogg FLAC mapping minor version number in bytes. */
-#define OggFLAC__MAPPING_VERSION_MINOR_LENGTH (1u)
+#define FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH (1u)
 
-extern const unsigned OggFLAC__MAPPING_NUM_HEADERS_LEN; /* = 16 bits */
+extern const unsigned FLAC__OGG_MAPPING_NUM_HEADERS_LEN; /* = 16 bits */
 
 /** The length of the #-of-header-packets number bytes. */
-#define OggFLAC__MAPPING_NUM_HEADERS_LENGTH (2u)
+#define FLAC__OGG_MAPPING_NUM_HEADERS_LENGTH (2u)
 
 #endif
index d4c5559..e1a9f1a 100644 (file)
@@ -33,6 +33,9 @@
 #define FLAC__PROTECTED__STREAM_DECODER_H
 
 #include "FLAC/stream_decoder.h"
+#ifdef FLAC__HAS_OGG
+#include "private/ogg_decoder_aspect.h"
+#endif
 
 typedef struct FLAC__StreamDecoderProtected {
        FLAC__StreamDecoderState state;
@@ -42,6 +45,9 @@ typedef struct FLAC__StreamDecoderProtected {
        unsigned sample_rate; /* in Hz */
        unsigned blocksize; /* in samples (per channel) */
        FLAC__bool md5_checking; /* if true, generate MD5 signature of decoded data and compare against signature in the STREAMINFO metadata block */
+#ifdef FLAC__HAS_OGG
+       FLAC__OggDecoderAspect ogg_decoder_aspect;
+#endif
 } FLAC__StreamDecoderProtected;
 
 /*
index 5233b20..683a81e 100644 (file)
@@ -33,6 +33,9 @@
 #define FLAC__PROTECTED__STREAM_ENCODER_H
 
 #include "FLAC/stream_encoder.h"
+#ifdef FLAC__HAS_OGG
+#include "private/ogg_encoder_aspect.h"
+#endif
 
 #ifndef FLAC__INTEGER_ONLY_LIBRARY
 
@@ -98,6 +101,9 @@ typedef struct FLAC__StreamEncoderProtected {
        FLAC__StreamMetadata **metadata;
        unsigned num_metadata_blocks;
        FLAC__uint64 streaminfo_offset, seektable_offset, audio_offset;
+#ifdef FLAC__HAS_OGG
+       FLAC__OggEncoderAspect ogg_encoder_aspect;
+#endif
 } FLAC__StreamEncoderProtected;
 
 #endif
index 961592a..0a0f842 100644 (file)
@@ -235,6 +235,22 @@ SOURCE=.\metadata_object.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\ogg_decoder_aspect.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_encoder_aspect.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_helper.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_mapping.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\stream_decoder.c\r
 # End Source File\r
 # Begin Source File\r
@@ -303,6 +319,22 @@ SOURCE=.\include\private\metadata.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\include\private\ogg_decoder_aspect.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_encoder_aspect.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_helper.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_mapping.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\include\private\stream_encoder_framing.h\r
 # End Source File\r
 # Begin Source File\r
index 170c179..7a188b8 100644 (file)
@@ -228,6 +228,22 @@ SOURCE=.\metadata_object.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\ogg_decoder_aspect.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_encoder_aspect.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_helper.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ogg_mapping.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\stream_decoder.c\r
 # End Source File\r
 # Begin Source File\r
@@ -296,6 +312,22 @@ SOURCE=.\include\private\metadata.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\include\private\ogg_decoder_aspect.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_encoder_aspect.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_helper.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\include\private\ogg_mapping.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\include\private\stream_encoder_framing.h\r
 # End Source File\r
 # Begin Source File\r
similarity index 77%
rename from src/libOggFLAC/ogg_decoder_aspect.c
rename to src/libFLAC/ogg_decoder_aspect.c
index a85dd72..45ff60e 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
@@ -49,7 +49,7 @@
  *
  ***********************************************************************/
 
-FLAC__bool OggFLAC__ogg_decoder_aspect_init(OggFLAC__OggDecoderAspect *aspect)
+FLAC__bool FLAC__ogg_decoder_aspect_init(FLAC__OggDecoderAspect *aspect)
 {
        /* we will determine the serial number later if necessary */
        if(ogg_stream_init(&aspect->stream_state, aspect->serial_number) != 0)
@@ -69,24 +69,24 @@ FLAC__bool OggFLAC__ogg_decoder_aspect_init(OggFLAC__OggDecoderAspect *aspect)
        return true;
 }
 
-void OggFLAC__ogg_decoder_aspect_finish(OggFLAC__OggDecoderAspect *aspect)
+void FLAC__ogg_decoder_aspect_finish(FLAC__OggDecoderAspect *aspect)
 {
        (void)ogg_sync_clear(&aspect->sync_state);
        (void)ogg_stream_clear(&aspect->stream_state);
 }
 
-void OggFLAC__ogg_decoder_aspect_set_serial_number(OggFLAC__OggDecoderAspect *aspect, long value)
+void FLAC__ogg_decoder_aspect_set_serial_number(FLAC__OggDecoderAspect *aspect, long value)
 {
        aspect->use_first_serial_number = false;
        aspect->serial_number = value;
 }
 
-void OggFLAC__ogg_decoder_aspect_set_defaults(OggFLAC__OggDecoderAspect *aspect)
+void FLAC__ogg_decoder_aspect_set_defaults(FLAC__OggDecoderAspect *aspect)
 {
        aspect->use_first_serial_number = true;
 }
 
-void OggFLAC__ogg_decoder_aspect_flush(OggFLAC__OggDecoderAspect *aspect)
+void FLAC__ogg_decoder_aspect_flush(FLAC__OggDecoderAspect *aspect)
 {
        (void)ogg_stream_reset(&aspect->stream_state);
        (void)ogg_sync_reset(&aspect->sync_state);
@@ -94,15 +94,15 @@ void OggFLAC__ogg_decoder_aspect_flush(OggFLAC__OggDecoderAspect *aspect)
        aspect->have_working_page = false;
 }
 
-void OggFLAC__ogg_decoder_aspect_reset(OggFLAC__OggDecoderAspect *aspect)
+void FLAC__ogg_decoder_aspect_reset(FLAC__OggDecoderAspect *aspect)
 {
-       OggFLAC__ogg_decoder_aspect_flush(aspect);
+       FLAC__ogg_decoder_aspect_flush(aspect);
 
        if(aspect->use_first_serial_number)
                aspect->need_serial_number = true;
 }
 
-OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wrapper(OggFLAC__OggDecoderAspect *aspect, FLAC__byte buffer[], unsigned *bytes, OggFLAC__OggDecoderAspectReadCallbackProxy read_callback, const OggFLAC__StreamDecoder *decoder, void *client_data)
+FLAC__OggDecoderAspectReadStatus FLAC__ogg_decoder_aspect_read_callback_wrapper(FLAC__OggDecoderAspect *aspect, FLAC__byte buffer[], unsigned *bytes, FLAC__OggDecoderAspectReadCallbackProxy read_callback, const FLAC__StreamDecoder *decoder, void *client_data)
 {
        static const unsigned OGG_BYTES_CHUNK = 8192;
        const unsigned bytes_requested = *bytes;
@@ -161,25 +161,25 @@ OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wr
                                if (ret > 0) {
                                        aspect->have_working_packet = true;
                                        /* if it is the first header packet, check for magic and a supported Ogg FLAC mapping version */
-                                       if (aspect->working_packet.bytes > 0 && aspect->working_packet.packet[0] == OggFLAC__MAPPING_FIRST_HEADER_PACKET_TYPE) {
+                                       if (aspect->working_packet.bytes > 0 && aspect->working_packet.packet[0] == FLAC__OGG_MAPPING_FIRST_HEADER_PACKET_TYPE) {
                                                const FLAC__byte *b = aspect->working_packet.packet;
                                                const unsigned header_length =
-                                                       OggFLAC__MAPPING_PACKET_TYPE_LENGTH +
-                                                       OggFLAC__MAPPING_MAGIC_LENGTH +
-                                                       OggFLAC__MAPPING_VERSION_MAJOR_LENGTH +
-                                                       OggFLAC__MAPPING_VERSION_MINOR_LENGTH +
-                                                       OggFLAC__MAPPING_NUM_HEADERS_LENGTH;
+                                                       FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH +
+                                                       FLAC__OGG_MAPPING_MAGIC_LENGTH +
+                                                       FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH +
+                                                       FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH +
+                                                       FLAC__OGG_MAPPING_NUM_HEADERS_LENGTH;
                                                if (aspect->working_packet.bytes < (long)header_length)
-                                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC;
-                                               b += OggFLAC__MAPPING_PACKET_TYPE_LENGTH;
-                                               if (memcmp(b, OggFLAC__MAPPING_MAGIC, OggFLAC__MAPPING_MAGIC_LENGTH))
-                                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC;
-                                               b += OggFLAC__MAPPING_MAGIC_LENGTH;
+                                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC;
+                                               b += FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH;
+                                               if (memcmp(b, FLAC__OGG_MAPPING_MAGIC, FLAC__OGG_MAPPING_MAGIC_LENGTH))
+                                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC;
+                                               b += FLAC__OGG_MAPPING_MAGIC_LENGTH;
                                                aspect->version_major = (unsigned)(*b);
-                                               b += OggFLAC__MAPPING_VERSION_MAJOR_LENGTH;
+                                               b += FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH;
                                                aspect->version_minor = (unsigned)(*b);
                                                if (aspect->version_major != 1)
-                                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION;
+                                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION;
                                                aspect->working_packet.packet += header_length;
                                                aspect->working_packet.bytes -= header_length;
                                        }
@@ -189,7 +189,7 @@ OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wr
                                }
                                else { /* ret < 0 */
                                        /* lost sync, we'll leave the working page for the next call */
-                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC;
+                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC;
                                }
                        }
                }
@@ -214,19 +214,19 @@ OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wr
                                char *oggbuf = ogg_sync_buffer(&aspect->sync_state, ogg_bytes_to_read);
 
                                if(0 == oggbuf) {
-                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR;
+                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR;
                                }
                                else {
                                        unsigned ogg_bytes_read = ogg_bytes_to_read;
 
                                        switch(read_callback(decoder, (FLAC__byte*)oggbuf, &ogg_bytes_read, client_data)) {
-                                               case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_OK:
+                                               case FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK:
                                                        break;
-                                               case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM:
+                                               case FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM:
                                                        aspect->end_of_stream = true;
                                                        break;
-                                               case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT:
-                                                       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;
+                                               case FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT:
+                                                       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;
                                                default:
                                                        FLAC__ASSERT(0);
                                        }
@@ -234,20 +234,20 @@ OggFLAC__OggDecoderAspectReadStatus OggFLAC__ogg_decoder_aspect_read_callback_wr
                                        if(ogg_sync_wrote(&aspect->sync_state, ogg_bytes_read) < 0) {
                                                /* double protection; this will happen if the read callback returns more bytes than the max requested, which would overflow Ogg's internal buffer */
                                                FLAC__ASSERT(0);
-                                               return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR;
+                                               return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR;
                                        }
                                }
                        }
                        else { /* ret < 0 */
                                /* lost sync, bail out */
-                               return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC;
+                               return FLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC;
                        }
                }
        }
 
        if (aspect->end_of_stream && *bytes == 0) {
-               return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM;
+               return FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM;
        }
 
-       return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_OK;
+       return FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK;
 }
similarity index 80%
rename from src/libOggFLAC/ogg_encoder_aspect.c
rename to src/libFLAC/ogg_encoder_aspect.c
index 9f7b25a..c6eb285 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2002,2003,2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,8 +38,8 @@
 #include "private/ogg_encoder_aspect.h"
 #include "private/ogg_mapping.h"
 
-static const FLAC__byte OggFLAC__MAPPING_VERSION_MAJOR = 1;
-static const FLAC__byte OggFLAC__MAPPING_VERSION_MINOR = 0;
+static const FLAC__byte FLAC__OGG_MAPPING_VERSION_MAJOR = 1;
+static const FLAC__byte FLAC__OGG_MAPPING_VERSION_MINOR = 0;
 
 /***********************************************************************
  *
@@ -47,7 +47,7 @@ static const FLAC__byte OggFLAC__MAPPING_VERSION_MINOR = 0;
  *
  ***********************************************************************/
 
-FLAC__bool OggFLAC__ogg_encoder_aspect_init(OggFLAC__OggEncoderAspect *aspect)
+FLAC__bool FLAC__ogg_encoder_aspect_init(FLAC__OggEncoderAspect *aspect)
 {
        /* we will determine the serial number later if necessary */
        if(ogg_stream_init(&aspect->stream_state, aspect->serial_number) != 0)
@@ -60,20 +60,20 @@ FLAC__bool OggFLAC__ogg_encoder_aspect_init(OggFLAC__OggEncoderAspect *aspect)
        return true;
 }
 
-void OggFLAC__ogg_encoder_aspect_finish(OggFLAC__OggEncoderAspect *aspect)
+void FLAC__ogg_encoder_aspect_finish(FLAC__OggEncoderAspect *aspect)
 {
        (void)ogg_stream_clear(&aspect->stream_state);
        /*@@@ what about the page? */
 }
 
-void OggFLAC__ogg_encoder_aspect_set_serial_number(OggFLAC__OggEncoderAspect *aspect, long value)
+void FLAC__ogg_encoder_aspect_set_serial_number(FLAC__OggEncoderAspect *aspect, long value)
 {
        aspect->serial_number = value;
 }
 
-FLAC__bool OggFLAC__ogg_encoder_aspect_set_num_metadata(OggFLAC__OggEncoderAspect *aspect, unsigned value)
+FLAC__bool FLAC__ogg_encoder_aspect_set_num_metadata(FLAC__OggEncoderAspect *aspect, unsigned value)
 {
-       if(value < (1u << OggFLAC__MAPPING_NUM_HEADERS_LEN)) {
+       if(value < (1u << FLAC__OGG_MAPPING_NUM_HEADERS_LEN)) {
                aspect->num_metadata = value;
                return true;
        }
@@ -81,7 +81,7 @@ FLAC__bool OggFLAC__ogg_encoder_aspect_set_num_metadata(OggFLAC__OggEncoderAspec
                return false;
 }
 
-void OggFLAC__ogg_encoder_aspect_set_defaults(OggFLAC__OggEncoderAspect *aspect)
+void FLAC__ogg_encoder_aspect_set_defaults(FLAC__OggEncoderAspect *aspect)
 {
        aspect->serial_number = 0;
        aspect->num_metadata = 0;
@@ -108,7 +108,7 @@ void OggFLAC__ogg_encoder_aspect_set_defaults(OggFLAC__OggEncoderAspect *aspect)
  * separate write callback for the fLaC magic, and then separate write
  * callbacks for each metadata block and audio frame.
  */
-FLAC__StreamEncoderWriteStatus OggFLAC__ogg_encoder_aspect_write_callback_wrapper(OggFLAC__OggEncoderAspect *aspect, const FLAC__uint64 total_samples_estimate, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, OggFLAC__OggEncoderAspectWriteCallbackProxy write_callback, void *encoder, void *client_data)
+FLAC__StreamEncoderWriteStatus FLAC__ogg_encoder_aspect_write_callback_wrapper(FLAC__OggEncoderAspect *aspect, const FLAC__uint64 total_samples_estimate, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, FLAC__OggEncoderAspectWriteCallbackProxy write_callback, void *encoder, void *client_data)
 {
        /* WATCHOUT:
         * This depends on the behavior of FLAC__StreamEncoder that 'samples'
@@ -123,11 +123,11 @@ FLAC__StreamEncoderWriteStatus OggFLAC__ogg_encoder_aspect_write_callback_wrappe
        if(aspect->seen_magic) {
                ogg_packet packet;
                FLAC__byte synthetic_first_packet_body[
-                       OggFLAC__MAPPING_PACKET_TYPE_LENGTH +
-                       OggFLAC__MAPPING_MAGIC_LENGTH +
-                       OggFLAC__MAPPING_VERSION_MAJOR_LENGTH +
-                       OggFLAC__MAPPING_VERSION_MINOR_LENGTH +
-                       OggFLAC__MAPPING_NUM_HEADERS_LENGTH +
+                       FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH +
+                       FLAC__OGG_MAPPING_MAGIC_LENGTH +
+                       FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH +
+                       FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH +
+                       FLAC__OGG_MAPPING_NUM_HEADERS_LENGTH +
                        FLAC__STREAM_SYNC_LENGTH +
                        FLAC__STREAM_METADATA_HEADER_LENGTH +
                        FLAC__STREAM_METADATA_STREAMINFO_LENGTH
@@ -147,17 +147,17 @@ FLAC__StreamEncoderWriteStatus OggFLAC__ogg_encoder_aspect_write_callback_wrappe
                                return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
                        }
                        /* add first header packet type */
-                       *b = OggFLAC__MAPPING_FIRST_HEADER_PACKET_TYPE;
-                       b += OggFLAC__MAPPING_PACKET_TYPE_LENGTH;
+                       *b = FLAC__OGG_MAPPING_FIRST_HEADER_PACKET_TYPE;
+                       b += FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH;
                        /* add 'FLAC' mapping magic */
-                       memcpy(b, OggFLAC__MAPPING_MAGIC, OggFLAC__MAPPING_MAGIC_LENGTH);
-                       b += OggFLAC__MAPPING_MAGIC_LENGTH;
+                       memcpy(b, FLAC__OGG_MAPPING_MAGIC, FLAC__OGG_MAPPING_MAGIC_LENGTH);
+                       b += FLAC__OGG_MAPPING_MAGIC_LENGTH;
                        /* add Ogg FLAC mapping major version number */
-                       memcpy(b, &OggFLAC__MAPPING_VERSION_MAJOR, OggFLAC__MAPPING_VERSION_MAJOR_LENGTH);
-                       b += OggFLAC__MAPPING_VERSION_MAJOR_LENGTH;
+                       memcpy(b, &FLAC__OGG_MAPPING_VERSION_MAJOR, FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH);
+                       b += FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH;
                        /* add Ogg FLAC mapping minor version number */
-                       memcpy(b, &OggFLAC__MAPPING_VERSION_MINOR, OggFLAC__MAPPING_VERSION_MINOR_LENGTH);
-                       b += OggFLAC__MAPPING_VERSION_MINOR_LENGTH;
+                       memcpy(b, &FLAC__OGG_MAPPING_VERSION_MINOR, FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH);
+                       b += FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH;
                        /* add number of header packets */
                        *b = (FLAC__byte)(aspect->num_metadata >> 8);
                        b++;
similarity index 77%
rename from src/libOggFLAC/ogg_helper.c
rename to src/libFLAC/ogg_helper.c
index ca98555..edac05d 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
 #include "protected/stream_encoder.h"
 
 
-static FLAC__bool full_read_(OggFLAC__StreamEncoder *encoder, FLAC__byte *buffer, unsigned bytes, OggFLAC__StreamEncoderReadCallback read_callback, void *client_data)
+static FLAC__bool full_read_(FLAC__StreamEncoder *encoder, FLAC__byte *buffer, unsigned bytes, FLAC__StreamEncoderReadCallback read_callback, void *client_data)
 {
        while(bytes > 0) {
                unsigned bytes_read = bytes;
                switch(read_callback(encoder, buffer, &bytes_read, client_data)) {
-                       case OggFLAC__STREAM_ENCODER_READ_STATUS_CONTINUE:
+                       case FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE:
                                bytes -= bytes_read;
                                buffer += bytes_read;
                                break;
-                       case OggFLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM:
+                       case FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM:
                                if(bytes_read == 0) {
-                                       encoder->protected_->state = OggFLAC__STREAM_ENCODER_OGG_ERROR;
+                                       encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
                                        return false;
                                }
                                bytes -= bytes_read;
                                buffer += bytes_read;
                                break;
-                       case OggFLAC__STREAM_ENCODER_READ_STATUS_ABORT:
-                               encoder->protected_->state = OggFLAC__STREAM_ENCODER_CLIENT_ERROR;
+                       case FLAC__STREAM_ENCODER_READ_STATUS_ABORT:
+                               encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
                                return false;
-                       case OggFLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED:
+                       case FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED:
                                return false;
                        default:
                                /* double protection: */
                                FLAC__ASSERT(0);
-                               encoder->protected_->state = OggFLAC__STREAM_ENCODER_CLIENT_ERROR;
+                               encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
                                return false;
                }
        }
@@ -90,7 +90,7 @@ void simple_ogg_page__clear(ogg_page *page)
        simple_ogg_page__init(page);
 }
 
-FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, OggFLAC__StreamEncoderReadCallback read_callback, void *client_data)
+FLAC__bool simple_ogg_page__get_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderReadCallback read_callback, void *client_data)
 {
        static const unsigned OGG_HEADER_FIXED_PORTION_LEN = 27;
        static const unsigned OGG_MAX_HEADER_LEN = 27/*OGG_HEADER_FIXED_PORTION_LEN*/ + 255;
@@ -107,13 +107,13 @@ FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
                return false;
        if((seek_status = seek_callback((FLAC__StreamEncoder*)encoder, position, client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
                if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-                       encoder->protected_->state = OggFLAC__STREAM_ENCODER_CLIENT_ERROR;
+                       encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
                return false;
        }
 
        /* allocate space for the page header */
        if(0 == (page->header = (unsigned char *)malloc(OGG_MAX_HEADER_LEN))) {
-               encoder->protected_->state = OggFLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
+               encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
                return false;
        }
 
@@ -131,7 +131,7 @@ FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
                memcmp(page->header+6, "\0\0\0\0\0\0\0\0", 8) || /* granulepos is non-zero */
                page->header[26] == 0                            /* packet is 0-size */
        ) {
-               encoder->protected_->state = OggFLAC__STREAM_ENCODER_OGG_ERROR;
+               encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
                return false;
        }
 
@@ -145,7 +145,7 @@ FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
                /* check to see that it specifies a single packet */
                for(i = 0; i < (unsigned)page->header[26] - 1; i++) {
                        if(page->header[i + OGG_HEADER_FIXED_PORTION_LEN] != 255) {
-                               encoder->protected_->state = OggFLAC__STREAM_ENCODER_OGG_ERROR;
+                               encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
                                return false;
                        }
                }
@@ -155,7 +155,7 @@ FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
 
        /* allocate space for the page body */
        if(0 == (page->body = (unsigned char *)malloc(page->body_len))) {
-               encoder->protected_->state = OggFLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
+               encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
                return false;
        }
 
@@ -167,14 +167,14 @@ FLAC__bool simple_ogg_page__get_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
        memcpy(crc, page->header+22, 4);
        ogg_page_checksum_set(page);
        if(memcmp(crc, page->header+22, 4)) {
-               encoder->protected_->state = OggFLAC__STREAM_ENCODER_OGG_ERROR;
+               encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
                return false;
        }
 
        return true;
 }
 
-FLAC__bool simple_ogg_page__set_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderWriteCallback write_callback, void *client_data)
+FLAC__bool simple_ogg_page__set_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderWriteCallback write_callback, void *client_data)
 {
        FLAC__StreamEncoderSeekStatus seek_status;
 
@@ -188,7 +188,7 @@ FLAC__bool simple_ogg_page__set_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
                return false;
        if((seek_status = seek_callback((FLAC__StreamEncoder*)encoder, position, client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
                if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-                       encoder->protected_->state = OggFLAC__STREAM_ENCODER_CLIENT_ERROR;
+                       encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
                return false;
        }
 
@@ -196,7 +196,7 @@ FLAC__bool simple_ogg_page__set_at(OggFLAC__StreamEncoder *encoder, FLAC__uint64
 
        /* re-write the page */
        if(write_callback((FLAC__StreamEncoder*)encoder, page->header, page->header_len, 0, 0, client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-               encoder->protected_->state = OggFLAC__STREAM_ENCODER_CLIENT_ERROR;
+               encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
                return false;
        }
 
similarity index 77%
rename from src/libOggFLAC/ogg_mapping.c
rename to src/libFLAC/ogg_mapping.c
index bfd27ad..0a9cd0e 100644 (file)
@@ -1,4 +1,4 @@
-/* libOggFLAC - Free Lossless Audio Codec + Ogg library
+/* libFLAC - Free Lossless Audio Codec
  * Copyright (C) 2004,2005,2006  Josh Coalson
  *
  * Redistribution and use in source and binary forms, with or without
 
 #include "private/ogg_mapping.h"
 
-const unsigned OggFLAC__MAPPING_PACKET_TYPE_LEN = 8; /* bits */
+const unsigned FLAC__OGG_MAPPING_PACKET_TYPE_LEN = 8; /* bits */
 
-const FLAC__byte OggFLAC__MAPPING_FIRST_HEADER_PACKET_TYPE = 0x7f;
+const FLAC__byte FLAC__OGG_MAPPING_FIRST_HEADER_PACKET_TYPE = 0x7f;
 
-const FLAC__byte * const OggFLAC__MAPPING_MAGIC = (const FLAC__byte * const)"FLAC";
+const FLAC__byte * const FLAC__OGG_MAPPING_MAGIC = (const FLAC__byte * const)"FLAC";
 
-const unsigned OggFLAC__MAPPING_VERSION_MAJOR_LEN = 8; /* bits */
-const unsigned OggFLAC__MAPPING_VERSION_MINOR_LEN = 8; /* bits */
+const unsigned FLAC__OGG_MAPPING_VERSION_MAJOR_LEN = 8; /* bits */
+const unsigned FLAC__OGG_MAPPING_VERSION_MINOR_LEN = 8; /* bits */
 
-const unsigned OggFLAC__MAPPING_NUM_HEADERS_LEN = 16; /* bits */
+const unsigned FLAC__OGG_MAPPING_NUM_HEADERS_LEN = 16; /* bits */
index 40c09aa..be71f09 100644 (file)
 #define FLAC__U64L(x) x##LLU
 #endif
 
+
+/* technically this should be in an "export.c" but this is convenient enough */
+int FLAC_API_SUPPORTS_OGG_FLAC =
+#if FLAC__HAS_OGG
+       1
+#else
+       0
+#endif
+;
+
+
 /***********************************************************************
  *
  * Private static data
@@ -113,9 +124,16 @@ static FLAC__bool read_subframe_verbatim_(FLAC__StreamDecoder *decoder, unsigned
 static FLAC__bool read_residual_partitioned_rice_(FLAC__StreamDecoder *decoder, unsigned predictor_order, unsigned partition_order, FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, FLAC__int32 *residual);
 static FLAC__bool read_zero_padding_(FLAC__StreamDecoder *decoder);
 static FLAC__bool read_callback_(FLAC__byte buffer[], unsigned *bytes, void *client_data);
+#ifdef FLAC__HAS_OGG
+static FLAC__StreamDecoderReadStatus read_callback_ogg_aspect_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes);
+static FLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
+#endif
 static FLAC__StreamDecoderWriteStatus write_audio_frame_to_client_(FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[]);
 static void send_error_to_client_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status);
 static FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample);
+#ifdef FLAC__HAS_OGG
+static FLAC__bool seek_to_absolute_sample_ogg_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample);
+#endif
 static FLAC__StreamDecoderReadStatus file_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
 static FLAC__StreamDecoderSeekStatus file_seek_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
 static FLAC__StreamDecoderTellStatus file_tell_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
@@ -129,6 +147,9 @@ static FLAC__bool file_eof_callback_(const FLAC__StreamDecoder *decoder, void *c
  ***********************************************************************/
 
 typedef struct FLAC__StreamDecoderPrivate {
+#ifdef FLAC__HAS_OGG
+       FLAC__bool is_ogg;
+#endif
        FLAC__StreamDecoderReadCallback read_callback;
        FLAC__StreamDecoderSeekCallback seek_callback;
        FLAC__StreamDecoderTellCallback tell_callback;
@@ -178,6 +199,9 @@ typedef struct FLAC__StreamDecoderPrivate {
        FLAC__uint64 first_frame_offset; /* hint to the seek routine of where in the stream the first audio frame starts */
        FLAC__uint64 target_sample;
        unsigned unparseable_frame_count; /* used to tell whether we're decoding a future version of FLAC or just got a bad sync */
+#ifdef FLAC__HAS_OGG
+       FLAC__bool got_a_frame; /* hack needed in Ogg FLAC seek routine to check when process_single() actually writes a frame */
+#endif
 } FLAC__StreamDecoderPrivate;
 
 /***********************************************************************
@@ -192,6 +216,7 @@ FLAC_API const char * const FLAC__StreamDecoderStateString[] = {
        "FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC",
        "FLAC__STREAM_DECODER_READ_FRAME",
        "FLAC__STREAM_DECODER_END_OF_STREAM",
+       "FLAC__STREAM_DECODER_OGG_ERROR",
        "FLAC__STREAM_DECODER_SEEK_ERROR",
        "FLAC__STREAM_DECODER_ABORTED",
        "FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR",
@@ -200,6 +225,7 @@ FLAC_API const char * const FLAC__StreamDecoderStateString[] = {
 
 FLAC_API const char * const FLAC__StreamDecoderInitStatusString[] = {
        "FLAC__STREAM_DECODER_INIT_STATUS_OK",
+       "FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER",
        "FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS",
        "FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR",
        "FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE",
@@ -340,7 +366,7 @@ FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder)
  *
  ***********************************************************************/
 
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
+static FLAC__StreamDecoderInitStatus init_stream_internal_(
        FLAC__StreamDecoder *decoder,
        FLAC__StreamDecoderReadCallback read_callback,
        FLAC__StreamDecoderSeekCallback seek_callback,
@@ -350,7 +376,8 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        FLAC__StreamDecoderWriteCallback write_callback,
        FLAC__StreamDecoderMetadataCallback metadata_callback,
        FLAC__StreamDecoderErrorCallback error_callback,
-       void *client_data
+       void *client_data,
+       FLAC__bool is_ogg
 )
 {
        FLAC__ASSERT(0 != decoder);
@@ -358,6 +385,11 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
                return FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED;
 
+#ifndef FLAC__HAS_OGG
+       if(is_ogg)
+               return FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER;
+#endif
+
        if(
                0 == read_callback ||
                0 == write_callback ||
@@ -366,6 +398,12 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        )
                return FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS;
 
+#ifdef FLAC__HAS_OGG
+       decoder->private_->is_ogg = is_ogg;
+       if(is_ogg && !FLAC__ogg_decoder_aspect_init(&decoder->protected_->ogg_decoder_aspect))
+               return decoder->protected_->state = FLAC__STREAM_DECODER_OGG_ERROR;
+#endif
+
        /*
         * get the CPU info and set the function pointers
         */
@@ -436,15 +474,72 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        return FLAC__STREAM_DECODER_INIT_STATUS_OK;
 }
 
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
        FLAC__StreamDecoder *decoder,
-       FILE *file,
+       FLAC__StreamDecoderReadCallback read_callback,
+       FLAC__StreamDecoderSeekCallback seek_callback,
+       FLAC__StreamDecoderTellCallback tell_callback,
+       FLAC__StreamDecoderLengthCallback length_callback,
+       FLAC__StreamDecoderEofCallback eof_callback,
        FLAC__StreamDecoderWriteCallback write_callback,
        FLAC__StreamDecoderMetadataCallback metadata_callback,
        FLAC__StreamDecoderErrorCallback error_callback,
        void *client_data
 )
 {
+       return init_stream_internal_(
+               decoder,
+               read_callback,
+               seek_callback,
+               tell_callback,
+               length_callback,
+               eof_callback,
+               write_callback,
+               metadata_callback,
+               error_callback,
+               client_data,
+               /*is_ogg=*/false
+       );
+}
+
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
+       FLAC__StreamDecoder *decoder,
+       FLAC__StreamDecoderReadCallback read_callback,
+       FLAC__StreamDecoderSeekCallback seek_callback,
+       FLAC__StreamDecoderTellCallback tell_callback,
+       FLAC__StreamDecoderLengthCallback length_callback,
+       FLAC__StreamDecoderEofCallback eof_callback,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+)
+{
+       return init_stream_internal_(
+               decoder,
+               read_callback,
+               seek_callback,
+               tell_callback,
+               length_callback,
+               eof_callback,
+               write_callback,
+               metadata_callback,
+               error_callback,
+               client_data,
+               /*is_ogg=*/true
+       );
+}
+
+static FLAC__StreamDecoderInitStatus init_FILE_internal_(
+       FLAC__StreamDecoder *decoder,
+       FILE *file,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data,
+       FLAC__bool is_ogg
+)
+{
        FLAC__ASSERT(0 != decoder);
        FLAC__ASSERT(0 != file);
 
@@ -464,7 +559,7 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
 
        decoder->private_->file = file;
 
-       return FLAC__stream_decoder_init_stream(
+       return init_stream_internal_(
                decoder,
                file_read_callback_,
                decoder->private_->file == stdin? 0: file_seek_callback_,
@@ -474,19 +569,45 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
                write_callback,
                metadata_callback,
                error_callback,
-               client_data
+               client_data,
+               is_ogg
        );
 }
 
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
        FLAC__StreamDecoder *decoder,
-       const char *filename,
+       FILE *file,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+)
+{
+       return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false);
+}
+
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
+       FLAC__StreamDecoder *decoder,
+       FILE *file,
        FLAC__StreamDecoderWriteCallback write_callback,
        FLAC__StreamDecoderMetadataCallback metadata_callback,
        FLAC__StreamDecoderErrorCallback error_callback,
        void *client_data
 )
 {
+       return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true);
+}
+
+static FLAC__StreamDecoderInitStatus init_file_internal_(
+       FLAC__StreamDecoder *decoder,
+       const char *filename,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data,
+       FLAC__bool is_ogg
+)
+{
        FILE *file;
 
        FLAC__ASSERT(0 != decoder);
@@ -507,7 +628,31 @@ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
        if(0 == file)
                return FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE;
 
-       return FLAC__stream_decoder_init_FILE(decoder, file, write_callback, metadata_callback, error_callback, client_data);
+       return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, is_ogg);
+}
+
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
+       FLAC__StreamDecoder *decoder,
+       const char *filename,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+)
+{
+       return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false);
+}
+
+FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
+       FLAC__StreamDecoder *decoder,
+       const char *filename,
+       FLAC__StreamDecoderWriteCallback write_callback,
+       FLAC__StreamDecoderMetadataCallback metadata_callback,
+       FLAC__StreamDecoderErrorCallback error_callback,
+       void *client_data
+)
+{
+       return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true);
 }
 
 FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder)
@@ -552,6 +697,11 @@ FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder)
        decoder->private_->output_capacity = 0;
        decoder->private_->output_channels = 0;
 
+#ifdef FLAC__HAS_OGG
+       if(decoder->private_->is_ogg)
+               FLAC__ogg_decoder_aspect_finish(&decoder->protected_->ogg_decoder_aspect);
+#endif
+
        if(0 != decoder->private_->file) {
                if(decoder->private_->file != stdin)
                        fclose(decoder->private_->file);
@@ -571,6 +721,23 @@ FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder)
        return !md5_failed;
 }
 
+FLAC_API FLAC__bool FLAC__stream_decoder_set_serial_number(FLAC__StreamDecoder *decoder, long value)
+{
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       FLAC__ASSERT(0 != decoder->protected_);
+       if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
+               return false;
+#ifdef FLAC__HAS_OGG
+       /* can't check decoder->private_->is_ogg since that's not set until init time */