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
800dbb49
Commit
800dbb49
authored
Apr 05, 2011
by
Aric Stewart
Committed by
Alexandre Julliard
Apr 06, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wineqtdecoder: Implement a Wine specific Data Handler.
parent
f9abb07f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
633 additions
and
0 deletions
+633
-0
Makefile.in
dlls/wineqtdecoder/Makefile.in
+1
-0
qtdatahandler.c
dlls/wineqtdecoder/qtdatahandler.c
+625
-0
qtprivate.h
dlls/wineqtdecoder/qtprivate.h
+7
-0
No files found.
dlls/wineqtdecoder/Makefile.in
View file @
800dbb49
...
...
@@ -4,6 +4,7 @@ EXTRALIBS = @QUICKTIMELIB@
C_SRCS
=
\
main.c
\
qtdatahandler.c
\
qtutils.c
\
qtvdecoder.c
...
...
dlls/wineqtdecoder/qtdatahandler.c
0 → 100644
View file @
800dbb49
/*
* QuickTime Data Handler
*
* Copyright 2011 Aric Stewart for CodeWeavers
*
* 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
*/
#include "config.h"
#define ULONG CoreFoundation_ULONG
#define HRESULT CoreFoundation_HRESULT
#define LoadResource __carbon_LoadResource
#define CompareString __carbon_CompareString
#define GetCurrentThread __carbon_GetCurrentThread
#define GetCurrentProcess __carbon_GetCurrentProcess
#define AnimatePalette __carbon_AnimatePalette
#define EqualRgn __carbon_EqualRgn
#define FillRgn __carbon_FillRgn
#define FrameRgn __carbon_FrameRgn
#define GetPixel __carbon_GetPixel
#define InvertRgn __carbon_InvertRgn
#define LineTo __carbon_LineTo
#define OffsetRgn __carbon_OffsetRgn
#define PaintRgn __carbon_PaintRgn
#define Polygon __carbon_Polygon
#define ResizePalette __carbon_ResizePalette
#define SetRectRgn __carbon_SetRectRgn
#define CheckMenuItem __carbon_CheckMenuItem
#define DeleteMenu __carbon_DeleteMenu
#define DrawMenuBar __carbon_DrawMenuBar
#define EnableMenuItem __carbon_EnableMenuItem
#define EqualRect __carbon_EqualRect
#define FillRect __carbon_FillRect
#define FrameRect __carbon_FrameRect
#define GetCursor __carbon_GetCursor
#define GetMenu __carbon_GetMenu
#define InvertRect __carbon_InvertRect
#define IsWindowVisible __carbon_IsWindowVisible
#define MoveWindow __carbon_MoveWindow
#define OffsetRect __carbon_OffsetRect
#define PtInRect __carbon_PtInRect
#define SetCursor __carbon_SetCursor
#define SetRect __carbon_SetRect
#define ShowCursor __carbon_ShowCursor
#define ShowWindow __carbon_ShowWindow
#define UnionRect __carbon_UnionRect
#include <QuickTime/QuickTimeComponents.h>
#undef LoadResource
#undef CompareString
#undef GetCurrentThread
#undef _CDECL
#undef DPRINTF
#undef GetCurrentProcess
#undef AnimatePalette
#undef EqualRgn
#undef FillRgn
#undef FrameRgn
#undef GetPixel
#undef InvertRgn
#undef LineTo
#undef OffsetRgn
#undef PaintRgn
#undef Polygon
#undef ResizePalette
#undef SetRectRgn
#undef CheckMenuItem
#undef DeleteMenu
#undef DrawMenuBar
#undef EnableMenuItem
#undef EqualRect
#undef FillRect
#undef FrameRect
#undef GetCursor
#undef GetMenu
#undef InvertRect
#undef IsWindowVisible
#undef MoveWindow
#undef OffsetRect
#undef PtInRect
#undef SetCursor
#undef SetRect
#undef ShowCursor
#undef ShowWindow
#undef UnionRect
#undef ULONG
#undef HRESULT
#undef DPRINTF
#undef STDMETHODCALLTYPE
#include <assert.h>
#include <stdio.h>
#include <stdarg.h>
#define NONAMELESSSTRUCT
#define NONAMELESSUNION
#define COBJMACROS
#include "windef.h"
#include "winbase.h"
#include "wtypes.h"
#include "winuser.h"
#include "dshow.h"
#include <assert.h>
#include "wine/unicode.h"
#include "wine/debug.h"
#include "qtprivate.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
qtdatahandler
);
static
ComponentDescription
myType
=
{
'
dhlr
'
,
'
WINE
'
,
'
WINE
'
,
0
,
0
};
typedef
struct
DHData
{
WineDataRefRecord
dataRef
;
Ptr
AsyncPtr
;
long
AsyncRefCon
;
DataHCompletionUPP
AsyncCompletionRtn
;
}
DHData
;
static
pascal
ComponentResult
myComponentRoutineProc
(
ComponentParameters
*
cp
,
Handle
componentStorage
);
void
RegisterWineDataHandler
(
void
)
{
ComponentRoutineUPP
MyComponentRoutineUPP
;
MyComponentRoutineUPP
=
NewComponentRoutineUPP
(
&
myComponentRoutineProc
);
RegisterComponent
(
&
myType
,
MyComponentRoutineUPP
,
0
,
NULL
,
NULL
,
NULL
);
}
static
pascal
ComponentResult
myDataHCanUseDataRef
(
DataHandler
dh
,
Handle
dataRef
,
long
*
useFlags
)
{
WineDataRefRecord
*
record
=
(
WineDataRefRecord
*
)(
*
dataRef
);
TRACE
(
"%p %p %p
\n
"
,
dh
,
dataRef
,
useFlags
);
if
(
record
->
pReader
==
NULL
)
return
badComponentSelector
;
*
useFlags
=
kDataHCanRead
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHSetDataRef
(
DataHandler
dh
,
Handle
dataRef
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
WineDataRefRecord
*
newRef
=
(
WineDataRefRecord
*
)(
*
dataRef
);
TRACE
(
"
\n
"
);
if
(
newRef
->
pReader
!=
data
->
dataRef
.
pReader
)
IAsyncReader_AddRef
(
newRef
->
pReader
);
data
->
dataRef
=
*
newRef
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetAvailableFileSize
(
DataHandler
dh
,
long
*
fileSize
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
LONGLONG
total
;
LONGLONG
avaliable
;
TRACE
(
"%p
\n
"
,
dh
);
IAsyncReader_Length
(
data
->
dataRef
.
pReader
,
&
total
,
&
avaliable
);
*
fileSize
=
avaliable
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetFileSize
(
DataHandler
dh
,
long
*
fileSize
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
LONGLONG
total
;
LONGLONG
avaliable
;
TRACE
(
"%p
\n
"
,
dh
);
IAsyncReader_Length
(
data
->
dataRef
.
pReader
,
&
total
,
&
avaliable
);
*
fileSize
=
total
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHScheduleData
(
DataHandler
dh
,
Ptr
PlaceToPutDataPtr
,
long
FileOffset
,
long
DataSize
,
long
RefCon
,
DataHSchedulePtr
scheduleRec
,
DataHCompletionUPP
CompletionRtn
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
HRESULT
hr
;
LONGLONG
offset
=
FileOffset
;
BYTE
*
buffer
=
(
BYTE
*
)
PlaceToPutDataPtr
;
TRACE
(
"%p %p %li %li %li %p %p
\n
"
,
dh
,
PlaceToPutDataPtr
,
FileOffset
,
DataSize
,
RefCon
,
scheduleRec
,
CompletionRtn
);
hr
=
IAsyncReader_SyncRead
(
data
->
dataRef
.
pReader
,
offset
,
DataSize
,
buffer
);
TRACE
(
"result %x
\n
"
,
hr
);
if
(
CompletionRtn
)
{
if
(
data
->
AsyncCompletionRtn
)
InvokeDataHCompletionUPP
(
data
->
AsyncPtr
,
data
->
AsyncRefCon
,
noErr
,
data
->
AsyncCompletionRtn
);
data
->
AsyncPtr
=
PlaceToPutDataPtr
;
data
->
AsyncRefCon
=
RefCon
;
data
->
AsyncCompletionRtn
=
CompletionRtn
;
}
return
noErr
;
}
static
pascal
ComponentResult
myDataHFinishData
(
DataHandler
dh
,
Ptr
PlaceToPutDataPtr
,
Boolean
Cancel
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
if
(
!
data
->
AsyncCompletionRtn
)
return
noErr
;
if
(
!
PlaceToPutDataPtr
||
PlaceToPutDataPtr
==
data
->
AsyncPtr
)
{
if
(
!
Cancel
)
InvokeDataHCompletionUPP
(
data
->
AsyncPtr
,
data
->
AsyncRefCon
,
noErr
,
data
->
AsyncCompletionRtn
);
data
->
AsyncPtr
=
NULL
;
data
->
AsyncRefCon
=
0
;
data
->
AsyncCompletionRtn
=
NULL
;
}
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetData
(
DataHandler
dh
,
Handle
h
,
long
hOffset
,
long
offset
,
long
size
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
BYTE
*
target
=
(
BYTE
*
)
*
h
;
LONGLONG
off
=
offset
;
HRESULT
hr
;
TRACE
(
"%p %p %li %li %li
\n
"
,
dh
,
h
,
hOffset
,
offset
,
size
);
hr
=
IAsyncReader_SyncRead
(
data
->
dataRef
.
pReader
,
off
,
size
,
target
+
hOffset
);
TRACE
(
"result %x
\n
"
,
hr
);
return
noErr
;
}
static
pascal
ComponentResult
myDataHCompareDataRef
(
DataHandler
dh
,
Handle
dataRef
,
Boolean
*
equal
)
{
WineDataRefRecord
*
ptr1
;
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
TRACE
(
"
\n
"
);
ptr1
=
(
WineDataRefRecord
*
)
dataRef
;
*
equal
=
(
ptr1
->
pReader
==
data
->
dataRef
.
pReader
);
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetDataRef
(
DataHandler
dh
,
Handle
*
dataRef
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
TRACE
(
"
\n
"
);
*
dataRef
=
storage
;
HandToHand
(
dataRef
);
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetScheduleAheadTime
(
DataHandler
dh
,
long
*
millisecs
)
{
TRACE
(
"
\n
"
);
*
millisecs
=
1000
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetInfoFlags
(
DataHandler
dh
,
UInt32
*
flags
)
{
TRACE
(
"
\n
"
);
*
flags
=
0
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetFileTypeOrdering
(
DataHandler
dh
,
DataHFileTypeOrderingHandle
*
orderingListHandle
)
{
OSType
orderlist
[
1
]
=
{
kDataHFileTypeExtension
};
TRACE
(
"
\n
"
);
PtrToHand
(
&
orderlist
,
(
Handle
*
)
orderingListHandle
,
sizeof
(
OSType
));
return
noErr
;
}
static
pascal
ComponentResult
myDataHGetFileName
(
DataHandler
dh
,
Str255
str
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
TRACE
(
"%p %s
\n
"
,
str
,
debugstr_guid
(
&
data
->
dataRef
.
streamSubtype
));
/* Todo Expand this list */
if
(
IsEqualIID
(
&
data
->
dataRef
.
streamSubtype
,
&
MEDIASUBTYPE_MPEG1Video
)
||
IsEqualIID
(
&
data
->
dataRef
.
streamSubtype
,
&
MEDIASUBTYPE_MPEG1System
))
CFStringGetPascalString
(
CFSTR
(
"video.mpg"
),
str
,
256
,
kCFStringEncodingMacRoman
);
else
if
(
IsEqualIID
(
&
data
->
dataRef
.
streamSubtype
,
&
MEDIASUBTYPE_Asf
))
CFStringGetPascalString
(
CFSTR
(
"video.asf"
),
str
,
256
,
kCFStringEncodingMacRoman
);
else
if
(
IsEqualIID
(
&
data
->
dataRef
.
streamSubtype
,
&
MEDIASUBTYPE_Avi
))
CFStringGetPascalString
(
CFSTR
(
"video.avi"
),
str
,
256
,
kCFStringEncodingMacRoman
);
else
if
(
IsEqualIID
(
&
data
->
dataRef
.
streamSubtype
,
&
MEDIASUBTYPE_QTMovie
))
CFStringGetPascalString
(
CFSTR
(
"video.mov"
),
str
,
256
,
kCFStringEncodingMacRoman
);
else
return
badComponentSelector
;
return
noErr
;
}
static
pascal
ComponentResult
myDataHOpenForRead
(
DataHandler
dh
)
{
TRACE
(
"
\n
"
);
return
noErr
;
}
static
pascal
ComponentResult
myDataHTask
(
DataHandler
dh
)
{
Handle
storage
=
GetComponentInstanceStorage
(
dh
);
DHData
*
data
=
(
DHData
*
)
*
storage
;
if
(
data
->
AsyncCompletionRtn
)
{
TRACE
(
"Sending Completion
\n
"
);
InvokeDataHCompletionUPP
(
data
->
AsyncPtr
,
data
->
AsyncRefCon
,
noErr
,
data
->
AsyncCompletionRtn
);
data
->
AsyncPtr
=
NULL
;
data
->
AsyncRefCon
=
0
;
data
->
AsyncCompletionRtn
=
NULL
;
}
return
noErr
;
}
static
pascal
ComponentResult
myDataHPlaybackHints
(
DataHandler
dh
,
long
flags
,
unsigned
long
minFileOffset
,
unsigned
long
maxFileOffset
,
long
bytesPerSecond
)
{
TRACE
(
"%lu %lu %li
\n
"
,
minFileOffset
,
maxFileOffset
,
bytesPerSecond
);
return
noErr
;
}
static
const
struct
{
LPVOID
proc
;
ProcInfoType
type
;}
componentFunctions
[]
=
{
{
NULL
,
0
},
/* 0 */
{
NULL
,
0
},
/* 1 */
{
myDataHGetData
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Handle
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
4
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
5
,
SIZE_CODE
(
sizeof
(
long
)))
},
/* kDataHGetDataSelect */
{
NULL
,
0
},
/* kDataHPutDataSelect */
{
NULL
,
0
},
/* kDataHFlushDataSelect */
{
NULL
,
0
},
/* kDataHOpenForWriteSelect */
{
NULL
,
0
},
/* kDataHCloseForWriteSelect */
{
NULL
,
0
},
/* 7 */
{
myDataHOpenForRead
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
},
/* kDataHOpenForReadSelect
*/
{
NULL
,
0
},
/* kDataHCloseForReadSelect */
{
myDataHSetDataRef
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Handle
)))
},
/* kDataHSetDataRefSelect */
{
myDataHGetDataRef
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Handle
)))
},
/* kDataHGetDataRefSelect */
{
myDataHCompareDataRef
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Handle
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
Boolean
*
)))
},
/* kDataHCompareDataRefSelect */
{
myDataHTask
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
},
/* kDataHTaskSelect */
{
myDataHScheduleData
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Ptr
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
4
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
5
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
6
,
SIZE_CODE
(
sizeof
(
DataHSchedulePtr
)))
|
STACK_ROUTINE_PARAMETER
(
7
,
SIZE_CODE
(
sizeof
(
DataHCompletionUPP
)))
},
/* kDataHScheduleDataSelect */
{
myDataHFinishData
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Ptr
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
Boolean
)))
},
/* kDataHFinishDataSelect */
{
NULL
,
0
},
/* kDataHFlushCacheSelect 0x10 */
{
NULL
,
0
},
/* kDataHResolveDataRefSelect */
{
myDataHGetFileSize
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
long
*
)))
},
/* kDataHGetFileSizeSelect */
{
myDataHCanUseDataRef
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Handle
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
long
*
)))
},
/* kDataHCanUseDataRefSelect */
{
NULL
,
0
},
/* kDataHGetVolumeListSelect */
{
NULL
,
0
},
/* kDataHWriteSelect */
{
NULL
,
0
},
/* kDataHPreextendSelect */
{
NULL
,
0
},
/* kDataHSetFileSizeSelect */
{
NULL
,
0
},
/* kDataHGetFreeSpaceSelect */
{
NULL
,
0
},
/* kDataHCreateFileSelect */
{
NULL
,
0
},
/* kDataHGetPreferredBlockSizeSelect */
{
NULL
,
0
},
/* kDataHGetDeviceIndexSelect */
{
NULL
,
0
},
/* kDataHIsStreamingDataHandlerSelect */
{
NULL
,
0
},
/* kDataHGetDataInBufferSelect */
{
myDataHGetScheduleAheadTime
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
long
*
)))
},
/* kDataHGetScheduleAheadTimeSelect */
/* End of Required List */
{
NULL
,
0
},
/* kDataHSetCacheSizeLimitSelect */
{
NULL
,
0
},
/* kDataHGetCacheSizeLimitSelect 0x20 */
{
NULL
,
0
},
/* kDataHGetMovieSelect */
{
NULL
,
0
},
/* kDataHAddMovieSelect */
{
NULL
,
0
},
/* kDataHUpdateMovieSelect */
{
NULL
,
0
},
/* kDataHDoesBufferSelect */
{
myDataHGetFileName
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
Str255
*
)))
},
/* kDataHGetFileNameSelect */
{
myDataHGetAvailableFileSize
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
long
*
)))
},
/* kDataHGetAvailableFileSizeSelect */
{
NULL
,
0
},
/* kDataHGetMacOSFileTypeSelect */
{
NULL
,
0
},
/* kDataHGetMIMETypeSelect */
{
NULL
,
0
},
/* kDataHSetDataRefWithAnchorSelect */
{
NULL
,
0
},
/* kDataHGetDataRefWithAnchorSelect */
{
NULL
,
0
},
/* kDataHSetMacOSFileTypeSelect */
{
NULL
,
0
},
/* kDataHSetTimeBaseSelect */
{
myDataHGetInfoFlags
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
UInt32
*
)))
},
/* kDataHGetInfoFlagsSelect */
{
NULL
,
0
},
/* kDataHScheduleData64Select */
{
NULL
,
0
},
/* kDataHWrite64Select */
{
NULL
,
0
},
/* kDataHGetFileSize64Select 0x30 */
{
NULL
,
0
},
/* kDataHPreextend64Select */
{
NULL
,
0
},
/* kDataHSetFileSize64Select */
{
NULL
,
0
},
/* kDataHGetFreeSpace64Select */
{
NULL
,
0
},
/* kDataHAppend64Select */
{
NULL
,
0
},
/* kDataHReadAsyncSelect */
{
NULL
,
0
},
/* kDataHPollReadSelect */
{
NULL
,
0
},
/* kDataHGetDataAvailabilitySelect */
{
NULL
,
0
},
/* 0x0038 */
{
NULL
,
0
},
/* 0x0039 */
{
NULL
,
0
},
/* kDataHGetFileSizeAsyncSelect */
{
NULL
,
0
},
/* kDataHGetDataRefAsTypeSelect */
{
NULL
,
0
},
/* kDataHSetDataRefExtensionSelect */
{
NULL
,
0
},
/* kDataHGetDataRefExtensionSelect */
{
NULL
,
0
},
/* kDataHGetMovieWithFlagsSelect */
{
NULL
,
0
},
/* 0x3F */
{
myDataHGetFileTypeOrdering
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
DataHFileTypeOrderingHandle
*
)))
},
/* kDataHGetFileTypeOrderingSelect 0x40 */
{
NULL
,
0
},
/* kDataHCreateFileWithFlagsSelect */
{
NULL
,
0
},
/* kDataHGetMIMETypeAsyncSelect */
{
NULL
,
0
},
/* kDataHGetInfoSelect */
{
NULL
,
0
},
/* kDataHSetIdleManagerSelect */
{
NULL
,
0
},
/* kDataHDeleteFileSelect */
{
NULL
,
0
},
/* kDataHSetMovieUsageFlagsSelect */
{
NULL
,
0
},
/* kDataHUseTemporaryDataRefSelect */
{
NULL
,
0
},
/* kDataHGetTemporaryDataRefCapabilitiesSelect */
{
NULL
,
0
},
/* kDataHRenameFileSelect */
{
NULL
,
0
},
/* 0x4A */
{
NULL
,
0
},
/* 0x4B */
{
NULL
,
0
},
/* 0x4C */
{
NULL
,
0
},
/* 0x4D */
{
NULL
,
0
},
/* kDataHGetAvailableFileSize64Select */
{
NULL
,
0
},
/* kDataHGetDataAvailability64Select */
};
static
const
struct
{
LPVOID
proc
;
ProcInfoType
type
;}
componentFunctions_2
[]
=
{
{
myDataHPlaybackHints
,
kPascalStackBased
|
RESULT_SIZE
(
SIZE_CODE
(
sizeof
(
ComponentResult
)))
|
STACK_ROUTINE_PARAMETER
(
1
,
SIZE_CODE
(
sizeof
(
DataHandler
)))
|
STACK_ROUTINE_PARAMETER
(
2
,
SIZE_CODE
(
sizeof
(
long
)))
|
STACK_ROUTINE_PARAMETER
(
3
,
SIZE_CODE
(
sizeof
(
unsigned
long
)))
|
STACK_ROUTINE_PARAMETER
(
4
,
SIZE_CODE
(
sizeof
(
unsigned
long
)))
|
STACK_ROUTINE_PARAMETER
(
5
,
SIZE_CODE
(
sizeof
(
long
)))
},
/* kDataHPlaybackHintsSelect 0x103 */
{
NULL
,
0
},
/* kDataHPlaybackHints64Select 0x10E */
{
NULL
,
0
},
/* kDataHGetDataRateSelect 0x110 */
{
NULL
,
0
},
/* kDataHSetTimeHintsSelect 0x111 */
};
/* Component Functions */
static
pascal
ComponentResult
myComponentOpen
(
ComponentInstance
ci
,
ComponentInstance
self
)
{
DHData
myData
;
Handle
storage
;
ZeroMemory
(
&
myData
,
sizeof
(
DHData
));
PtrToHand
(
&
myData
,
&
storage
,
sizeof
(
DHData
));
SetComponentInstanceStorage
(
self
,
storage
);
return
noErr
;
}
static
pascal
ComponentResult
myComponentClose
(
ComponentInstance
ci
,
ComponentInstance
self
)
{
Handle
storage
=
GetComponentInstanceStorage
(
self
);
DHData
*
data
;
if
(
storage
)
{
data
=
(
DHData
*
)
*
storage
;
if
(
data
&&
data
->
dataRef
.
pReader
!=
NULL
)
IAsyncReader_Release
(
data
->
dataRef
.
pReader
);
DisposeHandle
(
storage
);
SetComponentInstanceStorage
(
self
,
NULL
);
}
return
noErr
;
}
static
pascal
ComponentResult
myComponentCanDo
(
ComponentInstance
ci
,
SInt16
ftnNumber
)
{
TRACE
(
"test 0x%x
\n
"
,
ftnNumber
);
if
(
ftnNumber
<=
kComponentOpenSelect
&&
ftnNumber
>=
kComponentCanDoSelect
)
return
TRUE
;
if
(
ftnNumber
==
kDataHPlaybackHintsSelect
)
return
TRUE
;
if
(
ftnNumber
>
kDataHGetDataAvailability64Select
)
return
FALSE
;
TRACE
(
"impl? %i
\n
"
,(
componentFunctions
[
ftnNumber
].
proc
!=
NULL
));
return
(
componentFunctions
[
ftnNumber
].
proc
!=
NULL
);
}
/* Main Proc */
static
ComponentResult
callOurFunction
(
LPVOID
proc
,
ProcInfoType
type
,
ComponentParameters
*
cp
)
{
ComponentRoutineUPP
myUUP
;
ComponentResult
result
;
myUUP
=
NewComponentFunctionUPP
(
proc
,
type
);
result
=
CallComponentFunction
(
cp
,
myUUP
);
DisposeComponentFunctionUPP
(
myUUP
);
return
result
;
}
static
pascal
ComponentResult
myComponentRoutineProc
(
ComponentParameters
*
cp
,
Handle
componentStorage
)
{
switch
(
cp
->
what
)
{
case
kComponentOpenSelect
:
return
callOurFunction
(
myComponentOpen
,
uppCallComponentOpenProcInfo
,
cp
);
case
kComponentCloseSelect
:
return
callOurFunction
(
myComponentClose
,
uppCallComponentOpenProcInfo
,
cp
);
case
kComponentCanDoSelect
:
return
callOurFunction
(
myComponentCanDo
,
uppCallComponentCanDoProcInfo
,
cp
);
case
kDataHPlaybackHintsSelect
:
return
callOurFunction
(
componentFunctions_2
[
0
].
proc
,
componentFunctions_2
[
0
].
type
,
cp
);
}
if
(
cp
->
what
>
0
&&
cp
->
what
<=
kDataHGetDataAvailability64Select
&&
componentFunctions
[
cp
->
what
].
proc
)
return
callOurFunction
(
componentFunctions
[
cp
->
what
].
proc
,
componentFunctions
[
cp
->
what
].
type
,
cp
);
FIXME
(
"unhandled select 0x%x
\n
"
,
cp
->
what
);
return
badComponentSelector
;
}
dlls/wineqtdecoder/qtprivate.h
View file @
800dbb49
...
...
@@ -18,4 +18,11 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
typedef
struct
WineDataRefRecordTag
{
IAsyncReader
*
pReader
;
GUID
streamSubtype
;
}
WineDataRefRecord
;
HRESULT
AccessPixelBufferPixels
(
CVPixelBufferRef
pixelBuffer
,
LPBYTE
pbDstStream
);
void
RegisterWineDataHandler
(
void
);
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