Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
Icecast-Server
Commits
af238d91
Commit
af238d91
authored
Nov 21, 2015
by
Joseph Wallace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move MKV element magic values into proper #define constants.
parent
d394a244
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
17 deletions
+30
-17
src/format_ebml.c
src/format_ebml.c
+30
-17
No files found.
src/format_ebml.c
View file @
af238d91
...
@@ -42,6 +42,27 @@
...
@@ -42,6 +42,27 @@
/* A value that no EBML var-int is allowed to take. */
/* A value that no EBML var-int is allowed to take. */
#define EBML_UNKNOWN ((unsigned long long) -1)
#define EBML_UNKNOWN ((unsigned long long) -1)
/* The magic numbers for each element we are interested in.
* Defined here:
* http://www.matroska.org/technical/specs/index.html
* http://www.webmproject.org/docs/container/
*
* Some of the higher-level elements have 4-byte identifiers;
* The lower-level elements have 1-byte identifiers.
*/
#define UNCOMMON_MAGIC_LEN 4
#define SEGMENT_MAGIC "\x18\x53\x80\x67"
#define CLUSTER_MAGIC "\x1F\x43\xB6\x75"
#define TRACKS_MAGIC "\x16\x54\xAE\x6B"
#define COMMON_MAGIC_LEN 1
#define TRACK_ENTRY_MAGIC "\xAE"
#define TRACK_NUMBER_MAGIC "\xD7"
#define TRACK_TYPE_MAGIC "\x83"
#define SIMPLE_BLOCK_MAGIC "\xA3"
typedef
enum
ebml_read_mode
{
typedef
enum
ebml_read_mode
{
EBML_STATE_READING_HEADER
=
0
,
EBML_STATE_READING_HEADER
=
0
,
EBML_STATE_READING_CLUSTERS
EBML_STATE_READING_CLUSTERS
...
@@ -550,14 +571,6 @@ static int ebml_wrote(ebml_t *ebml, int len)
...
@@ -550,14 +571,6 @@ static int ebml_wrote(ebml_t *ebml, int len)
unsigned
char
flags
;
unsigned
char
flags
;
int
copy_state
;
int
copy_state
;
char
*
segment_id
=
"
\x18\x53\x80\x67
"
;
char
*
cluster_id
=
"
\x1F\x43\xB6\x75
"
;
char
*
tracks_id
=
"
\x16\x54\xAE\x6B
"
;
char
*
track_entry_id
=
"
\xAE
"
;
char
*
track_number_id
=
"
\xD7
"
;
char
*
track_type_id
=
"
\x83
"
;
char
*
simple_block_id
=
"
\xA3
"
;
ebml
->
input_position
+=
len
;
ebml
->
input_position
+=
len
;
end_of_buffer
=
ebml
->
input_buffer
+
ebml
->
input_position
;
end_of_buffer
=
ebml
->
input_buffer
+
ebml
->
input_position
;
...
@@ -587,16 +600,16 @@ static int ebml_wrote(ebml_t *ebml, int len)
...
@@ -587,16 +600,16 @@ static int ebml_wrote(ebml_t *ebml, int len)
}
}
/* Recognize tags of interest */
/* Recognize tags of interest */
if
(
tag_length
>
4
)
{
if
(
tag_length
>
UNCOMMON_MAGIC_LEN
)
{
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
cluster_id
,
4
))
{
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
CLUSTER_MAGIC
,
UNCOMMON_MAGIC_LEN
))
{
/* Found a Cluster */
/* Found a Cluster */
ebml
->
parse_state
=
EBML_STATE_START_CLUSTER
;
ebml
->
parse_state
=
EBML_STATE_START_CLUSTER
;
break
;
break
;
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
segment_id
,
4
))
{
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
SEGMENT_MAGIC
,
UNCOMMON_MAGIC_LEN
))
{
/* Parse all Segment children */
/* Parse all Segment children */
payload_length
=
0
;
payload_length
=
0
;
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
tracks_id
,
4
))
{
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
TRACKS_MAGIC
,
UNCOMMON_MAGIC_LEN
))
{
/* Parse all Tracks children */
/* Parse all Tracks children */
payload_length
=
0
;
payload_length
=
0
;
...
@@ -604,8 +617,8 @@ static int ebml_wrote(ebml_t *ebml, int len)
...
@@ -604,8 +617,8 @@ static int ebml_wrote(ebml_t *ebml, int len)
}
}
if
(
tag_length
>
1
)
{
if
(
tag_length
>
COMMON_MAGIC_LEN
)
{
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
simple_block_id
,
1
))
{
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
SIMPLE_BLOCK_MAGIC
,
COMMON_MAGIC_LEN
))
{
/* Probe SimpleBlock header for the keyframe status */
/* Probe SimpleBlock header for the keyframe status */
if
(
ebml
->
cluster_starts_with_keyframe
==
EBML_KEYFRAME_UNKNOWN
)
{
if
(
ebml
->
cluster_starts_with_keyframe
==
EBML_KEYFRAME_UNKNOWN
)
{
track_number_length
=
ebml_parse_var_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
track_number_length
=
ebml_parse_var_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
...
@@ -640,13 +653,13 @@ static int ebml_wrote(ebml_t *ebml, int len)
...
@@ -640,13 +653,13 @@ static int ebml_wrote(ebml_t *ebml, int len)
}
}
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
track_entry_id
,
1
))
{
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
TRACK_ENTRY_MAGIC
,
COMMON_MAGIC_LEN
))
{
/* Parse all TrackEntry children; reset the state */
/* Parse all TrackEntry children; reset the state */
payload_length
=
0
;
payload_length
=
0
;
ebml
->
parsing_track_number
=
EBML_UNKNOWN
;
ebml
->
parsing_track_number
=
EBML_UNKNOWN
;
ebml
->
parsing_track_is_video
=
0
;
ebml
->
parsing_track_is_video
=
0
;
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
track_number_id
,
1
))
{
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
TRACK_NUMBER_MAGIC
,
COMMON_MAGIC_LEN
))
{
/* Probe TrackNumber for value */
/* Probe TrackNumber for value */
value_length
=
ebml_parse_sized_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
value_length
=
ebml_parse_sized_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
end_of_buffer
,
payload_length
,
0
,
&
data_value
);
end_of_buffer
,
payload_length
,
0
,
&
data_value
);
...
@@ -661,7 +674,7 @@ static int ebml_wrote(ebml_t *ebml, int len)
...
@@ -661,7 +674,7 @@ static int ebml_wrote(ebml_t *ebml, int len)
ebml_check_track
(
ebml
);
ebml_check_track
(
ebml
);
}
}
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
track_type_id
,
1
))
{
}
else
if
(
!
memcmp
(
ebml
->
input_buffer
+
cursor
,
TRACK_TYPE_MAGIC
,
COMMON_MAGIC_LEN
))
{
/* Probe TrackType for a video flag */
/* Probe TrackType for a video flag */
value_length
=
ebml_parse_sized_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
value_length
=
ebml_parse_sized_int
(
ebml
->
input_buffer
+
cursor
+
tag_length
,
end_of_buffer
,
payload_length
,
0
,
&
data_value
);
end_of_buffer
,
payload_length
,
0
,
&
data_value
);
...
...
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