Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
67099af7
Commit
67099af7
authored
Feb 26, 2005
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* Allow all MJPEG fourcc
* Announce content-length * Allow boundary string customization
parent
29f9b9bf
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
10 deletions
+57
-10
modules/mux/mpjpeg.c
modules/mux/mpjpeg.c
+57
-10
No files found.
modules/mux/mpjpeg.c
View file @
67099af7
...
...
@@ -29,17 +29,27 @@
#include <vlc/vlc.h>
#include <vlc/sout.h>
#define SEPARATOR "\r\n--This Random String\r\n" \
"Content-Type: image/jpeg\r\n\r\n"
#define SEPARATOR_TEXT N_( "Multipart separator string" )
#define SEPARATOR_LONGTEXT N_( "Multipart strings like MPJPEG use a " \
"separator string betwen content pieces. "\
"You can select this string. Default is "\
"--myboundary" )
#define CONTENT_TYPE "Content-Type: image/jpeg"
/*****************************************************************************
* Module descriptor
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
#define SOUT_CFG_PREFIX "sout-mpjpeg-"
vlc_module_begin
();
set_description
(
_
(
"Multipart jpeg muxer"
)
);
set_capability
(
"sout mux"
,
5
);
add_string
(
SOUT_CFG_PREFIX
"separator"
,
"--myboundary"
,
NULL
,
SEPARATOR_TEXT
,
SEPARATOR_LONGTEXT
,
VLC_TRUE
);
set_category
(
CAT_SOUT
);
set_subcategory
(
SUBCAT_SOUT_MUX
);
set_callbacks
(
Open
,
Close
);
...
...
@@ -49,6 +59,8 @@ vlc_module_end();
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
static
const
char
*
ppsz_sout_options
[]
=
{
"separator"
,
NULL
};
static
int
Control
(
sout_mux_t
*
,
int
,
va_list
);
static
int
AddStream
(
sout_mux_t
*
,
sout_input_t
*
);
static
int
DelStream
(
sout_mux_t
*
,
sout_input_t
*
);
...
...
@@ -65,21 +77,31 @@ struct sout_mux_sys_t
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
{
int
i_size
;
sout_mux_t
*
p_mux
=
(
sout_mux_t
*
)
p_this
;
sout_mux_sys_t
*
p_sys
;
char
*
psz_separator_block
,
*
psz_separator
;
msg_Dbg
(
p_mux
,
"Multipart jpeg muxer opened"
);
p_sys
=
p_mux
->
p_sys
=
malloc
(
sizeof
(
sout_mux_sys_t
)
);
p_sys
->
b_send_headers
=
VLC_TRUE
;
psz_separator
=
var_CreateGetString
(
p_mux
,
SOUT_CFG_PREFIX
"separator"
);
i_size
=
strlen
(
psz_separator
)
+
2
+
2
+
2
+
strlen
(
CONTENT_TYPE
);
psz_separator_block
=
(
char
*
)
malloc
(
i_size
);
sprintf
(
psz_separator_block
,
"
\r\n
%s
\r\n
%s
\r\n
"
,
psz_separator
,
CONTENT_TYPE
);
p_sys
->
p_separator
=
block_New
(
p_mux
,
i_size
);
memcpy
(
p_sys
->
p_separator
->
p_buffer
,
psz_separator_block
,
i_size
);
if
(
psz_separator_block
)
free
(
psz_separator_block
);
p_mux
->
pf_control
=
Control
;
p_mux
->
pf_addstream
=
AddStream
;
p_mux
->
pf_delstream
=
DelStream
;
p_mux
->
pf_mux
=
Mux
;
p_sys
=
p_mux
->
p_sys
=
malloc
(
sizeof
(
sout_mux_sys_t
)
);
p_sys
->
b_send_headers
=
VLC_TRUE
;
p_sys
->
p_separator
=
block_New
(
p_mux
,
sizeof
(
SEPARATOR
)
-
1
);
memcpy
(
p_sys
->
p_separator
->
p_buffer
,
SEPARATOR
,
sizeof
(
SEPARATOR
)
-
1
);
return
VLC_SUCCESS
;
}
...
...
@@ -133,7 +155,13 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
}
msg_Dbg
(
p_mux
,
"adding input"
);
if
(
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
)
)
if
(
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'm'
,
'j'
,
'p'
,
'g'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'j'
,
'p'
,
'e'
,
'g'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'J'
,
'P'
,
'E'
,
'G'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'J'
,
'F'
,
'I'
,
'F'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'J'
,
'P'
,
'G'
,
'L'
)
&&
p_input
->
p_fmt
->
i_codec
!=
VLC_FOURCC
(
'm'
,
'j'
,
'p'
,
'a'
)
)
{
return
VLC_EGENERIC
;
}
...
...
@@ -152,14 +180,27 @@ static int Mux( sout_mux_t *p_mux )
block_fifo_t
*
p_fifo
;
sout_mux_sys_t
*
p_sys
=
p_mux
->
p_sys
;
int
i_count
;
/* Content-Length:.......\r\n */
char
psz_content_length
[
25
];
if
(
p_sys
->
b_send_headers
)
{
block_t
*
p_header
=
block_New
(
p_mux
,
sizeof
(
SEPARATOR
)
-
3
);
memcpy
(
p_header
->
p_buffer
,
&
SEPARATOR
[
2
],
sizeof
(
SEPARATOR
)
-
3
);
block_t
*
p_header
;
char
*
psz_separator
=
var_CreateGetString
(
p_mux
,
SOUT_CFG_PREFIX
"separator"
);
char
*
psz_separator_block
=
(
char
*
)
malloc
(
strlen
(
psz_separator
)
+
2
+
strlen
(
CONTENT_TYPE
)
);
sprintf
(
psz_separator_block
,
"%s
\r\n
%s
\r\n
"
,
psz_separator
,
CONTENT_TYPE
);
p_header
=
block_New
(
p_mux
,
strlen
(
psz_separator_block
)
);
memcpy
(
p_header
->
p_buffer
,
psz_separator_block
,
strlen
(
psz_separator_block
)
);
p_header
->
i_flags
|=
BLOCK_FLAG_HEADER
;
sout_AccessOutWrite
(
p_mux
->
p_access
,
p_header
);
p_sys
->
b_send_headers
=
VLC_FALSE
;
if
(
psz_separator_block
)
free
(
psz_separator_block
);
}
if
(
!
p_mux
->
i_nb_inputs
)
return
VLC_SUCCESS
;
...
...
@@ -168,9 +209,15 @@ static int Mux( sout_mux_t *p_mux )
i_count
=
p_fifo
->
i_depth
;
while
(
i_count
>
0
)
{
block_t
*
p_length
=
block_New
(
p_mux
,
25
);
block_t
*
p_data
=
block_FifoGet
(
p_fifo
);
sout_AccessOutWrite
(
p_mux
->
p_access
,
block_Duplicate
(
p_sys
->
p_separator
)
);
memset
(
psz_content_length
,
0
,
25
);
snprintf
(
psz_content_length
,
25
,
"Content-Length: %i
\r\n\r\n
"
,
p_data
->
i_buffer
);
memcpy
(
p_length
->
p_buffer
,
psz_content_length
,
25
);
sout_AccessOutWrite
(
p_mux
->
p_access
,
p_length
);
sout_AccessOutWrite
(
p_mux
->
p_access
,
p_data
);
i_count
--
;
...
...
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