Robert Shearman wrote:

Maarten Lankhorst wrote:

This patch fixes AM_MEDIA_TYPE->pbFormat not being handled correctly, unfortunately, this also means some stuff has to be rewritten to avoid memleaks, instead of CoTaskMemFree(AM_MEDIA_TYPE), DeleteMediaType has to be used.. This also fixes the errors i had with msn webcam, i feel like i stumbled over every bug in quartz now......

------------------------------------------------------------------------

@@ -45,6 +46,7 @@ void DeleteMediaType(AM_MEDIA_TYPE * pMe
        IUnknown_Release(pMediaType->pUnk);
        pMediaType->pUnk = NULL;
    }
+    CoTaskMemFree(pMediaType);
}

BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards)



This change is wrong. DeleteMediaType is not supposed to free the memory used for the AM_MEDIA_TYPE structure itself as the function is also used in places where the AM_MEDIA_TYPE was not allocated using CoTaskMemAlloc.


Rob

This change is right, if you don't want to release the format block you need to use freemediatype... quoting msdn...


*DeleteMediaType*

The **DeleteMediaType* *function deletes an allocated *AM_MEDIA_TYPE* <http://msdn.microsoft.com/library/en-us/directshow/htm/am_media_typestructure.asp> structure, including the format block.

*Syntax*

|*void WINAPI *DeleteMediaType*(
*    *AM_MEDIA_TYPE* /*pmt/
*);*
|

*Parameters*

/pmt /

Pointer to an *AM_MEDIA_TYPE* structure.

*Return Value*

No return value.

*Remarks*

Use this function to release any media type structure that was allocated using either *CoTaskMemAlloc* or *CreateMediaType* <http://msdn.microsoft.com/library/en-us/directshow/htm/createmediatype.asp>.


If you prefer not to link to the base class library, you can use the following code directly:


|void MyDeleteMediaType(AM_MEDIA_TYPE *pmt)
{
   if (pmt != NULL)
   {
       MyFreeMediaType(*pmt); // See FreeMediaType for the implementation.
       CoTaskMemFree(pmt);
   }
}
|

*Requirements*

*  Header:* Declared in Mtype.h; include Streams.h.

* Library:* Use Strmbase.lib (retail builds) or Strmbasd.lib (debug builds).




Reply via email to