`
`here as well.
`
`Page 5of14
`
`This function member should be called from any override of the CBaseinoutPin:: Receive or
`CBasePin: :EndOfStream member function (or they should do some equivalent check).
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+QH"·h' 111.q9 Topic Contents 1@1§111¥+
`
`+Qij[.jlj,M 111.11119 Topic Contents 1@1§111¥+
`
`CBaselnputPin::Disconnect
`
`CBaseinputPin Class
`
`Releases the stored allocator.
`
`HRESULT Disconnect( );
`
`Return Values
`
`Returns an HRESULT value.
`
`Remarks
`
`This member function overrides the CBasePin:: Disconnect member function. It calls
`CBasePin::Disconnect first, and then releases the allocator held by m pAllocator.
`
`© 1997 Microsoft Corporation . All rights reserved . Terms of Use.
`
`+ QIM [.] 11,1 Mii.HM Topic Contents •@!§' 1gn+
`
`CBaselnputPin::EndFlush
`
`CBaseinputPin Class
`
`Informs the pin to end a flush operation and notifies the pin that it can start accepting data
`again.
`
`HRESULT EndFlush(void);
`
`Return Values
`
`1221
`
`
`
`CBaseinputPin Class
`
`Page 6of14
`
`Returns an HRESULT value.
`
`Remarks
`
`This member function implements the I Pin:: End Flush method. When this method is called, the
`pin is beginning to end a flush operation. Your derived class must override this member
`function, but should call this member function at the end of your implementation to clear
`m bf lushing so that IMemlnputPin:: Receive calls will succeed.
`
`Before calling this base class implementation, your overriding member function should perform
`the following steps.
`
`1. Ensure that your filter will not push any additional data. (To do this, synchronize with a
`thread, stop it pushing, and discard any queued data.)
`2. Pass the Endflush method downstream by calling the method on the downstream filter's
`input pin.
`
`I Pin:: End Flush is not logically part of the media stream. It can be optimized in the sense that if
`a pin has passed no data downstream before this method is called, there is no need to pass
`this notification on.
`
`An example of an overriding implementation of this member function can be found in the
`CTransformlnputPin: :Endflush member function, which uses the
`CBaseOutputPin:: DeliverEndFlush member function to perform the last step.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Qi§1[.]1!,+ '!!·HM Topic Contents
`
`i@l§ii!MM
`
`CBaselnputPin::GetAllocator
`
`CBaselnputPin Class
`
`Retrieves the allocator interface that this input pin identifies as the interface for the output pin
`to use.
`
`HRESULT GetAllocator(
`IM em Allocator * * ppAl/ocator
`);
`
`Parameters
`
`ppA//ocator
`Pointer to an obtained IMemAllocator object.
`
`Return Values
`
`1222
`
`
`
`CBaseinputPin Class
`
`Page 7of14
`
`Default implementation returns either E_OUTOFMEMORY, if an allocator cannot be created, or
`NOERROR upon success.
`
`Remarks
`
`This member function implements the IMemlnputPin: :GetAllocator method, which is called by
`the connected output pin to retrieve an allocator to use for transporting media samples. By
`default, this member function creates a CMemAllocator object and obtains the IMemAllocator
`interface, to which it adds a reference count for the pin when assigning it to the m pAllocator
`data member, and adds another reference count before passing it back to the output pin.
`
`Override this member function if your filter has another allocator, such as one from a
`downstream pin, or a specialized allocator to offer the connected output pin.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Q'41[.]1!,+ 1 !1·HM Topic Contents
`
`ifflj[§ii!¥M
`
`CBaselnputPin::GetAllocatorRequirements
`
`CBaselnputPin Class
`
`Optional member function to use if the filter has specific alignment or prefix requirements but
`could use an upstream allocator.
`
`HRESULT GetAllocatorRequirements(
`ALLOCATOR_PROPERTIES * pProps
`);
`
`Parameters
`
`pProps
`ALLOCATOR PROPERTIES structure containing the required size, count, and alignment of
`the allocator.
`
`Return Values
`
`Returns an HRESULT value. Returns E_NOTIMPL by default.
`
`Remarks
`
`Override this member function if you have specific alignment or prefix requirements but could
`use an upstream allocator.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Q'41[.]1!,+ 1 !1·HM Topic Contents
`
`ifflj[§ii!¥M
`
`1223
`
`
`
`CBaseinputPin Class
`
`Page 8of14
`
`CBaselnputPin::lnactive
`
`CBaseinoutPin Class
`
`Releases the allocator's memory.
`
`HRESULT Inactive(void);
`
`Return Values
`
`Returns an HRESULT value.
`
`Remarks
`
`This member function is called through IMediaFilter, which is responsible for locking the object
`first.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Qi§i[.]ii,+ '!!·HM Topic Contents
`
`i@l§ii!MM
`
`CBaselnputPin::lsFlushing
`
`CBaseinputPin Class
`
`Checks the m bFlushing data member and returns its value.
`
`BOOL Isflushing(void);
`
`Return Values
`
`Returns TRUE if the input pin is flushing data; otherwise, returns FALSE.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`H Qi§1 [.] jj,M I !l.H9 Topic Contents Mttfjl§ii!MM
`
`CBaselnputPin::lsReadOnly
`
`1224
`
`
`
`CBaseinputPin Class
`
`Page 9of14
`
`CBaseinoutPin Class
`
`Checks the m bReadOnly data member and returns its value.
`
`BOOL IsReadOnly(void);
`
`Return Values
`
`Returns TRUE if the allocator has read-only samples; otherwise, returns FALSE.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQl@[.jjj,M l!i.! 11ij Topic Contents
`
`l@i§lllMM
`
`CBaselnputPin::NonDelegatingQuerylnterface
`
`CBaseinputPin Class
`
`Retrieves an interface and increments the reference count.
`
`H RESULT Non Delegati ngQuerylnterface(
`REFllD riid,
`void** ppv
`);
`
`Parameters
`
`riid
`
`ppv
`
`Reference identifier.
`
`Pointer to the interface.
`
`Return Values
`
`Returns E_ POINTER if ppv is invalid. Returns NOERROR if the query is successful or
`E_NOINTERFACE if it is not.
`
`Remarks
`
`This member function implements the INonDeleqatinqUnknown: :NonDeleqatinqOueryinterface
`method and passes out references to the IMeminputPin and IUnknown interfaces. Override this
`class to return other interfaces on the object in the derived class.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQl@[.jjj,M l!i.l:.ij Topic Contents
`
`l@i§lllMM
`
`1225
`
`
`
`CBaseinputPin Class
`
`Page 10of14
`
`CBaselnputPin::Notify
`
`CBaseinoutPin Class
`
`Notifies the recipient that a quality change is requested.
`
`HRESULT Notify(
`IBaseFilter * pSelf,
`Quality q
`);
`
`Parameters
`
`pSelf
`Pointer to the filter that is sending the quality notification.
`
`q
`
`Quality notification structure.
`
`Return Values
`
`Returns NOERROR by default.
`
`Remarks
`
`The IQualityControl: :Notify method is usually implemented on the output pin, because quality(cid:173)
`control messages are passed upstream, and not on the input pin.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`MQ<§i[.jjj,M MB.HS Topic Contents
`
`i@faii!MM
`
`CBasel n putPi n:: Notify Al locator
`
`CBaseinoutPin Class
`
`Notifies the input pin as to which allocator the output pin is actually going to use.
`
`HRESULT NotifyAllocator(
`IMemAllocator * pAl/ocator,
`BOOL bReadOnly
`);
`
`Parameters
`
`1226
`
`
`
`CBaseinputPin Class
`
`Page 11of14
`
`pAl/ocator
`Pointer to the IMemAllocator object to use. This might or might not be the same
`IMemAllocator object that the input pin provided in the IMeminputPin: :GetAllocator
`method (the output pin could provide its own allocator).
`bReadOnly
`Flag to indicate if the samples from this allocator are read-only.
`
`Return Values
`
`Default implementation returns NOERROR.
`
`Remarks
`
`This member function implements the IMeminputPin:: NotifyAllocator method, which is called
`by the connected output pin to inform the input pin of the chosen allocator for the memory
`transport. Override this member function if your filter cares about this information. By default,
`this sets the m pAllocator data member to the allocator interface passed in after adding a
`reference count to that interface.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQl@[.jlj,M l!i.! 11ij
`
`Topic Contents
`
`l@i§lllMM
`
`CBaselnputPin::PassNotify
`
`CBaseinputPin Class
`
`Passes a quality-control notification to the appropriate sink.
`
`HRESULT PassNotify(
`Quality q
`);
`
`Parameters
`
`q
`
`Quality-control notification object.
`
`Return Values
`
`Returns VFW_E_NOT _FOUND if no quality sink is set and the upstream filter does not support
`the IQualityControl interface. Otherwise, returns the HRESULT value resulting from notifying
`the sink or the upstream filter.
`
`Remarks
`
`Output pins receive quality-control notifications and, if possible, filters act on them to degrade
`
`1227
`
`
`
`CBaseinputPin Class
`
`Page 12of14
`
`appropriately. Often, filters cannot respond to the notifications; in this case the notification
`should be passed to the quality-control sink or, by default, upstream to the next filter. The
`PassNotify member function is called from the CTransformOutputPin: :Notify member function
`when a notification requires passing. The Quality structure passed is the one that the output
`pin received.
`
`© 1997 Microsoft Corporation . All rights reserved . Terms of Use .
`
`MQ<§i[.jjj,M 111.],.(9
`
`Topic Contents
`
`lmll§lllMM
`
`CBaselnputPin::Receive
`
`CBaseinputPin Class
`
`Retrieves the next block of data from the stream.
`
`HRESULT Receive(
`IMediaSample * pSample
`);
`
`Parameters
`
`pSample
`Pointer to a media sample.
`
`Return Values
`
`Returns an HRESULT value.
`
`Remarks
`
`This member function implements the IMeminputPin:: Receive method. It first checks that it
`can process the sample by calling CBaseinputPin: :CheckStreaming; if that member function
`does not return S_OK, Receive returns immediately with the value returned by
`CBaseinputPin: :CheckStreaming.
`
`This base class member function checks to see if the format has changed with this media
`sample; if so, it checks that the filter will accept it, generating a run-time error if not. If a run(cid:173)
`time error is raised, the m bRunTimeError data member is set so that no more samples will be
`accepted.
`
`The overriding member function does something with the passed-in sample, such as calling a
`member function to transform it or pass it downstream.
`
`This is a blocking synchronous call. Typically no blocking occurs, but if a filter cannot process
`the sample immediately, it can use the calling application's thread to wait until it can.
`
`Call the IUnknown: :AddRef method if you must hold the returned data block beyond the
`
`1228
`
`
`
`CBaseinputPin Class
`
`Page 13of14
`
`completion of the IMeminputPin:: Receive method. If you call Add Ref, be sure to call
`!Unknown:: Release when done with it.
`
`© 1997 Microsoft Corporation . All rights reserved . Terms of Use.
`
`w QiM [.] +• 811.HM Topic Contents 8ml!§M 8gnw
`
`CBaselnputPin::ReceiveCanBlock
`
`CBaseinputPin Class
`
`Determines if the implementation of the IMeminputPin:: Receive method might block on the
`connected output pin.
`
`HRESULT ReceiveCanBlock(void);
`
`Return Values
`
`Returns an HRESULT value, which can include one of the following values.
`Value Meaning
`S_FALSE Input pin will not block on a Receive method.
`S_OK
`Input pin might block on a Receive method.
`
`Remarks
`
`This member function implements the IMeminputPin:: ReceiveCanBlock method. The base class
`implementation calls the IMemlnputPin::ReceiveCanBlock method on the input pin
`connected to each of the filter's output pins.
`
`This member function is useful because an output pin from a filter might require notification if
`its thread might be blocked when it calls the Receive method on the connected input pin. For
`example, a source filter might prefer to keep reading and buffering data rather than be
`blocked, and might choose to start another thread to wait on the blocking Receive method.
`See the COutputQueue base class for queuing samples to input pins that potentially block.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQl@[.jlj,M 8!1.l:.15 Topic Contents 8@1§181MM
`
`CBasel n putPi n:: ReceiveM u lti pie
`
`CBaseinputPin Class
`
`1229
`
`
`
`CBaselnputPin Class
`
`Page 14of14
`
`Retrieves the next block of data from the stream. This method behaves much like the
`IMeminputPin:: Receive method, but it works with multiple samples. Override this function if
`you can usefully process samples in batches.
`
`HRESULT ReceiveMultiple(
`IMediaSample ** pSamples,
`long nSamples,
`long * nSamplesProcessed
`);
`
`Parameters
`
`pSamples
`Pointer to an array of samples.
`nSamples
`Number of samples to process.
`nSamplesProcessed
`Number of samples processed.
`
`Return Values
`
`Returns an HRESULT value.
`
`Remarks
`
`This member function implements the IMeminputPin:: ReceiveMultiple method. It is
`implemented to call the CBaseinputPin:: Receive member function in a loop for nSamples
`number of iterations.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQi@[.jlj,M M!i.!111j Topic Contents
`
`l@i§il!MM
`
`1230
`
`
`
`CBaseList Class
`
`Page I of 17
`
`w41411.111e 1:1.11119 Topic Contents 1 @1#1 1 ttti8
`
`CBaseList Class
`
`CBaseObject
`
`CBaselist
`
`The (;Ba$d.ist class represents a liSt of pointers to objects. No storage management or
`copying is done on the objects that are pointed to.
`
`The implementation allows for objects to be on multiple lists simultaneously and does not
`require support in the objects themselves; therefore, it iS particularly useful for holding
`variable-length lists of interface pointers.
`
`The implementation is not multithread safe. External locks are required to maintain the
`integrity of the list when it is accessed from more than one thread simultaneously.
`
`The POSITION structure represents a position in a linked list that is actually a void pointer. A
`position represents a cursor on the liSt that can be set to identify any element. NULL is a valid
`value, and several operations regard NULL as the position that is "one step off the end of the
`list." (In an n element liSt there are n+ 1 places to insert, and NULL iS that n+ 1 value.) The
`position of an element in the list is only invalidated if that element is deleted. Move operations
`might indicate that what was a valid position in one list is now a valid position in a different
`list.
`
`Some operations, which at first sight seem illegal, are allowed as harmless null operations (no(cid:173)
`ops). For example, the CBase! ist· ·RemoYf'Headl member function is legal on an empty list,
`and it returns NULL. This allows an atomic way to test if there is an element there and, if so, to
`retrieve it.
`
`Single-element operations return positions, where a non-NULL value indicates that it worked.
`Entire list operations return a Boolean value, where TRUE indicates success.
`
`Pratected Data Members
`Name
`Descnptian
`m_C<lunt Number of nodes in the list.
`m_pFirst Pointer to the first node in the list.
`m_plast Pointer to the last node in the list.
`
`Member Functians
`
`1231
`
`
`
`CBaseList Class
`
`Page 2of17
`
`Description
`Name
`Inserts a list of nodes after the specified node.
`AddAfter
`Inserts a node after the specified node.
`AddAfterl
`Inserts a list of nodes before the specified node.
`Add Before
`Inserts a node before the specified node.
`AddBeforel
`Inserts a list of nodes at the front of the list.
`AddHead
`Inserts a node at the front of the list.
`Add Head I
`AddTail
`Appends a list of nodes to the end of the list.
`AddTaill
`Appends a node to the end of the list.
`CBaselist
`Constructs a CBaselist object.
`Find I
`Returns the first position that holds the specified object.
`Returns the number of objects in the list.
`GetCountl
`GetHeadPositionl Returns a cursor identifying the first element of the list.
`Getl
`Returns the object at the specified position.
`Returns the specified object and updates the position.
`GetNextl
`GetTailPositionl Returns a cursor identifying the last element of the list.
`Moves the node or list of nodes to the beginning of a second list.
`Move To Head
`MoveToTail
`Moves the node or list of nodes to the end of a second list.
`Next
`Returns the next position in the list.
`Prev
`Returns the previous position in the list.
`RemoveAll
`Removes all nodes from the list.
`RemoveHeadl
`Removes the first node in the list.
`Remove I
`Removes the specified node from the list.
`Remove Ta ill
`Removes the last node in the list.
`Reverse
`Reverses the order of the pointers to the objects in the list.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`MQ<§i[.jjj,M MB.HS Topic Contents
`
`i@fa111¥M
`
`8 4'41[.]1!,M 1!1·H¥
`
`Topic Contents
`
`i@fai11¥M
`
`CBaselist: :AddAfter
`
`CBaseList Class
`
`Inserts a list of nodes after the specified node.
`
`BOOL AddAfter(
`POSITION pos,
`CBaselist *pList
`);
`
`1232
`
`
`
`Page 3of17
`
`CBaseList Class
`
`Parameters
`
`pos
`
`pList
`
`Position after which to add the list of nodes.
`
`Pointer to the list of objects to add.
`
`Return Values
`
`Returns TRUE if successful; otherwise, returns FALSE.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+;<§1[.]lj,i '!!·!:.!¥ Topic Contents i@i§ll!¥+
`
`CBaselist: :AddAfterl
`
`CBaseList Class
`
`Inserts a node after the specified node.
`
`POSITION AddAfterI(
`POSITION pos,
`void* pObj
`);
`
`Parameters
`
`pos
`
`pObj
`
`Position after which to add the node.
`
`Pointer to the object to add.
`
`Return Values
`
`Returns the position of the inserted object.
`
`Remarks
`
`The following member function adds x to the start, which is equivalent to calling the
`CBaseList: :AddHeadI member function:
`
`AddAfterI (NULL,x)
`
`If the list insertion fails, some of the elements might have been added. Existing positions in
`the list, including the position specified in the pos parameter, remain valid. The following two
`member functions are equivalent even in cases where pos is NULL or the Next(p) parameter is
`
`1233
`
`
`
`CBaseList Class
`
`Page 4of17
`
`NULL. (This is similar for the mirror case.)
`
`AddAfterI (p,x)
`AddBeforeI(Next(p) ,x )
`
`© 1997 Microsoft Corporation . All rights reserved. Terms of Use.
`
`w Q<M [.] +• 111.HM
`MQi§i[.]11,M 11!.HM
`
`Topic Contents •=@• 1gnw
`
`Topic Contents
`
`l@l§il!MM
`
`CBaselist: :Add Before
`
`CBaseList Class
`
`Inserts a list of nodes before the specified node.
`
`BOOL AddBefore(
`POSITION pos,
`CBaselist *pList
`);
`
`Parameters
`
`pos
`
`pList
`
`Position before which to add the list of nodes.
`
`Pointer to the list of objects to add.
`
`Return Values
`
`Returns TRUE if successful; otherwise, returns FALSE.
`
`Remarks
`
`If the list insertion fails, some of the elements might have been added. Existing positions in
`the list, including the position specified in the pos parameter, remain valid.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`M Q i§i [.] jj,M I !!·HM Topic Contents
`
`l@l§il!MM
`
`CBaselist: :AddBeforel
`
`1234
`
`
`
`CBaseList Class
`
`Page 5of17
`
`CBaseList Class
`
`Inserts a node before the specified node.
`
`POSITION AddBeforeI(
`POSITION pos,
`void* pObj
`);
`
`Parameters
`
`pos
`
`pObj
`
`Position before which to add the node or list of nodes.
`
`Pointer to the object to add.
`
`Return Values
`
`Returns the position of the inserted object.
`
`Remarks
`
`The following member function adds the value specified in the x parameter to the end, which is
`equivalent to calling the CBaseList::AddTailI member function:
`
`AddBeforeI(NULL,x)
`
`The following two member functions are equivalent even in cases where pos is NULL or the
`Next(p) parameter is NULL. (This is similar for the mirror case.)
`
`AddAfterI(p,x)
`AddBeforeI(Next(p) ,x)
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`MQ<§i[.jjj,M MB.HS
`
`Topic Contents
`
`i@fa111¥M
`
`8 4'41[.]1!,M 1!1·H¥
`
`Topic Contents
`
`i@fa111¥M
`
`CBaselist: :Add Head
`
`CBaseList Class
`
`Inserts a list of nodes at the front of the list.
`
`BOOL Add Head (
`
`1235
`
`
`
`Page 6of17
`
`CBaseList Class
`
`CBaselist *pList
`);
`
`Parameters
`
`pList
`
`Pointer to the list of objects to add.
`
`Return Values
`
`No return value.
`
`Remarks
`
`If you are adding Component Object Model (COM) objects, you might want to add references to
`them (using the I Unknown: :AddRef method) first. Other existing positions in the list remain
`valid.
`
`This member function duplicates all the nodes in the pList parameter (that is, duplicates all its
`pointers to objects). It does not duplicate the objects.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+QH"·h' 111.q9 Topic Contents 1@1§111¥+
`
`CBaselist: :AddHeadl
`
`CBaseList Class
`
`Inserts a node at the front of the list.
`
`POSITION AddHeadI(
`void* pObj
`);
`
`Parameters
`
`pObj
`
`Pointer to the object to add.
`
`Return Values
`
`Returns the new head position, or NULL if it fails. For list insertions, returns TRUE if successful;
`otherwise, returns FALSE.
`
`Remarks
`
`If you are adding Component Object Model (COM) objects, you might want to add references to
`
`1236
`
`
`
`CBaseList Class
`
`Page 7of17
`
`them (using the IUnknown: :AddRef method) first. Other existing positions in the list remain
`valid.
`
`© 1997 Microsoft Corporation . All rights reserved. Terms of Use.
`
`w Q<M [.] +• 111.H5
`
`Topic Contents •=@• 1gnw
`
`CBaselist: :AddTai I
`
`CBaseList Class
`
`Appends a list of nodes to the end of the list.
`
`BOOL AddTail(
`CBaselist *pList
`);
`
`Parameters
`
`pList
`
`Pointer to the list of objects to add.
`
`Return Values
`
`No return value.
`
`Remarks
`
`This member function duplicates all the nodes in pList (that is, duplicates all its pointers to
`objects). It does not duplicate the objects. Existing positions in the list remain valid.
`
`© 1997 Microsoft Corporation . All rights reserved. Terms of Use.
`
`• A Mi[.]"'' I !!·HM
`
`Topic Contents
`
`lml!§lllMM
`
`CBaselist: :AddTai II
`
`CBaseList Class
`
`Appends a single node to the end of the list.
`
`POSITION AddTailI(
`void* pObj
`
`1237
`
`
`
`CBaseList Class
`
`);
`
`Parameters
`
`pObj
`
`Page 8of17
`
`Pointer to the object to add.
`
`Return Values
`
`Returns the new tail position, if successful; otherwise, returns NULL.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Q'41[.]i!,+ 1 !1·HM
`
`Topic Contents
`
`ifflj[§ii!¥M
`
`CBaselist: :CBaselist
`
`CBaseList Class
`
`Constructs a CBaseList object.
`
`CBaselist(
`TCHAR *pName,
`INT iltems
`);
`
`CBaselist(
`TCHAR *pName
`);
`
`Parameters
`
`pName
`Name of the list.
`iltems
`Number of items in the list.
`
`Return Values
`
`No return value.
`
`© 1997 Microsoft Corporation . All rights reserved . Terms of Use.
`
`+;<§1[.]i!,+ +II.HM
`
`Topic Contents
`
`+@!§' +gn+
`
`1238
`
`
`
`CBaseList Class
`
`Page 9of17
`
`CBaselist: :FindI
`
`CBaselist Class
`
`Retrieves the first position that holds the specified object.
`
`POSITION FindI(
`void* pObj
`);
`
`Parameters
`
`pObj
`
`Pointer to the object to find.
`
`Return Values
`
`Returns a position cursor.
`
`Remarks
`
`A position cursor identifies an element on the list. Use the CBaselist: :GetI member function to
`return the object at this position.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQiji.li!:M l!i.! 11ij Topic Contents
`
`l@l§i 11111+
`
`CBaselist: :GetCountI
`
`CBaselist Class
`
`Retrieves the number of objects (object count) in the list.
`
`int GetCountI( ) ;
`
`Return Values
`
`Returns the number of objects in the list.
`
`© 1997 Microsoft Comoration. All rights reserved. Terms of Use.
`
`MQl§1[.jjj,M 11!.Hj Topic Contents 1@1§11!¥+
`
`1239
`
`
`
`CBaseList Class
`
`Page 10of17
`
`CBaselist: :GetHead Position!
`
`CBaseList Class
`
`Retrieves a cursor identifying the first element of the list.
`
`POSITION GetHeadPositionI( ) ;
`
`Return Values
`
`Returns a position cursor.
`
`Remarks
`
`A position cursor represents an element on the list. It is defined as a pointer to a void.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQi@[.jlj,M l!i.! 111j
`
`Topic Contents
`
`l@IJll!MM
`
`CBaselist: :Getl
`
`CBaseList Class
`
`Retrieves the object at the specified position.
`
`void *GetI(
`POSITION pos
`);
`
`Parameters
`
`pos
`
`Position in the list from which to retrieve the object.
`
`Return Values
`
`Returns a pointer to the object as position pos.
`
`Remarks
`
`Use the CBaseList:: Next, CBaseList:: Prev, or CBaseList:: FindI member function to obtain the
`position. Asking for the object at a NULL position returns NULL without generating an error.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`1240
`
`
`
`CBaseList Class
`
`Page 11of17
`
`+Qi§1[.]++ 1 !!·HM
`
`Topic Contents
`
`i@l§ii!MM
`
`CBaselist: :GetNextI
`
`CBaseList Class
`
`Retrieves the specified object and updates the position.
`
`void *GetNextI(
`POSITION& rp
`);
`
`Parameters
`
`rp
`
`Returned pointer to the next object.
`
`Return Values
`
`Returns a pointer to an object at the next position.
`
`Remarks
`
`This member function updates the rp parameter to the next node in the list, but makes it NULL
`if it was at the end of the list.
`
`This member function is retained only for backward compatibility. (GetPrev is not
`implemented.)
`
`Use the CBaseList:: Next and CBaseList:: Prev member functions to access the next or previous
`object in the list.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Qi@[.jjj,+ 111.11119 Topic Contents
`
`i@l§ii!MM
`
`CBaselist: :GetTa i I Position I
`
`CBaseList Class
`
`Retrieves a cursor identifying the last element of the list.
`
`1241
`
`
`
`CBaseList Class
`
`Page 12of17
`
`POSITION GetTailPositionI( );
`
`Return Values
`
`Returns a position cursor.
`
`Remarks
`
`A position cursor represents an element on the list. A position is defined as a pointer to a void.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQl@[.jjj,M 111.l:.!j
`
`Topic Contents
`
`l@i§i llfttiM
`
`CBaselist:: MoveToHead
`
`CBaselist Class
`
`Moves the node or list of nodes to the beginning of a second list.
`
`BOOL MoveToHead(
`POSITION pos,
`CBaselist *pList
`);
`
`Parameters
`
`pos
`
`pList
`
`Position that marks the split in the list.
`
`List in which to add the section of the list preceding the position passed in the pos
`parameter.
`
`Return Values
`
`Returns TRUE if successful; otherwise, returns FALSE.
`
`Remarks
`
`This member function splits the current list after the position specified in the pos parameter in
`the list and retains the head portion of the original list. It then adds the tail portion to the head
`of the second list, identified by the pList parameter.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQi@[.jjj,M l!i.! 111j Topic Contents
`
`l@i§il!MM
`
`1242
`
`
`
`CBaseList Class
`
`Page 13of17
`
`CBaselist: :MoveToTail
`
`CBaseList Class
`
`Moves the node or list of nodes to the end of a second list.
`
`BOOL MoveToTail(
`POSITION pos,
`CBaselist *pList
`);
`
`Parameters
`
`pos
`
`pList
`
`Position that marks the split in the list.
`
`List in which to add the section of the list specified in the pos parameter.
`
`Return Values
`
`Returns TRUE if successful; otherwise, returns FALSE.
`
`Remarks
`
`This member function splits the current list after the position specified in the pos parameter in
`the list and retains the tail portion of the original list. It then adds the head portion to the tail
`end of the second list, using the pList parameter.
`
`© 1997 Microsoft Corporation . All rights reserved. Terms of Use.
`
`MQi§i[.jjj,M 11!.HS
`
`Topic Contents
`
`lmll§I 11$8
`
`CBaselist::Next
`
`CBaseList Class
`
`Retrieves the next position in the list.
`
`POSITION Next(
`POSITION pos
`);
`
`Parameters
`
`1243
`
`
`
`CBaseList Class
`
`Page 14of17
`
`pos
`
`Current position in the list.
`
`Return Values
`
`Returns a position cursor.
`
`Remarks
`
`This member function returns NULL when going past the beginning of the list. Calling the
`CBaselist::Next member function with a null value is similar to calling the
`CBaseList: :GetHeadPositionl member function.
`
`Use the CBaseList: :Getl member function to return the object at the returned position.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`MQ<§i[.jjj,M MB.HS Topic Contents
`
`i@faii!MM
`
`CBaselist:: Prev
`
`CBaseList Class
`
`Retrieves the previous position in the list.
`
`POSITION Prev(
`POSITION pos
`);
`
`Parameters
`
`pos
`
`Current position in the list.
`
`Return Values
`
`Returns a position cursor.
`
`Remarks
`
`This member function returns NULL when going past the end of the list. Calling the
`CBaselist::Prev member function with a null value is similar to calling the
`CBaseList: :GetTailPositionl member function.
`
`Use the CBaseList: :Getl member function to return the object at the returned position.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`1244
`
`
`
`CBaseList Class
`
`Page 15of17
`
`+Qi§1[.]I!:+ 1 !!·HM Topic Contents
`
`i@l§ii!MM
`
`CBaselist: :RemoveAll
`
`CBaseList Class
`
`Removes all nodes from the list.
`
`void RemoveAll( );
`
`Return Values
`
`No return value.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`H Qi§1[.]11:+ I !l.H9 Topic Contents Mttfjl§ii!MM
`
`CBaselist:: RemoveHeadI
`
`CBaseList Class
`
`Removes the first node in the list.
`
`void *RemoveHeadI( );
`
`Return Values
`
`Returns the pointer to the object that was removed.
`
`Remarks
`
`This member function deletes the pointer to its object from the list, but does not free the
`object itself.
`
`If the list was already empty, this member function harmlessly returns NULL.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`MQi@[.]l!:i M!l.11119 Topic Contents
`
`i@l§i 11111+
`
`1245
`
`
`
`CBaseList Class
`
`Page 16of17
`
`CBaselist:: Remove!
`
`CBaseList Class
`
`Removes the specified node from the list.
`
`void * RemoveI(
`POSITION pos
`);
`
`Parameters
`
`pos
`
`Position in the list of the node to remove.
`
`Return Values
`
`Returns the pointer to the object that was removed.
`
`Remarks
`
`This member function deletes the pointer to its object from the list, but does not free the
`object itself.
`
`If the list was already empty, this member function harmlessly returns NULL.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`+Q'41[.]1!,+ 1 !1·HM Topic Contents
`
`ifflj[§ii!¥M
`
`CBaselist::RemoveTaill
`
`CBaseList Class
`
`Removes the last node in the list.
`
`void *RemoveTailI( );
`
`Return Values
`
`Returns the pointer to the object that was removed.
`
`1246
`
`
`
`CBaseList Class
`
`Remarks
`
`Page 17of17
`
`This member function deletes the pointer to its object from the list, but does not free the
`object.
`
`If the list was already empty, this member function harmlessly returns NULL.
`
`© 1997 Microsoft Corooration . All rights reserved. Terms of Use.
`
`MQ<§i[.jjj,M MB.HS Topic Contents
`
`i@faii!MM
`
`CBaselist::Reverse
`
`CBaselist Class
`
`Reverses the order of the pointers to the objects in the list.
`
`void Reverse( );
`
`Return Values
`
`No return value.
`
`© 1997 Microsoft Corporation. All rights reserved. Terms of Use.
`
`1247
`
`
`
`CBaseMediaFil ter Cl ass
`
`Page 1 of9
`
`w41411.111e 1:1.11119 Topic Contents 1 @1#1 1 ttti8
`
`CBaseMediaFilter Class
`
`CBaseObject
`
`CUnknown
`
`CBaseMediafilter
`
`This iS an abstract base class that provides support for the IMediafilter interface. The
`CBaseMediaFiltet class handles State Stopped, State Paused, and State Running state
`transitions. Typically, this class is used for plug-in distributors rather than filters with pins.
`Derive your filter classes from the CBasefilter class (or base classes derived from this) instead
`of from this class.
`
`AU member functions in this class that return HRESULT and accept a pointer as a parameter
`return E .... POINTER when passed a null pointer.
`
`Protecte<I Data Members
`Name
`Description
`m_clsid Class identifier (CLSID) used for serialization using IPersist.
`m_pClock Pointer to a reference clock used for synchronization. The reference count of the
`clock object must be incremented using AddRef. Pass NULL if no reference clock is
`available.
`m_State Current state of the filter, which can be State Stopped, State Paused, or
`State Running.
`m_tStart Offset from the stream time to the reference time.
`
`Member Functions
`Name
`Description
`CBaseMedjafi!terConstructs a CBaseMediafi!ter object.
`Determines if the filter is currently active (running or paused) or stopped.
`IsActjve
`
`Overridable Member Functions
`Name
`Description
`StreamTime Returns the current stream time.
`
`Implemente<I !Persist Methods
`Name
`Description
`\..etC!assID Returns the class identifier of this filter.
`
`1248
`
`
`
`CBaseMediaFilter Class
`
`Page 2 of9
`
`Implemented IMediaFilter Methods
`Name
`Description
`GetState
`Retrieves the current state of the filter.
`GetSyncSource Retrieves the current reference clock in use by this filter.
`Pause
`Instructs the filter to transition to the new (paused) state.
`Run
`Instructs the filter to transition to the new (running) state.
`SetSyncSource Informs the filter of the refer