[vlc-devel] [PATCH] ActiveX: added MediaDescription
Sergey Radionov
rsatom at gmail.com
Mon Mar 26 14:34:09 CEST 2012
---
activex/axvlc.idl | 48 +++++++++++++++++++++++
activex/vlccontrol2.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++++++-
activex/vlccontrol2.h | 33 ++++++++++++++++
3 files changed, 178 insertions(+), 1 deletions(-)
diff --git a/activex/axvlc.idl b/activex/axvlc.idl
index 06d4156..8c3e616 100644
--- a/activex/axvlc.idl
+++ b/activex/axvlc.idl
@@ -571,6 +571,51 @@ library AXVLC
[
odl,
+ uuid(796A2C2D-5B11-4fb5-9077-56D5E674972B),
+ helpstring("VLC Media Description"),
+ dual,
+ oleautomation
+ ]
+ interface IVLCMediaDescription : IDispatch
+ {
+ [propget]
+ HRESULT title([out, retval] BSTR* val);
+ [propget]
+ HRESULT artist([out, retval] BSTR* val);
+ [propget]
+ HRESULT genre([out, retval] BSTR* val);
+ [propget]
+ HRESULT copyright([out, retval] BSTR* val);
+ [propget]
+ HRESULT album([out, retval] BSTR* val);
+ [propget]
+ HRESULT trackNumber([out, retval] BSTR* val);
+ [propget]
+ HRESULT description([out, retval] BSTR* val);
+ [propget]
+ HRESULT rating([out, retval] BSTR* val);
+ [propget]
+ HRESULT date([out, retval] BSTR* val);
+ [propget]
+ HRESULT setting([out, retval] BSTR* val);
+ [propget]
+ HRESULT URL([out, retval] BSTR* val);
+ [propget]
+ HRESULT language([out, retval] BSTR* val);
+ [propget]
+ HRESULT nowPlaying([out, retval] BSTR* val);
+ [propget]
+ HRESULT publisher([out, retval] BSTR* val);
+ [propget]
+ HRESULT encodedBy([out, retval] BSTR* val);
+ [propget]
+ HRESULT artworkURL([out, retval] BSTR* val);
+ [propget]
+ HRESULT trackID([out, retval] BSTR* val);
+ }
+
+ [
+ odl,
uuid(2D719729-5333-406C-BF12-8DE787FD65E3),
helpstring("VLC Control"),
dual,
@@ -650,6 +695,9 @@ library AXVLC
HRESULT FullscreenEnabled([out, retval] VARIANT_BOOL* enabled);
[id(DISPID_FSEnabled), propput, helpstring("Returns/sets availability of fullscreen mode.")]
HRESULT FullscreenEnabled([in] VARIANT_BOOL enabled);
+
+ [propget, helpstring("Returns the media description object.")]
+ HRESULT mediaDescription([out, retval] IVLCMediaDescription** obj);
};
[
diff --git a/activex/vlccontrol2.cpp b/activex/vlccontrol2.cpp
index 6dac96a..fb38a1c 100644
--- a/activex/vlccontrol2.cpp
+++ b/activex/vlccontrol2.cpp
@@ -64,6 +64,7 @@ BIND_INTERFACE( VLCPlaylistItems )
BIND_INTERFACE( VLCPlaylist )
BIND_INTERFACE( VLCVideo )
BIND_INTERFACE( VLCSubtitle )
+BIND_INTERFACE( VLCMediaDescription )
#undef BIND_INTERFACE
@@ -1203,7 +1204,96 @@ STDMETHODIMP VLCLogo::put_position(BSTR val)
CoTaskMemFree(n);
return hr;
}
+/****************************************************************************/
+
+STDMETHODIMP VLCMediaDescription::get_meta(BSTR* val, libvlc_meta_t e_meta)
+{
+ if( NULL == val )
+ return E_POINTER;
+
+ *val = 0;
+
+ libvlc_media_player_t *p_md;
+ HRESULT hr = getMD(&p_md);
+ if( SUCCEEDED(hr) )
+ {
+ libvlc_media_t * p_media = libvlc_media_player_get_media(p_md);
+ const char* info = p_media ? libvlc_media_get_meta(p_media, e_meta) : 0;
+ *val = info ? BSTRFromCStr(CP_UTF8, info) : 0;
+ hr = *val ? S_OK : E_FAIL;
+ }
+ return hr;
+}
+
+STDMETHODIMP VLCMediaDescription::get_title(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Title);
+}
+STDMETHODIMP VLCMediaDescription::get_artist(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Artist);
+}
+STDMETHODIMP VLCMediaDescription::get_genre(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Genre);
+}
+STDMETHODIMP VLCMediaDescription::get_copyright(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Copyright);
+}
+STDMETHODIMP VLCMediaDescription::get_album(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Album);
+}
+STDMETHODIMP VLCMediaDescription::get_trackNumber(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_TrackNumber);
+}
+STDMETHODIMP VLCMediaDescription::get_description(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Description);
+}
+STDMETHODIMP VLCMediaDescription::get_rating(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Rating);
+}
+STDMETHODIMP VLCMediaDescription::get_date(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Date);
+}
+STDMETHODIMP VLCMediaDescription::get_setting(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Setting);
+}
+STDMETHODIMP VLCMediaDescription::get_URL(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_URL);
+}
+STDMETHODIMP VLCMediaDescription::get_language(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Language);
+}
+STDMETHODIMP VLCMediaDescription::get_nowPlaying(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_NowPlaying);
+}
+STDMETHODIMP VLCMediaDescription::get_publisher(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_Publisher);
+}
+STDMETHODIMP VLCMediaDescription::get_encodedBy(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_EncodedBy);
+}
+STDMETHODIMP VLCMediaDescription::get_artworkURL(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_ArtworkURL);
+}
+STDMETHODIMP VLCMediaDescription::get_trackID(BSTR *val)
+{
+ return get_meta(val, libvlc_meta_TrackID);
+}
/****************************************************************************/
VLCControl2::VLCControl2(VLCPlugin *p_instance) :
@@ -1213,7 +1303,8 @@ VLCControl2::VLCControl2(VLCPlugin *p_instance) :
_p_vlcinput(new VLCInput(p_instance)),
_p_vlcplaylist(new VLCPlaylist(p_instance)),
_p_vlcsubtitle(new VLCSubtitle(p_instance)),
- _p_vlcvideo(new VLCVideo(p_instance))
+ _p_vlcvideo(new VLCVideo(p_instance)),
+ _p_vlcmedia_desc(p_instance)
{
}
@@ -1497,3 +1588,8 @@ STDMETHODIMP VLCControl2::get_video(IVLCVideo** obj)
{
return object_get(obj,_p_vlcvideo);
}
+
+STDMETHODIMP VLCControl2::get_mediaDescription(IVLCMediaDescription** obj)
+{
+ return object_get<IVLCMediaDescription>(obj, &_p_vlcmedia_desc);
+}
diff --git a/activex/vlccontrol2.h b/activex/vlccontrol2.h
index 6303c2b..cf25258 100644
--- a/activex/vlccontrol2.h
+++ b/activex/vlccontrol2.h
@@ -329,6 +329,36 @@ private:
IVLCDeinterlace *_p_vlcdeint;
};
+class VLCMediaDescription:
+ public VLCInterface<VLCMediaDescription, IVLCMediaDescription>
+{
+public:
+ VLCMediaDescription(VLCPlugin *p)
+ : VLCInterface<VLCMediaDescription, IVLCMediaDescription>(p) { }
+
+ // IVLCMediaDescription methods
+ STDMETHODIMP get_title(BSTR*);
+ STDMETHODIMP get_artist(BSTR*);
+ STDMETHODIMP get_genre(BSTR*);
+ STDMETHODIMP get_copyright(BSTR*);
+ STDMETHODIMP get_album(BSTR*);
+ STDMETHODIMP get_trackNumber(BSTR*);
+ STDMETHODIMP get_description(BSTR*);
+ STDMETHODIMP get_rating(BSTR*);
+ STDMETHODIMP get_date(BSTR*);
+ STDMETHODIMP get_setting(BSTR*);
+ STDMETHODIMP get_URL(BSTR*);
+ STDMETHODIMP get_language(BSTR*);
+ STDMETHODIMP get_nowPlaying(BSTR*);
+ STDMETHODIMP get_publisher(BSTR*);
+ STDMETHODIMP get_encodedBy(BSTR*);
+ STDMETHODIMP get_artworkURL(BSTR*);
+ STDMETHODIMP get_trackID(BSTR*);
+
+private:
+ STDMETHODIMP get_meta(BSTR*, libvlc_meta_t);
+};
+
class VLCControl2 : public IVLCControl2
{
public:
@@ -389,6 +419,7 @@ public:
STDMETHODIMP get_playlist(IVLCPlaylist**);
STDMETHODIMP get_subtitle(IVLCSubtitle**);
STDMETHODIMP get_video(IVLCVideo**);
+ STDMETHODIMP get_mediaDescription(IVLCMediaDescription**);
protected:
HRESULT loadTypeInfo();
@@ -402,6 +433,8 @@ private:
IVLCPlaylist *_p_vlcplaylist;
IVLCSubtitle *_p_vlcsubtitle;
IVLCVideo *_p_vlcvideo;
+
+ VLCMediaDescription _p_vlcmedia_desc;
};
#endif
--
1.7.7.1.msysgit.0
More information about the vlc-devel
mailing list