[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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..;..;..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..;..;..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..;..;..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..;..;..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libflac\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper;..\..\libs\libFLACHelper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+ AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+ AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+ AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\libs\libOOTheora;..\..\libs\libtheora\include;..\..\..\..\core\ogg;..\..\..\..\core\ogg\libogg\include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\helper;..\..\..\..\helper\iDSHelper"
+ AdditionalIncludeDirectories="..\..\..\..\core\directshow\dsfAbstractVideoDecoder;"C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";C:\DXSDK\Include;..\..\..\..\core\directshow\libDirectshowAbstracts;..\..\..\..\core\ogg;..\..\..\helper\libfishsound\include;..\..\..\..\core\directshow\dsfSeeking;..\..\..\..\helper"
+ AdditionalIncludeDirectories=""C:\DXSDK\Samples\C++\DirectShow\BaseClasses";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