Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
Commits
ec6c1502
Commit
ec6c1502
authored
Apr 22, 2003
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* mp4: more mov fields are parsed.
parent
1ddde2be
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
90 additions
and
19 deletions
+90
-19
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.c
+44
-9
modules/demux/mp4/libmp4.h
modules/demux/mp4/libmp4.h
+23
-9
modules/demux/mp4/mp4.c
modules/demux/mp4/mp4.c
+23
-1
No files found.
modules/demux/mp4/libmp4.c
View file @
ec6c1502
...
...
@@ -2,7 +2,7 @@
* libmp4.c : LibMP4 library for mp4 module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: libmp4.c,v 1.2
0 2003/04/16 16:32:42
fenrir Exp $
* $Id: libmp4.c,v 1.2
1 2003/04/22 08:51:27
fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -1208,6 +1208,23 @@ int MP4_ReadBox_sample_soun( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_soun
->
i_data_reference_index
);
/*
* XXX hack -> produce a copy of the nearly complete chunk
*/
if
(
i_read
>
0
)
{
p_box
->
data
.
p_sample_soun
->
i_qt_description
=
i_read
;
p_box
->
data
.
p_sample_soun
->
p_qt_description
=
malloc
(
i_read
);
memcpy
(
p_box
->
data
.
p_sample_soun
->
p_qt_description
,
p_peek
,
i_read
);
}
else
{
p_box
->
data
.
p_sample_soun
->
i_qt_description
=
0
;
p_box
->
data
.
p_sample_soun
->
p_qt_description
=
NULL
;
}
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_soun
->
i_qt_version
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_soun
->
i_qt_revision_level
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_soun
->
i_qt_vendor
);
...
...
@@ -1320,28 +1337,44 @@ int MP4_ReadBox_sample_vide( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_data_reference_index
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_predefined1
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_reserved2
);
for
(
i
=
0
;
i
<
3
;
i
++
)
/*
* XXX hack -> produce a copy of the nearly complete chunk
*/
if
(
i_read
>
0
)
{
p_box
->
data
.
p_sample_vide
->
i_qt_image_description
=
i_read
;
p_box
->
data
.
p_sample_vide
->
p_qt_image_description
=
malloc
(
i_read
);
memcpy
(
p_box
->
data
.
p_sample_vide
->
p_qt_image_description
,
p_peek
,
i_read
);
}
else
{
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_predefined2
[
i
]
);
p_box
->
data
.
p_sample_vide
->
i_qt_image_description
=
0
;
p_box
->
data
.
p_sample_vide
->
p_qt_image_description
=
NULL
;
}
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_qt_version
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_qt_revision_level
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_qt_vendor
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_qt_temporal_quality
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_qt_spatial_quality
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_width
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_height
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_horizresolution
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_vertresolution
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
reserved3
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
predefined3
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
qt_data_size
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
qt_frame_count
);
memcpy
(
&
p_box
->
data
.
p_sample_vide
->
i_compressorname
,
p_peek
,
32
);
p_peek
+=
32
;
i_read
-=
32
;
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_depth
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
predefined4
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_vide
->
i_
qt_color_table
);
MP4_SeekStream
(
p_stream
,
p_box
->
i_pos
+
MP4_BOX_HEADERSIZE
(
p_box
)
+
78
);
MP4_ReadBoxContainerRaw
(
p_stream
,
p_box
);
...
...
@@ -2098,11 +2131,13 @@ static struct
{
FOURCC_raw
,
MP4_ReadBox_sample_soun
,
MP4_FreeBox_Common
},
{
FOURCC_MAC3
,
MP4_ReadBox_sample_soun
,
MP4_FreeBox_Common
},
{
FOURCC_MAC6
,
MP4_ReadBox_sample_soun
,
MP4_FreeBox_Common
},
{
FOURCC_Qclp
,
MP4_ReadBox_sample_soun
,
MP4_FreeBox_Common
},
{
FOURCC_vide
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_mp4v
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_SVQ1
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_SVQ3
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_ZyGo
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_DIVX
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_h263
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
{
FOURCC_cvid
,
MP4_ReadBox_sample_vide
,
MP4_FreeBox_Common
},
...
...
modules/demux/mp4/libmp4.h
View file @
ec6c1502
...
...
@@ -2,7 +2,7 @@
* libmp4.h : LibMP4 library for mp4 module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: libmp4.h,v 1.
9 2003/03/13 16:09:20 hartman
Exp $
* $Id: libmp4.h,v 1.
10 2003/04/22 08:51:28 fenrir
Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -107,10 +107,12 @@
#define FOURCC_MAC6 VLC_FOURCC( 'M', 'A', 'C', '6' )
#define FOURCC_alaw VLC_FOURCC( 'a', 'l', 'a', 'w' )
#define FOURCC_ulaw VLC_FOURCC( 'u', 'l', 'a', 'w' )
#define FOURCC_Qclp VLC_FOURCC( 'Q', 'c', 'l', 'p' )
#define FOURCC_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' )
#define FOURCC_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' )
#define FOURCC_SVQ3 VLC_FOURCC( 'S', 'V', 'Q', '3' )
#define FOURCC_ZyGo VLC_FOURCC( 'Z', 'y', 'G', 'o' )
#define FOURCC_3IV1 VLC_FOURCC( '3', 'I', 'V', '1' )
#define FOURCC_3iv1 VLC_FOURCC( '3', 'i', 'v', '1' )
#define FOURCC_3IV2 VLC_FOURCC( '3', 'I', 'V', '2' )
...
...
@@ -365,6 +367,11 @@ typedef struct MP4_Box_data_sample_soun_s
uint32_t
i_bytes_per_packet
;
uint32_t
i_bytes_per_frame
;
uint32_t
i_bytes_per_sample
;
/* XXX hack */
int
i_qt_description
;
uint8_t
*
p_qt_description
;
}
MP4_Box_data_sample_soun_t
;
typedef
struct
MP4_Box_data_sample_vide_s
...
...
@@ -372,9 +379,12 @@ typedef struct MP4_Box_data_sample_vide_s
uint8_t
i_reserved1
[
6
];
uint16_t
i_data_reference_index
;
uint16_t
i_predefined1
;
uint16_t
i_reserved2
;
uint32_t
i_predefined2
[
3
];
uint16_t
i_qt_version
;
uint16_t
i_qt_revision_level
;
uint32_t
i_qt_vendor
;
uint32_t
i_qt_temporal_quality
;
uint32_t
i_qt_spatial_quality
;
int16_t
i_width
;
int16_t
i_height
;
...
...
@@ -382,14 +392,18 @@ typedef struct MP4_Box_data_sample_vide_s
uint32_t
i_horizresolution
;
uint32_t
i_vertresolution
;
uint32_t
i_
reserved3
;
uint16_t
i_
predefined3
;
uint32_t
i_
qt_data_size
;
uint16_t
i_
qt_frame_count
;
uint8_t
i_compressorname
[
32
];
int16_t
i_depth
;
int16_t
i_predefined4
;
int16_t
i_qt_color_table
;
/* XXX hack ImageDescription */
int
i_qt_image_description
;
uint8_t
*
p_qt_image_description
;
}
MP4_Box_data_sample_vide_t
;
typedef
struct
MP4_Box_data_sample_hint_s
...
...
modules/demux/mp4/mp4.c
View file @
ec6c1502
...
...
@@ -2,7 +2,7 @@
* mp4.c : MP4 file input module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: mp4.c,v 1.2
1 2003/04/14 03:23:30
fenrir Exp $
* $Id: mp4.c,v 1.2
2 2003/04/22 08:51:28
fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -445,6 +445,8 @@ static int MP4Demux( input_thread_t *p_input )
i_pos
=
MP4_GetTrackPos
(
&
track
);
//msg_Dbg( p_input, "stream %d size=%6d pos=%8lld", i_track, i_size, i_pos );
/* go,go go ! */
if
(
!
MP4_SeekAbsolute
(
p_input
,
i_pos
)
)
{
...
...
@@ -927,6 +929,26 @@ static int TrackCreateES ( input_thread_t *p_input,
p_decoder_specific_info
=
p_decconfig
->
p_decoder_specific_info
;
}
else
{
switch
(
p_sample
->
i_type
)
{
/* qt decoder, send the complete chunk */
case
VLC_FOURCC
(
'S'
,
'V'
,
'Q'
,
'3'
):
case
VLC_FOURCC
(
'Z'
,
'y'
,
'G'
,
'o'
):
i_decoder_specific_info_len
=
p_sample
->
data
.
p_sample_vide
->
i_qt_image_description
;
p_decoder_specific_info
=
p_sample
->
data
.
p_sample_vide
->
p_qt_image_description
;
break
;
case
VLC_FOURCC
(
'Q'
,
'D'
,
'M'
,
'C'
):
case
VLC_FOURCC
(
'Q'
,
'D'
,
'M'
,
'2'
):
case
VLC_FOURCC
(
'Q'
,
'c'
,
'l'
,
'p'
):
i_decoder_specific_info_len
=
p_sample
->
data
.
p_sample_soun
->
i_qt_description
;
p_decoder_specific_info
=
p_sample
->
data
.
p_sample_soun
->
p_qt_description
;
break
;
default:
break
;
}
}
#undef p_decconfig
...
...
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