Christian Costa : amstream: Implement BasePinImpl_CheckMediaType in media stream filter.

Alexandre Julliard julliard at winehq.org
Mon Oct 15 14:29:05 CDT 2012


Module: wine
Branch: master
Commit: 604fb218b77eec6ee6e204e43fda237316c30b96
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=604fb218b77eec6ee6e204e43fda237316c30b96

Author: Christian Costa <titan.costa at gmail.com>
Date:   Fri Oct 12 23:07:24 2012 +0200

amstream: Implement BasePinImpl_CheckMediaType in media stream filter.

---

 dlls/amstream/mediastreamfilter.c |   42 +++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/dlls/amstream/mediastreamfilter.c b/dlls/amstream/mediastreamfilter.c
index 8423cfa..a2851ca 100644
--- a/dlls/amstream/mediastreamfilter.c
+++ b/dlls/amstream/mediastreamfilter.c
@@ -76,6 +76,48 @@ static inline IMediaStreamFilterImpl *impl_from_IMediaStreamFilter(IMediaStreamF
 
 static HRESULT WINAPI BasePinImpl_CheckMediaType(BasePin *This, const AM_MEDIA_TYPE *pmt)
 {
+    IMediaStreamFilterImpl *filter = impl_from_IMediaStreamFilter((IMediaStreamFilter*)This->pinInfo.pFilter);
+    MSPID purpose_id;
+    int i;
+
+    TRACE("Checking media type %s - %s\n", debugstr_guid(&pmt->majortype), debugstr_guid(&pmt->subtype));
+
+    /* Find which stream is associated with the pin */
+    for (i = 0; i < filter->nb_streams; i++)
+        if (&This->IPin_iface == filter->pins[i])
+            break;
+
+    if (i == filter->nb_streams)
+        return S_FALSE;
+
+    if (FAILED(IMediaStream_GetInformation(filter->streams[i], &purpose_id, NULL)))
+        return S_FALSE;
+
+    TRACE("Checking stream with purpose id %s\n", debugstr_guid(&purpose_id));
+
+    if (IsEqualGUID(&purpose_id, &MSPID_PrimaryVideo) && IsEqualGUID(&pmt->majortype, &MEDIATYPE_Video))
+    {
+        if (IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB1) ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB4) ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB8)  ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB565) ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB555) ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB24) ||
+            IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_RGB32))
+        {
+            TRACE("Video sub-type %s matches\n", debugstr_guid(&pmt->subtype));
+            return S_OK;
+        }
+    }
+    else if (IsEqualGUID(&purpose_id, &MSPID_PrimaryAudio) && IsEqualGUID(&pmt->majortype, &MEDIATYPE_Audio))
+    {
+        if (IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_PCM))
+        {
+            TRACE("Audio sub-type %s matches\n", debugstr_guid(&pmt->subtype));
+            return S_OK;
+        }
+    }
+
     return S_FALSE;
 }
 




More information about the wine-cvs mailing list