Files
ZuneShell.dll/ZuneDBApi/PlayerInterop.h
2025-12-08 15:29:25 -06:00

108 lines
3.2 KiB
C++

#pragma once
#include "IMCPlayer.h"
#include "IMCTransport.h"
#include "CPlayerInteropEventSink.h"
using namespace System;
using namespace System::Collections::Generic;
namespace MicrosoftZunePlayback
{
public ref class PlayerInterop : IDisposable
{
private:
IMCPlayer* _uPlayer = 0;
IMCTransport* _uTransport = 0;
IMCPlayerSetUri* _uSetUri = 0;
IMCDynamicImage* _uDynamicImage = 0;
IMCVolumeControl* _uVolumeControl;
IZuneSpectrumMgr* _uZuneSpectrumMgr = 0;
CPlayerInteropEventSink* _uEventSink;
//MCPlayerState _state = MCPlayerState.Uninitialized;
long _duration = 0L;
bool _isReady = false;
//Announcement _firstDenial;
String^ _currentUri;
int _currentUriID;
Dictionary<String^, Object^>^ _properties;
//MCTransportState _transportState = MCTransportState.Invalid;
float _rate = 1.0;
bool _endOfMedia = false;
long _position = 0L;
long _minSeekPosition = 0L;
long _maxSeekPosition = 0L;
bool _resetOnStop = false;
TimeSpan _positionEventInterval = TimeSpan::FromMilliseconds(100.0);
int _nDynamicImage = 0;
int _volume;
bool _mute;
bool _canChangeVideoRate = false;
bool _canSeek = true;
IntPtr _windowHandle;
//VideoWindow _windowHost;
public:
static PlayerInterop^ _singletonInstance = nullptr;
private:
void* _gotStateCloseEvent;
void* _gotStateUninitializeEvent;
volatile bool _fShuttingDown;
public:
//event PlayerPropertyChangedEventHandler^ PlayerPropertyChanged;
//event PlayerBandwithUpdateEventHandler^ PlayerBandwithUpdate;
event EventHandler^ StatusChanged;
//event AnnouncementHandler^ AlertSent;
event EventHandler^ TransportStatusChanged;
event EventHandler^ TransportPositionChanged;
event EventHandler^ UriSet;
static property PlayerInterop^ Instance
{
PlayerInterop^ get()
{
if (!_singletonInstance)
{
_singletonInstance = gcnew PlayerInterop();
}
return _singletonInstance;
}
}
property int CurrentUriID
{
int get() { return _currentUriID; }
}
property String^ CurrentUri
{
String^ get() { return _currentUri; }
}
property TimeSpan PositionEventInterval
{
TimeSpan get() { return _positionEventInterval; }
void set(TimeSpan value)
{
if (_uTransport != 0)
{
_positionEventInterval = value;
long num = *(long*)_uTransport + 96;
typedef int (*IMCTransport_SetPositionEventInterval)(IMCTransport* x, unsigned int y);
((IMCTransport_SetPositionEventInterval)(*(unsigned long*)num))(_uTransport, (unsigned int)value.TotalMilliseconds);
}
}
}
private:
PlayerInterop();
~PlayerInterop();
public:
void Initialize();
void Uninitialize();
};
}