[xiph-commits] r10761 - in trunk/xiph-qt/CAFLAC: . CAFLAC.xcodeproj
English.lproj src
arek at svn.xiph.org
arek at svn.xiph.org
Sat Jan 28 11:30:59 PST 2006
Author: arek
Date: 2006-01-28 11:30:37 -0800 (Sat, 28 Jan 2006)
New Revision: 10761
Added:
trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj/
trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj/project.pbxproj
trunk/xiph-qt/CAFLAC/CAFLAC_Prefix.pch
trunk/xiph-qt/CAFLAC/English.lproj/
trunk/xiph-qt/CAFLAC/English.lproj/InfoPlist.strings
trunk/xiph-qt/CAFLAC/Info.plist
trunk/xiph-qt/CAFLAC/PkgInfo
trunk/xiph-qt/CAFLAC/src/
trunk/xiph-qt/CAFLAC/src/CAFLACCodec.exp
trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.cpp
trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.h
trunk/xiph-qt/CAFLAC/src/CAFLACDecoderPublic.r
trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.cpp
trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.h
trunk/xiph-qt/CAFLAC/src/flac_entrypoints.cpp
trunk/xiph-qt/CAFLAC/src/flac_versions.h
Modified:
trunk/xiph-qt/CAFLAC/
Log:
FLAC decoder initial import.
Property changes on: trunk/xiph-qt/CAFLAC
___________________________________________________________________
Name: svn:ignore
+ build
Property changes on: trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj
___________________________________________________________________
Name: svn:ignore
+ *.mode*
*.pbxuser
Added: trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj/project.pbxproj
===================================================================
--- trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj/project.pbxproj 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/CAFLAC.xcodeproj/project.pbxproj 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,556 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 732019C008FEDE8B002000DA /* CAFLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019BA08FEDE8B002000DA /* CAFLACDecoder.cpp */; };
+ 732019CF08FEDF03002000DA /* CAFLACDecoderPublic.r in Rez */ = {isa = PBXBuildFile; fileRef = 732019C208FEDECB002000DA /* CAFLACDecoderPublic.r */; };
+ 732019D108FEDF3A002000DA /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 732019D008FEDF3A002000DA /* Ogg.framework */; };
+ 732019E208FEDF99002000DA /* ringbuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019DF08FEDF99002000DA /* ringbuffer.cpp */; };
+ 732019FF08FEDFAD002000DA /* ACBaseCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019E708FEDFAD002000DA /* ACBaseCodec.cpp */; };
+ 73201A0008FEDFAD002000DA /* ACCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019E908FEDFAD002000DA /* ACCodec.cpp */; };
+ 73201A0208FEDFAD002000DA /* GetCodecBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019EF08FEDFAD002000DA /* GetCodecBundle.cpp */; };
+ 73201A0308FEDFAD002000DA /* AudioCodecComponentGlue.c in Sources */ = {isa = PBXBuildFile; fileRef = 732019F108FEDFAD002000DA /* AudioCodecComponentGlue.c */; };
+ 73201A0508FEDFAD002000DA /* CABundleLocker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019F708FEDFAD002000DA /* CABundleLocker.cpp */; };
+ 73201A0608FEDFAD002000DA /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019FA08FEDFAD002000DA /* CADebugMacros.cpp */; };
+ 73201A0708FEDFAD002000DA /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 732019FD08FEDFAD002000DA /* CAStreamBasicDescription.cpp */; };
+ 73201A0908FEE030002000DA /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73201A0808FEE030002000DA /* AudioUnit.framework */; };
+ 73201A3908FEE41B002000DA /* FLAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73201A3808FEE41B002000DA /* FLAC.framework */; };
+ 734EA2400902851800D10866 /* XCACodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 734EA23E0902851800D10866 /* XCACodec.cpp */; };
+ 7350DCD2098BC2F100A5DAB4 /* CAOggFLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7350DCD0098BC2F100A5DAB4 /* CAOggFLACDecoder.cpp */; };
+ 7350DCD3098BC2F100A5DAB4 /* CAOggFLACDecoder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7350DCD1098BC2F100A5DAB4 /* CAOggFLACDecoder.h */; };
+ 7350DCD8098BC37D00A5DAB4 /* wrap_ogg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7350DCD5098BC37D00A5DAB4 /* wrap_ogg.cpp */; };
+ 739A57440901A47600CF57C1 /* FLAC++.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 739A57430901A47600CF57C1 /* FLAC++.framework */; };
+ 73A55FD8090008A2009FD166 /* PkgInfo in CopyFiles */ = {isa = PBXBuildFile; fileRef = 73A55FD7090008A2009FD166 /* PkgInfo */; };
+ 73AE0E550907D14A0008B8A1 /* flac_entrypoints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73AE0E540907D14A0008B8A1 /* flac_entrypoints.cpp */; };
+ 8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
+ 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXBuildStyle section */
+ 4F9091AC011F3BD104CA0E50 /* Development */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ ZERO_LINK = YES;
+ };
+ name = Development;
+ };
+ 4F9091AD011F3BD104CA0E50 /* Deployment */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+/* End PBXBuildStyle section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 73A55FDB09000902009FD166 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = Contents;
+ dstSubfolderSpec = 1;
+ files = (
+ 73A55FD8090008A2009FD166 /* PkgInfo in CopyFiles */,
+ 7350DCD3098BC2F100A5DAB4 /* CAOggFLACDecoder.h in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 73E597EC09000B7900357BC8 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 1;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+ 32BAE0B30371A71500C91783 /* CAFLAC_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAFLAC_Prefix.pch; sourceTree = "<group>"; };
+ 732019B908FEDE8B002000DA /* CAFLACCodec.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; name = CAFLACCodec.exp; path = src/CAFLACCodec.exp; sourceTree = "<group>"; };
+ 732019BA08FEDE8B002000DA /* CAFLACDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAFLACDecoder.cpp; path = src/CAFLACDecoder.cpp; sourceTree = "<group>"; };
+ 732019BB08FEDE8B002000DA /* CAFLACDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAFLACDecoder.h; path = src/CAFLACDecoder.h; sourceTree = "<group>"; };
+ 732019BE08FEDE8B002000DA /* flac_versions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = flac_versions.h; path = src/flac_versions.h; sourceTree = "<group>"; };
+ 732019C208FEDECB002000DA /* CAFLACDecoderPublic.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = CAFLACDecoderPublic.r; path = src/CAFLACDecoderPublic.r; sourceTree = "<group>"; };
+ 732019D008FEDF3A002000DA /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
+ 732019DF08FEDF99002000DA /* ringbuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ringbuffer.cpp; sourceTree = "<group>"; };
+ 732019E008FEDF99002000DA /* ringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = "<group>"; };
+ 732019E708FEDFAD002000DA /* ACBaseCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ACBaseCodec.cpp; sourceTree = "<group>"; };
+ 732019E808FEDFAD002000DA /* ACBaseCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACBaseCodec.h; sourceTree = "<group>"; };
+ 732019E908FEDFAD002000DA /* ACCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ACCodec.cpp; sourceTree = "<group>"; };
+ 732019EA08FEDFAD002000DA /* ACCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACCodec.h; sourceTree = "<group>"; };
+ 732019EB08FEDFAD002000DA /* ACCodecDispatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACCodecDispatch.h; sourceTree = "<group>"; };
+ 732019EC08FEDFAD002000DA /* ACCodecDispatchTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACCodecDispatchTypes.h; sourceTree = "<group>"; };
+ 732019EE08FEDFAD002000DA /* ACConditionalMacros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACConditionalMacros.h; sourceTree = "<group>"; };
+ 732019EF08FEDFAD002000DA /* GetCodecBundle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GetCodecBundle.cpp; sourceTree = "<group>"; };
+ 732019F008FEDFAD002000DA /* GetCodecBundle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GetCodecBundle.h; sourceTree = "<group>"; };
+ 732019F108FEDFAD002000DA /* AudioCodecComponentGlue.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = AudioCodecComponentGlue.c; sourceTree = "<group>"; };
+ 732019F708FEDFAD002000DA /* CABundleLocker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CABundleLocker.cpp; sourceTree = "<group>"; };
+ 732019F808FEDFAD002000DA /* CABundleLocker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CABundleLocker.h; sourceTree = "<group>"; };
+ 732019F908FEDFAD002000DA /* CAConditionalMacros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAConditionalMacros.h; sourceTree = "<group>"; };
+ 732019FA08FEDFAD002000DA /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; };
+ 732019FB08FEDFAD002000DA /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; };
+ 732019FC08FEDFAD002000DA /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; };
+ 732019FD08FEDFAD002000DA /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
+ 732019FE08FEDFAD002000DA /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
+ 73201A0808FEE030002000DA /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
+ 73201A3808FEE41B002000DA /* FLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FLAC.framework; path = ../../../../../../Library/Frameworks/FLAC.framework; sourceTree = SOURCE_ROOT; };
+ 734EA23D0902851800D10866 /* XCACodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XCACodec.h; path = ../common/XCACodec.h; sourceTree = "<group>"; };
+ 734EA23E0902851800D10866 /* XCACodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XCACodec.cpp; path = ../common/XCACodec.cpp; sourceTree = "<group>"; };
+ 7350DCB1098BC1EF00A5DAB4 /* XCAResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = XCAResources.r; path = ../resources/XCAResources.r; sourceTree = SOURCE_ROOT; };
+ 7350DCCA098BC29100A5DAB4 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../common/config.h; sourceTree = SOURCE_ROOT; };
+ 7350DCCB098BC29100A5DAB4 /* fccs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = fccs.h; path = ../common/fccs.h; sourceTree = SOURCE_ROOT; };
+ 7350DCCE098BC2A700A5DAB4 /* data_types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = data_types.h; path = ../common/data_types.h; sourceTree = SOURCE_ROOT; };
+ 7350DCD0098BC2F100A5DAB4 /* CAOggFLACDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAOggFLACDecoder.cpp; path = src/CAOggFLACDecoder.cpp; sourceTree = "<group>"; };
+ 7350DCD1098BC2F100A5DAB4 /* CAOggFLACDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAOggFLACDecoder.h; path = src/CAOggFLACDecoder.h; sourceTree = "<group>"; };
+ 7350DCD4098BC37D00A5DAB4 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; };
+ 7350DCD5098BC37D00A5DAB4 /* wrap_ogg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ogg.cpp; sourceTree = "<group>"; };
+ 7350DCD6098BC37D00A5DAB4 /* wrap_ogg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = wrap_ogg.h; sourceTree = "<group>"; };
+ 739A57430901A47600CF57C1 /* FLAC++.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "FLAC++.framework"; path = "../../../../../../Library/Frameworks/FLAC++.framework"; sourceTree = SOURCE_ROOT; };
+ 73A55FD7090008A2009FD166 /* PkgInfo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PkgInfo; sourceTree = "<group>"; };
+ 73AE0E540907D14A0008B8A1 /* flac_entrypoints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flac_entrypoints.cpp; path = src/flac_entrypoints.cpp; sourceTree = "<group>"; };
+ 73E597F70900114900357BC8 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = icon.icns; path = ../resources/icon.icns; sourceTree = SOURCE_ROOT; };
+ 73E597F80900114900357BC8 /* icon.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = icon.r; path = ../resources/icon.r; sourceTree = SOURCE_ROOT; };
+ 8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+ 8D01CCD20486CAD60068D4B7 /* CAFLAC.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CAFLAC.component; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */,
+ 732019D108FEDF3A002000DA /* Ogg.framework in Frameworks */,
+ 73201A0908FEE030002000DA /* AudioUnit.framework in Frameworks */,
+ 73201A3908FEE41B002000DA /* FLAC.framework in Frameworks */,
+ 739A57440901A47600CF57C1 /* FLAC++.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* CAFLAC */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB77ADFE841716C02AAC07 /* Source */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 732019DA08FEDF6D002000DA /* External Source */,
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
+ 19C28FB4FE9D528D11CA2CBB /* Products */,
+ );
+ name = CAFLAC;
+ sourceTree = "<group>";
+ };
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 732019D008FEDF3A002000DA /* Ogg.framework */,
+ 73201A3808FEE41B002000DA /* FLAC.framework */,
+ 739A57430901A47600CF57C1 /* FLAC++.framework */,
+ 73201A0808FEE030002000DA /* AudioUnit.framework */,
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 7350DCB1098BC1EF00A5DAB4 /* XCAResources.r */,
+ 73E597F70900114900357BC8 /* icon.icns */,
+ 73E597F80900114900357BC8 /* icon.r */,
+ 732019C208FEDECB002000DA /* CAFLACDecoderPublic.r */,
+ 8D01CCD10486CAD60068D4B7 /* Info.plist */,
+ 089C167DFE841241C02AAC07 /* InfoPlist.strings */,
+ 73A55FD7090008A2009FD166 /* PkgInfo */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 08FB77ADFE841716C02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 7350DCD0098BC2F100A5DAB4 /* CAOggFLACDecoder.cpp */,
+ 7350DCD1098BC2F100A5DAB4 /* CAOggFLACDecoder.h */,
+ 7350DCCE098BC2A700A5DAB4 /* data_types.h */,
+ 7350DCCA098BC29100A5DAB4 /* config.h */,
+ 7350DCCB098BC29100A5DAB4 /* fccs.h */,
+ 732019B908FEDE8B002000DA /* CAFLACCodec.exp */,
+ 32BAE0B30371A71500C91783 /* CAFLAC_Prefix.pch */,
+ 732019BE08FEDE8B002000DA /* flac_versions.h */,
+ 732019BB08FEDE8B002000DA /* CAFLACDecoder.h */,
+ 732019BA08FEDE8B002000DA /* CAFLACDecoder.cpp */,
+ 734EA23D0902851800D10866 /* XCACodec.h */,
+ 734EA23E0902851800D10866 /* XCACodec.cpp */,
+ 73AE0E540907D14A0008B8A1 /* flac_entrypoints.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 19C28FB4FE9D528D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D01CCD20486CAD60068D4B7 /* CAFLAC.component */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 732019DA08FEDF6D002000DA /* External Source */ = {
+ isa = PBXGroup;
+ children = (
+ 732019E308FEDFAD002000DA /* AppleSDK */,
+ 732019DC08FEDF99002000DA /* utils */,
+ );
+ name = "External Source";
+ sourceTree = "<group>";
+ };
+ 732019DC08FEDF99002000DA /* utils */ = {
+ isa = PBXGroup;
+ children = (
+ 7350DCD4098BC37D00A5DAB4 /* debug.h */,
+ 7350DCD5098BC37D00A5DAB4 /* wrap_ogg.cpp */,
+ 7350DCD6098BC37D00A5DAB4 /* wrap_ogg.h */,
+ 732019DF08FEDF99002000DA /* ringbuffer.cpp */,
+ 732019E008FEDF99002000DA /* ringbuffer.h */,
+ );
+ name = utils;
+ path = ../utils;
+ sourceTree = SOURCE_ROOT;
+ };
+ 732019E308FEDFAD002000DA /* AppleSDK */ = {
+ isa = PBXGroup;
+ children = (
+ 732019E408FEDFAD002000DA /* CoreAudio */,
+ );
+ name = AppleSDK;
+ path = ../AppleSDK;
+ sourceTree = SOURCE_ROOT;
+ };
+ 732019E408FEDFAD002000DA /* CoreAudio */ = {
+ isa = PBXGroup;
+ children = (
+ 732019E508FEDFAD002000DA /* AudioCodecs */,
+ 732019F608FEDFAD002000DA /* PublicUtility */,
+ );
+ path = CoreAudio;
+ sourceTree = "<group>";
+ };
+ 732019E508FEDFAD002000DA /* AudioCodecs */ = {
+ isa = PBXGroup;
+ children = (
+ 732019E608FEDFAD002000DA /* ACPublic */,
+ 732019F108FEDFAD002000DA /* AudioCodecComponentGlue.c */,
+ );
+ path = AudioCodecs;
+ sourceTree = "<group>";
+ };
+ 732019E608FEDFAD002000DA /* ACPublic */ = {
+ isa = PBXGroup;
+ children = (
+ 732019E708FEDFAD002000DA /* ACBaseCodec.cpp */,
+ 732019E808FEDFAD002000DA /* ACBaseCodec.h */,
+ 732019E908FEDFAD002000DA /* ACCodec.cpp */,
+ 732019EA08FEDFAD002000DA /* ACCodec.h */,
+ 732019EB08FEDFAD002000DA /* ACCodecDispatch.h */,
+ 732019EC08FEDFAD002000DA /* ACCodecDispatchTypes.h */,
+ 732019EE08FEDFAD002000DA /* ACConditionalMacros.h */,
+ 732019EF08FEDFAD002000DA /* GetCodecBundle.cpp */,
+ 732019F008FEDFAD002000DA /* GetCodecBundle.h */,
+ );
+ path = ACPublic;
+ sourceTree = "<group>";
+ };
+ 732019F608FEDFAD002000DA /* PublicUtility */ = {
+ isa = PBXGroup;
+ children = (
+ 732019F708FEDFAD002000DA /* CABundleLocker.cpp */,
+ 732019F808FEDFAD002000DA /* CABundleLocker.h */,
+ 732019F908FEDFAD002000DA /* CAConditionalMacros.h */,
+ 732019FA08FEDFAD002000DA /* CADebugMacros.cpp */,
+ 732019FB08FEDFAD002000DA /* CADebugMacros.h */,
+ 732019FC08FEDFAD002000DA /* CAMath.h */,
+ 732019FD08FEDFAD002000DA /* CAStreamBasicDescription.cpp */,
+ 732019FE08FEDFAD002000DA /* CAStreamBasicDescription.h */,
+ );
+ path = PublicUtility;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D01CCC60486CAD60068D4B7 /* CAFLAC */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 739EAEA708FEB331008D8013 /* Build configuration list for PBXNativeTarget "CAFLAC" */;
+ buildPhases = (
+ 8D01CCC90486CAD60068D4B7 /* Resources */,
+ 73A55FDB09000902009FD166 /* CopyFiles */,
+ 8D01CCCB0486CAD60068D4B7 /* Sources */,
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */,
+ 732019CD08FEDEF9002000DA /* Rez */,
+ 73E597EC09000B7900357BC8 /* CopyFiles */,
+ 73E598050900144C00357BC8 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = CAFLAC_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ PRODUCT_NAME = CAFLAC;
+ WRAPPER_EXTENSION = bundle;
+ };
+ dependencies = (
+ );
+ name = CAFLAC;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = CAFLAC;
+ productReference = 8D01CCD20486CAD60068D4B7 /* CAFLAC.component */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 739EAEAB08FEB331008D8013 /* Build configuration list for PBXProject "CAFLAC" */;
+ buildSettings = {
+ };
+ buildStyles = (
+ 4F9091AC011F3BD104CA0E50 /* Development */,
+ 4F9091AD011F3BD104CA0E50 /* Deployment */,
+ );
+ hasScannedForEncodings = 1;
+ mainGroup = 089C166AFE841209C02AAC07 /* CAFLAC */;
+ projectDirPath = "";
+ targets = (
+ 8D01CCC60486CAD60068D4B7 /* CAFLAC */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D01CCC90486CAD60068D4B7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 732019CD08FEDEF9002000DA /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 732019CF08FEDF03002000DA /* CAFLACDecoderPublic.r in Rez */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 73E598050900144C00357BC8 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 12;
+ files = (
+ );
+ inputPaths = (
+ ../resources/icon.r,
+ ../resources/icon.icns,
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cd ../resources\n${SYSTEM_DEVELOPER_TOOLS}/Rez -o \"${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}\"/$'Icon\\x0D' icon.r\n${SYSTEM_DEVELOPER_TOOLS}/SetFile -a CE \"${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}\"";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D01CCCB0486CAD60068D4B7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 732019C008FEDE8B002000DA /* CAFLACDecoder.cpp in Sources */,
+ 732019E208FEDF99002000DA /* ringbuffer.cpp in Sources */,
+ 732019FF08FEDFAD002000DA /* ACBaseCodec.cpp in Sources */,
+ 73201A0008FEDFAD002000DA /* ACCodec.cpp in Sources */,
+ 73201A0208FEDFAD002000DA /* GetCodecBundle.cpp in Sources */,
+ 73201A0308FEDFAD002000DA /* AudioCodecComponentGlue.c in Sources */,
+ 73201A0508FEDFAD002000DA /* CABundleLocker.cpp in Sources */,
+ 73201A0608FEDFAD002000DA /* CADebugMacros.cpp in Sources */,
+ 73201A0708FEDFAD002000DA /* CAStreamBasicDescription.cpp in Sources */,
+ 734EA2400902851800D10866 /* XCACodec.cpp in Sources */,
+ 73AE0E550907D14A0008B8A1 /* flac_entrypoints.cpp in Sources */,
+ 7350DCD2098BC2F100A5DAB4 /* CAOggFLACDecoder.cpp in Sources */,
+ 7350DCD8098BC37D00A5DAB4 /* wrap_ogg.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C167EFE841241C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 739EAEA808FEB331008D8013 /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ EXPORTED_SYMBOLS_FILE = src/CAFLACCodec.exp;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = CAFLAC_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Components";
+ PRODUCT_NAME = CAFLAC;
+ WRAPPER_EXTENSION = component;
+ ZERO_LINK = YES;
+ };
+ name = Development;
+ };
+ 739EAEA908FEB331008D8013 /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ EXPORTED_SYMBOLS_FILE = src/CAFLACCodec.exp;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = CAFLAC_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Components";
+ PRODUCT_NAME = CAFLAC;
+ WRAPPER_EXTENSION = component;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+ 739EAEAA08FEB331008D8013 /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXPORTED_SYMBOLS_FILE = src/CAFLACCodec.exp;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = CAFLAC_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Components";
+ PRODUCT_NAME = CAFLAC;
+ WRAPPER_EXTENSION = component;
+ };
+ name = Default;
+ };
+ 739EAEAC08FEB331008D8013 /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(FRAMEWORK_SEARCH_PATHS)",
+ "$(HOME)/Library/Frameworks",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS)",
+ __MACOSX__,
+ QT_IA32__VBR_BROKEN,
+ );
+ OTHER_CFLAGS = "-Wall";
+ OTHER_REZFLAGS = "-D TARGET_REZ_MAC_PPC=1";
+ };
+ name = Development;
+ };
+ 739EAEAD08FEB331008D8013 /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(FRAMEWORK_SEARCH_PATHS)",
+ "$(HOME)/Library/Frameworks",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS)",
+ __MACOSX__,
+ QT_IA32__VBR_BROKEN,
+ NDEBUG,
+ );
+ OTHER_CFLAGS = "-Wall";
+ OTHER_REZFLAGS = "-D TARGET_REZ_MAC_PPC=1";
+ };
+ name = Deployment;
+ };
+ 739EAEAE08FEB331008D8013 /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(FRAMEWORK_SEARCH_PATHS)",
+ "$(HOME)/Library/Frameworks",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS)",
+ __MACOSX__,
+ QT_IA32__VBR_BROKEN,
+ );
+ OTHER_CFLAGS = "-Wall";
+ OTHER_REZFLAGS = "-D TARGET_REZ_MAC_PPC=1";
+ };
+ name = Default;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 739EAEA708FEB331008D8013 /* Build configuration list for PBXNativeTarget "CAFLAC" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 739EAEA808FEB331008D8013 /* Development */,
+ 739EAEA908FEB331008D8013 /* Deployment */,
+ 739EAEAA08FEB331008D8013 /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Development;
+ };
+ 739EAEAB08FEB331008D8013 /* Build configuration list for PBXProject "CAFLAC" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 739EAEAC08FEB331008D8013 /* Development */,
+ 739EAEAD08FEB331008D8013 /* Deployment */,
+ 739EAEAE08FEB331008D8013 /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Development;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
Added: trunk/xiph-qt/CAFLAC/CAFLAC_Prefix.pch
===================================================================
--- trunk/xiph-qt/CAFLAC/CAFLAC_Prefix.pch 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/CAFLAC_Prefix.pch 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'CAFLAC' target in the 'CAFLAC' project.
+//
+
+#include <Carbon/Carbon.h>
Added: trunk/xiph-qt/CAFLAC/English.lproj/InfoPlist.strings
===================================================================
(Binary files differ)
Property changes on: trunk/xiph-qt/CAFLAC/English.lproj/InfoPlist.strings
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/xiph-qt/CAFLAC/Info.plist
===================================================================
--- trunk/xiph-qt/CAFLAC/Info.plist 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/Info.plist 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>CAFLAC</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>org.xiph.xiph-qt.caflac</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleSignature</key>
+ <string>adec</string>
+ <key>CFBundleVersion</key>
+ <string>0.1.1</string>
+ <key>CFBundleShortVersionString</key>
+ <string>0.1.1</string>
+ <key>CSResourcesFileMapped</key>
+ <true/>
+</dict>
+</plist>
Added: trunk/xiph-qt/CAFLAC/PkgInfo
===================================================================
--- trunk/xiph-qt/CAFLAC/PkgInfo 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/PkgInfo 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1 @@
+thngadec
\ No newline at end of file
Added: trunk/xiph-qt/CAFLAC/src/CAFLACCodec.exp
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAFLACCodec.exp 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAFLACCodec.exp 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,2 @@
+_CAFLACDecoderEntry
+_CAOggFLACDecoderEntry
Added: trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.cpp
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.cpp 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.cpp 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,677 @@
+/*
+ * CAFLACDecoder.cpp
+ *
+ * CAFLACDecoder class implementation; the main part of the FLAC
+ * codec functionality.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with XiphQT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#include <Ogg/ogg.h>
+#include <FLAC++/decoder.h>
+
+#include "CAFLACDecoder.h"
+
+#include "CABundleLocker.h"
+
+#include "flac_versions.h"
+#include "fccs.h"
+#include "data_types.h"
+
+#include "debug.h"
+
+
+CAFLACDecoder::CAFLACDecoder(Boolean inSkipFormatsInitialization /* = false */) :
+ mCookie(NULL), mCookieSize(0), mCompressionInitialized(false),
+ mOutBuffer(NULL), mOutBufferSize(0), mOutBufferUsedSize(0),
+ mFLACsrate(44100), mFLACchannels(2), mFLACbits(16), // some defaults...?
+ mFLACFPList(),
+ mFrame(), mNumFrames(0), mBPtrs(NULL)
+{
+ if (inSkipFormatsInitialization)
+ return;
+
+ CAStreamBasicDescription theInputFormat(kAudioStreamAnyRate, kAudioFormatXiphFLAC,
+ kFLACBytesPerPacket, kFLACFramesPerPacket,
+ kFLACBytesPerFrame, kFLACChannelsPerFrame,
+ kFLACBitsPerChannel, kFLACFormatFlags);
+ AddInputFormat(theInputFormat);
+
+ mInputFormat.mSampleRate = 44100;
+ mInputFormat.mFormatID = kAudioFormatXiphFLAC;
+ mInputFormat.mFormatFlags = kFLACFormatFlags;
+ mInputFormat.mBytesPerPacket = kFLACBytesPerPacket;
+ mInputFormat.mFramesPerPacket = kFLACFramesPerPacket;
+ mInputFormat.mBytesPerFrame = kFLACBytesPerFrame;
+ mInputFormat.mChannelsPerFrame = 2;
+ mInputFormat.mBitsPerChannel = 16;
+
+ CAStreamBasicDescription theOutputFormat1(kAudioStreamAnyRate, kAudioFormatLinearPCM, 0, 1, 0, 0, 16,
+ kAudioFormatFlagsNativeEndian |
+ kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked);
+ AddOutputFormat(theOutputFormat1);
+ CAStreamBasicDescription theOutputFormat2(kAudioStreamAnyRate, kAudioFormatLinearPCM, 0, 1, 0, 0, 32,
+ kAudioFormatFlagsNativeFloatPacked);
+ AddOutputFormat(theOutputFormat2);
+
+ mOutputFormat.mSampleRate = 44100;
+ mOutputFormat.mFormatID = kAudioFormatLinearPCM;
+ mOutputFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
+ mOutputFormat.mBytesPerPacket = 8;
+ mOutputFormat.mFramesPerPacket = 1;
+ mOutputFormat.mBytesPerFrame = 8;
+ mOutputFormat.mChannelsPerFrame = 2;
+ mOutputFormat.mBitsPerChannel = 32;
+}
+
+CAFLACDecoder::~CAFLACDecoder()
+{
+ if (mCookie != NULL)
+ delete[] mCookie;
+
+ if (mCompressionInitialized) {
+ //TODO: free FLAC specific resources
+ }
+}
+
+void CAFLACDecoder::Initialize(const AudioStreamBasicDescription* inInputFormat,
+ const AudioStreamBasicDescription* inOutputFormat,
+ const void* inMagicCookie, UInt32 inMagicCookieByteSize)
+{
+ dbg_printf(" >> [%08lx] :: Initialize(%d, %d, %d)\n", (UInt32) this, inInputFormat != NULL, inOutputFormat != NULL, inMagicCookieByteSize != 0);
+
+ if(inInputFormat != NULL) {
+ SetCurrentInputFormat(*inInputFormat);
+ /////// TODO: !! what do to with the formats?!!
+ //mFInfo.srate = static_cast<UInt32> (inInputFormat->mSampleRate);
+ //mFInfo.channels = inInputFormat->mChannelsPerFrame;
+ //mFInfo.bits = mInputFormat.mBitsPerChannel;
+ //if (mFInfo.bits < 4)
+ // mFInfo.bits = 16;
+ }
+
+ if(inOutputFormat != NULL) {
+ SetCurrentOutputFormat(*inOutputFormat);
+ }
+
+ if ((mInputFormat.mSampleRate != mOutputFormat.mSampleRate) ||
+ (mInputFormat.mChannelsPerFrame != mOutputFormat.mChannelsPerFrame)) {
+ CODEC_THROW(kAudioCodecUnsupportedFormatError);
+ }
+
+ BDCInitialize(kFLACDecoderInBufferSize);
+
+ //if (inMagicCookieByteSize == 0)
+ // CODEC_THROW(kAudioCodecUnsupportedFormatError);
+
+ if (inMagicCookieByteSize != 0) {
+ SetMagicCookie(inMagicCookie, inMagicCookieByteSize);
+ }
+
+ //if (mOVinited)
+ // FixFormats();
+
+ XCACodec::Initialize(inInputFormat, inOutputFormat, inMagicCookie, inMagicCookieByteSize);
+ dbg_printf("<.. [%08lx] :: Initialize(%d, %d, %d)\n", (UInt32) this, inInputFormat != NULL, inOutputFormat != NULL, inMagicCookieByteSize != 0);
+}
+
+void CAFLACDecoder::Uninitialize()
+{
+ dbg_printf(" >> [%08lx] :: Uninitialize()\n", (UInt32) this);
+ BDCUninitialize();
+ XCACodec::Uninitialize();
+ dbg_printf("<.. [%08lx] :: Uninitialize()\n", (UInt32) this);
+}
+
+void CAFLACDecoder::GetProperty(AudioCodecPropertyID inPropertyID, UInt32& ioPropertyDataSize, void* outPropertyData)
+{
+ dbg_printf(" >> [%08lx] :: GetProperty('%4.4s')\n", (UInt32) this, reinterpret_cast<char*> (&inPropertyID));
+ switch(inPropertyID)
+ {
+ /*
+ case kAudioCodecPropertyMaximumPacketByteSize:
+ if(ioPropertyDataSize == sizeof(UInt32)) {
+ *reinterpret_cast<UInt32*>(outPropertyData) = 32 * 8 * 1024;
+ } else {
+ CODEC_THROW(kAudioCodecBadPropertySizeError);
+ }
+ break;
+ */
+
+ case kAudioCodecPropertyRequiresPacketDescription:
+ if(ioPropertyDataSize == sizeof(UInt32)) {
+ *reinterpret_cast<UInt32*>(outPropertyData) = 1;
+ } else {
+ CODEC_THROW(kAudioCodecBadPropertySizeError);
+ }
+ break;
+
+ case kAudioCodecPropertyHasVariablePacketByteSizes:
+ if(ioPropertyDataSize == sizeof(UInt32)) {
+ *reinterpret_cast<UInt32*>(outPropertyData) = 1;
+ } else {
+ CODEC_THROW(kAudioCodecBadPropertySizeError);
+ }
+ break;
+
+ case kAudioCodecPropertyPacketFrameSize:
+ if(ioPropertyDataSize == sizeof(UInt32)) {
+ *reinterpret_cast<UInt32*>(outPropertyData) = kFLACFramesPerPacket;
+ } else {
+ CODEC_THROW(kAudioCodecBadPropertySizeError);
+ }
+ break;
+
+ //case kAudioCodecPropertyQualitySetting: ???
+#if TARGET_OS_MAC
+ case kAudioCodecPropertyNameCFString:
+ {
+ if (ioPropertyDataSize != sizeof(CFStringRef)) CODEC_THROW(kAudioCodecBadPropertySizeError);
+
+ CABundleLocker lock;
+ CFStringRef name = CFCopyLocalizedStringFromTableInBundle(CFSTR("Xiph FLAC decoder"), CFSTR("CodecNames"), GetCodecBundle(), CFSTR(""));
+ *(CFStringRef*)outPropertyData = name;
+ break;
+ }
+
+ //case kAudioCodecPropertyManufacturerCFString:
+#endif
+ default:
+ ACBaseCodec::GetProperty(inPropertyID, ioPropertyDataSize, outPropertyData);
+ }
+ dbg_printf("<.. [%08lx] :: GetProperty('%4.4s')\n", (UInt32) this, reinterpret_cast<char*> (&inPropertyID));
+}
+
+void CAFLACDecoder::GetPropertyInfo(AudioCodecPropertyID inPropertyID, UInt32& outPropertyDataSize, bool& outWritable)
+{
+ printf(" >> [%08lx] :: GetPropertyInfo('%4.4s')\n", (UInt32) this, reinterpret_cast<char*> (&inPropertyID));
+ switch(inPropertyID)
+ {
+ /*
+ case kAudioCodecPropertyMaximumPacketByteSize:
+ outPropertyDataSize = sizeof(UInt32);
+ outWritable = false;
+ break;
+ */
+
+ case kAudioCodecPropertyRequiresPacketDescription:
+ outPropertyDataSize = sizeof(UInt32);
+ outWritable = false;
+ break;
+
+ case kAudioCodecPropertyHasVariablePacketByteSizes:
+ outPropertyDataSize = sizeof(UInt32);
+ outWritable = false;
+ break;
+
+ case kAudioCodecPropertyPacketFrameSize:
+ outPropertyDataSize = sizeof(UInt32);
+ outWritable = false;
+ break;
+
+ default:
+ ACBaseCodec::GetPropertyInfo(inPropertyID, outPropertyDataSize, outWritable);
+ break;
+
+ };
+ dbg_printf("<.. [%08lx] :: GetPropertyInfo('%4.4s')\n", (UInt32) this, reinterpret_cast<char*> (&inPropertyID));
+}
+
+void CAFLACDecoder::Reset()
+{
+ dbg_printf(">> [%08lx] :: Reset()\n", (UInt32) this);
+ BDCReset();
+
+ XCACodec::Reset();
+ dbg_printf("<< [%08lx] :: Reset()\n", (UInt32) this);
+}
+
+UInt32 CAFLACDecoder::GetVersion() const
+{
+ return kCAFLAC_adec_Version;
+}
+
+UInt32 CAFLACDecoder::GetMagicCookieByteSize() const
+{
+ return mCookieSize;
+}
+
+void CAFLACDecoder::GetMagicCookie(void* outMagicCookieData, UInt32& ioMagicCookieDataByteSize) const
+{
+ ioMagicCookieDataByteSize = mCookieSize;
+
+ if (mCookie != NULL)
+ outMagicCookieData = mCookie;
+}
+
+void CAFLACDecoder::SetMagicCookie(const void* inMagicCookieData, UInt32 inMagicCookieDataByteSize)
+{
+ printf(" >> [%08lx] :: SetMagicCookie()\n", (UInt32) this);
+ if (mIsInitialized)
+ CODEC_THROW(kAudioCodecStateError);
+
+ SetCookie(inMagicCookieData, inMagicCookieDataByteSize);
+
+ InitializeCompressionSettings();
+
+ if (!mCompressionInitialized)
+ CODEC_THROW(kAudioCodecUnsupportedFormatError);
+ printf("<.. [%08lx] :: SetMagicCookie()\n", (UInt32) this);
+}
+
+
+void CAFLACDecoder::SetCurrentInputFormat(const AudioStreamBasicDescription& inInputFormat)
+{
+ if(!mIsInitialized)
+ {
+ // check to make sure the input format is legal
+ if(inInputFormat.mFormatID != kAudioFormatXiphFLAC)
+ {
+#if VERBOSE
+ DebugMessage("CAFLACDecoder::SetFormats: only support Xiph Vorbis for input");
+#endif
+ CODEC_THROW(kAudioCodecUnsupportedFormatError);
+ }
+
+ // tell our base class about the new format
+ ACBaseCodec::SetCurrentInputFormat(inInputFormat);
+ }
+ else
+ {
+ CODEC_THROW(kAudioCodecStateError);
+ }
+}
+
+void CAFLACDecoder::SetCurrentOutputFormat(const AudioStreamBasicDescription& inOutputFormat)
+{
+ if(!mIsInitialized)
+ {
+ // check to make sure the output format is legal
+ if( (inOutputFormat.mFormatID != kAudioFormatLinearPCM) ||
+ !( ( (inOutputFormat.mFormatFlags == kAudioFormatFlagsNativeFloatPacked) &&
+ (inOutputFormat.mBitsPerChannel == 32) ) ||
+ ( (inOutputFormat.mFormatFlags == (kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked) ) &&
+ (inOutputFormat.mBitsPerChannel == 16) ) ) )
+ {
+#if VERBOSE
+ DebugMessage("CAFLACDecoder::SetFormats: only supports either 16 bit native endian signed integer or 32 bit native endian Core Audio floats for output");
+#endif
+ CODEC_THROW(kAudioCodecUnsupportedFormatError);
+ }
+
+ // tell our base class about the new format
+ ACBaseCodec::SetCurrentOutputFormat(inOutputFormat);
+ }
+ else
+ {
+ CODEC_THROW(kAudioCodecStateError);
+ }
+}
+
+#if 0
+void CAFLACDecoder::FixFormats()
+{
+ //mInputFormat.mSampleRate = mV_vi.rate;
+ //mInputFormat.mChannelsPerFrame = mV_vi.channels;
+
+ /*
+ mInputFormat.mFramesPerPacket = 64;
+ mInputFormat.mBytesPerPacket = mInputFormat.mChannelsPerFrame * 34;
+ mInputFormat.mBytesPerFrame = 0;
+ */
+}
+#endif /* 0 */
+
+
+#pragma mark The CORE
+
+void CAFLACDecoder::OutputFrames(void* outOutputData, UInt32 inNumberFrames, UInt32 inFramesOffset) const
+{
+ UInt32 i, j;
+
+ if (mOutputFormat.mFormatFlags & kAudioFormatFlagsNativeFloatPacked != 0) {
+ float cnvrtr = (float)((1 << (mFLACbits - 1)) - 1);
+ for (i = 0; i < mFLACchannels; i++) {
+ float* theOutputData = static_cast<float*> (outOutputData) + i + (inFramesOffset * mFLACchannels);
+ const FLAC__int32* mono = static_cast<const FLAC__int32*> (mBPtrs[i] + mFrame.header.blocksize - mNumFrames);
+
+ float tempFloat = 0;
+
+ for (j = 0; j < inNumberFrames; j++) {
+ *theOutputData = ((float)mono[j]) / cnvrtr;
+ theOutputData += mFLACchannels;
+ }
+ }
+ } else {
+ for (i = 0; i < mFLACchannels; i++) {
+ SInt16* theOutputData = static_cast<SInt16*> (outOutputData) + i + (inFramesOffset * mFLACchannels);
+ const FLAC__int32* mono = static_cast<const FLAC__int32*> (mBPtrs[i] + mFrame.header.blocksize - mNumFrames);
+
+ for (j = 0; j < inNumberFrames; j++) {
+ *theOutputData = static_cast<SInt16> (mono[j]);
+ theOutputData += mFLACchannels;
+ }
+ }
+ }
+}
+
+void CAFLACDecoder::SetCookie(const void* inMagicCookie, UInt32 inMagicCookieByteSize)
+{
+ if (mCookie != NULL)
+ delete[] mCookie;
+
+ mCookieSize = inMagicCookieByteSize;
+ if (inMagicCookieByteSize != 0) {
+ mCookie = new Byte[inMagicCookieByteSize];
+
+ //const Byte * theData = static_cast<const Byte *> (inMagicCookie);
+ //BlockMoveData(theData + 8, mCookie, inMagicCookieByteSize - 8);
+ BlockMoveData(inMagicCookie, mCookie, inMagicCookieByteSize);
+ } else {
+ mCookie = NULL;
+ }
+}
+
+void CAFLACDecoder::InitializeCompressionSettings()
+{
+ if (mCookie == NULL)
+ return;
+
+#if 0
+ if (mCompressionInitialized) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_block_clear(&mV_vb);
+ vorbis_dsp_clear(&mV_vd);
+
+ vorbis_info_clear(&mV_vi);
+ }
+
+ mCompressionInitialized = false;
+
+ UInt32 startOffset = 8; // atomsize + atomtype, ?
+ ogg_page og;
+ vorbis_comment vc;
+
+ if (!WrapOggPage(&og, mCookie, mCookieSize, startOffset))
+ return;
+
+ ogg_stream_init(&mO_st, ogg_page_serialno(&og));
+
+ vorbis_info_init(&mV_vi);
+ vorbis_comment_init(&vc);
+ ogg_packet op;
+
+ if (ogg_stream_pagein(&mO_st, &og) < 0) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_comment_clear(&vc);
+ vorbis_info_clear(&mV_vi);
+
+ return;
+ }
+
+ if (ogg_stream_packetout(&mO_st, &op) != 1) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_comment_clear(&vc);
+ vorbis_info_clear(&mV_vi);
+
+ return;
+ }
+
+ if (vorbis_synthesis_headerin(&mV_vi, &vc, &op) < 0) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_comment_clear(&vc);
+ vorbis_info_clear(&mV_vi);
+
+ return;
+ }
+
+ UInt32 i=0;
+ int result;
+
+ while(i<2){
+ if (!WrapOggPage(&og, mCookie, mCookieSize, startOffset)) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_comment_clear(&vc);
+ vorbis_info_clear(&mV_vi);
+
+ return;
+ }
+
+ ogg_stream_pagein(&mO_st, &og);
+
+ while(i<2){
+ result=ogg_stream_packetout(&mO_st, &op);
+ if (result == 0)
+ break;
+ else if(result < 0) {
+ ogg_stream_clear(&mO_st);
+
+ vorbis_comment_clear(&vc);
+ vorbis_info_clear(&mV_vi);
+
+ return;
+ }
+
+ vorbis_synthesis_headerin(&mV_vi, &vc, &op);
+ i++;
+ }
+ }
+
+ vorbis_synthesis_init(&mV_vd, &mV_vi);
+ vorbis_block_init(&mV_vd, &mV_vb);
+
+ vorbis_comment_clear(&vc);
+#endif
+
+ mCompressionInitialized = true;
+}
+
+
+#pragma mark BDC functions
+
+void CAFLACDecoder::BDCInitialize(UInt32 inInputBufferByteSize)
+{
+ init();
+
+ if (mOutBuffer)
+ delete[] mOutBuffer;
+ mOutBuffer = new FLAC__int32[kFLACDecoderOutBufferSize];
+ mOutBufferSize = kFLACDecoderOutBufferSize;
+ mOutBufferUsedSize = 0;
+
+ XCACodec::BDCInitialize(inInputBufferByteSize);
+};
+
+void CAFLACDecoder::BDCUninitialize()
+{
+ mFLACFPList.clear();
+
+ if (mOutBuffer)
+ delete[] mOutBuffer;
+ mOutBuffer = NULL;
+ mOutBufferSize = 0;
+ mOutBufferUsedSize = 0;
+
+ XCACodec::BDCUninitialize();
+};
+
+void CAFLACDecoder::BDCReset()
+{
+ mFLACFPList.clear();
+
+ DFPclear();
+
+ mOutBufferUsedSize = 0;
+
+ flush();
+ reset();
+
+ XCACodec::BDCReset();
+};
+
+void CAFLACDecoder::BDCReallocate(UInt32 inInputBufferByteSize)
+{
+ mFLACFPList.clear();
+
+ XCACodec::BDCReallocate(inInputBufferByteSize);
+};
+
+
+void CAFLACDecoder::InPacket(const void* inInputData, const AudioStreamPacketDescription* inPacketDescription)
+{
+ const Byte * theData = static_cast<const Byte *> (inInputData) + inPacketDescription->mStartOffset;
+ UInt32 size = inPacketDescription->mDataByteSize;
+ mBDCBuffer.In(theData, size);
+ mFLACFPList.push_back(FLACFramePacket(inPacketDescription->mVariableFramesInPacket, inPacketDescription->mDataByteSize));
+};
+
+
+UInt32 CAFLACDecoder::FramesReady() const
+{
+ return mNumFrames;
+};
+
+Boolean CAFLACDecoder::GenerateFrames()
+{
+ Boolean ret = true;
+
+ while (process_single() != true) {
+ if ((get_state() != FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC && get_state() != FLAC__STREAM_DECODER_READ_FRAME)) {
+ ret = false;
+ mBDCStatus = kBDCStatusAbort;
+ break;
+ }
+ }
+
+ return ret;
+};
+
+void CAFLACDecoder::Zap(UInt32 inFrames)
+{
+ mNumFrames -= inFrames;
+
+ if (mNumFrames < 0)
+ mNumFrames = 0;
+
+ if (mNumFrames == 0) {
+ mOutBufferUsedSize = 0;
+ DFPclear();
+ }
+};
+
+// UInt32 BACFLAC::GetNumberOfChannels() const
+// {
+// return mFLACchannels;
+// };
+
+// UInt32 BACFLAC::GetBitsPerSample() const
+// {
+// return mFLACbits;
+// };
+
+
+void CAFLACDecoder::DFPinit(const ::FLAC__Frame& inFrame, const FLAC__int32 *const inBuffer[])
+{
+ mFrame.header.blocksize = inFrame.header.blocksize;
+ mNumFrames = inFrame.header.blocksize;
+ mFrame.header.channels = inFrame.header.channels;
+ // fill other values...
+
+ mBPtrs = const_cast<const FLAC__int32**> (inBuffer);
+};
+
+void CAFLACDecoder::DFPclear()
+{
+ if (mBPtrs) {
+ delete[] mBPtrs; mBPtrs = NULL;
+ }
+
+ mNumFrames = 0;
+};
+
+#pragma mark Callbacks
+
+::FLAC__StreamDecoderReadStatus CAFLACDecoder::read_callback(FLAC__byte buffer[], unsigned *bytes)
+{
+ printf(" | -> [%08lx] :: read_callback(%ld)\n", (UInt32) this, *bytes);
+ FLAC__StreamDecoderReadStatus ret = FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
+
+ if (mFLACFPList.empty()) {
+ *bytes = 0;
+ ret = FLAC__STREAM_DECODER_READ_STATUS_ABORT;
+ } else {
+ FLACFramePacket& ffp = mFLACFPList.front();
+
+ if (*bytes > mBDCBuffer.GetDataAvailable())
+ *bytes = mBDCBuffer.GetDataAvailable();
+ if (*bytes > ffp.left)
+ *bytes = ffp.left;
+
+ BlockMoveData(mBDCBuffer.GetData(), buffer, *bytes);
+
+ if (*bytes == ffp.left) {
+ mBDCBuffer.Zap(ffp.bytes);
+ mFLACFPList.erase(mFLACFPList.begin());
+ } else
+ ffp.left -= *bytes;
+ }
+
+ printf(" |<-. [%08lx] :: read_callback(%ld) = %ld\n", (UInt32) this, *bytes, ret);
+ return ret;
+}
+
+::FLAC__StreamDecoderWriteStatus CAFLACDecoder::write_callback(const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[])
+{
+ ::FLAC__StreamDecoderWriteStatus ret = FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
+ printf(" | +> [%08lx] :: write_callback(%ld)\n", (UInt32) this, frame->header.blocksize);
+
+ FLAC__int32** lbuffer = new FLAC__int32*[frame->header.channels];
+ for (unsigned int i = 0; i < frame->header.channels; i++) {
+ // check here for enough space in mOutBuffer !?
+ lbuffer[i] = mOutBuffer + mOutBufferUsedSize;
+ BlockMoveData(buffer[i], lbuffer[i], frame->header.blocksize * sizeof(FLAC__int32));
+ mOutBufferUsedSize += frame->header.blocksize;
+ }
+
+ DFPinit(*frame, lbuffer); //MFDFPacket will free the lbuffer on .clear() call
+
+ printf(" |<+. [%08lx] :: write_callback()\n", (UInt32) this);
+ return ret;
+}
+
+void CAFLACDecoder::metadata_callback(const ::FLAC__StreamMetadata *metadata)
+{
+ printf(" |\".\" [%08lx] :: metadata_callback()\n", (UInt32) this);
+}
+
+void CAFLACDecoder::error_callback(::FLAC__StreamDecoderErrorStatus status)
+{
+ printf(" |<!> [%08lx] :: error_callback(%ld)\n", (UInt32) this, status);
+}
Property changes on: trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.cpp
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.h
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.h 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.h 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,149 @@
+/*
+ * CAFLACDecoder.h
+ *
+ * CAFLACDecoder class definition.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with XiphQT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#if !defined(__CAFLACDecoder_h__)
+#define __CAFLACDecoder_h__
+
+
+#include "XCACodec.h"
+
+//#include <Ogg/ogg.h>
+#include <FLAC++/decoder.h>
+
+#include <vector>
+
+
+#define _SHOULD_BE_ZERO_HERE 0
+#if defined(TARGET_CPU_X86) && defined(QT_IA32__VBR_BROKEN)
+ #undef _SHOULD_BE_ZERO_HERE
+ #define _SHOULD_BE_ZERO_HERE 1
+#endif
+
+
+class CAFLACDecoder:
+public XCACodec, FLAC::Decoder::Stream
+{
+public:
+ CAFLACDecoder(Boolean inSkipFormatsInitialization = false);
+ ~CAFLACDecoder();
+
+ virtual void Initialize(const AudioStreamBasicDescription* inInputFormat, \
+ const AudioStreamBasicDescription* inOutputFormat, \
+ const void* inMagicCookie, UInt32 inMagicCookieByteSize);
+ virtual void Uninitialize();
+ virtual void Reset();
+ //virtual void FixFormats();
+
+ virtual void GetProperty(AudioCodecPropertyID inPropertyID, UInt32& ioPropertyDataSize, void* outPropertyData);
+ virtual void GetPropertyInfo(AudioCodecPropertyID inPropertyID, UInt32& outPropertyDataSize, bool& outWritable);
+
+ virtual void SetCurrentInputFormat(const AudioStreamBasicDescription& inInputFormat);
+ virtual void SetCurrentOutputFormat(const AudioStreamBasicDescription& inOutputFormat);
+ virtual UInt32 GetVersion() const;
+
+ virtual UInt32 GetMagicCookieByteSize() const;
+ virtual void GetMagicCookie(void* outMagicCookieData, UInt32& ioMagicCookieDataByteSize) const;
+ virtual void SetMagicCookie(const void* inMagicCookieData, UInt32 inMagicCookieDataByteSize);
+
+ protected:
+ virtual void BDCInitialize(UInt32 inInputBufferByteSize);
+ virtual void BDCUninitialize();
+ virtual void BDCReset();
+ virtual void BDCReallocate(UInt32 inInputBufferByteSize);
+
+ virtual void InPacket(const void* inInputData, const AudioStreamPacketDescription* inPacketDescription);
+
+ virtual UInt32 FramesReady() const;
+ virtual Boolean GenerateFrames();
+ virtual void OutputFrames(void* outOutputData, UInt32 inNumberFrames, UInt32 inFramesOffset) const;
+ virtual void Zap(UInt32 inFrames);
+
+// virtual UInt32 InPacketsConsumed() const;
+
+ void SetCookie(const void* inMagicCookieData, UInt32 inMagicCookieDataByteSize);
+ virtual void InitializeCompressionSettings();
+
+protected:
+ /* FLAC callback interface functions */
+
+ virtual ::FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
+ virtual ::FLAC__StreamDecoderWriteStatus write_callback(const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[]);
+ virtual void metadata_callback(const ::FLAC__StreamMetadata *metadata);
+ virtual void error_callback(::FLAC__StreamDecoderErrorStatus status);
+
+ protected:
+ Byte* mCookie;
+ UInt32 mCookieSize;
+
+ Boolean mCompressionInitialized;
+
+ FLAC__int32* mOutBuffer;
+ UInt32 mOutBufferSize;
+ UInt32 mOutBufferUsedSize;
+
+ UInt32 mFLACsrate;
+ UInt32 mFLACchannels;
+ UInt32 mFLACbits;
+
+ struct FLACFramePacket {
+ UInt32 frames;
+ UInt32 bytes;
+ UInt32 left;
+
+ FLACFramePacket() : frames(0), bytes(0), left(0) {};
+ FLACFramePacket(UInt32 inFrames, UInt32 inBytes) : frames(inFrames), bytes(inBytes), left(inBytes) {};
+ };
+
+ typedef std::vector<FLACFramePacket> FLACFramePacketList;
+ FLACFramePacketList mFLACFPList;
+
+ ::FLAC__Frame mFrame;
+ UInt32 mNumFrames;
+ const FLAC__int32** mBPtrs;
+
+ void DFPinit(const ::FLAC__Frame& inFrame, const FLAC__int32 *const inBuffer[]);
+ void DFPclear();
+
+
+ enum {
+ kFLACBytesPerPacket = 0,
+ kFLACFramesPerPacket = _SHOULD_BE_ZERO_HERE,
+ kFLACBytesPerFrame = 0,
+ kFLACChannelsPerFrame = 0,
+ kFLACBitsPerChannel = 0,
+ kFLACFormatFlags = 0,
+
+ kFLACDecoderInBufferSize = 96 * 1024,
+ kFLACDecoderOutBufferSize = 32 * 1024
+ };
+};
+
+
+#endif /* __CAFLACDecoder_h__ */
Property changes on: trunk/xiph-qt/CAFLAC/src/CAFLACDecoder.h
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/CAFLACDecoderPublic.r
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAFLACDecoderPublic.r 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAFLACDecoderPublic.r 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,62 @@
+/*
+ * CAFLACDecoderPublic.r
+ *
+ * Information bit definitions for the 'thng' resource.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with XiphQT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#include "flac_versions.h"
+#include "fccs.h"
+
+
+#define kPrimaryResourceID -17550
+#define kComponentType 'adec'
+#define kComponentSubtype kAudioFormatXiphOggFramedFLAC
+#define kComponentManufacturer 'Xiph'
+#define kComponentFlags 0
+#define kComponentVersion kCAFLAC_adec_Version
+#define kComponentName "Xiph (Ogg-framed) FLAC"
+#define kComponentInfo "An AudioCodec that decodes Xiph (Ogg-framed) FLAC into linear PCM data"
+#define kComponentEntryPoint "CAOggFLACDecoderEntry"
+#define kComponentPublicResourceMapType 0
+#define kComponentIsThreadSafe 1
+
+#include "XCAResources.r"
+
+
+#define kPrimaryResourceID -17554
+#define kComponentType 'adec'
+#define kComponentSubtype kAudioFormatXiphFLAC
+#define kComponentManufacturer 'Xiph'
+#define kComponentFlags 0
+#define kComponentVersion kCAFLAC_adec_Version
+#define kComponentName "Xiph FLAC"
+#define kComponentInfo "An AudioCodec that decodes Xiph FLAC into linear PCM data"
+#define kComponentEntryPoint "CAFLACDecoderEntry"
+#define kComponentPublicResourceMapType 0
+#define kComponentIsThreadSafe 1
+
+#include "XCAResources.r"
Property changes on: trunk/xiph-qt/CAFLAC/src/CAFLACDecoderPublic.r
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.cpp
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.cpp 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.cpp 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,239 @@
+/*
+ * CAOggFLACDecoder.cpp
+ *
+ * CAOggFLACDecoder class implementation; translation layer handling
+ * ogg page encapsulation of FLAC frmaes, using CAFLACDecoder
+ * for the actual decoding.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#include "CAOggFLACDecoder.h"
+
+#include "fccs.h"
+#include "data_types.h"
+
+#include "wrap_ogg.h"
+
+#include "debug.h"
+
+
+CAOggFLACDecoder::CAOggFLACDecoder() :
+ CAFLACDecoder(true),
+ mFramesBufferedList()
+{
+ CAStreamBasicDescription theInputFormat(kAudioStreamAnyRate, kAudioFormatXiphOggFramedFLAC,
+ kFLACBytesPerPacket, kFLACFramesPerPacket,
+ kFLACBytesPerFrame, kFLACChannelsPerFrame,
+ kFLACBitsPerChannel, kFLACFormatFlags);
+ AddInputFormat(theInputFormat);
+
+ mInputFormat.mSampleRate = 44100;
+ mInputFormat.mFormatID = kAudioFormatXiphOggFramedFLAC;
+ mInputFormat.mFormatFlags = kFLACFormatFlags;
+ mInputFormat.mBytesPerPacket = kFLACBytesPerPacket;
+ mInputFormat.mFramesPerPacket = kFLACFramesPerPacket;
+ mInputFormat.mBytesPerFrame = kFLACBytesPerFrame;
+ mInputFormat.mChannelsPerFrame = 2;
+ mInputFormat.mBitsPerChannel = kFLACBitsPerChannel;
+
+ CAStreamBasicDescription theOutputFormat1(kAudioStreamAnyRate, kAudioFormatLinearPCM, 0, 1, 0, 0, 16,
+ kAudioFormatFlagsNativeEndian |
+ kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked);
+ AddOutputFormat(theOutputFormat1);
+ CAStreamBasicDescription theOutputFormat2(kAudioStreamAnyRate, kAudioFormatLinearPCM, 0, 1, 0, 0, 32,
+ kAudioFormatFlagsNativeFloatPacked);
+ AddOutputFormat(theOutputFormat2);
+
+ mOutputFormat.mSampleRate = 44100;
+ mOutputFormat.mFormatID = kAudioFormatLinearPCM;
+ mOutputFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
+ mOutputFormat.mBytesPerPacket = 8;
+ mOutputFormat.mFramesPerPacket = 1;
+ mOutputFormat.mBytesPerFrame = 8;
+ mOutputFormat.mChannelsPerFrame = 2;
+ mOutputFormat.mBitsPerChannel = 32;
+}
+
+CAOggFLACDecoder::~CAOggFLACDecoder()
+{
+ if (mCompressionInitialized)
+ ogg_stream_clear(&mO_st);
+}
+
+void CAOggFLACDecoder::SetCurrentInputFormat(const AudioStreamBasicDescription& inInputFormat)
+{
+ if (!mIsInitialized) {
+ if (inInputFormat.mFormatID != kAudioFormatXiphOggFramedFLAC) {
+ dbg_printf("CAOggFLACDecoder::SetFormats: only support Xiph FLAC (Ogg-framed) for input\n");
+ CODEC_THROW(kAudioCodecUnsupportedFormatError);
+ }
+ XCACodec::SetCurrentInputFormat(inInputFormat);
+ } else {
+ CODEC_THROW(kAudioCodecStateError);
+ }
+}
+
+UInt32 CAOggFLACDecoder::ProduceOutputPackets(void* outOutputData, UInt32& ioOutputDataByteSize, UInt32& ioNumberPackets,
+ AudioStreamPacketDescription* outPacketDescription)
+{
+ dbg_printf(" >> [%08lx] CAOggFLACDecoder :: ProduceOutputPackets(%ld [%ld])\n", (UInt32) this, ioNumberPackets, ioOutputDataByteSize);
+ UInt32 ret = kAudioCodecProduceOutputPacketSuccess;
+
+ if (mFramesBufferedList.empty()) {
+ ioOutputDataByteSize = 0;
+ ioNumberPackets = 0;
+ ret = kAudioCodecProduceOutputPacketNeedsMoreInputData;
+ dbg_printf("<!E [%08lx] CAOggFLACDecoder :: ProduceOutputPackets(%ld [%ld]) = %ld [%ld]\n", (UInt32) this,
+ ioNumberPackets, ioOutputDataByteSize, ret, FramesReady());
+ return ret;
+ }
+
+ UInt32 flac_frames = mFramesBufferedList.front();
+ UInt32 ogg_packets = 0;
+ UInt32 flac_returned_data = ioOutputDataByteSize;
+ UInt32 flac_total_returned_data = 0;
+ Byte *the_data = static_cast<Byte*> (outOutputData);
+
+ while (true) {
+ UInt32 flac_return = CAFLACDecoder::ProduceOutputPackets(the_data, flac_returned_data, flac_frames, NULL);
+ if (flac_return == kAudioCodecProduceOutputPacketSuccess || flac_return == kAudioCodecProduceOutputPacketSuccessHasMore) {
+ if (flac_frames > 0)
+ mFramesBufferedList.front() -= flac_frames;
+
+ if (mFramesBufferedList.front() <= 0) {
+ ogg_packets++;
+ mFramesBufferedList.erase(mFramesBufferedList.begin());
+ }
+
+ flac_total_returned_data += flac_returned_data;
+
+ if (flac_total_returned_data == ioOutputDataByteSize || flac_return == kAudioCodecProduceOutputPacketSuccess)
+ {
+ ioNumberPackets = ogg_packets;
+ ioOutputDataByteSize = flac_total_returned_data;
+
+ if (!mFramesBufferedList.empty())
+ ret = kAudioCodecProduceOutputPacketSuccessHasMore;
+ else
+ ret = kAudioCodecProduceOutputPacketSuccess;
+
+ break;
+ } else {
+ the_data += flac_returned_data;
+ flac_returned_data = ioOutputDataByteSize - flac_total_returned_data;
+ flac_frames = mFramesBufferedList.front();
+ }
+ } else {
+ ret = kAudioCodecProduceOutputPacketFailure;
+ ioOutputDataByteSize = flac_total_returned_data;
+ ioNumberPackets = ogg_packets;
+ break;
+ }
+ }
+
+ dbg_printf("<.. [%08lx] CAOggFLACDecoder :: ProduceOutputPackets(%ld [%ld]) = %ld [%ld]\n",
+ (UInt32) this, ioNumberPackets, ioOutputDataByteSize, ret, FramesReady());
+ return ret;
+}
+
+
+void CAOggFLACDecoder::BDCInitialize(UInt32 inInputBufferByteSize)
+{
+ CAFLACDecoder::BDCInitialize(inInputBufferByteSize);
+}
+
+void CAOggFLACDecoder::BDCUninitialize()
+{
+ mFramesBufferedList.clear();
+ CAFLACDecoder::BDCUninitialize();
+}
+
+void CAOggFLACDecoder::BDCReset()
+{
+ mFramesBufferedList.clear();
+ if (mCompressionInitialized)
+ ogg_stream_reset(&mO_st);
+ CAFLACDecoder::BDCReset();
+}
+
+void CAOggFLACDecoder::BDCReallocate(UInt32 inInputBufferByteSize)
+{
+ mFramesBufferedList.clear();
+ CAFLACDecoder::BDCReallocate(inInputBufferByteSize);
+}
+
+
+void CAOggFLACDecoder::InPacket(const void* inInputData, const AudioStreamPacketDescription* inPacketDescription)
+{
+ if (!mCompressionInitialized)
+ CODEC_THROW(kAudioCodecUnspecifiedError);
+
+ ogg_page op;
+
+ if (!WrapOggPage(&op, inInputData, inPacketDescription->mDataByteSize, inPacketDescription->mStartOffset))
+ CODEC_THROW(kAudioCodecUnspecifiedError);
+
+ ogg_packet opk;
+ SInt32 packet_count = 0;
+ int oret;
+ AudioStreamPacketDescription flac_packet_desc = {0, 0, 0};
+ UInt32 page_packets = ogg_page_packets(&op);
+
+ ogg_stream_pagein(&mO_st, &op);
+ while ((oret = ogg_stream_packetout(&mO_st, &opk)) != 0) {
+ if (oret < 0) {
+ page_packets--;
+ continue;
+ }
+
+ packet_count++;
+
+ flac_packet_desc.mDataByteSize = opk.bytes;
+
+ CAFLACDecoder::InPacket(opk.packet, &flac_packet_desc);
+ }
+
+ mFramesBufferedList.push_back(packet_count);
+}
+
+
+void CAOggFLACDecoder::InitializeCompressionSettings()
+{
+ if (mCookie != NULL) {
+ if (mCompressionInitialized)
+ ogg_stream_clear(&mO_st);
+
+ OggSerialNoAtom *atom = reinterpret_cast<OggSerialNoAtom*> (mCookie);
+
+ if (EndianS32_BtoN(atom->type) == kCookieTypeOggSerialNo && EndianS32_BtoN(atom->size) <= mCookieSize) {
+ ogg_stream_init(&mO_st, EndianS32_BtoN(atom->serialno));
+ }
+ }
+
+ ogg_stream_reset(&mO_st);
+
+ CAFLACDecoder::InitializeCompressionSettings();
+}
Property changes on: trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.cpp
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.h
===================================================================
--- trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.h 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.h 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,69 @@
+/*
+ * CAOggFLACDecoder.h
+ *
+ * CAOggFLACDecoder class definition.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#if !defined(__CAOggFLACDecoder_h__)
+#define __CAOggFLACDecoder_h__
+
+#include <Ogg/ogg.h>
+#include <vector>
+
+#include "CAFLACDecoder.h"
+
+#include "CAStreamBasicDescription.h"
+
+
+class CAOggFLACDecoder :
+public CAFLACDecoder
+{
+ public:
+ CAOggFLACDecoder();
+ virtual ~CAOggFLACDecoder();
+
+ virtual UInt32 ProduceOutputPackets(void* outOutputData, UInt32& ioOutputDataByteSize, UInt32& ioNumberPackets,
+ AudioStreamPacketDescription* outPacketDescription);
+ virtual void SetCurrentInputFormat(const AudioStreamBasicDescription& inInputFormat);
+
+ protected:
+ virtual void BDCInitialize(UInt32 inInputBufferByteSize);
+ virtual void BDCUninitialize();
+ virtual void BDCReset();
+ virtual void BDCReallocate(UInt32 inInputBufferByteSize);
+
+ virtual void InPacket(const void* inInputData, const AudioStreamPacketDescription* inPacketDescription);
+
+ void InitializeCompressionSettings();
+
+ ogg_stream_state mO_st;
+ std::vector<SInt32> mFramesBufferedList;
+};
+
+
+
+#endif /* __CAOggFLACDecoder_h__ */
Property changes on: trunk/xiph-qt/CAFLAC/src/CAOggFLACDecoder.h
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/flac_entrypoints.cpp
===================================================================
--- trunk/xiph-qt/CAFLAC/src/flac_entrypoints.cpp 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/flac_entrypoints.cpp 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,46 @@
+/*
+ * flac_entrypoints.cpp
+ *
+ * Declaration of the entry points for the FLAC component.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with XiphQT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#include "CAFLACDecoder.h"
+#include "CAOggFLACDecoder.h"
+
+#include "ACCodecDispatch.h"
+
+extern "C"
+ComponentResult CAFLACDecoderEntry(ComponentParameters* inParameters, CAFLACDecoder* inThis)
+{
+ return ACCodecDispatch(inParameters, inThis);
+}
+
+extern "C"
+ComponentResult CAOggFLACDecoderEntry(ComponentParameters* inParameters, CAOggFLACDecoder* inThis)
+{
+ return ACCodecDispatch(inParameters, inThis);
+}
Property changes on: trunk/xiph-qt/CAFLAC/src/flac_entrypoints.cpp
___________________________________________________________________
Name: svn:keywords
+ Id
Added: trunk/xiph-qt/CAFLAC/src/flac_versions.h
===================================================================
--- trunk/xiph-qt/CAFLAC/src/flac_versions.h 2006-01-28 13:04:14 UTC (rev 10760)
+++ trunk/xiph-qt/CAFLAC/src/flac_versions.h 2006-01-28 19:30:37 UTC (rev 10761)
@@ -0,0 +1,40 @@
+/*
+ * flac_versions.h
+ *
+ * The current version of the FLAC component.
+ *
+ *
+ * Copyright (c) 2005-2006 Arek Korbik
+ *
+ * This file is part of XiphQT, the Xiph QuickTime Components.
+ *
+ * XiphQT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * XiphQT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with XiphQT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ *
+ * Last modified: $Id$
+ *
+ */
+
+
+#if !defined(__flac_versions_h__)
+#define __flac_versions_h__
+
+#ifdef DEBUG
+#define kCAFLAC_adec_Version (0x00FF0101)
+#else
+#define kCAFLAC_adec_Version (0x00000101)
+#endif /* DEBUG */
+
+#endif /* __flac_versions_h__ */
Property changes on: trunk/xiph-qt/CAFLAC/src/flac_versions.h
___________________________________________________________________
Name: svn:keywords
+ Id
More information about the commits
mailing list