//----------------------------------------------------------------------------- // // Musepack Demuxer // // Author : Igor Janos // //----------------------------------------------------------------------------- #include "stdafx.h" //----------------------------------------------------------------------------- // // MediaContentSource class // //----------------------------------------------------------------------------- MediaContentSource::MediaContentSource() { } MediaContentSource::~MediaContentSource() { } int MediaContentSource::GetContentString(CString key, CString &value) { // not implemented yet value = _T(""); return -1; } //----------------------------------------------------------------------------- // // CAMMediaContent class // //----------------------------------------------------------------------------- CAMMediaContent::CAMMediaContent(MediaContentSource *src, LPUNKNOWN pUnk) : CUnknown(_T("MediaContent"), pUnk), source(src) { } STDMETHODIMP CAMMediaContent::NonDelegatingQueryInterface(REFIID riid, __deref_out void **ppv) { ValidateReadWritePtr(ppv,sizeof(PVOID)); if (riid == IID_IAMMediaContent) { return GetInterface((IAMMediaContent*)this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); } } // return 1 if we support GetTypeInfo STDMETHODIMP CAMMediaContent::GetTypeInfoCount(__out UINT * pctinfo) { return basedisp.GetTypeInfoCount(pctinfo); } // attempt to find our type library STDMETHODIMP CAMMediaContent::GetTypeInfo(UINT itinfo, LCID lcid, __deref_out ITypeInfo ** pptinfo) { return basedisp.GetTypeInfo(IID_IAMMediaContent, itinfo, lcid, pptinfo); } STDMETHODIMP CAMMediaContent::GetIDsOfNames(REFIID riid, __in_ecount(cNames) LPOLESTR * rgszNames, UINT cNames, LCID lcid, __out_ecount(cNames) DISPID * rgdispid) { return basedisp.GetIDsOfNames(IID_IAMMediaContent, rgszNames, cNames, lcid, rgdispid); } STDMETHODIMP CAMMediaContent::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, __in DISPPARAMS * pdispparams, __out_opt VARIANT * pvarResult, __out_opt EXCEPINFO * pexcepinfo, __out_opt UINT * puArgErr) { // this parameter is a dead leftover from an earlier interface if (IID_NULL != riid) { return DISP_E_UNKNOWNINTERFACE; } ITypeInfo * pti; HRESULT hr = GetTypeInfo(0, lcid, &pti); if (FAILED(hr)) return hr; hr = pti->Invoke( (IAMMediaContent *)this, dispidMember, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); pti->Release(); return hr; } HRESULT CAMMediaContent::LoadContent(CString name, BSTR FAR *value) { if (!value) return E_POINTER; CString val; int ret = -1; if (source) { ret = source->GetContentString(name, val); } if (ret < 0) { return E_FAIL; } // alloc the value *value = SysAllocString((const OLECHAR*)val.GetBuffer()); return NOERROR; } STDMETHODIMP CAMMediaContent::get_AuthorName(BSTR FAR* pbstrAuthorName) { return LoadContent(_T("author"), pbstrAuthorName); } STDMETHODIMP CAMMediaContent::get_Title(BSTR FAR* pbstrTitle) { return LoadContent(_T("title"), pbstrTitle); } STDMETHODIMP CAMMediaContent::get_Rating(BSTR FAR* pbstrRating) { return LoadContent(_T("rating"), pbstrRating); } STDMETHODIMP CAMMediaContent::get_Description(BSTR FAR* pbstrDescription) { return LoadContent(_T("description"), pbstrDescription); } STDMETHODIMP CAMMediaContent::get_Copyright(BSTR FAR* pbstrCopyright) { return LoadContent(_T("copyright"), pbstrCopyright); } STDMETHODIMP CAMMediaContent::get_BaseURL(BSTR FAR* pbstrBaseURL) { return LoadContent(_T("base_url"), pbstrBaseURL); } STDMETHODIMP CAMMediaContent::get_LogoURL(BSTR FAR* pbstrLogoURL) { return LoadContent(_T("logo_url"), pbstrLogoURL); } STDMETHODIMP CAMMediaContent::get_LogoIconURL(BSTR FAR* pbstrLogoURL) { return LoadContent(_T("logo_icon_url"), pbstrLogoURL); } STDMETHODIMP CAMMediaContent::get_WatermarkURL(BSTR FAR* pbstrWatermarkURL) { return LoadContent(_T("watermark_url"), pbstrWatermarkURL); } STDMETHODIMP CAMMediaContent::get_MoreInfoURL(BSTR FAR* pbstrMoreInfoURL) { return LoadContent(_T("more_info_url"), pbstrMoreInfoURL); } STDMETHODIMP CAMMediaContent::get_MoreInfoBannerImage(BSTR FAR* pbstrMoreInfoBannerImage) { return LoadContent(_T("more_info_banner_image"), pbstrMoreInfoBannerImage); } STDMETHODIMP CAMMediaContent::get_MoreInfoBannerURL(BSTR FAR* pbstrMoreInfoBannerURL) { return LoadContent(_T("more_info_banner_url"), pbstrMoreInfoBannerURL); } STDMETHODIMP CAMMediaContent::get_MoreInfoText(BSTR FAR* pbstrMoreInfoText) { return LoadContent(_T("more_info_text"), pbstrMoreInfoText); }