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
e07a1121
Commit
e07a1121
authored
Jul 06, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/mux/wav.c: start of a WAV audio file muxer.
parent
bd6ee669
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
184 additions
and
1 deletion
+184
-1
configure.ac
configure.ac
+1
-1
modules/mux/Modules.am
modules/mux/Modules.am
+1
-0
modules/mux/wav.c
modules/mux/wav.c
+182
-0
No files found.
configure.ac
View file @
e07a1121
...
...
@@ -1139,7 +1139,7 @@ AC_ARG_ENABLE(sout,
if test "${enable_sout}" != "no"
then
VLC_ADD_PLUGINS([access_output_dummy access_output_udp access_output_file access_output_http])
VLC_ADD_PLUGINS([mux_ps mux_avi mux_mp4 mux_asf mux_dummy])
VLC_ADD_PLUGINS([mux_ps mux_avi mux_mp4 mux_asf mux_dummy
mux_wav
])
VLC_ADD_PLUGINS([packetizer_mpegvideo packetizer_h264])
VLC_ADD_PLUGINS([packetizer_mpeg4video packetizer_mpeg4audio])
VLC_ADD_PLUGINS([packetizer_copy])
...
...
modules/mux/Modules.am
View file @
e07a1121
...
...
@@ -3,3 +3,4 @@ SOURCES_mux_avi = avi.c
SOURCES_mux_ogg = ogg.c
SOURCES_mux_mp4 = mp4.c
SOURCES_mux_asf = asf.c
SOURCES_mux_wav = wav.c
modules/mux/wav.c
0 → 100644
View file @
e07a1121
/*****************************************************************************
* wav.c: wav muxer module for vlc
*****************************************************************************
* Copyright (C) 2004 VideoLAN
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h>
#include <vlc/vlc.h>
#include <vlc/sout.h>
#include "codecs.h"
/*****************************************************************************
* Module descriptor
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
vlc_module_begin
();
set_description
(
_
(
"WAV muxer"
)
);
set_capability
(
"sout mux"
,
5
);
set_callbacks
(
Open
,
Close
);
add_shortcut
(
"wav"
);
vlc_module_end
();
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
static
int
Capability
(
sout_mux_t
*
,
int
,
void
*
,
void
*
);
static
int
AddStream
(
sout_mux_t
*
,
sout_input_t
*
);
static
int
DelStream
(
sout_mux_t
*
,
sout_input_t
*
);
static
int
Mux
(
sout_mux_t
*
);
struct
sout_mux_sys_t
{
vlc_bool_t
b_used
;
vlc_bool_t
b_header
;
/* Wave header for the output data */
WAVEHEADER
waveheader
;
};
/*****************************************************************************
* Open:
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
{
sout_mux_t
*
p_mux
=
(
sout_mux_t
*
)
p_this
;
sout_mux_sys_t
*
p_sys
;
p_mux
->
pf_capacity
=
Capability
;
p_mux
->
pf_addstream
=
AddStream
;
p_mux
->
pf_delstream
=
DelStream
;
p_mux
->
pf_mux
=
Mux
;
p_mux
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
sout_mux_sys_t
)
);
p_sys
->
b_used
=
VLC_FALSE
;
p_sys
->
b_header
=
VLC_TRUE
;
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Close:
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
{
sout_mux_t
*
p_mux
=
(
sout_mux_t
*
)
p_this
;
sout_mux_sys_t
*
p_sys
=
p_mux
->
p_sys
;
free
(
p_sys
);
}
static
int
Capability
(
sout_mux_t
*
p_mux
,
int
i_query
,
void
*
p_args
,
void
*
p_answer
)
{
switch
(
i_query
)
{
case
SOUT_MUX_CAP_GET_ADD_STREAM_ANY_TIME
:
*
(
vlc_bool_t
*
)
p_answer
=
VLC_FALSE
;
return
SOUT_MUX_CAP_ERR_OK
;
default:
return
SOUT_MUX_CAP_ERR_UNIMPLEMENTED
;
}
}
static
int
AddStream
(
sout_mux_t
*
p_mux
,
sout_input_t
*
p_input
)
{
sout_mux_sys_t
*
p_sys
=
p_mux
->
p_sys
;
int
i_bytes_per_sample
;
if
(
p_input
->
p_fmt
->
i_cat
!=
AUDIO_ES
)
msg_Dbg
(
p_mux
,
"not an audio stream"
);
if
(
p_sys
->
b_used
)
{
msg_Dbg
(
p_mux
,
"can't add more than 1 stream"
);
return
VLC_EGENERIC
;
}
msg_Dbg
(
p_mux
,
"adding input %i channels, %iHz"
,
p_input
->
p_fmt
->
audio
.
i_channels
,
p_input
->
p_fmt
->
audio
.
i_rate
);
//p_input->p_fmt->i_codec;
/* Build a WAV header for the output data */
memset
(
&
p_sys
->
waveheader
,
0
,
sizeof
(
WAVEHEADER
)
);
SetWLE
(
&
p_sys
->
waveheader
.
Format
,
1
);
/*WAVE_FORMAT_PCM*/
SetWLE
(
&
p_sys
->
waveheader
.
BitsPerSample
,
16
);
p_sys
->
waveheader
.
MainChunkID
=
VLC_FOURCC
(
'R'
,
'I'
,
'F'
,
'F'
);
p_sys
->
waveheader
.
Length
=
0
;
/* we just don't know */
p_sys
->
waveheader
.
ChunkTypeID
=
VLC_FOURCC
(
'W'
,
'A'
,
'V'
,
'E'
);
p_sys
->
waveheader
.
SubChunkID
=
VLC_FOURCC
(
'f'
,
'm'
,
't'
,
' '
);
SetDWLE
(
&
p_sys
->
waveheader
.
SubChunkLength
,
16
);
SetWLE
(
&
p_sys
->
waveheader
.
Modus
,
p_input
->
p_fmt
->
audio
.
i_channels
);
SetDWLE
(
&
p_sys
->
waveheader
.
SampleFreq
,
p_input
->
p_fmt
->
audio
.
i_rate
);
i_bytes_per_sample
=
p_input
->
p_fmt
->
audio
.
i_channels
*
16
/*BitsPerSample*/
/
8
;
SetWLE
(
&
p_sys
->
waveheader
.
BytesPerSample
,
i_bytes_per_sample
);
SetDWLE
(
&
p_sys
->
waveheader
.
BytesPerSec
,
i_bytes_per_sample
*
p_input
->
p_fmt
->
audio
.
i_rate
);
p_sys
->
waveheader
.
DataChunkID
=
VLC_FOURCC
(
'd'
,
'a'
,
't'
,
'a'
);
p_sys
->
waveheader
.
DataLength
=
0
;
/* we just don't know */
p_sys
->
b_used
=
VLC_TRUE
;
return
VLC_SUCCESS
;
}
static
int
DelStream
(
sout_mux_t
*
p_mux
,
sout_input_t
*
p_input
)
{
msg_Dbg
(
p_mux
,
"removing input"
);
return
VLC_SUCCESS
;
}
static
int
Mux
(
sout_mux_t
*
p_mux
)
{
sout_mux_sys_t
*
p_sys
=
p_mux
->
p_sys
;
if
(
!
p_mux
->
i_nb_inputs
)
return
VLC_SUCCESS
;
if
(
p_sys
->
b_header
)
{
/* Return only the header */
block_t
*
p_block
=
block_New
(
p_mux
,
sizeof
(
WAVEHEADER
)
);
memcpy
(
p_block
->
p_buffer
,
&
p_sys
->
waveheader
,
sizeof
(
WAVEHEADER
)
);
msg_Dbg
(
p_mux
,
"writing header data"
);
sout_AccessOutWrite
(
p_mux
->
p_access
,
p_block
);
}
p_sys
->
b_header
=
VLC_FALSE
;
while
(
p_mux
->
pp_inputs
[
0
]
->
p_fifo
->
i_depth
>
0
)
{
block_t
*
p_block
=
block_FifoGet
(
p_mux
->
pp_inputs
[
0
]
->
p_fifo
);
sout_AccessOutWrite
(
p_mux
->
p_access
,
p_block
);
}
return
VLC_SUCCESS
;
}
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