diff --git a/MFPlayer-x64/MFPlayer.h b/MFPlayer-x64/MFPlayer.h new file mode 100644 index 0000000..d5b8a98 --- /dev/null +++ b/MFPlayer-x64/MFPlayer.h @@ -0,0 +1,533 @@ +//============================================================================== +// +// MFPlayer x64 Library +// +// http://github.com/mrfearless +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the author be held liable for any damages arising from the +// use of this software. +// +//============================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef _MSC_VER // MSVC compiler +#define MFP_EXPORT __declspec(dllexport) __fastcall +#else +#define MFP_EXPORT +#endif + +//------------------------------------------------------------------------------ +// MFPMediaPlayer Constants, Enums, Structures, Etc +//------------------------------------------------------------------------------ +#ifndef HRESULT +typedef HRESULT TYPEDEF DWORD +#endif + +#define STREAMLANG_LENGTH 28 +#define STREAMNAME_LENGTH 28 + +typedef UINT32 MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum _MFP_CREATION_OPTIONS + { + MFP_OPTION_NONE = 0, + MFP_OPTION_FREE_THREADED_CALLBACK = 0x1, + MFP_OPTION_NO_MMCSS = 0x2, + MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION = 0x4 + } _MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum MFP_MEDIAPLAYER_STATE + { + MFP_MEDIAPLAYER_STATE_EMPTY = 0, + MFP_MEDIAPLAYER_STATE_STOPPED = 0x1, + MFP_MEDIAPLAYER_STATE_PLAYING = 0x2, + MFP_MEDIAPLAYER_STATE_PAUSED = 0x3, + MFP_MEDIAPLAYER_STATE_SHUTDOWN = 0x4 + } MFP_MEDIAPLAYER_STATE; + +typedef UINT32 MFP_MEDIAITEM_CHARACTERISTICS; + +typedef /* [v1_enum] */ +enum _MFP_MEDIAITEM_CHARACTERISTICS + { + MFP_MEDIAITEM_IS_LIVE = 0x1, + MFP_MEDIAITEM_CAN_SEEK = 0x2, + MFP_MEDIAITEM_CAN_PAUSE = 0x4, + MFP_MEDIAITEM_HAS_SLOW_SEEK = 0x8 + } _MFP_MEDIAITEM_CHARACTERISTICS; + +typedef UINT32 MFP_CREDENTIAL_FLAGS; + +typedef /* [v1_enum] */ +enum _MFP_CREDENTIAL_FLAGS + { + MFP_CREDENTIAL_PROMPT = 0x1, + MFP_CREDENTIAL_SAVE = 0x2, + MFP_CREDENTIAL_DO_NOT_CACHE = 0x4, + MFP_CREDENTIAL_CLEAR_TEXT = 0x8, + MFP_CREDENTIAL_PROXY = 0x10, + MFP_CREDENTIAL_LOGGED_ON_USER = 0x20 + } _MFP_CREDENTIAL_FLAGS; + +typedef +enum MFP_EVENT_TYPE + { + MFP_EVENT_TYPE_PLAY = 0, + MFP_EVENT_TYPE_PAUSE = 1, + MFP_EVENT_TYPE_STOP = 2, + MFP_EVENT_TYPE_POSITION_SET = 3, + MFP_EVENT_TYPE_RATE_SET = 4, + MFP_EVENT_TYPE_MEDIAITEM_CREATED = 5, + MFP_EVENT_TYPE_MEDIAITEM_SET = 6, + MFP_EVENT_TYPE_FRAME_STEP = 7, + MFP_EVENT_TYPE_MEDIAITEM_CLEARED = 8, + MFP_EVENT_TYPE_MF = 9, + MFP_EVENT_TYPE_ERROR = 10, + MFP_EVENT_TYPE_PLAYBACK_ENDED = 11, + MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL = 12 + } MFP_EVENT_TYPE; + +typedef +enum MediaEventType + { + MEUnknown = 0, + MEError = 1, + MEExtendedType = 2, + MENonFatalError = 3, + MEGenericV1Anchor = MENonFatalError, + MESessionUnknown = 100, + MESessionTopologySet = 101, + MESessionTopologiesCleared = 102, + MESessionStarted = 103, + MESessionPaused = 104, + MESessionStopped = 105, + MESessionClosed = 106, + MESessionEnded = 107, + MESessionRateChanged = 108, + MESessionScrubSampleComplete = 109, + MESessionCapabilitiesChanged = 110, + MESessionTopologyStatus = 111, + MESessionNotifyPresentationTime = 112, + MENewPresentation = 113, + MELicenseAcquisitionStart = 114, + MELicenseAcquisitionCompleted = 115, + MEIndividualizationStart = 116, + MEIndividualizationCompleted = 117, + MEEnablerProgress = 118, + MEEnablerCompleted = 119, + MEPolicyError = 120, + MEPolicyReport = 121, + MEBufferingStarted = 122, + MEBufferingStopped = 123, + MEConnectStart = 124, + MEConnectEnd = 125, + MEReconnectStart = 126, + MEReconnectEnd = 127, + MERendererEvent = 128, + MESessionStreamSinkFormatChanged = 129, + MESessionV1Anchor = MESessionStreamSinkFormatChanged, + MESourceUnknown = 200, + MESourceStarted = 201, + MEStreamStarted = 202, + MESourceSeeked = 203, + MEStreamSeeked = 204, + MENewStream = 205, + MEUpdatedStream = 206, + MESourceStopped = 207, + MEStreamStopped = 208, + MESourcePaused = 209, + MEStreamPaused = 210, + MEEndOfPresentation = 211, + MEEndOfStream = 212, + MEMediaSample = 213, + MEStreamTick = 214, + MEStreamThinMode = 215, + MEStreamFormatChanged = 216, + MESourceRateChanged = 217, + MEEndOfPresentationSegment = 218, + MESourceCharacteristicsChanged = 219, + MESourceRateChangeRequested = 220, + MESourceMetadataChanged = 221, + MESequencerSourceTopologyUpdated = 222, + MESourceV1Anchor = MESequencerSourceTopologyUpdated, + MESinkUnknown = 300, + MEStreamSinkStarted = 301, + MEStreamSinkStopped = 302, + MEStreamSinkPaused = 303, + MEStreamSinkRateChanged = 304, + MEStreamSinkRequestSample = 305, + MEStreamSinkMarker = 306, + MEStreamSinkPrerolled = 307, + MEStreamSinkScrubSampleComplete = 308, + MEStreamSinkFormatChanged = 309, + MEStreamSinkDeviceChanged = 310, + MEQualityNotify = 311, + MESinkInvalidated = 312, + MEAudioSessionNameChanged = 313, + MEAudioSessionVolumeChanged = 314, + MEAudioSessionDeviceRemoved = 315, + MEAudioSessionServerShutdown = 316, + MEAudioSessionGroupingParamChanged = 317, + MEAudioSessionIconChanged = 318, + MEAudioSessionFormatChanged = 319, + MEAudioSessionDisconnected = 320, + MEAudioSessionExclusiveModeOverride = 321, + MESinkV1Anchor = MEAudioSessionExclusiveModeOverride, + MECaptureAudioSessionVolumeChanged = 322, + MECaptureAudioSessionDeviceRemoved = 323, + MECaptureAudioSessionFormatChanged = 324, + MECaptureAudioSessionDisconnected = 325, + MECaptureAudioSessionExclusiveModeOverride = 326, + MECaptureAudioSessionServerShutdown = 327, + MESinkV2Anchor = MECaptureAudioSessionServerShutdown, + METrustUnknown = 400, + MEPolicyChanged = 401, + MEContentProtectionMessage = 402, + MEPolicySet = 403, + METrustV1Anchor = MEPolicySet, + MEWMDRMLicenseBackupCompleted = 500, + MEWMDRMLicenseBackupProgress = 501, + MEWMDRMLicenseRestoreCompleted = 502, + MEWMDRMLicenseRestoreProgress = 503, + MEWMDRMLicenseAcquisitionCompleted = 506, + MEWMDRMIndividualizationCompleted = 508, + MEWMDRMIndividualizationProgress = 513, + MEWMDRMProximityCompleted = 514, + MEWMDRMLicenseStoreCleaned = 515, + MEWMDRMRevocationDownloadCompleted = 516, + MEWMDRMV1Anchor = MEWMDRMRevocationDownloadCompleted, + METransformUnknown = 600, + METransformNeedInput = ( METransformUnknown + 1 ) , + METransformHaveOutput = ( METransformNeedInput + 1 ) , + METransformDrainComplete = ( METransformHaveOutput + 1 ) , + METransformMarker = ( METransformDrainComplete + 1 ) , + METransformInputStreamStateChanged = ( METransformMarker + 1 ) , + MEByteStreamCharacteristicsChanged = 700, + MEVideoCaptureDeviceRemoved = 800, + MEVideoCaptureDevicePreempted = 801, + MEStreamSinkFormatInvalidated = 802, + MEEncodingParameters = 803, + MEContentProtectionMetadata = 900, + MEDeviceThermalStateChanged = 950, + MEReservedMax = 10000 + } MediaEventType; + +typedef +enum MFVideoAspectRatioMode + { + MFVideoARMode_None = 0, + MFVideoARMode_PreservePicture = 0x1, + MFVideoARMode_PreservePixel = 0x2, + MFVideoARMode_NonLinearStretch = 0x4, + MFVideoARMode_Mask = 0x7 + } MFVideoAspectRatioMode; + +typedef +enum _MFVideoInterlaceMode + { + MFVideoInterlace_Unknown = 0, + MFVideoInterlace_Progressive = 2, + MFVideoInterlace_FieldInterleavedUpperFirst = 3, + MFVideoInterlace_FieldInterleavedLowerFirst = 4, + MFVideoInterlace_FieldSingleUpper = 5, + MFVideoInterlace_FieldSingleLower = 6, + MFVideoInterlace_MixedInterlaceOrProgressive = 7, + MFVideoInterlace_Last = ( MFVideoInterlace_MixedInterlaceOrProgressive + 1 ) , + MFVideoInterlace_ForceDWORD = 0x7fffffff + } MFVideoInterlaceMode; + +#ifndef _MFP_STREAM_RECORD_ +#define _MFP_STREAM_RECORD_ +typedef struct MFP_STREAM_RECORD + DWORD dwStreamID; + BOOL bSelected; + BYTE szStreamLang[STREAMLANG_LENGTH+4]; + BYTE szStreamName[STREAMNAME_LENGTH+4]; + DWORD dwMajorType; + DWORD dwSubType; + DWORD dwBitRate; + union { + struct { + DWORD dwChannels; + DWORD dwSpeakers; + DWORD dwBitsPerSample; + DWORD dwSamplesPerSec; + } AudioSteamInfo; + struct { + DWORD dwFrameRate; + DWORD dwFrameWidth; + DWORD dwFrameHeight; + DWORD dwInterlace; + } VideoStreamInfo; + } StreamInfo; +} MFP_STREAM_RECORD; +#endif + +#ifndef _MFP_EVENT_HEADER_ +#define _MFP_EVENT_HEADER_ +typedef struct MFP_EVENT_HEADER + { + MFP_EVENT_TYPE eEventType; + HRESULT hrEvent; + IMFPMediaPlayer *pMediaPlayer; + MFP_MEDIAPLAYER_STATE eState; + IPropertyStore *pPropertyStore; + } MFP_EVENT_HEADER; +#endif + +#ifndef _MFP_PLAY_EVENT_ +#define _MFP_PLAY_EVENT_ +typedef struct MFP_PLAY_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAY_EVENT; +#endif + +#ifndef _MFP_PAUSE_EVENT_ +#define _MFP_PAUSE_EVENT_ +typedef struct MFP_PAUSE_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PAUSE_EVENT; +#endif + +#ifndef _MFP_STOP_EVENT_ +#define _MFP_STOP_EVENT_ +typedef struct MFP_STOP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_STOP_EVENT; +#endif + +#ifndef _MFP_POSITION_SET_EVENT_ +#define _MFP_POSITION_SET_EVENT_ +typedef struct MFP_POSITION_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_POSITION_SET_EVENT; +#endif + +#ifndef _MFP_RATE_SET_EVENT_ +#define _MFP_RATE_SET_EVENT_ +typedef struct MFP_RATE_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + float flRate; + } MFP_RATE_SET_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CREATED_EVENT_ +#define _MFP_MEDIAITEM_CREATED_EVENT_ +typedef struct MFP_MEDIAITEM_CREATED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + DWORD_PTR dwUserData; + } MFP_MEDIAITEM_CREATED_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_SET_EVENT_ +#define _MFP_MEDIAITEM_SET_EVENT_ +typedef struct MFP_MEDIAITEM_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_SET_EVENT; +#endif + +#ifndef _MFP_FRAME_STEP_EVENT_ +#define _MFP_FRAME_STEP_EVENT_ +typedef struct MFP_FRAME_STEP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_FRAME_STEP_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CLEARED_EVENT_ +#define _MFP_MEDIAITEM_CLEARED_EVENT_ +typedef struct MFP_MEDIAITEM_CLEARED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_CLEARED_EVENT; +#endif + +#ifndef _MFP_MF_EVENT_ +#define _MFP_MF_EVENT_ +typedef struct MFP_MF_EVENT + { + MFP_EVENT_HEADER header; + MediaEventType MFEventType; + IMFMediaEvent *pMFMediaEvent; + IMFPMediaItem *pMediaItem; + } MFP_MF_EVENT; +#endif + +#ifndef _MFP_ERROR_EVENT_ +#define _MFP_ERROR_EVENT_ +typedef struct MFP_ERROR_EVENT + { + MFP_EVENT_HEADER header; + } MFP_ERROR_EVENT; +#endif + +#ifndef _MFP_PLAYBACK_ENDED_EVENT_ +#define _MFP_PLAYBACK_ENDED_EVENT_ +typedef struct MFP_PLAYBACK_ENDED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAYBACK_ENDED_EVENT; +#endif + +#ifndef _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +#define _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT + { + MFP_EVENT_HEADER header; + DWORD_PTR dwUserData; + BOOL fProceedWithAuthentication; + HRESULT hrAuthenticationStatus; + LPCWSTR pwszURL; + LPCWSTR pwszSite; + LPCWSTR pwszRealm; + LPCWSTR pwszPackage; + LONG nRetries; + MFP_CREDENTIAL_FLAGS flags; + IMFNetCredential *pCredential; + } MFP_ACQUIRE_USER_CREDENTIAL_EVENT; +#endif + +#ifndef _MFVideoNormalizedRect_ +#define _MFVideoNormalizedRect_ +typedef struct MFVideoNormalizedRect + { + float left; + float top; + float right; + float bottom; + } MFVideoNormalizedRect; +#endif + + +/*------------------------------------------------------------------------------ +// MFPlayer Library Function Prototypes +//----------------------------------------------------------------------------*/ + +// MFPMediaPlayer Functions: +bool MFP_EXPORT MFPMediaPlayer_Init(HWND hMFPWindow, void *pCallback, IMFPMediaPlayer **ppMediaPlayer); +void MFP_EXPORT MFPMediaPlayer_Free(IMFPMediaPlayer **ppMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_Play(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Pause(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Stop(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Step(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Toggle(IMFPMediaPlayer *pMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_ClearMediaItem(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaPlayer_GetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemA(IMFPMediaPlayer *pMediaPlayer, LPCSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemW(IMFPMediaPlayer *pMediaPlayer, LPCWSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemFromObject(IMFPMediaPlayer *pMediaPlayer, IUnknown *pIUnknownObj, DWORD dwUserData, IMFPMediaItem **ppMediaItem); + +bool MFP_EXPORT MFPMediaPlayer_GetState(IMFPMediaPlayer *pMediaPlayer, MFP_MEDIAPLAYER_STATE *peState); +bool MFP_EXPORT MFPMediaPlayer_SetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD dwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetDuration(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwMilliseconds); + +bool MFP_EXPORT MFPMediaPlayer_SetRate(IMFPMediaPlayer *pMediaPlayer, DWORD dwRate); +bool MFP_EXPORT MFPMediaPlayer_GetRate(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwRate); +bool MFP_EXPORT MFPMediaPlayer_GetSupportedRates(IMFPMediaPlayer *pMediaPlayer, BOOL bForwardDirection, DWORD_PTR *pdwSlowestRate, DWORD_PTR *pdwFastestRate); + +bool MFP_EXPORT MFPMediaPlayer_GetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwVolume); +bool MFP_EXPORT MFPMediaPlayer_SetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD dwVolume); +bool MFP_EXPORT MFPMediaPlayer_GetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwBalance); +bool MFP_EXPORT MFPMediaPlayer_SetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD dwBalance); +bool MFP_EXPORT MFPMediaPlayer_GetMute(IMFPMediaPlayer *pMediaPlayer, BOOL *pbMute); +bool MFP_EXPORT MFPMediaPlayer_SetMute(IMFPMediaPlayer *pMediaPlayer, BOOL bMute); + +bool MFP_EXPORT MFPMediaPlayer_GetNativeVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszVideo, SIZE *pszARVideo); +bool MFP_EXPORT MFPMediaPlayer_GetIdealVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszMin, SIZE *pszMax); +bool MFP_EXPORT MFPMediaPlayer_SetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, const MFVideoNormalizedRect *pnrcSource); +bool MFP_EXPORT MFPMediaPlayer_GetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, MFVideoNormalizedRect *pnrcSource); + +bool MFP_EXPORT MFPMediaPlayer_SetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD dwAspectRatioMode); +bool MFP_EXPORT MFPMediaPlayer_GetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwAspectRatioMode); + +bool MFP_EXPORT MFPMediaPlayer_GetVideoWindow(IMFPMediaPlayer *pMediaPlayer, HWND *phwndVideo); +bool MFP_EXPORT MFPMediaPlayer_UpdateVideo(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF Color); +bool MFP_EXPORT MFPMediaPlayer_GetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF *pColor); + +bool MFP_EXPORT MFPMediaPlayer_InsertEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect, BOOL bOptional); +bool MFP_EXPORT MFPMediaPlayer_RemoveEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect); +bool MFP_EXPORT MFPMediaPlayer_RemoveAllEffects(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Shutdown(IMFPMediaPlayer *pMediaPlayer); + +// MFPMediaItem Functions: +bool MFP_EXPORT MFPMediaItem_Release(IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaItem_GetMediaPlayer(IMFPMediaItem *pMediaItem, IMFPMediaPlayer **ppMediaPlayer); +bool MFP_EXPORT MFPMediaItem_GetURLA(IMFPMediaItem *pMediaItem, LPSTR *ppszURL); +bool MFP_EXPORT MFPMediaItem_GetURLW(IMFPMediaItem *pMediaItem, LPWSTR *ppszURL); + +bool MFP_EXPORT MFPMediaItem_SetUserData(IMFPMediaItem *pMediaItem, DWORD dwUserData); +bool MFP_EXPORT MFPMediaItem_GetUserData(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwUserData); + +bool MFP_EXPORT MFPMediaItem_SetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD dwStartValue, DWORD dwStopValue); +bool MFP_EXPORT MFPMediaItem_GetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStartValue, DWORD_PTR *pdwStopValue); + +bool MFP_EXPORT MFPMediaItem_HasVideo(IMFPMediaItem *pMediaItem, BOOL *pbHasVideo, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_HasAudio(IMFPMediaItem *pMediaItem, BOOL *pbHasAudio, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_IsProtected(IMFPMediaItem *pMediaItem, BOOL *pbProtected); + +bool MFP_EXPORT MFPMediaItem_GetDuration(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwMilliseconds); +bool MFP_EXPORT MFPMediaItem_GetNumberOfStreams(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStreamCount); +bool MFP_EXPORT MFPMediaItem_SetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL bEnabled); +bool MFP_EXPORT MFPMediaItem_GetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL *pbEnabled); + +bool MFP_EXPORT MFPMediaItem_GetStreamAttribute(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetPresentationAttribute(IMFPMediaItem *pMediaItem, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetCharacteristics(IMFPMediaItem *pMediaItem, MFP_MEDIAITEM_CHARACTERISTICS *pCharacteristics); +bool MFP_EXPORT MFPMediaItem_GetMetadata(IMFPMediaItem *pMediaItem, IPropertyStore **ppMetadataStore); + +bool MFP_EXPORT MFPMediaItem_SetStreamSink(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, IUnknown *pMediaSink); + +// Media Information +bool MFP_EXPORT MFPMediaItem_StreamTable(IMFPMediaItem *pMediaItem, DWORD_PTR *lpdwStreamCount, DWORD64 *lpqwStreamTable); + +// Misc +bool MFP_EXPORT MFPConvertMSTimeToTimeStringA(dwMilliseconds:DWORD, LPSTR *lpszTime:DWORD, DWORD dwTimeFormat); +bool MFP_EXPORT MFPConvertMSTimeToTimeStringW(dwMilliseconds:DWORD, LPWSTR *lpszTime:DWORD, DWORD dwTimeFormat); + +LPSTR * MFP_EXPORT MFPConvertStringToAnsi(LPWSTR *lpszWideString); +LPWSTR * MFP_EXPORT MFPConvertStringToWide(LPSTR *lpszAnsiString); +void MFP_EXPORT MFPConvertStringFree(LPWSTR *lpString); + +#ifdef UNICODE +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemW +#define MFPMediaItem_GetURL MFPMediaItem_GetURLW +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringW +#else // ANSI +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemA +#define MFPMediaItem_GetURL MFPMediaItem_GetURLA +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringA +#endif + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/MFPlayer-x86/MFPlayer.h b/MFPlayer-x86/MFPlayer.h new file mode 100644 index 0000000..b343be5 --- /dev/null +++ b/MFPlayer-x86/MFPlayer.h @@ -0,0 +1,533 @@ +//============================================================================== +// +// MFPlayer x86 Library +// +// http://github.com/mrfearless +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the author be held liable for any damages arising from the +// use of this software. +// +//============================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef _MSC_VER // MSVC compiler +#define MFP_EXPORT __declspec(dllexport) __stdcall +#else +#define MFP_EXPORT +#endif + +//------------------------------------------------------------------------------ +// MFPMediaPlayer Constants, Enums, Structures, Etc +//------------------------------------------------------------------------------ +#ifndef HRESULT +typedef HRESULT TYPEDEF DWORD +#endif + +#define STREAMLANG_LENGTH 28 +#define STREAMNAME_LENGTH 28 + +typedef UINT32 MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum _MFP_CREATION_OPTIONS + { + MFP_OPTION_NONE = 0, + MFP_OPTION_FREE_THREADED_CALLBACK = 0x1, + MFP_OPTION_NO_MMCSS = 0x2, + MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION = 0x4 + } _MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum MFP_MEDIAPLAYER_STATE + { + MFP_MEDIAPLAYER_STATE_EMPTY = 0, + MFP_MEDIAPLAYER_STATE_STOPPED = 0x1, + MFP_MEDIAPLAYER_STATE_PLAYING = 0x2, + MFP_MEDIAPLAYER_STATE_PAUSED = 0x3, + MFP_MEDIAPLAYER_STATE_SHUTDOWN = 0x4 + } MFP_MEDIAPLAYER_STATE; + +typedef UINT32 MFP_MEDIAITEM_CHARACTERISTICS; + +typedef /* [v1_enum] */ +enum _MFP_MEDIAITEM_CHARACTERISTICS + { + MFP_MEDIAITEM_IS_LIVE = 0x1, + MFP_MEDIAITEM_CAN_SEEK = 0x2, + MFP_MEDIAITEM_CAN_PAUSE = 0x4, + MFP_MEDIAITEM_HAS_SLOW_SEEK = 0x8 + } _MFP_MEDIAITEM_CHARACTERISTICS; + +typedef UINT32 MFP_CREDENTIAL_FLAGS; + +typedef /* [v1_enum] */ +enum _MFP_CREDENTIAL_FLAGS + { + MFP_CREDENTIAL_PROMPT = 0x1, + MFP_CREDENTIAL_SAVE = 0x2, + MFP_CREDENTIAL_DO_NOT_CACHE = 0x4, + MFP_CREDENTIAL_CLEAR_TEXT = 0x8, + MFP_CREDENTIAL_PROXY = 0x10, + MFP_CREDENTIAL_LOGGED_ON_USER = 0x20 + } _MFP_CREDENTIAL_FLAGS; + +typedef +enum MFP_EVENT_TYPE + { + MFP_EVENT_TYPE_PLAY = 0, + MFP_EVENT_TYPE_PAUSE = 1, + MFP_EVENT_TYPE_STOP = 2, + MFP_EVENT_TYPE_POSITION_SET = 3, + MFP_EVENT_TYPE_RATE_SET = 4, + MFP_EVENT_TYPE_MEDIAITEM_CREATED = 5, + MFP_EVENT_TYPE_MEDIAITEM_SET = 6, + MFP_EVENT_TYPE_FRAME_STEP = 7, + MFP_EVENT_TYPE_MEDIAITEM_CLEARED = 8, + MFP_EVENT_TYPE_MF = 9, + MFP_EVENT_TYPE_ERROR = 10, + MFP_EVENT_TYPE_PLAYBACK_ENDED = 11, + MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL = 12 + } MFP_EVENT_TYPE; + +typedef +enum MediaEventType + { + MEUnknown = 0, + MEError = 1, + MEExtendedType = 2, + MENonFatalError = 3, + MEGenericV1Anchor = MENonFatalError, + MESessionUnknown = 100, + MESessionTopologySet = 101, + MESessionTopologiesCleared = 102, + MESessionStarted = 103, + MESessionPaused = 104, + MESessionStopped = 105, + MESessionClosed = 106, + MESessionEnded = 107, + MESessionRateChanged = 108, + MESessionScrubSampleComplete = 109, + MESessionCapabilitiesChanged = 110, + MESessionTopologyStatus = 111, + MESessionNotifyPresentationTime = 112, + MENewPresentation = 113, + MELicenseAcquisitionStart = 114, + MELicenseAcquisitionCompleted = 115, + MEIndividualizationStart = 116, + MEIndividualizationCompleted = 117, + MEEnablerProgress = 118, + MEEnablerCompleted = 119, + MEPolicyError = 120, + MEPolicyReport = 121, + MEBufferingStarted = 122, + MEBufferingStopped = 123, + MEConnectStart = 124, + MEConnectEnd = 125, + MEReconnectStart = 126, + MEReconnectEnd = 127, + MERendererEvent = 128, + MESessionStreamSinkFormatChanged = 129, + MESessionV1Anchor = MESessionStreamSinkFormatChanged, + MESourceUnknown = 200, + MESourceStarted = 201, + MEStreamStarted = 202, + MESourceSeeked = 203, + MEStreamSeeked = 204, + MENewStream = 205, + MEUpdatedStream = 206, + MESourceStopped = 207, + MEStreamStopped = 208, + MESourcePaused = 209, + MEStreamPaused = 210, + MEEndOfPresentation = 211, + MEEndOfStream = 212, + MEMediaSample = 213, + MEStreamTick = 214, + MEStreamThinMode = 215, + MEStreamFormatChanged = 216, + MESourceRateChanged = 217, + MEEndOfPresentationSegment = 218, + MESourceCharacteristicsChanged = 219, + MESourceRateChangeRequested = 220, + MESourceMetadataChanged = 221, + MESequencerSourceTopologyUpdated = 222, + MESourceV1Anchor = MESequencerSourceTopologyUpdated, + MESinkUnknown = 300, + MEStreamSinkStarted = 301, + MEStreamSinkStopped = 302, + MEStreamSinkPaused = 303, + MEStreamSinkRateChanged = 304, + MEStreamSinkRequestSample = 305, + MEStreamSinkMarker = 306, + MEStreamSinkPrerolled = 307, + MEStreamSinkScrubSampleComplete = 308, + MEStreamSinkFormatChanged = 309, + MEStreamSinkDeviceChanged = 310, + MEQualityNotify = 311, + MESinkInvalidated = 312, + MEAudioSessionNameChanged = 313, + MEAudioSessionVolumeChanged = 314, + MEAudioSessionDeviceRemoved = 315, + MEAudioSessionServerShutdown = 316, + MEAudioSessionGroupingParamChanged = 317, + MEAudioSessionIconChanged = 318, + MEAudioSessionFormatChanged = 319, + MEAudioSessionDisconnected = 320, + MEAudioSessionExclusiveModeOverride = 321, + MESinkV1Anchor = MEAudioSessionExclusiveModeOverride, + MECaptureAudioSessionVolumeChanged = 322, + MECaptureAudioSessionDeviceRemoved = 323, + MECaptureAudioSessionFormatChanged = 324, + MECaptureAudioSessionDisconnected = 325, + MECaptureAudioSessionExclusiveModeOverride = 326, + MECaptureAudioSessionServerShutdown = 327, + MESinkV2Anchor = MECaptureAudioSessionServerShutdown, + METrustUnknown = 400, + MEPolicyChanged = 401, + MEContentProtectionMessage = 402, + MEPolicySet = 403, + METrustV1Anchor = MEPolicySet, + MEWMDRMLicenseBackupCompleted = 500, + MEWMDRMLicenseBackupProgress = 501, + MEWMDRMLicenseRestoreCompleted = 502, + MEWMDRMLicenseRestoreProgress = 503, + MEWMDRMLicenseAcquisitionCompleted = 506, + MEWMDRMIndividualizationCompleted = 508, + MEWMDRMIndividualizationProgress = 513, + MEWMDRMProximityCompleted = 514, + MEWMDRMLicenseStoreCleaned = 515, + MEWMDRMRevocationDownloadCompleted = 516, + MEWMDRMV1Anchor = MEWMDRMRevocationDownloadCompleted, + METransformUnknown = 600, + METransformNeedInput = ( METransformUnknown + 1 ) , + METransformHaveOutput = ( METransformNeedInput + 1 ) , + METransformDrainComplete = ( METransformHaveOutput + 1 ) , + METransformMarker = ( METransformDrainComplete + 1 ) , + METransformInputStreamStateChanged = ( METransformMarker + 1 ) , + MEByteStreamCharacteristicsChanged = 700, + MEVideoCaptureDeviceRemoved = 800, + MEVideoCaptureDevicePreempted = 801, + MEStreamSinkFormatInvalidated = 802, + MEEncodingParameters = 803, + MEContentProtectionMetadata = 900, + MEDeviceThermalStateChanged = 950, + MEReservedMax = 10000 + } MediaEventType; + +typedef +enum MFVideoAspectRatioMode + { + MFVideoARMode_None = 0, + MFVideoARMode_PreservePicture = 0x1, + MFVideoARMode_PreservePixel = 0x2, + MFVideoARMode_NonLinearStretch = 0x4, + MFVideoARMode_Mask = 0x7 + } MFVideoAspectRatioMode; + +typedef +enum _MFVideoInterlaceMode + { + MFVideoInterlace_Unknown = 0, + MFVideoInterlace_Progressive = 2, + MFVideoInterlace_FieldInterleavedUpperFirst = 3, + MFVideoInterlace_FieldInterleavedLowerFirst = 4, + MFVideoInterlace_FieldSingleUpper = 5, + MFVideoInterlace_FieldSingleLower = 6, + MFVideoInterlace_MixedInterlaceOrProgressive = 7, + MFVideoInterlace_Last = ( MFVideoInterlace_MixedInterlaceOrProgressive + 1 ) , + MFVideoInterlace_ForceDWORD = 0x7fffffff + } MFVideoInterlaceMode; + +#ifndef _MFP_STREAM_RECORD_ +#define _MFP_STREAM_RECORD_ +typedef struct MFP_STREAM_RECORD + DWORD dwStreamID; + BOOL bSelected; + BYTE szStreamLang[STREAMLANG_LENGTH+4]; + BYTE szStreamName[STREAMNAME_LENGTH+4]; + DWORD dwMajorType; + DWORD dwSubType; + DWORD dwBitRate; + union { + struct { + DWORD dwChannels; + DWORD dwSpeakers; + DWORD dwBitsPerSample; + DWORD dwSamplesPerSec; + } AudioSteamInfo; + struct { + DWORD dwFrameRate; + DWORD dwFrameWidth; + DWORD dwFrameHeight; + DWORD dwInterlace; + } VideoStreamInfo; + } StreamInfo; +} MFP_STREAM_RECORD; +#endif + +#ifndef _MFP_EVENT_HEADER_ +#define _MFP_EVENT_HEADER_ +typedef struct MFP_EVENT_HEADER + { + MFP_EVENT_TYPE eEventType; + HRESULT hrEvent; + IMFPMediaPlayer *pMediaPlayer; + MFP_MEDIAPLAYER_STATE eState; + IPropertyStore *pPropertyStore; + } MFP_EVENT_HEADER; +#endif + +#ifndef _MFP_PLAY_EVENT_ +#define _MFP_PLAY_EVENT_ +typedef struct MFP_PLAY_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAY_EVENT; +#endif + +#ifndef _MFP_PAUSE_EVENT_ +#define _MFP_PAUSE_EVENT_ +typedef struct MFP_PAUSE_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PAUSE_EVENT; +#endif + +#ifndef _MFP_STOP_EVENT_ +#define _MFP_STOP_EVENT_ +typedef struct MFP_STOP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_STOP_EVENT; +#endif + +#ifndef _MFP_POSITION_SET_EVENT_ +#define _MFP_POSITION_SET_EVENT_ +typedef struct MFP_POSITION_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_POSITION_SET_EVENT; +#endif + +#ifndef _MFP_RATE_SET_EVENT_ +#define _MFP_RATE_SET_EVENT_ +typedef struct MFP_RATE_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + float flRate; + } MFP_RATE_SET_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CREATED_EVENT_ +#define _MFP_MEDIAITEM_CREATED_EVENT_ +typedef struct MFP_MEDIAITEM_CREATED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + DWORD_PTR dwUserData; + } MFP_MEDIAITEM_CREATED_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_SET_EVENT_ +#define _MFP_MEDIAITEM_SET_EVENT_ +typedef struct MFP_MEDIAITEM_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_SET_EVENT; +#endif + +#ifndef _MFP_FRAME_STEP_EVENT_ +#define _MFP_FRAME_STEP_EVENT_ +typedef struct MFP_FRAME_STEP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_FRAME_STEP_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CLEARED_EVENT_ +#define _MFP_MEDIAITEM_CLEARED_EVENT_ +typedef struct MFP_MEDIAITEM_CLEARED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_CLEARED_EVENT; +#endif + +#ifndef _MFP_MF_EVENT_ +#define _MFP_MF_EVENT_ +typedef struct MFP_MF_EVENT + { + MFP_EVENT_HEADER header; + MediaEventType MFEventType; + IMFMediaEvent *pMFMediaEvent; + IMFPMediaItem *pMediaItem; + } MFP_MF_EVENT; +#endif + +#ifndef _MFP_ERROR_EVENT_ +#define _MFP_ERROR_EVENT_ +typedef struct MFP_ERROR_EVENT + { + MFP_EVENT_HEADER header; + } MFP_ERROR_EVENT; +#endif + +#ifndef _MFP_PLAYBACK_ENDED_EVENT_ +#define _MFP_PLAYBACK_ENDED_EVENT_ +typedef struct MFP_PLAYBACK_ENDED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAYBACK_ENDED_EVENT; +#endif + +#ifndef _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +#define _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT + { + MFP_EVENT_HEADER header; + DWORD_PTR dwUserData; + BOOL fProceedWithAuthentication; + HRESULT hrAuthenticationStatus; + LPCWSTR pwszURL; + LPCWSTR pwszSite; + LPCWSTR pwszRealm; + LPCWSTR pwszPackage; + LONG nRetries; + MFP_CREDENTIAL_FLAGS flags; + IMFNetCredential *pCredential; + } MFP_ACQUIRE_USER_CREDENTIAL_EVENT; +#endif + +#ifndef _MFVideoNormalizedRect_ +#define _MFVideoNormalizedRect_ +typedef struct MFVideoNormalizedRect + { + float left; + float top; + float right; + float bottom; + } MFVideoNormalizedRect; +#endif + + +/*------------------------------------------------------------------------------ +// MFPlayer Library Function Prototypes +//----------------------------------------------------------------------------*/ + +// MFPMediaPlayer Functions: +bool MFP_EXPORT MFPMediaPlayer_Init(HWND hMFPWindow, void *pCallback, IMFPMediaPlayer **ppMediaPlayer); +void MFP_EXPORT MFPMediaPlayer_Free(IMFPMediaPlayer **ppMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_Play(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Pause(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Stop(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Step(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Toggle(IMFPMediaPlayer *pMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_ClearMediaItem(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaPlayer_GetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemA(IMFPMediaPlayer *pMediaPlayer, LPCSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemW(IMFPMediaPlayer *pMediaPlayer, LPCWSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemFromObject(IMFPMediaPlayer *pMediaPlayer, IUnknown *pIUnknownObj, DWORD dwUserData, IMFPMediaItem **ppMediaItem); + +bool MFP_EXPORT MFPMediaPlayer_GetState(IMFPMediaPlayer *pMediaPlayer, MFP_MEDIAPLAYER_STATE *peState); +bool MFP_EXPORT MFPMediaPlayer_SetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD dwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetDuration(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwMilliseconds); + +bool MFP_EXPORT MFPMediaPlayer_SetRate(IMFPMediaPlayer *pMediaPlayer, DWORD dwRate); +bool MFP_EXPORT MFPMediaPlayer_GetRate(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwRate); +bool MFP_EXPORT MFPMediaPlayer_GetSupportedRates(IMFPMediaPlayer *pMediaPlayer, BOOL bForwardDirection, DWORD *pdwSlowestRate, DWORD *pdwFastestRate); + +bool MFP_EXPORT MFPMediaPlayer_GetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwVolume); +bool MFP_EXPORT MFPMediaPlayer_SetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD dwVolume); +bool MFP_EXPORT MFPMediaPlayer_GetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwBalance); +bool MFP_EXPORT MFPMediaPlayer_SetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD dwBalance); +bool MFP_EXPORT MFPMediaPlayer_GetMute(IMFPMediaPlayer *pMediaPlayer, BOOL *pbMute); +bool MFP_EXPORT MFPMediaPlayer_SetMute(IMFPMediaPlayer *pMediaPlayer, BOOL bMute); + +bool MFP_EXPORT MFPMediaPlayer_GetNativeVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszVideo, SIZE *pszARVideo); +bool MFP_EXPORT MFPMediaPlayer_GetIdealVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszMin, SIZE *pszMax); +bool MFP_EXPORT MFPMediaPlayer_SetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, const MFVideoNormalizedRect *pnrcSource); +bool MFP_EXPORT MFPMediaPlayer_GetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, MFVideoNormalizedRect *pnrcSource); + +bool MFP_EXPORT MFPMediaPlayer_SetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD dwAspectRatioMode); +bool MFP_EXPORT MFPMediaPlayer_GetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwAspectRatioMode); + +bool MFP_EXPORT MFPMediaPlayer_GetVideoWindow(IMFPMediaPlayer *pMediaPlayer, HWND *phwndVideo); +bool MFP_EXPORT MFPMediaPlayer_UpdateVideo(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF Color); +bool MFP_EXPORT MFPMediaPlayer_GetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF *pColor); + +bool MFP_EXPORT MFPMediaPlayer_InsertEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect, BOOL bOptional); +bool MFP_EXPORT MFPMediaPlayer_RemoveEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect); +bool MFP_EXPORT MFPMediaPlayer_RemoveAllEffects(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Shutdown(IMFPMediaPlayer *pMediaPlayer); + +// MFPMediaItem Functions: +bool MFP_EXPORT MFPMediaItem_Release(IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaItem_GetMediaPlayer(IMFPMediaItem *pMediaItem, IMFPMediaPlayer **ppMediaPlayer); +bool MFP_EXPORT MFPMediaItem_GetURLA(IMFPMediaItem *pMediaItem, LPSTR *ppszURL); +bool MFP_EXPORT MFPMediaItem_GetURLW(IMFPMediaItem *pMediaItem, LPWSTR *ppszURL); + +bool MFP_EXPORT MFPMediaItem_SetUserData(IMFPMediaItem *pMediaItem, DWORD dwUserData); +bool MFP_EXPORT MFPMediaItem_GetUserData(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwUserData); + +bool MFP_EXPORT MFPMediaItem_SetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD dwStartValue, DWORD dwStopValue); +bool MFP_EXPORT MFPMediaItem_GetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStartValue, DWORD_PTR *pdwStopValue); + +bool MFP_EXPORT MFPMediaItem_HasVideo(IMFPMediaItem *pMediaItem, BOOL *pbHasVideo, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_HasAudio(IMFPMediaItem *pMediaItem, BOOL *pbHasAudio, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_IsProtected(IMFPMediaItem *pMediaItem, BOOL *pbProtected); + +bool MFP_EXPORT MFPMediaItem_GetDuration(IMFPMediaItem *pMediaItem, DWORD *pdwMilliseconds); +bool MFP_EXPORT MFPMediaItem_GetNumberOfStreams(IMFPMediaItem *pMediaItem, DWORD *pdwStreamCount); +bool MFP_EXPORT MFPMediaItem_SetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL bEnabled); +bool MFP_EXPORT MFPMediaItem_GetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL *pbEnabled); + +bool MFP_EXPORT MFPMediaItem_GetStreamAttribute(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetPresentationAttribute(IMFPMediaItem *pMediaItem, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetCharacteristics(IMFPMediaItem *pMediaItem, MFP_MEDIAITEM_CHARACTERISTICS *pCharacteristics); +bool MFP_EXPORT MFPMediaItem_GetMetadata(IMFPMediaItem *pMediaItem, IPropertyStore **ppMetadataStore); + +bool MFP_EXPORT MFPMediaItem_SetStreamSink(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, IUnknown *pMediaSink); + +// Media Information +bool MFP_EXPORT MFPMediaItem_StreamTable(IMFPMediaItem *pMediaItem, DWORD *lpdwStreamCount, DWORD *lpdwStreamTable); + +// Misc +bool MFP_EXPORT MFPConvertMSTimeToTimeStringA(dwMilliseconds:DWORD, LPSTR *lpszTime:DWORD, DWORD dwTimeFormat); +bool MFP_EXPORT MFPConvertMSTimeToTimeStringW(dwMilliseconds:DWORD, LPWSTR *lpszTime:DWORD, DWORD dwTimeFormat); + +LPSTR * MFP_EXPORT MFPConvertStringToAnsi(LPWSTR *lpszWideString); +LPWSTR * MFP_EXPORT MFPConvertStringToWide(LPSTR *lpszAnsiString); +void MFP_EXPORT MFPConvertStringFree(LPWSTR *lpString); + +#ifdef UNICODE +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemW +#define MFPMediaItem_GetURL MFPMediaItem_GetURLW +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringW +#else // ANSI +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemA +#define MFPMediaItem_GetURL MFPMediaItem_GetURLA +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringA +#endif + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/MFPlayerDll-x64/MFPlayer.dll b/MFPlayerDll-x64/MFPlayer.dll new file mode 100644 index 0000000..3e6976e Binary files /dev/null and b/MFPlayerDll-x64/MFPlayer.dll differ diff --git a/MFPlayerDll-x64/MFPlayer.h b/MFPlayerDll-x64/MFPlayer.h new file mode 100644 index 0000000..d5b8a98 --- /dev/null +++ b/MFPlayerDll-x64/MFPlayer.h @@ -0,0 +1,533 @@ +//============================================================================== +// +// MFPlayer x64 Library +// +// http://github.com/mrfearless +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the author be held liable for any damages arising from the +// use of this software. +// +//============================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef _MSC_VER // MSVC compiler +#define MFP_EXPORT __declspec(dllexport) __fastcall +#else +#define MFP_EXPORT +#endif + +//------------------------------------------------------------------------------ +// MFPMediaPlayer Constants, Enums, Structures, Etc +//------------------------------------------------------------------------------ +#ifndef HRESULT +typedef HRESULT TYPEDEF DWORD +#endif + +#define STREAMLANG_LENGTH 28 +#define STREAMNAME_LENGTH 28 + +typedef UINT32 MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum _MFP_CREATION_OPTIONS + { + MFP_OPTION_NONE = 0, + MFP_OPTION_FREE_THREADED_CALLBACK = 0x1, + MFP_OPTION_NO_MMCSS = 0x2, + MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION = 0x4 + } _MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum MFP_MEDIAPLAYER_STATE + { + MFP_MEDIAPLAYER_STATE_EMPTY = 0, + MFP_MEDIAPLAYER_STATE_STOPPED = 0x1, + MFP_MEDIAPLAYER_STATE_PLAYING = 0x2, + MFP_MEDIAPLAYER_STATE_PAUSED = 0x3, + MFP_MEDIAPLAYER_STATE_SHUTDOWN = 0x4 + } MFP_MEDIAPLAYER_STATE; + +typedef UINT32 MFP_MEDIAITEM_CHARACTERISTICS; + +typedef /* [v1_enum] */ +enum _MFP_MEDIAITEM_CHARACTERISTICS + { + MFP_MEDIAITEM_IS_LIVE = 0x1, + MFP_MEDIAITEM_CAN_SEEK = 0x2, + MFP_MEDIAITEM_CAN_PAUSE = 0x4, + MFP_MEDIAITEM_HAS_SLOW_SEEK = 0x8 + } _MFP_MEDIAITEM_CHARACTERISTICS; + +typedef UINT32 MFP_CREDENTIAL_FLAGS; + +typedef /* [v1_enum] */ +enum _MFP_CREDENTIAL_FLAGS + { + MFP_CREDENTIAL_PROMPT = 0x1, + MFP_CREDENTIAL_SAVE = 0x2, + MFP_CREDENTIAL_DO_NOT_CACHE = 0x4, + MFP_CREDENTIAL_CLEAR_TEXT = 0x8, + MFP_CREDENTIAL_PROXY = 0x10, + MFP_CREDENTIAL_LOGGED_ON_USER = 0x20 + } _MFP_CREDENTIAL_FLAGS; + +typedef +enum MFP_EVENT_TYPE + { + MFP_EVENT_TYPE_PLAY = 0, + MFP_EVENT_TYPE_PAUSE = 1, + MFP_EVENT_TYPE_STOP = 2, + MFP_EVENT_TYPE_POSITION_SET = 3, + MFP_EVENT_TYPE_RATE_SET = 4, + MFP_EVENT_TYPE_MEDIAITEM_CREATED = 5, + MFP_EVENT_TYPE_MEDIAITEM_SET = 6, + MFP_EVENT_TYPE_FRAME_STEP = 7, + MFP_EVENT_TYPE_MEDIAITEM_CLEARED = 8, + MFP_EVENT_TYPE_MF = 9, + MFP_EVENT_TYPE_ERROR = 10, + MFP_EVENT_TYPE_PLAYBACK_ENDED = 11, + MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL = 12 + } MFP_EVENT_TYPE; + +typedef +enum MediaEventType + { + MEUnknown = 0, + MEError = 1, + MEExtendedType = 2, + MENonFatalError = 3, + MEGenericV1Anchor = MENonFatalError, + MESessionUnknown = 100, + MESessionTopologySet = 101, + MESessionTopologiesCleared = 102, + MESessionStarted = 103, + MESessionPaused = 104, + MESessionStopped = 105, + MESessionClosed = 106, + MESessionEnded = 107, + MESessionRateChanged = 108, + MESessionScrubSampleComplete = 109, + MESessionCapabilitiesChanged = 110, + MESessionTopologyStatus = 111, + MESessionNotifyPresentationTime = 112, + MENewPresentation = 113, + MELicenseAcquisitionStart = 114, + MELicenseAcquisitionCompleted = 115, + MEIndividualizationStart = 116, + MEIndividualizationCompleted = 117, + MEEnablerProgress = 118, + MEEnablerCompleted = 119, + MEPolicyError = 120, + MEPolicyReport = 121, + MEBufferingStarted = 122, + MEBufferingStopped = 123, + MEConnectStart = 124, + MEConnectEnd = 125, + MEReconnectStart = 126, + MEReconnectEnd = 127, + MERendererEvent = 128, + MESessionStreamSinkFormatChanged = 129, + MESessionV1Anchor = MESessionStreamSinkFormatChanged, + MESourceUnknown = 200, + MESourceStarted = 201, + MEStreamStarted = 202, + MESourceSeeked = 203, + MEStreamSeeked = 204, + MENewStream = 205, + MEUpdatedStream = 206, + MESourceStopped = 207, + MEStreamStopped = 208, + MESourcePaused = 209, + MEStreamPaused = 210, + MEEndOfPresentation = 211, + MEEndOfStream = 212, + MEMediaSample = 213, + MEStreamTick = 214, + MEStreamThinMode = 215, + MEStreamFormatChanged = 216, + MESourceRateChanged = 217, + MEEndOfPresentationSegment = 218, + MESourceCharacteristicsChanged = 219, + MESourceRateChangeRequested = 220, + MESourceMetadataChanged = 221, + MESequencerSourceTopologyUpdated = 222, + MESourceV1Anchor = MESequencerSourceTopologyUpdated, + MESinkUnknown = 300, + MEStreamSinkStarted = 301, + MEStreamSinkStopped = 302, + MEStreamSinkPaused = 303, + MEStreamSinkRateChanged = 304, + MEStreamSinkRequestSample = 305, + MEStreamSinkMarker = 306, + MEStreamSinkPrerolled = 307, + MEStreamSinkScrubSampleComplete = 308, + MEStreamSinkFormatChanged = 309, + MEStreamSinkDeviceChanged = 310, + MEQualityNotify = 311, + MESinkInvalidated = 312, + MEAudioSessionNameChanged = 313, + MEAudioSessionVolumeChanged = 314, + MEAudioSessionDeviceRemoved = 315, + MEAudioSessionServerShutdown = 316, + MEAudioSessionGroupingParamChanged = 317, + MEAudioSessionIconChanged = 318, + MEAudioSessionFormatChanged = 319, + MEAudioSessionDisconnected = 320, + MEAudioSessionExclusiveModeOverride = 321, + MESinkV1Anchor = MEAudioSessionExclusiveModeOverride, + MECaptureAudioSessionVolumeChanged = 322, + MECaptureAudioSessionDeviceRemoved = 323, + MECaptureAudioSessionFormatChanged = 324, + MECaptureAudioSessionDisconnected = 325, + MECaptureAudioSessionExclusiveModeOverride = 326, + MECaptureAudioSessionServerShutdown = 327, + MESinkV2Anchor = MECaptureAudioSessionServerShutdown, + METrustUnknown = 400, + MEPolicyChanged = 401, + MEContentProtectionMessage = 402, + MEPolicySet = 403, + METrustV1Anchor = MEPolicySet, + MEWMDRMLicenseBackupCompleted = 500, + MEWMDRMLicenseBackupProgress = 501, + MEWMDRMLicenseRestoreCompleted = 502, + MEWMDRMLicenseRestoreProgress = 503, + MEWMDRMLicenseAcquisitionCompleted = 506, + MEWMDRMIndividualizationCompleted = 508, + MEWMDRMIndividualizationProgress = 513, + MEWMDRMProximityCompleted = 514, + MEWMDRMLicenseStoreCleaned = 515, + MEWMDRMRevocationDownloadCompleted = 516, + MEWMDRMV1Anchor = MEWMDRMRevocationDownloadCompleted, + METransformUnknown = 600, + METransformNeedInput = ( METransformUnknown + 1 ) , + METransformHaveOutput = ( METransformNeedInput + 1 ) , + METransformDrainComplete = ( METransformHaveOutput + 1 ) , + METransformMarker = ( METransformDrainComplete + 1 ) , + METransformInputStreamStateChanged = ( METransformMarker + 1 ) , + MEByteStreamCharacteristicsChanged = 700, + MEVideoCaptureDeviceRemoved = 800, + MEVideoCaptureDevicePreempted = 801, + MEStreamSinkFormatInvalidated = 802, + MEEncodingParameters = 803, + MEContentProtectionMetadata = 900, + MEDeviceThermalStateChanged = 950, + MEReservedMax = 10000 + } MediaEventType; + +typedef +enum MFVideoAspectRatioMode + { + MFVideoARMode_None = 0, + MFVideoARMode_PreservePicture = 0x1, + MFVideoARMode_PreservePixel = 0x2, + MFVideoARMode_NonLinearStretch = 0x4, + MFVideoARMode_Mask = 0x7 + } MFVideoAspectRatioMode; + +typedef +enum _MFVideoInterlaceMode + { + MFVideoInterlace_Unknown = 0, + MFVideoInterlace_Progressive = 2, + MFVideoInterlace_FieldInterleavedUpperFirst = 3, + MFVideoInterlace_FieldInterleavedLowerFirst = 4, + MFVideoInterlace_FieldSingleUpper = 5, + MFVideoInterlace_FieldSingleLower = 6, + MFVideoInterlace_MixedInterlaceOrProgressive = 7, + MFVideoInterlace_Last = ( MFVideoInterlace_MixedInterlaceOrProgressive + 1 ) , + MFVideoInterlace_ForceDWORD = 0x7fffffff + } MFVideoInterlaceMode; + +#ifndef _MFP_STREAM_RECORD_ +#define _MFP_STREAM_RECORD_ +typedef struct MFP_STREAM_RECORD + DWORD dwStreamID; + BOOL bSelected; + BYTE szStreamLang[STREAMLANG_LENGTH+4]; + BYTE szStreamName[STREAMNAME_LENGTH+4]; + DWORD dwMajorType; + DWORD dwSubType; + DWORD dwBitRate; + union { + struct { + DWORD dwChannels; + DWORD dwSpeakers; + DWORD dwBitsPerSample; + DWORD dwSamplesPerSec; + } AudioSteamInfo; + struct { + DWORD dwFrameRate; + DWORD dwFrameWidth; + DWORD dwFrameHeight; + DWORD dwInterlace; + } VideoStreamInfo; + } StreamInfo; +} MFP_STREAM_RECORD; +#endif + +#ifndef _MFP_EVENT_HEADER_ +#define _MFP_EVENT_HEADER_ +typedef struct MFP_EVENT_HEADER + { + MFP_EVENT_TYPE eEventType; + HRESULT hrEvent; + IMFPMediaPlayer *pMediaPlayer; + MFP_MEDIAPLAYER_STATE eState; + IPropertyStore *pPropertyStore; + } MFP_EVENT_HEADER; +#endif + +#ifndef _MFP_PLAY_EVENT_ +#define _MFP_PLAY_EVENT_ +typedef struct MFP_PLAY_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAY_EVENT; +#endif + +#ifndef _MFP_PAUSE_EVENT_ +#define _MFP_PAUSE_EVENT_ +typedef struct MFP_PAUSE_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PAUSE_EVENT; +#endif + +#ifndef _MFP_STOP_EVENT_ +#define _MFP_STOP_EVENT_ +typedef struct MFP_STOP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_STOP_EVENT; +#endif + +#ifndef _MFP_POSITION_SET_EVENT_ +#define _MFP_POSITION_SET_EVENT_ +typedef struct MFP_POSITION_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_POSITION_SET_EVENT; +#endif + +#ifndef _MFP_RATE_SET_EVENT_ +#define _MFP_RATE_SET_EVENT_ +typedef struct MFP_RATE_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + float flRate; + } MFP_RATE_SET_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CREATED_EVENT_ +#define _MFP_MEDIAITEM_CREATED_EVENT_ +typedef struct MFP_MEDIAITEM_CREATED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + DWORD_PTR dwUserData; + } MFP_MEDIAITEM_CREATED_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_SET_EVENT_ +#define _MFP_MEDIAITEM_SET_EVENT_ +typedef struct MFP_MEDIAITEM_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_SET_EVENT; +#endif + +#ifndef _MFP_FRAME_STEP_EVENT_ +#define _MFP_FRAME_STEP_EVENT_ +typedef struct MFP_FRAME_STEP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_FRAME_STEP_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CLEARED_EVENT_ +#define _MFP_MEDIAITEM_CLEARED_EVENT_ +typedef struct MFP_MEDIAITEM_CLEARED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_CLEARED_EVENT; +#endif + +#ifndef _MFP_MF_EVENT_ +#define _MFP_MF_EVENT_ +typedef struct MFP_MF_EVENT + { + MFP_EVENT_HEADER header; + MediaEventType MFEventType; + IMFMediaEvent *pMFMediaEvent; + IMFPMediaItem *pMediaItem; + } MFP_MF_EVENT; +#endif + +#ifndef _MFP_ERROR_EVENT_ +#define _MFP_ERROR_EVENT_ +typedef struct MFP_ERROR_EVENT + { + MFP_EVENT_HEADER header; + } MFP_ERROR_EVENT; +#endif + +#ifndef _MFP_PLAYBACK_ENDED_EVENT_ +#define _MFP_PLAYBACK_ENDED_EVENT_ +typedef struct MFP_PLAYBACK_ENDED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAYBACK_ENDED_EVENT; +#endif + +#ifndef _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +#define _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT + { + MFP_EVENT_HEADER header; + DWORD_PTR dwUserData; + BOOL fProceedWithAuthentication; + HRESULT hrAuthenticationStatus; + LPCWSTR pwszURL; + LPCWSTR pwszSite; + LPCWSTR pwszRealm; + LPCWSTR pwszPackage; + LONG nRetries; + MFP_CREDENTIAL_FLAGS flags; + IMFNetCredential *pCredential; + } MFP_ACQUIRE_USER_CREDENTIAL_EVENT; +#endif + +#ifndef _MFVideoNormalizedRect_ +#define _MFVideoNormalizedRect_ +typedef struct MFVideoNormalizedRect + { + float left; + float top; + float right; + float bottom; + } MFVideoNormalizedRect; +#endif + + +/*------------------------------------------------------------------------------ +// MFPlayer Library Function Prototypes +//----------------------------------------------------------------------------*/ + +// MFPMediaPlayer Functions: +bool MFP_EXPORT MFPMediaPlayer_Init(HWND hMFPWindow, void *pCallback, IMFPMediaPlayer **ppMediaPlayer); +void MFP_EXPORT MFPMediaPlayer_Free(IMFPMediaPlayer **ppMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_Play(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Pause(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Stop(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Step(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Toggle(IMFPMediaPlayer *pMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_ClearMediaItem(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaPlayer_GetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemA(IMFPMediaPlayer *pMediaPlayer, LPCSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemW(IMFPMediaPlayer *pMediaPlayer, LPCWSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemFromObject(IMFPMediaPlayer *pMediaPlayer, IUnknown *pIUnknownObj, DWORD dwUserData, IMFPMediaItem **ppMediaItem); + +bool MFP_EXPORT MFPMediaPlayer_GetState(IMFPMediaPlayer *pMediaPlayer, MFP_MEDIAPLAYER_STATE *peState); +bool MFP_EXPORT MFPMediaPlayer_SetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD dwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetDuration(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwMilliseconds); + +bool MFP_EXPORT MFPMediaPlayer_SetRate(IMFPMediaPlayer *pMediaPlayer, DWORD dwRate); +bool MFP_EXPORT MFPMediaPlayer_GetRate(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwRate); +bool MFP_EXPORT MFPMediaPlayer_GetSupportedRates(IMFPMediaPlayer *pMediaPlayer, BOOL bForwardDirection, DWORD_PTR *pdwSlowestRate, DWORD_PTR *pdwFastestRate); + +bool MFP_EXPORT MFPMediaPlayer_GetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwVolume); +bool MFP_EXPORT MFPMediaPlayer_SetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD dwVolume); +bool MFP_EXPORT MFPMediaPlayer_GetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwBalance); +bool MFP_EXPORT MFPMediaPlayer_SetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD dwBalance); +bool MFP_EXPORT MFPMediaPlayer_GetMute(IMFPMediaPlayer *pMediaPlayer, BOOL *pbMute); +bool MFP_EXPORT MFPMediaPlayer_SetMute(IMFPMediaPlayer *pMediaPlayer, BOOL bMute); + +bool MFP_EXPORT MFPMediaPlayer_GetNativeVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszVideo, SIZE *pszARVideo); +bool MFP_EXPORT MFPMediaPlayer_GetIdealVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszMin, SIZE *pszMax); +bool MFP_EXPORT MFPMediaPlayer_SetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, const MFVideoNormalizedRect *pnrcSource); +bool MFP_EXPORT MFPMediaPlayer_GetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, MFVideoNormalizedRect *pnrcSource); + +bool MFP_EXPORT MFPMediaPlayer_SetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD dwAspectRatioMode); +bool MFP_EXPORT MFPMediaPlayer_GetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD_PTR *pdwAspectRatioMode); + +bool MFP_EXPORT MFPMediaPlayer_GetVideoWindow(IMFPMediaPlayer *pMediaPlayer, HWND *phwndVideo); +bool MFP_EXPORT MFPMediaPlayer_UpdateVideo(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF Color); +bool MFP_EXPORT MFPMediaPlayer_GetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF *pColor); + +bool MFP_EXPORT MFPMediaPlayer_InsertEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect, BOOL bOptional); +bool MFP_EXPORT MFPMediaPlayer_RemoveEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect); +bool MFP_EXPORT MFPMediaPlayer_RemoveAllEffects(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Shutdown(IMFPMediaPlayer *pMediaPlayer); + +// MFPMediaItem Functions: +bool MFP_EXPORT MFPMediaItem_Release(IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaItem_GetMediaPlayer(IMFPMediaItem *pMediaItem, IMFPMediaPlayer **ppMediaPlayer); +bool MFP_EXPORT MFPMediaItem_GetURLA(IMFPMediaItem *pMediaItem, LPSTR *ppszURL); +bool MFP_EXPORT MFPMediaItem_GetURLW(IMFPMediaItem *pMediaItem, LPWSTR *ppszURL); + +bool MFP_EXPORT MFPMediaItem_SetUserData(IMFPMediaItem *pMediaItem, DWORD dwUserData); +bool MFP_EXPORT MFPMediaItem_GetUserData(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwUserData); + +bool MFP_EXPORT MFPMediaItem_SetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD dwStartValue, DWORD dwStopValue); +bool MFP_EXPORT MFPMediaItem_GetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStartValue, DWORD_PTR *pdwStopValue); + +bool MFP_EXPORT MFPMediaItem_HasVideo(IMFPMediaItem *pMediaItem, BOOL *pbHasVideo, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_HasAudio(IMFPMediaItem *pMediaItem, BOOL *pbHasAudio, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_IsProtected(IMFPMediaItem *pMediaItem, BOOL *pbProtected); + +bool MFP_EXPORT MFPMediaItem_GetDuration(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwMilliseconds); +bool MFP_EXPORT MFPMediaItem_GetNumberOfStreams(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStreamCount); +bool MFP_EXPORT MFPMediaItem_SetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL bEnabled); +bool MFP_EXPORT MFPMediaItem_GetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL *pbEnabled); + +bool MFP_EXPORT MFPMediaItem_GetStreamAttribute(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetPresentationAttribute(IMFPMediaItem *pMediaItem, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetCharacteristics(IMFPMediaItem *pMediaItem, MFP_MEDIAITEM_CHARACTERISTICS *pCharacteristics); +bool MFP_EXPORT MFPMediaItem_GetMetadata(IMFPMediaItem *pMediaItem, IPropertyStore **ppMetadataStore); + +bool MFP_EXPORT MFPMediaItem_SetStreamSink(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, IUnknown *pMediaSink); + +// Media Information +bool MFP_EXPORT MFPMediaItem_StreamTable(IMFPMediaItem *pMediaItem, DWORD_PTR *lpdwStreamCount, DWORD64 *lpqwStreamTable); + +// Misc +bool MFP_EXPORT MFPConvertMSTimeToTimeStringA(dwMilliseconds:DWORD, LPSTR *lpszTime:DWORD, DWORD dwTimeFormat); +bool MFP_EXPORT MFPConvertMSTimeToTimeStringW(dwMilliseconds:DWORD, LPWSTR *lpszTime:DWORD, DWORD dwTimeFormat); + +LPSTR * MFP_EXPORT MFPConvertStringToAnsi(LPWSTR *lpszWideString); +LPWSTR * MFP_EXPORT MFPConvertStringToWide(LPSTR *lpszAnsiString); +void MFP_EXPORT MFPConvertStringFree(LPWSTR *lpString); + +#ifdef UNICODE +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemW +#define MFPMediaItem_GetURL MFPMediaItem_GetURLW +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringW +#else // ANSI +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemA +#define MFPMediaItem_GetURL MFPMediaItem_GetURLA +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringA +#endif + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/MFPlayerDll-x64/MFPlayer.inc b/MFPlayerDll-x64/MFPlayer.inc new file mode 100644 index 0000000..7c8e76a --- /dev/null +++ b/MFPlayerDll-x64/MFPlayer.inc @@ -0,0 +1,579 @@ +;============================================================================== +; +; MFPlayer x86 Library +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== +; +; MFPlayer Library consists of functions that wrap the MFPlay COM +; implementation of the IMFPMediaPlayer and IMFPMediaItem objects. MFPlay is a +; Microsoft Media Foundation API for creating media playback applications. Thus +; the MFPlayer Library functions hide the complexities of interacting with the +; COM objects. +; +;------------------------------------------------------------------------------- + +includelib MFPlay.lib + +; MFPMediaPlayer Functions: +MFPMediaPlayer_Init PROTO hMFPWindow:QWORD, pCallback:QWORD, ppMediaPlayer:QWORD +MFPMediaPlayer_Free PROTO ppMediaPlayer:QWORD + +MFPMediaPlayer_Play PROTO pMediaPlayer:QWORD +MFPMediaPlayer_Pause PROTO pMediaPlayer:QWORD +MFPMediaPlayer_Stop PROTO pMediaPlayer:QWORD +MFPMediaPlayer_Step PROTO pMediaPlayer:QWORD +MFPMediaPlayer_Toggle PROTO pMediaPlayer:QWORD + +MFPMediaPlayer_ClearMediaItem PROTO pMediaPlayer:QWORD +MFPMediaPlayer_SetMediaItem PROTO pMediaPlayer:QWORD, pMediaItem:QWORD +MFPMediaPlayer_GetMediaItem PROTO pMediaPlayer:QWORD, ppMediaItem:QWORD +MFPMediaPlayer_CreateMediaItemA PROTO pMediaPlayer:QWORD, lpszMediaItem:QWORD, qwUserData:QWORD, ppMediaItem:QWORD +MFPMediaPlayer_CreateMediaItemW PROTO pMediaPlayer:QWORD, lpszMediaItem:QWORD, qwUserData:QWORD, ppMediaItem:QWORD +MFPMediaPlayer_CreateMediaItemFromObject PROTO pMediaPlayer:QWORD, pIUnknownObj:QWORD, qwUserData:QWORD, ppMediaItem:QWORD + +MFPMediaPlayer_GetState PROTO pMediaPlayer:QWORD, pdwState:QWORD +MFPMediaPlayer_SetPosition PROTO pMediaPlayer:QWORD, dwMilliseconds:DWORD +MFPMediaPlayer_GetPosition PROTO pMediaPlayer:QWORD, pdwMilliseconds:QWORD +MFPMediaPlayer_GetDuration PROTO pMediaPlayer:QWORD, pdwMilliseconds:QWORD + +MFPMediaPlayer_SetRate PROTO pMediaPlayer:QWORD, dwRate:DWORD +MFPMediaPlayer_GetRate PROTO pMediaPlayer:QWORD, pdwRate:QWORD +MFPMediaPlayer_GetSupportedRates PROTO pMediaPlayer:QWORD, bForwardDirection:DWORD, pdwSlowestRate:QWORD, pdwFastestRate:QWORD + +MFPMediaPlayer_GetVolume PROTO pMediaPlayer:QWORD, pdwVolume:QWORD +MFPMediaPlayer_SetVolume PROTO pMediaPlayer:QWORD, dwVolume:DWORD +MFPMediaPlayer_GetBalance PROTO pMediaPlayer:QWORD, pdwBalance:QWORD +MFPMediaPlayer_SetBalance PROTO pMediaPlayer:QWORD, dwBalance:SDWORD +MFPMediaPlayer_SetMute PROTO pMediaPlayer:QWORD, bMute:DWORD +MFPMediaPlayer_GetMute PROTO pMediaPlayer:QWORD, pbMute:QWORD + +MFPMediaPlayer_GetNativeVideoSize PROTO pMediaPlayer:QWORD, pszVideo:QWORD, pszARVideo:QWORD +MFPMediaPlayer_GetIdealVideoSize PROTO pMediaPlayer:QWORD, pszMin:QWORD, pszMax:QWORD +MFPMediaPlayer_SetVideoSourceRect PROTO pMediaPlayer:QWORD, pnrcSource:QWORD +MFPMediaPlayer_GetVideoSourceRect PROTO pMediaPlayer:QWORD, pnrcSource:QWORD + +MFPMediaPlayer_SetAspectRatioMode PROTO pMediaPlayer:QWORD, dwAspectRatioMode:DWORD +MFPMediaPlayer_GetAspectRatioMode PROTO pMediaPlayer:QWORD, pdwAspectRatioMode:QWORD + +MFPMediaPlayer_GetVideoWindow PROTO pMediaPlayer:QWORD, phwndVideo:QWORD +MFPMediaPlayer_UpdateVideo PROTO pMediaPlayer:QWORD +MFPMediaPlayer_SetBorderColor PROTO pMediaPlayer:QWORD, Color:DWORD +MFPMediaPlayer_GetBorderColor PROTO pMediaPlayer:QWORD, pColor:QWORD + +MFPMediaPlayer_InsertEffect PROTO pMediaPlayer:QWORD, pEffect:QWORD, bOptional:DWORD +MFPMediaPlayer_RemoveEffect PROTO pMediaPlayer:QWORD, pEffect:QWORD +MFPMediaPlayer_RemoveAllEffects PROTO pMediaPlayer:QWORD +MFPMediaPlayer_Shutdown PROTO pMediaPlayer:QWORD + +; MFPMediaItem Functions: +MFPMediaItem_Release PROTO pMediaItem:QWORD +MFPMediaItem_GetMediaPlayer PROTO pMediaItem:QWORD, ppMediaPlayer:QWORD +MFPMediaItem_GetURLA PROTO pMediaItem:QWORD, ppszURL:QWORD +MFPMediaItem_GetURLW PROTO pMediaItem:QWORD, ppszURL:QWORD + +MFPMediaItem_SetUserData PROTO pMediaItem:QWORD, qwUserData:QWORD +MFPMediaItem_GetUserData PROTO pMediaItem:QWORD, pqwUserData:QWORD + +MFPMediaItem_SetStartStopPosition PROTO pMediaItem:QWORD, dwStartValue:DWORD, dwStopValue:DWORD +MFPMediaItem_GetStartStopPosition PROTO pMediaItem:QWORD, pdwStartValue:QWORD, pdwStopValue:QWORD + +MFPMediaItem_HasVideo PROTO pMediaItem:QWORD, pbHasVideo:QWORD, pbSelected:QWORD +MFPMediaItem_HasAudio PROTO pMediaItem:QWORD, pbHasAudio:QWORD, pbSelected:QWORD +MFPMediaItem_IsProtected PROTO pMediaItem:QWORD, pbProtected:QWORD + +MFPMediaItem_GetDuration PROTO pMediaItem:QWORD, pdwMilliseconds:QWORD +MFPMediaItem_GetNumberOfStreams PROTO pMediaItem:QWORD, pdwStreamCount:QWORD +MFPMediaItem_SetStreamSelection PROTO pMediaItem:QWORD, dwStreamIndex:DWORD, bEnabled:DWORD +MFPMediaItem_GetStreamSelection PROTO pMediaItem:QWORD, dwStreamIndex:DWORD, pbEnabled:QWORD + +MFPMediaItem_GetStreamAttribute PROTO pMediaItem:QWORD, dwStreamIndex:DWORD, guidMFAttribute:QWORD, pvValue:QWORD +MFPMediaItem_GetPresentationAttribute PROTO pMediaItem:QWORD, guidMFAttribute:QWORD, pvValue:QWORD +MFPMediaItem_GetCharacteristics PROTO pMediaItem:QWORD, pCharacteristics:QWORD +MFPMediaItem_GetMetadata PROTO pMediaItem:QWORD, ppMetadataStore:QWORD + +MFPMediaItem_SetStreamSink PROTO pMediaItem:QWORD, dwStreamIndex:DWORD, pMediaSink:QWORD + +; Media Information +MFPMediaItem_StreamTable PROTO pMediaItem:QWORD, lpdwStreamCount:QWORD, lpqwStreamTable:QWORD + +; Misc +MFPConvertMSTimeToTimeStringA PROTO dwMilliseconds:DWORD, lpszTime:QWORD, dwTimeFormat:DWORD +MFPConvertMSTimeToTimeStringW PROTO dwMilliseconds:DWORD, lpszTime:QWORD, dwTimeFormat:DWORD + +MFPConvertStringToAnsi PROTO lpszWideString:QWORD +MFPConvertStringToWide PROTO lpszAnsiString:QWORD +MFPConvertStringFree PROTO lpString:QWORD + +IFDEF __UNICODE__ + MFPMediaPlayer_CreateMediaItem EQU + MFPMediaItem_GetURL EQU + MFPConvertMSTimeToTimeString EQU +ELSE ; ANSI + MFPMediaPlayer_CreateMediaItem EQU + MFPMediaItem_GetURL EQU + MFPConvertMSTimeToTimeString EQU +ENDIF + +;------------------------------------------------------------------------------ +; MFPMediaPlayer Structures +;------------------------------------------------------------------------------ +IFNDEF MFP_CREATION_OPTIONS +MFP_CREATION_OPTIONS TYPEDEF DWORD +ENDIF +IFNDEF MFP_MEDIAPLAYER_STATE +MFP_MEDIAPLAYER_STATE TYPEDEF DWORD +ENDIF +IFNDEF MFP_MEDIAITEM_CHARACTERISTICS +MFP_MEDIAITEM_CHARACTERISTICS TYPEDEF DWORD +ENDIF +IFNDEF MFP_CREDENTIAL_FLAGS +MFP_CREDENTIAL_FLAGS TYPEDEF DWORD +ENDIF +IFNDEF MFP_EVENT_TYPE +MFP_EVENT_TYPE TYPEDEF DWORD +ENDIF +IFNDEF MediaEventType +MediaEventType TYPEDEF DWORD +ENDIF +IFNDEF HRESULT +HRESULT TYPEDEF DWORD +ENDIF + +STREAMLANG_LENGTH EQU 28 +STREAMNAME_LENGTH EQU 28 + +IFNDEF MFP_STREAM_RECORD +MFP_STREAM_RECORD STRUCT 8 + dwStreamID DD ? + bSelected DD ? ; bool + szStreamLang DB (STREAMLANG_LENGTH+4) DUP (?) + szStreamName DB (STREAMNAME_LENGTH+4) DUP (?) + dwMajorType DD ? ; Video, Audio, etc + dwSubType DD ? ; Video or Audio subtype + dwBitRate DD ? ; kilobits per second: kbps + UNION + STRUCT + dwChannels DD ? ; 6 = 5.1 etc + dwSpeakers DD ? ; positioning of speakers + dwBitsPerSample DD ? ; bitdepth for lossless + dwSamplesPerSec DD ? ; kHz + ENDS + STRUCT + dwFrameRate DD ? ; fps + dwFrameWidth DD ? ; px + dwFrameHeight DD ? ; px + dwInterlace DD ? ; mode + ENDS + ENDS +MFP_STREAM_RECORD ENDS +ENDIF + +IFNDEF MFP_EVENT_HEADER +MFP_EVENT_HEADER STRUCT + eEventType MFP_EVENT_TYPE ? + hrEvent HRESULT ? + pMediaPlayer QWORD ? ; ptr to IMFPMediaPlayer + eState MFP_MEDIAPLAYER_STATE ? + pPropertyStore QWORD ? ; ptr to IPropertyStore +MFP_EVENT_HEADER ENDS +ENDIF + +IFNDEF MFP_PLAY_EVENT +MFP_PLAY_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_PLAY_EVENT ENDS +ENDIF + +IFNDEF MFP_PAUSE_EVENT +MFP_PAUSE_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_PAUSE_EVENT ENDS +ENDIF + +IFNDEF MFP_STOP_EVENT +MFP_STOP_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_STOP_EVENT ENDS +ENDIF + +IFNDEF MFP_POSITION_SET_EVENT +MFP_POSITION_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_POSITION_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_RATE_SET_EVENT +MFP_RATE_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem + flRate REAL4 ? +MFP_RATE_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_CREATED_EVENT +MFP_MEDIAITEM_CREATED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem + qwUserData QWORD ? ; +MFP_MEDIAITEM_CREATED_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_SET_EVENT +MFP_MEDIAITEM_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_MEDIAITEM_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_FRAME_STEP_EVENT +MFP_FRAME_STEP_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_FRAME_STEP_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_CLEARED_EVENT +MFP_MEDIAITEM_CLEARED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_MEDIAITEM_CLEARED_EVENT ENDS +ENDIF + +IFNDEF MFP_MF_EVENT +MFP_MF_EVENT STRUCT + header MFP_EVENT_HEADER <> + MFEventType MediaEventType ? + pMFMediaEvent QWORD ? ; ptr to IMFMediaEvent + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_MF_EVENT ENDS +ENDIF + +IFNDEF MFP_ERROR_EVENT +MFP_ERROR_EVENT STRUCT + header MFP_EVENT_HEADER <> +MFP_ERROR_EVENT ENDS +ENDIF + +IFNDEF MFP_PLAYBACK_ENDED_EVENT +MFP_PLAYBACK_ENDED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem QWORD ? ; ptr to IMFPMediaItem +MFP_PLAYBACK_ENDED_EVENT ENDS +ENDIF + +IFNDEF MFP_ACQUIRE_USER_CREDENTIAL_EVENT +MFP_ACQUIRE_USER_CREDENTIAL_EVENT STRUCT + header MFP_EVENT_HEADER <> + qwUserData QWORD ? + fProceedWithAuthentication QWORD ? + hrAuthenticationStatus HRESULT ? + pwszURL QWORD ? ; LPCWSTR + pwszSite QWORD ? ; LPCWSTR + pwszRealm QWORD ? ; LPCWSTR + pwszPackage QWORD ? ; LPCWSTR + nRetries QWORD ? + flags MFP_CREDENTIAL_FLAGS ? + pCredential QWORD ? ; ptr to IMFNetCredential +MFP_ACQUIRE_USER_CREDENTIAL_EVENT ENDS +ENDIF + +IFNDEF MFVideoNormalizedRect +MFVideoNormalizedRect STRUCT + left REAL4 ? ; float + top REAL4 ? ; float + right REAL4 ? ; float + bottom REAL4 ? ; float +MFVideoNormalizedRect ENDS +ENDIF + +.CONST +;------------------------------------------------------------------------------ +; MFPMediaPlayer Constants +;------------------------------------------------------------------------------ + +; MFP_CREATION_OPTIONS TYPEDEF QWORD +MFP_OPTION_NONE EQU 00h +MFP_OPTION_FREE_THREADED_CALLBACK EQU 01h +MFP_OPTION_NO_MMCSS EQU 02h +MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION EQU 04h + +; MFP_MEDIAPLAYER_STATE TYPEDEF QWORD +MFP_MEDIAPLAYER_STATE_EMPTY EQU 00h +MFP_MEDIAPLAYER_STATE_STOPPED EQU 01h +MFP_MEDIAPLAYER_STATE_PLAYING EQU 02h +MFP_MEDIAPLAYER_STATE_PAUSED EQU 03h +MFP_MEDIAPLAYER_STATE_SHUTDOWN EQU 04h + +; MFP_MEDIAITEM_CHARACTERISTICS TYPEDEF QWORD +MFP_MEDIAITEM_IS_LIVE EQU 01h +MFP_MEDIAITEM_CAN_SEEK EQU 02h +MFP_MEDIAITEM_CAN_PAUSE EQU 04h +MFP_MEDIAITEM_HAS_SLOW_SEEK EQU 08h + +; MFP_CREDENTIAL_FLAGS TYPEDEF QWORD +MFP_CREDENTIAL_PROMPT EQU 01h +MFP_CREDENTIAL_SAVE EQU 02h +MFP_CREDENTIAL_DO_NOT_CACHE EQU 04h +MFP_CREDENTIAL_CLEAR_TEXT EQU 08h +MFP_CREDENTIAL_PROXY EQU 010h +MFP_CREDENTIAL_LOGGED_ON_USER EQU 020h + +; MFP_EVENT_TYPE TYPEDEF QWORD +MFP_EVENT_TYPE_PLAY EQU 0 +MFP_EVENT_TYPE_PAUSE EQU 1 +MFP_EVENT_TYPE_STOP EQU 2 +MFP_EVENT_TYPE_POSITION_SET EQU 3 +MFP_EVENT_TYPE_RATE_SET EQU 4 +MFP_EVENT_TYPE_MEDIAITEM_CREATED EQU 5 +MFP_EVENT_TYPE_MEDIAITEM_SET EQU 6 +MFP_EVENT_TYPE_FRAME_STEP EQU 7 +MFP_EVENT_TYPE_MEDIAITEM_CLEARED EQU 8 +MFP_EVENT_TYPE_MF EQU 9 +MFP_EVENT_TYPE_ERROR EQU 10 +MFP_EVENT_TYPE_PLAYBACK_ENDED EQU 11 +MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL EQU 12 + +; MediaEventType TYPEDEF QWORD +MEUnknown EQU 0 +MEError EQU 1 +MEExtendedType EQU 2 +MENonFatalError EQU 3 +MEGenericV1Anchor EQU MENonFatalError +MESessionUnknown EQU 100 +MESessionTopologySet EQU 101 +MESessionTopologiesCleared EQU 102 +MESessionStarted EQU 103 +MESessionPaused EQU 104 +MESessionStopped EQU 105 +MESessionClosed EQU 106 +MESessionEnded EQU 107 +MESessionRateChanged EQU 108 +MESessionScrubSampleComplete EQU 109 +MESessionCapabilitiesChanged EQU 110 +MESessionTopologyStatus EQU 111 +MESessionNotifyPresentationTime EQU 112 +MENewPresentation EQU 113 +MELicenseAcquisitionStart EQU 114 +MELicenseAcquisitionCompleted EQU 115 +MEIndividualizationStart EQU 116 +MEIndividualizationCompleted EQU 117 +MEEnablerProgress EQU 118 +MEEnablerCompleted EQU 119 +MEPolicyError EQU 120 +MEPolicyReport EQU 121 +MEBufferingStarted EQU 122 +MEBufferingStopped EQU 123 +MEConnectStart EQU 124 +MEConnectEnd EQU 125 +MEReconnectStart EQU 126 +MEReconnectEnd EQU 127 +MERendererEvent EQU 128 +MESessionStreamSinkFormatChanged EQU 129 +MESessionV1Anchor EQU 129 +MESourceUnknown EQU 200 +MESourceStarted EQU 201 +MEStreamStarted EQU 202 +MESourceSeeked EQU 203 +MEStreamSeeked EQU 204 +MENewStream EQU 205 +MEUpdatedStream EQU 206 +MESourceStopped EQU 207 +MEStreamStopped EQU 208 +MESourcePaused EQU 209 +MEStreamPaused EQU 210 +MEEndOfPresentation EQU 211 +MEEndOfStream EQU 212 +MEMediaSample EQU 213 +MEStreamTick EQU 214 +MEStreamThinMode EQU 215 +MEStreamFormatChanged EQU 216 +MESourceRateChanged EQU 217 +MEEndOfPresentationSegment EQU 218 +MESourceCharacteristicsChanged EQU 219 +MESourceRateChangeRequested EQU 220 +MESourceMetadataChanged EQU 221 +MESequencerSourceTopologyUpdated EQU 222 +MESourceV1Anchor EQU 222 +MESinkUnknown EQU 300 +MEStreamSinkStarted EQU 301 +MEStreamSinkStopped EQU 302 +MEStreamSinkPaused EQU 303 +MEStreamSinkRateChanged EQU 304 +MEStreamSinkRequestSample EQU 305 +MEStreamSinkMarker EQU 306 +MEStreamSinkPrerolled EQU 307 +MEStreamSinkScrubSampleComplete EQU 308 +MEStreamSinkFormatChanged EQU 309 +MEStreamSinkDeviceChanged EQU 310 +MEQualityNotify EQU 311 +MESinkInvalidated EQU 312 +MEAudioSessionNameChanged EQU 313 +MEAudioSessionVolumeChanged EQU 314 +MEAudioSessionDeviceRemoved EQU 315 +MEAudioSessionServerShutdown EQU 316 +MEAudioSessionGroupingParamChanged EQU 317 +MEAudioSessionIconChanged EQU 318 +MEAudioSessionFormatChanged EQU 319 +MEAudioSessionDisconnected EQU 320 +MEAudioSessionExclusiveModeOverride EQU 321 +MESinkV1Anchor EQU 321 +METrustUnknown EQU 400 +MEPolicyChanged EQU 401 +MEContentProtectionMessage EQU 402 +MEPolicySet EQU 403 +METrustV1Anchor EQU 403 +MEWMDRMLicenseBackupCompleted EQU 500 +MEWMDRMLicenseBackupProgress EQU 501 +MEWMDRMLicenseRestoreCompleted EQU 502 +MEWMDRMLicenseRestoreProgress EQU 503 +MEWMDRMLicenseAcquisitionCompleted EQU 506 +MEWMDRMIndividualizationCompleted EQU 508 +MEWMDRMIndividualizationProgress EQU 513 +MEWMDRMProximityCompleted EQU 514 +MEWMDRMLicenseStoreCleaned EQU 515 +MEWMDRMRevocationDownloadCompleted EQU 516 +MEWMDRMV1Anchor EQU 516 +METransformUnknown EQU 600 +METransformNeedInput EQU 601 +METransformHaveOutput EQU 602 +METransformDrainComplete EQU 603 +METransformMarker EQU 604 +MEReservedMax EQU 10000 + +; MFVideoAspectRatioMode +MFVideoARMode_None EQU 0h +MFVideoARMode_PreservePicture EQU 1h +MFVideoARMode_PreservePixel EQU 2h +MFVideoARMode_NonLinearStretch EQU 4h +MFVideoARMode_Mask EQU 7h + + +; MFVideoInterlaceMode +MFVideoInterlace_Unknown EQU 0 +MFVideoInterlace_Progressive EQU 2 +MFVideoInterlace_FieldInterleavedUpperFirst EQU 3 +MFVideoInterlace_FieldInterleavedLowerFirst EQU 4 +MFVideoInterlace_FieldSingleUpper EQU 5 +MFVideoInterlace_FieldSingleLower EQU 6 +MFVideoInterlace_MixedInterlaceOrProgressive EQU 7 + +;--------------------------------------------------------------------------------------------------------------------------- +; Media Major Type | Description | Subtype +;--------------------------------------------------------------------------------------------------------------------------- +MFMT_None EQU 0 ; None. None. +MFMT_Audio EQU 1 ; Audio. Audio Subtype GUIDs. +MFMT_Video EQU 2 ; Video. Video Subtype GUIDs. +MFMT_Stream EQU 3 ; Multiplexed stream or elementary stream. Stream Subtype GUIDs +MFMT_Metadata EQU 4 ; Metadata stream. None. +MFMT_Protected EQU 5 ; Protected media. The subtype specifies the content protection scheme. +MFMT_SAMI EQU 6 ; SAMI captions. None. +MFMT_Image EQU 7 ; Still image stream. WIC GUIDs and CLSIDs. +MFMT_Binary EQU 8 ; Binary stream. None. +MFMT_HTML EQU 9 ; HTML stream. None. +MFMT_Perception EQU 10 ; Streams from a camera sensor None. +MFMT_FileTransfer EQU 11 ; A stream that contains data files. None. +MFMT_Script EQU 12 ; Script stream. None. + +;--------------------------------------------------------------------------------------------------------------------------- +; Audio Format Subtype | Description +;--------------------------------------------------------------------------------------------------------------------------- +MFAF_Unknown EQU 0 ; Unknown +MFAF_MP3 EQU 1 ; MPEG Audio Layer-3 (MP3). MPEG-4 Part 3, AAC (ISO/IEC 14496-3) +MFAF_AAC EQU 2 ; Advanced Audio Coding (AAC). +MFAF_ALAC EQU 3 ; Apple Lossless Audio Codec (ALAC). +MFAF_Dolby_AC3 EQU 4 ; Dolby Digital (AC-3). +MFAF_Dolby_AC3_SP EQU 5 ; Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). +MFAF_Dolby_DDPlus EQU 6 ; Dolby Digital Plus. EAC3 +MFAF_Dolby_AC4 EQU 7 ; Dolby (AC-4). +MFAF_Dolby_AC4_V1 EQU 8 +MFAF_Dolby_AC4_V2 EQU 9 +MFAF_Dolby_AC4_V1_ES EQU 10 +MFAF_Dolby_AC4_V2_ES EQU 11 +MFAF_DTS EQU 12 ; Digital Theater Systems (DTS) audio. +MFAF_DTS_RAW EQU 13 +MFAF_DTS_HD EQU 14 ; DTS-HD Master Audio +MFAF_DTS_XLL EQU 15 ; DTS-HD Master Audio Lossless +MFAF_DTS_LBR EQU 16 +MFAF_DTS_UHD EQU 17 +MFAF_DTS_UHDY EQU 18 +MFAF_WMAudio_LL EQU 19 ; Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. (WMALOSSLESS) +MFAF_WMAudioV8 EQU 20 ; Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. (WMAV2) +MFAF_WMAudioV9 EQU 21 ; Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. (WMAPRO) +MFAF_WMASPDIF EQU 22 ; Windows Media Audio 9 Professional codec over S/PDIF. +MFAF_FLAC EQU 23 ; Free Lossless Audio Codec (FLAC). +MFAF_PCM EQU 24 ; Uncompressed PCM audio. +MFAF_LPCM EQU 25 ; DVD audio data +MFAF_MPEG EQU 26 ; MPEG-1 audio payload. (MP1) +MFAF_MPEGH EQU 27 +MFAF_MPEGH_ES EQU 28 +MFAF_MSP1 EQU 29 ; Windows Media Audio 9 Voice codec (WMAVOICE) +MFAF_AMR_NB EQU 30 ; Adaptive Multi-Rate Narrowband (AMR_NB) +MFAF_AMR_WB EQU 31 ; Adaptive Multi-Rate Wideband (AMR_WB) +MFAF_AMR_WP EQU 32 ; Adaptive Multi-Rate Wideband Plus (AMR_WP) +MFAF_DRM EQU 33 ; Encrypted audio data used with secure audio path. +MFAF_Vorbis EQU 34 ; VORBIS +MFAF_Opus EQU 35 ; Opus +MFAF_Float EQU 36 ; Uncompressed IEEE floating-point audio. +MFAF_Float_SO EQU 37 ; Uncompressed IEEE floating-point audio. +MFAF_RAW_AAC1 EQU 38 ; Advanced Audio Coding (AAC). In AVI +MFAF_QCELP EQU 39 ; QCELP (Qualcomm Code Excited Linear Prediction) audio. +MFAF_Dolby_AC3_HDCP EQU 40 ; Dolby Digital (AC-3) (HDCP) +MFAF_AAC_HDCP EQU 41 +MFAF_PCM_HDCP EQU 42 +MFAF_ADTS_HDCP EQU 43 ; Advanced Audio Coding (AAC) in Audio Data Transport Stream (ADTS) format (HDCP) +MFAF_ADTS EQU 44 ; Advanced Audio Coding (AAC) in Audio Data Transport Stream (ADTS) + + +;--------------------------------------------------------------------------------------------------------------------------- +; Video Format Subtype | Description +;--------------------------------------------------------------------------------------------------------------------------- +MFVF_Unknown EQU 0 ; +MFVF_M4S2 EQU 1 ; 'M4S2' MPEG-4 part 2 video. +MFVF_MP4V EQU 2 ; 'MP4V' MPEG-4 part 2 video. +MFVF_H264 EQU 3 ; 'H264' H.264 video. +MFVF_H265 EQU 4 ; 'H265' H.265 video. +MFVF_H264_ES EQU 5 ; Not applicable H.264 elementary stream. +MFVF_WMV1 EQU 6 ; 'WMV1' Windows Media Video codec version 7. +MFVF_WMV2 EQU 7 ; 'WMV2' Windows Media Video 8 codec. +MFVF_WMV3 EQU 8 ; 'WMV3' Windows Media Video 9 codec. +MFVF_MP4S EQU 9 ; 'MP4S' ISO MPEG 4 codec version 1. +MFVF_AV1 EQU 10 ; 'AV01' AV1 video. +MFVF_VP80 EQU 11 ; 'MPG1' VP8 video. +MFVF_VP90 EQU 12 ; 'MPG1' VP9 video. +MFVF_HEVC EQU 13 ; 'HEVC' The HEVC Main profile and Main Still Picture profile. +MFVF_HEVC_ES EQU 14 ;'HEVS' This media type is the same as MFVF_HEVC, except media samples contain a fragmented HEVC bitstream. +MFVF_H263 EQU 15 ; 'H263' H.263 video. +MFVF_MSS1 EQU 16 ; 'MSS1' Windows Media Screen codec version 1. +MFVF_MSS2 EQU 17 ; 'MSS2' Windows Media Video 9 Screen codec. +MFVF_MJPG EQU 18 ; 'MJPG' Motion JPEG. +MFVF_MPG1 EQU 19 ; 'MPG1' MPEG-1 video. +MFVF_MPEG2 EQU 20 ; Not applicable MPEG-2 video. (Equivalent to MEDIASUBTYPE_MPEG2_VIDEO in DirectShow.) +MFVF_DV25 EQU 21 ; 'dv25' DVCPRO 25 (525-60 or 625-50). +MFVF_DV50 EQU 22 ; 'dv50' DVCPRO 50 (525-60 or 625-50). +MFVF_DVC EQU 23 ; 'dvc ' DVC/DV Video. +MFVF_DVH1 EQU 24 ; 'dvh1' DVCPRO 100 (1080/60i, 1080/50i, or 720/60P). +MFVF_DVHD EQU 25 ; 'dvhd' HD-DVCR (1125-60 or 1250-50). +MFVF_DVSD EQU 26 ; 'dvsd' SDL-DVCR (525-60 or 625-50). +MFVF_DVSL EQU 27 ; 'dvsl' SD-DVCR (525-60 or 625-50). +MFVF_WVC1 EQU 28 ; 'WVC1' SMPTE 421M ("VC-1"). +MFVF_420O EQU 29 ; '420O' 8-bit per channel planar YUV 4:2:0 video. +MFVF_MP43 EQU 30 ; 'MP43' Microsoft MPEG 4 codec version 3. This codec is no longer supported. + + + + + + + + + diff --git a/MFPlayerDll-x64/MFPlayer.lib b/MFPlayerDll-x64/MFPlayer.lib new file mode 100644 index 0000000..91beb40 Binary files /dev/null and b/MFPlayerDll-x64/MFPlayer.lib differ diff --git a/MFPlayerDll-x64/MFPlayerDll.asm b/MFPlayerDll-x64/MFPlayerDll.asm new file mode 100644 index 0000000..9e7fb18 --- /dev/null +++ b/MFPlayerDll-x64/MFPlayerDll.asm @@ -0,0 +1,78 @@ +;============================================================================== +; +; MFPlayer x64 DLL +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== +; +; MFPlayer Library consists of functions that wrap the MFPlay COM +; implementation of the IMFPMediaPlayer and IMFPMediaItem objects. MFPlay is a +; Microsoft Media Foundation API for creating media playback applications. Thus +; the MFPlayer Library functions hide the complexities of interacting with the +; COM objects. +; +;------------------------------------------------------------------------------- +.686 +.MMX +.XMM +.x64 + +option casemap : none +option win64 : 11 +option frame : auto + +includelib user32.lib +includelib kernel32.lib +includelib MFPlay.lib + +IFNDEF MFPCreateMediaPlayer +MFPCreateMediaPlayer PROTO pwszURL:QWORD, fStartPlayback:QWORD, creationOptions:QWORD, pCallback:QWORD, hWnd:QWORD, ppMediaPlayer:QWORD +ENDIF + +DLL_PROCESS_ATTACH EQU 1 +DLL_THREAD_ATTACH EQU 2 +DLL_THREAD_DETACH EQU 3 +DLL_PROCESS_DETACH EQU 0 +DLL_PROCESS_VERIFIER EQU 4 + +FALSE EQU 0 +TRUE EQU 1 + +HINSTANCE typedef ptr +LPVOID typedef ptr + +;-------------------------------------- +; Conditionals +;-------------------------------------- +MFPLAYER_DLL EQU 1 + +;-------------------------------------- +; Main Include File +;-------------------------------------- +Include .\..\MFPlayer.inc + +;-------------------------------------- +; Main Library Files +;-------------------------------------- +Include .\..\MFPlayer.asm + + +.CODE + +;===================================================================================== +; Main entry function for a DLL file - required. +;------------------------------------------------------------------------------------- +DllMain PROC hinstDLL:HINSTANCE, fdwReason:DWORD, lpvReserved:LPVOID + .IF fdwReason == DLL_PROCESS_ATTACH + + .ENDIF + mov rax, TRUE + ret +DllMain ENDP + +END DllMain diff --git a/MFPlayerDll-x64/MFPlayerDll.def b/MFPlayerDll-x64/MFPlayerDll.def new file mode 100644 index 0000000..0a78304 --- /dev/null +++ b/MFPlayerDll-x64/MFPlayerDll.def @@ -0,0 +1,104 @@ +;============================================================================== +; +; MFPlayer x64 DLL +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== + +LIBRARY MFPlayer +EXPORTS + + ; MFPMediaPlayer Functions: + MFPMediaPlayer_Init + MFPMediaPlayer_Free + + MFPMediaPlayer_Play + MFPMediaPlayer_Pause + MFPMediaPlayer_Stop + MFPMediaPlayer_Step + MFPMediaPlayer_Toggle + + MFPMediaPlayer_ClearMediaItem + MFPMediaPlayer_SetMediaItem + MFPMediaPlayer_GetMediaItem + MFPMediaPlayer_CreateMediaItemA + MFPMediaPlayer_CreateMediaItemW + MFPMediaPlayer_CreateMediaItemFromObject + + MFPMediaPlayer_GetState + MFPMediaPlayer_SetPosition + MFPMediaPlayer_GetPosition + MFPMediaPlayer_GetDuration + + MFPMediaPlayer_SetRate + MFPMediaPlayer_GetRate + MFPMediaPlayer_GetSupportedRates + + MFPMediaPlayer_GetVolume + MFPMediaPlayer_SetVolume + MFPMediaPlayer_GetBalance + MFPMediaPlayer_SetBalance + MFPMediaPlayer_GetMute + MFPMediaPlayer_SetMute + + MFPMediaPlayer_GetNativeVideoSize + MFPMediaPlayer_GetIdealVideoSize + MFPMediaPlayer_SetVideoSourceRect + MFPMediaPlayer_GetVideoSourceRect + + MFPMediaPlayer_SetAspectRatioMode + MFPMediaPlayer_GetAspectRatioMode + + MFPMediaPlayer_GetVideoWindow + MFPMediaPlayer_UpdateVideo + MFPMediaPlayer_SetBorderColor + MFPMediaPlayer_GetBorderColor + + MFPMediaPlayer_InsertEffect + MFPMediaPlayer_RemoveEffect + MFPMediaPlayer_RemoveAllEffects + MFPMediaPlayer_Shutdown + + ; MFPMediaItem Functions: + MFPMediaItem_Release + MFPMediaItem_GetMediaPlayer + MFPMediaItem_GetURLA + MFPMediaItem_GetURLW + + MFPMediaItem_SetUserData + MFPMediaItem_GetUserData + + MFPMediaItem_SetStartStopPosition + MFPMediaItem_GetStartStopPosition + + MFPMediaItem_HasVideo + MFPMediaItem_HasAudio + MFPMediaItem_IsProtected + + MFPMediaItem_GetDuration + MFPMediaItem_GetNumberOfStreams + MFPMediaItem_SetStreamSelection + MFPMediaItem_GetStreamSelection + + MFPMediaItem_GetStreamAttribute + MFPMediaItem_GetPresentationAttribute + MFPMediaItem_GetCharacteristics + MFPMediaItem_GetMetadata + + MFPMediaItem_SetStreamSink + + ; Media Information + MFPMediaItem_StreamTable + + ; Misc + MFPConvertMSTimeToTimeStringA + MFPConvertMSTimeToTimeStringW + + MFPConvertStringToAnsi + MFPConvertStringToWide + MFPConvertStringFree diff --git a/MFPlayerDll-x64/MFPlayerDll.rap b/MFPlayerDll-x64/MFPlayerDll.rap new file mode 100644 index 0000000..f51584c --- /dev/null +++ b/MFPlayerDll-x64/MFPlayerDll.rap @@ -0,0 +1,139 @@ +[Project] +Assembler=UASM64 +Type=Dll64 Project +Description=MFPlayerDll +Backup=$P\Bak\ +Group=1 +GroupExpand=1 +Debug=0 +Ver.rc=1 +[Files] +1=MFPlayerDll.asm +2=MFPlayer.h +3=MFPlayerDll.rc +4=MFPlayerDll.def +[MakeFiles] +0=MFPlayerDll.rap +1=MFPlayerDll.rc +2=MFPlayerDll.asm +3=MFPlayerDll.obj +4=MFPlayerDll.res +5=MFPlayerDll.exe +6=MFPlayerDll.def +7=MFPlayerDll.dll +8=MFPlayerDll.txt +9=MFPlayerDll.lib +10=MFPlayerDll.mak +11=MFPlayerDll.inf +12=MFPlayerDll.com +13=MFPlayerDll.ocx +14=MFPlayerDll.idl +15=MFPlayerDll.tlb +16=MFPlayerDll.sys +17=MFPlayerDll.dp32 +18=MFPlayerDll.pdb +19=MFPlayerDll.dp64 +[MakeDef] +Menu=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +1=4,O,$B\RC.EXE /v,1 +2=3,O,$B\UASM64.exe /DMFPLAYER_DLL /c -win64 -Zp8 /win64 /D_WIN64 /Cp /nologo /W2 /I"$I",2 +3=7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:"MFPlayerDll.def" /MACHINE:X64 /LIBPATH:"$L" /OUT:"MFPlayer.dll",3,4 +4=0,0,,5 +5=rsrc.obj,O,$B\CVTRES.EXE,rsrc.res +6=*.obj,O,$B\UASM64.exe /c -win64 -Zp8 /win64 /D_WIN64 /Cp /nologo /W2 /I"$I",*.asm +7=0,0,"$E\x64\x64dbg",5 +11=4,O,$B\RC.EXE /v,1 +12=3,O,$B\UASM64.exe /c -win64 -Zp8 /win64 /D_WIN64 /Cp /nologo /W2 /Zi /Zd /I"$I",2 +13=7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /DEBUG /DEBUGTYPE:CV /PDB:"$18" /DLL /DEF:$6 /MACHINE:X64 /LIBPATH:"$L" /OUT:"$7",3 +14=0,0,,5 +15=rsrc.obj,O,$B\CVTRES.EXE,rsrc.res +16=*.obj,O,$B\UASM64.exe /c -win64 -Zp8 /win64 /D_WIN64 /Cp /nologo /W2 /Zi /Zd /I"$I",*.asm +17=0,0,"$E\x64\x64dbg",$.exe +[Group] +Group=Assembly,Resources +1=1 +2=1 +3=2 +4=1 +[AutoLoad] +AutoLoad=2,4,1 +[RADebugBP] +4= +1= +2= +[VerInf] +Nme=VERINF1 +ID=1 +FV=1.0.0.0 +PV=1.0.0.0 +VerOS=0x00000004 +VerFT=0x00000002 +VerLNG=0x00000409 +VerCHS=0x000004B0 +ProductVersion=1.0.0.0 +ProductName=MFPlayer.dll +OriginalFilename=MFPlayer.dll +LegalTrademarks= +LegalCopyright= +InternalName=MFPlayer.dll +FileDescription=MFPlayer.dll +FileVersion=1.0.0.0 +CompanyName=fearless +[VersionControl] +Settings=1279 +Milestones=129 +MilestoneEvery=10 +MilestoneEveryCurrent=0 +MilestoneOnBuild=0.0.0.0 +MilestoneOnTime=2 +MilestoneOnDate=0 +MilestoneOnDateWhen=1 +MilestoneOnDateStatus=0 +MilestoneOnDateDate=17 +MilestoneOnDateTimeYear=2025 +MilestoneOnDateTimeMonth=1 +MilestoneOnDateTimeDate=17 +MilestoneOnDateTimeHour=12 +MilestoneOnDateTimeMin=37 +MilestoneOnDateTimeSec=58 +MilestoneOnDateTimeStatus=0 +BackupLocation=M:\radasm\UASM64\Projects\VCBackups\ +CompressionLevel=0 +DefaultComment=Project $N, $Z, Backup Created On $D At $T. +ExcludeExt1=\ +ExcludeExt2=\ +ExcludeExt3=\ +ExcludeExt4=\ +FileVerLength=4 +FileVer2Range=0 +FileVer3Range=0 +FileVer4Range=0 +ProductVerLength=4 +ProductVer2Range=0 +ProductVer3Range=0 +ProductVer4Range=0 +[PTimer] +PTimer=1723532 +[Collapse] +1= +2= +4= +[Size] +1=0,0,0,0,1128 +2=0,0,0,0,19000 +4=0,0,0,0,96 +[GroupExpand] +GroupExpand=1,1,0 +[BookMark] +0= +1= +2= +3= +4= +5= +6= +7= +8= +9= +[BreakPoint] +0= diff --git a/MFPlayerDll-x64/MFPlayerDll.rc b/MFPlayerDll-x64/MFPlayerDll.rc new file mode 100644 index 0000000..39a5bb1 --- /dev/null +++ b/MFPlayerDll-x64/MFPlayerDll.rc @@ -0,0 +1 @@ +#include "Res/MFPlayerDllVer.rc" diff --git a/MFPlayerDll-x64/Res/MFPlayerDllVer.rc b/MFPlayerDll-x64/Res/MFPlayerDllVer.rc new file mode 100644 index 0000000..e89c471 --- /dev/null +++ b/MFPlayerDll-x64/Res/MFPlayerDllVer.rc @@ -0,0 +1,25 @@ +#define VERINF1 1 +VERINF1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEOS 0x00000004 +FILETYPE 0x00000002 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "fearless\0" + VALUE "FileVersion", "1.0.0.0\0" + VALUE "FileDescription", "MFPlayer.dll\0" + VALUE "InternalName", "MFPlayer.dll\0" + VALUE "OriginalFilename", "MFPlayer.dll\0" + VALUE "ProductName", "MFPlayer.dll\0" + VALUE "ProductVersion", "1.0.0.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END diff --git a/MFPlayerDll-x64/mfplay.lib b/MFPlayerDll-x64/mfplay.lib new file mode 100644 index 0000000..ab655d7 Binary files /dev/null and b/MFPlayerDll-x64/mfplay.lib differ diff --git a/MFPlayerDll-x86/MFPlayer.dll b/MFPlayerDll-x86/MFPlayer.dll new file mode 100644 index 0000000..b18506f Binary files /dev/null and b/MFPlayerDll-x86/MFPlayer.dll differ diff --git a/MFPlayerDll-x86/MFPlayer.h b/MFPlayerDll-x86/MFPlayer.h new file mode 100644 index 0000000..b343be5 --- /dev/null +++ b/MFPlayerDll-x86/MFPlayer.h @@ -0,0 +1,533 @@ +//============================================================================== +// +// MFPlayer x86 Library +// +// http://github.com/mrfearless +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the author be held liable for any damages arising from the +// use of this software. +// +//============================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef _MSC_VER // MSVC compiler +#define MFP_EXPORT __declspec(dllexport) __stdcall +#else +#define MFP_EXPORT +#endif + +//------------------------------------------------------------------------------ +// MFPMediaPlayer Constants, Enums, Structures, Etc +//------------------------------------------------------------------------------ +#ifndef HRESULT +typedef HRESULT TYPEDEF DWORD +#endif + +#define STREAMLANG_LENGTH 28 +#define STREAMNAME_LENGTH 28 + +typedef UINT32 MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum _MFP_CREATION_OPTIONS + { + MFP_OPTION_NONE = 0, + MFP_OPTION_FREE_THREADED_CALLBACK = 0x1, + MFP_OPTION_NO_MMCSS = 0x2, + MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION = 0x4 + } _MFP_CREATION_OPTIONS; + +typedef /* [v1_enum] */ +enum MFP_MEDIAPLAYER_STATE + { + MFP_MEDIAPLAYER_STATE_EMPTY = 0, + MFP_MEDIAPLAYER_STATE_STOPPED = 0x1, + MFP_MEDIAPLAYER_STATE_PLAYING = 0x2, + MFP_MEDIAPLAYER_STATE_PAUSED = 0x3, + MFP_MEDIAPLAYER_STATE_SHUTDOWN = 0x4 + } MFP_MEDIAPLAYER_STATE; + +typedef UINT32 MFP_MEDIAITEM_CHARACTERISTICS; + +typedef /* [v1_enum] */ +enum _MFP_MEDIAITEM_CHARACTERISTICS + { + MFP_MEDIAITEM_IS_LIVE = 0x1, + MFP_MEDIAITEM_CAN_SEEK = 0x2, + MFP_MEDIAITEM_CAN_PAUSE = 0x4, + MFP_MEDIAITEM_HAS_SLOW_SEEK = 0x8 + } _MFP_MEDIAITEM_CHARACTERISTICS; + +typedef UINT32 MFP_CREDENTIAL_FLAGS; + +typedef /* [v1_enum] */ +enum _MFP_CREDENTIAL_FLAGS + { + MFP_CREDENTIAL_PROMPT = 0x1, + MFP_CREDENTIAL_SAVE = 0x2, + MFP_CREDENTIAL_DO_NOT_CACHE = 0x4, + MFP_CREDENTIAL_CLEAR_TEXT = 0x8, + MFP_CREDENTIAL_PROXY = 0x10, + MFP_CREDENTIAL_LOGGED_ON_USER = 0x20 + } _MFP_CREDENTIAL_FLAGS; + +typedef +enum MFP_EVENT_TYPE + { + MFP_EVENT_TYPE_PLAY = 0, + MFP_EVENT_TYPE_PAUSE = 1, + MFP_EVENT_TYPE_STOP = 2, + MFP_EVENT_TYPE_POSITION_SET = 3, + MFP_EVENT_TYPE_RATE_SET = 4, + MFP_EVENT_TYPE_MEDIAITEM_CREATED = 5, + MFP_EVENT_TYPE_MEDIAITEM_SET = 6, + MFP_EVENT_TYPE_FRAME_STEP = 7, + MFP_EVENT_TYPE_MEDIAITEM_CLEARED = 8, + MFP_EVENT_TYPE_MF = 9, + MFP_EVENT_TYPE_ERROR = 10, + MFP_EVENT_TYPE_PLAYBACK_ENDED = 11, + MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL = 12 + } MFP_EVENT_TYPE; + +typedef +enum MediaEventType + { + MEUnknown = 0, + MEError = 1, + MEExtendedType = 2, + MENonFatalError = 3, + MEGenericV1Anchor = MENonFatalError, + MESessionUnknown = 100, + MESessionTopologySet = 101, + MESessionTopologiesCleared = 102, + MESessionStarted = 103, + MESessionPaused = 104, + MESessionStopped = 105, + MESessionClosed = 106, + MESessionEnded = 107, + MESessionRateChanged = 108, + MESessionScrubSampleComplete = 109, + MESessionCapabilitiesChanged = 110, + MESessionTopologyStatus = 111, + MESessionNotifyPresentationTime = 112, + MENewPresentation = 113, + MELicenseAcquisitionStart = 114, + MELicenseAcquisitionCompleted = 115, + MEIndividualizationStart = 116, + MEIndividualizationCompleted = 117, + MEEnablerProgress = 118, + MEEnablerCompleted = 119, + MEPolicyError = 120, + MEPolicyReport = 121, + MEBufferingStarted = 122, + MEBufferingStopped = 123, + MEConnectStart = 124, + MEConnectEnd = 125, + MEReconnectStart = 126, + MEReconnectEnd = 127, + MERendererEvent = 128, + MESessionStreamSinkFormatChanged = 129, + MESessionV1Anchor = MESessionStreamSinkFormatChanged, + MESourceUnknown = 200, + MESourceStarted = 201, + MEStreamStarted = 202, + MESourceSeeked = 203, + MEStreamSeeked = 204, + MENewStream = 205, + MEUpdatedStream = 206, + MESourceStopped = 207, + MEStreamStopped = 208, + MESourcePaused = 209, + MEStreamPaused = 210, + MEEndOfPresentation = 211, + MEEndOfStream = 212, + MEMediaSample = 213, + MEStreamTick = 214, + MEStreamThinMode = 215, + MEStreamFormatChanged = 216, + MESourceRateChanged = 217, + MEEndOfPresentationSegment = 218, + MESourceCharacteristicsChanged = 219, + MESourceRateChangeRequested = 220, + MESourceMetadataChanged = 221, + MESequencerSourceTopologyUpdated = 222, + MESourceV1Anchor = MESequencerSourceTopologyUpdated, + MESinkUnknown = 300, + MEStreamSinkStarted = 301, + MEStreamSinkStopped = 302, + MEStreamSinkPaused = 303, + MEStreamSinkRateChanged = 304, + MEStreamSinkRequestSample = 305, + MEStreamSinkMarker = 306, + MEStreamSinkPrerolled = 307, + MEStreamSinkScrubSampleComplete = 308, + MEStreamSinkFormatChanged = 309, + MEStreamSinkDeviceChanged = 310, + MEQualityNotify = 311, + MESinkInvalidated = 312, + MEAudioSessionNameChanged = 313, + MEAudioSessionVolumeChanged = 314, + MEAudioSessionDeviceRemoved = 315, + MEAudioSessionServerShutdown = 316, + MEAudioSessionGroupingParamChanged = 317, + MEAudioSessionIconChanged = 318, + MEAudioSessionFormatChanged = 319, + MEAudioSessionDisconnected = 320, + MEAudioSessionExclusiveModeOverride = 321, + MESinkV1Anchor = MEAudioSessionExclusiveModeOverride, + MECaptureAudioSessionVolumeChanged = 322, + MECaptureAudioSessionDeviceRemoved = 323, + MECaptureAudioSessionFormatChanged = 324, + MECaptureAudioSessionDisconnected = 325, + MECaptureAudioSessionExclusiveModeOverride = 326, + MECaptureAudioSessionServerShutdown = 327, + MESinkV2Anchor = MECaptureAudioSessionServerShutdown, + METrustUnknown = 400, + MEPolicyChanged = 401, + MEContentProtectionMessage = 402, + MEPolicySet = 403, + METrustV1Anchor = MEPolicySet, + MEWMDRMLicenseBackupCompleted = 500, + MEWMDRMLicenseBackupProgress = 501, + MEWMDRMLicenseRestoreCompleted = 502, + MEWMDRMLicenseRestoreProgress = 503, + MEWMDRMLicenseAcquisitionCompleted = 506, + MEWMDRMIndividualizationCompleted = 508, + MEWMDRMIndividualizationProgress = 513, + MEWMDRMProximityCompleted = 514, + MEWMDRMLicenseStoreCleaned = 515, + MEWMDRMRevocationDownloadCompleted = 516, + MEWMDRMV1Anchor = MEWMDRMRevocationDownloadCompleted, + METransformUnknown = 600, + METransformNeedInput = ( METransformUnknown + 1 ) , + METransformHaveOutput = ( METransformNeedInput + 1 ) , + METransformDrainComplete = ( METransformHaveOutput + 1 ) , + METransformMarker = ( METransformDrainComplete + 1 ) , + METransformInputStreamStateChanged = ( METransformMarker + 1 ) , + MEByteStreamCharacteristicsChanged = 700, + MEVideoCaptureDeviceRemoved = 800, + MEVideoCaptureDevicePreempted = 801, + MEStreamSinkFormatInvalidated = 802, + MEEncodingParameters = 803, + MEContentProtectionMetadata = 900, + MEDeviceThermalStateChanged = 950, + MEReservedMax = 10000 + } MediaEventType; + +typedef +enum MFVideoAspectRatioMode + { + MFVideoARMode_None = 0, + MFVideoARMode_PreservePicture = 0x1, + MFVideoARMode_PreservePixel = 0x2, + MFVideoARMode_NonLinearStretch = 0x4, + MFVideoARMode_Mask = 0x7 + } MFVideoAspectRatioMode; + +typedef +enum _MFVideoInterlaceMode + { + MFVideoInterlace_Unknown = 0, + MFVideoInterlace_Progressive = 2, + MFVideoInterlace_FieldInterleavedUpperFirst = 3, + MFVideoInterlace_FieldInterleavedLowerFirst = 4, + MFVideoInterlace_FieldSingleUpper = 5, + MFVideoInterlace_FieldSingleLower = 6, + MFVideoInterlace_MixedInterlaceOrProgressive = 7, + MFVideoInterlace_Last = ( MFVideoInterlace_MixedInterlaceOrProgressive + 1 ) , + MFVideoInterlace_ForceDWORD = 0x7fffffff + } MFVideoInterlaceMode; + +#ifndef _MFP_STREAM_RECORD_ +#define _MFP_STREAM_RECORD_ +typedef struct MFP_STREAM_RECORD + DWORD dwStreamID; + BOOL bSelected; + BYTE szStreamLang[STREAMLANG_LENGTH+4]; + BYTE szStreamName[STREAMNAME_LENGTH+4]; + DWORD dwMajorType; + DWORD dwSubType; + DWORD dwBitRate; + union { + struct { + DWORD dwChannels; + DWORD dwSpeakers; + DWORD dwBitsPerSample; + DWORD dwSamplesPerSec; + } AudioSteamInfo; + struct { + DWORD dwFrameRate; + DWORD dwFrameWidth; + DWORD dwFrameHeight; + DWORD dwInterlace; + } VideoStreamInfo; + } StreamInfo; +} MFP_STREAM_RECORD; +#endif + +#ifndef _MFP_EVENT_HEADER_ +#define _MFP_EVENT_HEADER_ +typedef struct MFP_EVENT_HEADER + { + MFP_EVENT_TYPE eEventType; + HRESULT hrEvent; + IMFPMediaPlayer *pMediaPlayer; + MFP_MEDIAPLAYER_STATE eState; + IPropertyStore *pPropertyStore; + } MFP_EVENT_HEADER; +#endif + +#ifndef _MFP_PLAY_EVENT_ +#define _MFP_PLAY_EVENT_ +typedef struct MFP_PLAY_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAY_EVENT; +#endif + +#ifndef _MFP_PAUSE_EVENT_ +#define _MFP_PAUSE_EVENT_ +typedef struct MFP_PAUSE_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PAUSE_EVENT; +#endif + +#ifndef _MFP_STOP_EVENT_ +#define _MFP_STOP_EVENT_ +typedef struct MFP_STOP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_STOP_EVENT; +#endif + +#ifndef _MFP_POSITION_SET_EVENT_ +#define _MFP_POSITION_SET_EVENT_ +typedef struct MFP_POSITION_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_POSITION_SET_EVENT; +#endif + +#ifndef _MFP_RATE_SET_EVENT_ +#define _MFP_RATE_SET_EVENT_ +typedef struct MFP_RATE_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + float flRate; + } MFP_RATE_SET_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CREATED_EVENT_ +#define _MFP_MEDIAITEM_CREATED_EVENT_ +typedef struct MFP_MEDIAITEM_CREATED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + DWORD_PTR dwUserData; + } MFP_MEDIAITEM_CREATED_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_SET_EVENT_ +#define _MFP_MEDIAITEM_SET_EVENT_ +typedef struct MFP_MEDIAITEM_SET_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_SET_EVENT; +#endif + +#ifndef _MFP_FRAME_STEP_EVENT_ +#define _MFP_FRAME_STEP_EVENT_ +typedef struct MFP_FRAME_STEP_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_FRAME_STEP_EVENT; +#endif + +#ifndef _MFP_MEDIAITEM_CLEARED_EVENT_ +#define _MFP_MEDIAITEM_CLEARED_EVENT_ +typedef struct MFP_MEDIAITEM_CLEARED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_MEDIAITEM_CLEARED_EVENT; +#endif + +#ifndef _MFP_MF_EVENT_ +#define _MFP_MF_EVENT_ +typedef struct MFP_MF_EVENT + { + MFP_EVENT_HEADER header; + MediaEventType MFEventType; + IMFMediaEvent *pMFMediaEvent; + IMFPMediaItem *pMediaItem; + } MFP_MF_EVENT; +#endif + +#ifndef _MFP_ERROR_EVENT_ +#define _MFP_ERROR_EVENT_ +typedef struct MFP_ERROR_EVENT + { + MFP_EVENT_HEADER header; + } MFP_ERROR_EVENT; +#endif + +#ifndef _MFP_PLAYBACK_ENDED_EVENT_ +#define _MFP_PLAYBACK_ENDED_EVENT_ +typedef struct MFP_PLAYBACK_ENDED_EVENT + { + MFP_EVENT_HEADER header; + IMFPMediaItem *pMediaItem; + } MFP_PLAYBACK_ENDED_EVENT; +#endif + +#ifndef _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +#define _MFP_ACQUIRE_USER_CREDENTIAL_EVENT_ +typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT + { + MFP_EVENT_HEADER header; + DWORD_PTR dwUserData; + BOOL fProceedWithAuthentication; + HRESULT hrAuthenticationStatus; + LPCWSTR pwszURL; + LPCWSTR pwszSite; + LPCWSTR pwszRealm; + LPCWSTR pwszPackage; + LONG nRetries; + MFP_CREDENTIAL_FLAGS flags; + IMFNetCredential *pCredential; + } MFP_ACQUIRE_USER_CREDENTIAL_EVENT; +#endif + +#ifndef _MFVideoNormalizedRect_ +#define _MFVideoNormalizedRect_ +typedef struct MFVideoNormalizedRect + { + float left; + float top; + float right; + float bottom; + } MFVideoNormalizedRect; +#endif + + +/*------------------------------------------------------------------------------ +// MFPlayer Library Function Prototypes +//----------------------------------------------------------------------------*/ + +// MFPMediaPlayer Functions: +bool MFP_EXPORT MFPMediaPlayer_Init(HWND hMFPWindow, void *pCallback, IMFPMediaPlayer **ppMediaPlayer); +void MFP_EXPORT MFPMediaPlayer_Free(IMFPMediaPlayer **ppMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_Play(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Pause(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Stop(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Step(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Toggle(IMFPMediaPlayer *pMediaPlayer); + +bool MFP_EXPORT MFPMediaPlayer_ClearMediaItem(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaPlayer_GetMediaItem(IMFPMediaPlayer *pMediaPlayer, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemA(IMFPMediaPlayer *pMediaPlayer, LPCSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemW(IMFPMediaPlayer *pMediaPlayer, LPCWSTR *lpszMediaItem, DWORD dwUserData, IMFPMediaItem **ppMediaItem); +bool MFP_EXPORT MFPMediaPlayer_CreateMediaItemFromObject(IMFPMediaPlayer *pMediaPlayer, IUnknown *pIUnknownObj, DWORD dwUserData, IMFPMediaItem **ppMediaItem); + +bool MFP_EXPORT MFPMediaPlayer_GetState(IMFPMediaPlayer *pMediaPlayer, MFP_MEDIAPLAYER_STATE *peState); +bool MFP_EXPORT MFPMediaPlayer_SetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD dwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetPosition(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwMilliseconds); +bool MFP_EXPORT MFPMediaPlayer_GetDuration(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwMilliseconds); + +bool MFP_EXPORT MFPMediaPlayer_SetRate(IMFPMediaPlayer *pMediaPlayer, DWORD dwRate); +bool MFP_EXPORT MFPMediaPlayer_GetRate(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwRate); +bool MFP_EXPORT MFPMediaPlayer_GetSupportedRates(IMFPMediaPlayer *pMediaPlayer, BOOL bForwardDirection, DWORD *pdwSlowestRate, DWORD *pdwFastestRate); + +bool MFP_EXPORT MFPMediaPlayer_GetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwVolume); +bool MFP_EXPORT MFPMediaPlayer_SetVolume(IMFPMediaPlayer *pMediaPlayer, DWORD dwVolume); +bool MFP_EXPORT MFPMediaPlayer_GetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwBalance); +bool MFP_EXPORT MFPMediaPlayer_SetBalance(IMFPMediaPlayer *pMediaPlayer, DWORD dwBalance); +bool MFP_EXPORT MFPMediaPlayer_GetMute(IMFPMediaPlayer *pMediaPlayer, BOOL *pbMute); +bool MFP_EXPORT MFPMediaPlayer_SetMute(IMFPMediaPlayer *pMediaPlayer, BOOL bMute); + +bool MFP_EXPORT MFPMediaPlayer_GetNativeVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszVideo, SIZE *pszARVideo); +bool MFP_EXPORT MFPMediaPlayer_GetIdealVideoSize(IMFPMediaPlayer *pMediaPlayer, SIZE *pszMin, SIZE *pszMax); +bool MFP_EXPORT MFPMediaPlayer_SetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, const MFVideoNormalizedRect *pnrcSource); +bool MFP_EXPORT MFPMediaPlayer_GetVideoSourceRect(IMFPMediaPlayer *pMediaPlayer, MFVideoNormalizedRect *pnrcSource); + +bool MFP_EXPORT MFPMediaPlayer_SetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD dwAspectRatioMode); +bool MFP_EXPORT MFPMediaPlayer_GetAspectRatioMode(IMFPMediaPlayer *pMediaPlayer, DWORD *pdwAspectRatioMode); + +bool MFP_EXPORT MFPMediaPlayer_GetVideoWindow(IMFPMediaPlayer *pMediaPlayer, HWND *phwndVideo); +bool MFP_EXPORT MFPMediaPlayer_UpdateVideo(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_SetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF Color); +bool MFP_EXPORT MFPMediaPlayer_GetBorderColor(IMFPMediaPlayer *pMediaPlayer, COLORREF *pColor); + +bool MFP_EXPORT MFPMediaPlayer_InsertEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect, BOOL bOptional); +bool MFP_EXPORT MFPMediaPlayer_RemoveEffect(IMFPMediaPlayer *pMediaPlayer, IUnknown *pEffect); +bool MFP_EXPORT MFPMediaPlayer_RemoveAllEffects(IMFPMediaPlayer *pMediaPlayer); +bool MFP_EXPORT MFPMediaPlayer_Shutdown(IMFPMediaPlayer *pMediaPlayer); + +// MFPMediaItem Functions: +bool MFP_EXPORT MFPMediaItem_Release(IMFPMediaItem *pMediaItem); +bool MFP_EXPORT MFPMediaItem_GetMediaPlayer(IMFPMediaItem *pMediaItem, IMFPMediaPlayer **ppMediaPlayer); +bool MFP_EXPORT MFPMediaItem_GetURLA(IMFPMediaItem *pMediaItem, LPSTR *ppszURL); +bool MFP_EXPORT MFPMediaItem_GetURLW(IMFPMediaItem *pMediaItem, LPWSTR *ppszURL); + +bool MFP_EXPORT MFPMediaItem_SetUserData(IMFPMediaItem *pMediaItem, DWORD dwUserData); +bool MFP_EXPORT MFPMediaItem_GetUserData(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwUserData); + +bool MFP_EXPORT MFPMediaItem_SetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD dwStartValue, DWORD dwStopValue); +bool MFP_EXPORT MFPMediaItem_GetStartStopPosition(IMFPMediaItem *pMediaItem, DWORD_PTR *pdwStartValue, DWORD_PTR *pdwStopValue); + +bool MFP_EXPORT MFPMediaItem_HasVideo(IMFPMediaItem *pMediaItem, BOOL *pbHasVideo, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_HasAudio(IMFPMediaItem *pMediaItem, BOOL *pbHasAudio, BOOL *pbSelected); +bool MFP_EXPORT MFPMediaItem_IsProtected(IMFPMediaItem *pMediaItem, BOOL *pbProtected); + +bool MFP_EXPORT MFPMediaItem_GetDuration(IMFPMediaItem *pMediaItem, DWORD *pdwMilliseconds); +bool MFP_EXPORT MFPMediaItem_GetNumberOfStreams(IMFPMediaItem *pMediaItem, DWORD *pdwStreamCount); +bool MFP_EXPORT MFPMediaItem_SetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL bEnabled); +bool MFP_EXPORT MFPMediaItem_GetStreamSelection(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, BOOL *pbEnabled); + +bool MFP_EXPORT MFPMediaItem_GetStreamAttribute(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetPresentationAttribute(IMFPMediaItem *pMediaItem, REFGUID guidMFAttribute, PROPVARIANT *pvValue); +bool MFP_EXPORT MFPMediaItem_GetCharacteristics(IMFPMediaItem *pMediaItem, MFP_MEDIAITEM_CHARACTERISTICS *pCharacteristics); +bool MFP_EXPORT MFPMediaItem_GetMetadata(IMFPMediaItem *pMediaItem, IPropertyStore **ppMetadataStore); + +bool MFP_EXPORT MFPMediaItem_SetStreamSink(IMFPMediaItem *pMediaItem, DWORD dwStreamIndex, IUnknown *pMediaSink); + +// Media Information +bool MFP_EXPORT MFPMediaItem_StreamTable(IMFPMediaItem *pMediaItem, DWORD *lpdwStreamCount, DWORD *lpdwStreamTable); + +// Misc +bool MFP_EXPORT MFPConvertMSTimeToTimeStringA(dwMilliseconds:DWORD, LPSTR *lpszTime:DWORD, DWORD dwTimeFormat); +bool MFP_EXPORT MFPConvertMSTimeToTimeStringW(dwMilliseconds:DWORD, LPWSTR *lpszTime:DWORD, DWORD dwTimeFormat); + +LPSTR * MFP_EXPORT MFPConvertStringToAnsi(LPWSTR *lpszWideString); +LPWSTR * MFP_EXPORT MFPConvertStringToWide(LPSTR *lpszAnsiString); +void MFP_EXPORT MFPConvertStringFree(LPWSTR *lpString); + +#ifdef UNICODE +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemW +#define MFPMediaItem_GetURL MFPMediaItem_GetURLW +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringW +#else // ANSI +#define MFPMediaPlayer_CreateMediaItem MFPMediaPlayer_CreateMediaItemA +#define MFPMediaItem_GetURL MFPMediaItem_GetURLA +#define MFPConvertMSTimeToTimeString MFPConvertMSTimeToTimeStringA +#endif + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/MFPlayerDll-x86/MFPlayer.inc b/MFPlayerDll-x86/MFPlayer.inc new file mode 100644 index 0000000..22919d1 --- /dev/null +++ b/MFPlayerDll-x86/MFPlayer.inc @@ -0,0 +1,576 @@ +;============================================================================== +; +; MFPlayer x86 Library +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== +; +; MFPlayer Library consists of functions that wrap the MFPlay COM +; implementation of the IMFPMediaPlayer and IMFPMediaItem objects. MFPlay is a +; Microsoft Media Foundation API for creating media playback applications. Thus +; the MFPlayer Library functions hide the complexities of interacting with the +; COM objects. +; +;------------------------------------------------------------------------------- + +includelib MFPlay.lib + +; MFPMediaPlayer Functions: +MFPMediaPlayer_Init PROTO hMFPWindow:DWORD, pCallback:DWORD, ppMediaPlayer:DWORD +MFPMediaPlayer_Free PROTO ppMediaPlayer:DWORD + +MFPMediaPlayer_Play PROTO pMediaPlayer:DWORD +MFPMediaPlayer_Pause PROTO pMediaPlayer:DWORD +MFPMediaPlayer_Stop PROTO pMediaPlayer:DWORD +MFPMediaPlayer_Step PROTO pMediaPlayer:DWORD +MFPMediaPlayer_Toggle PROTO pMediaPlayer:DWORD + +MFPMediaPlayer_ClearMediaItem PROTO pMediaPlayer:DWORD +MFPMediaPlayer_SetMediaItem PROTO pMediaPlayer:DWORD, pMediaItem:DWORD +MFPMediaPlayer_GetMediaItem PROTO pMediaPlayer:DWORD, ppMediaItem:DWORD +MFPMediaPlayer_CreateMediaItemA PROTO pMediaPlayer:DWORD, lpszMediaItem:DWORD, dwUserData:DWORD, ppMediaItem:DWORD +MFPMediaPlayer_CreateMediaItemW PROTO pMediaPlayer:DWORD, lpszMediaItem:DWORD, dwUserData:DWORD, ppMediaItem:DWORD +MFPMediaPlayer_CreateMediaItemFromObject PROTO pMediaPlayer:DWORD, pIUnknownObj:DWORD, dwUserData:DWORD, ppMediaItem:DWORD + +MFPMediaPlayer_GetState PROTO pMediaPlayer:DWORD, pState:DWORD +MFPMediaPlayer_SetPosition PROTO pMediaPlayer:DWORD, dwMilliseconds:DWORD +MFPMediaPlayer_GetPosition PROTO pMediaPlayer:DWORD, pdwMilliseconds:DWORD +MFPMediaPlayer_GetDuration PROTO pMediaPlayer:DWORD, pdwMilliseconds:DWORD + +MFPMediaPlayer_SetRate PROTO pMediaPlayer:DWORD, dwRate:DWORD +MFPMediaPlayer_GetRate PROTO pMediaPlayer:DWORD, pdwRate:DWORD +MFPMediaPlayer_GetSupportedRates PROTO pMediaPlayer:DWORD, bForwardDirection:DWORD, pdwSlowestRate:DWORD, pdwFastestRate:DWORD + +MFPMediaPlayer_GetVolume PROTO pMediaPlayer:DWORD, pdwVolume:DWORD +MFPMediaPlayer_SetVolume PROTO pMediaPlayer:DWORD, dwVolume:DWORD +MFPMediaPlayer_GetBalance PROTO pMediaPlayer:DWORD, pdwBalance:DWORD +MFPMediaPlayer_SetBalance PROTO pMediaPlayer:DWORD, dwBalance:SDWORD +MFPMediaPlayer_GetMute PROTO pMediaPlayer:DWORD, pbMute:DWORD +MFPMediaPlayer_SetMute PROTO pMediaPlayer:DWORD, bMute:DWORD + +MFPMediaPlayer_GetNativeVideoSize PROTO pMediaPlayer:DWORD, pszVideo:DWORD, pszARVideo:DWORD +MFPMediaPlayer_GetIdealVideoSize PROTO pMediaPlayer:DWORD, pszMin:DWORD, pszMax:DWORD +MFPMediaPlayer_SetVideoSourceRect PROTO pMediaPlayer:DWORD, pnrcSource:DWORD +MFPMediaPlayer_GetVideoSourceRect PROTO pMediaPlayer:DWORD, pnrcSource:DWORD + +MFPMediaPlayer_SetAspectRatioMode PROTO pMediaPlayer:DWORD, dwAspectRatioMode:DWORD +MFPMediaPlayer_GetAspectRatioMode PROTO pMediaPlayer:DWORD, pdwAspectRatioMode:DWORD + +MFPMediaPlayer_GetVideoWindow PROTO pMediaPlayer:DWORD, phwndVideo:DWORD +MFPMediaPlayer_UpdateVideo PROTO pMediaPlayer:DWORD +MFPMediaPlayer_SetBorderColor PROTO pMediaPlayer:DWORD, Color:DWORD +MFPMediaPlayer_GetBorderColor PROTO pMediaPlayer:DWORD, pColor:DWORD + +MFPMediaPlayer_InsertEffect PROTO pMediaPlayer:DWORD, pEffect:DWORD, bOptional:DWORD +MFPMediaPlayer_RemoveEffect PROTO pMediaPlayer:DWORD, pEffect:DWORD +MFPMediaPlayer_RemoveAllEffects PROTO pMediaPlayer:DWORD +MFPMediaPlayer_Shutdown PROTO pMediaPlayer:DWORD + +; MFPMediaItem Functions: +MFPMediaItem_Release PROTO pMediaItem:DWORD +MFPMediaItem_GetMediaPlayer PROTO pMediaItem:DWORD, ppMediaPlayer:DWORD +MFPMediaItem_GetURLA PROTO pMediaItem:DWORD, ppszURL:DWORD +MFPMediaItem_GetURLW PROTO pMediaItem:DWORD, ppszURL:DWORD + +MFPMediaItem_SetUserData PROTO pMediaItem:DWORD, dwUserData:DWORD +MFPMediaItem_GetUserData PROTO pMediaItem:DWORD, pdwUserData:DWORD + +MFPMediaItem_SetStartStopPosition PROTO pMediaItem:DWORD, dwStartValue:DWORD, dwStopValue:DWORD +MFPMediaItem_GetStartStopPosition PROTO pMediaItem:DWORD, pdwStartValue:DWORD, pdwStopValue:DWORD + +MFPMediaItem_HasVideo PROTO pMediaItem:DWORD, pbHasVideo:DWORD, pbSelected:DWORD +MFPMediaItem_HasAudio PROTO pMediaItem:DWORD, pbHasAudio:DWORD, pbSelected:DWORD +MFPMediaItem_IsProtected PROTO pMediaItem:DWORD, pbProtected:DWORD + +MFPMediaItem_GetDuration PROTO pMediaItem:DWORD, pdwMilliseconds:DWORD +MFPMediaItem_GetNumberOfStreams PROTO pMediaItem:DWORD, pdwStreamCount:DWORD +MFPMediaItem_SetStreamSelection PROTO pMediaItem:DWORD, dwStreamIndex:DWORD, bEnabled:DWORD +MFPMediaItem_GetStreamSelection PROTO pMediaItem:DWORD, dwStreamIndex:DWORD, pbEnabled:DWORD + +MFPMediaItem_GetStreamAttribute PROTO pMediaItem:DWORD, dwStreamIndex:DWORD, guidMFAttribute:DWORD, pvValue:DWORD +MFPMediaItem_GetPresentationAttribute PROTO pMediaItem:DWORD, guidMFAttribute:DWORD, pvValue:DWORD +MFPMediaItem_GetCharacteristics PROTO pMediaItem:DWORD, pCharacteristics:DWORD +MFPMediaItem_GetMetadata PROTO pMediaItem:DWORD, ppMetadataStore:DWORD + +MFPMediaItem_SetStreamSink PROTO pMediaItem:DWORD, dwStreamIndex:DWORD, pMediaSink:DWORD + +; Media Information +MFPMediaItem_StreamTable PROTO pMediaItem:DWORD, lpdwStreamCount:DWORD, lpdwStreamTable:DWORD + +; Misc +MFPConvertMSTimeToTimeStringA PROTO dwMilliseconds:DWORD, lpszTime:DWORD, dwTimeFormat:DWORD +MFPConvertMSTimeToTimeStringW PROTO dwMilliseconds:DWORD, lpszTime:DWORD, dwTimeFormat:DWORD + +MFPConvertStringToAnsi PROTO lpszWideString:DWORD +MFPConvertStringToWide PROTO lpszAnsiString:DWORD +MFPConvertStringFree PROTO lpString:DWORD + +IFDEF __UNICODE__ + MFPMediaPlayer_CreateMediaItem EQU + MFPMediaItem_GetURL EQU + MFPConvertMSTimeToTimeString EQU +ELSE ; ANSI + MFPMediaPlayer_CreateMediaItem EQU + MFPMediaItem_GetURL EQU + MFPConvertMSTimeToTimeString EQU +ENDIF + + +;------------------------------------------------------------------------------ +; MFPMediaPlayer Structures +;------------------------------------------------------------------------------ +IFNDEF MFP_CREATION_OPTIONS +MFP_CREATION_OPTIONS TYPEDEF DWORD +ENDIF +IFNDEF MFP_MEDIAPLAYER_STATE +MFP_MEDIAPLAYER_STATE TYPEDEF DWORD +ENDIF +IFNDEF MFP_MEDIAITEM_CHARACTERISTICS +MFP_MEDIAITEM_CHARACTERISTICS TYPEDEF DWORD +ENDIF +IFNDEF MFP_CREDENTIAL_FLAGS +MFP_CREDENTIAL_FLAGS TYPEDEF DWORD +ENDIF +IFNDEF MFP_EVENT_TYPE +MFP_EVENT_TYPE TYPEDEF DWORD +ENDIF +IFNDEF MediaEventType +MediaEventType TYPEDEF DWORD +ENDIF +IFNDEF HRESULT +HRESULT TYPEDEF DWORD +ENDIF + +STREAMLANG_LENGTH EQU 28 +STREAMNAME_LENGTH EQU 28 + +IFNDEF MFP_STREAM_RECORD +MFP_STREAM_RECORD STRUCT + dwStreamID DD ? + bSelected DD ? ; bool + szStreamLang DB (STREAMLANG_LENGTH+4) DUP (?) + szStreamName DB (STREAMNAME_LENGTH+4) DUP (?) + dwMajorType DD ? ; Video, Audio, etc + dwSubType DD ? ; Video or Audio subtype + dwBitRate DD ? ; kilobits per second: kbps + UNION + STRUCT + dwChannels DD ? ; 6 = 5.1 etc + dwSpeakers DD ? ; positioning of speakers + dwBitsPerSample DD ? ; bitdepth for lossless + dwSamplesPerSec DD ? ; kHz + ENDS + STRUCT + dwFrameRate DD ? ; fps + dwFrameWidth DD ? ; px + dwFrameHeight DD ? ; px + dwInterlace DD ? ; mode + ENDS + ENDS +MFP_STREAM_RECORD ENDS +ENDIF + +IFNDEF MFP_EVENT_HEADER +MFP_EVENT_HEADER STRUCT + eEventType MFP_EVENT_TYPE ? + hrEvent HRESULT ? + pMediaPlayer DWORD ? ; ptr to IMFPMediaPlayer + eState MFP_MEDIAPLAYER_STATE ? + pPropertyStore DWORD ? ; ptr to IPropertyStore +MFP_EVENT_HEADER ENDS +ENDIF + +IFNDEF MFP_PLAY_EVENT +MFP_PLAY_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_PLAY_EVENT ENDS +ENDIF + +IFNDEF MFP_PAUSE_EVENT +MFP_PAUSE_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_PAUSE_EVENT ENDS +ENDIF + +IFNDEF MFP_STOP_EVENT +MFP_STOP_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_STOP_EVENT ENDS +ENDIF + +IFNDEF MFP_POSITION_SET_EVENT +MFP_POSITION_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_POSITION_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_RATE_SET_EVENT +MFP_RATE_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem + flRate REAL4 ? +MFP_RATE_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_CREATED_EVENT +MFP_MEDIAITEM_CREATED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem + dwUserData DWORD ? +MFP_MEDIAITEM_CREATED_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_SET_EVENT +MFP_MEDIAITEM_SET_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_MEDIAITEM_SET_EVENT ENDS +ENDIF + +IFNDEF MFP_FRAME_STEP_EVENT +MFP_FRAME_STEP_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_FRAME_STEP_EVENT ENDS +ENDIF + +IFNDEF MFP_MEDIAITEM_CLEARED_EVENT +MFP_MEDIAITEM_CLEARED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_MEDIAITEM_CLEARED_EVENT ENDS +ENDIF + +IFNDEF MFP_MF_EVENT +MFP_MF_EVENT STRUCT + header MFP_EVENT_HEADER <> + MFEventType MediaEventType ? + pMFMediaEvent DWORD ? ; ptr to IMFMediaEvent + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_MF_EVENT ENDS +ENDIF + +IFNDEF MFP_ERROR_EVENT +MFP_ERROR_EVENT STRUCT + header MFP_EVENT_HEADER <> +MFP_ERROR_EVENT ENDS +ENDIF + +IFNDEF MFP_PLAYBACK_ENDED_EVENT +MFP_PLAYBACK_ENDED_EVENT STRUCT + header MFP_EVENT_HEADER <> + pMediaItem DWORD ? ; ptr to IMFPMediaItem +MFP_PLAYBACK_ENDED_EVENT ENDS +ENDIF + +IFNDEF MFP_ACQUIRE_USER_CREDENTIAL_EVENT +MFP_ACQUIRE_USER_CREDENTIAL_EVENT STRUCT + header MFP_EVENT_HEADER <> + dwUserData DWORD ? + fProceedWithAuthentication DWORD ? + hrAuthenticationStatus HRESULT ? + pwszURL DWORD ? ; LPCWSTR + pwszSite DWORD ? ; LPCWSTR + pwszRealm DWORD ? ; LPCWSTR + pwszPackage DWORD ? ; LPCWSTR + nRetries DWORD ? + flags MFP_CREDENTIAL_FLAGS ? + pCredential DWORD ? ; ptr to IMFNetCredential +MFP_ACQUIRE_USER_CREDENTIAL_EVENT ENDS +ENDIF + +IFNDEF MFVideoNormalizedRect +MFVideoNormalizedRect STRUCT + left REAL4 ? ; float + top REAL4 ? ; float + right REAL4 ? ; float + bottom REAL4 ? ; float +MFVideoNormalizedRect ENDS +ENDIF + +.CONST +;------------------------------------------------------------------------------ +; MFPMediaPlayer Constants +;------------------------------------------------------------------------------ + +; MFP_CREATION_OPTIONS TYPEDEF DWORD +MFP_OPTION_NONE EQU 00h +MFP_OPTION_FREE_THREADED_CALLBACK EQU 01h +MFP_OPTION_NO_MMCSS EQU 02h +MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION EQU 04h + +; MFP_MEDIAPLAYER_STATE TYPEDEF DWORD +MFP_MEDIAPLAYER_STATE_EMPTY EQU 00h +MFP_MEDIAPLAYER_STATE_STOPPED EQU 01h +MFP_MEDIAPLAYER_STATE_PLAYING EQU 02h +MFP_MEDIAPLAYER_STATE_PAUSED EQU 03h +MFP_MEDIAPLAYER_STATE_SHUTDOWN EQU 04h + +; MFP_MEDIAITEM_CHARACTERISTICS TYPEDEF DWORD +MFP_MEDIAITEM_IS_LIVE EQU 01h +MFP_MEDIAITEM_CAN_SEEK EQU 02h +MFP_MEDIAITEM_CAN_PAUSE EQU 04h +MFP_MEDIAITEM_HAS_SLOW_SEEK EQU 08h + +; MFP_CREDENTIAL_FLAGS TYPEDEF DWORD +MFP_CREDENTIAL_PROMPT EQU 01h +MFP_CREDENTIAL_SAVE EQU 02h +MFP_CREDENTIAL_DO_NOT_CACHE EQU 04h +MFP_CREDENTIAL_CLEAR_TEXT EQU 08h +MFP_CREDENTIAL_PROXY EQU 010h +MFP_CREDENTIAL_LOGGED_ON_USER EQU 020h + +; MFP_EVENT_TYPE TYPEDEF DWORD +MFP_EVENT_TYPE_PLAY EQU 0 +MFP_EVENT_TYPE_PAUSE EQU 1 +MFP_EVENT_TYPE_STOP EQU 2 +MFP_EVENT_TYPE_POSITION_SET EQU 3 +MFP_EVENT_TYPE_RATE_SET EQU 4 +MFP_EVENT_TYPE_MEDIAITEM_CREATED EQU 5 +MFP_EVENT_TYPE_MEDIAITEM_SET EQU 6 +MFP_EVENT_TYPE_FRAME_STEP EQU 7 +MFP_EVENT_TYPE_MEDIAITEM_CLEARED EQU 8 +MFP_EVENT_TYPE_MF EQU 9 +MFP_EVENT_TYPE_ERROR EQU 10 +MFP_EVENT_TYPE_PLAYBACK_ENDED EQU 11 +MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL EQU 12 + +; MediaEventType TYPEDEF DWORD +MEUnknown EQU 0 +MEError EQU 1 +MEExtendedType EQU 2 +MENonFatalError EQU 3 +MEGenericV1Anchor EQU MENonFatalError +MESessionUnknown EQU 100 +MESessionTopologySet EQU 101 +MESessionTopologiesCleared EQU 102 +MESessionStarted EQU 103 +MESessionPaused EQU 104 +MESessionStopped EQU 105 +MESessionClosed EQU 106 +MESessionEnded EQU 107 +MESessionRateChanged EQU 108 +MESessionScrubSampleComplete EQU 109 +MESessionCapabilitiesChanged EQU 110 +MESessionTopologyStatus EQU 111 +MESessionNotifyPresentationTime EQU 112 +MENewPresentation EQU 113 +MELicenseAcquisitionStart EQU 114 +MELicenseAcquisitionCompleted EQU 115 +MEIndividualizationStart EQU 116 +MEIndividualizationCompleted EQU 117 +MEEnablerProgress EQU 118 +MEEnablerCompleted EQU 119 +MEPolicyError EQU 120 +MEPolicyReport EQU 121 +MEBufferingStarted EQU 122 +MEBufferingStopped EQU 123 +MEConnectStart EQU 124 +MEConnectEnd EQU 125 +MEReconnectStart EQU 126 +MEReconnectEnd EQU 127 +MERendererEvent EQU 128 +MESessionStreamSinkFormatChanged EQU 129 +MESessionV1Anchor EQU 129 +MESourceUnknown EQU 200 +MESourceStarted EQU 201 +MEStreamStarted EQU 202 +MESourceSeeked EQU 203 +MEStreamSeeked EQU 204 +MENewStream EQU 205 +MEUpdatedStream EQU 206 +MESourceStopped EQU 207 +MEStreamStopped EQU 208 +MESourcePaused EQU 209 +MEStreamPaused EQU 210 +MEEndOfPresentation EQU 211 +MEEndOfStream EQU 212 +MEMediaSample EQU 213 +MEStreamTick EQU 214 +MEStreamThinMode EQU 215 +MEStreamFormatChanged EQU 216 +MESourceRateChanged EQU 217 +MEEndOfPresentationSegment EQU 218 +MESourceCharacteristicsChanged EQU 219 +MESourceRateChangeRequested EQU 220 +MESourceMetadataChanged EQU 221 +MESequencerSourceTopologyUpdated EQU 222 +MESourceV1Anchor EQU 222 +MESinkUnknown EQU 300 +MEStreamSinkStarted EQU 301 +MEStreamSinkStopped EQU 302 +MEStreamSinkPaused EQU 303 +MEStreamSinkRateChanged EQU 304 +MEStreamSinkRequestSample EQU 305 +MEStreamSinkMarker EQU 306 +MEStreamSinkPrerolled EQU 307 +MEStreamSinkScrubSampleComplete EQU 308 +MEStreamSinkFormatChanged EQU 309 +MEStreamSinkDeviceChanged EQU 310 +MEQualityNotify EQU 311 +MESinkInvalidated EQU 312 +MEAudioSessionNameChanged EQU 313 +MEAudioSessionVolumeChanged EQU 314 +MEAudioSessionDeviceRemoved EQU 315 +MEAudioSessionServerShutdown EQU 316 +MEAudioSessionGroupingParamChanged EQU 317 +MEAudioSessionIconChanged EQU 318 +MEAudioSessionFormatChanged EQU 319 +MEAudioSessionDisconnected EQU 320 +MEAudioSessionExclusiveModeOverride EQU 321 +MESinkV1Anchor EQU 321 +METrustUnknown EQU 400 +MEPolicyChanged EQU 401 +MEContentProtectionMessage EQU 402 +MEPolicySet EQU 403 +METrustV1Anchor EQU 403 +MEWMDRMLicenseBackupCompleted EQU 500 +MEWMDRMLicenseBackupProgress EQU 501 +MEWMDRMLicenseRestoreCompleted EQU 502 +MEWMDRMLicenseRestoreProgress EQU 503 +MEWMDRMLicenseAcquisitionCompleted EQU 506 +MEWMDRMIndividualizationCompleted EQU 508 +MEWMDRMIndividualizationProgress EQU 513 +MEWMDRMProximityCompleted EQU 514 +MEWMDRMLicenseStoreCleaned EQU 515 +MEWMDRMRevocationDownloadCompleted EQU 516 +MEWMDRMV1Anchor EQU 516 +METransformUnknown EQU 600 +METransformNeedInput EQU 601 +METransformHaveOutput EQU 602 +METransformDrainComplete EQU 603 +METransformMarker EQU 604 +MEReservedMax EQU 10000 + +; MFVideoAspectRatioMode +MFVideoARMode_None EQU 0h +MFVideoARMode_PreservePicture EQU 1h +MFVideoARMode_PreservePixel EQU 2h +MFVideoARMode_NonLinearStretch EQU 4h +MFVideoARMode_Mask EQU 7h + +; MFVideoInterlaceMode +MFVideoInterlace_Unknown EQU 0 +MFVideoInterlace_Progressive EQU 2 +MFVideoInterlace_FieldInterleavedUpperFirst EQU 3 +MFVideoInterlace_FieldInterleavedLowerFirst EQU 4 +MFVideoInterlace_FieldSingleUpper EQU 5 +MFVideoInterlace_FieldSingleLower EQU 6 +MFVideoInterlace_MixedInterlaceOrProgressive EQU 7 + + +;--------------------------------------------------------------------------------------------------------------------------- +; Media Major Type | Description | Subtype +;--------------------------------------------------------------------------------------------------------------------------- +MFMT_None EQU 0 ; None. None. +MFMT_Audio EQU 1 ; Audio. Audio Subtype GUIDs. +MFMT_Video EQU 2 ; Video. Video Subtype GUIDs. +MFMT_Stream EQU 3 ; Multiplexed stream or elementary stream. Stream Subtype GUIDs +MFMT_Metadata EQU 4 ; Metadata stream. None. +MFMT_Protected EQU 5 ; Protected media. The subtype specifies the content protection scheme. +MFMT_SAMI EQU 6 ; SAMI captions. None. +MFMT_Image EQU 7 ; Still image stream. WIC GUIDs and CLSIDs. +MFMT_Binary EQU 8 ; Binary stream. None. +MFMT_HTML EQU 9 ; HTML stream. None. +MFMT_Perception EQU 10 ; Streams from a camera sensor None. +MFMT_FileTransfer EQU 11 ; A stream that contains data files. None. +MFMT_Script EQU 12 ; Script stream. None. + +;--------------------------------------------------------------------------------------------------------------------------- +; Audio Format Subtype | Description +;--------------------------------------------------------------------------------------------------------------------------- +MFAF_Unknown EQU 0 ; Unknown +MFAF_MP3 EQU 1 ; MPEG Audio Layer-3 (MP3). MPEG-4 Part 3, AAC (ISO/IEC 14496-3) +MFAF_AAC EQU 2 ; Advanced Audio Coding (AAC). +MFAF_ALAC EQU 3 ; Apple Lossless Audio Codec (ALAC). +MFAF_Dolby_AC3 EQU 4 ; Dolby Digital (AC-3). +MFAF_Dolby_AC3_SP EQU 5 ; Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). +MFAF_Dolby_DDPlus EQU 6 ; Dolby Digital Plus. EAC3 +MFAF_Dolby_AC4 EQU 7 ; Dolby (AC-4). +MFAF_Dolby_AC4_V1 EQU 8 +MFAF_Dolby_AC4_V2 EQU 9 +MFAF_Dolby_AC4_V1_ES EQU 10 +MFAF_Dolby_AC4_V2_ES EQU 11 +MFAF_DTS EQU 12 ; Digital Theater Systems (DTS) audio. +MFAF_DTS_RAW EQU 13 +MFAF_DTS_HD EQU 14 ; DTS-HD Master Audio +MFAF_DTS_XLL EQU 15 ; DTS-HD Master Audio Lossless +MFAF_DTS_LBR EQU 16 +MFAF_DTS_UHD EQU 17 +MFAF_DTS_UHDY EQU 18 +MFAF_WMAudio_LL EQU 19 ; Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. (WMALOSSLESS) +MFAF_WMAudioV8 EQU 20 ; Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. (WMAV2) +MFAF_WMAudioV9 EQU 21 ; Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. (WMAPRO) +MFAF_WMASPDIF EQU 22 ; Windows Media Audio 9 Professional codec over S/PDIF. +MFAF_FLAC EQU 23 ; Free Lossless Audio Codec (FLAC). +MFAF_PCM EQU 24 ; Uncompressed PCM audio. +MFAF_LPCM EQU 25 ; DVD audio data +MFAF_MPEG EQU 26 ; MPEG-1 audio payload. (MP1) +MFAF_MPEGH EQU 27 +MFAF_MPEGH_ES EQU 28 +MFAF_MSP1 EQU 29 ; Windows Media Audio 9 Voice codec (WMAVOICE) +MFAF_AMR_NB EQU 30 ; Adaptive Multi-Rate Narrowband (AMR_NB) +MFAF_AMR_WB EQU 31 ; Adaptive Multi-Rate Wideband (AMR_WB) +MFAF_AMR_WP EQU 32 ; Adaptive Multi-Rate Wideband Plus (AMR_WP) +MFAF_DRM EQU 33 ; Encrypted audio data used with secure audio path. +MFAF_Vorbis EQU 34 ; VORBIS +MFAF_Opus EQU 35 ; Opus +MFAF_Float EQU 36 ; Uncompressed IEEE floating-point audio. +MFAF_Float_SO EQU 37 ; Uncompressed IEEE floating-point audio. +MFAF_RAW_AAC1 EQU 38 ; Advanced Audio Coding (AAC). In AVI +MFAF_QCELP EQU 39 ; QCELP (Qualcomm Code Excited Linear Prediction) audio. +MFAF_Dolby_AC3_HDCP EQU 40 ; Dolby Digital (AC-3) (HDCP) +MFAF_AAC_HDCP EQU 41 +MFAF_PCM_HDCP EQU 42 +MFAF_ADTS_HDCP EQU 43 ; Advanced Audio Coding (AAC) in Audio Data Transport Stream (ADTS) format (HDCP) +MFAF_ADTS EQU 44 ; Advanced Audio Coding (AAC) in Audio Data Transport Stream (ADTS) + + +;--------------------------------------------------------------------------------------------------------------------------- +; Video Format Subtype | Description +;--------------------------------------------------------------------------------------------------------------------------- +MFVF_Unknown EQU 0 ; +MFVF_M4S2 EQU 1 ; 'M4S2' MPEG-4 part 2 video. +MFVF_MP4V EQU 2 ; 'MP4V' MPEG-4 part 2 video. +MFVF_H264 EQU 3 ; 'H264' H.264 video. +MFVF_H265 EQU 4 ; 'H265' H.265 video. +MFVF_H264_ES EQU 5 ; Not applicable H.264 elementary stream. +MFVF_WMV1 EQU 6 ; 'WMV1' Windows Media Video codec version 7. +MFVF_WMV2 EQU 7 ; 'WMV2' Windows Media Video 8 codec. +MFVF_WMV3 EQU 8 ; 'WMV3' Windows Media Video 9 codec. +MFVF_MP4S EQU 9 ; 'MP4S' ISO MPEG 4 codec version 1. +MFVF_AV1 EQU 10 ; 'AV01' AV1 video. +MFVF_VP80 EQU 11 ; 'MPG1' VP8 video. +MFVF_VP90 EQU 12 ; 'MPG1' VP9 video. +MFVF_HEVC EQU 13 ; 'HEVC' The HEVC Main profile and Main Still Picture profile. +MFVF_HEVC_ES EQU 14 ;'HEVS' This media type is the same as MFVF_HEVC, except media samples contain a fragmented HEVC bitstream. +MFVF_H263 EQU 15 ; 'H263' H.263 video. +MFVF_MSS1 EQU 16 ; 'MSS1' Windows Media Screen codec version 1. +MFVF_MSS2 EQU 17 ; 'MSS2' Windows Media Video 9 Screen codec. +MFVF_MJPG EQU 18 ; 'MJPG' Motion JPEG. +MFVF_MPG1 EQU 19 ; 'MPG1' MPEG-1 video. +MFVF_MPEG2 EQU 20 ; Not applicable MPEG-2 video. (Equivalent to MEDIASUBTYPE_MPEG2_VIDEO in DirectShow.) +MFVF_DV25 EQU 21 ; 'dv25' DVCPRO 25 (525-60 or 625-50). +MFVF_DV50 EQU 22 ; 'dv50' DVCPRO 50 (525-60 or 625-50). +MFVF_DVC EQU 23 ; 'dvc ' DVC/DV Video. +MFVF_DVH1 EQU 24 ; 'dvh1' DVCPRO 100 (1080/60i, 1080/50i, or 720/60P). +MFVF_DVHD EQU 25 ; 'dvhd' HD-DVCR (1125-60 or 1250-50). +MFVF_DVSD EQU 26 ; 'dvsd' SDL-DVCR (525-60 or 625-50). +MFVF_DVSL EQU 27 ; 'dvsl' SD-DVCR (525-60 or 625-50). +MFVF_WVC1 EQU 28 ; 'WVC1' SMPTE 421M ("VC-1"). +MFVF_420O EQU 29 ; '420O' 8-bit per channel planar YUV 4:2:0 video. +MFVF_MP43 EQU 30 ; 'MP43' Microsoft MPEG 4 codec version 3. This codec is no longer supported. + + + + + diff --git a/MFPlayerDll-x86/MFPlayer.lib b/MFPlayerDll-x86/MFPlayer.lib new file mode 100644 index 0000000..6bcaf04 Binary files /dev/null and b/MFPlayerDll-x86/MFPlayer.lib differ diff --git a/MFPlayerDll-x86/MFPlayerDll.asm b/MFPlayerDll-x86/MFPlayerDll.asm new file mode 100644 index 0000000..c9e82b9 --- /dev/null +++ b/MFPlayerDll-x86/MFPlayerDll.asm @@ -0,0 +1,70 @@ +;============================================================================== +; +; MFPlayer x86 DLL +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== +; +; MFPlayer Library consists of functions that wrap the MFPlay COM +; implementation of the IMFPMediaPlayer and IMFPMediaItem objects. MFPlay is a +; Microsoft Media Foundation API for creating media playback applications. Thus +; the MFPlayer Library functions hide the complexities of interacting with the +; COM objects. +; +;------------------------------------------------------------------------------- +.686 +.MMX +.XMM +.model flat,stdcall +option casemap:none + +include windows.inc + +include user32.inc +includelib user32.lib + +include kernel32.inc +includelib kernel32.lib + +IFNDEF MFPCreateMediaPlayer +MFPCreateMediaPlayer PROTO pwszURL:DWORD, fStartPlayback:DWORD, creationOptions:DWORD, pCallback:DWORD, hWnd:DWORD, ppMediaPlayer:DWORD +ENDIF + +includelib MFPlay.lib + +;-------------------------------------- +; Conditionals +;-------------------------------------- +MFPLAYER_DLL EQU 1 + +;-------------------------------------- +; Main Include File +;-------------------------------------- +Include .\..\MFPlayer.inc + +;-------------------------------------- +; Main Library Files +;-------------------------------------- +Include .\..\MFPlayer.asm + + +.CODE + +;============================================================================== +; Main entry function for a DLL file - required. +;------------------------------------------------------------------------------ +DllEntry PROC hInst:HINSTANCE, reason:DWORD, reserved:DWORD + .IF reason == DLL_PROCESS_ATTACH + + .ENDIF + mov eax, TRUE + ret +DllEntry ENDP + +END DllEntry + diff --git a/MFPlayerDll-x86/MFPlayerDll.def b/MFPlayerDll-x86/MFPlayerDll.def new file mode 100644 index 0000000..fe64bdf --- /dev/null +++ b/MFPlayerDll-x86/MFPlayerDll.def @@ -0,0 +1,104 @@ +;============================================================================== +; +; MFPlayer x86 DLL +; +; http://github.com/mrfearless +; +; This software is provided 'as-is', without any express or implied warranty. +; In no event will the author be held liable for any damages arising from the +; use of this software. +; +;============================================================================== + +LIBRARY MFPlayer +EXPORTS + + ; MFPMediaPlayer Functions: + MFPMediaPlayer_Init + MFPMediaPlayer_Free + + MFPMediaPlayer_Play + MFPMediaPlayer_Pause + MFPMediaPlayer_Stop + MFPMediaPlayer_Step + MFPMediaPlayer_Toggle + + MFPMediaPlayer_ClearMediaItem + MFPMediaPlayer_SetMediaItem + MFPMediaPlayer_GetMediaItem + MFPMediaPlayer_CreateMediaItemA + MFPMediaPlayer_CreateMediaItemW + MFPMediaPlayer_CreateMediaItemFromObject + + MFPMediaPlayer_GetState + MFPMediaPlayer_SetPosition + MFPMediaPlayer_GetPosition + MFPMediaPlayer_GetDuration + + MFPMediaPlayer_SetRate + MFPMediaPlayer_GetRate + MFPMediaPlayer_GetSupportedRates + + MFPMediaPlayer_GetVolume + MFPMediaPlayer_SetVolume + MFPMediaPlayer_GetBalance + MFPMediaPlayer_SetBalance + MFPMediaPlayer_GetMute + MFPMediaPlayer_SetMute + + MFPMediaPlayer_GetNativeVideoSize + MFPMediaPlayer_GetIdealVideoSize + MFPMediaPlayer_SetVideoSourceRect + MFPMediaPlayer_GetVideoSourceRect + + MFPMediaPlayer_SetAspectRatioMode + MFPMediaPlayer_GetAspectRatioMode + + MFPMediaPlayer_GetVideoWindow + MFPMediaPlayer_UpdateVideo + MFPMediaPlayer_SetBorderColor + MFPMediaPlayer_GetBorderColor + + MFPMediaPlayer_InsertEffect + MFPMediaPlayer_RemoveEffect + MFPMediaPlayer_RemoveAllEffects + MFPMediaPlayer_Shutdown + + ; MFPMediaItem Functions: + MFPMediaItem_Release + MFPMediaItem_GetMediaPlayer + MFPMediaItem_GetURLA + MFPMediaItem_GetURLW + + MFPMediaItem_SetUserData + MFPMediaItem_GetUserData + + MFPMediaItem_SetStartStopPosition + MFPMediaItem_GetStartStopPosition + + MFPMediaItem_HasVideo + MFPMediaItem_HasAudio + MFPMediaItem_IsProtected + + MFPMediaItem_GetDuration + MFPMediaItem_GetNumberOfStreams + MFPMediaItem_SetStreamSelection + MFPMediaItem_GetStreamSelection + + MFPMediaItem_GetStreamAttribute + MFPMediaItem_GetPresentationAttribute + MFPMediaItem_GetCharacteristics + MFPMediaItem_GetMetadata + + MFPMediaItem_SetStreamSink + + ; Media Information + MFPMediaItem_StreamTable + + ; Misc + MFPConvertMSTimeToTimeStringA + MFPConvertMSTimeToTimeStringW + + MFPConvertStringToAnsi + MFPConvertStringToWide + MFPConvertStringFree diff --git a/MFPlayerDll-x86/MFPlayerDll.rap b/MFPlayerDll-x86/MFPlayerDll.rap new file mode 100644 index 0000000..885f617 --- /dev/null +++ b/MFPlayerDll-x86/MFPlayerDll.rap @@ -0,0 +1,148 @@ +[Project] +Assembler=masm +Type=Dll Project +Description=MFPlayerDll +Backup=$P\Bak\ +Group=1 +GroupExpand=1 +Debug=0 +Ver.rc=1 +[Files] +1=MFPlayerDll.asm +2= +3=MFPlayerDll.rc +4=MFPlayerDll.def +5=MFPlayer.h +[MakeFiles] +0=MFPlayerDll.rap +1=MFPlayerDll.rc +2=MFPlayerDll.asm +3=MFPlayerDll.obj +4=MFPlayerDll.res +5=MFPlayerDll.exe +6=MFPlayerDll.def +7=MFPlayerDll.dll +8=MFPlayerDll.txt +9=MFPlayerDll.lib +10=MFPlayerDll.mak +11=MFPlayerDll.hla +12=MFPlayerDll.com +13=MFPlayerDll.ocx +14=MFPlayerDll.idl +15=MFPlayerDll.tlb +16=MFPlayerDll.sys +17=MFPlayerDll.dp32 +18=MFPlayerDll.pdb +19=MFPlayerDll.dp64 +[MakeDef] +Menu=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +1=4,O,$B\RC.EXE /v,1 +2=3,O,$B\ML.EXE /DMFPLAYER_DLL /c /coff /Cp /nologo /I"$I",2 +3=7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:"MFPlayerDll.def" /LIBPATH:"$L" /OUT:"MFPlayer.dll",3,4 +4=0,0,,5 +5=rsrc.obj,O,$B\CVTRES.EXE,rsrc.res +6=*.obj,O,$B\ML.EXE /c /coff /Cp /nologo /I"$I",*.asm +7=0,0,"$E\OllyDbg",5 +11=4,O,$B\RC.EXE /v,1 +12=3,O,$B\ML.EXE /DMFPLAYER_DLL /c /coff /Cp /Zi /Zd /nologo /I"$I",2 +13=7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /DEBUG /DLL /DEF:"MFPlayer.def" /LIBPATH:"$L" /OUT:"MFPlayer.dll",3,4 +14=0,0,,5 +15=rsrc.obj,O,$B\CVTRES.EXE,rsrc.res +16=*.obj,O,$B\ML.EXE /c /coff /Cp /Zi /Zd /nologo /I"$I",*.asm +17=0,0,"$E\OllyDbg",5 +[Group] +Group=Assembly,Resources +1=1 +2= +3=2 +4=1 +5=1 +[AutoLoad] +AutoLoad=1,4,5 +[RADebugBP] +2= +1= +4= +[Size] +2=0,0,0,0,811 +5=0,0,1701,822,456 +4=0,0,0,0,0 +1=0,0,0,0,1167 +[Collapse] +2= +5= +4= +1= +[VerInf] +Nme=VERINF1 +ID=1 +FV=1.0.0.0 +PV=1.0.0.0 +VerOS=0x00000004 +VerFT=0x00000002 +VerLNG=0x00000409 +VerCHS=0x000004B0 +ProductVersion=1.0.0.0 +ProductName=MFPlayer.dll +OriginalFilename=MFPlayer.dll +LegalTrademarks= +LegalCopyright= +InternalName=MFPlayer.dll +FileDescription=MFPlayer.dll +FileVersion=1.0.0.0 +CompanyName=fearless +[Find] +1="pMediaItem:DWORD" +2="pMediaPlayer:DWORD" +3="ENDIF" +4="IFNDEF" +[VersionControl] +Settings=1278 +Milestones=129 +MilestoneEvery=10 +MilestoneEveryCurrent=0 +MilestoneOnBuild=0.0.0.0 +MilestoneOnTime=2 +MilestoneOnDate=0 +MilestoneOnDateWhen=1 +MilestoneOnDateStatus=0 +MilestoneOnDateDate=17 +MilestoneOnDateTimeYear=2025 +MilestoneOnDateTimeMonth=1 +MilestoneOnDateTimeDate=17 +MilestoneOnDateTimeHour=10 +MilestoneOnDateTimeMin=0 +MilestoneOnDateTimeSec=8 +MilestoneOnDateTimeStatus=0 +BackupLocation=M:\radasm\Masm\Projects\VCBackups\ +CompressionLevel=0 +DefaultComment=Project $N, $Z, Backup Created On $D At $T. +ExcludeExt1=\ +ExcludeExt2=\ +ExcludeExt3=\ +ExcludeExt4=\ +FileVerLength=4 +FileVer2Range=0 +FileVer3Range=0 +FileVer4Range=0 +ProductVerLength=4 +ProductVer2Range=0 +ProductVer3Range=0 +ProductVer4Range=0 +[PTimer] +PTimer=10240766 +[GroupExpand] +GroupExpand=1,1,0 +[BookMark] +0= +1= +2= +3= +4= +5= +6= +7= +8= +9= +[BreakPoint] +0= diff --git a/MFPlayerDll-x86/MFPlayerDll.rc b/MFPlayerDll-x86/MFPlayerDll.rc new file mode 100644 index 0000000..39a5bb1 --- /dev/null +++ b/MFPlayerDll-x86/MFPlayerDll.rc @@ -0,0 +1 @@ +#include "Res/MFPlayerDllVer.rc" diff --git a/MFPlayerDll-x86/Res/MFPlayerDllVer.rc b/MFPlayerDll-x86/Res/MFPlayerDllVer.rc new file mode 100644 index 0000000..e89c471 --- /dev/null +++ b/MFPlayerDll-x86/Res/MFPlayerDllVer.rc @@ -0,0 +1,25 @@ +#define VERINF1 1 +VERINF1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEOS 0x00000004 +FILETYPE 0x00000002 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "fearless\0" + VALUE "FileVersion", "1.0.0.0\0" + VALUE "FileDescription", "MFPlayer.dll\0" + VALUE "InternalName", "MFPlayer.dll\0" + VALUE "OriginalFilename", "MFPlayer.dll\0" + VALUE "ProductName", "MFPlayer.dll\0" + VALUE "ProductVersion", "1.0.0.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END diff --git a/MFPlayerDll-x86/mfplay.lib b/MFPlayerDll-x86/mfplay.lib new file mode 100644 index 0000000..0e2cd1b Binary files /dev/null and b/MFPlayerDll-x86/mfplay.lib differ diff --git a/releases/MFPlayer-x64-source.zip b/releases/MFPlayer-x64-source.zip index 0549167..6c19046 100644 Binary files a/releases/MFPlayer-x64-source.zip and b/releases/MFPlayer-x64-source.zip differ diff --git a/releases/MFPlayer-x64-v1.0.0.4-source.zip b/releases/MFPlayer-x64-v1.0.0.4-source.zip new file mode 100644 index 0000000..0549167 Binary files /dev/null and b/releases/MFPlayer-x64-v1.0.0.4-source.zip differ diff --git a/releases/MFPlayer-x64-v1.0.0.4.zip b/releases/MFPlayer-x64-v1.0.0.4.zip new file mode 100644 index 0000000..632775f Binary files /dev/null and b/releases/MFPlayer-x64-v1.0.0.4.zip differ diff --git a/releases/MFPlayer-x64.zip b/releases/MFPlayer-x64.zip index 632775f..7571abd 100644 Binary files a/releases/MFPlayer-x64.zip and b/releases/MFPlayer-x64.zip differ diff --git a/releases/MFPlayer-x86-source.zip b/releases/MFPlayer-x86-source.zip index b724bf6..432b2c7 100644 Binary files a/releases/MFPlayer-x86-source.zip and b/releases/MFPlayer-x86-source.zip differ diff --git a/releases/MFPlayer-x86-v1.0.0.4-source.zip b/releases/MFPlayer-x86-v1.0.0.4-source.zip new file mode 100644 index 0000000..b724bf6 Binary files /dev/null and b/releases/MFPlayer-x86-v1.0.0.4-source.zip differ diff --git a/releases/MFPlayer-x86-v1.0.0.4.zip b/releases/MFPlayer-x86-v1.0.0.4.zip new file mode 100644 index 0000000..e0c710e Binary files /dev/null and b/releases/MFPlayer-x86-v1.0.0.4.zip differ diff --git a/releases/MFPlayer-x86.zip b/releases/MFPlayer-x86.zip index e0c710e..64f805b 100644 Binary files a/releases/MFPlayer-x86.zip and b/releases/MFPlayer-x86.zip differ diff --git a/releases/MFPlayerDll-x64-source.zip b/releases/MFPlayerDll-x64-source.zip new file mode 100644 index 0000000..140aef1 Binary files /dev/null and b/releases/MFPlayerDll-x64-source.zip differ diff --git a/releases/MFPlayerDll-x64.zip b/releases/MFPlayerDll-x64.zip new file mode 100644 index 0000000..72a1c77 Binary files /dev/null and b/releases/MFPlayerDll-x64.zip differ diff --git a/releases/MFPlayerDll-x86-source.zip b/releases/MFPlayerDll-x86-source.zip new file mode 100644 index 0000000..c5ad0f5 Binary files /dev/null and b/releases/MFPlayerDll-x86-source.zip differ diff --git a/releases/MFPlayerDll-x86.zip b/releases/MFPlayerDll-x86.zip new file mode 100644 index 0000000..5fd2bdc Binary files /dev/null and b/releases/MFPlayerDll-x86.zip differ