Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
ba676907
Commit
ba676907
authored
Sep 23, 2009
by
Hugo Beauzee-Luyssen
Committed by
Rémi Denis-Courmont
Sep 25, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding a invmem-chroma option
Signed-off-by:
Rémi Denis-Courmont
<
remi@remlab.net
>
parent
608c0306
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
11 deletions
+69
-11
modules/codec/invmem.c
modules/codec/invmem.c
+69
-11
No files found.
modules/codec/invmem.c
View file @
ba676907
...
...
@@ -67,12 +67,17 @@ static picture_t *DecodeBlock ( decoder_t *, block_t ** );
#define T_DATA N_( "Callback data" )
#define LT_DATA N_( "Data for the locking and unlocking functions" )
#define T_CHROMA N_("Chroma")
#define LT_CHROMA N_("Output chroma for the memory image as a 4-character " \
"string, eg. \"RV32\".")
#define INVMEM_HELP N_( "This module make possible making video stream from raw-image " \
"generating (to memory) from rendering program uses libvlc. " \
"To use this module from libvlc set --codec to invmem, "\
"set all --invmem-* options in vlc_argv an use " \
"libvlc_media_new(libvlc, \"fake://\", &ex);. " \
"Besides is simillar to vmem video output module." )
vlc_module_begin
()
set_category
(
CAT_INPUT
)
set_subcategory
(
SUBCAT_INPUT_VCODEC
)
...
...
@@ -88,6 +93,7 @@ vlc_module_begin()
add_string
(
"invmem-lock"
,
"0"
,
NULL
,
T_LOCK
,
LT_LOCK
,
true
)
add_string
(
"invmem-unlock"
,
"0"
,
NULL
,
T_UNLOCK
,
LT_UNLOCK
,
true
)
add_string
(
"invmem-data"
,
"0"
,
NULL
,
T_DATA
,
LT_DATA
,
true
)
add_string
(
"invmem-chroma"
,
"RV24"
,
NULL
,
T_CHROMA
,
LT_CHROMA
,
true
)
vlc_module_end
()
...
...
@@ -101,6 +107,8 @@ struct decoder_sys_t
int
i_height
;
int
i_pitch
;
vlc_fourcc_t
i_chroma
;
picture_t
*
p_pic
;
};
...
...
@@ -113,6 +121,7 @@ static int OpenDecoder( vlc_object_t *p_this )
decoder_t
*
p_dec
=
(
decoder_t
*
)
p_this
;
decoder_sys_t
*
p_sys
;
char
*
psz_tmp
;
int
pitch
;
if
(
p_dec
->
fmt_in
.
i_codec
!=
VLC_FOURCC
(
'f'
,
'a'
,
'k'
,
'e'
))
{
...
...
@@ -123,14 +132,14 @@ static int OpenDecoder( vlc_object_t *p_this )
if
(
(
p_dec
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
decoder_sys_t
))
)
==
NULL
)
return
VLC_ENOMEM
;
// get parametrs
// get parameters
char
*
chromaStr
=
var_CreateGetString
(
p_dec
,
"invmem-chroma"
);
p_sys
->
i_width
=
var_CreateGetInteger
(
p_this
,
"invmem-width"
);
p_sys
->
i_height
=
var_CreateGetInteger
(
p_this
,
"invmem-height"
);
if
(
p_sys
->
i_width
==
0
||
p_sys
->
i_height
==
0
)
{
msg_Err
(
p_dec
,
"--invmem-width and --invmem-height must be > 0"
);
free
(
p_sys
);
return
VLC_EGENERIC
;
goto
error
;
}
psz_tmp
=
var_CreateGetString
(
p_dec
,
"invmem-lock"
);
...
...
@@ -148,22 +157,67 @@ static int OpenDecoder( vlc_object_t *p_this )
if
(
!
p_sys
->
pf_lock
||
!
p_sys
->
pf_unlock
)
{
msg_Err
(
p_dec
,
"Invalid lock or unlock callbacks"
);
free
(
p_sys
);
return
VLC_EGENERIC
;
goto
error
;
}
if
(
chromaStr
==
NULL
)
{
msg_Err
(
p_dec
,
"Invalid invmem-chroma string."
);
goto
error
;
}
const
vlc_fourcc_t
chroma
=
vlc_fourcc_GetCodecFromString
(
VIDEO_ES
,
chromaStr
);
if
(
!
chroma
)
{
msg_Err
(
p_dec
,
"invmem-chroma should be 4 characters long."
);
goto
error
;
}
/* Set output properties */
//p_dec->fmt_out.i_codec = VLC_CODEC_RGBA;
p_dec
->
fmt_out
.
i_codec
=
VLC_CODEC_RGB24
;
p_dec
->
fmt_out
.
video
.
i_width
=
p_dec
->
p_sys
->
i_width
;
p_dec
->
fmt_out
.
video
.
i_height
=
p_dec
->
p_sys
->
i_height
;
p_dec
->
fmt_out
.
video
.
i_aspect
=
VOUT_ASPECT_FACTOR
*
p_dec
->
p_sys
->
i_width
/
p_dec
->
p_sys
->
i_height
;
switch
(
chroma
)
{
case
VLC_CODEC_RGB15
:
p_dec
->
fmt_out
.
video
.
i_rmask
=
0x001f
;
p_dec
->
fmt_out
.
video
.
i_gmask
=
0x03e0
;
p_dec
->
fmt_out
.
video
.
i_bmask
=
0x7c00
;
pitch
=
p_sys
->
i_width
*
2
;
break
;
case
VLC_CODEC_RGB16
:
p_dec
->
fmt_out
.
video
.
i_rmask
=
0x001f
;
p_dec
->
fmt_out
.
video
.
i_gmask
=
0x07e0
;
p_dec
->
fmt_out
.
video
.
i_bmask
=
0xf800
;
pitch
=
p_sys
->
i_width
*
2
;
break
;
case
VLC_CODEC_RGB24
:
p_dec
->
fmt_out
.
video
.
i_rmask
=
0xff0000
;
p_dec
->
fmt_out
.
video
.
i_gmask
=
0x00ff00
;
p_dec
->
fmt_out
.
video
.
i_bmask
=
0x0000ff
;
pitch
=
p_sys
->
i_width
*
3
;
break
;
case
VLC_CODEC_RGB32
:
p_dec
->
fmt_out
.
video
.
i_rmask
=
0xff0000
;
p_dec
->
fmt_out
.
video
.
i_gmask
=
0x00ff00
;
p_dec
->
fmt_out
.
video
.
i_bmask
=
0x0000ff
;
pitch
=
p_sys
->
i_width
*
4
;
break
;
default:
p_dec
->
fmt_out
.
video
.
i_rmask
=
0
;
p_dec
->
fmt_out
.
video
.
i_gmask
=
0
;
p_dec
->
fmt_out
.
video
.
i_bmask
=
0
;
pitch
=
0
;
msg_Warn
(
p_dec
,
"Unknown chroma %s"
,
chromaStr
);
goto
error
;
}
free
(
chromaStr
);
p_dec
->
fmt_out
.
i_codec
=
chroma
;
p_dec
->
fmt_out
.
video
.
i_width
=
p_dec
->
p_sys
->
i_width
;
p_dec
->
fmt_out
.
video
.
i_height
=
p_dec
->
p_sys
->
i_height
;
p_dec
->
fmt_out
.
video
.
i_aspect
=
VOUT_ASPECT_FACTOR
*
p_dec
->
p_sys
->
i_width
/
p_dec
->
p_sys
->
i_height
;
p_dec
->
fmt_out
.
i_cat
=
VIDEO_ES
;
p_sys
->
i_pitch
=
p
_sys
->
i_width
*
3
+
p_sys
->
i_width
%
4
;
p_sys
->
i_pitch
=
p
itch
;
p_sys
->
p_pic
=
NULL
;
...
...
@@ -171,6 +225,10 @@ static int OpenDecoder( vlc_object_t *p_this )
p_dec
->
pf_decode_video
=
DecodeBlock
;
return
VLC_SUCCESS
;
error:
free
(
p_sys
);
free
(
chromaStr
);
return
VLC_EGENERIC
;
}
/****************************************************************************
...
...
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