[xiph-commits] r10808 - in trunk: ogg/macosx/English.lproj oggdsf oggdsf/build/NSIS/Release oggdsf/build/oggcodecs oggdsf/sln/oggdsf_all oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder oggdsf/src/lib/codecs/cmml/dsfCMMLRawSource oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder oggdsf/src/lib/codecs/flac/filters/dsfNativeFLACSource oggdsf/src/lib/codecs/flac/libs/libFLACHelper oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder oggdsf/src/lib/codecs/theora/libs/libOOTheora oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder oggdsf/src/lib/core/directshow/dsfOggMux oggdsf/src/lib/core/ogg/libOOOgg oggdsf/src/lib/core/ogg/libOOOggSeek oggdsf/src/lib/player/libDSPlayDotNET oggdsf/src/tools/OOOggPageInfo

illiminable at svn.xiph.org illiminable at svn.xiph.org
Sun Feb 12 13:55:54 PST 2006


Author: illiminable
Date: 2006-02-12 13:52:56 -0800 (Sun, 12 Feb 2006)
New Revision: 10808

Modified:
   trunk/ogg/macosx/English.lproj/InfoPlist.strings
   trunk/oggdsf/AUTHORS
   trunk/oggdsf/build/NSIS/Release/oggcodecs_release.nsi
   trunk/oggdsf/build/oggcodecs/oggcodecs.vdproj
   trunk/oggdsf/sln/oggdsf_all/oggdsf_all.sln
   trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.cpp
   trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.h
   trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/cmmldecoderdllstuff.h
   trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/dsfCMMLDecoder.vcproj
   trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLRawSource/cmmlrawsourcedllstuff.h
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.cpp
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.h
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.cpp
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.h
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACdecoderdllstuff.h
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/dsfFLACDecoder.vcproj
   trunk/oggdsf/src/lib/codecs/flac/filters/dsfNativeFLACSource/NativeFLACSourceFilter.cpp
   trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACHeaderTweaker.cpp
   trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.cpp
   trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.h
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.cpp
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.h
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.cpp
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.h
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/dsfSpeexDecoder.vcproj
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/speexdecoderdllstuff.h
   trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/stdafx.h
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.cpp
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.h
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.cpp
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.h
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.cpp
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.h
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/dsfTheoraDecoder.vcproj
   trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/theoradecoderdllstuff.h
   trunk/oggdsf/src/lib/codecs/theora/libs/libOOTheora/TheoraDecoder.cpp
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.cpp
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.h
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.cpp
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.h
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.cpp
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.h
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/dsfVorbisDecoder.vcproj
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/stdafx.h
   trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/vorbisdecoderdllstuff.h
   trunk/oggdsf/src/lib/core/directshow/dsfOggMux/OggMuxInputPin.cpp
   trunk/oggdsf/src/lib/core/directshow/dsfOggMux/oggmuxdllstuff.h
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.cpp
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.h
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/IFIFOBuffer.h
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggDataBuffer.cpp
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.cpp
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.h
   trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPage.cpp
   trunk/oggdsf/src/lib/core/ogg/libOOOggSeek/libOOOggSeek.vcproj
   trunk/oggdsf/src/lib/player/libDSPlayDotNET/DSPlay.cpp
   trunk/oggdsf/src/tools/OOOggPageInfo/OOOggPageInfo.cpp
Log:
* Partial merge of changed files (Do not use this rev.)

Modified: trunk/ogg/macosx/English.lproj/InfoPlist.strings
===================================================================
--- trunk/ogg/macosx/English.lproj/InfoPlist.strings	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/ogg/macosx/English.lproj/InfoPlist.strings	2006-02-12 21:52:56 UTC (rev 10808)
@@ -1,3 +1,6 @@
 þÿ / *   L o c a l i z e d   v e r s i o n s   o f   I n f o . p l i s t   k e y s   * / 
  
  C F B u n d l e N a m e   =   " O g g " ; 
+ C F B u n d l e S h o r t V e r s i o n S t r i n g   =   " O g g   v e r s i o n   1 . 1 1 " ; 
+ C F B u n d l e G e t I n f o S t r i n g   =   " O g g   v e r s i o n   1 . 1 1 ,   C o p y r i g h t   1 9 9 4 - 2 0 0 1 ,   X i p h o p h o r u s . " ; 
+ N S H u m a n R e a d a b l e C o p y r i g h t   =   " C o p y r i g h t   1 9 9 4 - 2 0 0 1 ,   X i p h o p h o r u s . " ; 

Modified: trunk/oggdsf/AUTHORS
===================================================================
--- trunk/oggdsf/AUTHORS	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/AUTHORS	2006-02-12 21:52:56 UTC (rev 10808)
@@ -59,7 +59,6 @@
 *** dsfDiracEncodeFilter
 *** dsfFLACDecoder
 *** dsfFLACEncoder
-*** dsfNativeFLACSource
 *** dsfOggDemux
 *** dsfOggMux	
 *** dsfSeeking
@@ -86,6 +85,14 @@
 
 	Zentaro Kavanagh <ogg at illiminable.com>
 		- Design and coding.
+
+*** dsfNativeFLACSource
+
+	Zentaro Kavanagh <ogg at illiminable.com>
+		- Design and coding.
+
+	Christophe Thibault
+		- Patch to handle files with id3 tags.
 ==============================================================
 *** libfishsound
 	Conrad Parker <conrad at metadecks.org>

Modified: trunk/oggdsf/build/NSIS/Release/oggcodecs_release.nsi
===================================================================
--- trunk/oggdsf/build/NSIS/Release/oggcodecs_release.nsi	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/build/NSIS/Release/oggcodecs_release.nsi	2006-02-12 21:52:56 UTC (rev 10808)
@@ -7,7 +7,10 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "oggcodecs"
-!define PRODUCT_VERSION "0.70.0210"
+
+;	CHANGE EVERY VERSION
+!define PRODUCT_VERSION "0.70.0753"					
+
 !define PRODUCT_PUBLISHER "illiminable"
 !define PRODUCT_WEB_SITE "http://www.illiminable.com/ogg/"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\OOOggDump.exe"
@@ -16,6 +19,13 @@
 !define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
 
 
+; Path from .nsi to oggcodecs root
+!define OGGCODECS_ROOT_DIR "..\..\.."
+
+; Local Build Path for configuration
+!define OGGCODECS_CONFIG_PATH "Release"
+!define OGGCODECS_VORBIS_CONFIG_PATH "Vorbis_Dynamic_Release"
+
 SetCompressor lzma
 
 ; MUI 1.67 compatible ------
@@ -38,7 +48,7 @@
 !insertmacro MUI_PAGE_WELCOME
 ; License page
 !define MUI_LICENSEPAGE_CHECKBOX
-!insertmacro MUI_PAGE_LICENSE "..\..\..\COPYRIGHTS.rtf"
+!insertmacro MUI_PAGE_LICENSE "${OGGCODECS_ROOT_DIR}\COPYRIGHTS.rtf"
 ; Directory page
 !insertmacro MUI_PAGE_DIRECTORY
 ; Start menu page
@@ -93,90 +103,101 @@
   SetOutPath "$INSTDIR"
   SetOverwrite ifnewer
 
-  ; Runtime libraries from visual studio
+  ; Runtime libraries from visual studio - 2
   File "${VS_RUNTIME_LOCATION}\msvcr71.dll"
   File "${VS_RUNTIME_LOCATION}\msvcp71.dll"
 
 
-  ; Libraries
-  File "..\..\..\src\lib\core\ogg\libOOOgg\Release\libOOOgg.dll"
-  File "..\..\..\src\lib\core\ogg\libOOOggSeek\Release\libOOOggSeek.dll"
-  File "..\..\..\src\lib\codecs\cmml\libCMMLTags\Release\libCMMLTags.dll"
-  File "..\..\..\src\lib\codecs\cmml\libCMMLParse\Release\libCMMLParse.dll"
-  File "..\..\..\src\lib\codecs\vorbis\libs\libvorbis\win32\Vorbis_Dynamic_Release\vorbis.dll"
+  ; Libraries - 11
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\ogg\libOOOgg\${OGGCODECS_CONFIG_PATH}\libOOOgg.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\ogg\libOOOggSeek\${OGGCODECS_CONFIG_PATH}\libOOOggSeek.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\cmml\libCMMLTags\${OGGCODECS_CONFIG_PATH}\libCMMLTags.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\cmml\libCMMLParse\${OGGCODECS_CONFIG_PATH}\libCMMLParse.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\vorbis\libs\libvorbis\win32\${OGGCODECS_VORBIS_CONFIG_PATH}\vorbis.dll"
  
-  File "..\..\..\src\lib\codecs\theora\libs\libOOTheora\Release\libOOTheora.dll"
-  File "..\..\..\src\lib\codecs\flac\libs\libflac\obj\release\bin\libFLAC.dll"
-  File "..\..\..\src\lib\codecs\flac\libs\libflac\obj\release\bin\libFLAC++.dll"
-  File "..\..\..\src\lib\codecs\helper\libfishsound\win32\Release\libfishsound.dll"
-  File "..\..\..\src\lib\core\ogg\libVorbisComment\Release\libVorbisComment.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\theora\libs\libOOTheora\${OGGCODECS_CONFIG_PATH}\libOOTheora.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\flac\libs\libflac\obj\${OGGCODECS_CONFIG_PATH}\bin\libFLAC.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\flac\libs\libflac\obj\${OGGCODECS_CONFIG_PATH}\bin\libFLAC++.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\helper\libfishsound\win32\${OGGCODECS_CONFIG_PATH}\libfishsound.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\ogg\libVorbisComment\${OGGCODECS_CONFIG_PATH}\libVorbisComment.dll"
 
-  File "..\..\..\src\lib\helper\libTemporalURI\Release\libTemporalURI.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\helper\libTemporalURI\${OGGCODECS_CONFIG_PATH}\libTemporalURI.dll"
 
 
 
-  ; Utilites
-  File "..\..\..\src\tools\OOOggDump\Release\OOOggDump.exe"
-  File "..\..\..\src\tools\OOOggStat\Release\OOOggStat.exe"
-  File "..\..\..\src\tools\OOOggValidate\Release\OOOggValidate.exe"
-  File "..\..\..\src\tools\OOOggCommentDump\Release\OOOggCommentDump.exe"
+  ; Utilites - 4
+  File "${OGGCODECS_ROOT_DIR}\src\tools\OOOggDump\${OGGCODECS_CONFIG_PATH}\OOOggDump.exe"
+  File "${OGGCODECS_ROOT_DIR}\src\tools\OOOggStat\${OGGCODECS_CONFIG_PATH}\OOOggStat.exe"
+  File "${OGGCODECS_ROOT_DIR}\src\tools\OOOggValidate\${OGGCODECS_CONFIG_PATH}\OOOggValidate.exe"
+  File "${OGGCODECS_ROOT_DIR}\src\tools\OOOggCommentDump\${OGGCODECS_CONFIG_PATH}\OOOggCommentDump.exe"
 
 
-  ; Text files
-  File "..\..\..\ABOUT.rtf"
-  File "..\..\..\VERSIONS"
-  File "..\..\..\README"
-  File "..\..\..\COPYRIGHTS.rtf"
-  File "..\..\..\COPYRIGHTS"
+  ; Text files - 7
+  File "${OGGCODECS_ROOT_DIR}\ABOUT.rtf"
+  File "${OGGCODECS_ROOT_DIR}\VERSIONS"
+  File "${OGGCODECS_ROOT_DIR}\README"
+  File "${OGGCODECS_ROOT_DIR}\COPYRIGHTS.rtf"
+  File "${OGGCODECS_ROOT_DIR}\COPYRIGHTS"
 
-  File "..\..\..\AUTHORS"
-  File "..\..\..\HISTORY"
+  File "${OGGCODECS_ROOT_DIR}\AUTHORS"
+  File "${OGGCODECS_ROOT_DIR}\HISTORY"
 
 
-  ; Install Filters
-  File "..\..\..\src\lib\core\directshow\dsfSeeking\Release\dsfSeeking.dll"
-  File "..\..\..\src\lib\codecs\flac\filters\dsfFLACEncoder\Release\dsfFLACEncoder.dll"
-  File "..\..\..\src\lib\codecs\speex\filters\dsfSpeexEncoder\Release\dsfSpeexEncoder.dll"
-  File "..\..\..\src\lib\codecs\theora\filters\dsfTheoraEncoder\Release\dsfTheoraEncoder.dll"
-  File "..\..\..\src\lib\codecs\vorbis\filters\dsfVorbisEncoder\Release\dsfVorbisEncoder.dll"
+  ; Install Filters - 16
+  
 
-  File "..\..\..\src\lib\codecs\flac\filters\dsfNativeFLACSource\Release\dsfNativeFLACSource.dll"
-  File "..\..\..\src\lib\codecs\speex\filters\dsfSpeexDecoder\Release\dsfSpeexDecoder.dll"
-  File "..\..\..\src\lib\codecs\theora\filters\dsfTheoraDecoder\Release\dsfTheoraDecoder.dll"
-  File "..\..\..\src\lib\codecs\flac\filters\dsfFLACDecoder\Release\dsfFLACDecoder.dll"
-  File "..\..\..\src\lib\codecs\vorbis\filters\dsfVorbisDecoder\Release\dsfVorbisDecoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\flac\filters\dsfFLACEncoder\${OGGCODECS_CONFIG_PATH}\dsfFLACEncoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\speex\filters\dsfSpeexEncoder\${OGGCODECS_CONFIG_PATH}\dsfSpeexEncoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\theora\filters\dsfTheoraEncoder\${OGGCODECS_CONFIG_PATH}\dsfTheoraEncoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\vorbis\filters\dsfVorbisEncoder\${OGGCODECS_CONFIG_PATH}\dsfVorbisEncoder.dll"
 
-  File "..\..\..\src\lib\core\directshow\dsfOggDemux\Release\dsfOggDemux.dll"
-  File "..\..\..\src\lib\core\directshow\dsfOggMux\Release\dsfOggMux.dll"
-  File "..\..\..\src\lib\codecs\cmml\dsfCMMLDecoder\Release\dsfCMMLDecoder.dll"
-  File "..\..\..\src\lib\codecs\cmml\dsfCMMLRawSource\Release\dsfCMMLRawSource.dll"
-  File "..\..\..\src\lib\core\directshow\dsfSubtitleVMR9\Release\dsfSubtitleVMR9.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\flac\filters\dsfNativeFLACSource\${OGGCODECS_CONFIG_PATH}\dsfNativeFLACSource.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\speex\filters\dsfSpeexDecoder\${OGGCODECS_CONFIG_PATH}\dsfSpeexDecoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\theora\filters\dsfTheoraDecoder\${OGGCODECS_CONFIG_PATH}\dsfTheoraDecoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\flac\filters\dsfFLACDecoder\${OGGCODECS_CONFIG_PATH}\dsfFLACDecoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\vorbis\filters\dsfVorbisDecoder\${OGGCODECS_CONFIG_PATH}\dsfVorbisDecoder.dll"
 
-  File "..\..\..\src\lib\core\directshow\dsfAnxDemux\Release\dsfAnxDemux.dll"
-  File "..\..\..\src\lib\core\directshow\dsfAnxMux\Release\dsfAnxMux.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\ogm\filters\dsfOGMDecoder\${OGGCODECS_CONFIG_PATH}\dsfOGMDecoder.dll"
 
-; Register libraries
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfOggDemux2\${OGGCODECS_CONFIG_PATH}\dsfOggDemux2.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfOggMux\${OGGCODECS_CONFIG_PATH}\dsfOggMux.dll"
+
+  ; File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfSeeking\${OGGCODECS_CONFIG_PATH}\dsfSeeking.dll"
+
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\cmml\dsfCMMLDecoder\${OGGCODECS_CONFIG_PATH}\dsfCMMLDecoder.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\codecs\cmml\dsfCMMLRawSource\${OGGCODECS_CONFIG_PATH}\dsfCMMLRawSource.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfSubtitleVMR9\${OGGCODECS_CONFIG_PATH}\dsfSubtitleVMR9.dll"
+
+  ; File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfAnxDemux\${OGGCODECS_CONFIG_PATH}\dsfAnxDemux.dll"
+  File "${OGGCODECS_ROOT_DIR}\src\lib\core\directshow\dsfAnxMux\${OGGCODECS_CONFIG_PATH}\dsfAnxMux.dll"
+
+  ; Register libraries - 16
+
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfFLACEncoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfSpeexEncoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfTheoraEncoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfVorbisEncoder.dll"'
+  
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfNativeFLACSource.dll"'
-
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfSpeexDecoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfTheoraDecoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfFLACDecoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfVorbisDecoder.dll"'
-  ExecWait 'regsvr32 "/s" "$INSTDIR\dsfOggDemux.dll"'
+  ExecWait 'regsvr32 "/s" "$INSTDIR\dsfOGMDecoder.dll"'
 
+  ExecWait 'regsvr32 "/s" "$INSTDIR\dsfOggDemux2.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfOggMux.dll"'
+
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfCMMLDecoder.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfCMMLRawSource.dll"'
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfSubtitleVMR9.dll"'
-  ExecWait 'regsvr32 "/s" "$INSTDIR\dsfAnxDemux.dll"'
 
   ExecWait 'regsvr32 "/s" "$INSTDIR\dsfAnxMux.dll"'
 
+  ; ExecWait 'regsvr32 "/s" "$INSTDIR\dsfAnxDemux.dll"'
 
+
+
   ;Sleep 10000
 ; Shortcuts
   !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
@@ -203,11 +224,36 @@
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
 
 
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Registry Entries for directshow and WMP
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	*	Media Group Entries for WMP
+;;;			-	flac (audio)
+;;;			-	oga
+;;;			-	ogv
+;;;			-	axa
+;;;			-	axv
+;;;			-	spx
+;;;			-	ogm(????? TODO:::)
+;;;			-	ogg(TODO::: Check if can have no group)
+;;;	*	Mime Type Entries for WMP
+;;;	*	Extension Entries for WMP - TODO::: Other entries, icons
+;;;	*	Media Type Entries/Filter association for Directshow
+;;;	*	MLS(?) Entries for WMP
 
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Media Group Entries - 6
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_flac.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\FLAC]
 ;@="FLAC File (flac)"
@@ -219,7 +265,6 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_oga.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\OGA]
 ;@="Ogg File (oga)"
@@ -231,7 +276,6 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_ogv.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\OGV]
 ;@="Ogg File (ogv)"
@@ -242,9 +286,32 @@
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\OGV" "MIME Types" "video/x-ogg"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_spx.reg
 ;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\AXA]
+;@="Annodex File (axa)"
+;"Extensions"=".axa"
+;"MIME Types"="audio/x-annodex"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\AXA" "" "Annodex File (axa)"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\AXA" "Extensions" ".axa"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\AXA" "MIME Types" "audio/x-annodex"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\AXV]
+;@="Annodex File (axv)"
+;"Extensions"=".axv"
+;"MIME Types"="video/x-annodex"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\AXV" "" "Annodex File (axv)"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\AXV" "Extensions" ".axv"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\AXV" "MIME Types" "video/x-annodex"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\SPX]
 ;@="Ogg File (spx)"
 ;"Extensions"=".spx"
@@ -255,24 +322,32 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	WMP Mime type entries - 7
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_app_anx.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex]
-;@="Anx File"
+;@="Annodex File"
 ;"AlreadyRegistered"="yes"
 ;"Extension.Key"=".anx"
-;"Extensions.CommaSep"="anx"
-;"Extensions.SpaceSep"=".anx"
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "" "Anx File"
+;"Extensions.CommaSep"="anx,axa,axv"
+;"Extensions.SpaceSep"=".anx .axa .axv"
+
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "" "Annodex File"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "Extension.Key" ".anx"
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "Extensions.CommaSep" "anx"
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "Extensions.SpaceSep" ".anx"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "Extensions.CommaSep" "anx,axa,axv"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex" "Extensions.SpaceSep" ".anx .axa .axv"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_app_ogg.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg]
 ;@="Ogg File"
@@ -280,6 +355,7 @@
 ;"Extension.Key"=".ogg"
 ;"Extensions.CommaSep"="ogg,oga,ogv,spx"
 ;"Extensions.SpaceSep"=".ogg .oga .ogv .spx"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg" "" "Ogg File"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg" "Extension.Key" ".ogg"
@@ -288,64 +364,136 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_aud_flac.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac]
 ;@="FLAC Audio File"
 ;"AlreadyRegistered"="yes"
 ;"Extension.Key"=".flac"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac" "" "FLAC Audio File"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac" "Extension.Key" ".flac"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_aud_ogg.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg]
 ;@="Ogg Audio File"
 ;"AlreadyRegistered"="yes"
 ;"Extension.Key"=".oga"
-;"Extensions.CommaSep"="ogg,spx"
-;"Extensions.SpaceSep"=".ogg .spx"
+;"Extensions.CommaSep"="oga,spx"
+;"Extensions.SpaceSep"=".oga .spx"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "" "Ogg Audio File"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "Extension.Key" ".oga"
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "Extensions.CommaSep" "ogg,spx"
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "Extensions.SpaceSep" ".ogg .spx"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "Extensions.CommaSep" "oga,spx"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg" "Extensions.SpaceSep" ".oga .spx"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_vid_ogg.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg]
 ;@="Ogg Video File"
 ;"AlreadyRegistered"="yes"
 ;"Extension.Key"=".ogv"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg" "" "Ogg Video File"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg" "Extension.Key" ".ogv"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_anx.reg
 ;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex]
+;@="Annodex Audio File"
+;"AlreadyRegistered"="yes"
+;"Extension.Key"=".axa"
+;"Extensions.CommaSep"="axa"
+;"Extensions.SpaceSep"=".axa"
+
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex" "" "Annodex Audio File"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex" "AlreadyRegistered" "yes"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex" "Extension.Key" ".axa"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex" "Extensions.CommaSep" "axa"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex" "Extensions.SpaceSep" ".axa"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-annodex]
+;@="Annodex Video File"
+;"AlreadyRegistered"="yes"
+;"Extension.Key"=".axv"
+
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-annodex" "" "Annodex Video File"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-annodex" "AlreadyRegistered" "yes"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-annodex" "Extension.Key" ".axv"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	WMP extension entries - 8
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx]
 ;"AlreadyRegistered"="yes"
 ;"MediaType.Description"="Annodex File"
 ;"Permissions"=dword:0000000f
 ;"Runtime"=dword:00000007
 ;"Extension.MIME"="application/x-annodex"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx" "MediaType.Description" "Annodex File"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx" "Permissions" 0x0000000f
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx" "Runtime" 0x00000007
-  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac" "Extension.MIME" "application/x-annodex"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx" "Extension.MIME" "application/x-annodex"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_flac.reg
 ;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa]
+;"AlreadyRegistered"="yes"
+;"MediaType.Description"="Annodex File"
+;"Permissions"=dword:0000000f
+;"Runtime"=dword:00000007
+;"PerceivedType"="audio"
+;"Extension.MIME"="audio/x-annodex"
+
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "AlreadyRegistered" "yes"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "MediaType.Description" "Annodex File"
+  WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "Permissions" 0x0000000f
+  WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "Runtime" 0x00000007
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "PerceivedType" "audio"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa" "Extension.MIME" "audio/x-annodex"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
+;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv]
+;"AlreadyRegistered"="yes"
+;"MediaType.Description"="Annodex File"
+;"Permissions"=dword:0000000f
+;"Runtime"=dword:00000007
+;"Extension.MIME"="video/x-annodex"
+
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "AlreadyRegistered" "yes"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "MediaType.Description" "Annodex File"
+  WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "Permissions" 0x0000000f
+  WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "Runtime" 0x00000007
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "PerceivedType" "video"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv" "Extension.MIME" "video/x-annodex"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac]
 ;"AlreadyRegistered"="yes"
 ;"MediaType.Description"="FLAC Audio"
@@ -353,6 +501,7 @@
 ;"Runtime"=dword:00000007
 ;"PerceivedType"="audio"
 ;"Extension.MIME"="audio/x-flac"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac" "MediaType.Description" "FLAC Audio"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac" "Permissions" 0x0000000f
@@ -371,6 +520,7 @@
 ;"Runtime"=dword:00000007
 ;"PerceivedType"="audio"
 ;"Extension.MIME"="audio/x-ogg"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.oga" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.oga" "MediaType.Description" "Ogg Audio"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.oga" "Permissions" 0x0000000f
@@ -388,6 +538,7 @@
 ;"Permissions"=dword:0000000f
 ;"Runtime"=dword:00000007
 ;"Extension.MIME"="application/ogg"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogg" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogg" "MediaType.Description" "Ogg File"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogg" "Permissions" 0x0000000f
@@ -405,6 +556,7 @@
 ;"Runtime"=dword:00000007
 ;"PerceivedType"="video"
 ;"Extension.MIME"="video/x-ogg"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogv" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogv" "MediaType.Description" "Ogg Video"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogv" "Permissions" 0x0000000f
@@ -423,6 +575,7 @@
 ;"Runtime"=dword:00000007
 ;"PerceivedType"="audio"
 ;"Extension.MIME"="audio/x-ogg"
+
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx" "AlreadyRegistered" "yes"
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx" "MediaType.Description" "Ogg Speex Audio"
   WriteRegDWORD HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx" "Permissions" 0x0000000f
@@ -431,80 +584,118 @@
   WriteRegStr HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx" "Extension.MIME" "audio/x-ogg"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	Directshow extension to filter mapping - 8
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+
+
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_anx.reg
 ;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.anx]
-;"Source Filter"="{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
-  WriteRegStr HKCR "Media Type\Extensions\.anx" "Source Filter" "{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
+  WriteRegStr HKCR "Media Type\Extensions\.anx" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
+;[HKEY_CLASSES_ROOT\Media Type\Extensions\.axa]
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 
+  WriteRegStr HKCR "Media Type\Extensions\.axa" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_flac.reg
 ;=========================================================
+;[HKEY_CLASSES_ROOT\Media Type\Extensions\.axv]
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
+  WriteRegStr HKCR "Media Type\Extensions\.axv" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.flac]
 ;"Source Filter"="{6DDA37BA-0553-499a-AE0D-BEBA67204548}"
+
   WriteRegStr HKCR "Media Type\Extensions\.flac" "Source Filter" "{6DDA37BA-0553-499a-AE0D-BEBA67204548}"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_http.reg
 ;=========================================================
-;[HKEY_CLASSES_ROOT\http\Extensions]
-;".OGG"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".OGV"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".OGA"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".SPX"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".ANX"="{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
-  WriteRegStr HKCR "http\Extensions" ".OGG" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "http\Extensions" ".OGV" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "http\Extensions" ".OGA" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "http\Extensions" ".SPX" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "http\Extensions" ".ANX" "{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_oga.reg
-;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.oga]
-;"Source Filter"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "Media Type\Extensions\.oga" "Source Filter" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 
+  WriteRegStr HKCR "Media Type\Extensions\.oga" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_ogg.reg
 ;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.ogg]
-;"Source Filter"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "Media Type\Extensions\.ogg" "Source Filter" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 
+  WriteRegStr HKCR "Media Type\Extensions\.ogg" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_ogv.reg
 ;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.ogv]
-;"Source Filter"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "Media Type\Extensions\.ogv" "Source Filter" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 
+  WriteRegStr HKCR "Media Type\Extensions\.ogv" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_spx.reg
 ;=========================================================
 ;[HKEY_CLASSES_ROOT\Media Type\Extensions\.spx]
-;"Source Filter"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-  WriteRegStr HKCR "Media Type\Extensions\.spx" "Source Filter" "{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+;"Source Filter"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
+  WriteRegStr HKCR "Media Type\Extensions\.spx" "Source Filter" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	Directshow extension to filter mapping for HTTP - 7
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; mt_http.reg
+;=========================================================
+;[HKEY_CLASSES_ROOT\http\Extensions]
+;".OGG"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".OGV"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".OGA"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".SPX"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".ANX"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".AXV"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+;".AXA"="{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 
+  WriteRegStr HKCR "http\Extensions" ".OGG" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".OGV" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".OGA" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".SPX" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".ANX" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".AXV" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
+  WriteRegStr HKCR "http\Extensions" ".AXA" "{C9361F5A-3282-4944-9899-6D99CDC5370B}"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;	MLS Perceived type - 6
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; wmp_mls.reg
 ;=========================================================
 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions]
 ;"ogv"="video"
 ;"oga"="audio"
+;"axv"="video"
+;"axa"="audio"
 ;"spx"="audio"
 ;"flac"="audio"
   WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "ogv" "video"
   WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "oga" "audio"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "axv" "video"
+  WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "axa" "audio"
   WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "spx" "audio"
   WriteRegStr HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "flac" "audio"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -523,18 +714,22 @@
 FunctionEnd
 
 Section Uninstall
-; Unregister libraries
 
+
+  ; Unregister libraries - 16
+
   ; Unregister core annodex libraries
+  
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfSubtitleVMR9.dll"'
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfCMMLDecoder.dll"'
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfCMMLRawSource.dll"'
-  ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfAnxDemux.dll"'
+  
+  ; ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfAnxDemux.dll"'
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfAnxMux.dll"'
 
   
   ; Unregister core ogg libraries
-  ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfOggDemux.dll"'
+  ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfOggDemux2.dll"'
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfOggMux.dll"'
 
 
@@ -552,165 +747,94 @@
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfFLACDecoder.dll"'
   ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfVorbisDecoder.dll"'
 
+  ExecWait 'regsvr32 "/s" "/u" "$INSTDIR\dsfOGMDecoder.dll"'
 
 
-  
 
 
+
 ; Get rid of all the registry keys we made for directshow and WMP
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_flac.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\FLAC]
-  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\FLAC"
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_oga.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\OGA]
+  ; Media Type Groups entries - 6
+
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\FLAC"  
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\OGA"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_ogv.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\OGV]
-  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\OGV"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_groups_spx.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\SPX]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\SPX"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Audio\AXA"
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_app_ogg.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg]
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\OGV"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Groups\Video\AXV"
+
+
+  ; MIME Type entries	- 7
+
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/ogg"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_aud_flac.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-flac"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_aud_ogg.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-ogg"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; media_mime_vid_ogg.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-ogg"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_flac.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac]
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\application/x-annodex"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\audio/x-annodex"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\MIME Types\video/x-annodex"
+
+
+  ; File Extension Entries - 8
+
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.flac"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_oga.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.oga]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.oga"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_ogg.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogg]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogg"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_ogv.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogv]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.ogv"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mm_medlib_spx.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx]
   DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.spx"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.anx"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axa"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Multimedia\WMPlayer\Extensions\.axv"
+
   
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_anx.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.anx]
+  ; Extension to filter mapping - 8
+
   DeleteRegKey HKCR "Media Type\Extensions\.anx"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_flac.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.flac]
+  DeleteRegKey HKCR "Media Type\Extensions\.axa"
+  DeleteRegKey HKCR "Media Type\Extensions\.axv"
   DeleteRegKey HKCR "Media Type\Extensions\.flac"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_http.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\http\Extensions]
-;".OGG"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".OGV"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".OGA"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".SPX"="{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
-;".ANX"="{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+  DeleteRegKey HKCR "Media Type\Extensions\.oga"
+  DeleteRegKey HKCR "Media Type\Extensions\.ogg"
+  DeleteRegKey HKCR "Media Type\Extensions\.ogv"
+  DeleteRegKey HKCR "Media Type\Extensions\.spx"
+
+
+  ; Extension to filter mapping for http - 7
   DeleteRegValue HKCR "http\Extensions" ".OGG"
   DeleteRegValue HKCR "http\Extensions" ".OGV"
   DeleteRegValue HKCR "http\Extensions" ".OGA"
   DeleteRegValue HKCR "http\Extensions" ".SPX"
   DeleteRegValue HKCR "http\Extensions" ".ANX"
+  DeleteRegValue HKCR "http\Extensions" ".AXA"
+  DeleteRegValue HKCR "http\Extensions" ".AXV"
+  ; TODO::: FLAC
   
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_oga.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.oga]
-  DeleteRegKey HKCR "Media Type\Extensions\.oga"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_ogg.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.ogg]
-  DeleteRegKey HKCR "Media Type\Extensions\.ogg"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_ogv.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.ogv]
-  DeleteRegKey HKCR "Media Type\Extensions\.ogv"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; mt_spx.reg
-;=========================================================
-;[HKEY_CLASSES_ROOT\Media Type\Extensions\.spx]
-  DeleteRegKey HKCR "Media Type\Extensions\.spx"
-  
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; wmp_mls.reg
-;=========================================================
-;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions]
-;"ogv"="video"
-;"oga"="audio"
-;"spx"="audio"
-;"flac"="audio"
+
+  ; MLS Perceived type - 6
   DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "ogv"
   DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "oga"
+  DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "axa"
+  DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "axv"
   DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "spx"
-  DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "flac"
+  DeleteRegValue HKLM "SOFTWARE\Microsoft\MediaPlayer\MLS\Extensions" "flac"  
 
+  
 
+
+
   !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
 
-  ;Delete utils
+  ; Delete utils - 4
   Delete "$INSTDIR\OOOggCommentDump.exe"
   Delete "$INSTDIR\OOOggValidate.exe"
   Delete "$INSTDIR\OOOggStat.exe"
   Delete "$INSTDIR\OOOggDump.exe"
 
 
-  ;Delete libraries
+  ; Delete libraries - 11
   Delete "$INSTDIR\libFLAC++.dll"
   Delete "$INSTDIR\libFLAC.dll"
   Delete "$INSTDIR\libfishsound.dll"
@@ -726,30 +850,37 @@
   Delete "$INSTDIR\libTemporalURI.dll"
 
 
-  ;Delete Filter
+  ;Delete Filters - 16
   Delete "$INSTDIR\dsfVorbisEncoder.dll"
   Delete "$INSTDIR\dsfTheoraEncoder.dll"
   Delete "$INSTDIR\dsfSpeexEncoder.dll"
   Delete "$INSTDIR\dsfFLACEncoder.dll"
+
   Delete "$INSTDIR\dsfVorbisDecoder.dll"
-
   Delete "$INSTDIR\dsfFLACDecoder.dll"
   Delete "$INSTDIR\dsfTheoraDecoder.dll"
   Delete "$INSTDIR\dsfSpeexDecoder.dll"
+  Delete "$INSTDIR\dsfOGMDecoder.dll"
+
   Delete "$INSTDIR\dsfNativeFLACSource.dll"
-  Delete "$INSTDIR\dsfSubtitleVMR9.dll"
 
-  Delete "$INSTDIR\dsfAnxDemux.dll"
   Delete "$INSTDIR\dsfCMMLDecoder.dll"
-  Delete "$INSTDIR\dsfOggDemux.dll"
-  Delete "$INSTDIR\dsfSeeking.dll"
+  Delete "$INSTDIR\dsfCMMLRawSource.dll"
+
+  Delete "$INSTDIR\dsfSubtitleVMR9.dll"
+  
+  Delete "$INSTDIR\dsfOggDemux2.dll"
   Delete "$INSTDIR\dsfOggMux.dll"
 
+  ; Delete "$INSTDIR\dsfSeeking.dll"
+  
+
   Delete "$INSTDIR\dsfAnxMux.dll"
-  Delete "$INSTDIR\dsfCMMLRawSource.dll"
+  ; Delete "$INSTDIR\dsfAnxDemux.dll"
 
 
-  ;Delete text files
+
+  ; Delete text files - 7
   Delete "$INSTDIR\ABOUT.rtf"
   Delete "$INSTDIR\VERSIONS"
   Delete "$INSTDIR\README"
@@ -760,7 +891,7 @@
   Delete "$INSTDIR\HISTORY"
 
 
-  ;Delete runtimes
+  ; Delete runtimes - 2
   Delete "$INSTDIR\msvcr71.dll"
   Delete "$INSTDIR\msvcp71.dll"
 

