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
0fc31527
Commit
0fc31527
authored
Jan 12, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/mux/mp4.c: improved mov support a bit.
parent
dd05490e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
108 additions
and
17 deletions
+108
-17
modules/mux/mp4.c
modules/mux/mp4.c
+108
-17
No files found.
modules/mux/mp4.c
View file @
0fc31527
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* mp4.c: mp4/mov muxer
* mp4.c: mp4/mov muxer
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001, 2002, 2003 VideoLAN
* Copyright (C) 2001, 2002, 2003 VideoLAN
* $Id: mp4.c,v 1.
7 2003/11/21 15:32:08 fenrir
Exp $
* $Id: mp4.c,v 1.
8 2004/01/12 20:19:55 gbazin
Exp $
*
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
*
...
@@ -282,6 +282,55 @@ static bo_t *GetESDS( mp4_stream_t *p_stream )
...
@@ -282,6 +282,55 @@ static bo_t *GetESDS( mp4_stream_t *p_stream )
return
esds
;
return
esds
;
}
}
static
bo_t
*
GetWaveTag
(
mp4_stream_t
*
p_stream
)
{
bo_t
*
wave
;
bo_t
*
box
;
wave
=
box_new
(
"wave"
);
box
=
box_new
(
"frma"
);
bo_add_fourcc
(
box
,
"mp4a"
);
box_fix
(
box
);
box_gather
(
wave
,
box
);
box
=
box_new
(
"mp4a"
);
bo_add_32be
(
box
,
0
);
box_fix
(
box
);
box_gather
(
wave
,
box
);
box
=
GetESDS
(
p_stream
);
box_fix
(
box
);
box_gather
(
wave
,
box
);
box
=
box_new
(
"srcq"
);
bo_add_32be
(
box
,
0x40
);
box_fix
(
box
);
box_gather
(
wave
,
box
);
box
=
box_new
(
" "
);
box_fix
(
box
);
box_gather
(
wave
,
box
);
box_fix
(
wave
);
return
wave
;
}
/* TODO: No idea about these values */
static
bo_t
*
GetSVQ3Tag
(
mp4_stream_t
*
p_stream
)
{
bo_t
*
smi
=
box_new
(
"SMI "
);
bo_add_fourcc
(
smi
,
"SEQH"
);
bo_add_32be
(
smi
,
0x5
);
bo_add_32be
(
smi
,
0xe2c0211d
);
bo_add_8
(
smi
,
0xc0
);
box_fix
(
smi
);
return
smi
;
}
/*****************************************************************************
/*****************************************************************************
* Close:
* Close:
*****************************************************************************/
*****************************************************************************/
...
@@ -628,7 +677,15 @@ static void Close( vlc_object_t * p_this )
...
@@ -628,7 +677,15 @@ static void Close( vlc_object_t * p_this )
bo_add_16be
(
soun
,
1
);
// data-reference-index
bo_add_16be
(
soun
,
1
);
// data-reference-index
/* SoundDescription */
/* SoundDescription */
bo_add_16be
(
soun
,
0
);
// version;
if
(
p_sys
->
b_mov
&&
p_stream
->
p_fmt
->
i_codec
==
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'a'
)
)
{
bo_add_16be
(
soun
,
1
);
// version 1;
}
else
{
bo_add_16be
(
soun
,
0
);
// version 0;
}
bo_add_16be
(
soun
,
0
);
// revision level (0)
bo_add_16be
(
soun
,
0
);
// revision level (0)
bo_add_32be
(
soun
,
0
);
// vendor
bo_add_32be
(
soun
,
0
);
// vendor
bo_add_16be
(
soun
,
p_stream
->
p_fmt
->
audio
.
i_channels
);
// channel-count
bo_add_16be
(
soun
,
p_stream
->
p_fmt
->
audio
.
i_channels
);
// channel-count
...
@@ -636,17 +693,35 @@ static void Close( vlc_object_t * p_this )
...
@@ -636,17 +693,35 @@ static void Close( vlc_object_t * p_this )
bo_add_16be
(
soun
,
-
2
);
// compression id
bo_add_16be
(
soun
,
-
2
);
// compression id
bo_add_16be
(
soun
,
0
);
// packet size (0)
bo_add_16be
(
soun
,
0
);
// packet size (0)
bo_add_16be
(
soun
,
p_stream
->
p_fmt
->
audio
.
i_rate
);
// sampleratehi
bo_add_16be
(
soun
,
p_stream
->
p_fmt
->
audio
.
i_rate
);
// sampleratehi
bo_add_16be
(
soun
,
0
);
// sampleratelo
bo_add_16be
(
soun
,
0
);
// sampleratelo
/* Extended data for SoundDescription V1 */
if
(
p_sys
->
b_mov
&&
p_stream
->
p_fmt
->
i_codec
==
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'a'
)
)
{
bo_add_32be
(
soun
,
p_stream
->
p_fmt
->
audio
.
i_frame_length
);
/* samples per packet */
bo_add_32be
(
soun
,
1536
);
/* bytes per packet */
bo_add_32be
(
soun
,
2
);
/* bytes per frame */
/* bytes per sample */
bo_add_32be
(
soun
,
2
/*p_stream->p_fmt->audio.i_bitspersample/8 */
);
}
/* add an ES Descriptor */
/* add an ES Descriptor */
if
(
b_mpeg4_hdr
)
if
(
b_mpeg4_hdr
)
{
{
bo_t
*
esds
;
bo_t
*
box
;
esds
=
GetESDS
(
p_stream
);
box_fix
(
esds
);
if
(
p_sys
->
b_mov
&&
box_gather
(
soun
,
esds
);
p_stream
->
p_fmt
->
i_codec
==
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'a'
)
)
{
box
=
GetWaveTag
(
p_stream
);
}
else
{
box
=
GetESDS
(
p_stream
);
}
box_fix
(
box
);
box_gather
(
soun
,
box
);
}
}
box_fix
(
soun
);
box_fix
(
soun
);
...
@@ -657,24 +732,24 @@ static void Close( vlc_object_t * p_this )
...
@@ -657,24 +732,24 @@ static void Close( vlc_object_t * p_this )
bo_t
*
vide
;
bo_t
*
vide
;
char
fcc
[
4
]
=
" "
;
char
fcc
[
4
]
=
" "
;
int
i
;
int
i
;
vlc_bool_t
b_mpeg4_hdr
;
switch
(
p_stream
->
p_fmt
->
i_codec
)
switch
(
p_stream
->
p_fmt
->
i_codec
)
{
{
case
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'v'
):
case
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'v'
):
case
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
):
case
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
):
memcpy
(
fcc
,
"mp4v"
,
4
);
memcpy
(
fcc
,
"mp4v"
,
4
);
b_mpeg4_hdr
=
VLC_TRUE
;
break
;
break
;
case
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
):
case
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
):
memcpy
(
fcc
,
"mjpa"
,
4
);
memcpy
(
fcc
,
"mjpa"
,
4
);
b_mpeg4_hdr
=
VLC_FALSE
;
break
;
case
VLC_FOURCC
(
'S'
,
'V'
,
'Q'
,
'3'
):
memcpy
(
fcc
,
"SVQ3"
,
4
);
break
;
break
;
default:
default:
memcpy
(
fcc
,
(
char
*
)
&
p_stream
->
p_fmt
->
i_codec
,
4
);
memcpy
(
fcc
,
(
char
*
)
&
p_stream
->
p_fmt
->
i_codec
,
4
);
b_mpeg4_hdr
=
VLC_FALSE
;
break
;
break
;
}
}
...
@@ -711,14 +786,29 @@ static void Close( vlc_object_t * p_this )
...
@@ -711,14 +786,29 @@ static void Close( vlc_object_t * p_this )
bo_add_16be
(
vide
,
0xffff
);
// predefined
bo_add_16be
(
vide
,
0xffff
);
// predefined
/* add an ES Descriptor */
/* add an ES Descriptor */
if
(
b_mpeg4_hdr
)
switch
(
p_stream
->
p_fmt
->
i_codec
)
{
{
bo_t
*
esds
;
case
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'v'
):
case
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
):
{
bo_t
*
esds
=
GetESDS
(
p_stream
);
esds
=
GetESDS
(
p_stream
);
box_fix
(
esds
);
box_gather
(
vide
,
esds
);
}
break
;
case
VLC_FOURCC
(
'S'
,
'V'
,
'Q'
,
'3'
):
{
bo_t
*
esds
=
GetSVQ3Tag
(
p_stream
);
box_fix
(
esds
);
box_gather
(
vide
,
esds
);
}
break
;
box_fix
(
esds
);
default:
b
ox_gather
(
vide
,
esds
)
;
b
reak
;
}
}
box_fix
(
vide
);
box_fix
(
vide
);
...
@@ -953,6 +1043,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
...
@@ -953,6 +1043,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
case
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
):
case
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
):
case
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
):
case
VLC_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
):
case
VLC_FOURCC
(
'm'
,
'j'
,
'p'
,
'b'
):
case
VLC_FOURCC
(
'm'
,
'j'
,
'p'
,
'b'
):
case
VLC_FOURCC
(
'S'
,
'V'
,
'Q'
,
'3'
):
break
;
break
;
default:
default:
msg_Err
(
p_mux
,
"unsupported codec %4.4s in mp4"
,
msg_Err
(
p_mux
,
"unsupported codec %4.4s in mp4"
,
...
...
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