Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
VideoLAN
VLMC
Commits
59c560fb
Commit
59c560fb
authored
Oct 29, 2009
by
Hugo Beauzee-Luyssen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Solved many problems, added debug
Still not functionnal, I think something was lost in the merge...
parent
1450ed17
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
43 additions
and
20 deletions
+43
-20
src/Renderer/WorkflowRenderer.cpp
src/Renderer/WorkflowRenderer.cpp
+1
-1
src/Workflow/MainWorkflow.cpp
src/Workflow/MainWorkflow.cpp
+7
-4
src/Workflow/TrackHandler.cpp
src/Workflow/TrackHandler.cpp
+21
-7
src/Workflow/TrackHandler.h
src/Workflow/TrackHandler.h
+4
-2
src/Workflow/TrackWorkflow.cpp
src/Workflow/TrackWorkflow.cpp
+2
-2
src/Workflow/TrackWorkflow.h
src/Workflow/TrackWorkflow.h
+2
-2
src/Workflow/VideoClipWorkflow.cpp
src/Workflow/VideoClipWorkflow.cpp
+6
-2
No files found.
src/Renderer/WorkflowRenderer.cpp
View file @
59c560fb
...
@@ -39,7 +39,7 @@ WorkflowRenderer::WorkflowRenderer() :
...
@@ -39,7 +39,7 @@ WorkflowRenderer::WorkflowRenderer() :
m_media
=
new
LibVLCpp
::
Media
(
"fake://"
);
m_media
=
new
LibVLCpp
::
Media
(
"fake://"
);
sprintf
(
buffer
,
":invmem-width=%i"
,
VIDEOWIDTH
);
sprintf
(
buffer
,
":invmem-width=%i"
,
VIDEOWIDTH
);
m_media
->
addOption
(
":codec=invmem
,inamem
"
);
m_media
->
addOption
(
":codec=invmem"
);
m_media
->
addOption
(
buffer
);
m_media
->
addOption
(
buffer
);
sprintf
(
buffer
,
":invmem-height=%i"
,
VIDEOHEIGHT
);
sprintf
(
buffer
,
":invmem-height=%i"
,
VIDEOHEIGHT
);
m_media
->
addOption
(
buffer
);
m_media
->
addOption
(
buffer
);
...
...
src/Workflow/MainWorkflow.cpp
View file @
59c560fb
...
@@ -39,17 +39,19 @@ MainWorkflow::MainWorkflow( int trackCount ) :
...
@@ -39,17 +39,19 @@ MainWorkflow::MainWorkflow( int trackCount ) :
m_renderMutex
=
new
QMutex
;
m_renderMutex
=
new
QMutex
;
m_synchroneRenderWaitCondition
=
new
QWaitCondition
;
m_synchroneRenderWaitCondition
=
new
QWaitCondition
;
m_synchroneRenderWaitConditionMutex
=
new
QMutex
;
m_synchroneRenderWaitConditionMutex
=
new
QMutex
;
m_tracks
=
new
TrackHandler
*
[
2
];
m_effectEngine
=
new
EffectsEngine
;
m_effectEngine
->
disable
();
m_tracks
=
new
TrackHandler
*
[
TrackWorkflow
::
NbType
];
for
(
unsigned
int
i
=
0
;
i
<
TrackWorkflow
::
NbType
;
++
i
)
for
(
unsigned
int
i
=
0
;
i
<
TrackWorkflow
::
NbType
;
++
i
)
{
{
TrackWorkflow
::
TrackType
trackType
=
(
i
==
0
?
TrackWorkflow
::
Video
:
TrackWorkflow
::
Audio
);
TrackWorkflow
::
TrackType
trackType
=
(
i
==
0
?
TrackWorkflow
::
Video
:
TrackWorkflow
::
Audio
);
m_tracks
[
i
]
=
new
TrackHandler
(
trackCount
,
trackType
);
m_tracks
[
i
]
=
new
TrackHandler
(
trackCount
,
trackType
,
m_effectEngine
);
connect
(
m_tracks
[
i
],
SIGNAL
(
tracksPaused
()
),
this
,
SLOT
(
tracksPaused
()
)
);
connect
(
m_tracks
[
i
],
SIGNAL
(
tracksPaused
()
),
this
,
SLOT
(
tracksPaused
()
)
);
connect
(
m_tracks
[
i
],
SIGNAL
(
allTracksRenderCompleted
()
),
this
,
SLOT
(
tracksRenderCompleted
()
)
);
connect
(
m_tracks
[
i
],
SIGNAL
(
allTracksRenderCompleted
()
),
this
,
SLOT
(
tracksRenderCompleted
()
)
);
}
}
m_outputBuffers
=
new
OutputBuffers
;
m_outputBuffers
=
new
OutputBuffers
;
m_effectEngine
=
new
EffectsEngine
;
m_effectEngine
->
disable
();
}
}
MainWorkflow
::~
MainWorkflow
()
MainWorkflow
::~
MainWorkflow
()
...
@@ -212,6 +214,7 @@ MainWorkflow::OutputBuffers* MainWorkflow::getSynchroneOutput()
...
@@ -212,6 +214,7 @@ MainWorkflow::OutputBuffers* MainWorkflow::getSynchroneOutput()
m_synchroneRenderWaitConditionMutex
->
unlock
();
m_synchroneRenderWaitConditionMutex
->
unlock
();
m_outputBuffers
->
video
=
reinterpret_cast
<
LightVideoFrame
*>
(
m_tracks
[
TrackWorkflow
::
Video
]
->
getSynchroneOutput
()
);
m_outputBuffers
->
video
=
reinterpret_cast
<
LightVideoFrame
*>
(
m_tracks
[
TrackWorkflow
::
Video
]
->
getSynchroneOutput
()
);
m_outputBuffers
->
audio
=
reinterpret_cast
<
unsigned
char
*>
(
m_tracks
[
TrackWorkflow
::
Audio
]
->
getSynchroneOutput
()
);
m_outputBuffers
->
audio
=
reinterpret_cast
<
unsigned
char
*>
(
m_tracks
[
TrackWorkflow
::
Audio
]
->
getSynchroneOutput
()
);
qDebug
()
<<
"video ptr:"
<<
(
void
*
)
m_outputBuffers
->
video
;
return
m_outputBuffers
;
return
m_outputBuffers
;
}
}
...
...
src/Workflow/TrackHandler.cpp
View file @
59c560fb
...
@@ -22,11 +22,16 @@
...
@@ -22,11 +22,16 @@
#include "TrackHandler.h"
#include "TrackHandler.h"
TrackHandler
::
TrackHandler
(
unsigned
int
nbTracks
,
TrackWorkflow
::
TrackType
trackType
)
:
LightVideoFrame
*
TrackHandler
::
nullOutput
=
NULL
;
TrackHandler
::
TrackHandler
(
unsigned
int
nbTracks
,
TrackWorkflow
::
TrackType
trackType
,
EffectsEngine
*
effectsEngine
)
:
m_trackCount
(
nbTracks
),
m_trackCount
(
nbTracks
),
m_trackType
(
trackType
),
m_trackType
(
trackType
),
m_length
(
0
)
m_length
(
0
),
m_effectEngine
(
effectsEngine
)
{
{
TrackHandler
::
nullOutput
=
new
LightVideoFrame
();
m_tracks
=
new
Toggleable
<
TrackWorkflow
*>
[
nbTracks
];
m_tracks
=
new
Toggleable
<
TrackWorkflow
*>
[
nbTracks
];
for
(
unsigned
int
i
=
0
;
i
<
nbTracks
;
++
i
)
for
(
unsigned
int
i
=
0
;
i
<
nbTracks
;
++
i
)
{
{
...
@@ -38,11 +43,11 @@ TrackHandler::TrackHandler( unsigned int nbTracks, TrackWorkflow::TrackType trac
...
@@ -38,11 +43,11 @@ TrackHandler::TrackHandler( unsigned int nbTracks, TrackWorkflow::TrackType trac
}
}
m_highestTrackNumberMutex
=
new
QMutex
;
m_highestTrackNumberMutex
=
new
QMutex
;
m_nbTracksToRenderMutex
=
new
QMutex
;
m_nbTracksToRenderMutex
=
new
QMutex
;
}
}
TrackHandler
::~
TrackHandler
()
TrackHandler
::~
TrackHandler
()
{
{
delete
nullOutput
;
delete
m_highestTrackNumberMutex
;
delete
m_highestTrackNumberMutex
;
delete
m_nbTracksToRenderMutex
;
delete
m_nbTracksToRenderMutex
;
...
@@ -288,11 +293,20 @@ void TrackHandler::tracksRenderCompleted( unsigned int trackId )
...
@@ -288,11 +293,20 @@ void TrackHandler::tracksRenderCompleted( unsigned int trackId )
{
{
QMutexLocker
lock
(
m_highestTrackNumberMutex
);
QMutexLocker
lock
(
m_highestTrackNumberMutex
);
unsigned
char
*
buff
=
m_tracks
[
trackId
]
->
getSynchroneOutput
();
if
(
m_trackType
==
TrackWorkflow
::
Video
)
if
(
m_highestTrackNumber
<=
trackId
&&
buff
!=
NULL
)
{
LightVideoFrame
*
buff
=
reinterpret_cast
<
LightVideoFrame
*>
(
m_tracks
[
trackId
]
->
getSynchroneOutput
()
);
if
(
buff
==
NULL
)
m_effectEngine
->
setInputFrame
(
*
TrackHandler
::
nullOutput
,
trackId
);
else
{
qDebug
()
<<
"About to feed effect engine with frame"
<<
(
void
*
)
buff
;
m_effectEngine
->
setInputFrame
(
*
buff
,
trackId
);
}
}
else
{
{
m_highestTrackNumber
=
trackId
;
qDebug
()
<<
"Audio isn't implemented yet !"
;
m_synchroneRenderingBuffer
=
buff
;;
}
}
}
}
//We check for minus or equal, since we can have 0 frame to compute,
//We check for minus or equal, since we can have 0 frame to compute,
...
...
src/Workflow/TrackHandler.h
View file @
59c560fb
...
@@ -26,13 +26,13 @@
...
@@ -26,13 +26,13 @@
#include <QObject>
#include <QObject>
#include "Toggleable.hpp"
#include "Toggleable.hpp"
#include "TrackWorkflow.h"
#include "TrackWorkflow.h"
#include "EffectsEngine.h"
class
TrackHandler
:
public
QObject
class
TrackHandler
:
public
QObject
{
{
Q_OBJECT
Q_OBJECT
public:
public:
TrackHandler
(
unsigned
int
nbTracks
,
TrackWorkflow
::
TrackType
trackType
);
TrackHandler
(
unsigned
int
nbTracks
,
TrackWorkflow
::
TrackType
trackType
,
EffectsEngine
*
effectsEngine
);
~
TrackHandler
();
~
TrackHandler
();
void
addClip
(
Clip
*
clip
,
unsigned
int
trackId
,
qint64
start
);
void
addClip
(
Clip
*
clip
,
unsigned
int
trackId
,
qint64
start
);
...
@@ -66,6 +66,7 @@ class TrackHandler : public QObject
...
@@ -66,6 +66,7 @@ class TrackHandler : public QObject
void
activateTrack
(
unsigned
int
tracKId
);
void
activateTrack
(
unsigned
int
tracKId
);
private:
private:
static
LightVideoFrame
*
nullOutput
;
Toggleable
<
TrackWorkflow
*>*
m_tracks
;
Toggleable
<
TrackWorkflow
*>*
m_tracks
;
unsigned
int
m_trackCount
;
unsigned
int
m_trackCount
;
QAtomicInt
m_nbTracksToPause
;
QAtomicInt
m_nbTracksToPause
;
...
@@ -84,6 +85,7 @@ class TrackHandler : public QObject
...
@@ -84,6 +85,7 @@ class TrackHandler : public QObject
* This is for internal synchronisation only.
* This is for internal synchronisation only.
*/
*/
bool
m_renderCompleted
;
bool
m_renderCompleted
;
EffectsEngine
*
m_effectEngine
;
private
slots
:
private
slots
:
...
...
src/Workflow/TrackWorkflow.cpp
View file @
59c560fb
...
@@ -461,7 +461,7 @@ void TrackWorkflow::clipWorkflowRenderCompleted( ClipWorkflow* cw )
...
@@ -461,7 +461,7 @@ void TrackWorkflow::clipWorkflowRenderCompleted( ClipWorkflow* cw )
// qDebug() << "Clip [" << QObject::sender() << "] render is completed on track" << m_trackId;
// qDebug() << "Clip [" << QObject::sender() << "] render is completed on track" << m_trackId;
if
(
cw
!=
NULL
)
if
(
cw
!=
NULL
)
{
{
m_synchroneRenderBuffer
=
reinterpret_cast
<
unsigned
char
*>
(
cw
->
getOutput
()
)
;
m_synchroneRenderBuffer
=
cw
->
getOutput
();
}
}
else
else
{
{
...
@@ -479,7 +479,7 @@ void TrackWorkflow::clipWorkflowRenderCompleted( ClipWorkflow* cw )
...
@@ -479,7 +479,7 @@ void TrackWorkflow::clipWorkflowRenderCompleted( ClipWorkflow* cw )
// qDebug() << "Track render not completed yet";
// qDebug() << "Track render not completed yet";
}
}
unsigned
char
*
TrackWorkflow
::
getSynchroneOutput
()
void
*
TrackWorkflow
::
getSynchroneOutput
()
{
{
return
m_synchroneRenderBuffer
;
return
m_synchroneRenderBuffer
;
}
}
...
...
src/Workflow/TrackWorkflow.h
View file @
59c560fb
...
@@ -73,7 +73,7 @@ class TrackWorkflow : public QObject
...
@@ -73,7 +73,7 @@ class TrackWorkflow : public QObject
/**
/**
* Returns the output that has been computed in synchrone mode.
* Returns the output that has been computed in synchrone mode.
*/
*/
unsigned
char
*
getSynchroneOutput
();
void
*
getSynchroneOutput
();
//FIXME: this won't be reliable as soon as we change the fps from the configuration
//FIXME: this won't be reliable as soon as we change the fps from the configuration
static
const
unsigned
int
nbFrameBeforePreload
=
60
;
static
const
unsigned
int
nbFrameBeforePreload
=
60
;
...
@@ -120,7 +120,7 @@ class TrackWorkflow : public QObject
...
@@ -120,7 +120,7 @@ class TrackWorkflow : public QObject
QAtomicInt
m_nbClipToUnpause
;
QAtomicInt
m_nbClipToUnpause
;
QAtomicInt
m_nbClipToRender
;
QAtomicInt
m_nbClipToRender
;
unsigned
char
*
m_synchroneRenderBuffer
;
void
*
m_synchroneRenderBuffer
;
TrackType
m_trackType
;
TrackType
m_trackType
;
...
...
src/Workflow/VideoClipWorkflow.cpp
View file @
59c560fb
...
@@ -81,7 +81,11 @@ void* VideoClipWorkflow::getOutput()
...
@@ -81,7 +81,11 @@ void* VideoClipWorkflow::getOutput()
QMutexLocker
lock
(
m_renderLock
);
QMutexLocker
lock
(
m_renderLock
);
if
(
isEndReached
()
==
true
)
if
(
isEndReached
()
==
true
)
{
qDebug
()
<<
"End reached is true, returning NULL"
;
return
NULL
;
return
NULL
;
}
qDebug
()
<<
"ptr:"
<<
(
void
*
)
m_buffer
;
return
m_buffer
;
return
m_buffer
;
}
}
...
@@ -90,7 +94,7 @@ void VideoClipWorkflow::lock( VideoClipWorkflow* cw, void** pp_ret, int size
...
@@ -90,7 +94,7 @@ void VideoClipWorkflow::lock( VideoClipWorkflow* cw, void** pp_ret, int size
Q_UNUSED
(
size
);
Q_UNUSED
(
size
);
cw
->
m_renderLock
->
lock
();
cw
->
m_renderLock
->
lock
();
*
pp_ret
=
(
*
(
cw
->
m_buffer
))
->
frame
.
pixels
;
*
pp_ret
=
(
*
(
cw
->
m_buffer
))
->
frame
.
pixels
;
//
qDebug() << '[' << (void*)cw << "] ClipWorkflow::lock";
qDebug
()
<<
'['
<<
(
void
*
)
cw
<<
"] ClipWorkflow::lock"
;
}
}
void
VideoClipWorkflow
::
unlock
(
VideoClipWorkflow
*
cw
,
void
*
buffer
,
int
width
,
int
height
,
int
bpp
,
int
size
)
void
VideoClipWorkflow
::
unlock
(
VideoClipWorkflow
*
cw
,
void
*
buffer
,
int
width
,
int
height
,
int
bpp
,
int
size
)
...
@@ -115,7 +119,7 @@ void VideoClipWorkflow::unlock( VideoClipWorkflow* cw, void* buffer, int widt
...
@@ -115,7 +119,7 @@ void VideoClipWorkflow::unlock( VideoClipWorkflow* cw, void* buffer, int widt
cw
->
m_renderWaitCond
->
wake
();
cw
->
m_renderWaitCond
->
wake
();
}
}
cw
->
emit
renderComplete
(
cw
);
cw
->
emit
renderComplete
(
cw
);
//
qDebug() << "Emmiting render completed";
qDebug
()
<<
"Emmiting render completed"
;
// qDebug() << "Entering cond wait";
// qDebug() << "Entering cond wait";
cw
->
m_waitCond
->
wait
(
cw
->
m_condMutex
);
cw
->
m_waitCond
->
wait
(
cw
->
m_condMutex
);
...
...
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