Modified: trunk/oggdsf/build/oggcodecs/oggcodecs.vdproj
===================================================================
--- trunk/oggdsf/build/oggcodecs/oggcodecs.vdproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/build/oggcodecs/oggcodecs.vdproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -21,19 +21,19 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_0334FF23A9CE7C3807ABB7808659A808"
-        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
+        "MsmKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
+        "MsmKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
+        "MsmKey" = "8:_0CADC4E67409461481DE8E39EA059436"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
@@ -117,632 +117,632 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_42F89A4130A36CD4BA74B00F4B424775"
-        "OwnerKey" = "8:_8F970C0B2593413CA2A3BBF5F2600387"
+        "MsmKey" = "8:_4EB6175B98B54613A5087D8EA257D00A"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_02E7D9728C8944F1BD021329177F5140"
+        "MsmKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_FD547F0196C24DFBB9CAFCCEC06561BC"
+        "MsmKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_EFEA71FFF2864107815DBDECCCCA1178"
+        "MsmKey" = "8:_5752F7DAA54F2A09A6DC1D6BEB922BDD"
+        "OwnerKey" = "8:_CC5E9D059E6044FA954061CAC6A8A1C0"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_EB09F87C612C40BCA34AC87060CFEFF1"
+        "MsmKey" = "8:_578B89273D59478F861AA5BC3600D074"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_E6B7C1CA6BF74C998B68B4C3379FB830"
+        "MsmKey" = "8:_58F56CD02F64413B9459F3E151760A57"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_E1E372FA955046E6928BF533EA0AE6C3"
+        "MsmKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_DCF4ED7597F8492AA49DC521111ED0F5"
+        "MsmKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_D3E41A5878FC4EC0B0F443CF3E5991BA"
+        "MsmKey" = "8:_65015192414F476999A68339F89BEA57"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_D2048C8B212841C88E42F6ADDCA8B0A2"
+        "MsmKey" = "8:_81A3CDB604B64763884C387192BE6771"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
+        "MsmKey" = "8:_83AF8D74700947168B69E69E5160F082"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
+        "MsmKey" = "8:_8976C400668B453CB941859C4F3C6E27"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_AC8962A7F212481095173AB7C8C89025"
+        "MsmKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
+        "MsmKey" = "8:_8FDBDF6B593E4A31BDEECAA245B32EB0"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
+        "MsmKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
+        "MsmKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_8F970C0B2593413CA2A3BBF5F2600387"
+        "MsmKey" = "8:_A0E68123D9D541DFA9691752981C903A"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
+        "MsmKey" = "8:_AC8962A7F212481095173AB7C8C89025"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_8976C400668B453CB941859C4F3C6E27"
+        "MsmKey" = "8:_B280383D9C3B489DB4520726F3947362"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_65015192414F476999A68339F89BEA57"
+        "MsmKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_02E7D9728C8944F1BD021329177F5140"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_FD547F0196C24DFBB9CAFCCEC06561BC"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_58F56CD02F64413B9459F3E151760A57"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_EFEA71FFF2864107815DBDECCCCA1178"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_578B89273D59478F861AA5BC3600D074"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_EB09F87C612C40BCA34AC87060CFEFF1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_E6B7C1CA6BF74C998B68B4C3379FB830"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_E4B8E67DA0E54BB3BB025BFCF536BF3B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_4EB6175B98B54613A5087D8EA257D00A"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_E1E372FA955046E6928BF533EA0AE6C3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_408749AC43894882BEEBFF43737E505B"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_DB60960DC12343B89500B86D5AB10D02"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_3C7C3E6B832E481C8A36701A33FF3721"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_D3E41A5878FC4EC0B0F443CF3E5991BA"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_3A86D30B7A3948869605033FC8CEA4B2"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_D2048C8B212841C88E42F6ADDCA8B0A2"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_3243E453AFD94BB88B5A1014BDFCBAAE"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_D11B66B126844E2B8ED91008BCC029FA"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_273D851AE72C4D2EA8020A712DBFE5A3"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_CC5E9D059E6044FA954061CAC6A8A1C0"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_27330A8D56F34785A52342ADD956700F"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_1FDED4DADD384431A22FF1C26BE42207"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_141113E874984C0483C694B14F3C16A3"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_B280383D9C3B489DB4520726F3947362"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_0D0DD40A31F842C68B09BE0CBDE1996B"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_AC8962A7F212481095173AB7C8C89025"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_46A378A9B03E4612A645053EDB884C20"
-        "OwnerKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_4EB6175B98B54613A5087D8EA257D00A"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_8976C400668B453CB941859C4F3C6E27"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_5752F7DAA54F2A09A6DC1D6BEB922BDD"
-        "OwnerKey" = "8:_DCF4ED7597F8492AA49DC521111ED0F5"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_83AF8D74700947168B69E69E5160F082"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_578B89273D59478F861AA5BC3600D074"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_65015192414F476999A68339F89BEA57"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_58F56CD02F64413B9459F3E151760A57"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_58F56CD02F64413B9459F3E151760A57"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_65015192414F476999A68339F89BEA57"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_578B89273D59478F861AA5BC3600D074"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_02E7D9728C8944F1BD021329177F5140"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_FD547F0196C24DFBB9CAFCCEC06561BC"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_EFEA71FFF2864107815DBDECCCCA1178"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_4EB6175B98B54613A5087D8EA257D00A"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_EB09F87C612C40BCA34AC87060CFEFF1"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_408749AC43894882BEEBFF43737E505B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_E6B7C1CA6BF74C998B68B4C3379FB830"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_3C7C3E6B832E481C8A36701A33FF3721"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_E4B8E67DA0E54BB3BB025BFCF536BF3B"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_3A86D30B7A3948869605033FC8CEA4B2"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_E1E372FA955046E6928BF533EA0AE6C3"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_3243E453AFD94BB88B5A1014BDFCBAAE"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_DCF4ED7597F8492AA49DC521111ED0F5"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_273D851AE72C4D2EA8020A712DBFE5A3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_DB60960DC12343B89500B86D5AB10D02"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_27330A8D56F34785A52342ADD956700F"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_D3E41A5878FC4EC0B0F443CF3E5991BA"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_24A1793CB89A464FB683A8A3BDA774DB"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_D2048C8B212841C88E42F6ADDCA8B0A2"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_1FDED4DADD384431A22FF1C26BE42207"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_141113E874984C0483C694B14F3C16A3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_0D0DD40A31F842C68B09BE0CBDE1996B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_AC8962A7F212481095173AB7C8C89025"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_0CADC4E67409461481DE8E39EA059436"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_A5AAB8CB90C548F1820BC101A765616C"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
+        "MsmKey" = "8:_BE7E1607CB3DFD99336B28C3DAE6D111"
+        "OwnerKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_02E7D9728C8944F1BD021329177F5140"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_FD547F0196C24DFBB9CAFCCEC06561BC"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_8F970C0B2593413CA2A3BBF5F2600387"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_EFEA71FFF2864107815DBDECCCCA1178"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_EB09F87C612C40BCA34AC87060CFEFF1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_8976C400668B453CB941859C4F3C6E27"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_E6B7C1CA6BF74C998B68B4C3379FB830"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_83AF8D74700947168B69E69E5160F082"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_E1E372FA955046E6928BF533EA0AE6C3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_65015192414F476999A68339F89BEA57"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_D3E41A5878FC4EC0B0F443CF3E5991BA"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_D2048C8B212841C88E42F6ADDCA8B0A2"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_D11B66B126844E2B8ED91008BCC029FA"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_58F56CD02F64413B9459F3E151760A57"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_CC5E9D059E6044FA954061CAC6A8A1C0"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_578B89273D59478F861AA5BC3600D074"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_B280383D9C3B489DB4520726F3947362"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_4EB6175B98B54613A5087D8EA257D00A"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_AC8962A7F212481095173AB7C8C89025"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_408749AC43894882BEEBFF43737E505B"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_3C7C3E6B832E481C8A36701A33FF3721"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_3A86D30B7A3948869605033FC8CEA4B2"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_3243E453AFD94BB88B5A1014BDFCBAAE"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_273D851AE72C4D2EA8020A712DBFE5A3"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_8976C400668B453CB941859C4F3C6E27"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_27330A8D56F34785A52342ADD956700F"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_65015192414F476999A68339F89BEA57"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_24A1793CB89A464FB683A8A3BDA774DB"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_5F037C77C35B4B5098153851ADDB7B6A"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_1FDED4DADD384431A22FF1C26BE42207"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_5EB08DD30B564283AA9C9F27D80CF9E4"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_141113E874984C0483C694B14F3C16A3"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_58F56CD02F64413B9459F3E151760A57"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_0D0DD40A31F842C68B09BE0CBDE1996B"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_578B89273D59478F861AA5BC3600D074"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_56CADC6C2BCD4C178BC0C0AA13ABFEBF"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_655D5383153A6AB10D15352A7EABCC7A"
-        "OwnerKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_52EEBD17D1BC463493F06DCBC4C2CD44"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_81A3CDB604B64763884C387192BE6771"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_408749AC43894882BEEBFF43737E505B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_83AF8D74700947168B69E69E5160F082"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_3C7C3E6B832E481C8A36701A33FF3721"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_8976C400668B453CB941859C4F3C6E27"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_3A86D30B7A3948869605033FC8CEA4B2"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_8D9A2E4C592D4118B80A4AE8394D8963"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_3243E453AFD94BB88B5A1014BDFCBAAE"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_8F970C0B2593413CA2A3BBF5F2600387"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_273D851AE72C4D2EA8020A712DBFE5A3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_8FDBDF6B593E4A31BDEECAA245B32EB0"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_27330A8D56F34785A52342ADD956700F"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_950B983745EC40EF9FF08E742A6E9510"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_1FDED4DADD384431A22FF1C26BE42207"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_141113E874984C0483C694B14F3C16A3"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_A0E68123D9D541DFA9691752981C903A"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_0D0DD40A31F842C68B09BE0CBDE1996B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_A5AAB8CB90C548F1820BC101A765616C"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_0CADC4E67409461481DE8E39EA059436"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_AC8962A7F212481095173AB7C8C89025"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_0A1E63E5852E4F759F1A27E8F097727B"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_B2784574F1B848EABBE013669B46808C"
-        "OwnerKey" = "8:_DB60960DC12343B89500B86D5AB10D02"
+        "MsmKey" = "8:_C0D4AE1E920120DCE52BA754013F240A"
+        "OwnerKey" = "8:_054BE8EA6F5E45A7AB2066734E998570"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_B6A0B75A2A7A47922297CCEFC5F6F6BA"
-        "OwnerKey" = "8:_3243E453AFD94BB88B5A1014BDFCBAAE"
+        "MsmKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_B9749E2A902A46BEAE555C07E32980BB"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_C9BC15C8D94805F605A73789764CBBB2"
+        "OwnerKey" = "8:_DB60960DC12343B89500B86D5AB10D02"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
+        "MsmKey" = "8:_CC5E9D059E6044FA954061CAC6A8A1C0"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_CE3F3614A250A32BEFE6FA8B7C33D4B9"
-        "OwnerKey" = "8:_A0E68123D9D541DFA9691752981C903A"
+        "MsmKey" = "8:_D11B66B126844E2B8ED91008BCC029FA"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -771,12 +771,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_DCF4ED7597F8492AA49DC521111ED0F5"
-        "OwnerKey" = "8:_UNDEFINED"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_E1E372FA955046E6928BF533EA0AE6C3"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -901,26 +895,6 @@
         }
         "File"
         {
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_0334FF23A9CE7C3807ABB7808659A808"
-            {
-            "SourcePath" = "8:libCMMLParse.dll"
-            "TargetName" = "8:libCMMLParse.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:TRUE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{A582A373-4685-4296-BEFE-614B80A702C3}:_1ED42AE022EB477985E46FA18A63F9A5"
             {
             "SourcePath" = "8:..\\..\\AUTHORS"
@@ -981,46 +955,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_42F89A4130A36CD4BA74B00F4B424775"
-            {
-            "SourcePath" = "8:dsfOggDemux.dll"
-            "TargetName" = "8:dsfOggDemux.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:TRUE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_46A378A9B03E4612A645053EDB884C20"
-            {
-            "SourcePath" = "8:MSVCP71D.dll"
-            "TargetName" = "8:MSVCP71D.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{A582A373-4685-4296-BEFE-614B80A702C3}:_5752F7DAA54F2A09A6DC1D6BEB922BDD"
             {
             "SourcePath" = "8:WSOCK32.dll"
@@ -1041,26 +975,6 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_655D5383153A6AB10D15352A7EABCC7A"
-            {
-            "SourcePath" = "8:MSVCR71D.dll"
-            "TargetName" = "8:MSVCR71D.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{A582A373-4685-4296-BEFE-614B80A702C3}:_81A3CDB604B64763884C387192BE6771"
             {
             "SourcePath" = "8:..\\..\\COPYRIGHTS"
@@ -1101,10 +1015,10 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_B2784574F1B848EABBE013669B46808C"
+            "{A582A373-4685-4296-BEFE-614B80A702C3}:_BE7E1607CB3DFD99336B28C3DAE6D111"
             {
-            "SourcePath" = "8:libFLAC.dll"
-            "TargetName" = "8:libFLAC.dll"
+            "SourcePath" = "8:MSVCR71.dll"
+            "TargetName" = "8:MSVCR71.dll"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
             "Condition" = "8:"
@@ -1117,14 +1031,14 @@
             "SharedLegacy" = "11:FALSE"
             "PackageAs" = "3:1"
             "Register" = "3:1"
-            "Exclude" = "11:TRUE"
+            "Exclude" = "11:FALSE"
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_B6A0B75A2A7A47922297CCEFC5F6F6BA"
+            "{A582A373-4685-4296-BEFE-614B80A702C3}:_C0D4AE1E920120DCE52BA754013F240A"
             {
-            "SourcePath" = "8:libOOOgg.dll"
-            "TargetName" = "8:libOOOgg.dll"
+            "SourcePath" = "8:MSVCP71.dll"
+            "TargetName" = "8:MSVCP71.dll"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
             "Condition" = "8:"
@@ -1137,14 +1051,14 @@
             "SharedLegacy" = "11:FALSE"
             "PackageAs" = "3:1"
             "Register" = "3:1"
-            "Exclude" = "11:TRUE"
+            "Exclude" = "11:FALSE"
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{A582A373-4685-4296-BEFE-614B80A702C3}:_CE3F3614A250A32BEFE6FA8B7C33D4B9"
+            "{A582A373-4685-4296-BEFE-614B80A702C3}:_C9BC15C8D94805F605A73789764CBBB2"
             {
-            "SourcePath" = "8:libCMMLTags.dll"
-            "TargetName" = "8:libCMMLTags.dll"
+            "SourcePath" = "8:libFLAC.dll"
+            "TargetName" = "8:libFLAC.dll"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
             "Condition" = "8:"
@@ -1237,7 +1151,7 @@
         "Name" = "8:Microsoft Visual Studio"
         "ProductName" = "8:oggcodecs"
         "ProductCode" = "8:{D65F0073-A820-4085-B997-A061171595A7}"
-        "PackageCode" = "8:{B644656B-3A9C-4D07-B5C3-3048776D5C1A}"
+        "PackageCode" = "8:{11C1420F-4046-4639-9B59-63D36B93C11D}"
         "UpgradeCode" = "8:{1A644FEB-7597-4FAB-AADE-C2C7C64C5984}"
         "RestartWWWService" = "11:FALSE"
         "RemovePreviousVersions" = "11:TRUE"
@@ -3009,7 +2923,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3031,7 +2945,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3053,7 +2967,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3075,7 +2989,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3097,7 +3011,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3119,7 +3033,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3163,7 +3077,7 @@
                                             "Condition" = "8:"
                                             "Transitive" = "11:FALSE"
                                             "ValueTypes" = "3:1"
-                                            "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                            "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                             }
                                         }
                                     }
@@ -3204,7 +3118,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_61786364170C478BB5AFC954CE7E515C"
                                     {
@@ -3212,7 +3126,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_79FA5F057AF94216ABE9E7276DDA8E47"
                                     {
@@ -3220,7 +3134,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_A3128F7341634B409FFE2D43C73D45DF"
                                     {
@@ -3228,7 +3142,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_C827677C2B2E4FB0B606E0F088F509FF"
                                     {
@@ -3236,7 +3150,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_DF88D2C6144D4136A0E7E4014467CAE7"
                                     {
@@ -3244,7 +3158,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{31CA0186-1FF0-4181-AA38-3CA4040BD260}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                     "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_E07BC72942134FBE92878F642AA75D76"
                                     {
@@ -3252,7 +3166,7 @@
                                     "Condition" = "8:"
                                     "Transitive" = "11:FALSE"
                                     "ValueTypes" = "3:1"
-                                    "Value" = "8:{6F767551-E3E1-461f-A8E5-C8ED36342ED1}"
+                                    "Value" = "8:{C9361F5A-3282-4944-9899-6D99CDC5370B}"
                                     }
                                 }
                             }
@@ -3939,6 +3853,34 @@
                 {
                 }
             }
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_0CADC4E67409461481DE8E39EA059436"
+            {
+            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\ogm\\filters\\dsfOGMDecoder\\Debug\\dsfOGMDecoder.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:4"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{1C4F9412-B1DE-4E65-96C1-89522EF02997}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
             "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_0D0DD40A31F842C68B09BE0CBDE1996B"
             {
             "SourcePath" = "8:..\\..\\src\\lib\\codecs\\flac\\filters\\dsfFLACEncoder\\Debug\\dsfFLACEncoder.dll"
@@ -4527,9 +4469,9 @@
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_8F970C0B2593413CA2A3BBF5F2600387"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_950B983745EC40EF9FF08E742A6E9510"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfAnxDemux\\Debug\\dsfAnxDemux.dll"
+            "SourcePath" = "8:..\\..\\src\\tools\\AnxCutter\\Debug\\AnxCutter.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4546,18 +4488,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:4"
+            "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{F9F22B14-22FE-4651-81B8-5AE267A6B189}"
+            "OutputProjectGuid" = "8:{D50F8622-3E33-4EFC-8961-0FB7641F884B}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_950B983745EC40EF9FF08E742A6E9510"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
             {
-            "SourcePath" = "8:..\\..\\src\\tools\\AnxCutter\\Debug\\AnxCutter.exe"
+            "SourcePath" = "8:..\\..\\src\\tests\\testTemporal\\Debug\\testTemporal.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4577,15 +4519,15 @@
             "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{D50F8622-3E33-4EFC-8961-0FB7641F884B}"
+            "OutputProjectGuid" = "8:{DCABCE43-DCF2-4F31-85D3-BEA3163B32D2}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_9F87CF49E6BC48AE9DECD5A3F35FEC24"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A0E68123D9D541DFA9691752981C903A"
             {
-            "SourcePath" = "8:..\\..\\src\\tests\\testTemporal\\Debug\\testTemporal.exe"
+            "SourcePath" = "8:..\\..\\src\\tests\\testCMMLParser\\Debug\\testCMMLParser.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4605,15 +4547,15 @@
             "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{DCABCE43-DCF2-4F31-85D3-BEA3163B32D2}"
+            "OutputProjectGuid" = "8:{BF72BA81-0735-46FB-8C8C-E36758477756}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A0E68123D9D541DFA9691752981C903A"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_AC8962A7F212481095173AB7C8C89025"
             {
-            "SourcePath" = "8:..\\..\\src\\tests\\testCMMLParser\\Debug\\testCMMLParser.exe"
+            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\theora\\filters\\dsfTheoraEncoder\\Debug\\dsfTheoraEncoder.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4630,18 +4572,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
+            "ProjectOutputGroupRegister" = "3:4"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{BF72BA81-0735-46FB-8C8C-E36758477756}"
+            "OutputProjectGuid" = "8:{8C91066F-5C96-48BB-BD1F-D30FFD2A57A1}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A5AAB8CB90C548F1820BC101A765616C"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_B280383D9C3B489DB4520726F3947362"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfSeeking\\Debug\\dsfSeeking.dll"
+            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\RawAudio\\dsfOggRawAudioExtractor\\Debug\\dsfOggRawAudioExtractor.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4658,18 +4600,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
+            "ProjectOutputGroupRegister" = "3:4"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{A882A968-3013-4A27-B653-E18CF5C791FE}"
+            "OutputProjectGuid" = "8:{20DC77C5-8396-4C6D-A805-959CF8DFABB3}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_AC8962A7F212481095173AB7C8C89025"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_B9749E2A902A46BEAE555C07E32980BB"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\theora\\filters\\dsfTheoraEncoder\\Debug\\dsfTheoraEncoder.dll"
+            "SourcePath" = "8:..\\..\\src\\tools\\OOOggSeekFileMaker\\Debug\\OOOggSeekFileMaker.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4686,18 +4628,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:4"
+            "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{8C91066F-5C96-48BB-BD1F-D30FFD2A57A1}"
+            "OutputProjectGuid" = "8:{777D44B3-6690-4C25-B4CC-F5CD4579E932}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_B9749E2A902A46BEAE555C07E32980BB"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
             {
-            "SourcePath" = "8:..\\..\\src\\tools\\OOOggSeekFileMaker\\Debug\\OOOggSeekFileMaker.exe"
+            "SourcePath" = "8:..\\..\\src\\tools\\OOOggValidate\\Debug\\OOOggValidate.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4717,15 +4659,15 @@
             "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{777D44B3-6690-4C25-B4CC-F5CD4579E932}"
+            "OutputProjectGuid" = "8:{B5BF942B-4864-414C-9855-65E5CC923401}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_C6ED1B8B0AAC495E9D25CDE58FC9E711"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_CC5E9D059E6044FA954061CAC6A8A1C0"
             {
-            "SourcePath" = "8:..\\..\\src\\tools\\OOOggValidate\\Debug\\OOOggValidate.exe"
+            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfOggDemux2\\Debug\\dsfOggDemux2.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4742,18 +4684,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
+            "ProjectOutputGroupRegister" = "3:4"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{B5BF942B-4864-414C-9855-65E5CC923401}"
+            "OutputProjectGuid" = "8:{304B710A-7355-471C-A4A8-9E8F6D640E6D}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_D2048C8B212841C88E42F6ADDCA8B0A2"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_D11B66B126844E2B8ED91008BCC029FA"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfSubtitleVMR9\\Debug\\dsfSubtitleVMR9.dll"
+            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\RawAudio\\dsfOggRawAudioInserter\\Debug\\dsfOggRawAudioInserter.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4773,15 +4715,15 @@
             "ProjectOutputGroupRegister" = "3:4"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{88532BA9-1EED-421F-84BF-88A7A87FB2D3}"
+            "OutputProjectGuid" = "8:{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_D3E41A5878FC4EC0B0F443CF3E5991BA"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_D2048C8B212841C88E42F6ADDCA8B0A2"
             {
-            "SourcePath" = "8:..\\..\\src\\tools\\OOOggSeekFileReader\\Debug\\OOOggSeekFileReader.exe"
+            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfSubtitleVMR9\\Debug\\dsfSubtitleVMR9.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4798,18 +4740,18 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
+            "ProjectOutputGroupRegister" = "3:4"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{F6B75B61-4BEF-4323-B15E-37AFFC9CB52A}"
+            "OutputProjectGuid" = "8:{88532BA9-1EED-421F-84BF-88A7A87FB2D3}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_DB60960DC12343B89500B86D5AB10D02"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_D3E41A5878FC4EC0B0F443CF3E5991BA"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\flac\\libs\\libflac\\obj\\debug\\bin\\libFLAC++.dll"
+            "SourcePath" = "8:..\\..\\src\\tools\\OOOggSeekFileReader\\Debug\\OOOggSeekFileReader.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4829,15 +4771,15 @@
             "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{6B548F29-04A2-4F61-946F-72B86B4845DA}"
+            "OutputProjectGuid" = "8:{F6B75B61-4BEF-4323-B15E-37AFFC9CB52A}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {
                 }
             }
-            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_DCF4ED7597F8492AA49DC521111ED0F5"
+            "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_DB60960DC12343B89500B86D5AB10D02"
             {
-            "SourcePath" = "8:..\\..\\src\\lib\\core\\directshow\\dsfOggDemux\\Debug\\dsfOggDemux.dll"
+            "SourcePath" = "8:..\\..\\src\\lib\\codecs\\flac\\libs\\libflac\\obj\\debug\\bin\\libFLAC++.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_371AD289B6DB4693BDF7568485051F1E"
@@ -4854,10 +4796,10 @@
             "Exclude" = "11:FALSE"
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:4"
+            "ProjectOutputGroupRegister" = "3:1"
             "OutputConfiguration" = "8:"
             "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{AE32588D-2807-4796-9E68-C9104817BC1A}"
+            "OutputProjectGuid" = "8:{6B548F29-04A2-4F61-946F-72B86B4845DA}"
             "ShowKeyOutput" = "11:TRUE"
                 "ExcludeFilters"
                 {

Modified: trunk/oggdsf/sln/oggdsf_all/oggdsf_all.sln
===================================================================
--- trunk/oggdsf/sln/oggdsf_all/oggdsf_all.sln	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/sln/oggdsf_all/oggdsf_all.sln	2006-02-12 21:52:56 UTC (rev 10808)
@@ -99,6 +99,7 @@
 		{4CBC0173-27E6-4218-AE06-5EFDCA7B2547} = {4CBC0173-27E6-4218-AE06-5EFDCA7B2547}
 		{AE0ABDB0-AE3B-4C38-843B-3408A6B87BA4} = {AE0ABDB0-AE3B-4C38-843B-3408A6B87BA4}
 		{EA7091BB-9906-41DF-9738-F4858A136086} = {EA7091BB-9906-41DF-9738-F4858A136086}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfSpeexEncoder", "..\..\src\lib\codecs\speex\filters\dsfSpeexEncoder\dsfSpeexEncoder.vcproj", "{419E0701-9C9A-4671-B3B6-79FA206DEE25}"
@@ -863,6 +864,7 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfCMMLDecoder", "..\..\src\lib\codecs\cmml\dsfCMMLDecoder\dsfCMMLDecoder.vcproj", "{6B269BA6-6A18-41EF-A82C-03B6B5D4BCA7}"
 	ProjectSection(ProjectDependencies) = postProject
+		{223ACC19-608E-4E1B-A054-067F0CACB272} = {223ACC19-608E-4E1B-A054-067F0CACB272}
 		{4CBC0173-27E6-4218-AE06-5EFDCA7B2547} = {4CBC0173-27E6-4218-AE06-5EFDCA7B2547}
 		{899EB7AD-26BF-4495-9BE5-EADECCC288B2} = {899EB7AD-26BF-4495-9BE5-EADECCC288B2}
 		{AD38DCC6-B431-4B32-8569-74F3376EF2DA} = {AD38DCC6-B431-4B32-8569-74F3376EF2DA}
@@ -1197,6 +1199,40 @@
 		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfOggDemux2", "..\..\src\lib\core\directshow\dsfOggDemux2\dsfOggDemux2.vcproj", "{304B710A-7355-471C-A4A8-9E8F6D640E6D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{223ACC19-608E-4E1B-A054-067F0CACB272} = {223ACC19-608E-4E1B-A054-067F0CACB272}
+		{9A14F6AC-BC6E-401A-A300-07369BD6C5FE} = {9A14F6AC-BC6E-401A-A300-07369BD6C5FE}
+		{EA7091BB-9906-41DF-9738-F4858A136086} = {EA7091BB-9906-41DF-9738-F4858A136086}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfOGMDecoder", "..\..\src\lib\codecs\ogm\filters\dsfOGMDecoder\dsfOGMDecoder.vcproj", "{1C4F9412-B1DE-4E65-96C1-89522EF02997}"
+	ProjectSection(ProjectDependencies) = postProject
+		{223ACC19-608E-4E1B-A054-067F0CACB272} = {223ACC19-608E-4E1B-A054-067F0CACB272}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfOggRawAudioInserter", "..\..\src\lib\codecs\RawAudio\dsfOggRawAudioInserter\dsfOggRawAudioInserter.vcproj", "{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CBC0173-27E6-4218-AE06-5EFDCA7B2547} = {4CBC0173-27E6-4218-AE06-5EFDCA7B2547}
+		{EA7091BB-9906-41DF-9738-F4858A136086} = {EA7091BB-9906-41DF-9738-F4858A136086}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfOggRawAudioExtractor", "..\..\src\lib\codecs\RawAudio\dsfOggRawAudioExtractor\dsfOggRawAudioExtractor.vcproj", "{20DC77C5-8396-4C6D-A805-959CF8DFABB3}"
+	ProjectSection(ProjectDependencies) = postProject
+		{223ACC19-608E-4E1B-A054-067F0CACB272} = {223ACC19-608E-4E1B-A054-067F0CACB272}
+		{4CBC0173-27E6-4218-AE06-5EFDCA7B2547} = {4CBC0173-27E6-4218-AE06-5EFDCA7B2547}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnTransmoggrify", "..\..\src\tools\UnTransmoggrify\UnTransmoggrify.vcproj", "{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{223ACC19-608E-4E1B-A054-067F0CACB272} = {223ACC19-608E-4E1B-A054-067F0CACB272}
+		{2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4} = {2DA569EC-3E22-4BC9-A242-C7A56EB9C6F4}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfiguration) = preSolution
 		Debug = Debug
@@ -2746,6 +2782,106 @@
 		{E36945ED-A48B-40EC-A1F3-B90EDFDD3F00}.Release_SSE.Build.0 = Release|Win32
 		{E36945ED-A48B-40EC-A1F3-B90EDFDD3F00}.Release_SSE2.ActiveCfg = Release|Win32
 		{E36945ED-A48B-40EC-A1F3-B90EDFDD3F00}.Release_SSE2.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug.ActiveCfg = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug.Build.0 = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug Unicode.ActiveCfg = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug Unicode.Build.0 = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug__cdecl.ActiveCfg = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Debug__cdecl.Build.0 = Debug|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.MakeFile.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.MakeFile.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release Unicode.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release Unicode.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release__cdecl.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release__cdecl.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_NoDotNET.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_NoDotNET.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_SSE.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_SSE.Build.0 = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_SSE2.ActiveCfg = Release|Win32
+		{304B710A-7355-471C-A4A8-9E8F6D640E6D}.Release_SSE2.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug.ActiveCfg = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug.Build.0 = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug Unicode.ActiveCfg = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug Unicode.Build.0 = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug__cdecl.ActiveCfg = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Debug__cdecl.Build.0 = Debug|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.MakeFile.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.MakeFile.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release Unicode.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release Unicode.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release__cdecl.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release__cdecl.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_NoDotNET.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_NoDotNET.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_SSE.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_SSE.Build.0 = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_SSE2.ActiveCfg = Release|Win32
+		{1C4F9412-B1DE-4E65-96C1-89522EF02997}.Release_SSE2.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug.ActiveCfg = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug.Build.0 = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug Unicode.ActiveCfg = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug Unicode.Build.0 = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug__cdecl.ActiveCfg = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Debug__cdecl.Build.0 = Debug|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.MakeFile.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.MakeFile.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release Unicode.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release Unicode.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release__cdecl.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release__cdecl.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_NoDotNET.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_NoDotNET.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_SSE.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_SSE.Build.0 = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_SSE2.ActiveCfg = Release|Win32
+		{EEEBA51F-0499-4AD0-A25C-36C3AF2956C9}.Release_SSE2.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug.ActiveCfg = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug.Build.0 = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug Unicode.ActiveCfg = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug Unicode.Build.0 = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug__cdecl.ActiveCfg = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Debug__cdecl.Build.0 = Debug|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.MakeFile.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.MakeFile.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release Unicode.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release Unicode.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release__cdecl.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release__cdecl.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_NoDotNET.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_NoDotNET.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_SSE.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_SSE.Build.0 = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_SSE2.ActiveCfg = Release|Win32
+		{20DC77C5-8396-4C6D-A805-959CF8DFABB3}.Release_SSE2.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug.ActiveCfg = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug.Build.0 = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug Unicode.ActiveCfg = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug Unicode.Build.0 = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug__cdecl.ActiveCfg = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Debug__cdecl.Build.0 = Debug|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.MakeFile.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.MakeFile.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release Unicode.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release Unicode.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release__cdecl.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release__cdecl.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_NoDotNET.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_NoDotNET.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_SSE.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_SSE.Build.0 = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_SSE2.ActiveCfg = Release|Win32
+		{FC1E2E69-3FE9-4DC6-9897-4F0329EB24D7}.Release_SSE2.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionItems) = postSolution
 	EndGlobalSection

Modified: trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -60,6 +60,7 @@
 	,	mSeenHead(false)
 	,	mHeadTag(NULL)
 	,	mCMMLCallbacks(NULL)
+	,	mInputPin(NULL)
 {
 	//debugLog.open("G:\\logs\\cmml_decode.logs", ios_base::out);
 		mCMMLParser = new CMMLParser;
@@ -94,31 +95,71 @@
 	return CTransformFilter::NonDelegatingQueryInterface(riid, ppv);
 }
 
-HRESULT CMMLDecodeFilter::CheckInputType(const CMediaType* inInputMediaType) {
-	if (	(inInputMediaType->majortype == MEDIATYPE_Text)	&&
-			(inInputMediaType->subtype == MEDIASUBTYPE_CMML) &&
-			(inInputMediaType->formattype == FORMAT_CMML) ){
+HRESULT CMMLDecodeFilter::CheckInputType(const CMediaType* inInputMediaType) 
+{
+	return mInputPin->CheckMediaType(inInputMediaType);
+	//if (	(inInputMediaType->majortype == MEDIATYPE_OggPacketStream)	&&
+	//		(inInputMediaType->subtype == MEDIASUBTYPE_None) &&
+	//		(inInputMediaType->formattype == FORMAT_OggIdentHeader) ){
 
-		//debugLog<<"Input Type Accepted"<<endl;
-		return S_OK;
-	} else {
-		return VFW_E_TYPE_NOT_ACCEPTED;
-	}
+	//	//debugLog<<"Input Type Accepted"<<endl;
+	//	return S_OK;
+	//} else {
+	//	return VFW_E_TYPE_NOT_ACCEPTED;
+	//}
 }
 HRESULT CMMLDecodeFilter::CheckTransform(const CMediaType* inInputMediaType, const CMediaType* inOutputMediaType) {
-	if (	(inInputMediaType->majortype == MEDIATYPE_Text)	&&
-			(inInputMediaType->subtype == MEDIASUBTYPE_CMML) &&
-			(inInputMediaType->formattype == FORMAT_CMML) &&
-			(inOutputMediaType->majortype == MEDIATYPE_Text) &&
-			(inOutputMediaType->subtype == MEDIASUBTYPE_SubtitleVMR9) ){
+	//if (	(inInputMediaType->majortype == MEDIATYPE_Text)	&&
+	//		(inInputMediaType->subtype == MEDIASUBTYPE_CMML) &&
+	//		(inInputMediaType->formattype == FORMAT_CMML) &&
+	//		(inOutputMediaType->majortype == MEDIATYPE_Text) &&
+	//		(inOutputMediaType->subtype == MEDIASUBTYPE_SubtitleVMR9) ){
 
-		//debugLog << "Transform Accepted"<<endl;
+	//	//debugLog << "Transform Accepted"<<endl;
 		return S_OK;
-	} else {
-		return VFW_E_TYPE_NOT_ACCEPTED;
-	}
+//	} else {
+//		return VFW_E_TYPE_NOT_ACCEPTED;
+//	}
 	
 }
+
+CBasePin* CMMLDecodeFilter::GetPin(int inPinNo)
+{
+
+    HRESULT locHR = S_OK;
+
+    // Create an input pin if necessary
+
+    if (m_pInput == NULL) {
+
+        m_pInput = new CMMLDecodeInputPin(this, &locHR);		//Deleted in base destructor
+
+        
+        if (m_pInput == NULL) {
+            return NULL;
+        }
+
+		mInputPin = (CMMLDecodeInputPin*)m_pInput;
+        m_pOutput = new CTransformOutputPin(NAME("CMML Out"), this, &locHR, L"CMML Out");	//Deleted in base destructor
+			
+
+        if (m_pOutput == NULL) {
+            delete m_pInput;
+            m_pInput = NULL;
+        }
+    }
+
+    // Return the pin
+
+    if (inPinNo == 0) {
+        return m_pInput;
+    } else if (inPinNo == 1) {
+        return m_pOutput;
+    } else {
+        return NULL;
+    }
+
+}
 HRESULT CMMLDecodeFilter::DecideBufferSize(IMemAllocator* inAllocator, ALLOCATOR_PROPERTIES* inPropertyRequest) {
 	//FIX::: Abstract this out properly	
 
@@ -218,7 +259,10 @@
 		locHR = inSample->GetPointer(&locInBuff);
 		memcpy((void*)locCMML, (const void*) locInBuff, locSize);
 		//debugLog<<"           : Sample Text = "<<locCMML<<endl<<endl;
-		locWCMML = toWStr(locCMML);
+
+		string locNarrowCMML = locCMML;
+		delete[] locCMML;
+		locWCMML = toWStr(locNarrowCMML);
 		if (mSeenHead == false) {
 			//debugLog << "           : Processing a head tag"<<endl;
 			//Head tag... needs error checks
@@ -284,13 +328,13 @@
 
 			} else {
 				//debugLog<<"          : Parse FAILED"<<endl;
-				delete[] locCMML;
+				//delete[] locCMML;
 				return S_FALSE;
 			}
 		}
 
 		//debugLog<<"Returning... "<<endl<<endl;
-		delete[] locCMML;
+		//delete[] locCMML;
 		return S_OK;
 
 	} else {

Modified: trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/CMMLDecodeFilter.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -34,6 +34,7 @@
 
 #pragma once
 #include "cmmldecoderdllstuff.h"
+#include "CMMLDecodeInputPin.h"
 #include <string>
 #include <fstream>
 #include <libilliCore/StringHelper.h>
@@ -42,6 +43,8 @@
 #include <libCMMLTags/libCMMLTags.h>
 #include "ICMMLAppControl.h"
 using namespace std;
+
+class OGMDecodeInputPin;
 class CMMLDecodeFilter
 	:	public CTransformFilter
 	,	public ICMMLAppControl
@@ -61,6 +64,8 @@
 	HRESULT GetMediaType(int inPosition, CMediaType* outMediaType);
 	HRESULT Transform(IMediaSample* inSample, IMediaSample* outSample);
 
+	CBasePin* CMMLDecodeFilter::GetPin(int inPinNo);
+
 	//Implement ICMMLAppControl
 	virtual STDMETHODIMP_(bool) setCallbacks(ICMMLCallbacks* inCallbacks);
 	virtual STDMETHODIMP_(ICMMLCallbacks*) getCallbacks();
@@ -71,6 +76,8 @@
 	C_HeadTag* mHeadTag;
 	ICMMLCallbacks* mCMMLCallbacks;
 
+	CMMLDecodeInputPin* mInputPin;
+
 	//fstream debugLog;
 	
 

Modified: trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/cmmldecoderdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/cmmldecoderdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/cmmldecoderdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -42,19 +42,31 @@
 DEFINE_GUID(MEDIASUBTYPE_SubtitleVMR9, 
 0x966d76b4, 0x7d2f, 0x4f01, 0xb8, 0x40, 0x94, 0xe4, 0x25, 0xd2, 0x21, 0x4f);
 
-// {53696C76-6961-40b2-B136-436F6E726164}
-DEFINE_GUID(FORMAT_CMML, 
-0x53696c76, 0x6961, 0x40b2, 0xb1, 0x36, 0x43, 0x6f, 0x6e, 0x72, 0x61, 0x64);
-
-
-// {5A656E74-6172-6F26-B79C-D6416E647282}
-DEFINE_GUID(MEDIASUBTYPE_CMML, 
-0x5a656e74, 0x6172, 0x6f26, 0xb7, 0x9c, 0xd6, 0x41, 0x6e, 0x64, 0x72, 0x82);
-
+//// {53696C76-6961-40b2-B136-436F6E726164}
+//DEFINE_GUID(FORMAT_CMML, 
+//0x53696c76, 0x6961, 0x40b2, 0xb1, 0x36, 0x43, 0x6f, 0x6e, 0x72, 0x61, 0x64);
+//
+//
+//// {5A656E74-6172-6F26-B79C-D6416E647282}
+//DEFINE_GUID(MEDIASUBTYPE_CMML, 
+//0x5a656e74, 0x6172, 0x6f26, 0xb7, 0x9c, 0xd6, 0x41, 0x6e, 0x64, 0x72, 0x82);
+//
 // {BF1121D1-8739-45e1-BCD8-90B828F643AB}
 DEFINE_GUID(CLSID_CMMLDecodeFilter, 
 0xbf1121d1, 0x8739, 0x45e1, 0xbc, 0xd8, 0x90, 0xb8, 0x28, 0xf6, 0x43, 0xab);
 
+// {60891713-C24F-4767-B6C9-6CA05B3338FC}
+DEFINE_GUID(MEDIATYPE_OggPacketStream, 
+0x60891713, 0xc24f, 0x4767, 0xb6, 0xc9, 0x6c, 0xa0, 0x5b, 0x33, 0x38, 0xfc);
+
+// {95388704-162C-42a9-8149-C3577C12AAF9}
+DEFINE_GUID(FORMAT_OggIdentHeader, 
+0x95388704, 0x162c, 0x42a9, 0x81, 0x49, 0xc3, 0x57, 0x7c, 0x12, 0xaa, 0xf9);
+
+// {43F0F818-10B0-4c86-B9F1-F6B6E2D33462}
+DEFINE_GUID(IID_IOggDecoder, 
+0x43f0f818, 0x10b0, 0x4c86, 0xb9, 0xf1, 0xf6, 0xb6, 0xe2, 0xd3, 0x34, 0x62);
+
 //This structure defines the type of input we accept on the input pin... Stream/Annodex
 
 const REGPINTYPES CMMLDecodeOutputTypes = {
@@ -63,8 +75,8 @@
 };
 
 const REGPINTYPES CMMLDecodeInputTypes = {
-	&MEDIATYPE_Text,
-	&MEDIASUBTYPE_CMML
+	&MEDIATYPE_OggPacketStream,
+	&MEDIASUBTYPE_None
 };
 const REGFILTERPINS CMMLDecodePinReg[] = {
 	{
@@ -107,4 +119,5 @@
 struct sCMMLFormatBlock {
 	__int64 granuleNumerator;
 	__int64 granuleDenominator;
+	unsigned short granuleSplitBits;
 };

Modified: trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/dsfCMMLDecoder.vcproj
===================================================================
--- trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/dsfCMMLDecoder.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLDecoder/dsfCMMLDecoder.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..;..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..\..\..\helper;..\..\..\core\directshow\dsfOggDemux2;..\..\..\core\ogg\"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DSFCMMLDECODER_EXPORTS"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -81,7 +81,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="2"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..;..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..\..\..\helper;..\..\..\core\directshow\dsfOggDemux2;..\..\..\core\ogg\"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFCMMLDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -145,7 +145,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..;..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..\..\..\helper;..\..\..\core\directshow\dsfOggDemux2;..\..\..\core\ogg\"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFCMMLDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -210,7 +210,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..;..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..;..\..\..\helper;..\..\..\core\directshow\dsfOggDemux2;..\..\..\core\ogg\"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFCMMLDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -270,6 +270,9 @@
 				RelativePath="CMMLDecodeFilter.cpp">
 			</File>
 			<File
+				RelativePath=".\CMMLDecodeInputPin.cpp">
+			</File>
+			<File
 				RelativePath="CMMLDecoder.def">
 			</File>
 			<File
@@ -310,6 +313,9 @@
 				RelativePath="CMMLDecodeFilter.h">
 			</File>
 			<File
+				RelativePath=".\CMMLDecodeInputPin.h">
+			</File>
+			<File
 				RelativePath="cmmldecoderdllstuff.h">
 			</File>
 			<File

Modified: trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLRawSource/cmmlrawsourcedllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLRawSource/cmmlrawsourcedllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/cmml/dsfCMMLRawSource/cmmlrawsourcedllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -66,4 +66,5 @@
 struct sCMMLFormatBlock {
 	__int64 granuleNumerator;
 	__int64 granuleDenominator;
+	unsigned short granuleSplitBits;
 };

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -84,8 +84,9 @@
 	locAcceptMediaType = NULL;
 	locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);			//Deleted by pin
 
-	locAcceptMediaType->subtype = MEDIASUBTYPE_FLAC;
-	locAcceptMediaType->formattype = FORMAT_FLAC;
+	locAcceptMediaType->majortype = MEDIATYPE_OggPacketStream;
+	locAcceptMediaType->subtype = MEDIASUBTYPE_None;
+	locAcceptMediaType->formattype = FORMAT_OggIdentHeader;
 
 	locAcceptableTypes.push_back(locAcceptMediaType);
 	
@@ -108,9 +109,26 @@
 {
 	return mFLACFormatBlock;
 }
-void FLACDecodeFilter::setFLACFormatBlock(sFLACFormatBlock* inFormatBlock) 
+void FLACDecodeFilter::setFLACFormatBlock(BYTE* inFormatBlock) 
 {
 	delete mFLACFormatBlock;
 	mFLACFormatBlock = new sFLACFormatBlock;		//Deleted in destructor.
-	*mFLACFormatBlock = *inFormatBlock;
+
+	const unsigned char FLAC_CHANNEL_MASK = 14;  //00001110
+	const unsigned char FLAC_BPS_START_MASK = 1; //00000001
+	const unsigned char FLAC_BPS_END_MASK = 240;  //11110000
+	mFLACFormatBlock = new sFLACFormatBlock;
+	//Fix the format block data... use header version and other version.
+	//mFLACFormatBlock->FLACVersion = FLACMath::charArrToULong(mCodecHeaders->getPacket(1)->packetData() + 28);
+
+
+	//This is ogg flac classic
+	mFLACFormatBlock->numChannels = (((inFormatBlock[20]) & FLAC_CHANNEL_MASK) >> 1) + 1;
+	mFLACFormatBlock->samplesPerSec = (iBE_Math::charArrToULong(inFormatBlock + 18)) >> 12;
+	
+	mFLACFormatBlock->numBitsPerSample =	(((inFormatBlock[20] & FLAC_BPS_START_MASK) << 4)	|
+											((inFormatBlock[21] & FLAC_BPS_END_MASK) >> 4)) + 1;	
+
+	//*mFLACFormatBlock = *inFormatBlock;
+
 }
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeFilter.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -36,6 +36,8 @@
 //External INcludes
 #include "FLAC++/decoder.h"
 
+#include <libilliCore/iBE_Math.h>
+
 class FLACDecodeFilter
 	//Base Classes
 	:	public AbstractTransformFilter
@@ -52,8 +54,8 @@
 	//COM Creator Function
 	static CUnknown* WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr);
 
-	void FLACDecodeFilter::setFLACFormatBlock(sFLACFormatBlock* inFormatBlock) ;
-	sFLACFormatBlock* FLACDecodeFilter::getFLACFormatBlock();
+	void setFLACFormatBlock(BYTE* inFormatBlock) ;
+	sFLACFormatBlock* getFLACFormatBlock();
 protected:
 	//Implemenation of Pue Virtuals from AbstractTransformFilter
 	virtual bool ConstructPins();

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -36,6 +36,12 @@
 	:	AbstractTransformInputPin(inParentFilter, inFilterLock, inOutputPin, NAME("FLACDecodeInputPin"), L"FLAC In", inAcceptableMediaTypes)
 	,	mGotMetaData(false)
 	,	mCodecLock(NULL)
+	,	mFLACType(FT_UNKNOWN)
+	,	mMetadataPacket(NULL)
+	,	mSetupState(VSS_SEEN_NOTHING)
+	,	mDecodedByteCount(0)
+	,	mDecodedBuffer(NULL)
+	,	mRateNumerator(RATE_DENOMINATOR)
 
 	,	mUptoFrame(0)
 
@@ -43,12 +49,16 @@
 	//debugLog.open("G:\\logs\\flacfilter.log", ios_base::out);
 	mCodecLock = new CCritSec;			//Deleted in destructor.
 	ConstructCodec();
+
+	mDecodedBuffer = new unsigned char[DECODED_BUFFER_SIZE];
 }
 
 FLACDecodeInputPin::~FLACDecodeInputPin(void)
 {
 	//debugLog.close();
 	delete mCodecLock;
+	delete mMetadataPacket;
+	delete mDecodedBuffer;
 	
 }
 
@@ -58,6 +68,11 @@
 		*ppv = (IMediaSeeking*)this;
 		((IUnknown*)*ppv)->AddRef();
 		return NOERROR;
+	} else if (riid == IID_IOggDecoder) {
+		*ppv = (IOggDecoder*)this;
+		//((IUnknown*)*ppv)->AddRef();
+		return NOERROR;
+
 	}
 
 	return CBaseInputPin::NonDelegatingQueryInterface(riid, ppv); 
@@ -80,99 +95,170 @@
 	return AbstractTransformInputPin::NewSegment(inStartTime, inStopTime, inRate);
 	
 }
-HRESULT FLACDecodeInputPin::TransformData(BYTE* inBuf, long inNumBytes) 
+
+
+
+STDMETHODIMP FLACDecodeInputPin::Receive(IMediaSample* inSample) 
 {
+	CAutoLock locLock(mStreamLock);
 
-	//TODO::: Locks ???
+	HRESULT locHR = CheckStreaming();
 
-	//What happens when another packet arrives and the other one is still there ?
-	//delete mPendingPacket;
-	//debugLog<<"decodeData : "<<endl;
-	if(!m_bFlushing) {
-		unsigned char* locBuff = new unsigned char[inNumBytes];			//Given to packet.
-		memcpy((void*)locBuff, (const void*)inBuf, inNumBytes);
+	if (locHR == S_OK) {
+		BYTE* locBuff = NULL;
+		locHR = inSample->GetPointer(&locBuff);
 
-		OggPacket* locPacket = new OggPacket(locBuff, inNumBytes, false, false);	//We give this away.
+		if ((inSample->GetActualDataLength() > 1) && ((locBuff[0] != 0xff) || (locBuff[1] != 0xf8))) {
+			//inInputSample->Release();
 
-		if (mGotMetaData) {
-			StampedOggPacket* locStamped = NULL;
-			{
-				CAutoLock locCodecLock(mCodecLock);
-				//for(unsigned long i = 0; i < mPendingPackets.size(); i++) {
-				 locStamped = (StampedOggPacket*)mFLACDecoder.decodeFLAC(locPacket)->clone();			//clone deleted below, locpacket accepted by decoder.
-			}
+			//This is a header, so ignore it
+			return S_OK;
+		}
 
-			if (locStamped != NULL) {
-				//Do the directshow crap here....
 
+
+		if (locHR != S_OK) {
+			//TODO::: Do a debug dump or something here with specific error info.
+			return locHR;
+		} else {
+			REFERENCE_TIME locStart = -1;
+			REFERENCE_TIME locEnd = -1;
+			__int64 locSampleDuration = 0;
+			inSample->GetTime(&locStart, &locEnd);
+
+			HRESULT locResult = TransformData(locBuff, inSample->GetActualDataLength());
+			if (locResult != S_OK) {
+				return S_FALSE;
+			}
+			if (locEnd > 0) {
+				//Can dump it all downstream now	
 				IMediaSample* locSample;
+				unsigned long locBytesCopied = 0;
+				unsigned long locBytesToCopy = 0;
 
-				HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, NULL, NULL, NULL);
+				locStart = convertGranuleToTime(locEnd) - (((mDecodedByteCount / mFLACDecoder.frameSize()) * UNITS) / mFLACDecoder.sampleRate());
+				do {
+					HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, NULL, NULL, NULL);
+					if (locHR != S_OK) {
+						return locHR;
+					}
+
+					BYTE* locBuffer = NULL;
+					locHR = locSample->GetPointer(&locBuffer);
 				
-				if (FAILED(locHR)) {
-					//debugLog<<"Write_Callback : Get deliverybuffer failed. returning abort code."<<endl;
-					//		//We get here when the application goes into stop mode usually.
-					delete locStamped;
-					return S_FALSE;
-				}	
+					if (locHR != S_OK) {
+						return locHR;
+					}
 
+					locBytesToCopy = ((mDecodedByteCount - locBytesCopied) <= locSample->GetSize()) ? (mDecodedByteCount - locBytesCopied) : locSample->GetSize();
+					//locBytesCopied += locBytesToCopy;
 
-				BYTE* locBuffer = NULL;
+					locSampleDuration = (((locBytesToCopy/mFLACDecoder.frameSize()) * UNITS) / mFLACDecoder.sampleRate());
+					locEnd = locStart + locSampleDuration;
 
+					//Adjust the time stamps for rate and seeking
+					REFERENCE_TIME locAdjustedStart = (locStart * RATE_DENOMINATOR) / mRateNumerator;
+					REFERENCE_TIME locAdjustedEnd = (locEnd * RATE_DENOMINATOR) / mRateNumerator;
+					locAdjustedStart -= m_tStart;
+					locAdjustedEnd -= m_tStart;
 
-				//	//Make our pointers set to point to the samples buffer
-				locSample->GetPointer(&locBuffer);
+					__int64 locSeekStripOffset = 0;
+					if (locAdjustedEnd < 0) {
+						locSample->Release();
+					} else {
+						if (locAdjustedStart < 0) {
+							locSeekStripOffset = (-locAdjustedStart) * mFLACDecoder.sampleRate();
+							locSeekStripOffset *= mFLACDecoder.frameSize();
+							locSeekStripOffset /= UNITS;
+							locSeekStripOffset += (mFLACDecoder.frameSize() - (locSeekStripOffset % mFLACDecoder.frameSize()));
+							__int64 locStrippedDuration = (((locSeekStripOffset/mFLACDecoder.frameSize()) * UNITS) / mFLACDecoder.sampleRate());
+							locAdjustedStart += locStrippedDuration;
+						}
+							
 
-
-				//*** WARNING 4018: Leave this.
-				if (locSample->GetSize() >= locStamped->packetSize()) {
-					REFERENCE_TIME locFrameStart = (((__int64)(mUptoFrame * UNITS)) / mFLACDecoder.mSampleRate);
 					
-					//Increment the frame counter
-					//NOTE::: The returned packet is stamped 0-numSamples so endTime will be in long range.
-					mUptoFrame += (unsigned long)locStamped->endTime();
-					
-					//	//Make the end frame counter
 
-					REFERENCE_TIME locFrameEnd = (((__int64)(mUptoFrame * UNITS)) / mFLACDecoder.mSampleRate);
+						memcpy((void*)locBuffer, (const void*)&mDecodedBuffer[locBytesCopied + locSeekStripOffset], locBytesToCopy - locSeekStripOffset);
 
-					memcpy((void*)locBuffer, (const void*)locStamped->packetData(), locStamped->packetSize());
-					SetSampleParams(locSample, locStamped->packetSize(), &locFrameStart, &locFrameEnd);
-					HRESULT locHR = ((FLACDecodeOutputPin*)(mOutputPin))->mDataQueue->Receive(locSample);
-					if (locHR != S_OK) {
-	
-					} else {
-						//debugLog<<"Write_Callback : Delivery of sample succeeded"<<endl;
+						locSample->SetTime(&locAdjustedStart, &locAdjustedEnd);
+						locSample->SetMediaTime(&locStart, &locEnd);
+						locSample->SetSyncPoint(TRUE);
+						locSample->SetActualDataLength(locBytesToCopy - locSeekStripOffset);
+						locHR = ((FLACDecodeOutputPin*)(mOutputPin))->mDataQueue->Receive(locSample);
+						if (locHR != S_OK) {
+							return locHR;
+						}
+						locStart += locSampleDuration;
+
 					}
-				} else {
-					delete locStamped;
-					throw 0;		//SAMPLE SIZE IS TOO SMALL TO FIT DATA
-				}
+					locBytesCopied += locBytesToCopy;
 
+				
+				} while(locBytesCopied < mDecodedByteCount);
 
-				delete locStamped;
-				return S_OK;
-			} else {
-				return S_FALSE;
+				mDecodedByteCount = 0;
+				
 			}
-		} else {
-			{
-				CAutoLock locCodecLock(mCodecLock);
-				mGotMetaData = mFLACDecoder.acceptMetadata(locPacket);		//Accepts the packet.
-			}
-			if (mGotMetaData) {
-				return S_OK;
-			} else {
-				return S_FALSE;
-			}
+			return S_OK;
+
 		}
-
 	} else {
-		//debugLog<<"decodeData : Filter flushing... bad things !!!"<<endl;
+		//Not streaming - Bail out.
 		return S_FALSE;
 	}
+}
 
+
+
+
+HRESULT FLACDecodeInputPin::TransformData(BYTE* inBuf, long inNumBytes) 
+{
+	//TODO::: There is a thread blocking problem here. sometimes the this code
+	//		inside the checkstream check can be called while the graph is flushing.
+	//
+	//		Probably just needs a lock here on the filter, and/or in the begin/end flush method
+	if (CheckStreaming() == S_OK) {
+		unsigned char* locInBuff = new unsigned char[inNumBytes];
+		memcpy((void*)locInBuff, (const void*)inBuf, inNumBytes);
+		OggPacket* locInputPacket = new OggPacket(locInBuff, inNumBytes, false, false);
+
 	
+		StampedOggPacket* locStamped = (StampedOggPacket*)mFLACDecoder.decodeFLAC(locInputPacket)->clone();
+
+		FLACDecodeFilter* locFilter = reinterpret_cast<FLACDecodeFilter*>(m_pFilter);
+
+	
+
+		unsigned long locActualSize = locStamped->packetSize();
+		//unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
+		unsigned long locBufferRemaining = DECODED_BUFFER_SIZE - mDecodedByteCount;
+		
+
+
+		//Create a pointer into the buffer		
+		//signed short* locShortBuffer = (signed short*)&mDecodedBuffer[mDecodedByteCount];
+		
+		
+		//signed short tempInt = 0;
+		//float tempFloat = 0;
+		
+		//FIX:::Move the clipping to the abstract function
+
+		if (locBufferRemaining >= locActualSize) {
+			
+			memcpy((void*)&mDecodedBuffer[mDecodedByteCount], (const void*)locStamped->packetData(), locActualSize);
+
+			mDecodedByteCount += locActualSize;
+			delete locStamped;
+			return S_OK;
+		} else {
+			throw 0;
+		}
+	} else {
+		DbgLog((LOG_TRACE,1,TEXT("Not streaming")));
+		return -1;
+	}
+
 }
 
 
@@ -190,6 +276,15 @@
 	
 }
 
+STDMETHODIMP FLACDecodeInputPin::EndFlush()
+{
+	CAutoLock locLock(m_pLock);
+	
+	HRESULT locHR = AbstractTransformInputPin::EndFlush();
+	mDecodedByteCount = 0;
+	return locHR;
+}
+
 STDMETHODIMP FLACDecodeInputPin::EndOfStream(void) {
 	CAutoLock locStreamLock(mStreamLock);
 	{	//PROTECT CODEC FROM IMPLODING
@@ -200,19 +295,157 @@
 	return AbstractTransformInputPin::EndOfStream();
 }
 
+HRESULT FLACDecodeInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps)
+{
+	outRequestedProps->cbBuffer = FLAC_BUFFER_SIZE;
+	outRequestedProps->cBuffers = FLAC_NUM_BUFFERS;
+	outRequestedProps->cbAlign = 1;
+	outRequestedProps->cbPrefix = 0;
+
+	return S_OK;
+}
+HRESULT FLACDecodeInputPin::CheckMediaType(const CMediaType *inMediaType)
+{
+	if (AbstractTransformInputPin::CheckMediaType(inMediaType) == S_OK) {
+		if (inMediaType->cbFormat == 4) {
+			if (strncmp((char*)inMediaType->pbFormat, "fLaC", 4) == 0) {
+				//TODO::: Possibly verify version
+				return S_OK;
+			}
+		} else if (inMediaType->cbFormat > 4) {
+			if (strncmp((char*)inMediaType->pbFormat, "\177FLAC", 5) == 0) {
+				//TODO::: Possibly verify version
+				return S_OK;
+			}
+		}
+	}
+	return S_FALSE;
+	
+}
 HRESULT FLACDecodeInputPin::SetMediaType(const CMediaType* inMediaType) {
 	//FIX:::Error checking
 	//RESOLVED::: Bit better.
-
-	if (inMediaType->subtype == MEDIASUBTYPE_FLAC) {
+	if (CheckMediaType(inMediaType) == S_OK) {
+		//((FLACDecodeFilter*)mParentFilter)->setFLACFormatBlock(inMediaType->pbFormat);
+		if (inMediaType->cbFormat == 4) {
+			if (strncmp((char*)inMediaType->pbFormat, "fLaC", 4) == 0) {
+				mFLACType = FT_CLASSIC;
+				return S_OK;
+			}
+		} else if (inMediaType->cbFormat > 4) {
+			if (strncmp((char*)inMediaType->pbFormat, "\177FLAC", 5) == 0) {
+				mFLACType = FT_OGG_FLAC_1;
+				return S_OK;
+				
+			}
+		}
+		return S_FALSE;
 		
-		//Keep the format block
-		
-		((FLACDecodeFilter*)mParentFilter)->setFLACFormatBlock((sFLACFormatBlock*)inMediaType->pbFormat);		//Copies the format in the mutator
-
 	} else {
 		throw 0;
 	}
+
+
 	return CBaseInputPin::SetMediaType(inMediaType);
 }
 
+LOOG_INT64 FLACDecodeInputPin::convertGranuleToTime(LOOG_INT64 inGranule)
+{
+		
+	return (inGranule * UNITS) / ((FLACDecodeFilter*)mParentFilter)->getFLACFormatBlock()->samplesPerSec;
+	
+}
+
+LOOG_INT64 FLACDecodeInputPin::mustSeekBefore(LOOG_INT64 inGranule)
+{
+	//TODO::: Get adjustment from block size info... for now, it doesn't matter if no preroll
+	return inGranule;
+}
+IOggDecoder::eAcceptHeaderResult FLACDecodeInputPin::showHeaderPacket(OggPacket* inCodecHeaderPacket)
+{
+	const unsigned char MORE_HEADERS_MASK = 128;   //10000000
+	switch (mFLACType) {
+		case FT_CLASSIC:
+			switch (mSetupState) {
+				case VSS_SEEN_NOTHING:
+					if (strncmp((char*)inCodecHeaderPacket->packetData(), "fLaC", 4) == 0) {
+						mSetupState = VSS_SEEN_BOS;
+						delete mMetadataPacket;
+						mMetadataPacket = inCodecHeaderPacket->clone();
+						return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+					}
+
+					//TODO::: new flac format
+					mSetupState = VSS_ERROR;
+					return IOggDecoder::AHR_INVALID_HEADER;
+				case VSS_SEEN_BOS:
+					mMetadataPacket->merge(inCodecHeaderPacket);
+					if ((inCodecHeaderPacket->packetData()[0] & MORE_HEADERS_MASK) != 0) {
+						//Last packet
+						mSetupState = VSS_ALL_HEADERS_SEEN; 
+						((FLACDecodeFilter*)mParentFilter)->setFLACFormatBlock(mMetadataPacket->packetData());
+						mFLACDecoder.acceptMetadata(mMetadataPacket);
+						mMetadataPacket = NULL;
+				
+						//TODO::: Give it to the codec
+
+						return IOggDecoder::AHR_ALL_HEADERS_RECEIVED;
+					}
+
+					return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				default:
+					return IOggDecoder::AHR_UNEXPECTED;
+			}
+
+		case FT_OGG_FLAC_1:
+			switch(mSetupState) {
+				case VSS_SEEN_NOTHING:
+					if (strncmp((char*)inCodecHeaderPacket->packetData(),  "\177FLAC", 5) == 0) {
+						mSetupState = VSS_SEEN_BOS;
+						delete mMetadataPacket;
+						unsigned char* locBuff = new unsigned char[inCodecHeaderPacket->packetSize() - 9];
+						memcpy((void*)locBuff, (const void*)(inCodecHeaderPacket->packetData() + 9), inCodecHeaderPacket->packetSize() - 9);
+						mMetadataPacket = new OggPacket(locBuff, inCodecHeaderPacket->packetSize() - 9,  false, false);
+						return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+					}
+
+					
+					mSetupState = VSS_ERROR;
+					return IOggDecoder::AHR_INVALID_HEADER;
+				case VSS_SEEN_BOS:
+					mMetadataPacket->merge(inCodecHeaderPacket);
+					if ((inCodecHeaderPacket->packetData()[0] & MORE_HEADERS_MASK) != 0) {
+						//Last packet
+						mSetupState = VSS_ALL_HEADERS_SEEN; 
+						((FLACDecodeFilter*)mParentFilter)->setFLACFormatBlock(mMetadataPacket->packetData());
+						mFLACDecoder.acceptMetadata(mMetadataPacket);
+						mMetadataPacket = NULL;
+				
+						//TODO::: Give it to the codec
+
+						return IOggDecoder::AHR_ALL_HEADERS_RECEIVED;
+					}
+
+					return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				default:
+					return IOggDecoder::AHR_UNEXPECTED;
+
+
+			};
+		default:
+			return IOggDecoder::AHR_INVALID_HEADER;
+
+
+	}
+
+}
+string FLACDecodeInputPin::getCodecShortName()
+{
+	return "flac";
+}
+string FLACDecodeInputPin::getCodecIdentString()
+{
+	//TODO:::
+	return "flac";
+}
+

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACDecodeInputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -36,6 +36,7 @@
 
 //External Includes
 #include "FLACPushDecoder.h"
+#include "IOggDecoder.h"
 #include <libOOOgg/OggPacket.h>
 #include <libOOOgg/StampedOggPacket.h>
 
@@ -49,6 +50,7 @@
 class FLACDecodeInputPin
 	//Base Classes
 	:	public AbstractTransformInputPin
+	,	public IOggDecoder
 {
 public:
 	//COM Initialisation
@@ -59,13 +61,32 @@
 	FLACDecodeInputPin(AbstractTransformFilter* inFilter, CCritSec* inFilterLock, AbstractTransformOutputPin* inOutputPin, vector<CMediaType*> inAcceptableMediaTypes);
 	virtual ~FLACDecodeInputPin(void);
 
-	HRESULT SetMediaType(const CMediaType* inMediaType);
+	virtual HRESULT SetMediaType(const CMediaType* inMediaType);
+	virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
 
 	virtual STDMETHODIMP BeginFlush();
+	virtual STDMETHODIMP EndFlush();
 	virtual STDMETHODIMP EndOfStream(void);
 	virtual STDMETHODIMP NewSegment(REFERENCE_TIME inStartTime, REFERENCE_TIME inStopTime, double inRate);
+
+	virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
+
+	virtual STDMETHODIMP FLACDecodeInputPin::Receive(IMediaSample* inSample);
+
+	//IOggDecoder Interface
+	virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
+	virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
+	virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
+	virtual string getCodecShortName();
+	virtual string getCodecIdentString();
 	
 protected:
+
+	static const unsigned long DECODED_BUFFER_SIZE = 1<<20;		//1 Meg buffer
+	
+	static const unsigned long FLAC_NUM_BUFFERS = 75;
+	static const unsigned long FLAC_BUFFER_SIZE = 65536; //Check
+
 	//Implementation of pure virtuals from AbstractTransformInputPin
 	virtual bool ConstructCodec();
 	virtual void DestroyCodec();
@@ -76,6 +97,34 @@
 	FLACPushDecoder mFLACDecoder;
 	CCritSec* mCodecLock;
 	unsigned long mUptoFrame;
+
+	OggPacket* mMetadataPacket;
+
+	enum eFLACType {
+		FT_UNKNOWN,
+		FT_CLASSIC,
+		FT_OGG_FLAC_1,
+	};
+
+	eFLACType mFLACType;
+
+	enum eFLACSetupState {
+		VSS_SEEN_NOTHING,
+		VSS_SEEN_BOS,
+		VSS_SEEN_COMMENT,
+		VSS_ALL_HEADERS_SEEN,
+		VSS_ERROR
+	};
+
+	eFLACSetupState mSetupState;
+
+	unsigned long mDecodedByteCount;
+	unsigned char* mDecodedBuffer;
+
+	__int64 mRateNumerator;
+	static const __int64 RATE_DENOMINATOR = 65536;
+
+
 	
 	//debug only
 	//fstream debugLog;

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACdecoderdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACdecoderdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/FLACdecoderdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -53,27 +53,39 @@
 #include "FLACDecodeOutputPin.h"
 
 
-// {3913F0AB-E7ED-41c4-979B-1D1FDD983C07}
-DEFINE_GUID(MEDIASUBTYPE_FLAC, 
-0x3913f0ab, 0xe7ed, 0x41c4, 0x97, 0x9b, 0x1d, 0x1f, 0xdd, 0x98, 0x3c, 0x7);
 
+
 // {3376086C-D6F9-4ce4-8B89-33CD570106B5}
 DEFINE_GUID(CLSID_FLACDecodeFilter, 
 0x3376086c, 0xd6f9, 0x4ce4, 0x8b, 0x89, 0x33, 0xcd, 0x57, 0x1, 0x6, 0xb5);
 
-// {1CDC48AC-4C24-4b8b-982B-7007A29D83C4}
-DEFINE_GUID(FORMAT_FLAC, 
-0x1cdc48ac, 0x4c24, 0x4b8b, 0x98, 0x2b, 0x70, 0x7, 0xa2, 0x9d, 0x83, 0xc4);
+//// {1CDC48AC-4C24-4b8b-982B-7007A29D83C4}
+//DEFINE_GUID(FORMAT_FLAC, 
+//0x1cdc48ac, 0x4c24, 0x4b8b, 0x98, 0x2b, 0x70, 0x7, 0xa2, 0x9d, 0x83, 0xc4);
+//
+//// {3913F0AB-E7ED-41c4-979B-1D1FDD983C07}
+//DEFINE_GUID(MEDIASUBTYPE_FLAC, 
+//0x3913f0ab, 0xe7ed, 0x41c4, 0x97, 0x9b, 0x1d, 0x1f, 0xdd, 0x98, 0x3c, 0x7);
 
+// {60891713-C24F-4767-B6C9-6CA05B3338FC}
+DEFINE_GUID(MEDIATYPE_OggPacketStream, 
+0x60891713, 0xc24f, 0x4767, 0xb6, 0xc9, 0x6c, 0xa0, 0x5b, 0x33, 0x38, 0xfc);
 
+// {95388704-162C-42a9-8149-C3577C12AAF9}
+DEFINE_GUID(FORMAT_OggIdentHeader, 
+0x95388704, 0x162c, 0x42a9, 0x81, 0x49, 0xc3, 0x57, 0x7c, 0x12, 0xaa, 0xf9);
+
+// {43F0F818-10B0-4c86-B9F1-F6B6E2D33462}
+DEFINE_GUID(IID_IOggDecoder, 
+0x43f0f818, 0x10b0, 0x4c86, 0xb9, 0xf1, 0xf6, 0xb6, 0xe2, 0xd3, 0x34, 0x62);
 const REGPINTYPES FLACDecodeOutputTypes = {
     &MEDIATYPE_Audio,
 	&MEDIASUBTYPE_PCM
 };
 
 const REGPINTYPES FLACDecodeInputTypes = {
-	&MEDIATYPE_Audio,
-	&MEDIASUBTYPE_FLAC
+	&MEDIATYPE_OggPacketStream,
+	&MEDIASUBTYPE_None
 };
 const REGFILTERPINS FLACDecodePinReg[] = {
 	{

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/dsfFLACDecoder.vcproj
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/dsfFLACDecoder.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfFLACDecoder/dsfFLACDecoder.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DSFFLACDECODER_EXPORTS"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -81,7 +81,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFFLACDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -144,7 +144,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFFLACDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -208,7 +208,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFFLACDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"

Modified: trunk/oggdsf/src/lib/codecs/flac/filters/dsfNativeFLACSource/NativeFLACSourceFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/filters/dsfNativeFLACSource/NativeFLACSourceFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/filters/dsfNativeFLACSource/NativeFLACSourceFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -105,16 +105,38 @@
 }
 
 
-STDMETHODIMP NativeFLACSourceFilter::Load(LPCOLESTR inFileName, const AM_MEDIA_TYPE* inMediaType) {
+STDMETHODIMP NativeFLACSourceFilter::Load(LPCOLESTR inFileName, const AM_MEDIA_TYPE* inMediaType) 
+{
 	//Initialise the file here and setup the stream
 	CAutoLock locLock(m_pLock);
 	mFileName = inFileName;
 
 	mInputFile.open(StringHelper::toNarrowStr(mFileName).c_str(), ios_base::in | ios_base::binary);
 
+	//CT> Added header check (for FLAC files with ID3 v1/2 tags in them)
+	//    We'll look in the first 128kb of the file
+	unsigned long locStart = 0;
+	int locHeaderFound = 0;
+	for(int j = 0; !locHeaderFound && j < 128; j++)	{
+		unsigned char locTempBuf[1024]={0,};
+		mInputFile.read((char*)&locTempBuf, sizeof(locTempBuf));
+		unsigned char* locPtr = locTempBuf;
+		for(int i = 0; i < 1023; i++) {
+			if(locPtr[i]=='f' && locPtr[i+1]=='L' && locPtr[i+2]=='a' && locPtr[i+3]=='C')			{
+				locHeaderFound = 1;
+				locStart = i + (j * 1024);
+				break;
+			}
+		}
+	}
+	if(!locHeaderFound) {
+		return E_FAIL;
+	}
+
 	mInputFile.seekg(0, ios_base::end);
 	mFileSize = mInputFile.tellg();
-	mInputFile.seekg(0, ios_base::beg);
+	mFileSize -= locStart;
+	mInputFile.seekg(locStart, ios_base::beg);
 
 	unsigned char locBuff[64];
 	mInputFile.read((char*)&locBuff, 64);
@@ -128,12 +150,13 @@
 	mTotalNumSamples = (((__int64)(locBuff[21] % 16)) << 32) + ((__int64)(iBE_Math::charArrToULong(&locBuff[22])));
 
 	//TODO::: NEed to handle the case where the number of samples is zero by making it non-seekable.
-	mInputFile.seekg(0, ios_base::beg);
+	mInputFile.seekg(locStart, ios_base::beg);
 
 	init();
 	bool locResult = process_until_end_of_metadata();
 
-	return S_OK;
+	return (locResult ? S_OK : E_FAIL);
+
 }
 
 STDMETHODIMP NativeFLACSourceFilter::NonDelegatingQueryInterface(REFIID riid, void **ppv)
@@ -248,22 +271,24 @@
 	return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK;
 }
 ::FLAC__StreamDecoderWriteStatus NativeFLACSourceFilter::write_callback(const FLAC__Frame* inFrame,const FLAC__int32 *const inBuffer[]) {
-	//Do the magic !
+	
+
 	if (! mBegun) {
-		//This may not even be needed any more.	
 		mBegun = true;
+		
 		const int SIZE_16_BITS = 2;
+		
 		mNumChannels = inFrame->header.channels;
 		mFrameSize = mNumChannels * SIZE_16_BITS;
 		mSampleRate = inFrame->header.sample_rate;
 	}
 
 	unsigned long locNumFrames = inFrame->header.blocksize;
-	unsigned long locActualSize = locNumFrames * mFrameSize;
+	unsigned long locBufferSize = locNumFrames * mFrameSize;
 	unsigned long locTotalFrameCount = locNumFrames * mNumChannels;
 
 	//BUG::: There's a bug here. Implicitly assumes 2 channels. I think.
-	unsigned char* locBuff = new unsigned char[locActualSize];			//Gives to the deliverdata method
+	unsigned char* locBuff = new unsigned char[locBufferSize];			//Gives to the deliverdata method
 	//It could actually be a single buffer for the class.
 
 	signed short* locShortBuffer = (signed short*)locBuff;		//Don't delete this.
@@ -276,14 +301,15 @@
 			tempLong = inBuffer[j][i];
 
 			//FIX::: Why on earth are you dividing by 2 ? It does not make sense !
-			tempInt = (signed short)(tempLong/2);
+			//tempInt = (signed short)(tempLong/2);
+			tempInt = (signed short)(tempLong);
 		
 			*locShortBuffer = tempInt;
 			locShortBuffer++;
 		}
 	}
 	
-	mFLACSourcePin->deliverData(locBuff, locActualSize, (mUpto*UNITS) / mSampleRate, ((mUpto+locNumFrames)*UNITS) / mSampleRate);
+	mFLACSourcePin->deliverData(locBuff, locBufferSize, (mUpto*UNITS) / mSampleRate, ((mUpto+locNumFrames)*UNITS) / mSampleRate);
 	mUpto += locNumFrames;
 	return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
 }

Modified: trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACHeaderTweaker.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACHeaderTweaker.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACHeaderTweaker.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -83,36 +83,37 @@
 
 }
 
-bool FLACHeaderTweaker::createNewHeaderList() {
-	
+bool FLACHeaderTweaker::createNewHeaderList() 
+{
 	//debugLog<<"Create new header list method"<<endl;
+	//debugLog<<"Filling first pack"<<endl;
 	
-	//debugLog<<"Filling first pack"<<endl;
-	unsigned char* locFirstPackBuff = new unsigned char[51];
-	locFirstPackBuff[0] = '\177';
-	locFirstPackBuff[1] = 'F';
-	locFirstPackBuff[2] = 'L';
-	locFirstPackBuff[3] = 'A';
-	locFirstPackBuff[4] = 'C';
-	locFirstPackBuff[5] = 1;
-	locFirstPackBuff[6] = 0;
-	locFirstPackBuff[7] = 0; //Num header HIGH BYTE
+	
+	unsigned char* locFirstPacketBuffur = new unsigned char[51];
+	locFirstPacketBuffur[0] = '\177';
+	locFirstPacketBuffur[1] = 'F';
+	locFirstPacketBuffur[2] = 'L';
+	locFirstPacketBuffur[3] = 'A';
+	locFirstPacketBuffur[4] = 'C';
+	locFirstPacketBuffur[5] = 1;
+	locFirstPacketBuffur[6] = 0;
+	locFirstPacketBuffur[7] = 0; //Num header HIGH BYTE
 
 	//*** VERIFY ::: Is this even safe ie -2 ... are we sure this can't go negative ????
-	locFirstPackBuff[8] = mOldHeaderList.size() - 2; //Num headers LOW BYTE
-	locFirstPackBuff[9] = 'f';
-	locFirstPackBuff[10] = 'L';
-	locFirstPackBuff[11] = 'a';
-	locFirstPackBuff[12] = 'C';
+	locFirstPacketBuffur[8] = mOldHeaderList.size() - 2; //Num headers LOW BYTE
+	locFirstPacketBuffur[9] = 'f';
+	locFirstPacketBuffur[10] = 'L';
+	locFirstPacketBuffur[11] = 'a';
+	locFirstPacketBuffur[12] = 'C';
 
 	//debugLog<<"Copying in packet data"<<endl;
-	memcpy((void*)(locFirstPackBuff + 13), (const void*) mOldHeaderList[1]->packetData(), 38);
+	memcpy((void*)(locFirstPacketBuffur + 13), (const void*) mOldHeaderList[1]->packetData(), 38);
 
 	mNewHeaderList.empty();
 	mNewHeaderList.clear();
 	//debugLog<<"Putting first header into new list"<<endl;
-	mNewHeaderList.push_back(new OggPacket(locFirstPackBuff, 51, false, false));
-	locFirstPackBuff = NULL;
+	mNewHeaderList.push_back(new OggPacket(locFirstPacketBuffur, 51, false, false));
+	locFirstPacketBuffur = NULL;
 
 	bool locFoundComment = false;
 	int locCommentNo = -1;

Modified: trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -121,7 +121,9 @@
 				//Convert 32 bit to 16 bit
 
 			//FIX::: Why on earth are you dividing by 2 ? It does not make sense !
-			tempInt = (signed short)(tempLong/2);
+			//tempInt = (signed short)(tempLong/2);
+			tempInt = (signed short)(tempLong);
+
 		
 			*locShortBuffer = tempInt;
 			locShortBuffer++;

Modified: trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/flac/libs/libFLACHelper/FLACPushDecoder.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -3,6 +3,9 @@
 #include <libOOOgg/StampedOggPacket.h>
 #include <libOOOgg/OggPacket.h>
 #include "FLAC++/decoder.h"
+
+//Flac Stream Format Documentation http://flac.sourceforge.net/format.html#stream
+
 using namespace FLAC::Decoder;
 class FLACPushDecoder
 	:	protected Stream
@@ -16,12 +19,17 @@
 
 	void initCodec();
 	void flushCodec();
-	//Probably shouldn't be public... but who cares for now.
+
+	unsigned long numberOfChannels()		{	return mNumChannels;	}
+	unsigned long frameSize()				{	return mFrameSize;		}
+	unsigned long sampleRate()				{	return mSampleRate;		}
+private:
+	static const int SIZE_16_BITS = 2;
+
 	unsigned long mNumChannels;
 	unsigned long mFrameSize;
 	unsigned long mSampleRate;
-protected:
-	static const int SIZE_16_BITS = 2;
+
 	//Virtuals frmo FLAC decoder
 	virtual ::FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes);
 	virtual ::FLAC__StreamDecoderWriteStatus write_callback(const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[]);
@@ -30,7 +38,8 @@
 
 	OggPacket* mInPacket;
 	StampedOggPacket* mOutPacket;
+	
+	bool mGotMetaData;
 	bool mBegun;
-	bool mGotMetaData;
 	
 };

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -79,11 +79,14 @@
 
 	//Setup the media Types for the input pin.
 	locAcceptMediaType = NULL;
-	locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);			//Deleted by pin
+	locAcceptMediaType = new CMediaType(&MEDIATYPE_OggPacketStream);			//Deleted by pin
 
-	locAcceptMediaType->subtype = MEDIASUBTYPE_Speex;
-	locAcceptMediaType->formattype = FORMAT_Speex;
+	//locAcceptMediaType->subtype = MEDIASUBTYPE_Speex;
+	//locAcceptMediaType->formattype = FORMAT_Speex;
 
+	locAcceptMediaType->subtype = MEDIASUBTYPE_None;
+	locAcceptMediaType->formattype = FORMAT_OggIdentHeader;
+
 	locAcceptableTypes.push_back(locAcceptMediaType);
 	
 	mInputPin = new SpeexDecodeInputPin(this, m_pLock, mOutputPin, locAcceptableTypes);	//Deleted in base class filter destructor.
@@ -112,9 +115,16 @@
 {
 	return mSpeexFormatInfo;
 }
-void SpeexDecodeFilter::setSpeexFormat(sSpeexFormatBlock* inFormatBlock) 
+void SpeexDecodeFilter::setSpeexFormat(BYTE* inFormatBlock) 
 {
 	delete mSpeexFormatInfo;
 	mSpeexFormatInfo = new sSpeexFormatBlock;
-	*mSpeexFormatInfo = *inFormatBlock;
+
+	mSpeexFormatInfo->speexVersion = iLE_Math::charArrToULong(inFormatBlock + 28);
+	mSpeexFormatInfo->numChannels = iLE_Math::charArrToULong(inFormatBlock + 48);
+	mSpeexFormatInfo->samplesPerSec = iLE_Math::charArrToULong(inFormatBlock + 36);
+	mSpeexFormatInfo->avgBitsPerSec = 0;
+	mSpeexFormatInfo->maxBitsPerSec = 0;
+	mSpeexFormatInfo->minBitsPerSec = 0;
+
 }
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeFilter.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -33,6 +33,7 @@
 //Include Files
 #include "speexdecoderdllstuff.h"
 #include "AbstractTransformFilter.h"
+#include <libilliCore/iLE_Math.h>
 
 //Forward Declarations
 struct sSpeexFormatBlock;
@@ -59,7 +60,7 @@
 	
 	//FIX::: Do we need these ? Aren't they all friends ??
 	virtual sSpeexFormatBlock* getSpeexFormatBlock();
-	virtual void setSpeexFormat(sSpeexFormatBlock* inFormatBlock);
+	virtual void setSpeexFormat(BYTE* inFormatBlock);
 
 protected:
 	//Pure Virtuals from AbstracttransformFilter

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -42,9 +42,17 @@
 	,	mSampleRate(0)
 	,	mUptoFrame(0)
 
+	,	mDecodedByteCount(0)
+	,	mDecodedBuffer(NULL)
+	,	mRateNumerator(RATE_DENOMINATOR)
+
+	,	mSetupState(VSS_SEEN_NOTHING)
+
 	,	mBegun(false)
 {
 	ConstructCodec();
+
+	mDecodedBuffer = new unsigned char[DECODED_BUFFER_SIZE];
 }
 
 bool SpeexDecodeInputPin::ConstructCodec() {
@@ -65,6 +73,8 @@
 SpeexDecodeInputPin::~SpeexDecodeInputPin(void)
 {
 	DestroyCodec();
+
+	delete mDecodedBuffer;
 }
 
 STDMETHODIMP SpeexDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
@@ -73,6 +83,11 @@
 		*ppv = (IMediaSeeking*)this;
 		((IUnknown*)*ppv)->AddRef();
 		return NOERROR;
+	} else if (riid == IID_IOggDecoder) {
+		*ppv = (IOggDecoder*)this;
+		//((IUnknown*)*ppv)->AddRef();
+		return NOERROR;
+
 	}
 
 	return CBaseInputPin::NonDelegatingQueryInterface(riid, ppv); 
@@ -82,106 +97,294 @@
 	CAutoLock locLock(mStreamLock);
 	//debugLog<<"New segment "<<inStartTime<<" - "<<inStopTime<<endl;
 	mUptoFrame = 0;
-	return AbstractTransformInputPin::NewSegment(inStartTime, inStopTime, inRate);
+
+	mRateNumerator = RATE_DENOMINATOR * inRate;
+	if (mRateNumerator > RATE_DENOMINATOR) {
+		mRateNumerator = RATE_DENOMINATOR;
+	}
+	return AbstractTransformInputPin::NewSegment(inStartTime, inStopTime, inRate);	
+}
+
+STDMETHODIMP SpeexDecodeInputPin::EndFlush()
+{
+	CAutoLock locLock(m_pLock);
 	
+	HRESULT locHR = AbstractTransformInputPin::EndFlush();
+	mDecodedByteCount = 0;
+	return locHR;
 }
+HRESULT SpeexDecodeInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps)
+{
+	outRequestedProps->cbBuffer = SPEEX_BUFFER_SIZE;
+	outRequestedProps->cBuffers = SPEEX_NUM_BUFFERS;
+	outRequestedProps->cbAlign = 1;
+	outRequestedProps->cbPrefix = 0;
 
+	return S_OK;
+}
 int SpeexDecodeInputPin::SpeexDecoded (FishSound* inFishSound, float** inPCM, long inFrames, void* inThisPointer) 
 {
-	//Do we need to delete the pcm structure ???? 
-	//More of this can go to the abstract class.
 
-	//For convenience we do all these cast once and for all here.
 	SpeexDecodeInputPin* locThis = reinterpret_cast<SpeexDecodeInputPin*> (inThisPointer);
 	SpeexDecodeFilter* locFilter = reinterpret_cast<SpeexDecodeFilter*>(locThis->m_pFilter);
-	
 
-	if (! locThis->mBegun) {
-	
-		fish_sound_command (locThis->mFishSound, FISH_SOUND_GET_INFO, &(locThis->mFishInfo), sizeof (FishSoundInfo)); 
-		locThis->mBegun = true;
+	if (locThis->CheckStreaming() == S_OK) {
+
+		unsigned long locActualSize = inFrames * locThis->mFrameSize;
+		unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
+		unsigned long locBufferRemaining = DECODED_BUFFER_SIZE - locThis->mDecodedByteCount;
 		
-		locThis->mNumChannels = locThis->mFishInfo.channels;
-		locThis->mFrameSize = locThis->mNumChannels * SIZE_16_BITS;
-		locThis->mSampleRate = locThis->mFishInfo.samplerate;
 
+
+		//Create a pointer into the buffer		
+		signed short* locShortBuffer = (signed short*)&locThis->mDecodedBuffer[locThis->mDecodedByteCount];
+		
+		
+		signed short tempInt = 0;
+		float tempFloat = 0;
+		
+		//FIX:::Move the clipping to the abstract function
+
+		if (locBufferRemaining >= locActualSize) {
+			//Do float to int conversion with clipping
+			const float SINT_MAX_AS_FLOAT = 32767.0f;
+			for (unsigned long i = 0; i < locTotalFrameCount; i++) {
+				//Clipping because vorbis puts out floats out of range -1 to 1
+				if (((float*)inPCM)[i] <= -1.0f) {
+					tempInt = SINT_MIN;	
+				} else if (((float*)inPCM)[i] >= 1.0f) {
+					tempInt = SINT_MAX;
+				} else {
+					//FIX:::Take out the unnescessary variable.
+					tempFloat = ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
+					//ASSERT((tempFloat <= 32767.0f) && (tempFloat >= -32786.0f));
+					tempInt = (signed short)(tempFloat);
+					//tempInt = (signed short) ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
+				}
+				
+				*locShortBuffer = tempInt;
+				locShortBuffer++;
+			}
+
+			locThis->mDecodedByteCount += locActualSize;
+			
+			return 0;
+		} else {
+			throw 0;
+		}
+	} else {
+		DbgLog((LOG_TRACE,1,TEXT("Fishsound sending stuff we aren't ready for...")));
+		return -1;
 	}
-	
-	//TO DO::: Move this somewhere else
-	unsigned long locActualSize = inFrames * locThis->mFrameSize;
-	unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
 
-	REFERENCE_TIME locFrameStart = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-	//Increment the frame counter
-	locThis->mUptoFrame += inFrames;
-	//Make the end frame counter
 
-	
-	REFERENCE_TIME locFrameEnd = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
 
 
-	IMediaSample* locSample;
-	HRESULT locHR = locThis->mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, NULL);
 
-	if (locHR != S_OK) {
-		return locHR;
-	}	
-	
-	//Create pointers for the samples buffer to be assigned to
-	BYTE* locBuffer = NULL;
-	signed short* locShortBuffer = NULL;
-	
-	//Make our pointers set to point to the samples buffer
-	locSample->GetPointer(&locBuffer);
-	locShortBuffer = (short *) locBuffer;
-	
-	signed short tempInt = 0;
-	float tempFloat = 0;
-	
-	//FIX:::Move the clipping to the abstract function
 
-	if (locSample->GetSize() >= locActualSize) {
-		//Do float to int conversion with clipping
-		float SINT_MAX_AS_FLOAT = 32767.0f;
-		for (unsigned long i = 0; i < locTotalFrameCount; i++) {
-			//Clipping because vorbis puts out floats out of range -1 to 1
-			if (((float*)inPCM)[i] <= -1.0f) {
-				tempInt = SINT_MIN;	
-			} else if (((float*)inPCM)[i] >= 1.0f) {
-				tempInt = SINT_MAX;
-			} else {
-				//FIX:::Take out the unnescessary variable.
-				tempFloat = ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
-				//ASSERT((tempFloat <= 32767.0f) && (tempFloat >= -32786.0f));
-				tempInt = (signed short)(tempFloat);
-				//tempInt = (signed short) ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
+
+
+
+
+
+
+
+	////Do we need to delete the pcm structure ???? 
+	////More of this can go to the abstract class.
+
+	////For convenience we do all these cast once and for all here.
+	//SpeexDecodeInputPin* locThis = reinterpret_cast<SpeexDecodeInputPin*> (inThisPointer);
+	//SpeexDecodeFilter* locFilter = reinterpret_cast<SpeexDecodeFilter*>(locThis->m_pFilter);
+	//
+
+	//if (! locThis->mBegun) {
+	//
+	//	fish_sound_command (locThis->mFishSound, FISH_SOUND_GET_INFO, &(locThis->mFishInfo), sizeof (FishSoundInfo)); 
+	//	locThis->mBegun = true;
+	//	
+	//	locThis->mNumChannels = locThis->mFishInfo.channels;
+	//	locThis->mFrameSize = locThis->mNumChannels * SIZE_16_BITS;
+	//	locThis->mSampleRate = locThis->mFishInfo.samplerate;
+
+	//}
+	//
+	////TO DO::: Move this somewhere else
+	//unsigned long locActualSize = inFrames * locThis->mFrameSize;
+	//unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
+
+	//REFERENCE_TIME locFrameStart = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
+	////Increment the frame counter
+	//locThis->mUptoFrame += inFrames;
+	////Make the end frame counter
+
+	//
+	//REFERENCE_TIME locFrameEnd = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
+
+
+	//IMediaSample* locSample;
+	//HRESULT locHR = locThis->mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, NULL);
+
+	//if (locHR != S_OK) {
+	//	return locHR;
+	//}	
+	//
+	////Create pointers for the samples buffer to be assigned to
+	//BYTE* locBuffer = NULL;
+	//signed short* locShortBuffer = NULL;
+	//
+	////Make our pointers set to point to the samples buffer
+	//locSample->GetPointer(&locBuffer);
+	//locShortBuffer = (short *) locBuffer;
+	//
+	//signed short tempInt = 0;
+	//float tempFloat = 0;
+	//
+	////FIX:::Move the clipping to the abstract function
+
+	//if (locSample->GetSize() >= locActualSize) {
+	//	//Do float to int conversion with clipping
+	//	float SINT_MAX_AS_FLOAT = 32767.0f;
+	//	for (unsigned long i = 0; i < locTotalFrameCount; i++) {
+	//		//Clipping because vorbis puts out floats out of range -1 to 1
+	//		if (((float*)inPCM)[i] <= -1.0f) {
+	//			tempInt = SINT_MIN;	
+	//		} else if (((float*)inPCM)[i] >= 1.0f) {
+	//			tempInt = SINT_MAX;
+	//		} else {
+	//			//FIX:::Take out the unnescessary variable.
+	//			tempFloat = ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
+	//			//ASSERT((tempFloat <= 32767.0f) && (tempFloat >= -32786.0f));
+	//			tempInt = (signed short)(tempFloat);
+	//			//tempInt = (signed short) ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
+	//		}
+	//		
+	//		*locShortBuffer = tempInt;
+	//		locShortBuffer++;
+	//	}
+	//	
+	//	//Set the sample parameters.
+	//	locThis->SetSampleParams(locSample, locActualSize, &locFrameStart, &locFrameEnd);
+
+	//	{
+	//		CAutoLock locLock(locThis->m_pLock);
+	//		HRESULT locHR = ((SpeexDecodeOutputPin*)(locThis->mOutputPin))->mDataQueue->Receive(locSample);
+	//		if (locHR != S_OK) {
+	//			return locHR;				
+	//		}
+	//	}
+
+	//	
+	//	return 0;
+	//} else {
+	//	throw 0;
+	//}
+
+}
+
+STDMETHODIMP SpeexDecodeInputPin::Receive(IMediaSample* inSample) 
+{
+	CAutoLock locLock(mStreamLock);
+
+	HRESULT locHR = CheckStreaming();
+
+	if (locHR == S_OK) {
+
+
+		BYTE* locBuff = NULL;
+		locHR = inSample->GetPointer(&locBuff);
+
+		if (locHR != S_OK) {
+			//TODO::: Do a debug dump or something here with specific error info.
+			return locHR;
+		} else {
+			REFERENCE_TIME locStart = -1;
+			REFERENCE_TIME locEnd = -1;
+			__int64 locSampleDuration = 0;
+			inSample->GetTime(&locStart, &locEnd);
+
+			HRESULT locResult = TransformData(locBuff, inSample->GetActualDataLength());
+			if (locResult != S_OK) {
+				return S_FALSE;
 			}
-			
-			*locShortBuffer = tempInt;
-			locShortBuffer++;
-		}
-		
-		//Set the sample parameters.
-		locThis->SetSampleParams(locSample, locActualSize, &locFrameStart, &locFrameEnd);
+			if (locEnd > 0) {
+				//Can dump it all downstream now	
+				IMediaSample* locSample;
+				unsigned long locBytesCopied = 0;
+				unsigned long locBytesToCopy = 0;
 
-		{
-			CAutoLock locLock(locThis->m_pLock);
-			HRESULT locHR = ((SpeexDecodeOutputPin*)(locThis->mOutputPin))->mDataQueue->Receive(locSample);
-			if (locHR != S_OK) {
-				return locHR;				
+				locStart = convertGranuleToTime(locEnd) - (((mDecodedByteCount / mFrameSize) * UNITS) / mSampleRate);
+				do {
+					HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, NULL, NULL, NULL);
+					if (locHR != S_OK) {
+						return locHR;
+					}
+
+					BYTE* locBuffer = NULL;
+					locHR = locSample->GetPointer(&locBuffer);
+				
+					if (locHR != S_OK) {
+						return locHR;
+					}
+
+					locBytesToCopy = ((mDecodedByteCount - locBytesCopied) <= locSample->GetSize()) ? (mDecodedByteCount - locBytesCopied) : locSample->GetSize();
+					//locBytesCopied += locBytesToCopy;
+
+					locSampleDuration = (((locBytesToCopy/mFrameSize) * UNITS) / mSampleRate);
+					locEnd = locStart + locSampleDuration;
+
+					//Adjust the time stamps for rate and seeking
+					REFERENCE_TIME locAdjustedStart = (locStart * RATE_DENOMINATOR) / mRateNumerator;
+					REFERENCE_TIME locAdjustedEnd = (locEnd * RATE_DENOMINATOR) / mRateNumerator;
+					locAdjustedStart -= m_tStart;
+					locAdjustedEnd -= m_tStart;
+
+					__int64 locSeekStripOffset = 0;
+					if (locAdjustedEnd < 0) {
+						locSample->Release();
+					} else {
+						if (locAdjustedStart < 0) {
+							locSeekStripOffset = (-locAdjustedStart) * mSampleRate;
+							locSeekStripOffset *= mFrameSize;
+							locSeekStripOffset /= UNITS;
+							locSeekStripOffset += (mFrameSize - (locSeekStripOffset % mFrameSize));
+							__int64 locStrippedDuration = (((locSeekStripOffset/mFrameSize) * UNITS) / mSampleRate);
+							locAdjustedStart += locStrippedDuration;
+						}
+							
+
+					
+
+						memcpy((void*)locBuffer, (const void*)&mDecodedBuffer[locBytesCopied + locSeekStripOffset], locBytesToCopy - locSeekStripOffset);
+
+						locSample->SetTime(&locAdjustedStart, &locAdjustedEnd);
+						locSample->SetMediaTime(&locStart, &locEnd);
+						locSample->SetSyncPoint(TRUE);
+						locSample->SetActualDataLength(locBytesToCopy - locSeekStripOffset);
+						locHR = ((SpeexDecodeOutputPin*)(mOutputPin))->mDataQueue->Receive(locSample);
+						if (locHR != S_OK) {
+							return locHR;
+						}
+						locStart += locSampleDuration;
+
+					}
+					locBytesCopied += locBytesToCopy;
+
+				
+				} while(locBytesCopied < mDecodedByteCount);
+
+				mDecodedByteCount = 0;
+				
 			}
+			return S_OK;
+
 		}
-
-		
-		return 0;
 	} else {
-		throw 0;
+		//Not streaming - Bail out.
+		return S_FALSE;
 	}
-
 }
 
 
-
 HRESULT SpeexDecodeInputPin::TransformData(BYTE* inBuf, long inNumBytes) 
 {
 	long locErr = fish_sound_decode(mFishSound, inBuf, inNumBytes);
@@ -194,16 +397,106 @@
 
 
 
-HRESULT SpeexDecodeInputPin::SetMediaType(const CMediaType* inMediaType) {
+HRESULT SpeexDecodeInputPin::SetMediaType(const CMediaType* inMediaType) 
+{
 	//FIX:::Error checking
 	//RESOLVED::: Bit better.
-
-	if (inMediaType->subtype == MEDIASUBTYPE_Speex) {
-		((SpeexDecodeFilter*)mParentFilter)->setSpeexFormat((sSpeexFormatBlock*)inMediaType->pbFormat);
-
+	if (CheckMediaType(inMediaType) == S_OK) {
+		((SpeexDecodeFilter*)mParentFilter)->setSpeexFormat(inMediaType->pbFormat);
+		
 	} else {
 		throw 0;
 	}
 	return CBaseInputPin::SetMediaType(inMediaType);
+
+	//if (inMediaType->subtype == MEDIASUBTYPE_Speex) {
+	//	((SpeexDecodeFilter*)mParentFilter)->setSpeexFormat((sSpeexFormatBlock*)inMediaType->pbFormat);
+
+	//} else {
+	//	throw 0;
+	//}
+	//return CBaseInputPin::SetMediaType(inMediaType);
 }
 
+HRESULT SpeexDecodeInputPin::CheckMediaType(const CMediaType *inMediaType)
+{
+	if (AbstractTransformInputPin::CheckMediaType(inMediaType) == S_OK) {
+		if (inMediaType->cbFormat == SPEEX_IDENT_HEADER_SIZE) {
+			if (strncmp((char*)inMediaType->pbFormat, "Speex   ", 8) == 0) {
+				//TODO::: Possibly verify version
+				return S_OK;
+			}
+		}
+	}
+	return S_FALSE;
+	
+}
+
+LOOG_INT64 SpeexDecodeInputPin::convertGranuleToTime(LOOG_INT64 inGranule)
+{
+	if (mBegun) {	
+		return (inGranule * UNITS) / mSampleRate;
+	} else {
+		return -1;
+	}
+}
+
+LOOG_INT64 SpeexDecodeInputPin::mustSeekBefore(LOOG_INT64 inGranule)
+{
+	//TODO::: Get adjustment from block size info... for now, it doesn't matter if no preroll
+	return inGranule;
+}
+IOggDecoder::eAcceptHeaderResult SpeexDecodeInputPin::showHeaderPacket(OggPacket* inCodecHeaderPacket)
+{
+	switch (mSetupState) {
+		case VSS_SEEN_NOTHING:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "Speex   ", 8) == 0) {
+				//TODO::: Possibly verify version
+				if (fish_sound_decode(mFishSound, inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize()) >= 0) {
+					mSetupState = VSS_SEEN_BOS;
+					return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				}
+			}
+			return IOggDecoder::AHR_INVALID_HEADER;
+			
+			
+		case VSS_SEEN_BOS:
+			//The comment packet can't be easily identified in speex.
+			//Just ignore the second packet we see, and hope fishsound does better.
+
+			//if (strncmp((char*)inCodecHeaderPacket->packetData(), "\003vorbis", 7) == 0) {
+				if (fish_sound_decode(mFishSound, inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize()) >= 0) {
+					mSetupState = VSS_ALL_HEADERS_SEEN;
+
+					fish_sound_command (mFishSound, FISH_SOUND_GET_INFO, &(mFishInfo), sizeof (FishSoundInfo)); 
+					mBegun = true;
+			
+					mNumChannels = mFishInfo.channels;
+					mFrameSize = mNumChannels * SIZE_16_BITS;
+					mSampleRate = mFishInfo.samplerate;
+
+					return IOggDecoder::AHR_ALL_HEADERS_RECEIVED;
+				}
+				
+				
+			//}
+			return IOggDecoder::AHR_INVALID_HEADER;
+			
+			
+	
+		case VSS_ALL_HEADERS_SEEN:
+		case VSS_ERROR:
+		default:
+			return IOggDecoder::AHR_UNEXPECTED;
+	}
+}
+string SpeexDecodeInputPin::getCodecShortName()
+{
+	return "speex";
+}
+string SpeexDecodeInputPin::getCodecIdentString()
+{
+	//TODO:::
+	return "speex";
+}
+

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/SpeexDecodeInputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -31,6 +31,7 @@
 
 #pragma once
 #include "speexdecoderdllstuff.h"
+#include "IOggDecoder.h"
 #include "AbstractTransformInputPin.h"
 #include "SpeexDecodeInputPin.h"
 
@@ -45,6 +46,7 @@
 
 class SpeexDecodeInputPin 
 	:	public AbstractTransformInputPin
+	,	public IOggDecoder
 {
 public:
 	DECLARE_IUNKNOWN
@@ -56,9 +58,28 @@
 
 
 	virtual HRESULT SetMediaType(const CMediaType* inMediaType);
+	virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
 	virtual STDMETHODIMP NewSegment(REFERENCE_TIME inStartTime, REFERENCE_TIME inStopTime, double inRate);
+	virtual STDMETHODIMP EndFlush();
 
+	virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
+
+	virtual STDMETHODIMP Receive(IMediaSample* inSample);
+
+	//IOggDecoder Interface
+	virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
+	virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
+	virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
+	virtual string getCodecShortName();
+	virtual string getCodecIdentString();
+
+
 protected:
+	static const unsigned long DECODED_BUFFER_SIZE = 1<<20;		//1 Meg buffer
+	static const unsigned long SPEEX_IDENT_HEADER_SIZE = 80;
+	static const unsigned long SPEEX_NUM_BUFFERS = 75;
+	static const unsigned long SPEEX_BUFFER_SIZE = 65536;
+
 	//Implementation of pure virtuals from AbstractTransformInputPin
 	virtual bool ConstructCodec();
 	virtual void DestroyCodec();
@@ -74,4 +95,23 @@
 
 	bool mBegun;
 
+	unsigned char* mDecodedBuffer;
+
+	unsigned long mDecodedByteCount;
+
+	enum eSpeexSetupState {
+		VSS_SEEN_NOTHING,
+		VSS_SEEN_BOS,
+		VSS_SEEN_COMMENT,
+		VSS_ALL_HEADERS_SEEN,
+		VSS_ERROR
+	};
+
+	eSpeexSetupState mSetupState;
+
+	__int64 mRateNumerator;
+	static const __int64 RATE_DENOMINATOR = 65536;
+
+
+
 };

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/dsfSpeexDecoder.vcproj
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/dsfSpeexDecoder.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/dsfSpeexDecoder.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DSFSPEEXDECODER_EXPORTS"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -81,7 +81,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFSPEEXDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -144,7 +144,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFSPEEXDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -208,7 +208,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFSPEEXDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/speexdecoderdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/speexdecoderdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/speexdecoderdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -30,6 +30,7 @@
 //===========================================================================
 
 #pragma once
+#include "libOOOgg/OggPacket.h"
 //#include <streams.h>
 //#include <pullpin.h>
 //#include <initguid.h>
@@ -51,24 +52,36 @@
 // {7605E26C-DE38-4b82-ADD8-FE2568CC0B25}
 DEFINE_GUID(CLSID_SpeexDecodeFilter, 
 0x7605e26c, 0xde38, 0x4b82, 0xad, 0xd8, 0xfe, 0x25, 0x68, 0xcc, 0xb, 0x25);
+//
+//// {25A9729D-12F6-420e-BD53-1D631DC217DF}
+//DEFINE_GUID(MEDIASUBTYPE_Speex, 
+//0x25a9729d, 0x12f6, 0x420e, 0xbd, 0x53, 0x1d, 0x63, 0x1d, 0xc2, 0x17, 0xdf);
+//
+//// {78701A27-EFB5-4157-9553-38A7854E3E81}
+//DEFINE_GUID(FORMAT_Speex, 
+//0x78701a27, 0xefb5, 0x4157, 0x95, 0x53, 0x38, 0xa7, 0x85, 0x4e, 0x3e, 0x81);
 
-// {25A9729D-12F6-420e-BD53-1D631DC217DF}
-DEFINE_GUID(MEDIASUBTYPE_Speex, 
-0x25a9729d, 0x12f6, 0x420e, 0xbd, 0x53, 0x1d, 0x63, 0x1d, 0xc2, 0x17, 0xdf);
 
-// {78701A27-EFB5-4157-9553-38A7854E3E81}
-DEFINE_GUID(FORMAT_Speex, 
-0x78701a27, 0xefb5, 0x4157, 0x95, 0x53, 0x38, 0xa7, 0x85, 0x4e, 0x3e, 0x81);
-//This structure defines the type of input we accept on the input pin... Stream/Annodex
+// {60891713-C24F-4767-B6C9-6CA05B3338FC}
+DEFINE_GUID(MEDIATYPE_OggPacketStream, 
+0x60891713, 0xc24f, 0x4767, 0xb6, 0xc9, 0x6c, 0xa0, 0x5b, 0x33, 0x38, 0xfc);
 
+// {95388704-162C-42a9-8149-C3577C12AAF9}
+DEFINE_GUID(FORMAT_OggIdentHeader, 
+0x95388704, 0x162c, 0x42a9, 0x81, 0x49, 0xc3, 0x57, 0x7c, 0x12, 0xaa, 0xf9);
+
+// {43F0F818-10B0-4c86-B9F1-F6B6E2D33462}
+DEFINE_GUID(IID_IOggDecoder, 
+0x43f0f818, 0x10b0, 0x4c86, 0xb9, 0xf1, 0xf6, 0xb6, 0xe2, 0xd3, 0x34, 0x62);
+
 const REGPINTYPES SpeexDecodeOutputTypes = {
     &MEDIATYPE_Audio,
 	&MEDIASUBTYPE_PCM
 };
 
 const REGPINTYPES SpeexDecodeInputTypes = {
-	&MEDIATYPE_Audio,
-	&MEDIASUBTYPE_Speex
+	&MEDIATYPE_OggPacketStream,
+	&MEDIASUBTYPE_None
 };
 const REGFILTERPINS SpeexDecodePinReg[] = {
 	{

Modified: trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/stdafx.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/stdafx.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/speex/filters/dsfSpeexDecoder/stdafx.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -40,6 +40,8 @@
 // Windows Header Files:
 #include <windows.h>
 
+#include <libOOOgg/libOOOgg.h>
+
 // TODO: reference additional headers your program requires here
 
 #include "AbstractTransformFilter.h"

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -65,6 +65,10 @@
 	,	mBegun(false)
 	,	mSeekTimeBase(0)
 	,	mLastSeenStartGranPos(0)
+
+	,	mSegStart(0)
+	,	mSegEnd(0)
+	,	mPlaybackRate(0.0)
 	,	mTheoraFormatInfo(NULL)
 {
 #ifdef OGGCODECS_LOGGING
@@ -134,16 +138,24 @@
 	return true;
 }
 
-HRESULT TheoraDecodeFilter::CheckInputType(const CMediaType* inMediaType) {
+HRESULT TheoraDecodeFilter::CheckInputType(const CMediaType* inMediaType) 
+{
+
 	
-	if	( (inMediaType->majortype == MEDIATYPE_Video) &&
-			(inMediaType->subtype == MEDIASUBTYPE_Theora) && (inMediaType->formattype == FORMAT_Theora)
+	if	( (inMediaType->majortype == MEDIATYPE_OggPacketStream) &&
+			(inMediaType->subtype == MEDIASUBTYPE_None) && (inMediaType->formattype == FORMAT_OggIdentHeader)
 		)
 	{
-		return S_OK;
-	} else {
-		return S_FALSE;
+		if (inMediaType->cbFormat == THEORA_IDENT_HEADER_SIZE) {
+			if (strncmp((char*)inMediaType->pbFormat, "\200theora", 7) == 0) {
+				//TODO::: Possibly verify version
+				return S_OK;
+			}
+		}
+
 	}
+	return S_FALSE;
+	
 }
 HRESULT TheoraDecodeFilter::CheckTransform(const CMediaType* inInputMediaType, const CMediaType* inOutputMediaType) {
 	if ((CheckInputType(inInputMediaType) == S_OK) &&
@@ -316,7 +328,9 @@
 	}
 }
 
-void TheoraDecodeFilter::ResetFrameCount() {
+void TheoraDecodeFilter::ResetFrameCount() 
+{
+	//XTODO::: Maybe not needed
 	mFrameCount = 0;
 	
 }
@@ -325,188 +339,325 @@
 {
 	debugLog<<"Resetting frame count"<<endl;
 	ResetFrameCount();
+	mSegStart = inStart;
+	mSegEnd = inEnd;
+	mPlaybackRate = inRate;
 	return CTransformFilter::NewSegment(inStart, inEnd, inRate);
 
 }
-HRESULT TheoraDecodeFilter::Transform(IMediaSample* inInputSample, IMediaSample* outOutputSample) {
 
-	//CAutoLock locLock(mStreamLock);
-	//debugLog<<endl<<"Transform "<<endl;
-	//debugLog<<"outOutputSample Size = "<<outOutputSample->
-	HRESULT locHR;
+HRESULT TheoraDecodeFilter::Receive(IMediaSample* inInputSample)
+{
+
+
 	BYTE* locBuff = NULL;
 	//Get a source poitner into the input buffer
-	locHR = inInputSample->GetPointer(&locBuff);
+	HRESULT locHR = inInputSample->GetPointer(&locBuff);
 
-	//TODO::: This should be after the return value check !!
-	BYTE* locNewBuff = new unsigned char[inInputSample->GetActualDataLength()];		//This gets put into a packet.
-	memcpy((void*)locNewBuff, (const void*)locBuff, inInputSample->GetActualDataLength());
-
-
 	if (locHR != S_OK) {
 		//debugLog<<"Receive : Get pointer failed..."<<locHR<<endl;	
 		return S_FALSE;
 	} else {
-		//debugLog<<"Receive : Get pointer succeeds..."<<endl;	
-		//New start time hacks
+
+		if ((inInputSample->GetActualDataLength() > 0) && ((locBuff[0] & 128) != 0)) {
+			//inInputSample->Release();
+
+			//This is a header, so ignore it
+			return S_OK;
+		}
+		//Make a copy of the packet buffer
+		BYTE* locNewBuff = new unsigned char[inInputSample->GetActualDataLength()];		//This gets put into a packet.
+		memcpy((void*)locNewBuff, (const void*)locBuff, inInputSample->GetActualDataLength());
+
+
 		REFERENCE_TIME locStart = 0;
 		REFERENCE_TIME locEnd = 0;
 		inInputSample->GetTime(&locStart, &locEnd);
-		//Error chacks needed here
-		//debugLog<<"Input Sample Time - "<<locStart<<" to "<<locEnd<<endl;
-		
-		//More work arounds for that stupid granule pos scheme in theora!
-		REFERENCE_TIME locTimeBase = 0;
-		REFERENCE_TIME locDummy = 0;
-		inInputSample->GetMediaTime(&locTimeBase, &locDummy);
-		mSeekTimeBase = locTimeBase;
-		//
 
-		//debugLog<<"SeekTimeBase = "<<mSeekTimeBase<<endl;
-		
-		if ((mLastSeenStartGranPos != locStart) && (locStart != -1)) {
-			//debugLog<<"Resetting frame count"<<endl;
+		debugLog<<"Theora::Receive - Sample: Size = "<<inInputSample->GetActualDataLength()<<" Time: "<<locStart<<" - "<<locEnd<<endl;
 
-			//FIXXX:::
-			//ResetFrameCount();
-			//
+		//This packet is given to the decoder or buffered for later
+		StampedOggPacket* locPacket = new StampedOggPacket(locNewBuff, inInputSample->GetActualDataLength(), false, false, locStart, locEnd, StampedOggPacket::OGG_END_ONLY);
 
-			mLastSeenStartGranPos = locStart;
-			//debugLog<<"Setting base gran pos to "<<locStart<<endl;
-		}
-		
-		//End of additions
+		//Buffer all packets, even if we are about to send them anyway
+		mBufferedPackets.push_back(locPacket);
 
+		if (locEnd < 0) {
 
-
-		AM_MEDIA_TYPE* locMediaType = NULL;
-		inInputSample->GetMediaType(&locMediaType);
-		if (locMediaType == NULL) {
-			//debugLog<<"No dynamic change..."<<endl;
+			//The packet was ok, but we just aren't going to deliver it yet
+			return S_OK;
 		} else {
-			//debugLog<<"Attempting dynamic change..."<<endl;
-		}
-		
-		//This packet is given to the decoder.
-		StampedOggPacket* locPacket = new StampedOggPacket(locNewBuff, inInputSample->GetActualDataLength(), false, false, locStart, locEnd, StampedOggPacket::OGG_END_ONLY);
+			//Now we have one with a stamp, we can send all the previous ones.
+			TheoraDecodeInputPin* locInputPin = (TheoraDecodeInputPin*)m_pInput;
+			REFERENCE_TIME locGlobalEnd = locInputPin->convertGranuleToTime(locEnd);
+			unsigned long locNumBufferedFrames = mBufferedPackets.size();
+			REFERENCE_TIME locGlobalStart = locGlobalEnd - (locNumBufferedFrames * mFrameDuration);
 
-		bool locIsKeyFrame = mTheoraDecoder->isKeyFrame(locPacket);
-		yuv_buffer* locYUV = mTheoraDecoder->decodeTheora(locPacket);		//This accept the packet and deletes it
-		if (locYUV != NULL) {
-			if (TheoraDecoded(locYUV, outOutputSample, locIsKeyFrame) != 0) {
-				//debugLog<<"Decoded *** FALSE ***"<<endl;
-				return S_FALSE;
+			locStart = locGlobalStart;
+
+
+			//Offsetting
+			REFERENCE_TIME locGlobalOffset = 0;
+			//Handle stream offsetting
+			if (!locInputPin->getSentStreamOffset() && (locInputPin->getOutputPinInterface() != NULL)) {
+				locInputPin->getOutputPinInterface()->notifyStreamBaseTime(locStart);
+				locInputPin->setSentStreamOffset(true);
+				
 			}
-		} else {
-			//debugLog<<"!@&#^()!&@#!()*@#&)!(*@#&()!*@# NULL Decode"<<endl;
-			return S_FALSE;
+
+			if (locInputPin->getOutputPinInterface() != NULL) {
+				locGlobalOffset = locInputPin->getOutputPinInterface()->getGlobalBaseTime();
+			}
+			
+			debugLog<<"Theora::Receive - "<<locNumBufferedFrames<<" frames buffered"<<endl;
+			for (unsigned long i = 0; i < locNumBufferedFrames; i++) {
+				debugLog<<"Theora::Receive - Processing buffered frame "<<i<<endl;
+				bool locIsKeyFrame = mTheoraDecoder->isKeyFrame(mBufferedPackets[i]);
+				yuv_buffer* locYUV = mTheoraDecoder->decodeTheora(mBufferedPackets[i]);		//This accept the packet and deletes it
+				locEnd = locStart + mFrameDuration;
+				REFERENCE_TIME locAdjustedStart = locStart - mSegStart - locGlobalOffset;
+				REFERENCE_TIME locAdjustedEnd = locEnd - mSegStart - locGlobalOffset;
+
+				if (locAdjustedStart < 0) {
+					locAdjustedStart = 0;
+				}
+
+				if (locAdjustedEnd >= 0) { 
+					if (locYUV != NULL) {
+						IMediaSample* locOutSample = NULL;
+						debugLog<<"Theora::Receive - Pre output sample initialisation"<<endl;
+						locHR = InitializeOutputSample(inInputSample, &locOutSample);
+						if (locHR != S_OK) {
+							//XTODO::: We need to trash our buffered packets
+							debugLog<<"Theora::Receive - Output sample initialisation failed"<<endl;
+							
+							deleteBufferedPacketsAfter(i);
+							
+							return S_FALSE;
+						}
+						debugLog<<"Theora::Receive - Output sample initialisation suceeded"<<endl;
+
+						//REFERENCE_TIME locAdjustedStart = (locStart * RATE_DENOMINATOR) / mRateNumerator;
+						//REFERENCE_TIME locAdjustedEnd = (locEnd * RATE_DENOMINATOR) / mRateNumerator;
+
+
+						//Fill the sample info
+						if (TheoraDecoded(locYUV, locOutSample, locIsKeyFrame, locAdjustedStart, locAdjustedEnd) != S_OK) {
+							
+							//XTODO::: We need to trash our buffered packets
+							locOutSample->Release();
+							deleteBufferedPacketsAfter(i);
+							return S_FALSE;
+						} else {
+							//Deliver the sample
+							debugLog<<"Theora::Receive - Delivering: "<<locAdjustedStart<<" to "<<locAdjustedEnd<<(locIsKeyFrame ? "KEYFRAME": " ")<<endl;
+							
+							locHR = m_pOutput->Deliver(locOutSample);
+							locOutSample->Release();
+							debugLog<<"Theora::Receive - Post delivery"<<endl;
+							if (locHR != S_OK) {
+								//XTODO::: We need to trash our buffered packets
+								debugLog<<"Theora::Receive - Delivery failed"<<endl;
+								locOutSample->Release();
+								deleteBufferedPacketsAfter(i);
+								return S_FALSE;
+							}
+							debugLog<<"Theora::Receive - Delivery Suceeded"<<endl;
+
+						}
+					} else {
+						//XTODO::: We need to trash our buffered packets
+						deleteBufferedPacketsAfter(i);
+						return S_FALSE;
+					}
+				}
+				locStart = locEnd;
+			}
+
+			mBufferedPackets.clear();
+
+
+
+			return S_OK;
+
 		}
-
-		return S_OK;
 		
 	}
-	
 }
 
-int TheoraDecodeFilter::TheoraDecoded (yuv_buffer* inYUVBuffer, IMediaSample* outSample, bool inIsKeyFrame) 
+void TheoraDecodeFilter::deleteBufferedPacketsAfter(unsigned long inPacketIndex)
 {
-	//debugLog<<"TheoraDecoded... #################### "<<endl;
-	
-		
-	if (!mBegun) {
-		//debugLog<<"First time..."<<endl;
-		mBegun = true;
-		
-		//How many UNITS does one frame take.
-		mFrameDuration = (UNITS * mTheoraFormatInfo->frameRateDenominator) / (mTheoraFormatInfo->frameRateNumerator);
-
-		mFrameSize = (mHeight * mWidth * 3) / 2;
-		mFrameCount = 0;
-		//debugLog<<"Frame Durn = "<<mFrameDuration<<endl;
-		//debugLog<<"FrameSize = "<<mFrameSize<<endl;
-		
-		
+	for (size_t i = inPacketIndex + 1; i < mBufferedPackets.size(); i++) {
+		delete mBufferedPackets[i];
 	}
 
+	mBufferedPackets.clear();
+}
+HRESULT TheoraDecodeFilter::Transform(IMediaSample* inInputSample, IMediaSample* outOutputSample) 
+{
+	//HRESULT locHR;
+	//BYTE* locBuff = NULL;
+	////Get a source poitner into the input buffer
+	//locHR = inInputSample->GetPointer(&locBuff);
 
-	////TO DO::: Fix this up... needs to move around order and some only needs to be done once, move it into the block aboce and use member data
+	//if (locHR != S_OK) {
+	//	//debugLog<<"Receive : Get pointer failed..."<<locHR<<endl;	
+	//	return S_FALSE;
+	//} else {
+	//	//Make a copy of the packet buffer
+	//	BYTE* locNewBuff = new unsigned char[inInputSample->GetActualDataLength()];		//This gets put into a packet.
+	//	memcpy((void*)locNewBuff, (const void*)locBuff, inInputSample->GetActualDataLength());
 
 
-	//-----------------------
-	//OLD CODE... FIXXX:::
-	//Timestamp hacks start here...
-			//unsigned long locMod = (unsigned long)pow(2, mTheoraFormatInfo->maxKeyframeInterval);
-			//unsigned long locInterFrameNo = (mLastSeenStartGranPos) % locMod;
-			//LONGLONG locAbsFramePos = ((mLastSeenStartGranPos >> mTheoraFormatInfo->maxKeyframeInterval)) + locInterFrameNo;
-			//REFERENCE_TIME locTimeBase = (locAbsFramePos * mFrameDuration) - mSeekTimeBase;
-			//REFERENCE_TIME locFrameStart = locTimeBase + (mFrameCount * mFrameDuration);
-			////Increment the frame counter
-			//mFrameCount++;
-			////Make the end frame counter
-			//REFERENCE_TIME locFrameEnd = locTimeBase + (mFrameCount * mFrameDuration);
-	//------------------------
+	//	REFERENCE_TIME locStart = 0;
+	//	REFERENCE_TIME locEnd = 0;
+	//	inInputSample->GetTime(&locStart, &locEnd);
 
+	//	//This packet is given to the decoder or buffered for later
+	//	StampedOggPacket* locPacket = new StampedOggPacket(locNewBuff, inInputSample->GetActualDataLength(), false, false, locStart, locEnd, StampedOggPacket::OGG_END_ONLY);
 
-	REFERENCE_TIME locFrameStart = (mFrameCount * mFrameDuration);
-	mFrameCount++;
-	REFERENCE_TIME locFrameEnd = (mFrameCount * mFrameDuration);
+	//	//Buffer all packets, even if we are about to send them anyway
+	//	mBufferedPackets.push_back(locPacket);
 
-	
-	debugLog<<"Sample times = "<<locFrameStart<<" to "<<locFrameEnd<<"  frame "<<mFrameCount<<" KF = "<<((inIsKeyFrame) ? "YES" : "NO")<<endl;
-	
-	//FILTER_STATE locFS;
-	//GetState(0, &locFS);
-	//debugLog<<"State Before = "<<locFS<<endl;
-	//HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, locFlags);
-	//GetState(0, &locFS);
-	//debugLog<<"State After = "<<locFS<<endl;
-	
-	
+	//	if (locEnd < 0) {
 
-	//Debuggin code
-	AM_MEDIA_TYPE* locMediaType = NULL;
-	outSample->GetMediaType(&locMediaType);
-	if (locMediaType == NULL) {
-		//debugLog<<"No dynamic change..."<<endl;
-	} else {
-		//debugLog<<"Attempting dynamic change..."<<endl;
-		if (locMediaType->majortype == MEDIATYPE_Video) {
-			//debugLog<<"Still MEDIATYPE_Video"<<endl;
-		}
+	//		//S_FALSE is an agreement with CTransform filter, to not deliver the presented output sample
+	//		//XXX::: There may be some problems doing this, since it causes a quality message, and thinks we
+	//		//		are dropping samples. It also may present a problem when we try to dump many frames
+	//		//		downstream in one go.
+	//		return S_FALSE;
+	//	} else {
+	//		//Now we have one with a stamp, we can send all the previous ones.
+	//		TheoraDecodeInputPin* locInputPin = (TheoraDecodeInputPin*)m_pInput;
+	//		REFERENCE_TIME locGlobalEnd = locInputPin->convertGranuleToTime(locEnd);
+	//		unsigned long locNumBufferedFrames = mBufferedPackets.size();
+	//		REFERENCE_TIME locGlobalStart = locGlobalEnd - (locNumBufferedFrames * mFrameDuration);
 
-		if (locMediaType->subtype == MEDIASUBTYPE_YV12) {
-			//debugLog<<"Still MEDIASUBTYPE_YV12"<<endl;
-		}
+	//		locStart = locGlobalStart;
+	//		
+	//		for (unsigned long i = 0; i < locNumBufferedFrames; i++) {
+	//			bool locIsKeyFrame = mTheoraDecoder->isKeyFrame(mBufferedPackets[i]);
+	//			yuv_buffer* locYUV = mTheoraDecoder->decodeTheora(mBufferedPackets[i]);		//This accept the packet and deletes it
+	//			locEnd = locStart + mFrameDuration;
+	//			if (locYUV != NULL) {
+	//				if (TheoraDecoded(locYUV, outOutputSample, locIsKeyFrame) != 0) {
+	//					//debugLog<<"Decoded *** FALSE ***"<<endl;
+	//					return S_FALSE;
+	//				}
+	//			} else {
+	//				//debugLog<<"!@&#^()!&@#!()*@#&)!(*@#&()!*@# NULL Decode"<<endl;
+	//				return S_FALSE;
+	//			}					
+	//		}
 
-		if (locMediaType->formattype == FORMAT_VideoInfo) {
-			//debugLog<<"Still FORMAT_VideoInfo"<<endl;
-			VIDEOINFOHEADER* locVF = (VIDEOINFOHEADER*)locMediaType->pbFormat;
-			//debugLog<<"Size = "<<locVF->bmiHeader.biSizeImage<<endl;
-			//debugLog<<"Dim   = "<<locVF->bmiHeader.biWidth<<" x " <<locVF->bmiHeader.biHeight<<endl;
-		}
 
-		//debugLog<<"Major  : "<<DSStringer::GUID2String(&locMediaType->majortype);
-		//debugLog<<"Minor  : "<<DSStringer::GUID2String(&locMediaType->subtype);
-		//debugLog<<"Format : "<<DSStringer::GUID2String(&locMediaType->formattype);
-		//debugLog<<"Form Sz: "<<locMediaType->cbFormat;
 
+	//		return S_OK;
 
-	}
-	//
+	//	}
+	//	
+	//}
 
+
+
+
+
+
+
+	//HRESULT locHR;
+	//BYTE* locBuff = NULL;
+	////Get a source poitner into the input buffer
+	//locHR = inInputSample->GetPointer(&locBuff);
+
+	////TODO::: This should be after the return value check !!
+	//BYTE* locNewBuff = new unsigned char[inInputSample->GetActualDataLength()];		//This gets put into a packet.
+	//memcpy((void*)locNewBuff, (const void*)locBuff, inInputSample->GetActualDataLength());
+
+
+	//if (locHR != S_OK) {
+	//	//debugLog<<"Receive : Get pointer failed..."<<locHR<<endl;	
+	//	return S_FALSE;
+	//} else {
+	//	//debugLog<<"Receive : Get pointer succeeds..."<<endl;	
+	//	//New start time hacks
+	//	REFERENCE_TIME locStart = 0;
+	//	REFERENCE_TIME locEnd = 0;
+	//	inInputSample->GetTime(&locStart, &locEnd);
+	//	//Error chacks needed here
+	//	//debugLog<<"Input Sample Time - "<<locStart<<" to "<<locEnd<<endl;
+	//	
+	//	//More work arounds for that stupid granule pos scheme in theora!
+	//	REFERENCE_TIME locTimeBase = 0;
+	//	REFERENCE_TIME locDummy = 0;
+	//	inInputSample->GetMediaTime(&locTimeBase, &locDummy);
+	//	mSeekTimeBase = locTimeBase;
+	//	//
+
+	//	//debugLog<<"SeekTimeBase = "<<mSeekTimeBase<<endl;
+	//	
+	//	if ((mLastSeenStartGranPos != locStart) && (locStart != -1)) {
+	//		//debugLog<<"Resetting frame count"<<endl;
+
+	//		//FIXXX:::
+	//		//ResetFrameCount();
+	//		//
+
+	//		mLastSeenStartGranPos = locStart;
+	//		//debugLog<<"Setting base gran pos to "<<locStart<<endl;
+	//	}
+	//	
+	//	//End of additions
+
+
+
+	//	AM_MEDIA_TYPE* locMediaType = NULL;
+	//	inInputSample->GetMediaType(&locMediaType);
+	//	if (locMediaType == NULL) {
+	//		//debugLog<<"No dynamic change..."<<endl;
+	//	} else {
+	//		//debugLog<<"Attempting dynamic change..."<<endl;
+	//	}
+	//	
+	//	//This packet is given to the decoder.
+	//	StampedOggPacket* locPacket = new StampedOggPacket(locNewBuff, inInputSample->GetActualDataLength(), false, false, locStart, locEnd, StampedOggPacket::OGG_END_ONLY);
+
+	//	bool locIsKeyFrame = mTheoraDecoder->isKeyFrame(locPacket);
+	//	yuv_buffer* locYUV = mTheoraDecoder->decodeTheora(locPacket);		//This accept the packet and deletes it
+	//	if (locYUV != NULL) {
+	//		if (TheoraDecoded(locYUV, outOutputSample, locIsKeyFrame) != 0) {
+	//			//debugLog<<"Decoded *** FALSE ***"<<endl;
+	//			return S_FALSE;
+	//		}
+	//	} else {
+	//		//debugLog<<"!@&#^()!&@#!()*@#&)!(*@#&()!*@# NULL Decode"<<endl;
+	//		return S_FALSE;
+	//	}
+
+	//	return S_OK;
+	//	
+	//}
+
+	debugLog<<"Theora::Transform NOT IMPLEMENTED"<<endl;
+
+	return E_NOTIMPL;
+	
+}
+
+HRESULT TheoraDecodeFilter::TheoraDecoded (yuv_buffer* inYUVBuffer, IMediaSample* outSample, bool inIsKeyFrame, REFERENCE_TIME inStart, REFERENCE_TIME inEnd) 
+{
+
 	////Create pointers for the samples buffer to be assigned to
 	BYTE* locBuffer = NULL;
 	
 	//
 	////Make our pointers set to point to the samples buffer
 	outSample->GetPointer(&locBuffer);
-	
-	
 
-
 	//Fill the buffer with yuv data...
 	//	
 
+	REFERENCE_TIME locStart = inStart;
+	REFERENCE_TIME locEnd = inEnd;
 
 
 	//Set up the pointers
@@ -526,7 +677,9 @@
 	//NEW WAY with offsets Y Data
 	long locTopPad = inYUVBuffer->y_height - mHeight - mYOffset;
 	//debugLog<<"--------- PAD = "<<locTopPad<<endl;
-	ASSERT(locTopPad >= 0);
+
+
+	//ASSERT(locTopPad >= 0);
 	if (locTopPad < 0) {
 		locTopPad = 0;
 	} else {
@@ -601,11 +754,11 @@
 	if (inIsKeyFrame) {
 		locIsKeyFrame = TRUE;
 	};
-	SetSampleParams(outSample, mFrameSize, &locFrameStart, &locFrameEnd, locIsKeyFrame);
+	SetSampleParams(outSample, mFrameSize, &locStart, &locEnd, locIsKeyFrame);
 
 	
 	
-	return 0;
+	return S_OK;
 
 
 }
@@ -614,18 +767,19 @@
 HRESULT TheoraDecodeFilter::SetMediaType(PIN_DIRECTION inDirection, const CMediaType* inMediaType) {
 
 	if (inDirection == PINDIR_INPUT) {
-		if (inMediaType->subtype == MEDIASUBTYPE_Theora) {
+		if (CheckInputType(inMediaType) == S_OK) {
 			//debugLog<<"Setting format block"<<endl;
-			setTheoraFormat((sTheoraFormatBlock*)inMediaType->pbFormat);
+			setTheoraFormat(inMediaType->pbFormat);
 			
 			//Set some other stuff here too...
-			mXOffset = ((sTheoraFormatBlock*)inMediaType->pbFormat)->xOffset;
-			mYOffset = ((sTheoraFormatBlock*)inMediaType->pbFormat)->yOffset;
-			//mHeight = ((sTheoraFormatBlock*)inMediaType->pbFormat)->frameHeight;
-			//mWidth = ((sTheoraFormatBlock*)inMediaType->pbFormat)->frameWidth;
-			//debugLog<<"Setting height width to "<<mWidth<<" x "<<mHeight<<endl;
-			//debugLog<<"Frame Dims were "<<((sTheoraFormatBlock*)inMediaType->pbFormat)->frameWidth<<" x "<<((sTheoraFormatBlock*)inMediaType->pbFormat)->frameHeight<<endl;
+			mXOffset = mTheoraFormatInfo->xOffset;
+			mYOffset = mTheoraFormatInfo->xOffset;
 
+			//How many UNITS does one frame take.
+			mFrameDuration = (UNITS * mTheoraFormatInfo->frameRateDenominator) / (mTheoraFormatInfo->frameRateNumerator);
+
+			mFrameSize = (mHeight * mWidth * 3) / 2;
+			mFrameCount = 0;
 		} else {
 			//Failed... should never be here !
 			throw 0;
@@ -668,11 +822,48 @@
 {
 	return mTheoraFormatInfo;
 }
-void TheoraDecodeFilter::setTheoraFormat(sTheoraFormatBlock* inFormatBlock) 
+void TheoraDecodeFilter::setTheoraFormat(BYTE* inFormatBlock) 
 {
+
 	delete mTheoraFormatInfo;
 	mTheoraFormatInfo = new sTheoraFormatBlock;			//Deelted in destructor.
-	*mTheoraFormatInfo = *inFormatBlock;
+
+	//0		-	55			theora ident						0	-	6
+	//56	-	63			ver major							7	-	7
+	//64	-	71			ver minor							8	-	8
+	//72	-	79			ver subversion						9	=	9
+	//80	-	95			width/16							10	-	11
+	//96	-	111			height/16							12	-	13
+	//112	-	135			framewidth							14	-	16
+	//136	-	159			frameheight							17	-	19
+	//160	-	167			xoffset								20	-	20
+	//168	-	175			yoffset								21	-	21
+	//176	-	207			framerateNum						22	-	25
+	//208	-	239			frameratedenom						26	-	29
+	//240	-	263			aspectNum							30	-	32
+	//264	-	287			aspectdenom							33	-	35
+	//288	-	295			colourspace							36	-	36
+	//296	-	319			targetbitrate						37	-	39
+	//320	-	325			targetqual							40	-	40.75
+	//326	-	330			keyframintlog						40.75-  41.375
+
+	unsigned char* locIdentHeader = inFormatBlock;
+	mTheoraFormatInfo->theoraVersion = (iBE_Math::charArrToULong(locIdentHeader + 7)) >>8;
+	mTheoraFormatInfo->outerFrameWidth = (iBE_Math::charArrToUShort(locIdentHeader + 10)) * 16;
+	mTheoraFormatInfo->outerFrameHeight = (iBE_Math::charArrToUShort(locIdentHeader + 12)) * 16;
+	mTheoraFormatInfo->pictureWidth = (iBE_Math::charArrToULong(locIdentHeader + 14)) >>8;
+	mTheoraFormatInfo->pictureHeight = (iBE_Math::charArrToULong(locIdentHeader + 17)) >>8;
+	mTheoraFormatInfo->xOffset = locIdentHeader[20];
+	mTheoraFormatInfo->yOffset = locIdentHeader[21];
+	mTheoraFormatInfo->frameRateNumerator = iBE_Math::charArrToULong(locIdentHeader + 22);
+	mTheoraFormatInfo->frameRateDenominator = iBE_Math::charArrToULong(locIdentHeader + 26);
+	mTheoraFormatInfo->aspectNumerator = (iBE_Math::charArrToULong(locIdentHeader + 30)) >>8;
+	mTheoraFormatInfo->aspectDenominator = (iBE_Math::charArrToULong(locIdentHeader + 33)) >>8;
+	mTheoraFormatInfo->colourSpace = locIdentHeader[36];
+	mTheoraFormatInfo->targetBitrate = (iBE_Math::charArrToULong(locIdentHeader + 37)) >>8;
+	mTheoraFormatInfo->targetQuality = (locIdentHeader[40]) >> 2;
+
+	mTheoraFormatInfo->maxKeyframeInterval= (((locIdentHeader[40]) % 4) << 3) + (locIdentHeader[41] >> 5);
 }
 
 CBasePin* TheoraDecodeFilter::GetPin(int inPinNo)
@@ -708,90 +899,3 @@
         return NULL;
     }
 }
-//---------------------------------------
-//OLD IMPLOEMENTATION....
-//---------------------------------------
-//#include "theoradecodefilter.h"
-//
-//
-//
-////COM Factory Template
-//CFactoryTemplate g_Templates[] = 
-//{
-//    { 
-//		L"Theora Decode Filter",					// Name
-//	    &CLSID_TheoraDecodeFilter,				// CLSID
-//	    TheoraDecodeFilter::CreateInstance,		// Method to create an instance of Theora Decoder
-//        NULL,									// Initialization function
-//        NULL									// Set-up information (for filters)
-//    }
-//
-//};
-//
-//// Generic way of determining the number of items in the template
-//int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); 
-//
-//
-//
-////Theora Decode Filter Implementation
-////==================================
-//TheoraDecodeFilter::TheoraDecodeFilter()
-//	:	AbstractVideoDecodeFilter(NAME("Ogg Video Decoder"), CLSID_TheoraDecodeFilter, THEORA)
-//	,	mTheoraFormatInfo(NULL)
-//{
-//
-//	bool locWasConstructed = ConstructPins();
-//}
-//
-//bool TheoraDecodeFilter::ConstructPins() 
-//{
-//	
-//	//Output pin must be done first because it's passed to the input pin.
-//	mOutputPin = new TheoraDecodeOutputPin(this, m_pLock);
-//
-//	CMediaType* locAcceptMediaType = new CMediaType(&MEDIATYPE_Video);
-//	locAcceptMediaType->subtype = MEDIASUBTYPE_Theora;
-//	locAcceptMediaType->formattype = FORMAT_Theora;
-//	mInputPin = new TheoraDecodeInputPin(this, m_pLock, mOutputPin, locAcceptMediaType);
-//	return true;
-//}
-//
-//TheoraDecodeFilter::~TheoraDecodeFilter(void)
-//{
-//	//DestroyPins();
-//	delete mTheoraFormatInfo;
-//}
-//
-//CUnknown* WINAPI TheoraDecodeFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
-//{
-//	//This routine is the COM implementation to create a new Filter
-//	TheoraDecodeFilter *pNewObject = new TheoraDecodeFilter();
-//    if (pNewObject == NULL) {
-//        *pHr = E_OUTOFMEMORY;
-//    }
-//	return pNewObject;
-//} 
-//
-//STDMETHODIMP TheoraDecodeFilter::GetState(DWORD dw, FILTER_STATE *pState)
-//{
-//    CheckPointer(pState, E_POINTER);
-//    *pState = m_State;
-//	if (m_State == State_Paused) {
-//        return VFW_S_CANT_CUE;
-//	} else {
-//        return S_OK;
-//	}
-//}
-//
-////QUERY::: Do we need these ? Aren't we all friedns here ??
-////RESULT::: Keep them, set function must be kept... get could go... but keep for consistency
-//sTheoraFormatBlock* TheoraDecodeFilter::getTheoraFormatBlock() 
-//{
-//	return mTheoraFormatInfo;
-//}
-//void TheoraDecodeFilter::setTheoraFormat(sTheoraFormatBlock* inFormatBlock) 
-//{
-//	delete mTheoraFormatInfo;
-//	mTheoraFormatInfo = new sTheoraFormatBlock;
-//	*mTheoraFormatInfo = *inFormatBlock;
-//}

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeFilter.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -31,9 +31,13 @@
 
 #pragma once
 
+#define OGGCODECS_LOGGING
+
 #include "Theoradecoderdllstuff.h"
 #include "theoradecodeoutputpin.h"
 #include "theoradecodeinputpin.h"
+
+#include <libilliCore/iBE_Math.h>
 #include <math.h>
 //#include "DSStringer.h"
 #include "TheoraDecoder.h"
@@ -45,6 +49,7 @@
 
 {
 public:
+	friend class TheoraDecodeInputPin;
 	TheoraDecodeFilter(void);
 	virtual ~TheoraDecodeFilter(void);
 
@@ -59,15 +64,21 @@
 	virtual HRESULT Transform(IMediaSample* inInputSample, IMediaSample* outOutputSample);
 
 	//Overrides
+	virtual HRESULT Receive(IMediaSample* inSample);
+
 	virtual HRESULT SetMediaType(PIN_DIRECTION inDirection, const CMediaType* inMediaType);
 	virtual HRESULT NewSegment(REFERENCE_TIME inStart, REFERENCE_TIME inEnd, double inRate);
 	//virtual BOOL ShouldSkipFrame(IMediaSample* inSample);
 	virtual CBasePin* TheoraDecodeFilter::GetPin(int inPinNo);
 	//Helpers
 	sTheoraFormatBlock* getTheoraFormatBlock();
-	void setTheoraFormat(sTheoraFormatBlock* inFormatBlock);
+	void setTheoraFormat(BYTE* inFormatBlock);
 protected:
+
+	static const unsigned long THEORA_IDENT_HEADER_SIZE = 42;
 	virtual void ResetFrameCount();
+
+	void deleteBufferedPacketsAfter(unsigned long inPacketIndex);
 	void FillMediaType(CMediaType* outMediaType, unsigned long inSampleSize);
 	bool FillVideoInfoHeader(VIDEOINFOHEADER* inFormatBuffer);
 	bool SetSampleParams(IMediaSample* outMediaSample, unsigned long inDataSize, REFERENCE_TIME* inStartTime, REFERENCE_TIME* inEndTime, BOOL inIsSync);
@@ -81,9 +92,13 @@
 	bool mBegun;
 	TheoraDecoder* mTheoraDecoder;
 	
+	vector<StampedOggPacket*> mBufferedPackets;
 
-	int TheoraDecoded (yuv_buffer* inYUVBuffer, IMediaSample* outSample, bool inIsKeyFrame);
+	HRESULT TheoraDecoded (yuv_buffer* inYUVBuffer, IMediaSample* outSample, bool inIsKeyFrame, REFERENCE_TIME inStart, REFERENCE_TIME inEnd);
 
+	REFERENCE_TIME mSegStart;
+	REFERENCE_TIME mSegEnd;
+	double mPlaybackRate;
 
 	__int64 mSeekTimeBase;
 	__int64 mLastSeenStartGranPos;
@@ -91,51 +106,3 @@
 	sTheoraFormatBlock* mTheoraFormatInfo;
 	fstream debugLog;
 };
-//---------------------------------------
-//OLD IMPLOEMENTATION....
-//---------------------------------------
-////Include Files
-//#include "Theoradecoderdllstuff.h"
-//#include "AbstractVideoDecodeFilter.h"
-//
-////Forward Declarations
-//struct sTheoraFormatBlock;
-//class TheoraDecodeInputPin;
-//class TheoraDecodeOutputPin;
-//
-////Class Interface
-//class TheoraDecodeFilter
-//	//Base Classes
-//	:	public AbstractVideoDecodeFilter
-//{
-//public:
-//	//Friends
-//	friend class TheoraDecodeInputPin;
-//	friend class TheoraDecodeOutputPin;
-//
-//	
-//	
-//
-//	//Constructors and Destructors
-//	TheoraDecodeFilter(void);
-//	virtual ~TheoraDecodeFilter(void);
-//
-//	//COM Creator Function
-//	static CUnknown* WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr);
-//
-//	//IMediaFilter OVerride - This lets us tell the graph we may not produce data in pause state so don't block.
-//	virtual STDMETHODIMP GetState(DWORD dw, FILTER_STATE *pState);
-//
-//	
-//
-//	//VIRTUAL FUNCTIONS - AbstractAudioDecodeFilter
-//	virtual bool ConstructPins();
-//
-//	//FIX::: Do we need these ? Aren't they all friends ??
-//	virtual sTheoraFormatBlock* getTheoraFormatBlock();
-//	virtual void setTheoraFormat(sTheoraFormatBlock* inFormatBlock);
-//
-//protected:
-//	//Format Block
-//	sTheoraFormatBlock* mTheoraFormatInfo;
-//};

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -35,6 +35,9 @@
 
 TheoraDecodeInputPin::TheoraDecodeInputPin(CTransformFilter* inParentFilter, HRESULT* outHR) 
 	:	CTransformInputPin(NAME("Theora Input Pin"), inParentFilter, outHR, L"Theora In")
+	,	mSetupState(VSS_SEEN_NOTHING)
+	,	mOggOutputPinInterface(NULL)
+	,	mSentStreamOffset(false)
 {
 	//debugLog.open("G:\\logs\\theoinput.log", ios_base::out);
 }
@@ -42,19 +45,40 @@
 	//debugLog.close();
 }
 
-STDMETHODIMP TheoraDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv) {
-	//debugLog<<"Querying interface"<<endl;
+STDMETHODIMP TheoraDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv) 
+{
+
+
+
 	if (riid == IID_IMediaSeeking) {
 		//debugLog<<"Got Seeker"<<endl;
 		*ppv = (IMediaSeeking*)this;
 		((IUnknown*)*ppv)->AddRef();
 		
 		return NOERROR;
+	} else if (riid == IID_IOggDecoder) {
+		*ppv = (IOggDecoder*)this;
+		//((IUnknown*)*ppv)->AddRef();
+		return NOERROR;
+
 	}
 
 	return CBaseInputPin::NonDelegatingQueryInterface(riid, ppv); 
 }
+HRESULT TheoraDecodeInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps)
+{
+	TheoraDecodeFilter* locParent = (TheoraDecodeFilter*)m_pFilter;
+	unsigned long locBuffSize = ((unsigned long)locParent->mTheoraFormatInfo->outerFrameHeight * (unsigned long)locParent->mTheoraFormatInfo->outerFrameWidth * 3) >> 3;
+	if (locBuffSize < 65536) {
+		locBuffSize = 65536;
+	}
+	outRequestedProps->cbBuffer =  locBuffSize;
+	outRequestedProps->cBuffers = THEORA_NUM_BUFFERS;
+	outRequestedProps->cbAlign = 1;
+	outRequestedProps->cbPrefix = 0;
 
+	return S_OK;
+}
 HRESULT TheoraDecodeInputPin::BreakConnect() {
 	CAutoLock locLock(m_pLock);
 	//debugLog<<"Break conenct"<<endl;
@@ -64,6 +88,19 @@
 }
 HRESULT TheoraDecodeInputPin::CompleteConnect (IPin *inReceivePin) {
 	CAutoLock locLock(m_pLock);
+
+	//Offsets
+	IOggOutputPin* locOggOutput = NULL;
+	mSentStreamOffset = false;
+	HRESULT locHR = inReceivePin->QueryInterface(IID_IOggOutputPin, (void**)&locOggOutput);
+	if (locHR == S_OK) {
+		mOggOutputPinInterface = locOggOutput;
+		
+	} else {
+		mOggOutputPinInterface = NULL;
+	}
+
+
 	//debugLog<<"Complete conenct"<<endl;
 	IMediaSeeking* locSeeker = NULL;
 	inReceivePin->QueryInterface(IID_IMediaSeeking, (void**)&locSeeker);
@@ -74,367 +111,108 @@
 	return CTransformInputPin::CompleteConnect(inReceivePin);
 }
 
-//----------------------
-//OLD IMPLEMENTATION
-//----------------------
-//TheoraDecodeInputPin::TheoraDecodeInputPin(AbstractVideoDecodeFilter* inFilter, CCritSec* inFilterLock, AbstractVideoDecodeOutputPin* inOutputPin, CMediaType* inAcceptMediaType)
-//	:	AbstractVideoDecodeInputPin(inFilter, inFilterLock, inOutputPin, NAME("TheoraDecodeInputPin"), L"Theora In", inAcceptMediaType)
-//	,	mXOffset(0)
-//	,	mYOffset(0)
-//
-//{
-//	debugLog.open("G:\\logs\\theoInputPin.log", ios_base::out);
-//	ConstructCodec();
-//}
-//
-//STDMETHODIMP TheoraDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
-//{
-//	if (riid == IID_IMediaSeeking) {
-//		*ppv = (IMediaSeeking*)this;
-//		((IUnknown*)*ppv)->AddRef();
-//		return NOERROR;
-//	}
-//
-//	return CBaseInputPin::NonDelegatingQueryInterface(riid, ppv); 
-//}
-//bool TheoraDecodeInputPin::ConstructCodec() {
-//
-//
-//	mTheoraDecoder = new TheoraDecoder;
-//	mTheoraDecoder->initCodec();
-//	return true;
-//}
-//void TheoraDecodeInputPin::DestroyCodec() {
-//	delete mTheoraDecoder;
-//}
-//TheoraDecodeInputPin::~TheoraDecodeInputPin(void)
-//{
-//	debugLog.close();
-//	DestroyCodec();
-//	
-//}
-//
-//
-//
-//int TheoraDecodeInputPin::TheoraDecoded (yuv_buffer* inYUVBuffer) 
-//{
-//	DbgLog((LOG_TRACE,1,TEXT("Decoded... Sending...")));
-//	
-//	debugLog<<"TheoraDecoded... "<<endl;
-//	
-//	TheoraDecodeFilter* locFilter = reinterpret_cast<TheoraDecodeFilter*>(m_pFilter);
-//	//
-//	if (!mBegun) {
-//	
-//	
-//	
-//		mBegun = true;
-//		
-//		//How many UNITS does one frame take.
-//		mFrameDuration = (UNITS * locFilter->mTheoraFormatInfo->frameRateDenominator) / (locFilter->mTheoraFormatInfo->frameRateNumerator);
-//		mFrameSize = (mHeight * mWidth * 3) / 2;
-//		mFrameCount = 0;
-//	}
-//
-//
-//
-//	////FIX::: Most of this will be obselete... the demux does it all.
-//	//
-//
-//	////TO DO::: Fix this up... needs to move around order and some only needs to be done once, move it into the block aboce and use member data
-//
-//	////Make the start timestamp
-//	////FIX:::Abstract this calculation
-//	DbgLog((LOG_TRACE,1,TEXT("Frame Count = %d"), mFrameCount));
-//	//REFERENCE_TIME locFrameStart = CurrentStartTime() + (mFrameCount * mFrameDuration);
-//
-//	//Timestamp hacks start here...
-//	unsigned long locMod = (unsigned long)pow(2, locFilter->mTheoraFormatInfo->maxKeyframeInterval);
-//	DbgLog((LOG_TRACE,1,TEXT("locSeenGranPos = %d"), mLastSeenStartGranPos));
-//	DbgLog((LOG_TRACE,1,TEXT("locMod = %d"), locMod));
-//	unsigned long locInterFrameNo = (mLastSeenStartGranPos) % locMod;
-//	DbgLog((LOG_TRACE,1,TEXT("InterFrameNo = %d"), locInterFrameNo));
-//	LONGLONG locAbsFramePos = ((mLastSeenStartGranPos >> locFilter->mTheoraFormatInfo->maxKeyframeInterval)) + locInterFrameNo;
-//	DbgLog((LOG_TRACE,1,TEXT("AbsFrameNo = %d"), locAbsFramePos));
-//	DbgLog((LOG_TRACE,1,TEXT("mSeekTimeBase = %d"), mSeekTimeBase));
-//	REFERENCE_TIME locTimeBase = (locAbsFramePos * mFrameDuration) - mSeekTimeBase;
-//	DbgLog((LOG_TRACE,1,TEXT("locTimeBase = %d"), locTimeBase));
-//	//
-//	//
-//
-//	REFERENCE_TIME locFrameStart = locTimeBase + (mFrameCount * mFrameDuration);
-//	//Increment the frame counter
-//	mFrameCount++;
-//	
-//	//Make the end frame counter
-//	//REFERENCE_TIME locFrameEnd = CurrentStartTime() + (mFrameCount * mFrameDuration);
-//	REFERENCE_TIME locFrameEnd = locTimeBase + (mFrameCount * mFrameDuration);
-//
-//	DbgLog((LOG_TRACE,1,TEXT("Frame Runs From %d"), locFrameStart));
-//	DbgLog((LOG_TRACE,1,TEXT("Frame Runs To %d"), locFrameEnd));
-//
-//	IMediaSample* locSample = NULL;
-//	debugLog<<"Sample times = "<<locFrameStart<<" to "<<locFrameEnd<<endl;
-//	DWORD locFlags = 0;//AM_GBF_PREVFRAMESKIPPED | AM_GBF_NOTASYNCPOINT;
-//
-//	FILTER_STATE locFS;
-//	mParentFilter->GetState(0, &locFS);
-//	debugLog<<"State Before = "<<locFS<<endl;
-//	HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, locFlags);
-//	mParentFilter->GetState(0, &locFS);
-//	debugLog<<"State After = "<<locFS<<endl;
-//	if (locHR != S_OK) {
-//		debugLog<<"Get DeliveryBuffer FAILED with "<<locHR<<endl;
-//		debugLog<<"locSample is "<<(unsigned long)locSample<<endl;
-//		//We get here when the application goes into stop mode usually.
-//
-//		switch (locHR) {
-//			case VFW_E_SIZENOTSET:
-//				debugLog<<"SIZE NOT SET"<<endl;
-//				break;
-//			case VFW_E_NOT_COMMITTED:
-//				debugLog<<"NOT COMMITTED"<<endl;
-//				break;
-//			case VFW_E_TIMEOUT:
-//				debugLog<<"TIMEOUT"<<endl;
-//				break;
-//			case VFW_E_STATE_CHANGED:
-//				debugLog<<"STATE CHANGED"<<endl;
-//				return S_OK;
-//			default:
-//				debugLog<<"SOMETHING ELSE !!!"<<endl;
-//				break;
-//		}
-//		return locHR;
-//	}	
-//	
-//	debugLog<<"GetDeliveryBuffer &** SUCCEEDED **"<<endl;
-//
-//	//Debuggin code
-//	AM_MEDIA_TYPE* locMediaType = NULL;
-//	locSample->GetMediaType(&locMediaType);
-//	if (locMediaType == NULL) {
-//		debugLog<<"No dynamic change..."<<endl;
-//	} else {
-//		debugLog<<"Attempting dynamic change..."<<endl;
-//		if (locMediaType->majortype == MEDIATYPE_Video) {
-//			debugLog<<"Still MEDIATYPE_Video"<<endl;
-//		}
-//
-//		if (locMediaType->subtype == MEDIASUBTYPE_YV12) {
-//			debugLog<<"Still MEDIASUBTYPE_YV12"<<endl;
-//		}
-//
-//		if (locMediaType->formattype == FORMAT_VideoInfo) {
-//			debugLog<<"Still FORMAT_VideoInfo"<<endl;
-//			VIDEOINFOHEADER* locVF = (VIDEOINFOHEADER*)locMediaType->pbFormat;
-//			debugLog<<"Size = "<<locVF->bmiHeader.biSizeImage<<endl;
-//			debugLog<<"Dim   = "<<locVF->bmiHeader.biWidth<<" x " <<locVF->bmiHeader.biHeight<<endl;
-//		}
-//
-//		debugLog<<"Major  : "<<DSStringer::GUID2String(&locMediaType->majortype);
-//		debugLog<<"Minor  : "<<DSStringer::GUID2String(&locMediaType->subtype);
-//		debugLog<<"Format : "<<DSStringer::GUID2String(&locMediaType->formattype);
-//		debugLog<<"Form Sz: "<<locMediaType->cbFormat;
-//
-//
-//	}
-//	//
-//
-//	////Create pointers for the samples buffer to be assigned to
-//	BYTE* locBuffer = NULL;
-//	
-//	//
-//	////Make our pointers set to point to the samples buffer
-//	locSample->GetPointer(&locBuffer);
-//	
-//
-//
-//	//Fill the buffer with yuv data...
-//	//	
-//
-//
-//
-//	//Set up the pointers
-//	unsigned char* locDestUptoPtr = locBuffer;
-//	char* locSourceUptoPtr = inYUVBuffer->y;
-//
-//	//
-//	//Y DATA
-//	//
-//
-//	//NEW WAY with offsets Y Data
-//	long locTopPad = inYUVBuffer->y_height - mHeight - mYOffset;
-//	ASSERT(locTopPad >= 0);
-//	if (locTopPad < 0) {
-//		locTopPad = 0;
-//	}
-//
-//	//Skip the top padding
-//	locSourceUptoPtr += (locTopPad * inYUVBuffer->y_stride);
-//
-//	for (long line = 0; line < mHeight; line++) {
-//		memcpy((void*)(locDestUptoPtr), (const void*)(locSourceUptoPtr + mXOffset), mWidth);
-//		locSourceUptoPtr += inYUVBuffer->y_stride;
-//		locDestUptoPtr += mWidth;
-//	}
-//
-//	locSourceUptoPtr += (mYOffset * inYUVBuffer->y_stride);
-//
-//	//Source advances by (y_height * y_stride)
-//	//Dest advances by (mHeight * mWidth)
-//
-//	//
-//	//V DATA
-//	//
-//
-//	//Half the padding for uv planes... is this correct ? 
-//	locTopPad = locTopPad /2;
-//	
-//	locSourceUptoPtr = inYUVBuffer->v;
-//
-//	//Skip the top padding
-//	locSourceUptoPtr += (locTopPad * inYUVBuffer->y_stride);
-//
-//	for (long line = 0; line < mHeight / 2; line++) {
-//		memcpy((void*)(locDestUptoPtr), (const void*)(locSourceUptoPtr + (mXOffset / 2)), mWidth / 2);
-//		locSourceUptoPtr += inYUVBuffer->uv_stride;
-//		locDestUptoPtr += (mWidth / 2);
-//	}
-//	locSourceUptoPtr += ((mYOffset/2) * inYUVBuffer->uv_stride);
-//
-//	//Source advances by (locTopPad + mYOffset/2 + mHeight /2) * uv_stride
-//	//where locTopPad for uv = (inYUVBuffer->y_height - mHeight - mYOffset) / 2
-//	//						=	(inYUVBuffer->yheight/2 - mHeight/2 - mYOffset/2)
-//	// so source advances by (y_height/2) * uv_stride
-//	//Dest advances by (mHeight * mWidth) /4
-//
-//
-//	//
-//	//U DATA
-//	//
-//
-//	locSourceUptoPtr = inYUVBuffer->u;
-//
-//	//Skip the top padding
-//	locSourceUptoPtr += (locTopPad * inYUVBuffer->y_stride);
-//
-//	for (long line = 0; line < mHeight / 2; line++) {
-//		memcpy((void*)(locDestUptoPtr), (const void*)(locSourceUptoPtr + (mXOffset / 2)), mWidth / 2);
-//		locSourceUptoPtr += inYUVBuffer->uv_stride;
-//		locDestUptoPtr += (mWidth / 2);
-//	}
-//	locSourceUptoPtr += ((mYOffset/2) * inYUVBuffer->uv_stride);
-//
-//
-//	////Y Data.
-//	//for ( long line = 0; line < inYUVBuffer->y_height; line++) {
-//	//	memcpy((void*)locBuffer, (const void*)(inYUVBuffer->y + (inYUVBuffer->y_stride * (line))), inYUVBuffer->y_width);
-//	//	locBuffer += inYUVBuffer->y_width;
-//
-//	//	if (mWidth > inYUVBuffer->y_width) {
-//	//		memset((void*)locBuffer, 0, mWidth - inYUVBuffer->y_width);
-//	//	}
-//	//	locBuffer += mWidth - inYUVBuffer->y_width;
-//	//}
-//
-//	////Pad height...
-//	//for ( long line = 0; line < mHeight - inYUVBuffer->y_height; line++) {
-//	//	memset((void*)locBuffer, 0, mWidth);
-//	//	locBuffer += mWidth;
-//	//}
-//
-//	////V Data
-//	//for ( long line = 0; line < inYUVBuffer->uv_height; line++) {
-//	//	memcpy((void*)locBuffer, (const void*)(inYUVBuffer->v + (inYUVBuffer->uv_stride * (line))), inYUVBuffer->uv_width);
-//	//	locBuffer += inYUVBuffer->uv_width;
-//
-//	//	if (mWidth/2 > inYUVBuffer->uv_width) {
-//	//		memset((void*)locBuffer, 0, (mWidth/2) - inYUVBuffer->uv_width);
-//	//	}
-//	//	locBuffer += (mWidth/2) - inYUVBuffer->uv_width;
-//	//}
-//
-//	////Pad height...
-//	//for ( long line = 0; line < (mHeight/2) - inYUVBuffer->uv_height; line++) {
-//	//	memset((void*)locBuffer, 0, mWidth/2);
-//	//	locBuffer += mWidth/2;
-//	//}
-//
-//	////U Data
-//	//for (long line = 0; line < inYUVBuffer->uv_height; line++) {
-//	//	memcpy((void*)locBuffer, (const void*)(inYUVBuffer->u + (inYUVBuffer->uv_stride * (line))), inYUVBuffer->uv_width);
-//	//	locBuffer += inYUVBuffer->uv_width;
-//
-//	//	if (mWidth/2 > inYUVBuffer->uv_width) {
-//	//		memset((void*)locBuffer, 0, (mWidth/2) - inYUVBuffer->uv_width);
-//	//	}
-//	//	locBuffer += (mWidth/2) - inYUVBuffer->uv_width;
-//	//}
-//
-//	////Pad height...
-//	//for ( long line = 0; line < (mHeight/2) - inYUVBuffer->uv_height; line++) {
-//	//	memset((void*)locBuffer, 0, mWidth/2);
-//	//	locBuffer += mWidth/2;
-//	//}
-//
-//
-//
-//
-//
-//	//Set the sample parameters.
-//	SetSampleParams(locSample, mFrameSize, &locFrameStart, &locFrameEnd);
-//
-//	{
-//
-//		//Add a reerence to the sample so it isn't deleted in the queue.
-//		//locSample->AddRef();
-//		HRESULT locHR = mOutputPin->mDataQueue->Receive(locSample);						//->DownstreamFilter()->Receive(locSample);
-//		if (locHR != S_OK) {
-//			debugLog<<"Data Q rejects sample... with "<<locHR<<endl;
-//			return -1;
-//
-//		}
-//	}
-//
-//	
-//	return 0;
-//
-//
-//}
-//
-//
-//
-//long TheoraDecodeInputPin::decodeData(BYTE* inBuf, long inNumBytes, LONGLONG inStart, LONGLONG inEnd) 
-//{
-//	DbgLog((LOG_TRACE,1,TEXT("decodeData")));
-//																	//Not truncated or continued... it's a full packet
-//	StampedOggPacket* locPacket = new StampedOggPacket(inBuf, inNumBytes, false, false, inStart, inEnd, StampedOggPacket::OGG_END_ONLY);
-//	yuv_buffer* locYUV = mTheoraDecoder->decodeTheora(locPacket);
-//	if (locYUV != NULL) {
-//		if (TheoraDecoded(locYUV) != 0) {
-//			return -1;
-//		}
-//	}
-//
-//	return 0;
-//}
-//
-//
-//
-//HRESULT TheoraDecodeInputPin::SetMediaType(const CMediaType* inMediaType) {
-//
-//	if (inMediaType->subtype == MEDIASUBTYPE_Theora) {
-//		((TheoraDecodeFilter*)mParentFilter)->setTheoraFormat((sTheoraFormatBlock*)inMediaType->pbFormat);
-//		mParentFilter->mVideoFormat = AbstractVideoDecodeFilter::THEORA;
-//		//Set some other stuff here too...
-//		mXOffset = ((sTheoraFormatBlock*)inMediaType->pbFormat)->xOffset;
-//		mYOffset = ((sTheoraFormatBlock*)inMediaType->pbFormat)->yOffset;
-//
-//	} else {
-//		//Failed... should never be here !
-//		throw 0;
-//	}
-//	return CBaseInputPin::SetMediaType(inMediaType);
-//}
-//
+LOOG_INT64 TheoraDecodeInputPin::convertGranuleToTime(LOOG_INT64 inGranule)
+{
+	//if (mBegun) {	
+	//	return (inGranule * UNITS) / mSampleRate;
+	//} else {
+	//	return -1;
+	//}
+	TheoraDecodeFilter* locParent = (TheoraDecodeFilter*)m_pFilter;
+
+
+	LOOG_INT64 locMod = ((LOOG_INT64)1)<<locParent->getTheoraFormatBlock()->maxKeyframeInterval; //(unsigned long)pow((double) 2, (double) mGranulePosShift);
+	LOOG_INT64 locInterFrameNo = (LOOG_INT64) ( inGranule % locMod );
+			
+
+	//LOOG_INT64 retTime ((((inGranule >> locParent->getTheoraFormatBlock()->maxKeyframeInterval) + locInterFrameNo) * UNITS) * locParent->getTheoraFormatBlock()->frameRateDenominator) / locParent->getTheoraFormatBlock()->frameRateNumerator;
+
+	LOOG_INT64 retTime = inGranule >> locParent->getTheoraFormatBlock()->maxKeyframeInterval;
+	retTime += locInterFrameNo + 1;
+	retTime *= UNITS;
+	retTime *= locParent->getTheoraFormatBlock()->frameRateDenominator;
+	retTime /= locParent->getTheoraFormatBlock()->frameRateNumerator;
+	return retTime;
+
+}
+
+LOOG_INT64 TheoraDecodeInputPin::mustSeekBefore(LOOG_INT64 inGranule)
+{
+	TheoraDecodeFilter* locParent = (TheoraDecodeFilter*)m_pFilter;
+	LOOG_INT64 locShift = locParent->getTheoraFormatBlock()->maxKeyframeInterval;
+	return (inGranule >> locShift) << locShift;
+}
+IOggDecoder::eAcceptHeaderResult TheoraDecodeInputPin::showHeaderPacket(OggPacket* inCodecHeaderPacket)
+{
+	unsigned char* locPacketData = new unsigned char[inCodecHeaderPacket->packetSize()];
+	memcpy((void*)locPacketData, (const void**)inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize());
+	StampedOggPacket* locStamped = new StampedOggPacket(locPacketData, inCodecHeaderPacket->packetSize(), false, false, 0,0, StampedOggPacket::NONE);
+
+	TheoraDecodeFilter* locParent = (TheoraDecodeFilter*)m_pFilter;
+
+	IOggDecoder::eAcceptHeaderResult retResult = IOggDecoder::AHR_INVALID_HEADER;
+	switch (mSetupState) {
+		case VSS_SEEN_NOTHING:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\200theora", 7) == 0) {
+				//TODO::: Possibly verify version
+				if (locParent->mTheoraDecoder->decodeTheora(locStamped) == NULL) {
+					mSetupState = VSS_SEEN_BOS;
+					retResult = IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				}
+			}
+			//return IOggDecoder::AHR_INVALID_HEADER;
+			break;
+			
+			
+		case VSS_SEEN_BOS:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\201theora", 7) == 0) {
+				if (locParent->mTheoraDecoder->decodeTheora(locStamped) == NULL) {
+					mSetupState = VSS_SEEN_COMMENT;
+					retResult = IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				}
+				
+				
+			}
+			//return IOggDecoder::AHR_INVALID_HEADER;
+			break;
+			
+			
+		case VSS_SEEN_COMMENT:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\202theora", 7) == 0) {
+				if (locParent->mTheoraDecoder->decodeTheora(locStamped) == NULL) {
+		
+					//fish_sound_command (mFishSound, FISH_SOUND_GET_INFO, &(mFishInfo), sizeof (FishSoundInfo)); 
+					//Is mBegun useful ?
+					//mBegun = true;
+			
+					//mNumChannels = mFishInfo.channels;
+					//mFrameSize = mNumChannels * SIZE_16_BITS;
+					//mSampleRate = mFishInfo.samplerate;
+
+		
+					mSetupState = VSS_ALL_HEADERS_SEEN;
+					retResult = IOggDecoder::AHR_ALL_HEADERS_RECEIVED;
+				}
+				
+			}
+			//return IOggDecoder::AHR_INVALID_HEADER;
+			break;
+			
+		case VSS_ALL_HEADERS_SEEN:
+		case VSS_ERROR:
+		default:
+			delete locStamped;
+			retResult = IOggDecoder::AHR_UNEXPECTED;
+	}
+	
+	return retResult;
+}
+string TheoraDecodeInputPin::getCodecShortName()
+{
+	return "theora";
+}
+string TheoraDecodeInputPin::getCodecIdentString()
+{
+	//TODO:::
+	return "theora";
+}
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeInputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -30,14 +30,19 @@
 //===========================================================================
 
 #pragma once
+#include "IOggDecoder.h"
+#include "IOggOutputPin.h"
 #include "Theoradecoderdllstuff.h"
 #include "BasicSeekPassThrough.h"
 
+#include "TheoraDecodeFilter.h"
+
 #include <fstream>
 using namespace std;
 class TheoraDecodeInputPin 
 	:	public CTransformInputPin
 	,	public BasicSeekPassThrough
+	,	public IOggDecoder
 {
 public:
 
@@ -52,54 +57,35 @@
 	virtual HRESULT BreakConnect();
 	virtual HRESULT CompleteConnect (IPin *inReceivePin);
 
+	//XTODO::: Add a new segment override to get an integer rate change
+	//XTODO::: Possibly add an endflush override to clear buffered data
+	virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
+	//XTODO::: Implement getallocator requirements to tell demux what buffers to use
+
+	//IOggDecoder Interface
+	virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
+	virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
+	virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
+	virtual string getCodecShortName();
+	virtual string getCodecIdentString();
 	//fstream debugLog;
+
+	virtual IOggOutputPin* getOutputPinInterface()		{		return mOggOutputPinInterface;	}
+	virtual bool getSentStreamOffset()					{		return mSentStreamOffset;		}
+	virtual void setSentStreamOffset(bool inSentStreamOffset)	{	mSentStreamOffset = inSentStreamOffset;	}
+protected:
+	static const unsigned long THEORA_NUM_BUFFERS = 50;
+	enum eTheoraSetupState {
+		VSS_SEEN_NOTHING,
+		VSS_SEEN_BOS,
+		VSS_SEEN_COMMENT,
+		VSS_ALL_HEADERS_SEEN,
+		VSS_ERROR
+	};
+
+	eTheoraSetupState mSetupState;
+
+
+	IOggOutputPin* mOggOutputPinInterface;
+	bool mSentStreamOffset;
 };
-//----------------------
-//OLD IMPLEMENTATION
-//----------------------
-//
-//#include "Theoradecoderdllstuff.h"
-////#include "AbstractVideoDecodeInputPin.h"
-////#include "TheoraDecodeInputPin.h"
-//
-////#include "TheoraDecodeFilter.h"
-//#include "DSStringer.h"
-//#include "TheoraDecoder.h"
-//#include <math.h>
-//#include <fstream>
-//using namespace std;
-//
-//
-//class TheoraDecodeOutputPin;
-//
-//class TheoraDecodeInputPin 
-//	:	public AbstractVideoDecodeInputPin
-//{
-//public:
-//	TheoraDecodeInputPin(AbstractVideoDecodeFilter* inFilter, CCritSec* inFilterLock, AbstractVideoDecodeOutputPin* inOutputPin, CMediaType* inAcceptMediaType);
-//	virtual ~TheoraDecodeInputPin(void);
-//	int TheoraDecoded (yuv_buffer* inYUVBuffer);
-//
-//		DECLARE_IUNKNOWN
-//	STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
-//
-//	HRESULT SetMediaType(const CMediaType* inMediaType);
-//
-//	//VIRTUAL FUNCTIONS - AbstractAudioDecodeInputPin
-//	//FIX:::These should be protected.
-//	virtual bool ConstructCodec();
-//	virtual void DestroyCodec();
-//
-//	long decodeData(BYTE* inBuf, long inNumBytes, LONGLONG inStart, LONGLONG inEnd) ;
-//
-//protected:
-//	fstream debugLog;
-//	//FishSound* mFishSound;
-//	//FishSoundInfo mFishInfo; 
-//	TheoraDecoder* mTheoraDecoder;
-//	unsigned long mXOffset;
-//	unsigned long mYOffset;
-//	
-//
-//
-//};

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -82,176 +82,3 @@
 STDMETHODIMP TheoraDecodeOutputPin::Notify(IBaseFilter* inMessageSource, Quality inQuality) {
 	return E_NOTIMPL;
 }
-//----------------------
-//OLD IMPLEMENTATION
-//----------------------
-//TheoraDecodeOutputPin::TheoraDecodeOutputPin(TheoraDecodeFilter* inParentFilter, CCritSec* inFilterLock)
-//	: AbstractVideoDecodeOutputPin(inParentFilter, inFilterLock,NAME("TheoraDecodeOutputPin"), L"YV12 Out")
-//{
-//
-//		
-//}
-//TheoraDecodeOutputPin::~TheoraDecodeOutputPin(void)
-//{
-//	
-//	
-//}
-//STDMETHODIMP TheoraDecodeOutputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
-//{
-//	if (riid == IID_IMediaSeeking) {
-//		*ppv = (IMediaSeeking*)this;
-//		((IUnknown*)*ppv)->AddRef();
-//		return NOERROR;
-//	//} else if (riid == IID_IStreamBuilder) {
-//	//	*ppv = (IStreamBuilder*)this;
-//	//	((IUnknown*)*ppv)->AddRef();
-//	//	return NOERROR;
-//	}
-//
-//	return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv); 
-//}
-//
-//
-//STDMETHODIMP TheoraDecodeOutputPin::Notify(IBaseFilter *pSelf, Quality q) {
-//	return S_OK;
-//
-//}
-//
-//bool TheoraDecodeOutputPin::FillVideoInfoHeader(VIDEOINFOHEADER* inFormatBuffer) {
-//	TheoraDecodeFilter* locFilter = ((TheoraDecodeFilter*)m_pFilter);
-//
-//	inFormatBuffer->AvgTimePerFrame = (UNITS * locFilter->mTheoraFormatInfo->frameRateDenominator) / locFilter->mTheoraFormatInfo->frameRateNumerator;
-//	inFormatBuffer->dwBitRate = locFilter->mTheoraFormatInfo->targetBitrate;
-//	
-//	inFormatBuffer->bmiHeader.biBitCount = 12;   //12 bits per pixel
-//	inFormatBuffer->bmiHeader.biClrImportant = 0;   //All colours important
-//	inFormatBuffer->bmiHeader.biClrUsed = 0;        //Use max colour depth
-//	inFormatBuffer->bmiHeader.biCompression = MAKEFOURCC('Y','V','1','2');
-//	inFormatBuffer->bmiHeader.biHeight = locFilter->mTheoraFormatInfo->frameHeight;   //Not sure
-//	inFormatBuffer->bmiHeader.biPlanes = 1;    //Must be 1
-//	inFormatBuffer->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);    //????? Size of what ?
-//	inFormatBuffer->bmiHeader.biSizeImage = ((locFilter->mTheoraFormatInfo->frameHeight * locFilter->mTheoraFormatInfo->frameWidth) * 3)/2;    //Size in bytes of image ??
-//	inFormatBuffer->bmiHeader.biWidth = locFilter->mTheoraFormatInfo->frameWidth;
-//	inFormatBuffer->bmiHeader.biXPelsPerMeter = 2000;   //Fuck knows
-//	inFormatBuffer->bmiHeader.biYPelsPerMeter = 2000;   //" " " " " 
-//	
-//	inFormatBuffer->rcSource.top = 0;
-//	inFormatBuffer->rcSource.bottom = locFilter->mTheoraFormatInfo->frameHeight;
-//	inFormatBuffer->rcSource.left = 0;
-//	inFormatBuffer->rcSource.right = locFilter->mTheoraFormatInfo->frameWidth;
-//
-//	inFormatBuffer->rcTarget.top = 0;
-//	inFormatBuffer->rcTarget.bottom = locFilter->mTheoraFormatInfo->frameHeight;
-//	inFormatBuffer->rcTarget.left = 0;
-//	inFormatBuffer->rcTarget.right = locFilter->mTheoraFormatInfo->frameWidth;
-//
-//	inFormatBuffer->dwBitErrorRate=0;
-//	return true;
-//}
-//
-////STDMETHODIMP TheoraDecodeOutputPin::Render(IPin* inOutputPin, IGraphBuilder* inGraphBuilder) {
-////	if (inOutputPin == NULL || inGraphBuilder == NULL) {
-////		return E_POINTER;
-////	}
-////
-////	
-////    IBaseFilter* locRenderer = NULL;
-////
-////    // Create the VMR9
-////	//FIX::: Probably should check if it's already in the graph.
-////	//  Also should let it connect to other VMR's
-////
-////
-////    HRESULT locHR = S_OK;
-////	locHR = inGraphBuilder->FindFilterByName(L"Video Mixing Renderer", &locRenderer);
-////	/*IEnumFilters* locEnumFilters = NULL;
-////	locHR = S_OK;
-////	locHR = inGraphBuilder->EnumFilters(&locEnumFilters);
-////	IBaseFilter* locFilter = NULL;
-////	CLSID locCLSID;
-////	while (locHR ==S_OK) {
-////	locHR = locEnumFilters->Next(1, &locFilter, 0);
-////			locFilter->GetClassID(&locCLSID);
-////			if (locCLSID == CLSID_VideoMixingRenderer9) {
-////				locHR=locHR;
-////			}
-////	}*/
-////
-////	if (locRenderer == NULL) {
-////		locHR= CoCreateInstance(CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&locRenderer);
-////		if (locHR != S_OK) {
-////	        return locHR;
-////	    }
-////    
-////	    //Add the VMR9 to the graph
-////	    locHR = inGraphBuilder->AddFilter(locRenderer, L"Video Mixing Renderer");
-////	    if (locHR != S_OK) {
-////			locRenderer->Release();
-////			return locHR;
-////		}
-////		IVMRFilterConfig9* locVMRConfig = NULL;
-////		locHR = locRenderer->QueryInterface(IID_IVMRFilterConfig9, (void**)&locVMRConfig);
-////		if(locHR == S_OK) {
-////			//locHR = locVMRConfig->SetRenderingMode(VMR9Mode_Renderless);
-////		}
-////	}
-////
-////	IEnumPins* locEnumPins;
-////	IPin* locRendererInputPin = NULL;
-////	locHR = locRenderer->EnumPins(&locEnumPins);
-////
-////	if (SUCCEEDED(locHR)) {
-////		if (S_OK != locEnumPins->Next(1, &locRendererInputPin, 0)) {
-////			locHR = E_UNEXPECTED;
-////		}
-////	}
-////
-////	if (SUCCEEDED(locHR)) {
-////		// CConnect VMR9 to the output of the theora decoder
-////		CMediaType* locMediaType = new CMediaType;
-////		
-////		FillMediaType(locMediaType);
-////		//Fixes the null format block error
-////		VIDEOINFOHEADER* locVideoFormat = (VIDEOINFOHEADER*)locMediaType->AllocFormatBuffer(sizeof(VIDEOINFOHEADER));
-////		FillVideoInfoHeader(locVideoFormat);
-////		locHR = inGraphBuilder->ConnectDirect(inOutputPin, locRendererInputPin, locMediaType);
-////		locRendererInputPin->Release();
-////	}
-////	if (FAILED(locHR)) 
-////	{
-////		// Could not connect to the VMR9 renderer. Remove it from the graph.
-////		inGraphBuilder->RemoveFilter(locRenderer);
-////	}
-////	locRenderer->Release();
-////	
-////    return locHR;
-////
-////
-////}
-////STDMETHODIMP TheoraDecodeOutputPin::Backout(IPin* inOutputPin, IGraphBuilder* inGraphBuilder) {
-////   //HRESULT locHR = S_OK;
-////   // if (m_Connected != NULL) // Pointer to the pin we're connected to.
-////   // {
-////   //     // Find the filter that owns the pin connected to us.
-////   //     FILTER_INFO fi;
-////   //     hr = m_Connected->QueryFilterInfo(&fi);
-////   //     if (SUCCEEDED(hr)) 
-////   //     {
-////   //         if (fi.pFilter != NULL) 
-////   //         {
-////   //             //  Disconnect the pins.
-////   //             pGraph->Disconnect(m_Connected);
-////   //             pGraph->Disconnect(pPin);
-////   //             // Remove the filter from the graph.
-////   //             pGraph->RemoveFilter(fi.pFilter);
-////   //             fi.pFilter->Release();
-////   //         } 
-////   //         else 
-////   //         {
-////   //             hr = E_UNEXPECTED;
-////   //         }
-////   //     }
-////   // }
-////   // return hr;
-////	return S_OK;
-////}
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/TheoraDecodeOutputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -55,46 +55,7 @@
 	//Quality control
 	virtual STDMETHODIMP Notify(IBaseFilter* inMessageSource, Quality inQuality);
 
+	//virtual HRESULT Deliver(IMediaSample* inSample)	{	return m_pInputPin->Receive(inSample);	}
+
 	//fstream debugLog;
 };
-//----------------------
-//OLD IMPLEMENTATION
-//----------------------
-//#include <d3d9.h>
-//#include <vmr9.h>
-//#include "Theoradecoderdllstuff.h"
-//#include "AbstractVideoDecodeOutputPin.h"
-//
-//
-//class TheoraDecodeFilter;
-//class TheoraDecodeOutputPin 
-//	:	public AbstractVideoDecodeOutputPin
-//	//,	public IStreamBuilder
-//{
-//public:
-//	friend class TheoraDecodeInputPin;
-//
-//		DECLARE_IUNKNOWN
-//	STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
-//	TheoraDecodeOutputPin(TheoraDecodeFilter* inParentFilter,CCritSec* inFilterLock);
-//	virtual ~TheoraDecodeOutputPin(void);
-//
-//	STDMETHODIMP Notify(IBaseFilter *pSelf, Quality q);
-//
-//	//Implements IStreamBuilder to force the pin to connect to VMR9
-//	//STDMETHODIMP Render(IPin* inOutputPin, IGraphBuilder* inGraphBuilder);
-//	//STDMETHODIMP Backout(IPin* inOutputPin, IGraphBuilder* inGraphBuilder);
-//
-//
-//
-//
-//	
-//
-//
-//	//virtual bool FillWaveFormatExBuffer(WAVEFORMATEX* inFormatBuffer);
-//	virtual bool FillVideoInfoHeader(VIDEOINFOHEADER* inFormatBuffer);
-//	
-//
-//};
-//
-//

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/dsfTheoraDecoder.vcproj
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/dsfTheoraDecoder.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/dsfTheoraDecoder.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DSFTHEORADECODER_EXPORTS"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -80,7 +80,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFTHEORADECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -143,7 +143,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFTHEORADECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -207,7 +207,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+				AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFTHEORADECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"

Modified: trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/theoradecoderdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/theoradecoderdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/filters/dsfTheoraDecoder/theoradecoderdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -52,22 +52,39 @@
 DEFINE_GUID(CLSID_TheoraDecodeFilter, 
 0x5187161, 0x5c36, 0x4324, 0xa7, 0x34, 0x22, 0xbf, 0x37, 0x50, 0x9f, 0x2d);
 
-// {D124B2B1-8968-4ae8-B288-FE16EA34B0CE}
-DEFINE_GUID(MEDIASUBTYPE_Theora, 
-0xd124b2b1, 0x8968, 0x4ae8, 0xb2, 0x88, 0xfe, 0x16, 0xea, 0x34, 0xb0, 0xce);
+//// {D124B2B1-8968-4ae8-B288-FE16EA34B0CE}
+//DEFINE_GUID(MEDIASUBTYPE_Theora, 
+//0xd124b2b1, 0x8968, 0x4ae8, 0xb2, 0x88, 0xfe, 0x16, 0xea, 0x34, 0xb0, 0xce);
+//
+//// {A99F116C-DFFA-412c-95DE-725F99874826}
+//DEFINE_GUID(FORMAT_Theora, 
+//0xa99f116c, 0xdffa, 0x412c, 0x95, 0xde, 0x72, 0x5f, 0x99, 0x87, 0x48, 0x26);
 
-// {A99F116C-DFFA-412c-95DE-725F99874826}
-DEFINE_GUID(FORMAT_Theora, 
-0xa99f116c, 0xdffa, 0x412c, 0x95, 0xde, 0x72, 0x5f, 0x99, 0x87, 0x48, 0x26);
 
+// {60891713-C24F-4767-B6C9-6CA05B3338FC}
+DEFINE_GUID(MEDIATYPE_OggPacketStream, 
+0x60891713, 0xc24f, 0x4767, 0xb6, 0xc9, 0x6c, 0xa0, 0x5b, 0x33, 0x38, 0xfc);
+
+// {95388704-162C-42a9-8149-C3577C12AAF9}
+DEFINE_GUID(FORMAT_OggIdentHeader, 
+0x95388704, 0x162c, 0x42a9, 0x81, 0x49, 0xc3, 0x57, 0x7c, 0x12, 0xaa, 0xf9);
+
+// {43F0F818-10B0-4c86-B9F1-F6B6E2D33462}
+DEFINE_GUID(IID_IOggDecoder, 
+0x43f0f818, 0x10b0, 0x4c86, 0xb9, 0xf1, 0xf6, 0xb6, 0xe2, 0xd3, 0x34, 0x62);
+
+// {83D7F506-53ED-4f15-B6D8-7D8E9E72A918}
+DEFINE_GUID(IID_IOggOutputPin, 
+0x83d7f506, 0x53ed, 0x4f15, 0xb6, 0xd8, 0x7d, 0x8e, 0x9e, 0x72, 0xa9, 0x18);
+
 const REGPINTYPES TheoraDecodeOutputTypes = {
     &MEDIATYPE_Video,
 	&MEDIASUBTYPE_YV12
 };
 
 const REGPINTYPES TheoraDecodeInputTypes = {
-	&MEDIATYPE_Video,
-	&MEDIASUBTYPE_Theora
+	&MEDIATYPE_OggPacketStream,
+	&MEDIASUBTYPE_None
 };
 const REGFILTERPINS TheoraDecodePinReg[] = {
 	{

Modified: trunk/oggdsf/src/lib/codecs/theora/libs/libOOTheora/TheoraDecoder.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/theora/libs/libOOTheora/TheoraDecoder.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/theora/libs/libOOTheora/TheoraDecoder.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -64,15 +64,21 @@
 			theora_decode_init(&mTheoraState, &mTheoraInfo);
 			mFirstPacket = false;
 		}
-			ogg_packet* locOldPack = simulateOldOggPacket(inPacket);		//Accepts the packet and deletes it.
-			theora_decode_packetin(&mTheoraState, locOldPack);
-			delete locOldPack->packet;
-			delete locOldPack;
-			
-			//Ignore return value... always returns 0 (or crashes :)
-			theora_decode_YUVout(&mTheoraState, &mYUVBuffer);
-			
-			return &mYUVBuffer;
+		if ((inPacket->packetSize() > 0) && ((inPacket->packetData()[0] & 128) != 0)) {
+			//Ignore header packets
+			delete inPacket;
+			return NULL;
+		}
+
+		ogg_packet* locOldPack = simulateOldOggPacket(inPacket);		//Accepts the packet and deletes it.
+		theora_decode_packetin(&mTheoraState, locOldPack);
+		delete locOldPack->packet;
+		delete locOldPack;
+		
+		//Ignore return value... always returns 0 (or crashes :)
+		theora_decode_YUVout(&mTheoraState, &mYUVBuffer);
+		
+		return &mYUVBuffer;
 	}
 
 }

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -84,10 +84,10 @@
 
 	//Setup the media Types for the input pin.
 	locAcceptMediaType = NULL;
-	locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);			//Deleted by pin
+	locAcceptMediaType = new CMediaType(&MEDIATYPE_OggPacketStream);			//Deleted by pin
 
-	locAcceptMediaType->subtype = MEDIASUBTYPE_Vorbis;
-	locAcceptMediaType->formattype = FORMAT_Vorbis;
+	locAcceptMediaType->subtype = MEDIASUBTYPE_None;
+	locAcceptMediaType->formattype = FORMAT_OggIdentHeader;
 
 	locAcceptableTypes.push_back(locAcceptMediaType);
 	
@@ -118,88 +118,17 @@
 {
 	return mVorbisFormatInfo;
 }
-void VorbisDecodeFilter::setVorbisFormat(sVorbisFormatBlock* inFormatBlock) 
+void VorbisDecodeFilter::setVorbisFormat(BYTE* inFormatBlock) 
 {
 	delete mVorbisFormatInfo;
 	mVorbisFormatInfo = new sVorbisFormatBlock;				//Deleted in destructor.
-	*mVorbisFormatInfo = *inFormatBlock;
-}
+	//*mVorbisFormatInfo = *inFormatBlock;
 
-//Old imp
-//******************************************************************
-//#include "stdafx.h"
-//#include "vorbisdecodefilter.h"
-//
-////Include Files
-//#include "stdafx.h"
-//#include "VorbisDecodeFilter.h"
-//
-////COM Factory Template
-//CFactoryTemplate g_Templates[] = 
-//{
-//    { 
-//		L"Vorbis Decode Filter",						// Name
-//	    &CLSID_VorbisDecodeFilter,            // CLSID
-//	    VorbisDecodeFilter::CreateInstance,	// Method to create an instance of MyComponent
-//        NULL,									// Initialization function
-//        NULL									// Set-up information (for filters)
-//    }
-//
-//};
-//
-//// Generic way of determining the number of items in the template
-//int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); 
-//
-//
-//
-////*************************************************************************************************
-//VorbisDecodeFilter::VorbisDecodeFilter()
-//	:	AbstractAudioDecodeFilter(NAME("Vorbis Decoder"), CLSID_VorbisDecodeFilter, VORBIS)
-//	,	mVorbisFormatInfo(NULL)
-//{
-//
-//	bool locWasConstructed = ConstructPins();
-//}
-//
-//bool VorbisDecodeFilter::ConstructPins() 
-//{
-//	DbgLog((LOG_TRACE,1,TEXT("Vorbis Constructor...")));
-//	//Output pin must be done first because it's passed to the input pin.
-//	mOutputPin = new VorbisDecodeOutputPin(this, m_pLock);			//Deleted in base class destructor
-//
-//	CMediaType* locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);		//Deleted in pin destructor
-//	locAcceptMediaType->subtype = MEDIASUBTYPE_Vorbis;
-//	locAcceptMediaType->formattype = FORMAT_Vorbis;
-//	mInputPin = new VorbisDecodeInputPin(this, m_pLock, mOutputPin, locAcceptMediaType);	//Deleted in base class filter destructor.
-//	return true;
-//}
-//
-//VorbisDecodeFilter::~VorbisDecodeFilter(void)
-//{
-//	DbgLog((LOG_TRACE,1,TEXT("Vorbis Destructor...")));
-//	//DestroyPins();
-//	delete mVorbisFormatInfo;
-//}
-//
-//CUnknown* WINAPI VorbisDecodeFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
-//{
-//
-//	VorbisDecodeFilter *pNewObject = new VorbisDecodeFilter();
-//    if (pNewObject == NULL) {
-//        *pHr = E_OUTOFMEMORY;
-//    }
-//	return pNewObject;
-//} 
-//
-////QUERY::: Do we need these ? Aren't we all friedns here ??
-////RESULT::: Keep them, set function must be kept... get could go... but keep for consistency
-//sVorbisFormatBlock* VorbisDecodeFilter::getVorbisFormatBlock() 
-//{
-//	return mVorbisFormatInfo;
-//}
-//void VorbisDecodeFilter::setVorbisFormat(sVorbisFormatBlock* inFormatBlock) 
-//{
-//	delete mVorbisFormatInfo;
-//	mVorbisFormatInfo = new sVorbisFormatBlock;				//Deleted in destructor.
-//	*mVorbisFormatInfo = *inFormatBlock;
-//}
\ No newline at end of file
+	mVorbisFormatInfo->vorbisVersion = iLE_Math::charArrToULong(inFormatBlock + 7);
+	mVorbisFormatInfo->numChannels = inFormatBlock[11];
+	mVorbisFormatInfo->samplesPerSec = iLE_Math::charArrToULong(inFormatBlock + 12);
+	mVorbisFormatInfo->maxBitsPerSec = iLE_Math::charArrToULong(inFormatBlock + 16);
+	mVorbisFormatInfo->avgBitsPerSec = iLE_Math::charArrToULong(inFormatBlock + 20);
+	mVorbisFormatInfo->minBitsPerSec = iLE_Math::charArrToULong(inFormatBlock + 24);
+
+}

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeFilter.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -59,7 +59,7 @@
 
 	//FIX::: Do we need these ? Aren't they all friends ??
 	virtual sVorbisFormatBlock* getVorbisFormatBlock();
-	virtual void setVorbisFormat(sVorbisFormatBlock* inFormatBlock);
+	virtual void setVorbisFormat(BYTE* inFormatBlock);
 
 protected:
 	//VIRTUAL FUNCTIONS - AbstractTransformFilter
@@ -68,49 +68,3 @@
 	//Format Block
 	sVorbisFormatBlock* mVorbisFormatInfo;
 };
-
-
-
-
-//Old implementation
-//**********************************************
-//#pragma once
-////Include Files
-//#include "vorbisdecoderdllstuff.h"
-//#include "AbstractAudioDecodeFilter.h"
-//
-////Forward Declarations
-//struct sVorbisFormatBlock;
-//class VorbisDecodeInputPin;
-//class VorbisDecodeOutputPin;
-//
-////Class Interface
-//class VorbisDecodeFilter
-//	//Base Classes
-//	:	public AbstractAudioDecodeFilter
-//{
-//public:
-//	//Friends
-//	friend class VorbisDecodeInputPin;
-//	friend class VorbisDecodeOutputPin;
-//
-//	//Constructors and Destructors
-//	VorbisDecodeFilter(void);
-//	virtual ~VorbisDecodeFilter(void);
-//
-//	//COM Creator Function
-//	static CUnknown* WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr);
-//
-//
-//
-//	//VIRTUAL FUNCTIONS - AbstractAudioDecodeFilter
-//	virtual bool ConstructPins();
-//
-//	//FIX::: Do we need these ? Aren't they all friends ??
-//	virtual sVorbisFormatBlock* getVorbisFormatBlock();
-//	virtual void setVorbisFormat(sVorbisFormatBlock* inFormatBlock);
-//
-//protected:
-//	//Format Block
-//	sVorbisFormatBlock* mVorbisFormatInfo;
-//};

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -53,16 +53,26 @@
 	,	mFrameSize(0)
 	,	mSampleRate(0)
 	,	mUptoFrame(0)
+	,	mSetupState(VSS_SEEN_NOTHING)
+	,	mDecodedBuffer(NULL)
+	,	mDecodedByteCount(0)
+	,	mRateNumerator(RATE_DENOMINATOR)
+	,	mOggOutputPinInterface(NULL)
+	,	mSentStreamOffset(false)
 		
 {
 	//debugLog.open("g:\\logs\\vorbislog.log", ios_base::out);
 	ConstructCodec();
+
+	mDecodedBuffer = new unsigned char[DECODED_BUFFER_SIZE];
 }
 
 VorbisDecodeInputPin::~VorbisDecodeInputPin(void)
 {
 	//debugLog.close();
 	DestroyCodec();
+	delete[] mDecodedBuffer;
+
 }
 //Is this needed ??
 STDMETHODIMP VorbisDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
@@ -71,6 +81,11 @@
 		*ppv = (IMediaSeeking*)this;
 		((IUnknown*)*ppv)->AddRef();
 		return NOERROR;
+	} else if (riid == IID_IOggDecoder) {
+		*ppv = (IOggDecoder*)this;
+		//((IUnknown*)*ppv)->AddRef();
+		return NOERROR;
+
 	}
 
 	return AbstractTransformInputPin::NonDelegatingQueryInterface(riid, ppv); 
@@ -99,10 +114,23 @@
 	CAutoLock locLock(mStreamLock);
 	//debugLog<<"New segment "<<inStartTime<<" - "<<inStopTime<<endl;
 	mUptoFrame = 0;
+	mRateNumerator = RATE_DENOMINATOR * inRate;
+	if (mRateNumerator > RATE_DENOMINATOR) {
+		mRateNumerator = RATE_DENOMINATOR;
+	}
 	return AbstractTransformInputPin::NewSegment(inStartTime, inStopTime, inRate);
 	
 }
 
+STDMETHODIMP VorbisDecodeInputPin::EndFlush()
+{
+	CAutoLock locLock(m_pLock);
+	
+	HRESULT locHR = AbstractTransformInputPin::EndFlush();
+	mDecodedByteCount = 0;
+	return locHR;
+}
+
 int __cdecl VorbisDecodeInputPin::VorbisDecoded (FishSound* inFishSound, float** inPCM, long inFrames, void* inThisPointer) 
 {
 	
@@ -110,55 +138,23 @@
 	VorbisDecodeFilter* locFilter = reinterpret_cast<VorbisDecodeFilter*>(locThis->m_pFilter);
 
 	if (locThis->CheckStreaming() == S_OK) {
-		if (! locThis->mBegun) {
-			//locThis->debugLog<<"First Time"<<endl;
-			//Set up fishsound		
-			fish_sound_command (locThis->mFishSound, FISH_SOUND_GET_INFO, &(locThis->mFishInfo), sizeof (FishSoundInfo)); 
-			locThis->mBegun = true;
-			
-			locThis->mNumChannels = locThis->mFishInfo.channels;
-			locThis->mFrameSize = locThis->mNumChannels * SIZE_16_BITS;
-			locThis->mSampleRate = locThis->mFishInfo.samplerate;
 
-		}
-
-
 		unsigned long locActualSize = inFrames * locThis->mFrameSize;
 		unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
+		unsigned long locBufferRemaining = DECODED_BUFFER_SIZE - locThis->mDecodedByteCount;
 		
-		//locThis->debugLog<<"m_tStart = "<<locThis->m_tStart<<endl;
-		//locThis->debugLog<<"mUptoFrame = "<<locThis->mUptoFrame<<endl;
-		//Make the start presentation time
-		REFERENCE_TIME locFrameStart = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
 
-		//Increment the frame counter
-		locThis->mUptoFrame += inFrames;
 
-		//Make the end presentation time
-		REFERENCE_TIME locFrameEnd = (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-
-		//locThis->debugLog<<"Sample time = "<<locFrameStart<<" - "<<locFrameEnd<<endl;
-		IMediaSample* locSample;
-		HRESULT locHR = locThis->mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, NULL);
-
-		if (locHR != S_OK) {
-			return -1;
-		}	
+		//Create a pointer into the buffer		
+		signed short* locShortBuffer = (signed short*)&locThis->mDecodedBuffer[locThis->mDecodedByteCount];
 		
-
-		//Create pointers for the samples buffer to be assigned to
-		BYTE* locBuffer = NULL;
-		signed short* locShortBuffer = NULL;
 		
-		locSample->GetPointer(&locBuffer);
-		locShortBuffer = (short *) locBuffer;
-		
 		signed short tempInt = 0;
 		float tempFloat = 0;
 		
 		//FIX:::Move the clipping to the abstract function
 
-		if (locSample->GetSize() >= locActualSize) {
+		if (locBufferRemaining >= locActualSize) {
 			//Do float to int conversion with clipping
 			const float SINT_MAX_AS_FLOAT = 32767.0f;
 			for (unsigned long i = 0; i < locTotalFrameCount; i++) {
@@ -178,22 +174,8 @@
 				*locShortBuffer = tempInt;
 				locShortBuffer++;
 			}
-			
-			//Set the sample parameters.
-			locThis->SetSampleParams(locSample, locActualSize, &locFrameStart, &locFrameEnd);
 
-			{
-		
-				CAutoLock locLock(locThis->m_pLock);
-
-				//TODO::: Explain why we don't addref or release.
-				HRESULT locHR = ((VorbisDecodeOutputPin*)(locThis->mOutputPin))->mDataQueue->Receive(locSample);
-				if (locHR != S_OK) {
-					DbgLog((LOG_TRACE,1,TEXT("Queue rejected us...")));
-					return -1;
-				}
-			}
-
+			locThis->mDecodedByteCount += locActualSize;
 			
 			return 0;
 		} else {
@@ -206,8 +188,122 @@
 
 }
 
+STDMETHODIMP VorbisDecodeInputPin::Receive(IMediaSample* inSample) 
+{
+	CAutoLock locLock(mStreamLock);
 
+	HRESULT locHR = CheckStreaming();
 
+	if (locHR == S_OK) {
+
+
+		BYTE* locBuff = NULL;
+		locHR = inSample->GetPointer(&locBuff);
+
+		if (locHR != S_OK) {
+			//TODO::: Do a debug dump or something here with specific error info.
+			return locHR;
+		} else {
+			REFERENCE_TIME locStart = -1;
+			REFERENCE_TIME locEnd = -1;
+			__int64 locSampleDuration = 0;
+			inSample->GetTime(&locStart, &locEnd);
+
+			HRESULT locResult = TransformData(locBuff, inSample->GetActualDataLength());
+			if (locResult != S_OK) {
+				return S_FALSE;
+			}
+			if (locEnd > 0) {
+				//Can dump it all downstream now	
+				IMediaSample* locSample;
+				unsigned long locBytesCopied = 0;
+				unsigned long locBytesToCopy = 0;
+
+				locStart = convertGranuleToTime(locEnd) - (((mDecodedByteCount / mFrameSize) * UNITS) / mSampleRate);
+
+				REFERENCE_TIME locGlobalOffset = 0;
+				//Handle stream offsetting
+				if (!mSentStreamOffset && (mOggOutputPinInterface != NULL)) {
+					mOggOutputPinInterface->notifyStreamBaseTime(locStart);
+					mSentStreamOffset = true;
+					
+				}
+
+				if (mOggOutputPinInterface != NULL) {
+					locGlobalOffset = mOggOutputPinInterface->getGlobalBaseTime();
+				}
+
+				do {
+					HRESULT locHR = mOutputPin->GetDeliveryBuffer(&locSample, NULL, NULL, NULL);
+					if (locHR != S_OK) {
+						return locHR;
+					}
+
+					BYTE* locBuffer = NULL;
+					locHR = locSample->GetPointer(&locBuffer);
+				
+					if (locHR != S_OK) {
+						return locHR;
+					}
+
+					locBytesToCopy = ((mDecodedByteCount - locBytesCopied) <= locSample->GetSize()) ? (mDecodedByteCount - locBytesCopied) : locSample->GetSize();
+					//locBytesCopied += locBytesToCopy;
+
+					locSampleDuration = (((locBytesToCopy/mFrameSize) * UNITS) / mSampleRate);
+					locEnd = locStart + locSampleDuration;
+
+					//Adjust the time stamps for rate and seeking
+					REFERENCE_TIME locAdjustedStart = (locStart * RATE_DENOMINATOR) / mRateNumerator;
+					REFERENCE_TIME locAdjustedEnd = (locEnd * RATE_DENOMINATOR) / mRateNumerator;
+					locAdjustedStart -= (m_tStart + locGlobalOffset);
+					locAdjustedEnd -= (m_tStart + locGlobalOffset);
+
+					__int64 locSeekStripOffset = 0;
+					if (locAdjustedEnd < 0) {
+						locSample->Release();
+					} else {
+						if (locAdjustedStart < 0) {
+							locSeekStripOffset = (-locAdjustedStart) * mSampleRate;
+							locSeekStripOffset *= mFrameSize;
+							locSeekStripOffset /= UNITS;
+							locSeekStripOffset += (mFrameSize - (locSeekStripOffset % mFrameSize));
+							__int64 locStrippedDuration = (((locSeekStripOffset/mFrameSize) * UNITS) / mSampleRate);
+							locAdjustedStart += locStrippedDuration;
+						}
+							
+
+					
+
+						memcpy((void*)locBuffer, (const void*)&mDecodedBuffer[locBytesCopied + locSeekStripOffset], locBytesToCopy - locSeekStripOffset);
+
+						locSample->SetTime(&locAdjustedStart, &locAdjustedEnd);
+						locSample->SetMediaTime(&locStart, &locEnd);
+						locSample->SetSyncPoint(TRUE);
+						locSample->SetActualDataLength(locBytesToCopy - locSeekStripOffset);
+						locHR = ((VorbisDecodeOutputPin*)(mOutputPin))->mDataQueue->Receive(locSample);
+						if (locHR != S_OK) {
+							return locHR;
+						}
+						locStart += locSampleDuration;
+
+					}
+					locBytesCopied += locBytesToCopy;
+
+				
+				} while(locBytesCopied < mDecodedByteCount);
+
+				mDecodedByteCount = 0;
+				
+			}
+			return S_OK;
+
+		}
+	} else {
+		//Not streaming - Bail out.
+		return S_FALSE;
+	}
+}
+
 HRESULT VorbisDecodeInputPin::TransformData(BYTE* inBuf, long inNumBytes) 
 {
 	//TODO::: Return types !!!
@@ -228,240 +324,129 @@
 }
 
 
-HRESULT VorbisDecodeInputPin::SetMediaType(const CMediaType* inMediaType) {
+HRESULT VorbisDecodeInputPin::SetMediaType(const CMediaType* inMediaType) 
+{
 	//FIX:::Error checking
-	//RESOLVED::: Bit better.
 
-	if (inMediaType->subtype == MEDIASUBTYPE_Vorbis) {
-		((VorbisDecodeFilter*)mParentFilter)->setVorbisFormat((sVorbisFormatBlock*)inMediaType->pbFormat);
+	if (CheckMediaType(inMediaType) == S_OK) {
+		((VorbisDecodeFilter*)mParentFilter)->setVorbisFormat(inMediaType->pbFormat);
 		
 	} else {
 		throw 0;
 	}
 	return CBaseInputPin::SetMediaType(inMediaType);
 }
+HRESULT VorbisDecodeInputPin::CheckMediaType(const CMediaType *inMediaType)
+{
+	if (AbstractTransformInputPin::CheckMediaType(inMediaType) == S_OK) {
+		if (inMediaType->cbFormat == VORBIS_IDENT_HEADER_SIZE) {
+			if (strncmp((char*)inMediaType->pbFormat, "\001vorbis", 7) == 0) {
+				//TODO::: Possibly verify version
+				return S_OK;
+			}
+		}
+	}
+	return S_FALSE;
+	
+}
 
+HRESULT VorbisDecodeInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps)
+{
+	outRequestedProps->cbBuffer = VORBIS_BUFFER_SIZE;
+	outRequestedProps->cBuffers = VORBIS_NUM_BUFFERS;
+	outRequestedProps->cbAlign = 1;
+	outRequestedProps->cbPrefix = 0;
 
+	return S_OK;
+}
 
+LOOG_INT64 VorbisDecodeInputPin::convertGranuleToTime(LOOG_INT64 inGranule)
+{
+	if (mBegun) {	
+		return (inGranule * UNITS) / mSampleRate;
+	} else {
+		return -1;
+	}
+}
 
-//Old imp
-//*************************************************
-//#include "stdafx.h"
-//
-//#include "VorbisDecodeInputPin.h"
-//
-//
-//VorbisDecodeInputPin::VorbisDecodeInputPin(AbstractAudioDecodeFilter* inFilter, CCritSec* inFilterLock, AbstractAudioDecodeOutputPin* inOutputPin, CMediaType* inAcceptMediaType)
-//	:	AbstractAudioDecodeInputPin(inFilter, inFilterLock, inOutputPin, NAME("VorbisDecodeInputPin"), L"Vorbis In", inAcceptMediaType),
-//		mBegun(false)
-//	,	mFishSound(NULL)
-//		
-//{
-//	//debugLog.open("g:\\logs\\vorbislog.log", ios_base::out);
-//	ConstructCodec();
-//}
-//
-//STDMETHODIMP VorbisDecodeInputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
-//{
-//	if (riid == IID_IMediaSeeking) {
-//		*ppv = (IMediaSeeking*)this;
-//		((IUnknown*)*ppv)->AddRef();
-//		return NOERROR;
-//	}
-//
-//	return CBaseInputPin::NonDelegatingQueryInterface(riid, ppv); 
-//}
-//bool VorbisDecodeInputPin::ConstructCodec() {
-//	mFishSound = fish_sound_new (FISH_SOUND_DECODE, &mFishInfo);			//Deleted by destroycodec from destructor.
-//
-//	int i = 1;
-//	//FIX::: Use new API for interleave setting
-//	fish_sound_command(mFishSound, FISH_SOUND_SET_INTERLEAVE, &i, sizeof(int));
-//
-//	fish_sound_set_decoded_callback (mFishSound, VorbisDecodeInputPin::VorbisDecoded, this);
-//	//FIX::: Proper return value
-//	return true;
-//}
-//void VorbisDecodeInputPin::DestroyCodec() {
-//	fish_sound_delete(mFishSound);
-//	mFishSound = NULL;
-//}
-//VorbisDecodeInputPin::~VorbisDecodeInputPin(void)
-//{
-//	//debugLog.close();
-//	DestroyCodec();
-//}
-//
-//
-//
-//int __cdecl VorbisDecodeInputPin::VorbisDecoded (FishSound* inFishSound, float** inPCM, long inFrames, void* inThisPointer) 
-//{
-//
-//	DbgLog((LOG_TRACE,1,TEXT("Decoded... Sending...")));
-//	//Do we need to delete the pcm structure ???? 
-//	//More of this can go to the abstract class.
-//
-//	//For convenience we do all these cast once and for all here.
-//	VorbisDecodeInputPin* locThis = reinterpret_cast<VorbisDecodeInputPin*> (inThisPointer);
-//	VorbisDecodeFilter* locFilter = reinterpret_cast<VorbisDecodeFilter*>(locThis->m_pFilter);
-//	
-//
-//	if (locThis->CheckStreaming() == S_OK) {
-//		if (! locThis->mBegun) {
-//
-//		
-//			fish_sound_command (locThis->mFishSound, FISH_SOUND_GET_INFO, &(locThis->mFishInfo), sizeof (FishSoundInfo)); 
-//			locThis->mBegun = true;
-//			
-//			locThis->mNumChannels = locThis->mFishInfo.channels;
-//			locThis->mFrameSize = locThis->mNumChannels * SIZE_16_BITS;
-//			locThis->mSampleRate = locThis->mFishInfo.samplerate;
-//
-//		}
-//
-//		//FIX::: Most of this will be obselete... the demux does it all.
-//		
-//
-//		unsigned long locActualSize = inFrames * locThis->mFrameSize;
-//		unsigned long locTotalFrameCount = inFrames * locThis->mNumChannels;
-//		
-//		//REFERENCE_TIME locFrameStart = locThis->CurrentStartTime() + (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-//
-//
-//		//New hacks for chaining.
-//		if (locThis->mSeekTimeBase == -1) {
-//			//locThis->debugLog<<"Chaining was detected... setting chain time base to : "<<locThis->mPreviousEndTime<<endl;
-//			//This is our signal this is the start of a chain...
-//			// This can only happen on non-seekable streams.
-//			locThis->mChainTimeBase = locThis->mPreviousEndTime;
-//			
-//			locThis->mSeekTimeBase = 0;
-//		}
-//
-//		//Start time hacks
-//		REFERENCE_TIME locTimeBase = ((locThis->mLastSeenStartGranPos * UNITS) / locThis->mSampleRate) - locThis->mSeekTimeBase + locThis->mChainTimeBase;
-//	
-//		
-//		
-//		//locThis->aadDebug<<"Last Seen  : " <<locThis->mLastSeenStartGranPos<<endl;
-//		//locThis->debugLog<<"Last Seen  : " << locThis->mLastSeenStartGranPos<<endl;
-//		//locThis->debugLog<<"Time Base  : " << locTimeBase << endl;
-//		//locThis->debugLog<<"FrameCount : " <<locThis->mUptoFrame<<endl;
-//		//locThis->debugLog<<"Seek TB    : " <<locThis->mSeekTimeBase<<endl;
-//
-//		//Temp - this will break seeking
-//		REFERENCE_TIME locFrameStart = locTimeBase + (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-//		//Increment the frame counter
-//		locThis->mUptoFrame += inFrames;
-//		//Make the end frame counter
-//
-//		//REFERENCE_TIME locFrameEnd = locThis->CurrentStartTime() + (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-//		REFERENCE_TIME locFrameEnd = locTimeBase + (((__int64)(locThis->mUptoFrame * UNITS)) / locThis->mSampleRate);
-//		locThis->mPreviousEndTime = locFrameEnd;
-//
-//
-//
-//		//locThis->debugLog<<"Start      : "<<locFrameStart<<endl;
-//		//locThis->debugLog<<"End        : "<<locFrameEnd<<endl;
-//		//locThis->debugLog<<"=================================================="<<endl;
-//		IMediaSample* locSample;
-//		HRESULT locHR = locThis->mOutputPin->GetDeliveryBuffer(&locSample, &locFrameStart, &locFrameEnd, NULL);
-//
-//		if (locHR != S_OK) {
-//			return -1;
-//		}	
-//		
-//
-//		//Create pointers for the samples buffer to be assigned to
-//		BYTE* locBuffer = NULL;
-//		signed short* locShortBuffer = NULL;
-//		
-//		locSample->GetPointer(&locBuffer);
-//		locShortBuffer = (short *) locBuffer;
-//		
-//		signed short tempInt = 0;
-//		float tempFloat = 0;
-//		
-//		//FIX:::Move the clipping to the abstract function
-//
-//		if (locSample->GetSize() >= locActualSize) {
-//			//Do float to int conversion with clipping
-//			const float SINT_MAX_AS_FLOAT = 32767.0f;
-//			for (unsigned long i = 0; i < locTotalFrameCount; i++) {
-//				//Clipping because vorbis puts out floats out of range -1 to 1
-//				if (((float*)inPCM)[i] <= -1.0f) {
-//					tempInt = SINT_MIN;	
-//				} else if (((float*)inPCM)[i] >= 1.0f) {
-//					tempInt = SINT_MAX;
-//				} else {
-//					//FIX:::Take out the unnescessary variable.
-//					tempFloat = ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
-//					//ASSERT((tempFloat <= 32767.0f) && (tempFloat >= -32786.0f));
-//					tempInt = (signed short)(tempFloat);
-//					//tempInt = (signed short) ((( (float*) inPCM )[i]) * SINT_MAX_AS_FLOAT);
-//				}
-//				
-//				*locShortBuffer = tempInt;
-//				locShortBuffer++;
-//			}
-//			
-//			//Set the sample parameters.
-//			locThis->SetSampleParams(locSample, locActualSize, &locFrameStart, &locFrameEnd);
-//
-//			{
-//		
-//				CAutoLock locLock(locThis->m_pLock);
-//
-//				//Add a reference so it isn't deleted en route.... or not
-//				//locSample->AddRef();
-//				HRESULT lHR = locThis->mOutputPin->mDataQueue->Receive(locSample);
-//				if (lHR != S_OK) {
-//					DbgLog((LOG_TRACE,1,TEXT("Queue rejected us...")));
-//					return -1;
-//				}
-//			}
-//
-//			//Don't Release the sample it gets done for us !
-//			//locSample->Release();
-//
-//			return 0;
-//		} else {
-//			throw 0;
-//		}
-//	} else {
-//		DbgLog((LOG_TRACE,1,TEXT("Fishsound sending stuff we aren't ready for...")));
-//		return -1;
-//	}
-//
-//}
-//
-//
-//
-//long VorbisDecodeInputPin::decodeData(BYTE* inBuf, long inNumBytes) 
-//{
-//	//debugLog << "Decode called... Last Gran Pos : "<<mLastSeenStartGranPos<<endl;
-//	DbgLog((LOG_TRACE,1,TEXT("decodeData")));
-//	long locErr = fish_sound_decode(mFishSound, inBuf, inNumBytes);
-//	//FIX::: Do something here ?
-//	if (locErr < 0) {
-//		//debugLog <<"** Fish Sound error **"<<endl;
-//	} else {
-//		//debugLog << "Fish Sound OK >=0 "<<endl;
-//	}
-//	return locErr;
-//}
-//
-//
-//HRESULT VorbisDecodeInputPin::SetMediaType(const CMediaType* inMediaType) {
-//	//FIX:::Error checking
-//	//RESOLVED::: Bit better.
-//
-//	if (inMediaType->subtype == MEDIASUBTYPE_Vorbis) {
-//		((VorbisDecodeFilter*)mParentFilter)->setVorbisFormat((sVorbisFormatBlock*)inMediaType->pbFormat);
-//		mParentFilter->mAudioFormat = AbstractAudioDecodeFilter::VORBIS;
-//	} else {
-//		throw 0;
-//	}
-//	return CBaseInputPin::SetMediaType(inMediaType);
-//}
-//
+LOOG_INT64 VorbisDecodeInputPin::mustSeekBefore(LOOG_INT64 inGranule)
+{
+	//TODO::: Get adjustment from block size info... for now, it doesn't matter if no preroll
+	return inGranule;
+}
+IOggDecoder::eAcceptHeaderResult VorbisDecodeInputPin::showHeaderPacket(OggPacket* inCodecHeaderPacket)
+{
+	switch (mSetupState) {
+		case VSS_SEEN_NOTHING:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\001vorbis", 7) == 0) {
+				//TODO::: Possibly verify version
+				if (fish_sound_decode(mFishSound, inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize()) >= 0) {
+					mSetupState = VSS_SEEN_BOS;
+					return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				}
+			}
+			return IOggDecoder::AHR_INVALID_HEADER;
+			
+			
+		case VSS_SEEN_BOS:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\003vorbis", 7) == 0) {
+				if (fish_sound_decode(mFishSound, inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize()) >= 0) {
+					mSetupState = VSS_SEEN_COMMENT;
+					return IOggDecoder::AHR_MORE_HEADERS_TO_COME;
+				}
+				
+				
+			}
+			return IOggDecoder::AHR_INVALID_HEADER;
+			
+			
+		case VSS_SEEN_COMMENT:
+			if (strncmp((char*)inCodecHeaderPacket->packetData(), "\005vorbis", 7) == 0) {
+				if (fish_sound_decode(mFishSound, inCodecHeaderPacket->packetData(), inCodecHeaderPacket->packetSize()) >= 0) {
+		
+					fish_sound_command (mFishSound, FISH_SOUND_GET_INFO, &(mFishInfo), sizeof (FishSoundInfo)); 
+					//Is mBegun useful ?
+					mBegun = true;
+			
+					mNumChannels = mFishInfo.channels;
+					mFrameSize = mNumChannels * SIZE_16_BITS;
+					mSampleRate = mFishInfo.samplerate;
+
+		
+					mSetupState = VSS_ALL_HEADERS_SEEN;
+					return IOggDecoder::AHR_ALL_HEADERS_RECEIVED;
+				}
+				
+			}
+			return IOggDecoder::AHR_INVALID_HEADER;
+			
+		case VSS_ALL_HEADERS_SEEN:
+		case VSS_ERROR:
+		default:
+			return IOggDecoder::AHR_UNEXPECTED;
+	}
+}
+string VorbisDecodeInputPin::getCodecShortName()
+{
+	return "vorbis";
+}
+string VorbisDecodeInputPin::getCodecIdentString()
+{
+	//TODO:::
+	return "vorbis";
+}
+
+HRESULT VorbisDecodeInputPin::CompleteConnect(IPin *inReceivePin)
+{
+	IOggOutputPin* locOggOutput = NULL;
+	mSentStreamOffset = false;
+	HRESULT locHR = inReceivePin->QueryInterface(IID_IOggOutputPin, (void**)&locOggOutput);
+	if (locHR == S_OK) {
+		mOggOutputPinInterface = locOggOutput;
+		
+	} else {
+		mOggOutputPinInterface = NULL;
+	}
+	return AbstractTransformInputPin::CompleteConnect(inReceivePin);
+	
+}
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeInputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -34,6 +34,11 @@
 #include <fstream>
 using namespace std;
 #include "vorbisdecoderdllstuff.h"
+
+
+
+#include "IOggDecoder.h"
+#include "IOggOutputPin.h"
 #include "AbstractTransformInputPin.h"
 #include "VorbisDecodeInputPin.h"
 
@@ -48,6 +53,7 @@
 
 class VorbisDecodeInputPin 
 	:	public AbstractTransformInputPin
+	,	public IOggDecoder
 {
 public:
 
@@ -58,15 +64,44 @@
 	static int __cdecl VorbisDecoded (FishSound* inFishSound, float** inPCM, long inFrames, void* inThisPointer);
 
 	virtual HRESULT SetMediaType(const CMediaType* inMediaType);
-
+	virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
 	virtual STDMETHODIMP NewSegment(REFERENCE_TIME inStartTime, REFERENCE_TIME inStopTime, double inRate);
+	virtual STDMETHODIMP EndFlush();
 
+	virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
+	virtual HRESULT CompleteConnect(IPin *inReceivePin);
 
+	//Overriden from AbstractTransform input pin
+	virtual STDMETHODIMP Receive(IMediaSample* inSample);
+
+	//IOggDecoder Interface
+	virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
+	virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
+	virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
+	virtual string getCodecShortName();
+	virtual string getCodecIdentString();
+
+
+
 protected:
 	//fstream debugLog;
 
+	static const unsigned long DECODED_BUFFER_SIZE = 1<<20;		//1 Meg buffer
 
+	enum eVorbisSetupState {
+		VSS_SEEN_NOTHING,
+		VSS_SEEN_BOS,
+		VSS_SEEN_COMMENT,
+		VSS_ALL_HEADERS_SEEN,
+		VSS_ERROR
+	};
 
+	eVorbisSetupState mSetupState;
+
+	static const unsigned long VORBIS_IDENT_HEADER_SIZE = 30;
+	static const unsigned long VORBIS_NUM_BUFFERS = 75;
+	static const unsigned long VORBIS_BUFFER_SIZE = 65536;
+
 	//Implementation of virtuals from AbstractTransform Filter
 	virtual bool ConstructCodec();
 	virtual void DestroyCodec();
@@ -83,53 +118,14 @@
 	int mSampleRate;
 	unsigned int mUptoFrame;
 
-};
+	unsigned char* mDecodedBuffer;
+	unsigned long mDecodedByteCount;
 
+	__int64 mRateNumerator;
+	static const __int64 RATE_DENOMINATOR = 65536;
 
-//Old imp
-//************************************************************
-//#pragma once
-//#include <fstream>
-//using namespace std;
-//#include "vorbisdecoderdllstuff.h"
-//#include "AbstractAudioDecodeInputPin.h"
-//#include "VorbisDecodeInputPin.h"
-//
-//#include "VorbisDecodeFilter.h"
-//
-//extern "C" {
-////#include <fishsound/fishsound.h>
-//#include "fish_cdecl.h"
-//}
-//
-//class VorbisDecodeOutputPin;
-//
-//class VorbisDecodeInputPin 
-//	:	public AbstractAudioDecodeInputPin
-//{
-//public:
-//
-//	DECLARE_IUNKNOWN
-//	STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
-//	VorbisDecodeInputPin(AbstractAudioDecodeFilter* inFilter, CCritSec* inFilterLock, AbstractAudioDecodeOutputPin* inOutputPin, CMediaType* inAcceptMediaType);
-//	virtual ~VorbisDecodeInputPin(void);
-//	static int __cdecl VorbisDecoded (FishSound* inFishSound, float** inPCM, long inFrames, void* inThisPointer);
-//
-//	virtual HRESULT SetMediaType(const CMediaType* inMediaType);
-//
-//	//VIRTUAL FUNCTIONS - AbstractAudioDecodeInputPin
-//	//FIX:::These should be protected.
-//	virtual bool ConstructCodec();
-//	virtual void DestroyCodec();
-//
-//	long decodeData(unsigned char* inBuf, long inNumBytes);
-//
-//protected:
-//
-//	HRESULT mHR;
-//	bool mBegun;
-//
-//	FishSound* mFishSound;
-//	FishSoundInfo mFishInfo; 
-//
-//};
+	IOggOutputPin* mOggOutputPinInterface;
+	bool mSentStreamOffset;
+
+};
+

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -73,43 +73,3 @@
         return S_FALSE;
 	}
 }
-
-
-//Old imp
-//****************************************************
-//#include "stdafx.h"
-//#include "Vorbisdecodeoutputpin.h"
-//
-//VorbisDecodeOutputPin::VorbisDecodeOutputPin(VorbisDecodeFilter* inParentFilter, CCritSec* inFilterLock)
-//	: AbstractAudioDecodeOutputPin(inParentFilter, inFilterLock,NAME("VorbisDecodeOutputPin"), L"PCM Out")
-//{
-//
-//		
-//}
-//VorbisDecodeOutputPin::~VorbisDecodeOutputPin(void)
-//{
-//	
-//	
-//}
-//
-//STDMETHODIMP VorbisDecodeOutputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
-//{
-//	if (riid == IID_IMediaSeeking) {
-//		*ppv = (IMediaSeeking*)this;
-//		((IUnknown*)*ppv)->AddRef();
-//		return NOERROR;
-//	}
-//
-//	return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv); 
-//}
-//
-//bool VorbisDecodeOutputPin::FillWaveFormatExBuffer(WAVEFORMATEX* inFormatBuffer) {
-//	inFormatBuffer->wFormatTag = WAVE_FORMAT_PCM;
-//	inFormatBuffer->nChannels = ((VorbisDecodeFilter*)m_pFilter)->mVorbisFormatInfo->numChannels;
-//	inFormatBuffer->nSamplesPerSec =  ((VorbisDecodeFilter*)m_pFilter)->mVorbisFormatInfo->samplesPerSec;
-//	inFormatBuffer->wBitsPerSample = 16;
-//	inFormatBuffer->nBlockAlign = (inFormatBuffer->nChannels) * (inFormatBuffer->wBitsPerSample >> 3);
-//	inFormatBuffer->nAvgBytesPerSec = ((inFormatBuffer->nChannels) * (inFormatBuffer->wBitsPerSample >> 3)) * inFormatBuffer->nSamplesPerSec;
-//	inFormatBuffer->cbSize = 0;
-//	return true;
-//}
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/VorbisDecodeOutputPin.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -44,31 +44,10 @@
 
 	DECLARE_IUNKNOWN
 	STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
+
 	VorbisDecodeOutputPin(VorbisDecodeFilter* inParentFilter,CCritSec* inFilterLock, vector<CMediaType*> inAcceptableMediaTypes);
 	virtual ~VorbisDecodeOutputPin(void);
 protected:
 	virtual HRESULT CreateAndFillFormatBuffer(CMediaType* outMediaType, int inPosition);
-	//virtual bool FillWaveFormatExBuffer(WAVEFORMATEX* inFormatBuffer);
 };
 
-//Old imp
-//*************************************
-//#pragma once
-//#include "vorbisdecoderdllstuff.h"
-//#include "AbstractAudioDecodeOutputPin.h"
-//
-//
-//class VorbisDecodeFilter;
-//class VorbisDecodeOutputPin :
-//	public AbstractAudioDecodeOutputPin
-//{
-//public:
-//	DECLARE_IUNKNOWN
-//	STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
-//	VorbisDecodeOutputPin(VorbisDecodeFilter* inParentFilter,CCritSec* inFilterLock);
-//	virtual ~VorbisDecodeOutputPin(void);
-//
-//	virtual bool FillWaveFormatExBuffer(WAVEFORMATEX* inFormatBuffer);
-//};
-
-

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/dsfVorbisDecoder.vcproj
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/dsfVorbisDecoder.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/dsfVorbisDecoder.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -19,7 +19,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DSFVORBISDECODER_EXPORTS"
 				MinimalRebuild="TRUE"
 				BasicRuntimeChecks="3"
@@ -80,7 +80,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFVORBISDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -143,7 +143,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFVORBISDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"
@@ -207,7 +207,7 @@
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="3"
-				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+				AdditionalIncludeDirectories="&quot;C:\DXSDK\Samples\C++\DirectShow\BaseClasses&quot;;C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\..\..\core\directshow\dsfOggDemux2"
 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DSFVORBISDECODER_EXPORTS"
 				StringPooling="TRUE"
 				RuntimeLibrary="2"

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/stdafx.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/stdafx.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/stdafx.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -40,4 +40,6 @@
 // Windows Header Files:
 #include <windows.h>
 
+#include <libOOOgg/libOOOgg.h>
+
 // TODO: reference additional headers your program requires here

Modified: trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/vorbisdecoderdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/vorbisdecoderdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/codecs/vorbis/filters/dsfVorbisDecoder/vorbisdecoderdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -31,34 +31,27 @@
 
 #pragma once
 
-//***************************** Old imp
-//#ifdef DSFABSTRACOGGAUDIODECODER_EXPORTS
-//#pragma message("----> Exporting from Abstract Library...")
-//#define ABS_AUDIO_DEC_API __declspec(dllexport)
-//#else
-//#pragma message("<---- Importing from Abstract Library...")
-//#define ABS_AUDIO_DEC_API __declspec(dllimport)
-//#endif
-//
-//
-//
-//#include "AbstractAudioDecodeFilter.h"
-//#include "AbstractAudioDecodeInputPin.h"
-//#include "AbstractAudioDecodeOutputPin.h"
-//***************************** Old imp ends
 
-
-//**************************** New imp
-
 #include "AbstractTransformFilter.h"
 #include "AbstractTransformInputPin.h"
 #include "AbstractTransformOutputPin.h"
-//****************************** New imp ends
 
 #include "VorbisDecodeInputPin.h"
 #include "VorbisDecodeOutputPin.h"
 #include "VorbisDecodeFilter.h"
 
+
+#include "libilliCore/iLE_Math.h"
+#include "libOOOgg/OggPacket.h"
+
+#ifndef LOOG_INT64
+# ifdef WIN32
+#  define LOOG_INT64 signed __int64
+# else  /* assume POSIX */
+#  define LOOG_INT64 int64_t
+# endif
+#endif
+
 #ifdef LIBOOOGG_EXPORTS
 #define LIBOOOGG_API __declspec(dllexport)
 #else
@@ -69,23 +62,40 @@
 DEFINE_GUID(CLSID_VorbisDecodeFilter, 
 0x5a1d945, 0xa794, 0x44ef, 0xb4, 0x1a, 0x2f, 0x85, 0x1a, 0x11, 0x71, 0x55);
 
-// {8A0566AC-42B3-4ad9-ACA3-93B906DDF98A}
-DEFINE_GUID(MEDIASUBTYPE_Vorbis, 
-0x8a0566ac, 0x42b3, 0x4ad9, 0xac, 0xa3, 0x93, 0xb9, 0x6, 0xdd, 0xf9, 0x8a);
+//// {8A0566AC-42B3-4ad9-ACA3-93B906DDF98A}
+//DEFINE_GUID(MEDIASUBTYPE_Vorbis, 
+//0x8a0566ac, 0x42b3, 0x4ad9, 0xac, 0xa3, 0x93, 0xb9, 0x6, 0xdd, 0xf9, 0x8a);
+//
+//// {44E04F43-58B3-4de1-9BAA-8901F852DAE4}
+//DEFINE_GUID(FORMAT_Vorbis, 
+//0x44e04f43, 0x58b3, 0x4de1, 0x9b, 0xaa, 0x89, 0x1, 0xf8, 0x52, 0xda, 0xe4);
 
-// {44E04F43-58B3-4de1-9BAA-8901F852DAE4}
-DEFINE_GUID(FORMAT_Vorbis, 
-0x44e04f43, 0x58b3, 0x4de1, 0x9b, 0xaa, 0x89, 0x1, 0xf8, 0x52, 0xda, 0xe4);
 
+// {60891713-C24F-4767-B6C9-6CA05B3338FC}
+DEFINE_GUID(MEDIATYPE_OggPacketStream, 
+0x60891713, 0xc24f, 0x4767, 0xb6, 0xc9, 0x6c, 0xa0, 0x5b, 0x33, 0x38, 0xfc);
 
+// {95388704-162C-42a9-8149-C3577C12AAF9}
+DEFINE_GUID(FORMAT_OggIdentHeader, 
+0x95388704, 0x162c, 0x42a9, 0x81, 0x49, 0xc3, 0x57, 0x7c, 0x12, 0xaa, 0xf9);
+
+// {43F0F818-10B0-4c86-B9F1-F6B6E2D33462}
+DEFINE_GUID(IID_IOggDecoder, 
+0x43f0f818, 0x10b0, 0x4c86, 0xb9, 0xf1, 0xf6, 0xb6, 0xe2, 0xd3, 0x34, 0x62);
+
+
+// {83D7F506-53ED-4f15-B6D8-7D8E9E72A918}
+DEFINE_GUID(IID_IOggOutputPin, 
+0x83d7f506, 0x53ed, 0x4f15, 0xb6, 0xd8, 0x7d, 0x8e, 0x9e, 0x72, 0xa9, 0x18);
+
 const REGPINTYPES VorbisDecodeOutputTypes = {
     &MEDIATYPE_Audio,
 	&MEDIASUBTYPE_PCM
 };
 
 const REGPINTYPES VorbisDecodeInputTypes = {
-	&MEDIATYPE_Audio,
-	&MEDIASUBTYPE_Vorbis
+	&MEDIATYPE_OggPacketStream,
+	&MEDIASUBTYPE_None
 };
 
 const REGFILTERPINS VorbisDecodePinReg[] = {

Modified: trunk/oggdsf/src/lib/core/directshow/dsfOggMux/OggMuxInputPin.cpp
===================================================================
--- trunk/oggdsf/src/lib/core/directshow/dsfOggMux/OggMuxInputPin.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/directshow/dsfOggMux/OggMuxInputPin.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -122,6 +122,11 @@
 			mMuxStream->setConversionParams(locFLAC->samplesPerSec, 1, 10000000);
 			//debugLog<<"FLAC sample rate = "<<locFLAC->samplesPerSec<<endl;
 			mNeedsFLACHeaderTweak = true;
+		} else if (inMediaType->subtype == MEDIASUBTYPE_RawOggAudio) {
+			sOggRawAudioFormatBlock* locRawAudio = (sOggRawAudioFormatBlock*)inMediaType->pbFormat;
+			mMuxStream->setConversionParams(locRawAudio->samplesPerSec, 1, 10000000);
+			mMuxStream->setNumHeaders(locRawAudio->numHeaders);
+			mPaginator.setNumHeaders(locRawAudio->numHeaders);
 		}
 
 		
@@ -166,7 +171,12 @@
 			outMediaType->subtype = MEDIASUBTYPE_CMML;
 			return S_OK;
 
+		case 6:
+			outMediaType->majortype = MEDIATYPE_Audio;
+			outMediaType->subtype = MEDIASUBTYPE_RawOggAudio;
+			return S_OK;
 
+
 		default:
 			return VFW_S_NO_MORE_ITEMS;
 	
@@ -193,6 +203,10 @@
 				&&	inMediaType->subtype == MEDIASUBTYPE_FLAC
 				&&	inMediaType->formattype == FORMAT_FLAC)
 			||
+			(inMediaType->majortype == MEDIATYPE_Audio
+				&&	inMediaType->subtype == MEDIASUBTYPE_RawOggAudio
+				&&	inMediaType->formattype == FORMAT_RawOggAudio)
+			||
 			(inMediaType->majortype == MEDIATYPE_Text
 				&&	inMediaType->subtype == MEDIASUBTYPE_CMML
 				&&	inMediaType->formattype == FORMAT_CMML)

Modified: trunk/oggdsf/src/lib/core/directshow/dsfOggMux/oggmuxdllstuff.h
===================================================================
--- trunk/oggdsf/src/lib/core/directshow/dsfOggMux/oggmuxdllstuff.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/directshow/dsfOggMux/oggmuxdllstuff.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -129,7 +129,13 @@
 0x5a656e74, 0x6172, 0x6f26, 0xb7, 0x9c, 0xd6, 0x41, 0x6e, 0x64, 0x72, 0x82);
 //Structure defining the registration details of the filter
 
+// {37535B3C-F068-4f93-9763-E7208277D71F}
+DEFINE_GUID(MEDIASUBTYPE_RawOggAudio, 
+0x37535b3c, 0xf068, 0x4f93, 0x97, 0x63, 0xe7, 0x20, 0x82, 0x77, 0xd7, 0x1f);
 
+// {232D3C8F-16BF-404b-99AE-296F3DBB77EE}
+DEFINE_GUID(FORMAT_RawOggAudio, 
+0x232d3c8f, 0x16bf, 0x404b, 0x99, 0xae, 0x29, 0x6f, 0x3d, 0xbb, 0x77, 0xee);
 const REGPINTYPES OggMuxInputTypes[] = {
 	{	
 		&MEDIATYPE_Audio,
@@ -152,6 +158,10 @@
 		&MEDIASUBTYPE_FLAC
 	},
 	{
+		&MEDIATYPE_Audio,
+		&MEDIASUBTYPE_RawOggAudio
+	},
+	{
 		&MEDIATYPE_Text,
 		&MEDIASUBTYPE_CMML
 	}
@@ -166,7 +176,7 @@
 	FALSE,								//Cannot have more than one instance of this pin
 	NULL,								//Connects to filter (obsoleted)
 	NULL,								//Connects to pin (obsoleted)
-	6,									//upport two media type
+	7,									//upport two media type
 	OggMuxInputTypes					//Pointer to media type (Audio/Vorbis or Audio/Speex)
 };
 
@@ -223,8 +233,17 @@
 	unsigned char yOffset;
 	unsigned char colourSpace;
 };
+struct sOggRawAudioFormatBlock {
+	unsigned long samplesPerSec;
+	unsigned long numHeaders;
+	unsigned long numChannels;
+	unsigned long bitsPerSample;
+	unsigned long maxFramesPerPacket;
 
+
+};
 struct sCMMLFormatBlock {
 	__int64 granuleNumerator;
 	__int64 granuleDenominator;
+	unsigned short granuleSplitBits;
 };
\ No newline at end of file

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.cpp
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -48,19 +48,30 @@
 	delete[] mBuffer;
 }
 
-unsigned long CircularBuffer::read(unsigned char* outData, unsigned long inBytesToRead) {
+unsigned long CircularBuffer::read(unsigned char* outData, unsigned long inBytesToRead, bool inAllowShortRead) {
 
-	//Returns early.
+	//Returns early. - why?
+	//TODO::: This is probably a bug?
 	if (inBytesToRead >  spaceLeft()) {
 		return 0;
 	}
     	
 	unsigned long locBytesToRead =	inBytesToRead;
 	
-	bufASSERT(locBytesToRead <= mBufferSize);
+	if (inAllowShortRead) {
+		locBytesToRead = (inBytesToRead <= numBytesAvail())		?	inBytesToRead
+																:	numBytesAvail();
+	}
+
+	if (locBytesToRead == 0) {
+		return 0;
+	}
+	
 		//	(inBytesToRead <= numBytesAvail())	?	inBytesToRead
 		//											:	numBytesAvail();
 	//locBytesToRead = the lower of numBytesAvail() and inBytesToRead
+
+	bufASSERT(locBytesToRead <= mBufferSize);
 	bufASSERT(locBytesToRead <= inBytesToRead);
 	bufASSERT(locBytesToRead <= numBytesAvail());
 	

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.h
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/CircularBuffer.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -132,7 +132,7 @@
 	virtual ~CircularBuffer(void);
 
 	/// Read bytes from the internal buffer. Returns how many actually read.
-	virtual unsigned long read(unsigned char* outData, unsigned long inBytesToRead);
+	virtual unsigned long read(unsigned char* outData, unsigned long inBytesToRead, bool inAllowShortRead = false);
 
 	/// Write bytes into the internal buffer. Returns how many written.
 	virtual unsigned long write(const unsigned char* inData, unsigned long inBytesToWrite);

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/IFIFOBuffer.h
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/IFIFOBuffer.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/IFIFOBuffer.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -37,7 +37,7 @@
 	virtual ~IFIFOBuffer(void)		{}
 
 	/// Read bytes from the internal buffer. Returns how many actually read.
-	virtual unsigned long read(unsigned char* outData, unsigned long inBytesToRead) = 0;
+	virtual unsigned long read(unsigned char* outData, unsigned long inBytesToRead, bool inAllowShortRead = false  ) = 0;
 
 	/// Write bytes into the internal buffer. Returns how many written.
 	virtual unsigned long write(const unsigned char* inData, unsigned long inBytesToWrite) = 0;

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggDataBuffer.cpp
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggDataBuffer.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggDataBuffer.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -207,6 +207,8 @@
 		
 		if (locNumRead < OggPageHeader::OGG_BASE_HEADER_SIZE) {
 			//TODO::: Handle this case... we read less than we expected.
+			//The buffer handles it for us, it won't let us read less, and will return 0
+			//	This is fine for valid files, but still needs to be reviewed.
 
 			//debugLog<<"ProcessBaseHeader : ###### Read was short."<<endl;
 			//debugLog<<"ProcessBaseHeader : ** "<<mBuffer->numBytesAvail()<<" avail, "<<mBuffer->spaceLeft()<<" space left."<<endl;

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.cpp
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -37,8 +37,8 @@
 	,	mPacketiserState(PKRSTATE_OK)
 	,	mLooseMode(true)						//FIX::: This affects the validator.
 	,	mNumIgnorePackets(0)
-	,	mPrevGranPos(0)
-	,	mCurrentGranPos(0)
+	//,	mPrevGranPos(0)
+	//,	mCurrentGranPos(0)
 {
 	//debugLog.open("g:\\logs\\packetise.log", ios_base::out);
 
@@ -49,8 +49,8 @@
 	,	mPacketiserState(PKRSTATE_OK)
 	,	mLooseMode(true)						//FIX::: This affects the validator.
 	,	mNumIgnorePackets(0)
-	,	mPrevGranPos(0)
-	,	mCurrentGranPos(0)
+	//,	mPrevGranPos(0)
+	//,	mCurrentGranPos(0)
 {
 	//debugLog.open("g:\\logs\\packetise.log", ios_base::out);
 }
@@ -73,8 +73,8 @@
 	mPendingPacket = NULL;
 	mNumIgnorePackets = 0;
 	mPacketiserState = PKRSTATE_OK;
-	mPrevGranPos = 0;
-	mCurrentGranPos = 0;
+	//mPrevGranPos = 0;
+	//mCurrentGranPos = 0;
 	return true;
 }
 bool OggPacketiser::acceptOggPage(OggPage* inOggPage) {				//AOP::: Needs closer look
@@ -88,15 +88,15 @@
 	//debugLog<<"acceptOggPage : Gran = "<<inOggPage->header()->GranulePos()<<"Num packs = "<<inOggPage->numPackets()<<endl;
 
 	//If the page isn't a -1 page and it's got a different granpos save it.
-	if ( (inOggPage->header()->GranulePos() != -1) && (inOggPage->header()->GranulePos() != mCurrentGranPos)) {
-		mPrevGranPos = mCurrentGranPos;
+	//if ( (inOggPage->header()->GranulePos() != -1) && (inOggPage->header()->GranulePos() != mCurrentGranPos)) {
+	//	mPrevGranPos = mCurrentGranPos;
 
-		//If the previous is higher than the
-		if (mPrevGranPos > mCurrentGranPos) {
-			mPrevGranPos = -1;
-		}
-		mCurrentGranPos = inOggPage->header()->GranulePos();
-	}
+	//	//If the previous is higher than the
+	//	if (mPrevGranPos > mCurrentGranPos) {
+	//		mPrevGranPos = -1;
+	//	}
+	//	mCurrentGranPos = inOggPage->header()->GranulePos();
+	//}
 
 	//If the page header says its a continuation page...
 	if ((inOggPage->header()->HeaderFlags() & 1) == 1) {
@@ -148,6 +148,8 @@
 						//Deliver the packet to the packet sink...
 						if (dispatchStampedOggPacket(mPendingPacket) == false) {
 							//debugLog<<"acceptOggPage : DELIVERY FAILED !"<<endl;
+							mPacketiserState = PKRSTATE_OK;
+							mPendingPacket = NULL;
 							delete inOggPage;
 							return false;
 						}
@@ -165,6 +167,7 @@
 					//debugLog<<"acceptOggPage : INTERNAL ERROR - Header says cont but packet doesn't."<<endl;
 					//Header flag says continuation but first packet is not continued.
 					mPacketiserState = PKRSTATE_INVALID_STREAM;
+					
 					delete inOggPage;
 					throw 0;
 				}
@@ -341,9 +344,9 @@
 		return true;
 	} else {
 		//Modify the header packet to include the gran pos of previous page.
-		if (mPrevGranPos != -1) {
-			inPacket->setTimeStamp(mPrevGranPos, mCurrentGranPos, StampedOggPacket::OGG_BOTH);
-		}
+		//if (mPrevGranPos != -1) {
+		//	inPacket->setTimeStamp(mPrevGranPos, mCurrentGranPos, StampedOggPacket::OGG_BOTH);
+		//}
 		//Dispatch it.
 		return mPacketSink->acceptStampedOggPacket(inPacket);
 	}

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.h
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.h	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPacketiser.h	2006-02-12 21:52:56 UTC (rev 10808)
@@ -81,8 +81,8 @@
 
 	bool mLooseMode;
 	unsigned long mNumIgnorePackets;
-	LOOG_INT64 mPrevGranPos;
-	LOOG_INT64 mCurrentGranPos;
+	//LOOG_INT64 mPrevGranPos;
+	//LOOG_INT64 mCurrentGranPos;
 	bool processPage(OggPage* inOggPage, bool inIncludeFirst, bool inIncludeLast);
 	ePacketiserState mPacketiserState;
 

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPage.cpp
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPage.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOgg/OggPage.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -134,7 +134,17 @@
 //Returns a view on the packet only
 StampedOggPacket* OggPage::getStampedPacket(unsigned long inPacketNo) {
 	if (inPacketNo < numPackets()) {
-		return mPacketList[inPacketNo];
+		StampedOggPacket* retPacket = mPacketList[inPacketNo];
+		
+		if ((int)inPacketNo != ((int)numPackets() - (mPacketList[numPackets() - 1]->isTruncated() ? 2 : 1))) {
+			//It's not the last complete packet, so it gets a -1 stamp
+			retPacket->setTimeStamp(-1, -1, StampedOggPacket::OGG_END_ONLY);
+		} else {
+			//It is the last complete packet
+			
+			retPacket->setTimeStamp(-1, header()->GranulePos(), StampedOggPacket::OGG_END_ONLY);
+		}
+		return retPacket;
 	} else {
 		return NULL;
 	}

Modified: trunk/oggdsf/src/lib/core/ogg/libOOOggSeek/libOOOggSeek.vcproj
===================================================================
--- trunk/oggdsf/src/lib/core/ogg/libOOOggSeek/libOOOggSeek.vcproj	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/core/ogg/libOOOggSeek/libOOOggSeek.vcproj	2006-02-12 21:52:56 UTC (rev 10808)
@@ -371,12 +371,18 @@
 				RelativePath=".\AutoAnxSeekTable.cpp">
 			</File>
 			<File
+				RelativePath=".\AutoOggChainGranuleSeekTable.cpp">
+			</File>
+			<File
 				RelativePath="AutoOggSeekTable.cpp">
 			</File>
 			<File
 				RelativePath="libOOOggSeek.cpp">
 			</File>
 			<File
+				RelativePath=".\OggGranuleSeekTable.cpp">
+			</File>
+			<File
 				RelativePath="OggSeekPoint.cpp">
 			</File>
 			<File
@@ -432,15 +438,24 @@
 				RelativePath=".\AutoAnxSeekTable.h">
 			</File>
 			<File
+				RelativePath=".\AutoOggChainGranuleSeekTable.h">
+			</File>
+			<File
 				RelativePath="AutoOggSeekTable.h">
 			</File>
 			<File
+				RelativePath=".\IOggDecoderSeek.h">
+			</File>
+			<File
 				RelativePath=".\IOggSeeker.h">
 			</File>
 			<File
 				RelativePath="libOOOggSeek.h">
 			</File>
 			<File
+				RelativePath=".\OggGranuleSeekTable.h">
+			</File>
+			<File
 				RelativePath="OggSeekPoint.h">
 			</File>
 			<File

Modified: trunk/oggdsf/src/lib/player/libDSPlayDotNET/DSPlay.cpp
===================================================================
--- trunk/oggdsf/src/lib/player/libDSPlayDotNET/DSPlay.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/lib/player/libDSPlayDotNET/DSPlay.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -427,35 +427,7 @@
 	}
 	
 	
-	////If it's an annodex file, then put the VMR 9 in the graph.
-	//if (isFileAnnodex(inFileName)) {
-	//	*debugLog<<"Is annodex"<<endl;
-	//	IBaseFilter* locVMR9 = NULL;
 
-	//	HRESULT locHR2 = S_OK;
-	//	locHR2 = mGraphBuilder->FindFilterByName(L"Video Mixing Renderer 9", &locVMR9);
-	//	if (locVMR9 == NULL) {
-	//		*debugLog<<"Not in graph... making it !"<<endl;
-	//		locHR2= CoCreateInstance(CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&locVMR9);
-	//		if (locHR2 == S_OK) {
-	//			locHR2 = mGraphBuilder->AddFilter(locVMR9, L"Video Mixing Renderer 9");
-	//			numRef =
-	//				locVMR9->Release();
-	//			*debugLog<<"VMR9 ref count = "<<numRef<<endl;
-	//			
-	//		}
-	//	} else {
-	//		numRef =
-	//			locVMR9->Release();
-
-	//		*debugLog<<"VMR9 ref count = "<<numRef<<endl;
-	//	}
-
-
-	//	
-
-	//}
-
 	mVideoRenderType = VR_NONE;
 	//Attempt to use VMR9
 	IBaseFilter* locVMR9 = NULL;

Modified: trunk/oggdsf/src/tools/OOOggPageInfo/OOOggPageInfo.cpp
===================================================================
--- trunk/oggdsf/src/tools/OOOggPageInfo/OOOggPageInfo.cpp	2006-02-12 21:50:10 UTC (rev 10807)
+++ trunk/oggdsf/src/tools/OOOggPageInfo/OOOggPageInfo.cpp	2006-02-12 21:52:56 UTC (rev 10808)
@@ -29,7 +29,7 @@
 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //===========================================================================
 
-// OggDump.cpp : Defines the entry point for the console application.
+// OOOggPageInfo.cpp : Defines the entry point for the console application.
 //
 
 #include "stdafx.h"
@@ -39,17 +39,50 @@
 #include <iostream>
 #include <fstream>
 
+struct sOggStreamInfo {
+	unsigned long mSerialNo;
+	unsigned long mNumPages;
+	unsigned long mMinPageSize;
+	unsigned long mMaxPageSize;
+	unsigned long mMinPacksPerPage;
+	unsigned long mMaxPacksPerPage;
+	unsigned long mTotalPacketCount;
+	unsigned long mTotalStreamSize;
+	unsigned long mTotalDataSize;
+
+};
+
+void dumpStreamInfo(sOggStreamInfo* inInfo)
+{
+
+	cout<<"=== Stream "<<inInfo->mSerialNo<<endl;
+	cout<<"=================="<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+
+	cout<<"Min Page Size  :  "<<inInfo->mMinPageSize<<endl;
+	cout<<"Max Page Size  :  "<<inInfo->mMaxPageSize<<endl;
+	cout<<"Avg Page Size  :  "<<inInfo->mTotalStreamSize / inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl;
+	cout<<"Num Pages      :  "<<inInfo->mNumPages<<endl<<endl;
+
+}
 unsigned long bytePos;
-vector<unsigned long> streamSerials;
-vector<unsigned long*> maxPacks;
+//vector<unsigned long> streamSerials;
+//vector<unsigned long*> maxPacks;
+vector<sOggStreamInfo*> streamInfos;
+
 //This will be called by the callback
 bool pageCB(OggPage* inOggPage, void* inUserData /* ignored */) {
 	bool locFoundStream = false;
 	size_t locFoundPos = 0;
 
 	unsigned long locSerialNo = inOggPage->header()->StreamSerialNo();
-	for (size_t i = 0; i < streamSerials.size(); i++) {
-		if (locSerialNo == streamSerials[i]) {
+	for (size_t i = 0; i < streamInfos.size(); i++) {
+		if (locSerialNo == streamInfos[i]->mSerialNo) {
 			locFoundStream = true;
 			locFoundPos = i;
 			break;
@@ -57,14 +90,54 @@
 	}
 	
 	if (!locFoundStream) {
-		streamSerials.push_back(locSerialNo);
-		maxPacks.push_back(new unsigned long(0));
+		//streamSerials.push_back(locSerialNo);
+		//maxPacks.push_back(new unsigned long(0));
+		sOggStreamInfo* locStreamInfo = new sOggStreamInfo;
+		locStreamInfo->mMaxPacksPerPage = 0;
+		locStreamInfo->mMaxPageSize = 0;
+		locStreamInfo->mMinPacksPerPage = (unsigned long)-1;
+		locStreamInfo->mMinPageSize = (unsigned long)-1;
+		locStreamInfo->mNumPages = 0;
+		locStreamInfo->mSerialNo = locSerialNo;
+		locStreamInfo->mTotalDataSize = 0;
+		locStreamInfo->mTotalPacketCount = 0;
+		locStreamInfo->mTotalStreamSize = 0;
+
+		streamInfos.push_back(locStreamInfo);
 	}
 	unsigned long locNumPacks = 0;
-	for (size_t i = 0; i < streamSerials.size(); i++) {
+	for (size_t i = 0; i < streamInfos.size(); i++) {
 		
-		if (locSerialNo == streamSerials[i]) {
+		if (locSerialNo == streamInfos[i]->mSerialNo) {
 			locFoundPos = i;
+			
+			//Fill in the stats
+
+			if (streamInfos[i]->mMaxPacksPerPage < inOggPage->numPackets()) {
+				streamInfos[i]->mMaxPacksPerPage = inOggPage->numPackets();
+			}
+
+			if (streamInfos[i]->mMaxPageSize < inOggPage->pageSize()) {
+				streamInfos[i]->mMaxPageSize = inOggPage->pageSize();
+			}
+
+			if (streamInfos[i]->mMinPacksPerPage > inOggPage->numPackets()) {
+				streamInfos[i]->mMinPacksPerPage = inOggPage->numPackets();
+			}
+
+			if (streamInfos[i]->mMinPageSize > inOggPage->pageSize()) {
+
+				streamInfos[i]->mMinPageSize = inOggPage->pageSize();
+			}
+
+			streamInfos[i]->mNumPages++;
+			//streamInfos[i]->mSerialNo = locSerialNo;
+			streamInfos[i]->mTotalDataSize += inOggPage->dataSize();
+			streamInfos[i]->mTotalPacketCount += inOggPage->numPackets();
+			streamInfos[i]->mTotalStreamSize += inOggPage->pageSize();
+
+
+
 			cout << "Stream "<<(unsigned long)i<<"  : Granule = "<<inOggPage->header()->GranulePos()<<"   - ";
 			locNumPacks = 0;
 			if (inOggPage->numPackets() == 0) {
@@ -109,9 +182,9 @@
 	}
 
 	
-	if (*maxPacks[locFoundPos] < locNumPacks) {
-		*maxPacks[locFoundPos] = locNumPacks;
-	}
+	//if (*maxPacks[locFoundPos] < locNumPacks) {
+	//	*maxPacks[locFoundPos] = locNumPacks;
+	//}
 
 	return true;
 }
@@ -151,13 +224,14 @@
 		cout<<endl;
 		cout<<endl;
 
-		for (size_t i = 0; i < maxPacks.size(); i++) {
-			cout<<"Stream "<<(unsigned long)i<<" max Packets = "<<*maxPacks[i]<<endl;
+		for (size_t i = 0; i < streamInfos.size(); i++) {
+			dumpStreamInfo(streamInfos[i]);
+			//cout<<"Stream "<<(unsigned long)i<<" max Packets = "<<*maxPacks[i]<<endl;
 		}
 
 
-		for (size_t i = 0; i < maxPacks.size(); i++) {
-			delete maxPacks[i];
+		for (size_t i = 0; i < streamInfos.size(); i++) {
+			delete streamInfos[i];
 		}
 
 		delete[] locBuff;



More information about the commits mailing list