Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
5b92b39b
Commit
5b92b39b
authored
Jan 07, 2009
by
Francois Gouget
Committed by
Alexandre Julliard
Jan 07, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
quartz: Reorder some functions to avoid forward declarations.
parent
8d771576
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
209 additions
and
217 deletions
+209
-217
pin.c
dlls/quartz/pin.c
+209
-204
pin.h
dlls/quartz/pin.h
+0
-13
No files found.
dlls/quartz/pin.c
View file @
5b92b39b
...
...
@@ -142,11 +142,6 @@ out:
return
hr
;
}
static
inline
InputPin
*
impl_from_IMemInputPin
(
IMemInputPin
*
iface
)
{
return
(
InputPin
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
InputPin
,
lpVtblMemInput
));
}
static
void
Copy_PinInfo
(
PIN_INFO
*
pDest
,
const
PIN_INFO
*
pSrc
)
{
...
...
@@ -159,205 +154,6 @@ static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc)
pDest
->
pFilter
=
pSrc
->
pFilter
;
}
/* Function called as a helper to IPin_Connect */
/* specific AM_MEDIA_TYPE - it cannot be NULL */
/* NOTE: not part of standard interface */
static
HRESULT
OutputPin_ConnectSpecific
(
IPin
*
iface
,
IPin
*
pReceivePin
,
const
AM_MEDIA_TYPE
*
pmt
)
{
OutputPin
*
This
=
(
OutputPin
*
)
iface
;
HRESULT
hr
;
IMemAllocator
*
pMemAlloc
=
NULL
;
ALLOCATOR_PROPERTIES
actual
;
/* FIXME: should we put the actual props back in to This? */
TRACE
(
"(%p, %p)
\n
"
,
pReceivePin
,
pmt
);
dump_AM_MEDIA_TYPE
(
pmt
);
/* FIXME: call queryacceptproc */
This
->
pin
.
pConnectedTo
=
pReceivePin
;
IPin_AddRef
(
pReceivePin
);
CopyMediaType
(
&
This
->
pin
.
mtCurrent
,
pmt
);
hr
=
IPin_ReceiveConnection
(
pReceivePin
,
iface
,
pmt
);
/* get the IMemInputPin interface we will use to deliver samples to the
* connected pin */
if
(
SUCCEEDED
(
hr
))
{
This
->
pMemInputPin
=
NULL
;
hr
=
IPin_QueryInterface
(
pReceivePin
,
&
IID_IMemInputPin
,
(
LPVOID
)
&
This
->
pMemInputPin
);
if
(
SUCCEEDED
(
hr
)
&&
!
This
->
custom_allocator
)
{
hr
=
IMemInputPin_GetAllocator
(
This
->
pMemInputPin
,
&
pMemAlloc
);
if
(
hr
==
VFW_E_NO_ALLOCATOR
)
/* Input pin provides no allocator, use standard memory allocator */
hr
=
CoCreateInstance
(
&
CLSID_MemoryAllocator
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IMemAllocator
,
(
LPVOID
*
)
&
pMemAlloc
);
if
(
SUCCEEDED
(
hr
))
hr
=
IMemAllocator_SetProperties
(
pMemAlloc
,
&
This
->
allocProps
,
&
actual
);
if
(
SUCCEEDED
(
hr
))
hr
=
IMemInputPin_NotifyAllocator
(
This
->
pMemInputPin
,
pMemAlloc
,
This
->
readonly
);
if
(
pMemAlloc
)
IMemAllocator_Release
(
pMemAlloc
);
}
else
if
(
SUCCEEDED
(
hr
))
{
if
(
This
->
alloc
)
{
hr
=
IMemInputPin_NotifyAllocator
(
This
->
pMemInputPin
,
This
->
alloc
,
This
->
readonly
);
}
else
hr
=
VFW_E_NO_ALLOCATOR
;
}
/* break connection if we couldn't get the allocator */
if
(
FAILED
(
hr
))
{
if
(
This
->
pMemInputPin
)
IMemInputPin_Release
(
This
->
pMemInputPin
);
This
->
pMemInputPin
=
NULL
;
IPin_Disconnect
(
pReceivePin
);
}
}
if
(
FAILED
(
hr
))
{
IPin_Release
(
This
->
pin
.
pConnectedTo
);
This
->
pin
.
pConnectedTo
=
NULL
;
FreeMediaType
(
&
This
->
pin
.
mtCurrent
);
}
TRACE
(
" -- %x
\n
"
,
hr
);
return
hr
;
}
static
HRESULT
InputPin_Init
(
const
IPinVtbl
*
InputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
SAMPLEPROC_PUSH
pSampleProc
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
CLEANUPPROC
pCleanUp
,
LPCRITICAL_SECTION
pCritSec
,
IMemAllocator
*
allocator
,
InputPin
*
pPinImpl
)
{
TRACE
(
"
\n
"
);
/* Common attributes */
pPinImpl
->
pin
.
refCount
=
1
;
pPinImpl
->
pin
.
pConnectedTo
=
NULL
;
pPinImpl
->
pin
.
fnQueryAccept
=
pQueryAccept
;
pPinImpl
->
pin
.
pUserData
=
pUserData
;
pPinImpl
->
pin
.
pCritSec
=
pCritSec
;
Copy_PinInfo
(
&
pPinImpl
->
pin
.
pinInfo
,
pPinInfo
);
ZeroMemory
(
&
pPinImpl
->
pin
.
mtCurrent
,
sizeof
(
AM_MEDIA_TYPE
));
/* Input pin attributes */
pPinImpl
->
fnSampleProc
=
pSampleProc
;
pPinImpl
->
fnCleanProc
=
pCleanUp
;
pPinImpl
->
pAllocator
=
pPinImpl
->
preferred_allocator
=
allocator
;
if
(
pPinImpl
->
preferred_allocator
)
IMemAllocator_AddRef
(
pPinImpl
->
preferred_allocator
);
pPinImpl
->
tStart
=
0
;
pPinImpl
->
tStop
=
0
;
pPinImpl
->
dRate
=
1
.
0
;
pPinImpl
->
pin
.
lpVtbl
=
InputPin_Vtbl
;
pPinImpl
->
lpVtblMemInput
=
&
MemInputPin_Vtbl
;
pPinImpl
->
flushing
=
pPinImpl
->
end_of_stream
=
0
;
return
S_OK
;
}
static
HRESULT
OutputPin_Init
(
const
IPinVtbl
*
OutputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
const
ALLOCATOR_PROPERTIES
*
props
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
LPCRITICAL_SECTION
pCritSec
,
OutputPin
*
pPinImpl
)
{
TRACE
(
"
\n
"
);
/* Common attributes */
pPinImpl
->
pin
.
lpVtbl
=
OutputPin_Vtbl
;
pPinImpl
->
pin
.
refCount
=
1
;
pPinImpl
->
pin
.
pConnectedTo
=
NULL
;
pPinImpl
->
pin
.
fnQueryAccept
=
pQueryAccept
;
pPinImpl
->
pin
.
pUserData
=
pUserData
;
pPinImpl
->
pin
.
pCritSec
=
pCritSec
;
Copy_PinInfo
(
&
pPinImpl
->
pin
.
pinInfo
,
pPinInfo
);
ZeroMemory
(
&
pPinImpl
->
pin
.
mtCurrent
,
sizeof
(
AM_MEDIA_TYPE
));
/* Output pin attributes */
pPinImpl
->
pMemInputPin
=
NULL
;
pPinImpl
->
pConnectSpecific
=
OutputPin_ConnectSpecific
;
/* If custom_allocator is set, you will need to specify an allocator
* in the alloc member of the struct before an output pin can connect
*/
pPinImpl
->
custom_allocator
=
0
;
pPinImpl
->
alloc
=
NULL
;
pPinImpl
->
readonly
=
FALSE
;
if
(
props
)
{
pPinImpl
->
allocProps
=
*
props
;
if
(
pPinImpl
->
allocProps
.
cbAlign
==
0
)
pPinImpl
->
allocProps
.
cbAlign
=
1
;
}
else
ZeroMemory
(
&
pPinImpl
->
allocProps
,
sizeof
(
pPinImpl
->
allocProps
));
return
S_OK
;
}
HRESULT
InputPin_Construct
(
const
IPinVtbl
*
InputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
SAMPLEPROC_PUSH
pSampleProc
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
CLEANUPPROC
pCleanUp
,
LPCRITICAL_SECTION
pCritSec
,
IMemAllocator
*
allocator
,
IPin
**
ppPin
)
{
InputPin
*
pPinImpl
;
*
ppPin
=
NULL
;
if
(
pPinInfo
->
dir
!=
PINDIR_INPUT
)
{
ERR
(
"Pin direction(%x) != PINDIR_INPUT
\n
"
,
pPinInfo
->
dir
);
return
E_INVALIDARG
;
}
pPinImpl
=
CoTaskMemAlloc
(
sizeof
(
*
pPinImpl
));
if
(
!
pPinImpl
)
return
E_OUTOFMEMORY
;
if
(
SUCCEEDED
(
InputPin_Init
(
InputPin_Vtbl
,
pPinInfo
,
pSampleProc
,
pUserData
,
pQueryAccept
,
pCleanUp
,
pCritSec
,
allocator
,
pPinImpl
)))
{
*
ppPin
=
(
IPin
*
)
pPinImpl
;
return
S_OK
;
}
CoTaskMemFree
(
pPinImpl
);
return
E_FAIL
;
}
HRESULT
OutputPin_Construct
(
const
IPinVtbl
*
OutputPin_Vtbl
,
long
outputpin_size
,
const
PIN_INFO
*
pPinInfo
,
ALLOCATOR_PROPERTIES
*
props
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
LPCRITICAL_SECTION
pCritSec
,
IPin
**
ppPin
)
{
OutputPin
*
pPinImpl
;
*
ppPin
=
NULL
;
if
(
pPinInfo
->
dir
!=
PINDIR_OUTPUT
)
{
ERR
(
"Pin direction(%x) != PINDIR_OUTPUT
\n
"
,
pPinInfo
->
dir
);
return
E_INVALIDARG
;
}
assert
(
outputpin_size
>=
sizeof
(
OutputPin
));
pPinImpl
=
CoTaskMemAlloc
(
outputpin_size
);
if
(
!
pPinImpl
)
return
E_OUTOFMEMORY
;
if
(
SUCCEEDED
(
OutputPin_Init
(
OutputPin_Vtbl
,
pPinInfo
,
props
,
pUserData
,
pQueryAccept
,
pCritSec
,
pPinImpl
)))
{
*
ppPin
=
(
IPin
*
)(
&
pPinImpl
->
pin
.
lpVtbl
);
return
S_OK
;
}
CoTaskMemFree
(
pPinImpl
);
return
E_FAIL
;
}
/*** Common pin functions ***/
ULONG
WINAPI
IPinImpl_AddRef
(
IPin
*
iface
)
...
...
@@ -735,6 +531,11 @@ static const IPinVtbl InputPin_Vtbl =
/*** IMemInputPin implementation ***/
static
inline
InputPin
*
impl_from_IMemInputPin
(
IMemInputPin
*
iface
)
{
return
(
InputPin
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
InputPin
,
lpVtblMemInput
));
}
HRESULT
WINAPI
MemInputPin_QueryInterface
(
IMemInputPin
*
iface
,
REFIID
riid
,
LPVOID
*
ppv
)
{
InputPin
*
This
=
impl_from_IMemInputPin
(
iface
);
...
...
@@ -858,6 +659,8 @@ static const IMemInputPinVtbl MemInputPin_Vtbl =
MemInputPin_ReceiveCanBlock
};
/*** OutputPin implementation ***/
HRESULT
WINAPI
OutputPin_QueryInterface
(
IPin
*
iface
,
REFIID
riid
,
LPVOID
*
ppv
)
{
OutputPin
*
This
=
(
OutputPin
*
)
iface
;
...
...
@@ -1260,6 +1063,7 @@ HRESULT OutputPin_DeliverDisconnect(OutputPin * This)
return
hr
;
}
/*** PullPin implementation ***/
static
HRESULT
PullPin_Init
(
const
IPinVtbl
*
PullPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
SAMPLEPROC_PULL
pSampleProc
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
CLEANUPPROC
pCleanUp
,
REQUESTPROC
pCustomRequest
,
STOPPROCESSPROC
pDone
,
LPCRITICAL_SECTION
pCritSec
,
PullPin
*
pPinImpl
)
...
...
@@ -1876,3 +1680,204 @@ static const IPinVtbl PullPin_Vtbl =
PullPin_EndFlush
,
PullPin_NewSegment
};
/*** The Construct functions ***/
/* Function called as a helper to IPin_Connect */
/* specific AM_MEDIA_TYPE - it cannot be NULL */
/* NOTE: not part of standard interface */
static
HRESULT
OutputPin_ConnectSpecific
(
IPin
*
iface
,
IPin
*
pReceivePin
,
const
AM_MEDIA_TYPE
*
pmt
)
{
OutputPin
*
This
=
(
OutputPin
*
)
iface
;
HRESULT
hr
;
IMemAllocator
*
pMemAlloc
=
NULL
;
ALLOCATOR_PROPERTIES
actual
;
/* FIXME: should we put the actual props back in to This? */
TRACE
(
"(%p, %p)
\n
"
,
pReceivePin
,
pmt
);
dump_AM_MEDIA_TYPE
(
pmt
);
/* FIXME: call queryacceptproc */
This
->
pin
.
pConnectedTo
=
pReceivePin
;
IPin_AddRef
(
pReceivePin
);
CopyMediaType
(
&
This
->
pin
.
mtCurrent
,
pmt
);
hr
=
IPin_ReceiveConnection
(
pReceivePin
,
iface
,
pmt
);
/* get the IMemInputPin interface we will use to deliver samples to the
* connected pin */
if
(
SUCCEEDED
(
hr
))
{
This
->
pMemInputPin
=
NULL
;
hr
=
IPin_QueryInterface
(
pReceivePin
,
&
IID_IMemInputPin
,
(
LPVOID
)
&
This
->
pMemInputPin
);
if
(
SUCCEEDED
(
hr
)
&&
!
This
->
custom_allocator
)
{
hr
=
IMemInputPin_GetAllocator
(
This
->
pMemInputPin
,
&
pMemAlloc
);
if
(
hr
==
VFW_E_NO_ALLOCATOR
)
/* Input pin provides no allocator, use standard memory allocator */
hr
=
CoCreateInstance
(
&
CLSID_MemoryAllocator
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IMemAllocator
,
(
LPVOID
*
)
&
pMemAlloc
);
if
(
SUCCEEDED
(
hr
))
hr
=
IMemAllocator_SetProperties
(
pMemAlloc
,
&
This
->
allocProps
,
&
actual
);
if
(
SUCCEEDED
(
hr
))
hr
=
IMemInputPin_NotifyAllocator
(
This
->
pMemInputPin
,
pMemAlloc
,
This
->
readonly
);
if
(
pMemAlloc
)
IMemAllocator_Release
(
pMemAlloc
);
}
else
if
(
SUCCEEDED
(
hr
))
{
if
(
This
->
alloc
)
{
hr
=
IMemInputPin_NotifyAllocator
(
This
->
pMemInputPin
,
This
->
alloc
,
This
->
readonly
);
}
else
hr
=
VFW_E_NO_ALLOCATOR
;
}
/* break connection if we couldn't get the allocator */
if
(
FAILED
(
hr
))
{
if
(
This
->
pMemInputPin
)
IMemInputPin_Release
(
This
->
pMemInputPin
);
This
->
pMemInputPin
=
NULL
;
IPin_Disconnect
(
pReceivePin
);
}
}
if
(
FAILED
(
hr
))
{
IPin_Release
(
This
->
pin
.
pConnectedTo
);
This
->
pin
.
pConnectedTo
=
NULL
;
FreeMediaType
(
&
This
->
pin
.
mtCurrent
);
}
TRACE
(
" -- %x
\n
"
,
hr
);
return
hr
;
}
static
HRESULT
InputPin_Init
(
const
IPinVtbl
*
InputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
SAMPLEPROC_PUSH
pSampleProc
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
CLEANUPPROC
pCleanUp
,
LPCRITICAL_SECTION
pCritSec
,
IMemAllocator
*
allocator
,
InputPin
*
pPinImpl
)
{
TRACE
(
"
\n
"
);
/* Common attributes */
pPinImpl
->
pin
.
refCount
=
1
;
pPinImpl
->
pin
.
pConnectedTo
=
NULL
;
pPinImpl
->
pin
.
fnQueryAccept
=
pQueryAccept
;
pPinImpl
->
pin
.
pUserData
=
pUserData
;
pPinImpl
->
pin
.
pCritSec
=
pCritSec
;
Copy_PinInfo
(
&
pPinImpl
->
pin
.
pinInfo
,
pPinInfo
);
ZeroMemory
(
&
pPinImpl
->
pin
.
mtCurrent
,
sizeof
(
AM_MEDIA_TYPE
));
/* Input pin attributes */
pPinImpl
->
fnSampleProc
=
pSampleProc
;
pPinImpl
->
fnCleanProc
=
pCleanUp
;
pPinImpl
->
pAllocator
=
pPinImpl
->
preferred_allocator
=
allocator
;
if
(
pPinImpl
->
preferred_allocator
)
IMemAllocator_AddRef
(
pPinImpl
->
preferred_allocator
);
pPinImpl
->
tStart
=
0
;
pPinImpl
->
tStop
=
0
;
pPinImpl
->
dRate
=
1
.
0
;
pPinImpl
->
pin
.
lpVtbl
=
InputPin_Vtbl
;
pPinImpl
->
lpVtblMemInput
=
&
MemInputPin_Vtbl
;
pPinImpl
->
flushing
=
pPinImpl
->
end_of_stream
=
0
;
return
S_OK
;
}
static
HRESULT
OutputPin_Init
(
const
IPinVtbl
*
OutputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
const
ALLOCATOR_PROPERTIES
*
props
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
LPCRITICAL_SECTION
pCritSec
,
OutputPin
*
pPinImpl
)
{
TRACE
(
"
\n
"
);
/* Common attributes */
pPinImpl
->
pin
.
lpVtbl
=
OutputPin_Vtbl
;
pPinImpl
->
pin
.
refCount
=
1
;
pPinImpl
->
pin
.
pConnectedTo
=
NULL
;
pPinImpl
->
pin
.
fnQueryAccept
=
pQueryAccept
;
pPinImpl
->
pin
.
pUserData
=
pUserData
;
pPinImpl
->
pin
.
pCritSec
=
pCritSec
;
Copy_PinInfo
(
&
pPinImpl
->
pin
.
pinInfo
,
pPinInfo
);
ZeroMemory
(
&
pPinImpl
->
pin
.
mtCurrent
,
sizeof
(
AM_MEDIA_TYPE
));
/* Output pin attributes */
pPinImpl
->
pMemInputPin
=
NULL
;
pPinImpl
->
pConnectSpecific
=
OutputPin_ConnectSpecific
;
/* If custom_allocator is set, you will need to specify an allocator
* in the alloc member of the struct before an output pin can connect
*/
pPinImpl
->
custom_allocator
=
0
;
pPinImpl
->
alloc
=
NULL
;
pPinImpl
->
readonly
=
FALSE
;
if
(
props
)
{
pPinImpl
->
allocProps
=
*
props
;
if
(
pPinImpl
->
allocProps
.
cbAlign
==
0
)
pPinImpl
->
allocProps
.
cbAlign
=
1
;
}
else
ZeroMemory
(
&
pPinImpl
->
allocProps
,
sizeof
(
pPinImpl
->
allocProps
));
return
S_OK
;
}
HRESULT
InputPin_Construct
(
const
IPinVtbl
*
InputPin_Vtbl
,
const
PIN_INFO
*
pPinInfo
,
SAMPLEPROC_PUSH
pSampleProc
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
CLEANUPPROC
pCleanUp
,
LPCRITICAL_SECTION
pCritSec
,
IMemAllocator
*
allocator
,
IPin
**
ppPin
)
{
InputPin
*
pPinImpl
;
*
ppPin
=
NULL
;
if
(
pPinInfo
->
dir
!=
PINDIR_INPUT
)
{
ERR
(
"Pin direction(%x) != PINDIR_INPUT
\n
"
,
pPinInfo
->
dir
);
return
E_INVALIDARG
;
}
pPinImpl
=
CoTaskMemAlloc
(
sizeof
(
*
pPinImpl
));
if
(
!
pPinImpl
)
return
E_OUTOFMEMORY
;
if
(
SUCCEEDED
(
InputPin_Init
(
InputPin_Vtbl
,
pPinInfo
,
pSampleProc
,
pUserData
,
pQueryAccept
,
pCleanUp
,
pCritSec
,
allocator
,
pPinImpl
)))
{
*
ppPin
=
(
IPin
*
)
pPinImpl
;
return
S_OK
;
}
CoTaskMemFree
(
pPinImpl
);
return
E_FAIL
;
}
HRESULT
OutputPin_Construct
(
const
IPinVtbl
*
OutputPin_Vtbl
,
long
outputpin_size
,
const
PIN_INFO
*
pPinInfo
,
ALLOCATOR_PROPERTIES
*
props
,
LPVOID
pUserData
,
QUERYACCEPTPROC
pQueryAccept
,
LPCRITICAL_SECTION
pCritSec
,
IPin
**
ppPin
)
{
OutputPin
*
pPinImpl
;
*
ppPin
=
NULL
;
if
(
pPinInfo
->
dir
!=
PINDIR_OUTPUT
)
{
ERR
(
"Pin direction(%x) != PINDIR_OUTPUT
\n
"
,
pPinInfo
->
dir
);
return
E_INVALIDARG
;
}
assert
(
outputpin_size
>=
sizeof
(
OutputPin
));
pPinImpl
=
CoTaskMemAlloc
(
outputpin_size
);
if
(
!
pPinImpl
)
return
E_OUTOFMEMORY
;
if
(
SUCCEEDED
(
OutputPin_Init
(
OutputPin_Vtbl
,
pPinInfo
,
props
,
pUserData
,
pQueryAccept
,
pCritSec
,
pPinImpl
)))
{
*
ppPin
=
(
IPin
*
)(
&
pPinImpl
->
pin
.
lpVtbl
);
return
S_OK
;
}
CoTaskMemFree
(
pPinImpl
);
return
E_FAIL
;
}
dlls/quartz/pin.h
View file @
5b92b39b
...
...
@@ -189,19 +189,6 @@ HRESULT OutputPin_SendSample(OutputPin * This, IMediaSample * pSample);
HRESULT
OutputPin_DeliverDisconnect
(
OutputPin
*
This
);
HRESULT
OutputPin_DeliverNewSegment
(
OutputPin
*
This
,
REFERENCE_TIME
tStart
,
REFERENCE_TIME
tStop
,
double
dRate
);
/**********************************/
/*** MemInputPin Implementation ***/
HRESULT
WINAPI
MemInputPin_QueryInterface
(
IMemInputPin
*
iface
,
REFIID
riid
,
LPVOID
*
ppv
);
ULONG
WINAPI
MemInputPin_AddRef
(
IMemInputPin
*
iface
);
ULONG
WINAPI
MemInputPin_Release
(
IMemInputPin
*
iface
);
HRESULT
WINAPI
MemInputPin_GetAllocator
(
IMemInputPin
*
iface
,
IMemAllocator
**
ppAllocator
);
HRESULT
WINAPI
MemInputPin_NotifyAllocator
(
IMemInputPin
*
iface
,
IMemAllocator
*
pAllocator
,
BOOL
bReadOnly
);
HRESULT
WINAPI
MemInputPin_GetAllocatorRequirements
(
IMemInputPin
*
iface
,
ALLOCATOR_PROPERTIES
*
pProps
);
HRESULT
WINAPI
MemInputPin_Receive
(
IMemInputPin
*
iface
,
IMediaSample
*
pSample
);
HRESULT
WINAPI
MemInputPin_ReceiveMultiple
(
IMemInputPin
*
iface
,
IMediaSample
**
pSamples
,
long
nSamples
,
long
*
nSamplesProcessed
);
HRESULT
WINAPI
MemInputPin_ReceiveCanBlock
(
IMemInputPin
*
iface
);
/* Pull Pin */
HRESULT
WINAPI
PullPin_ReceiveConnection
(
IPin
*
iface
,
IPin
*
pReceivePin
,
const
AM_MEDIA_TYPE
*
pmt
);
HRESULT
WINAPI
PullPin_Disconnect
(
IPin
*
iface
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment