Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Mark Harris
Opus
Commits
b5a4c40d
Commit
b5a4c40d
authored
Feb 25, 2008
by
Jean-Marc Valin
Browse files
Ogg decoder does gapless for the beginning of the file.
parent
b4dfce46
Changes
1
Hide whitespace changes
Inline
Side-by-side
tools/celtdec.c
View file @
b5a4c40d
...
...
@@ -286,7 +286,7 @@ void version_short()
printf
(
"Copyright (C) 2008 Jean-Marc Valin
\n
"
);
}
static
CELTDecoder
*
process_header
(
ogg_packet
*
op
,
celt_int32_t
enh_enabled
,
celt_int32_t
*
frame_size
,
int
*
granule_frame_size
,
celt_int32_t
*
rate
,
int
*
nframes
,
int
forceMode
,
int
*
channels
,
int
*
extra_headers
,
int
quiet
,
CELTMode
**
mode
)
static
CELTDecoder
*
process_header
(
ogg_packet
*
op
,
celt_int32_t
enh_enabled
,
celt_int32_t
*
frame_size
,
int
*
granule_frame_size
,
celt_int32_t
*
rate
,
int
*
nframes
,
int
forceMode
,
int
*
channels
,
int
*
overlap
,
int
*
extra_headers
,
int
quiet
,
CELTMode
**
mode
)
{
CELTDecoder
*
st
;
CELTHeader
header
;
...
...
@@ -299,8 +299,13 @@ static CELTDecoder *process_header(ogg_packet *op, celt_int32_t enh_enabled, cel
return
NULL
;
}
*
mode
=
celt_mode_create
(
header
.
sample_rate
,
header
.
nb_channels
,
header
.
frame_size
,
header
.
overlap
,
NULL
);
if
(
*
mode
==
NULL
)
{
fprintf
(
stderr
,
"Mode initialization failed.
\n
"
);
return
NULL
;
}
*
channels
=
header
.
nb_channels
;
*
overlap
=
header
.
overlap
;
st
=
celt_decoder_create
(
*
mode
);
if
(
!
st
)
{
...
...
@@ -379,6 +384,7 @@ int main(int argc, char **argv)
int
wav_format
=
0
;
int
lookahead
;
int
celt_serialno
=
-
1
;
int
firstpacket
=
1
;
enh_enabled
=
1
;
...
...
@@ -491,7 +497,6 @@ int main(int argc, char **argv)
/*Loop for all complete pages we got (most likely only one)*/
while
(
ogg_sync_pageout
(
&
oy
,
&
og
)
==
1
)
{
int
packet_no
;
if
(
stream_init
==
0
)
{
ogg_stream_init
(
&
os
,
ogg_page_serialno
(
&
og
));
stream_init
=
1
;
...
...
@@ -519,7 +524,6 @@ int main(int argc, char **argv)
/*printf ("page granulepos: %d %d %d\n", skip_samples, page_nb_packets, (int)page_granule);*/
last_granule
=
page_granule
;
/*Extract all available packets*/
packet_no
=
0
;
while
(
!
eos
&&
ogg_stream_packetout
(
&
os
,
&
op
)
==
1
&&
op
.
bytes
>=
8
)
{
if
(
!
memcmp
(
op
.
packet
,
"CELT "
,
8
))
{
...
...
@@ -530,12 +534,9 @@ int main(int argc, char **argv)
/*If first packet, process as CELT header*/
if
(
packet_count
==
0
)
{
st
=
process_header
(
&
op
,
enh_enabled
,
&
frame_size
,
&
granule_frame_size
,
&
rate
,
&
nframes
,
forceMode
,
&
channels
,
&
extra_headers
,
quiet
,
&
mode
);
st
=
process_header
(
&
op
,
enh_enabled
,
&
frame_size
,
&
granule_frame_size
,
&
rate
,
&
nframes
,
forceMode
,
&
channels
,
&
lookahead
,
&
extra_headers
,
quiet
,
&
mode
);
if
(
!
st
)
exit
(
1
);
//FIXME: Do that properly
//celt_decoder_ctl(st, SPEEX_GET_LOOKAHEAD, &lookahead);
lookahead
=
0
;
if
(
!
nframes
)
nframes
=
1
;
fout
=
out_file_open
(
outFile
,
rate
,
&
channels
);
...
...
@@ -549,7 +550,6 @@ int main(int argc, char **argv)
/* Ignore extra headers */
}
else
{
int
lost
=
0
;
packet_no
++
;
if
(
loss_percent
>
0
&&
100
*
((
float
)
rand
())
/
RAND_MAX
<
loss_percent
)
lost
=
1
;
...
...
@@ -594,21 +594,12 @@ int main(int argc, char **argv)
int
new_frame_size
=
frame_size
;
/*printf ("packet %d %d\n", packet_no, skip_samples);*/
/*fprintf (stderr, "packet %d %d %d\n", packet_no, skip_samples, lookahead);*/
if
(
packet
_no
==
1
&&
j
==
0
&&
skip_samples
>
0
)
if
(
first
packet
==
1
)
{
/*printf ("chopping first packet\n");*/
new_frame_size
-=
skip_samples
+
lookahead
;
frame_offset
=
skip_samples
+
lookahead
;
}
if
(
packet_no
==
page_nb_packets
&&
skip_samples
<
0
)
{
int
packet_length
=
nframes
*
frame_size
+
skip_samples
+
lookahead
;
new_frame_size
=
packet_length
-
j
*
frame_size
;
if
(
new_frame_size
<
0
)
new_frame_size
=
0
;
if
(
new_frame_size
>
frame_size
)
new_frame_size
=
frame_size
;
/*printf ("chopping end: %d %d %d\n", new_frame_size, packet_length, packet_no);*/
new_frame_size
-=
lookahead
;
frame_offset
=
lookahead
;
firstpacket
=
0
;
}
if
(
new_frame_size
>
0
)
{
...
...
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