From 6e718683eb5125bd8f41926a3c3acb5c68948f10 Mon Sep 17 00:00:00 2001 From: arpi Date: Wed, 21 Nov 2001 19:12:39 +0000 Subject: C++ -> C (import from avifile cvs) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3057 b3059339-0415-0410-9bf9-f77b7e298cf2 --- loader/dshow/cmediasample.c | 211 +++++++++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 92 deletions(-) (limited to 'loader/dshow/cmediasample.c') diff --git a/loader/dshow/cmediasample.c b/loader/dshow/cmediasample.c index 983ddbaeea..d927bb2264 100644 --- a/loader/dshow/cmediasample.c +++ b/loader/dshow/cmediasample.c @@ -3,23 +3,23 @@ #include #include -static long STDCALL CMediaSample_QueryInterface(IUnknown * This, +static long STDCALL CMediaSample_QueryInterface(IUnknown* This, /* [in] */ IID* iid, /* [iid_is][out] */ void **ppv) { - Debug printf("CMediaSample_QueryInterface() called\n"); + Debug printf("CMediaSample_QueryInterface(%p) called\n", This); if (!ppv) return E_INVALIDARG; - if (!memcmp(iid, &IID_IUnknown, 16)) + if (memcmp(iid, &IID_IUnknown, sizeof(*iid)) == 0) { - *ppv=(void*)This; - This->vt->AddRef(This); + *ppv = (void*)This; + ((IMediaSample*) This)->vt->AddRef(This); return 0; } - if (!memcmp(iid, &IID_IMediaSample, 16)) + if (memcmp(iid, &IID_IMediaSample, sizeof(*iid)) == 0) { - *ppv=(void*)This; - This->vt->AddRef(This); + *ppv = (void*)This; + ((IMediaSample*) This)->vt->AddRef(This); return 0; } return E_NOINTERFACE; @@ -27,26 +27,39 @@ static long STDCALL CMediaSample_QueryInterface(IUnknown * This, static long STDCALL CMediaSample_AddRef(IUnknown* This) { - Debug printf("CMediaSample_AddRef() called\n"); + Debug printf("CMediaSample_AddRef(%p) called\n", This); ((CMediaSample*)This)->refcount++; return 0; } +void CMediaSample_Destroy(CMediaSample* This) +{ + + Debug printf("CMediaSample_Destroy(%p) called (ref:%d)\n", This, This->refcount); + free(This->vt); + free(This->own_block); + if (This->media_type.pbFormat) + CoTaskMemFree(This->media_type.pbFormat); + free(This); +} + static long STDCALL CMediaSample_Release(IUnknown* This) { - Debug printf("%p: CMediaSample_Release() called, new refcount %d\n", - This, ((CMediaSample*)This)->refcount-1); CMediaSample* parent=(CMediaSample*)This; - if (--((CMediaSample*)This)->refcount==0) + Debug printf("CMediaSample_Release(%p) called (new ref:%d)\n", + This, ((CMediaSample*)This)->refcount-1); + if (--((CMediaSample*)This)->refcount == 0) + { parent->all->vt->ReleaseBuffer((IMemAllocator*)(parent->all), (IMediaSample*)This); + } return 0; } static HRESULT STDCALL CMediaSample_GetPointer(IMediaSample * This, /* [out] */ BYTE **ppBuffer) { - Debug printf("%p: CMediaSample_GetPointer() called\n", This); + Debug printf("CMediaSample_GetPointer(%p) called\n", This); if (!ppBuffer) return E_INVALIDARG; *ppBuffer=(BYTE *)((CMediaSample*)This)->block; @@ -55,7 +68,7 @@ static HRESULT STDCALL CMediaSample_GetPointer(IMediaSample * This, static long STDCALL CMediaSample_GetSize(IMediaSample * This) { - Debug printf("%p: CMediaSample_GetSize() called -> %d\n", + Debug printf("CMediaSample_GetSize(%p) called -> %d\n", This, ((CMediaSample*)This)->size); return ((CMediaSample*)This)->size; } @@ -64,7 +77,7 @@ static HRESULT STDCALL CMediaSample_GetTime(IMediaSample * This, /* [out] */ REFERENCE_TIME *pTimeStart, /* [out] */ REFERENCE_TIME *pTimeEnd) { - Debug printf("%p: CMediaSample_GetTime() called\n", This); + Debug printf("CMediaSample_GetTime(%p) called\n", This); return E_NOTIMPL; } @@ -72,13 +85,13 @@ static HRESULT STDCALL CMediaSample_SetTime(IMediaSample * This, /* [in] */ REFERENCE_TIME *pTimeStart, /* [in] */ REFERENCE_TIME *pTimeEnd) { - Debug printf("%p: CMediaSample_SetTime() called\n", This); + Debug printf("CMediaSample_SetTime(%p) called\n", This); return E_NOTIMPL; } static HRESULT STDCALL CMediaSample_IsSyncPoint(IMediaSample * This) { - Debug printf("%p: CMediaSample_IsSyncPoint() called\n", This); + Debug printf("CMediaSample_IsSyncPoint(%p) called\n", This); if (((CMediaSample*)This)->isSyncPoint) return 0; return 1; @@ -87,14 +100,14 @@ static HRESULT STDCALL CMediaSample_IsSyncPoint(IMediaSample * This) static HRESULT STDCALL CMediaSample_SetSyncPoint(IMediaSample * This, long bIsSyncPoint) { - Debug printf("%p: CMediaSample_SetSyncPoint() called\n", This); + Debug printf("CMediaSample_SetSyncPoint(%p) called\n", This); ((CMediaSample*)This)->isSyncPoint=bIsSyncPoint; return 0; } static HRESULT STDCALL CMediaSample_IsPreroll(IMediaSample * This) { - Debug printf("%p: CMediaSample_IsPreroll() called\n", This); + Debug printf("CMediaSample_IsPreroll(%p) called\n", This); if (((CMediaSample*)This)->isPreroll) return 0;//S_OK @@ -105,33 +118,34 @@ static HRESULT STDCALL CMediaSample_IsPreroll(IMediaSample * This) static HRESULT STDCALL CMediaSample_SetPreroll(IMediaSample * This, long bIsPreroll) { - Debug printf("%p: CMediaSample_SetPreroll() called\n", This); + Debug printf("CMediaSample_SetPreroll(%p) called\n", This); ((CMediaSample*)This)->isPreroll=bIsPreroll; return 0; } -static long STDCALL CMediaSample_GetActualDataLength(IMediaSample * This) +static long STDCALL CMediaSample_GetActualDataLength(IMediaSample* This) { - Debug printf("%p: CMediaSample_GetActualDataLength() called -> %d\n", This, ((CMediaSample*)This)->actual_size); + Debug printf("CMediaSample_GetActualDataLength(%p) called -> %d\n", This, ((CMediaSample*)This)->actual_size); return ((CMediaSample*)This)->actual_size; } -static HRESULT STDCALL CMediaSample_SetActualDataLength(IMediaSample * This, +static HRESULT STDCALL CMediaSample_SetActualDataLength(IMediaSample* This, long __MIDL_0010) { - Debug printf("%p: CMediaSample_SetActualDataLength(%ld) called\n", This, __MIDL_0010); + Debug printf("CMediaSample_SetActualDataLength(%p, %ld) called\n", This, __MIDL_0010); if (__MIDL_0010 > ((CMediaSample*)This)->size) { printf("%p: ERROR: CMediaSample buffer overflow\n", This); } - ((CMediaSample*)This)->actual_size=__MIDL_0010; + ((CMediaSample*)This)->actual_size = __MIDL_0010; return 0; } -static HRESULT STDCALL CMediaSample_GetMediaType(IMediaSample * This, - AM_MEDIA_TYPE **ppMediaType) +static HRESULT STDCALL CMediaSample_GetMediaType(IMediaSample* This, + AM_MEDIA_TYPE** ppMediaType) { - Debug printf("%p: CMediaSample_GetMediaType() called\n", This); + AM_MEDIA_TYPE* t; + Debug printf("CMediaSample_GetMediaType(%p) called\n", This); if(!ppMediaType) return E_INVALIDARG; if(!((CMediaSample*)This)->type_valid) @@ -139,28 +153,30 @@ static HRESULT STDCALL CMediaSample_GetMediaType(IMediaSample * This, *ppMediaType=0; return 1; } - AM_MEDIA_TYPE& t=((CMediaSample*)This)->media_type; -// if(t.pbFormat)CoTaskMemFree(t.pbFormat); - (*ppMediaType)=(AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); - memcpy(*ppMediaType, &t, sizeof(AM_MEDIA_TYPE)); - (*ppMediaType)->pbFormat=(char*)CoTaskMemAlloc(t.cbFormat); - memcpy((*ppMediaType)->pbFormat, t.pbFormat, t.cbFormat); -// *ppMediaType=0; //media type was not changed + + t = &((CMediaSample*)This)->media_type; + // if(t.pbFormat)CoTaskMemFree(t.pbFormat); + (*ppMediaType) = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); + **ppMediaType = *t; + (*ppMediaType)->pbFormat = (char*)CoTaskMemAlloc(t->cbFormat); + memcpy((*ppMediaType)->pbFormat, t->pbFormat, t->cbFormat); + // *ppMediaType=0; //media type was not changed return 0; } static HRESULT STDCALL CMediaSample_SetMediaType(IMediaSample * This, AM_MEDIA_TYPE *pMediaType) { - Debug printf("%p: CMediaSample_SetMediaType() called\n", This); + AM_MEDIA_TYPE* t; + Debug printf("CMediaSample_SetMediaType(%p) called\n", This); if (!pMediaType) return E_INVALIDARG; - AM_MEDIA_TYPE& t = ((CMediaSample*)This)->media_type; - if (t.pbFormat) - CoTaskMemFree(t.pbFormat); - t = *pMediaType; - t.pbFormat = (char*)CoTaskMemAlloc(t.cbFormat); - memcpy(t.pbFormat, pMediaType->pbFormat, t.cbFormat); + t = &((CMediaSample*)This)->media_type; + if (t->pbFormat) + CoTaskMemFree(t->pbFormat); + t = pMediaType; + t->pbFormat = (char*)CoTaskMemAlloc(t->cbFormat); + memcpy(t->pbFormat, pMediaType->pbFormat, t->cbFormat); ((CMediaSample*)This)->type_valid=1; return 0; @@ -168,14 +184,14 @@ static HRESULT STDCALL CMediaSample_SetMediaType(IMediaSample * This, static HRESULT STDCALL CMediaSample_IsDiscontinuity(IMediaSample * This) { - Debug printf("%p: CMediaSample_IsDiscontinuity() called\n", This); + Debug printf("CMediaSample_IsDiscontinuity(%p) called\n", This); return 1; } static HRESULT STDCALL CMediaSample_SetDiscontinuity(IMediaSample * This, long bDiscontinuity) { - Debug printf("%p: CMediaSample_SetDiscontinuity() called\n", This); + Debug printf("CMediaSample_SetDiscontinuity(%p) called\n", This); return E_NOTIMPL; } @@ -183,7 +199,7 @@ static HRESULT STDCALL CMediaSample_GetMediaTime(IMediaSample * This, /* [out] */ LONGLONG *pTimeStart, /* [out] */ LONGLONG *pTimeEnd) { - Debug printf("%p: CMediaSample_GetMediaTime() called\n", This); + Debug printf("CMediaSample_GetMediaTime(%p) called\n", This); return E_NOTIMPL; } @@ -191,54 +207,65 @@ static HRESULT STDCALL CMediaSample_SetMediaTime(IMediaSample * This, /* [in] */ LONGLONG *pTimeStart, /* [in] */ LONGLONG *pTimeEnd) { - Debug printf("%p: CMediaSample_SetMediaTime() called\n", This); + Debug printf("CMediaSample_SetMediaTime(%p) called\n", This); return E_NOTIMPL; } -CMediaSample::CMediaSample(IMemAllocator* allocator, long _size) -{ - vt = new IMediaSample_vt; - - vt->QueryInterface = CMediaSample_QueryInterface; - vt->AddRef = CMediaSample_AddRef; - vt->Release = CMediaSample_Release; - vt->GetPointer = CMediaSample_GetPointer; - vt->GetSize = CMediaSample_GetSize; - vt->GetTime = CMediaSample_GetTime; - vt->SetTime = CMediaSample_SetTime; - vt->IsSyncPoint = CMediaSample_IsSyncPoint; - vt->SetSyncPoint = CMediaSample_SetSyncPoint; - vt->IsPreroll = CMediaSample_IsPreroll; - vt->SetPreroll = CMediaSample_SetPreroll; - vt->GetActualDataLength = CMediaSample_GetActualDataLength; - vt->SetActualDataLength = CMediaSample_SetActualDataLength; - vt->GetMediaType = CMediaSample_GetMediaType; - vt->SetMediaType = CMediaSample_SetMediaType; - vt->IsDiscontinuity = CMediaSample_IsDiscontinuity; - vt->SetDiscontinuity = CMediaSample_SetDiscontinuity; - vt->GetMediaTime = CMediaSample_GetMediaTime; - vt->SetMediaTime = CMediaSample_SetMediaTime; - - all = allocator; - size = _size; - refcount = 0; - actual_size = 0; - media_type.pbFormat = 0; - isPreroll = 0; - type_valid = 0; - own_block = new char[size]; - block = own_block; - Debug printf("%p: Creating media sample with size %ld, buffer %p\n", - this, _size, block); -} - -CMediaSample::~CMediaSample() -{ - Debug printf("%p: CMediaSample::~CMediaSample() called\n", this); - if (!vt) - printf("Second delete of CMediaSample()!!|\n"); - delete vt; - delete own_block; - if (media_type.pbFormat) - CoTaskMemFree(media_type.pbFormat); +static void CMediaSample_SetPointer(CMediaSample* This, char* pointer) +{ + Debug printf("CMediaSample_SetPointer(%p) called -> %p\n", This, pointer); + if (pointer) + This->block = pointer; + else + This->block = This->own_block; +} + +static void CMediaSample_ResetPointer(CMediaSample* This) +{ + Debug printf("CMediaSample_ResetPointer(%p) called\n", This); + This->block = This->own_block; +} + +CMediaSample* CMediaSampleCreate(IMemAllocator* allocator, int _size) +{ + CMediaSample* This = (CMediaSample*) malloc(sizeof( CMediaSample )); + This->vt = (IMediaSample_vt*) malloc(sizeof(IMediaSample_vt)); + + This->vt->QueryInterface = CMediaSample_QueryInterface; + This->vt->AddRef = CMediaSample_AddRef; + This->vt->Release = CMediaSample_Release; + This->vt->GetPointer = CMediaSample_GetPointer; + This->vt->GetSize = CMediaSample_GetSize; + This->vt->GetTime = CMediaSample_GetTime; + This->vt->SetTime = CMediaSample_SetTime; + This->vt->IsSyncPoint = CMediaSample_IsSyncPoint; + This->vt->SetSyncPoint = CMediaSample_SetSyncPoint; + This->vt->IsPreroll = CMediaSample_IsPreroll; + This->vt->SetPreroll = CMediaSample_SetPreroll; + This->vt->GetActualDataLength = CMediaSample_GetActualDataLength; + This->vt->SetActualDataLength = CMediaSample_SetActualDataLength; + This->vt->GetMediaType = CMediaSample_GetMediaType; + This->vt->SetMediaType = CMediaSample_SetMediaType; + This->vt->IsDiscontinuity = CMediaSample_IsDiscontinuity; + This->vt->SetDiscontinuity = CMediaSample_SetDiscontinuity; + This->vt->GetMediaTime = CMediaSample_GetMediaTime; + This->vt->SetMediaTime = CMediaSample_SetMediaTime; + + This->all = allocator; + This->size = _size; + This->refcount = 0; // increased by MemAllocator + This->actual_size = 0; + This->media_type.pbFormat = 0; + This->isPreroll = 0; + This->type_valid = 0; + This->own_block = (char*) malloc(This->size); + This->block = This->own_block; + + This->SetPointer = CMediaSample_SetPointer; + This->ResetPointer = CMediaSample_ResetPointer; + + Debug printf("CMediaSample_Create(%p) called - sample size %d, buffer %p\n", + This, This->size, This->block); + + return This; } -- cgit v1.2.3