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
676754d1
Commit
676754d1
authored
Jan 19, 2012
by
Aric Stewart
Committed by
Alexandre Julliard
Jan 19, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wineqtdecoder: Implement QTSplitter_ChangeStart.
parent
d20c69c5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
75 additions
and
14 deletions
+75
-14
qtsplitter.c
dlls/wineqtdecoder/qtsplitter.c
+23
-14
tlogstg.idl
include/tlogstg.idl
+52
-0
No files found.
dlls/wineqtdecoder/qtsplitter.c
View file @
676754d1
...
@@ -166,6 +166,9 @@ typedef struct QTSplitter {
...
@@ -166,6 +166,9 @@ typedef struct QTSplitter {
CRITICAL_SECTION
csReceive
;
CRITICAL_SECTION
csReceive
;
SourceSeeking
sourceSeeking
;
SourceSeeking
sourceSeeking
;
TimeValue
movie_time
;
TimeValue
movie_start
;
TimeScale
movie_scale
;
}
QTSplitter
;
}
QTSplitter
;
static
const
IPinVtbl
QT_OutputPin_Vtbl
;
static
const
IPinVtbl
QT_OutputPin_Vtbl
;
...
@@ -468,7 +471,7 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
...
@@ -468,7 +471,7 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
{
{
QTSplitter
*
This
=
(
QTSplitter
*
)
data
;
QTSplitter
*
This
=
(
QTSplitter
*
)
data
;
HRESULT
hr
=
S_OK
;
HRESULT
hr
=
S_OK
;
TimeValue
movie_time
=
0
,
next_time
;
TimeValue
next_time
;
CVPixelBufferRef
pixelBuffer
=
NULL
;
CVPixelBufferRef
pixelBuffer
=
NULL
;
OSStatus
err
;
OSStatus
err
;
TimeRecord
tr
;
TimeRecord
tr
;
...
@@ -486,11 +489,13 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
...
@@ -486,11 +489,13 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
WaitForSingleObject
(
This
->
runEvent
,
-
1
);
WaitForSingleObject
(
This
->
runEvent
,
-
1
);
EnterCriticalSection
(
&
This
->
csReceive
);
This
->
state
=
State_Running
;
This
->
state
=
State_Running
;
/* Prime the pump: Needed for MPEG streams */
/* Prime the pump: Needed for MPEG streams */
GetMovieNextInterestingTime
(
This
->
pQTMovie
,
nextTimeEdgeOK
|
nextTimeStep
,
0
,
NULL
,
movie_time
,
1
,
&
next_time
,
NULL
);
GetMovieNextInterestingTime
(
This
->
pQTMovie
,
nextTimeEdgeOK
|
nextTimeStep
,
0
,
NULL
,
This
->
movie_time
,
1
,
&
next_time
,
NULL
);
GetMovieTime
(
This
->
pQTMovie
,
&
tr
);
GetMovieTime
(
This
->
pQTMovie
,
&
tr
);
LeaveCriticalSection
(
&
This
->
csReceive
);
do
do
{
{
LONGLONG
tStart
=
0
,
tStop
=
0
;
LONGLONG
tStart
=
0
,
tStop
=
0
;
...
@@ -498,7 +503,7 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
...
@@ -498,7 +503,7 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
float
time
;
float
time
;
EnterCriticalSection
(
&
This
->
csReceive
);
EnterCriticalSection
(
&
This
->
csReceive
);
GetMovieNextInterestingTime
(
This
->
pQTMovie
,
nextTimeStep
,
0
,
NULL
,
movie_time
,
1
,
&
next_time
,
NULL
);
GetMovieNextInterestingTime
(
This
->
pQTMovie
,
nextTimeStep
,
0
,
NULL
,
This
->
movie_time
,
1
,
&
next_time
,
NULL
);
if
(
next_time
==
-
1
)
if
(
next_time
==
-
1
)
{
{
...
@@ -512,15 +517,15 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
...
@@ -512,15 +517,15 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
MoviesTask
(
This
->
pQTMovie
,
0
);
MoviesTask
(
This
->
pQTMovie
,
0
);
QTVisualContextTask
(
This
->
vContext
);
QTVisualContextTask
(
This
->
vContext
);
TRACE
(
"In loop at time %ld
\n
"
,
movie_time
);
TRACE
(
"In loop at time %ld
\n
"
,
This
->
movie_time
);
TRACE
(
"In Next time %ld
\n
"
,
next_time
);
TRACE
(
"In Next time %ld
\n
"
,
next_time
);
mStart
=
movie_time
;
mStart
=
This
->
movie_time
;
mStop
=
next_time
;
mStop
=
next_time
;
time
=
(
float
)
movie_time
/
tr
.
scale
;
time
=
(
float
)
(
This
->
movie_time
-
This
->
movie_start
)
/
This
->
movie_
scale
;
tStart
=
time
*
10000000
;
tStart
=
time
*
10000000
;
time
=
(
float
)
next_time
/
tr
.
scale
;
time
=
(
float
)
(
next_time
-
This
->
movie_start
)
/
This
->
movie_
scale
;
tStop
=
time
*
10000000
;
tStop
=
time
*
10000000
;
/* Deliver Audio */
/* Deliver Audio */
...
@@ -552,8 +557,8 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
...
@@ -552,8 +557,8 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data)
goto
audio_error
;
goto
audio_error
;
}
}
duration
=
(
float
)
next_time
/
tr
.
scale
;
duration
=
(
float
)
next_time
/
This
->
movie_
scale
;
time
=
(
float
)
movie_time
/
tr
.
scale
;
time
=
(
float
)
This
->
movie_time
/
This
->
movie_
scale
;
duration
-=
time
;
duration
-=
time
;
frames
=
pvi
->
nSamplesPerSec
*
duration
;
frames
=
pvi
->
nSamplesPerSec
*
duration
;
TRACE
(
"Need audio for %f seconds (%li frames)
\n
"
,
duration
,
frames
);
TRACE
(
"Need audio for %f seconds (%li frames)
\n
"
,
duration
,
frames
);
...
@@ -643,7 +648,7 @@ audio_error:
...
@@ -643,7 +648,7 @@ audio_error:
else
else
TRACE
(
"No video to deliver
\n
"
);
TRACE
(
"No video to deliver
\n
"
);
movie_time
=
next_time
;
This
->
movie_time
=
next_time
;
LeaveCriticalSection
(
&
This
->
csReceive
);
LeaveCriticalSection
(
&
This
->
csReceive
);
}
while
(
hr
==
S_OK
);
}
while
(
hr
==
S_OK
);
...
@@ -923,7 +928,6 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
...
@@ -923,7 +928,6 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
DWORD
tid
;
DWORD
tid
;
HANDLE
thread
;
HANDLE
thread
;
LONGLONG
time
;
LONGLONG
time
;
TimeScale
scale
;
TRACE
(
"Trying movie connect
\n
"
);
TRACE
(
"Trying movie connect
\n
"
);
...
@@ -963,8 +967,8 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
...
@@ -963,8 +967,8 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
hr
=
QT_Process_Audio_Track
(
filter
,
trk
);
hr
=
QT_Process_Audio_Track
(
filter
,
trk
);
time
=
GetMovieDuration
(
filter
->
pQTMovie
);
time
=
GetMovieDuration
(
filter
->
pQTMovie
);
scale
=
GetMovieTimeScale
(
filter
->
pQTMovie
);
filter
->
movie_
scale
=
GetMovieTimeScale
(
filter
->
pQTMovie
);
filter
->
sourceSeeking
.
llDuration
=
((
double
)
time
/
scale
)
*
10000000
;
filter
->
sourceSeeking
.
llDuration
=
((
double
)
time
/
filter
->
movie_
scale
)
*
10000000
;
filter
->
sourceSeeking
.
llStop
=
filter
->
sourceSeeking
.
llDuration
;
filter
->
sourceSeeking
.
llStop
=
filter
->
sourceSeeking
.
llDuration
;
TRACE
(
"Movie duration is %s
\n
"
,
wine_dbgstr_longlong
(
filter
->
sourceSeeking
.
llDuration
));
TRACE
(
"Movie duration is %s
\n
"
,
wine_dbgstr_longlong
(
filter
->
sourceSeeking
.
llDuration
));
...
@@ -1364,7 +1368,12 @@ static HRESULT QT_AddPin(QTSplitter *This, const PIN_INFO *piOutput, const AM_ME
...
@@ -1364,7 +1368,12 @@ static HRESULT QT_AddPin(QTSplitter *This, const PIN_INFO *piOutput, const AM_ME
static
HRESULT
WINAPI
QTSplitter_ChangeStart
(
IMediaSeeking
*
iface
)
static
HRESULT
WINAPI
QTSplitter_ChangeStart
(
IMediaSeeking
*
iface
)
{
{
FIXME
(
"(%p) filter hasn't implemented start position change!
\n
"
,
iface
);
QTSplitter
*
This
=
impl_from_IMediaSeeking
(
iface
);
TRACE
(
"(%p)
\n
"
,
iface
);
EnterCriticalSection
(
&
This
->
csReceive
);
This
->
movie_time
=
(
This
->
sourceSeeking
.
llCurrent
*
This
->
movie_scale
)
/
10000000
;
This
->
movie_start
=
This
->
movie_time
;
LeaveCriticalSection
(
&
This
->
csReceive
);
return
S_OK
;
return
S_OK
;
}
}
...
...
include/tlogstg.idl
0 → 100644
View file @
676754d1
/*
*
Copyright
2012
Jacek
Caban
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
*/
import
"objidl.idl"
;
import
"oleidl.idl"
;
import
"shtypes.idl"
;
typedef
struct
_WINDOWDATA
{
DWORD
dwWindowID
;
UINT
uiCP
;
PIDLIST_ABSOLUTE
pidl
;
[
string
]
LPWSTR
lpszUrl
;
[
string
]
LPWSTR
lpszUrlLocation
;
[
string
]
LPWSTR
lpszTitle
;
}
WINDOWDATA
;
typedef
WINDOWDATA
*
LPWINDOWDATA
;
typedef
const
WINDOWDATA
*
LPCWINDOWDATA
;
[
uuid
(
241
c033e
-
e659
-
43
da
-
aa4d
-
4086
dbc4758d
),
object
]
interface
ITravelLogClient
:
IUnknown
{
HRESULT
FindWindowByIndex
(
[
in
]
DWORD
dwID
,
[
out
]
IUnknown
**
ppunk
)
;
HRESULT
GetWindowData
(
[
in
]
IStream
*
pStream
,
[
out
]
LPWINDOWDATA
pWinData
)
;
HRESULT
LoadHistoryPosition
(
[
in
]
LPWSTR
pszUrlLocation
,
[
in
]
DWORD
dwPosition
)
;
}
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