/*****************************************************************************
* filter.h : DirectShow access module for vlc
*****************************************************************************
- * Copyright (C) 2002 VideoLAN
- * $Id: filter.h,v 1.3 2003/10/18 20:09:23 gbazin Exp $
+ * Copyright (C) 2002-2004, 2008 the VideoLAN team
+ * $Id$
*
- * Author: Gildas Bazin <gbazin@netcourrier.com>
+ * Author: Gildas Bazin <gbazin@videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
# include <unknwn.h>
# include <ole2.h>
# include <limits.h>
+# ifdef _WINGDI_
+# undef _WINGDI_
+# endif
# define _WINGDI_ 1
# define AM_NOVTABLE
# define _OBJBASE_H_
# undef _X86_
-# define _I64_MAX LONG_LONG_MAX
+# ifndef _I64_MAX
+# define _I64_MAX LONG_LONG_MAX
+# endif
# define LONGLONG long long
#endif
#include <dshow.h>
extern const GUID MEDIASUBTYPE_I420;
+extern const GUID MEDIASUBTYPE_PREVIEW_VIDEO;
typedef struct VLCMediaSample
{
HRESULT WINAPI CopyMediaType( AM_MEDIA_TYPE *pmtTarget,
const AM_MEDIA_TYPE *pmtSource );
+int GetFourCCFromMediaType(const AM_MEDIA_TYPE &media_type);
+
/****************************************************************************
* Declaration of our dummy directshow filter pin class
****************************************************************************/
class CapturePin: public IPin, public IMemInputPin
{
- input_thread_t *p_input;
+ friend class CaptureEnumMediaTypes;
+
+ vlc_object_t *p_input;
+ access_sys_t *p_sys;
CaptureFilter *p_filter;
IPin *p_connected_pin;
- AM_MEDIA_TYPE media_type;
+
+ AM_MEDIA_TYPE *media_types;
+ size_t media_type_count;
+
+ AM_MEDIA_TYPE cx_media_type;
deque<VLCMediaSample> samples_queue;
long i_ref;
public:
- CapturePin( input_thread_t * _p_input, CaptureFilter *_p_filter,
- AM_MEDIA_TYPE mt );
+ CapturePin( vlc_object_t *_p_input, access_sys_t *p_sys,
+ CaptureFilter *_p_filter,
+ AM_MEDIA_TYPE *mt, size_t mt_count );
virtual ~CapturePin();
/* IUnknown methods */
/* Custom methods */
HRESULT CustomGetSample( VLCMediaSample * );
- AM_MEDIA_TYPE CustomGetMediaType();
+ HRESULT CustomGetSamples( deque<VLCMediaSample> &external_queue );
+
+ AM_MEDIA_TYPE &CustomGetMediaType();
};
/****************************************************************************
****************************************************************************/
class CaptureFilter : public IBaseFilter
{
- input_thread_t *p_input;
+ friend class CapturePin;
+
+ vlc_object_t *p_input;
CapturePin *p_pin;
IFilterGraph *p_graph;
- AM_MEDIA_TYPE media_type;
+ //AM_MEDIA_TYPE media_type;
+ FILTER_STATE state;
long i_ref;
public:
- CaptureFilter( input_thread_t * _p_input, AM_MEDIA_TYPE mt );
+ CaptureFilter( vlc_object_t *_p_input, access_sys_t *p_sys,
+ AM_MEDIA_TYPE *mt, size_t mt_count );
virtual ~CaptureFilter();
/* IUnknown methods */
****************************************************************************/
class CaptureEnumPins : public IEnumPins
{
- input_thread_t * p_input;
+ vlc_object_t *p_input;
CaptureFilter *p_filter;
int i_position;
long i_ref;
public:
- CaptureEnumPins( input_thread_t * _p_input, CaptureFilter *_p_filter,
+ CaptureEnumPins( vlc_object_t *_p_input, CaptureFilter *_p_filter,
CaptureEnumPins *pEnumPins );
virtual ~CaptureEnumPins();
****************************************************************************/
class CaptureEnumMediaTypes : public IEnumMediaTypes
{
- input_thread_t * p_input;
+ vlc_object_t *p_input;
CapturePin *p_pin;
+ AM_MEDIA_TYPE cx_media_type;
- int i_position;
+ size_t i_position;
long i_ref;
public:
- CaptureEnumMediaTypes( input_thread_t * _p_input, CapturePin *_p_pin,
+ CaptureEnumMediaTypes( vlc_object_t *_p_input, CapturePin *_p_pin,
CaptureEnumMediaTypes *pEnumMediaTypes );
virtual ~CaptureEnumMediaTypes();