Re2: EnumMedia patch

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).