Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
9f72f8c2
Commit
9f72f8c2
authored
May 20, 2020
by
Zebediah Figura
Committed by
Alexandre Julliard
May 20, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
quartz: Merge enummoniker.c into filtermapper.c.
Signed-off-by:
Zebediah Figura
<
z.figura12@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
d42b5983
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
135 additions
and
212 deletions
+135
-212
Makefile.in
dlls/quartz/Makefile.in
+0
-1
enummoniker.c
dlls/quartz/enummoniker.c
+0
-208
filtermapper.c
dlls/quartz/filtermapper.c
+135
-1
quartz_private.h
dlls/quartz/quartz_private.h
+0
-2
No files found.
dlls/quartz/Makefile.in
View file @
9f72f8c2
...
...
@@ -8,7 +8,6 @@ C_SRCS = \
acmwrapper.c
\
avidec.c
\
dsoundrender.c
\
enummoniker.c
\
filesource.c
\
filtergraph.c
\
filtermapper.c
\
...
...
dlls/quartz/enummoniker.c
deleted
100644 → 0
View file @
d42b5983
/*
* IEnumMoniker implementation
*
* Copyright 2003 Robert Shearman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#define COBJMACROS
#include "quartz_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
quartz
);
typedef
struct
EnumMonikerImpl
{
IEnumMoniker
IEnumMoniker_iface
;
LONG
ref
;
IMoniker
**
ppMoniker
;
ULONG
nMonikerCount
;
ULONG
index
;
}
EnumMonikerImpl
;
static
const
IEnumMonikerVtbl
EnumMonikerImpl_Vtbl
;
static
inline
EnumMonikerImpl
*
impl_from_IEnumMoniker
(
IEnumMoniker
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
EnumMonikerImpl
,
IEnumMoniker_iface
);
}
static
ULONG
WINAPI
EnumMonikerImpl_AddRef
(
LPENUMMONIKER
iface
);
HRESULT
EnumMonikerImpl_Create
(
IMoniker
**
ppMoniker
,
ULONG
nMonikerCount
,
IEnumMoniker
**
ppEnum
)
{
/* NOTE: assumes that array of IMonikers has already been AddRef'd
* I.e. this function does not AddRef the array of incoming
* IMonikers */
EnumMonikerImpl
*
pemi
=
CoTaskMemAlloc
(
sizeof
(
EnumMonikerImpl
));
TRACE
(
"(%p, %d, %p)
\n
"
,
ppMoniker
,
nMonikerCount
,
ppEnum
);
*
ppEnum
=
NULL
;
if
(
!
pemi
)
return
E_OUTOFMEMORY
;
pemi
->
IEnumMoniker_iface
.
lpVtbl
=
&
EnumMonikerImpl_Vtbl
;
pemi
->
ref
=
1
;
pemi
->
ppMoniker
=
CoTaskMemAlloc
(
nMonikerCount
*
sizeof
(
IMoniker
*
));
memcpy
(
pemi
->
ppMoniker
,
ppMoniker
,
nMonikerCount
*
sizeof
(
IMoniker
*
));
pemi
->
nMonikerCount
=
nMonikerCount
;
pemi
->
index
=
0
;
*
ppEnum
=
&
pemi
->
IEnumMoniker_iface
;
return
S_OK
;
}
/**********************************************************************
* IEnumMoniker_QueryInterface (also IUnknown)
*/
static
HRESULT
WINAPI
EnumMonikerImpl_QueryInterface
(
LPENUMMONIKER
iface
,
REFIID
riid
,
LPVOID
*
ppvObj
)
{
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"
\n\t
IID:
\t
%s
\n
"
,
debugstr_guid
(
riid
));
if
(
This
==
NULL
||
ppvObj
==
NULL
)
return
E_POINTER
;
if
(
IsEqualGUID
(
riid
,
&
IID_IUnknown
)
||
IsEqualGUID
(
riid
,
&
IID_IEnumMoniker
))
{
*
ppvObj
=
iface
;
EnumMonikerImpl_AddRef
(
iface
);
return
S_OK
;
}
*
ppvObj
=
NULL
;
FIXME
(
"- no interface
\n\t
IID:
\t
%s
\n
"
,
debugstr_guid
(
riid
));
return
E_NOINTERFACE
;
}
/**********************************************************************
* IEnumMoniker_AddRef (also IUnknown)
*/
static
ULONG
WINAPI
EnumMonikerImpl_AddRef
(
LPENUMMONIKER
iface
)
{
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
ULONG
ref
;
if
(
This
==
NULL
)
return
E_POINTER
;
ref
=
InterlockedIncrement
(
&
This
->
ref
);
TRACE
(
"(%p)->() AddRef from %d
\n
"
,
iface
,
ref
-
1
);
return
ref
;
}
/**********************************************************************
* IEnumMoniker_Release (also IUnknown)
*/
static
ULONG
WINAPI
EnumMonikerImpl_Release
(
LPENUMMONIKER
iface
)
{
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
TRACE
(
"(%p)->() Release from %d
\n
"
,
iface
,
ref
+
1
);
if
(
!
ref
)
{
ULONG
i
;
for
(
i
=
0
;
i
<
This
->
nMonikerCount
;
i
++
)
IMoniker_Release
(
This
->
ppMoniker
[
i
]);
CoTaskMemFree
(
This
->
ppMoniker
);
This
->
ppMoniker
=
NULL
;
CoTaskMemFree
(
This
);
return
0
;
}
return
ref
;
}
static
HRESULT
WINAPI
EnumMonikerImpl_Next
(
LPENUMMONIKER
iface
,
ULONG
celt
,
IMoniker
**
rgelt
,
ULONG
*
pceltFetched
)
{
ULONG
fetched
;
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"(%p)->(%d, %p, %p)
\n
"
,
iface
,
celt
,
rgelt
,
pceltFetched
);
for
(
fetched
=
0
;
(
This
->
index
+
fetched
<
This
->
nMonikerCount
)
&&
(
fetched
<
celt
);
fetched
++
)
{
rgelt
[
fetched
]
=
This
->
ppMoniker
[
This
->
index
+
fetched
];
IMoniker_AddRef
(
rgelt
[
fetched
]);
}
This
->
index
+=
fetched
;
TRACE
(
"-- fetched %d
\n
"
,
fetched
);
if
(
pceltFetched
)
*
pceltFetched
=
fetched
;
if
(
fetched
!=
celt
)
return
S_FALSE
;
else
return
S_OK
;
}
static
HRESULT
WINAPI
EnumMonikerImpl_Skip
(
LPENUMMONIKER
iface
,
ULONG
celt
)
{
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"(%p)->(%d)
\n
"
,
iface
,
celt
);
This
->
index
+=
celt
;
return
S_OK
;
}
static
HRESULT
WINAPI
EnumMonikerImpl_Reset
(
LPENUMMONIKER
iface
)
{
EnumMonikerImpl
*
This
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"(%p)->()
\n
"
,
iface
);
This
->
index
=
0
;
return
S_OK
;
}
static
HRESULT
WINAPI
EnumMonikerImpl_Clone
(
LPENUMMONIKER
iface
,
IEnumMoniker
**
ppenum
)
{
FIXME
(
"(%p)->(%p): stub
\n
"
,
iface
,
ppenum
);
return
E_NOTIMPL
;
}
/**********************************************************************
* IEnumMoniker_Vtbl
*/
static
const
IEnumMonikerVtbl
EnumMonikerImpl_Vtbl
=
{
EnumMonikerImpl_QueryInterface
,
EnumMonikerImpl_AddRef
,
EnumMonikerImpl_Release
,
EnumMonikerImpl_Next
,
EnumMonikerImpl_Skip
,
EnumMonikerImpl_Reset
,
EnumMonikerImpl_Clone
};
dlls/quartz/filtermapper.c
View file @
9f72f8c2
...
...
@@ -200,6 +200,140 @@ static HRESULT enum_reg_filters_create(REGFILTER *filters, unsigned int count, I
return
S_OK
;
}
struct
enum_moniker
{
IEnumMoniker
IEnumMoniker_iface
;
LONG
refcount
;
unsigned
int
index
,
count
;
IMoniker
**
filters
;
};
static
struct
enum_moniker
*
impl_from_IEnumMoniker
(
IEnumMoniker
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
struct
enum_moniker
,
IEnumMoniker_iface
);
}
static
HRESULT
WINAPI
enum_moniker_QueryInterface
(
IEnumMoniker
*
iface
,
REFIID
iid
,
void
**
out
)
{
TRACE
(
"iface %p, iid %s, out %p.
\n
"
,
iface
,
debugstr_guid
(
iid
),
out
);
if
(
IsEqualGUID
(
iid
,
&
IID_IUnknown
)
||
IsEqualGUID
(
iid
,
&
IID_IEnumMoniker
))
{
IEnumMoniker_AddRef
(
iface
);
*
out
=
iface
;
return
S_OK
;
}
WARN
(
"%s not implemented, returning E_NOINTERFACE.
\n
"
,
debugstr_guid
(
iid
));
*
out
=
NULL
;
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
enum_moniker_AddRef
(
IEnumMoniker
*
iface
)
{
struct
enum_moniker
*
enumerator
=
impl_from_IEnumMoniker
(
iface
);
ULONG
refcount
=
InterlockedIncrement
(
&
enumerator
->
refcount
);
TRACE
(
"%p increasing refcount to %u.
\n
"
,
enumerator
,
refcount
);
return
refcount
;
}
static
ULONG
WINAPI
enum_moniker_Release
(
IEnumMoniker
*
iface
)
{
struct
enum_moniker
*
enumerator
=
impl_from_IEnumMoniker
(
iface
);
ULONG
refcount
=
InterlockedDecrement
(
&
enumerator
->
refcount
);
unsigned
int
i
;
TRACE
(
"%p decreasing refcount to %u.
\n
"
,
enumerator
,
refcount
);
if
(
!
refcount
)
{
for
(
i
=
0
;
i
<
enumerator
->
count
;
++
i
)
IMoniker_Release
(
enumerator
->
filters
[
i
]);
free
(
enumerator
->
filters
);
free
(
enumerator
);
}
return
refcount
;
}
static
HRESULT
WINAPI
enum_moniker_Next
(
IEnumMoniker
*
iface
,
ULONG
count
,
IMoniker
**
filters
,
ULONG
*
ret_count
)
{
struct
enum_moniker
*
enumerator
=
impl_from_IEnumMoniker
(
iface
);
unsigned
int
i
;
TRACE
(
"iface %p, count %u, filters %p, ret_count %p.
\n
"
,
iface
,
count
,
filters
,
ret_count
);
for
(
i
=
0
;
i
<
count
&&
enumerator
->
index
+
i
<
enumerator
->
count
;
++
i
)
IMoniker_AddRef
(
filters
[
i
]
=
enumerator
->
filters
[
enumerator
->
index
+
i
]);
enumerator
->
index
+=
i
;
if
(
ret_count
)
*
ret_count
=
i
;
return
i
?
S_OK
:
S_FALSE
;
}
static
HRESULT
WINAPI
enum_moniker_Skip
(
IEnumMoniker
*
iface
,
ULONG
count
)
{
struct
enum_moniker
*
enumerator
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"iface %p, count %u.
\n
"
,
iface
,
count
);
enumerator
->
index
+=
count
;
return
S_OK
;
}
static
HRESULT
WINAPI
enum_moniker_Reset
(
IEnumMoniker
*
iface
)
{
struct
enum_moniker
*
enumerator
=
impl_from_IEnumMoniker
(
iface
);
TRACE
(
"iface %p.
\n
"
,
iface
);
enumerator
->
index
=
0
;
return
S_OK
;
}
static
HRESULT
WINAPI
enum_moniker_Clone
(
IEnumMoniker
*
iface
,
IEnumMoniker
**
out
)
{
TRACE
(
"iface %p, out %p, unimplemented.
\n
"
,
iface
,
out
);
return
E_NOTIMPL
;
}
static
const
IEnumMonikerVtbl
enum_moniker_vtbl
=
{
enum_moniker_QueryInterface
,
enum_moniker_AddRef
,
enum_moniker_Release
,
enum_moniker_Next
,
enum_moniker_Skip
,
enum_moniker_Reset
,
enum_moniker_Clone
,
};
static
HRESULT
enum_moniker_create
(
IMoniker
**
filters
,
unsigned
int
count
,
IEnumMoniker
**
out
)
{
struct
enum_moniker
*
object
;
*
out
=
NULL
;
if
(
!
(
object
=
calloc
(
1
,
sizeof
(
*
object
))))
return
E_OUTOFMEMORY
;
if
(
!
(
object
->
filters
=
malloc
(
count
*
sizeof
(
*
object
->
filters
))))
{
free
(
object
);
return
E_OUTOFMEMORY
;
}
memcpy
(
object
->
filters
,
filters
,
count
*
sizeof
(
*
filters
));
object
->
IEnumMoniker_iface
.
lpVtbl
=
&
enum_moniker_vtbl
;
object
->
refcount
=
1
;
object
->
count
=
count
;
TRACE
(
"Created enumerator %p.
\n
"
,
object
);
*
out
=
&
object
->
IEnumMoniker_iface
;
return
S_OK
;
}
typedef
struct
FilterMapper3Impl
{
IUnknown
IUnknown_inner
;
...
...
@@ -1070,7 +1204,7 @@ static HRESULT WINAPI FilterMapper3_EnumMatchingFilters(
/* no need to AddRef here as already AddRef'd above */
ppMoniker
[
i
]
=
((
struct
MONIKER_MERIT
*
)
monikers
.
pData
)[
i
].
pMoniker
;
}
hr
=
EnumMonikerImpl_C
reate
(
ppMoniker
,
nMonikerCount
,
ppEnum
);
hr
=
enum_moniker_c
reate
(
ppMoniker
,
nMonikerCount
,
ppEnum
);
CoTaskMemFree
(
ppMoniker
);
}
...
...
dlls/quartz/quartz_private.h
View file @
9f72f8c2
...
...
@@ -79,8 +79,6 @@ HRESULT video_renderer_default_create(IUnknown *outer, IUnknown **out) DECLSPEC_
HRESULT
vmr7_create
(
IUnknown
*
outer
,
IUnknown
**
out
)
DECLSPEC_HIDDEN
;
HRESULT
vmr9_create
(
IUnknown
*
outer
,
IUnknown
**
out
)
DECLSPEC_HIDDEN
;
HRESULT
EnumMonikerImpl_Create
(
IMoniker
**
ppMoniker
,
ULONG
nMonikerCount
,
IEnumMoniker
**
ppEnum
)
DECLSPEC_HIDDEN
;
extern
const
char
*
qzdebugstr_guid
(
const
GUID
*
id
)
DECLSPEC_HIDDEN
;
extern
void
video_unregister_windowclass
(
void
)
DECLSPEC_HIDDEN
;
...
...
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