FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavdevice
dshow_enummediatypes.c
Go to the documentation of this file.
1
/*
2
* DirectShow capture interface
3
* Copyright (c) 2010 Ramiro Polla
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
dshow_capture.h
"
23
24
DECLARE_QUERYINTERFACE
(
libAVEnumMediaTypes
,
25
{ {&IID_IUnknown,0}, {&IID_IEnumPins,0} })
26
DECLARE_ADDREF
(
libAVEnumMediaTypes
)
27
DECLARE_RELEASE
(
libAVEnumMediaTypes
)
28
29
long
WINAPI
30
libAVEnumMediaTypes_Next
(
libAVEnumMediaTypes
*this,
unsigned
long
n,
31
AM_MEDIA_TYPE **types,
unsigned
long
*fetched)
32
{
33
int
count = 0;
34
dshowdebug
(
"libAVEnumMediaTypes_Next(%p)\n"
,
this
);
35
if
(!types)
36
return
E_POINTER;
37
if
(!this->pos && n == 1) {
38
if
(!IsEqualGUID(&this->type.majortype, &GUID_NULL)) {
39
AM_MEDIA_TYPE *type =
av_malloc
(
sizeof
(AM_MEDIA_TYPE));
40
ff_copy_dshow_media_type
(type, &this->type);
41
*types = type;
42
count = 1;
43
}
44
this->pos = 1;
45
}
46
if
(fetched)
47
*fetched = count;
48
if
(!count)
49
return
S_FALSE;
50
return
S_OK;
51
}
52
long
WINAPI
53
libAVEnumMediaTypes_Skip
(
libAVEnumMediaTypes
*
this
,
unsigned
long
n)
54
{
55
dshowdebug
(
"libAVEnumMediaTypes_Skip(%p)\n"
,
this
);
56
if
(n)
/* Any skip will always fall outside of the only valid type. */
57
return
S_FALSE;
58
return
S_OK;
59
}
60
long
WINAPI
61
libAVEnumMediaTypes_Reset
(
libAVEnumMediaTypes
*
this
)
62
{
63
dshowdebug
(
"libAVEnumMediaTypes_Reset(%p)\n"
,
this
);
64
this->pos = 0;
65
return
S_OK;
66
}
67
long
WINAPI
68
libAVEnumMediaTypes_Clone
(
libAVEnumMediaTypes
*
this
,
libAVEnumMediaTypes
**enums)
69
{
70
libAVEnumMediaTypes
*
new
;
71
dshowdebug
(
"libAVEnumMediaTypes_Clone(%p)\n"
,
this
);
72
if
(!enums)
73
return
E_POINTER;
74
new
=
libAVEnumMediaTypes_Create
(&this->type);
75
if
(!
new
)
76
return
E_OUTOFMEMORY;
77
new
->pos = this->pos;
78
*enums =
new
;
79
return
S_OK;
80
}
81
82
static
int
83
libAVEnumMediaTypes_Setup
(
libAVEnumMediaTypes
*
this
,
const
AM_MEDIA_TYPE *type)
84
{
85
IEnumPinsVtbl *vtbl = this->vtbl;
86
SETVTBL
(vtbl,
libAVEnumMediaTypes
, QueryInterface);
87
SETVTBL
(vtbl,
libAVEnumMediaTypes
, AddRef);
88
SETVTBL
(vtbl,
libAVEnumMediaTypes
, Release);
89
SETVTBL
(vtbl,
libAVEnumMediaTypes
, Next);
90
SETVTBL
(vtbl,
libAVEnumMediaTypes
, Skip);
91
SETVTBL
(vtbl,
libAVEnumMediaTypes
, Reset);
92
SETVTBL
(vtbl,
libAVEnumMediaTypes
, Clone);
93
94
if
(!type) {
95
this->type.majortype = GUID_NULL;
96
}
else
{
97
ff_copy_dshow_media_type
(&this->type, type);
98
}
99
100
return
1;
101
}
102
DECLARE_CREATE
(
libAVEnumMediaTypes
,
libAVEnumMediaTypes_Setup
(
this
, type),
const
AM_MEDIA_TYPE *type)
103
DECLARE_DESTROY
(
libAVEnumMediaTypes
,
nothing
)
Generated on Sat May 25 2013 03:58:43 for FFmpeg by
1.8.2