summaryrefslogtreecommitdiffstats
path: root/loader/dshow/cmediasample.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-21 19:12:39 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-21 19:12:39 +0000
commit6e718683eb5125bd8f41926a3c3acb5c68948f10 (patch)
treeedd9cd90f0d2881c4e53b3875ec31a867a7ae0e9 /loader/dshow/cmediasample.c
parentd1abb9c4b3280dc3592470f3bda83aaecc240c97 (diff)
downloadmpv-6e718683eb5125bd8f41926a3c3acb5c68948f10.tar.bz2
mpv-6e718683eb5125bd8f41926a3c3acb5c68948f10.tar.xz
C++ -> C (import from avifile cvs)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3057 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'loader/dshow/cmediasample.c')
-rw-r--r--loader/dshow/cmediasample.c211
1 files changed, 119 insertions, 92 deletions
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 <stdio.h>
#include <string.h>
-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;
}