//----------------------------------------------------------------------------- // // Musepack Demuxer // // Author : Igor Janos // //----------------------------------------------------------------------------- #pragma once // {C3E2E983-0198-4f73-9E5C-8365BB4C4131} static const GUID CLSID_MusepackDemuxer = { 0xc3e2e983, 0x198, 0x4f73, { 0x9e, 0x5c, 0x83, 0x65, 0xbb, 0x4c, 0x41, 0x31 } }; // {7E563A5E-12F1-45c1-A29F-032E21C2F7FC} static const GUID CLSID_MusepackDemuxPage = { 0x7e563a5e, 0x12f1, 0x45c1, { 0xa2, 0x9f, 0x3, 0x2e, 0x21, 0xc2, 0xf7, 0xfc } }; //----------------------------------------------------------------------------- // // Custom Media Types // //----------------------------------------------------------------------------- /* The demuxer may connect with pull-mode source filters that may have mechanism to identify file type. File Source (Async.) can do this so we use MEDIATYPE_Stream/MEDIASUBTYPE_MusepackStream in such cases. We will also accept unknown streams. Demuxer itself must specify output type so the decoder can connect properly. For output pin the demuxer will use MEDIATYPE_Audio/MEDIASUBTYPE_MusepackPacket. */ // {0D2657B6-13B3-4c9b-AC9F-2EE055C51755} static const GUID MEDIASUBTYPE_MusepackPacket = { 0xd2657b6, 0x13b3, 0x4c9b, { 0xac, 0x9f, 0x2e, 0xe0, 0x55, 0xc5, 0x17, 0x55 } }; // {229F9AD7-2F4D-4b45-B858-A3F434E7179A} static const GUID MEDIASUBTYPE_MusepackStream = { 0x229f9ad7, 0x2f4d, 0x4b45, { 0xb8, 0x58, 0xa3, 0xf4, 0x34, 0xe7, 0x17, 0x9a } }; // {5751D1E7-D444-4c19-812C-A47352EDE8D2} static const GUID IID_IMusepackSplitter = { 0x5751d1e7, 0xd444, 0x4c19, { 0x81, 0x2c, 0xa4, 0x73, 0x52, 0xed, 0xe8, 0xd2 } }; struct MPC_File_Info { int stream_version; // 7, 8 double duration; // in seconds int sample_rate; int channels; int block_frames; // frames per audio packet float gain_album_db; float gain_album_peak_db; float gain_title_db; float gain_title_peak_db; }; DECLARE_INTERFACE_(IMusepackSplitter, IUnknown) { STDMETHOD(GetFileInfo)(MPC_File_Info *info) PURE; STDMETHOD(SetPropertyPageWindow)(HWND wnd) PURE; };