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
68d60a4f
Commit
68d60a4f
authored
Apr 07, 2010
by
Hugo Beauzee-Luyssen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WorkflowRenderer: Updating code to work with modified imem.
parent
051fa09b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
37 deletions
+38
-37
src/Renderer/WorkflowFileRenderer.cpp
src/Renderer/WorkflowFileRenderer.cpp
+3
-3
src/Renderer/WorkflowFileRenderer.h
src/Renderer/WorkflowFileRenderer.h
+1
-1
src/Renderer/WorkflowRenderer.cpp
src/Renderer/WorkflowRenderer.cpp
+28
-29
src/Renderer/WorkflowRenderer.h
src/Renderer/WorkflowRenderer.h
+6
-4
No files found.
src/Renderer/WorkflowFileRenderer.cpp
View file @
68d60a4f
...
...
@@ -97,10 +97,10 @@ float WorkflowFileRenderer::getFps() const
}
int
WorkflowFileRenderer
::
lock
(
void
*
datas
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
)
WorkflowFileRenderer
::
lock
(
void
*
datas
,
const
char
*
cookie
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
)
{
int
ret
=
WorkflowRenderer
::
lock
(
datas
,
dts
,
pts
,
flags
,
bufferSize
,
buffer
);
int
ret
=
WorkflowRenderer
::
lock
(
datas
,
cookie
,
dts
,
pts
,
flags
,
bufferSize
,
buffer
);
EsHandler
*
handler
=
reinterpret_cast
<
EsHandler
*>
(
datas
);
WorkflowFileRenderer
*
self
=
static_cast
<
WorkflowFileRenderer
*>
(
handler
->
self
);
...
...
src/Renderer/WorkflowFileRenderer.h
View file @
68d60a4f
...
...
@@ -45,7 +45,7 @@ public:
void
run
(
const
QString
&
outputFileName
,
quint32
width
,
quint32
height
,
double
fps
,
quint32
vbitrate
,
quint32
abitrate
);
static
int
lock
(
void
*
datas
,
qint64
*
dts
,
qint64
*
pts
,
static
int
lock
(
void
*
datas
,
const
char
*
cookie
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
);
virtual
float
getFps
()
const
;
...
...
src/Renderer/WorkflowRenderer.cpp
View file @
68d60a4f
...
...
@@ -42,8 +42,7 @@ WorkflowRenderer::WorkflowRenderer() :
m_mainWorkflow
(
MainWorkflow
::
getInstance
()
),
m_stopping
(
false
),
m_outputFps
(
0.0
f
),
m_videoEsHandler
(
NULL
),
m_audioEsHandler
(
NULL
),
m_esHandler
(
NULL
),
m_oldLength
(
0
),
m_media
(
NULL
),
m_width
(
0
),
...
...
@@ -54,12 +53,8 @@ WorkflowRenderer::WorkflowRenderer() :
void
WorkflowRenderer
::
initializeRenderer
()
{
m_videoEsHandler
=
new
EsHandler
;
m_videoEsHandler
->
self
=
this
;
m_videoEsHandler
->
type
=
Video
;
m_audioEsHandler
=
new
EsHandler
;
m_audioEsHandler
->
self
=
this
;
m_audioEsHandler
->
type
=
Audio
;
m_esHandler
=
new
EsHandler
;
m_esHandler
->
self
=
this
;
m_nbChannels
=
2
;
m_rate
=
48000
;
...
...
@@ -76,10 +71,8 @@ WorkflowRenderer::~WorkflowRenderer()
{
killRenderer
();
if
(
m_videoEsHandler
)
delete
m_videoEsHandler
;
if
(
m_audioEsHandler
)
delete
m_audioEsHandler
;
if
(
m_esHandler
)
delete
m_esHandler
;
if
(
m_media
)
delete
m_media
;
if
(
m_silencedAudioBuffer
)
...
...
@@ -92,17 +85,15 @@ WorkflowRenderer::setupRenderer( quint32 width, quint32 height, double fps )
char
videoString
[
512
];
char
inputSlave
[
256
];
char
audioParameters
[
256
];
char
callbacks
[
64
];
char
buffer
[
64
];
m_audioEsHandler
->
fps
=
fps
;
m_videoEsHandler
->
fps
=
fps
;
m_esHandler
->
fps
=
fps
;
//Clean any previous render.
sprintf
(
videoString
,
"width=%i:height=%i:dar=%s:fps=%s:data=%"
PRId64
":codec=%s:cat=2:caching=0"
,
width
,
height
,
"16/9"
,
"30/1"
,
(
qint64
)
m_videoEsHandler
,
"RV24"
);
sprintf
(
audioParameters
,
"data=%"
PRId64
":cat=1:codec=f32l:samplerate=%u:channels=%u:caching=0"
,
(
qint64
)
m_audioEsHandler
,
m_rate
,
m_nbChannels
);
sprintf
(
videoString
,
"width=%i:height=%i:dar=%s:fps=%s:cookie=0:codec=%s:cat=2:caching=0"
,
width
,
height
,
"16/9"
,
"30/1"
,
"RV24"
);
sprintf
(
audioParameters
,
"cookie=1:cat=1:codec=f32l:samplerate=%u:channels=%u:caching=0"
,
m_rate
,
m_nbChannels
);
strcpy
(
inputSlave
,
":input-slave=imem://"
);
strcat
(
inputSlave
,
audioParameters
);
...
...
@@ -111,16 +102,18 @@ WorkflowRenderer::setupRenderer( quint32 width, quint32 height, double fps )
m_media
=
new
LibVLCpp
::
Media
(
"imem://"
+
QString
(
videoString
)
);
m_media
->
addOption
(
inputSlave
);
sprintf
(
callbacks
,
"imem-get=%lld"
,
(
qint64
)
getLockCallback
()
);
m_media
->
addOption
(
callbacks
);
sprintf
(
callbacks
,
":imem-release=%lld"
,
(
qint64
)
getUnlockCallback
()
);
m_media
->
addOption
(
callbacks
);
sprintf
(
buffer
,
"imem-get=%"
PRId64
,
(
qint64
)
getLockCallback
()
);
m_media
->
addOption
(
buffer
);
sprintf
(
buffer
,
":imem-release=%"
PRId64
,
(
qint64
)
getUnlockCallback
()
);
m_media
->
addOption
(
buffer
);
sprintf
(
buffer
,
":imem-data=%"
PRId64
,
(
qint64
)
m_esHandler
);
m_media
->
addOption
(
buffer
);
m_media
->
addOption
(
":text-renderer dummy"
);
}
int
WorkflowRenderer
::
lock
(
void
*
datas
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
)
WorkflowRenderer
::
lock
(
void
*
datas
,
const
char
*
cookie
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
)
{
int
ret
=
1
;
EsHandler
*
handler
=
reinterpret_cast
<
EsHandler
*>
(
datas
);
...
...
@@ -128,20 +121,26 @@ WorkflowRenderer::lock( void *datas, qint64 *dts, qint64 *pts, quint32 *flags,
*
dts
=
-
1
;
*
flags
=
0
;
if
(
handler
->
type
==
Video
)
if
(
cookie
==
NULL
||
(
cookie
[
0
]
!=
WorkflowRenderer
::
VideoCookie
&&
cookie
[
0
]
!=
WorkflowRenderer
::
AudioCookie
)
)
{
qCritical
()
<<
"Invalid imem input cookie"
;
return
ret
;
}
if
(
cookie
[
0
]
==
WorkflowRenderer
::
VideoCookie
)
{
ret
=
handler
->
self
->
lockVideo
(
handler
,
pts
,
bufferSize
,
buffer
);
if
(
paused
==
false
)
handler
->
self
->
m_mainWorkflow
->
nextFrame
(
MainWorkflow
::
VideoTrack
);
}
else
if
(
handler
->
type
==
Audio
)
else
if
(
cookie
[
0
]
==
WorkflowRenderer
::
AudioCookie
)
{
ret
=
handler
->
self
->
lockAudio
(
handler
,
pts
,
bufferSize
,
buffer
);
if
(
paused
==
false
)
handler
->
self
->
m_mainWorkflow
->
nextFrame
(
MainWorkflow
::
AudioTrack
);
}
else
qCritical
()
<<
"Invalid
ES typ
e"
;
qCritical
()
<<
"Invalid
imem cooki
e"
;
return
ret
;
}
...
...
src/Renderer/WorkflowRenderer.h
View file @
68d60a4f
...
...
@@ -53,6 +53,8 @@ class WorkflowRenderer : public GenericRenderer
Video
,
///< Video type
Subtitle
///< This is clearly not used by VLMC, but it fits imem module's model
};
static
const
quint8
VideoCookie
=
'0'
;
static
const
quint8
AudioCookie
=
'1'
;
/**
* \brief This struct will be the type of the callback parameter
* in the lock / unlock callbacks
...
...
@@ -60,7 +62,7 @@ class WorkflowRenderer : public GenericRenderer
struct
EsHandler
{
WorkflowRenderer
*
self
;
///< The 'this' pointer will be passed in this field
EsType
type
;
///< The elementary stream type
//Fixme: this should go away I guess...
double
fps
;
///< The fps to use for this rendering session.
};
...
...
@@ -178,13 +180,14 @@ class WorkflowRenderer : public GenericRenderer
*
* This callback will query the MainWorkflow for a frame or an audio sample
* \param data The callback data, this is most likely to be an EsHandler
* \param cookie The input identifier.
* \param dts Unused, but provided by imem
* \param pts The pts for the buffer that will be provided
* \param flags Unused but provided by imem
* \param bufferSize The size of the buffer that will be provided
* \param buffer The buffer itself.
*/
static
int
lock
(
void
*
data
,
qint64
*
dts
,
qint64
*
pts
,
static
int
lock
(
void
*
data
,
const
char
*
cookie
,
qint64
*
dts
,
qint64
*
pts
,
quint32
*
flags
,
size_t
*
bufferSize
,
void
**
buffer
);
/**
* \brief "Subcallback", for video frame injection
...
...
@@ -273,8 +276,7 @@ class WorkflowRenderer : public GenericRenderer
*/
quint8
*
m_silencedAudioBuffer
;
size_t
m_videoBuffSize
;
EsHandler
*
m_videoEsHandler
;
EsHandler
*
m_audioEsHandler
;
EsHandler
*
m_esHandler
;
quint32
m_nbChannels
;
quint32
m_rate
;
/**
...
...
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