[PATCH 4/4] amstream: Implement BasePinImp_GetMediaType in media stream filter.

Christian Costa titan.costa at gmail.com
Fri Oct 12 16:07:31 CDT 2012


---
 dlls/amstream/mediastreamfilter.c |   60 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 59 insertions(+), 1 deletion(-)

diff --git a/dlls/amstream/mediastreamfilter.c b/dlls/amstream/mediastreamfilter.c
index a2851ca..9b2bd8e 100644
--- a/dlls/amstream/mediastreamfilter.c
+++ b/dlls/amstream/mediastreamfilter.c
@@ -126,8 +126,66 @@ static LONG WINAPI BasePinImp_GetMediaTypeVersion(BasePin *This)
     return 0;
 }
 
-static HRESULT WINAPI BasePinImp_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *amt)
+static HRESULT WINAPI BasePinImp_GetMediaType(BasePin *This, int index, AM_MEDIA_TYPE *amt)
 {
+    IMediaStreamFilterImpl *filter = (IMediaStreamFilterImpl*)This->pinInfo.pFilter;
+    MSPID purpose_id;
+    int i;
+
+    /* 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("Processing stream with purpose id %s\n", debugstr_guid(&purpose_id));
+
+    if (IsEqualGUID(&purpose_id, &MSPID_PrimaryVideo))
+    {
+        amt->majortype = MEDIATYPE_Video;
+
+        switch (index)
+        {
+            case 0:
+                amt->subtype = MEDIASUBTYPE_RGB1;
+                break;
+            case 1:
+                amt->subtype = MEDIASUBTYPE_RGB4;
+                break;
+            case 2:
+                amt->subtype = MEDIASUBTYPE_RGB8;
+                break;
+            case 3:
+                amt->subtype = MEDIASUBTYPE_RGB565;
+                break;
+            case 4:
+                amt->subtype = MEDIASUBTYPE_RGB555;
+                break;
+            case 5:
+                amt->subtype = MEDIASUBTYPE_RGB24;
+                break;
+            case 6:
+                amt->subtype = MEDIASUBTYPE_RGB32;
+                break;
+            default:
+                return S_FALSE;
+        }
+    }
+    else if (IsEqualGUID(&purpose_id, &MSPID_PrimaryAudio))
+    {
+        if (!index)
+        {
+            amt->majortype = MEDIATYPE_Audio;
+            amt->subtype = MEDIASUBTYPE_PCM;
+            return S_OK;
+        }
+    }
+
     return S_FALSE;
 }
 




More information about the wine-patches mailing list