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
95777ade
Commit
95777ade
authored
Nov 18, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cosmetics.
parent
9236f9f6
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
44 deletions
+52
-44
modules/demux/ogg.c
modules/demux/ogg.c
+52
-44
No files found.
modules/demux/ogg.c
View file @
95777ade
...
@@ -86,14 +86,14 @@ typedef struct logical_stream_s
...
@@ -86,14 +86,14 @@ typedef struct logical_stream_s
mtime_t
i_previous_pcr
;
mtime_t
i_previous_pcr
;
/* Misc */
/* Misc */
int
b_reinit
;
bool
b_reinit
;
int
i_granule_shift
;
int
i_granule_shift
;
/* kate streams have the number of headers in the ID header */
/* kate streams have the number of headers in the ID header */
int
i_kate_num_headers
;
int
i_kate_num_headers
;
/* for Annodex logical bitstreams */
/* for Annodex logical bitstreams */
int
secondary_header_packets
;
int
i_
secondary_header_packets
;
}
logical_stream_t
;
}
logical_stream_t
;
...
@@ -312,12 +312,11 @@ static int Demux( demux_t * p_demux )
...
@@ -312,12 +312,11 @@ static int Demux( demux_t * p_demux )
* Demux an ogg page from the stream
* Demux an ogg page from the stream
*/
*/
if
(
Ogg_ReadPage
(
p_demux
,
&
oggpage
)
!=
VLC_SUCCESS
)
if
(
Ogg_ReadPage
(
p_demux
,
&
oggpage
)
!=
VLC_SUCCESS
)
{
return
0
;
/* EOF */
return
0
;
/* EOF */
}
/* Test for End of Stream */
/* Test for End of Stream */
if
(
ogg_page_eos
(
&
oggpage
)
)
p_sys
->
i_eos
++
;
if
(
ogg_page_eos
(
&
oggpage
)
)
p_sys
->
i_eos
++
;
}
}
...
@@ -335,25 +334,25 @@ static int Demux( demux_t * p_demux )
...
@@ -335,25 +334,25 @@ static int Demux( demux_t * p_demux )
while
(
ogg_stream_packetout
(
&
p_stream
->
os
,
&
oggpacket
)
>
0
)
while
(
ogg_stream_packetout
(
&
p_stream
->
os
,
&
oggpacket
)
>
0
)
{
{
/* Read info from any secondary header packets, if there are any */
/* Read info from any secondary header packets, if there are any */
if
(
p_stream
->
secondary_header_packets
>
0
)
if
(
p_stream
->
i_
secondary_header_packets
>
0
)
{
{
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
't'
,
'h'
,
'e'
,
'o'
)
&&
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
't'
,
'h'
,
'e'
,
'o'
)
&&
oggpacket
.
bytes
>=
7
&&
oggpacket
.
bytes
>=
7
&&
!
memcmp
(
oggpacket
.
packet
,
"
\x80
theora"
,
7
)
)
!
memcmp
(
oggpacket
.
packet
,
"
\x80
theora"
,
7
)
)
{
{
Ogg_ReadTheoraHeader
(
p_stream
,
&
oggpacket
);
Ogg_ReadTheoraHeader
(
p_stream
,
&
oggpacket
);
p_stream
->
secondary_header_packets
=
0
;
p_stream
->
i_
secondary_header_packets
=
0
;
}
}
else
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
'v'
,
'o'
,
'r'
,
'b'
)
&&
else
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
'v'
,
'o'
,
'r'
,
'b'
)
&&
oggpacket
.
bytes
>=
7
&&
oggpacket
.
bytes
>=
7
&&
!
memcmp
(
oggpacket
.
packet
,
"
\x01
vorbis"
,
7
)
)
!
memcmp
(
oggpacket
.
packet
,
"
\x01
vorbis"
,
7
)
)
{
{
Ogg_ReadVorbisHeader
(
p_stream
,
&
oggpacket
);
Ogg_ReadVorbisHeader
(
p_stream
,
&
oggpacket
);
p_stream
->
secondary_header_packets
=
0
;
p_stream
->
i_
secondary_header_packets
=
0
;
}
}
else
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
'c'
,
'm'
,
'm'
,
'l'
)
)
else
if
(
p_stream
->
fmt
.
i_codec
==
VLC_FOURCC
(
'c'
,
'm'
,
'm'
,
'l'
)
)
{
{
p_stream
->
secondary_header_packets
=
0
;
p_stream
->
i_
secondary_header_packets
=
0
;
}
}
}
}
...
@@ -365,7 +364,7 @@ static int Demux( demux_t * p_demux )
...
@@ -365,7 +364,7 @@ static int Demux( demux_t * p_demux )
if
(
p_stream
->
i_pcr
>=
0
)
if
(
p_stream
->
i_pcr
>=
0
)
{
{
p_stream
->
b_reinit
=
0
;
p_stream
->
b_reinit
=
false
;
}
}
else
else
{
{
...
@@ -395,16 +394,14 @@ static int Demux( demux_t * p_demux )
...
@@ -395,16 +394,14 @@ static int Demux( demux_t * p_demux )
}
}
if
(
!
p_sys
->
b_page_waiting
)
if
(
!
p_sys
->
b_page_waiting
)
{
break
;
break
;
}
}
}
/* if a page was waiting, it's now processed */
/* if a page was waiting, it's now processed */
p_sys
->
b_page_waiting
=
false
;
p_sys
->
b_page_waiting
=
false
;
i_stream
=
0
;
p_sys
->
i_pcr
=
-
1
;
p_sys
->
i_pcr
=
-
1
;
for
(
;
i_stream
<
p_sys
->
i_streams
;
i_stream
++
)
for
(
i_stream
=
0
;
i_stream
<
p_sys
->
i_streams
;
i_stream
++
)
{
{
logical_stream_t
*
p_stream
=
p_sys
->
pp_stream
[
i_stream
];
logical_stream_t
*
p_stream
=
p_sys
->
pp_stream
[
i_stream
];
...
@@ -418,9 +415,7 @@ static int Demux( demux_t * p_demux )
...
@@ -418,9 +415,7 @@ static int Demux( demux_t * p_demux )
}
}
if
(
p_sys
->
i_pcr
>=
0
)
if
(
p_sys
->
i_pcr
>=
0
)
{
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_PCR
,
p_sys
->
i_pcr
);
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_PCR
,
p_sys
->
i_pcr
);
}
return
1
;
return
1
;
}
}
...
@@ -464,13 +459,14 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
...
@@ -464,13 +459,14 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
logical_stream_t
*
p_stream
=
p_sys
->
pp_stream
[
i
];
logical_stream_t
*
p_stream
=
p_sys
->
pp_stream
[
i
];
/* we'll trash all the data until we find the next pcr */
/* we'll trash all the data until we find the next pcr */
p_stream
->
b_reinit
=
1
;
p_stream
->
b_reinit
=
true
;
p_stream
->
i_pcr
=
-
1
;
p_stream
->
i_pcr
=
-
1
;
p_stream
->
i_interpolated_pcr
=
-
1
;
p_stream
->
i_interpolated_pcr
=
-
1
;
ogg_stream_reset
(
&
p_stream
->
os
);
ogg_stream_reset
(
&
p_stream
->
os
);
}
}
ogg_sync_reset
(
&
p_sys
->
oy
);
ogg_sync_reset
(
&
p_sys
->
oy
);
/* suspicious lack of break - reading the code, I believe it's intended though */
/* XXX The break/return is missing on purpose as
* demux_vaControlHelper will do the last part of the job */
default:
default:
return
demux_vaControlHelper
(
p_demux
->
s
,
0
,
-
1
,
p_sys
->
i_bitrate
,
return
demux_vaControlHelper
(
p_demux
->
s
,
0
,
-
1
,
p_sys
->
i_bitrate
,
...
@@ -888,7 +884,7 @@ static int Ogg_FindLogicalStreams( demux_t *p_demux )
...
@@ -888,7 +884,7 @@ static int Ogg_FindLogicalStreams( demux_t *p_demux )
memset
(
p_stream
,
0
,
sizeof
(
logical_stream_t
)
);
memset
(
p_stream
,
0
,
sizeof
(
logical_stream_t
)
);
p_stream
->
p_headers
=
0
;
p_stream
->
p_headers
=
0
;
p_stream
->
secondary_header_packets
=
0
;
p_stream
->
i_
secondary_header_packets
=
0
;
es_format_Init
(
&
p_stream
->
fmt
,
0
,
0
);
es_format_Init
(
&
p_stream
->
fmt
,
0
,
0
);
es_format_Init
(
&
p_stream
->
fmt_old
,
0
,
0
);
es_format_Init
(
&
p_stream
->
fmt_old
,
0
,
0
);
...
@@ -1359,7 +1355,7 @@ static int Ogg_BeginningOfStream( demux_t *p_demux )
...
@@ -1359,7 +1355,7 @@ static int Ogg_BeginningOfStream( demux_t *p_demux )
p_stream
->
i_pcr
=
p_stream
->
i_previous_pcr
=
p_stream
->
i_pcr
=
p_stream
->
i_previous_pcr
=
p_stream
->
i_interpolated_pcr
=
-
1
;
p_stream
->
i_interpolated_pcr
=
-
1
;
p_stream
->
b_reinit
=
0
;
p_stream
->
b_reinit
=
false
;
}
}
if
(
p_ogg
->
p_old_stream
)
if
(
p_ogg
->
p_old_stream
)
...
@@ -1579,7 +1575,10 @@ static void Ogg_ReadFlacHeader( demux_t *p_demux, logical_stream_t *p_stream,
...
@@ -1579,7 +1575,10 @@ static void Ogg_ReadFlacHeader( demux_t *p_demux, logical_stream_t *p_stream,
msg_Dbg
(
p_demux
,
"FLAC header, channels: %i, rate: %i"
,
msg_Dbg
(
p_demux
,
"FLAC header, channels: %i, rate: %i"
,
p_stream
->
fmt
.
audio
.
i_channels
,
(
int
)
p_stream
->
f_rate
);
p_stream
->
fmt
.
audio
.
i_channels
,
(
int
)
p_stream
->
f_rate
);
}
}
else
msg_Dbg
(
p_demux
,
"FLAC STREAMINFO metadata too short"
);
else
{
msg_Dbg
(
p_demux
,
"FLAC STREAMINFO metadata too short"
);
}
/* Fake this as the last metadata block */
/* Fake this as the last metadata block */
*
((
uint8_t
*
)
p_oggpacket
->
packet
)
|=
0x80
;
*
((
uint8_t
*
)
p_oggpacket
->
packet
)
|=
0x80
;
...
@@ -1619,27 +1618,27 @@ static void Ogg_ReadKateHeader( logical_stream_t *p_stream,
...
@@ -1619,27 +1618,27 @@ static void Ogg_ReadKateHeader( logical_stream_t *p_stream,
p_stream
->
f_rate
=
(
double
)
gnum
/
gden
;
p_stream
->
f_rate
=
(
double
)
gnum
/
gden
;
p_stream
->
fmt
.
psz_language
=
malloc
(
16
);
p_stream
->
fmt
.
psz_language
=
malloc
(
16
);
if
(
p_stream
->
fmt
.
psz_language
)
if
(
p_stream
->
fmt
.
psz_language
)
{
{
for
(
n
=
0
;
n
<
16
;
++
n
)
for
(
n
=
0
;
n
<
16
;
++
n
)
p_stream
->
fmt
.
psz_language
[
n
]
=
oggpack_read
(
&
opb
,
8
);
p_stream
->
fmt
.
psz_language
[
n
]
=
oggpack_read
(
&
opb
,
8
);
p_stream
->
fmt
.
psz_language
[
15
]
=
0
;
/* just in case */
p_stream
->
fmt
.
psz_language
[
15
]
=
0
;
/* just in case */
}
}
else
else
{
{
for
(
n
=
0
;
n
<
16
;
++
n
)
for
(
n
=
0
;
n
<
16
;
++
n
)
oggpack_read
(
&
opb
,
8
);
oggpack_read
(
&
opb
,
8
);
}
}
p_stream
->
fmt
.
psz_description
=
malloc
(
16
);
p_stream
->
fmt
.
psz_description
=
malloc
(
16
);
if
(
p_stream
->
fmt
.
psz_description
)
if
(
p_stream
->
fmt
.
psz_description
)
{
{
for
(
n
=
0
;
n
<
16
;
++
n
)
for
(
n
=
0
;
n
<
16
;
++
n
)
p_stream
->
fmt
.
psz_description
[
n
]
=
oggpack_read
(
&
opb
,
8
);
p_stream
->
fmt
.
psz_description
[
n
]
=
oggpack_read
(
&
opb
,
8
);
p_stream
->
fmt
.
psz_description
[
15
]
=
0
;
/* just in case */
p_stream
->
fmt
.
psz_description
[
15
]
=
0
;
/* just in case */
}
}
else
else
{
{
for
(
n
=
0
;
n
<
16
;
++
n
)
for
(
n
=
0
;
n
<
16
;
++
n
)
oggpack_read
(
&
opb
,
8
);
oggpack_read
(
&
opb
,
8
);
}
}
}
}
...
@@ -1678,7 +1677,7 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
...
@@ -1678,7 +1677,7 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
granule_rate_numerator
=
GetQWLE
(
&
p_oggpacket
->
packet
[
8
]
);
granule_rate_numerator
=
GetQWLE
(
&
p_oggpacket
->
packet
[
8
]
);
granule_rate_denominator
=
GetQWLE
(
&
p_oggpacket
->
packet
[
16
]
);
granule_rate_denominator
=
GetQWLE
(
&
p_oggpacket
->
packet
[
16
]
);
p_stream
->
secondary_header_packets
=
p_stream
->
i_
secondary_header_packets
=
GetDWLE
(
&
p_oggpacket
->
packet
[
24
]
);
GetDWLE
(
&
p_oggpacket
->
packet
[
24
]
);
/* we are guaranteed that the first header field will be
/* we are guaranteed that the first header field will be
...
@@ -1695,7 +1694,7 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
...
@@ -1695,7 +1694,7 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
msg_Dbg
(
p_this
,
"AnxData packet info: %"
PRId64
" / %"
PRId64
", %d, ``%s''"
,
msg_Dbg
(
p_this
,
"AnxData packet info: %"
PRId64
" / %"
PRId64
", %d, ``%s''"
,
granule_rate_numerator
,
granule_rate_denominator
,
granule_rate_numerator
,
granule_rate_denominator
,
p_stream
->
secondary_header_packets
,
content_type_string
);
p_stream
->
i_
secondary_header_packets
,
content_type_string
);
p_stream
->
f_rate
=
(
float
)
granule_rate_numerator
/
p_stream
->
f_rate
=
(
float
)
granule_rate_numerator
/
(
float
)
granule_rate_denominator
;
(
float
)
granule_rate_denominator
;
...
@@ -1753,19 +1752,21 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
...
@@ -1753,19 +1752,21 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
static
uint32_t
dirac_uint
(
bs_t
*
p_bs
)
static
uint32_t
dirac_uint
(
bs_t
*
p_bs
)
{
{
uint32_t
count
=
0
,
value
=
0
;
uint32_t
u_count
=
0
,
u_value
=
0
;
while
(
!
bs_read
(
p_bs
,
1
)
)
{
/* FIXME possible infinite loop */
count
++
;
while
(
!
bs_read
(
p_bs
,
1
)
)
value
<<=
1
;
{
value
|=
bs_read
(
p_bs
,
1
);
u_count
++
;
u_value
<<=
1
;
u_value
|=
bs_read
(
p_bs
,
1
);
}
}
return
(
1
<<
count
)
-
1
+
value
;
return
(
1
<<
u_count
)
-
1
+
u_
value
;
}
}
static
int
dirac_bool
(
bs_t
*
p_bs
)
static
int
dirac_bool
(
bs_t
*
p_bs
)
{
{
return
bs_read
(
p_bs
,
1
);
return
bs_read
(
p_bs
,
1
);
}
}
static
void
Ogg_ReadDiracHeader
(
logical_stream_t
*
p_stream
,
static
void
Ogg_ReadDiracHeader
(
logical_stream_t
*
p_stream
,
...
@@ -1791,16 +1792,19 @@ static void Ogg_ReadDiracHeader( logical_stream_t *p_stream,
...
@@ -1791,16 +1792,19 @@ static void Ogg_ReadDiracHeader( logical_stream_t *p_stream,
uint32_t
u_video_format
=
dirac_uint
(
&
bs
);
/* index */
uint32_t
u_video_format
=
dirac_uint
(
&
bs
);
/* index */
if
(
dirac_bool
(
&
bs
))
{
if
(
dirac_bool
(
&
bs
)
)
{
dirac_uint
(
&
bs
);
/* frame_width */
dirac_uint
(
&
bs
);
/* frame_width */
dirac_uint
(
&
bs
);
/* frame_height */
dirac_uint
(
&
bs
);
/* frame_height */
}
}
if
(
dirac_bool
(
&
bs
))
{
if
(
dirac_bool
(
&
bs
)
)
{
dirac_uint
(
&
bs
);
/* chroma_format */
dirac_uint
(
&
bs
);
/* chroma_format */
}
}
if
(
dirac_bool
(
&
bs
))
{
if
(
dirac_bool
(
&
bs
)
)
{
dirac_uint
(
&
bs
);
/* scan_format */
dirac_uint
(
&
bs
);
/* scan_format */
}
}
...
@@ -1816,13 +1820,17 @@ static void Ogg_ReadDiracHeader( logical_stream_t *p_stream,
...
@@ -1816,13 +1820,17 @@ static void Ogg_ReadDiracHeader( logical_stream_t *p_stream,
1
,
9
,
10
,
9
,
10
,
9
,
10
,
4
,
3
,
7
,
6
,
4
,
3
,
7
,
6
,
2
,
2
,
7
,
6
,
7
,
6
,
1
,
9
,
10
,
9
,
10
,
9
,
10
,
4
,
3
,
7
,
6
,
4
,
3
,
7
,
6
,
2
,
2
,
7
,
6
,
7
,
6
,
};
};
/* FIXME possible out of bound access */
uint32_t
u_n
=
dirac_frate_tbl
[
dirac_vidfmt_frate
[
u_video_format
]].
u_n
;
uint32_t
u_n
=
dirac_frate_tbl
[
dirac_vidfmt_frate
[
u_video_format
]].
u_n
;
uint32_t
u_d
=
dirac_frate_tbl
[
dirac_vidfmt_frate
[
u_video_format
]].
u_d
;
uint32_t
u_d
=
dirac_frate_tbl
[
dirac_vidfmt_frate
[
u_video_format
]].
u_d
;
if
(
dirac_bool
(
&
bs
))
{
if
(
dirac_bool
(
&
bs
)
)
{
/* FIXME possible out of bound access */
uint32_t
frame_rate_index
=
dirac_uint
(
&
bs
);
uint32_t
frame_rate_index
=
dirac_uint
(
&
bs
);
u_n
=
dirac_frate_tbl
[
frame_rate_index
].
u_n
;
u_n
=
dirac_frate_tbl
[
frame_rate_index
].
u_n
;
u_d
=
dirac_frate_tbl
[
frame_rate_index
].
u_d
;
u_d
=
dirac_frate_tbl
[
frame_rate_index
].
u_d
;
if
(
frame_rate_index
==
0
)
{
if
(
frame_rate_index
==
0
)
{
u_n
=
dirac_uint
(
&
bs
);
/* frame_rate_numerator */
u_n
=
dirac_uint
(
&
bs
);
/* frame_rate_numerator */
u_d
=
dirac_uint
(
&
bs
);
/* frame_rate_denominator */
u_d
=
dirac_uint
(
&
bs
);
/* frame_rate_denominator */
}
}
...
...
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