Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
f5f1cf52
Commit
f5f1cf52
authored
Dec 21, 2012
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oggdec: K&R cosmetic formatting
parent
7e98956e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
128 additions
and
117 deletions
+128
-117
oggdec.c
libavformat/oggdec.c
+128
-117
No files found.
libavformat/oggdec.c
View file @
f5f1cf52
...
@@ -60,18 +60,18 @@ static int ogg_save(AVFormatContext *s)
...
@@ -60,18 +60,18 @@ static int ogg_save(AVFormatContext *s)
{
{
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg_state
*
ost
=
struct
ogg_state
*
ost
=
av_malloc
(
sizeof
(
*
ost
)
+
(
ogg
->
nstreams
-
1
)
*
sizeof
(
*
ogg
->
streams
));
av_malloc
(
sizeof
(
*
ost
)
+
(
ogg
->
nstreams
-
1
)
*
sizeof
(
*
ogg
->
streams
));
int
i
;
int
i
;
ost
->
pos
=
avio_tell
(
s
->
pb
);
ost
->
pos
=
avio_tell
(
s
->
pb
);
ost
->
curidx
=
ogg
->
curidx
;
ost
->
curidx
=
ogg
->
curidx
;
ost
->
next
=
ogg
->
state
;
ost
->
next
=
ogg
->
state
;
ost
->
nstreams
=
ogg
->
nstreams
;
ost
->
nstreams
=
ogg
->
nstreams
;
memcpy
(
ost
->
streams
,
ogg
->
streams
,
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
memcpy
(
ost
->
streams
,
ogg
->
streams
,
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
){
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
os
->
buf
=
av_mallocz
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
os
->
buf
=
av_mallocz
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
memcpy
(
os
->
buf
,
ost
->
streams
[
i
].
buf
,
os
->
bufpos
);
memcpy
(
os
->
buf
,
ost
->
streams
[
i
].
buf
,
os
->
bufpos
);
}
}
ogg
->
state
=
ost
;
ogg
->
state
=
ost
;
...
@@ -91,17 +91,17 @@ static int ogg_restore(AVFormatContext *s, int discard)
...
@@ -91,17 +91,17 @@ static int ogg_restore(AVFormatContext *s, int discard)
ogg
->
state
=
ost
->
next
;
ogg
->
state
=
ost
->
next
;
if
(
!
discard
){
if
(
!
discard
)
{
struct
ogg_stream
*
old_streams
=
ogg
->
streams
;
struct
ogg_stream
*
old_streams
=
ogg
->
streams
;
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
av_free
(
ogg
->
streams
[
i
].
buf
);
av_free
(
ogg
->
streams
[
i
].
buf
);
avio_seek
(
bc
,
ost
->
pos
,
SEEK_SET
);
avio_seek
(
bc
,
ost
->
pos
,
SEEK_SET
);
ogg
->
curidx
=
ost
->
curidx
;
ogg
->
curidx
=
ost
->
curidx
;
ogg
->
nstreams
=
ost
->
nstreams
;
ogg
->
nstreams
=
ost
->
nstreams
;
ogg
->
streams
=
av_realloc
(
ogg
->
streams
,
ogg
->
streams
=
av_realloc
(
ogg
->
streams
,
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
if
(
ogg
->
streams
)
{
if
(
ogg
->
streams
)
{
memcpy
(
ogg
->
streams
,
ost
->
streams
,
memcpy
(
ogg
->
streams
,
ost
->
streams
,
...
@@ -112,7 +112,7 @@ static int ogg_restore(AVFormatContext *s, int discard)
...
@@ -112,7 +112,7 @@ static int ogg_restore(AVFormatContext *s, int discard)
}
}
}
}
av_free
(
ost
);
av_free
(
ost
);
return
0
;
return
0
;
}
}
...
@@ -121,18 +121,18 @@ static int ogg_reset(struct ogg *ogg)
...
@@ -121,18 +121,18 @@ static int ogg_reset(struct ogg *ogg)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
){
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
os
->
bufpos
=
0
;
os
->
bufpos
=
0
;
os
->
pstart
=
0
;
os
->
pstart
=
0
;
os
->
psize
=
0
;
os
->
psize
=
0
;
os
->
granule
=
-
1
;
os
->
granule
=
-
1
;
os
->
lastpts
=
AV_NOPTS_VALUE
;
os
->
lastpts
=
AV_NOPTS_VALUE
;
os
->
lastdts
=
AV_NOPTS_VALUE
;
os
->
lastdts
=
AV_NOPTS_VALUE
;
os
->
sync_pos
=
-
1
;
os
->
sync_pos
=
-
1
;
os
->
page_pos
=
0
;
os
->
page_pos
=
0
;
os
->
nsegs
=
0
;
os
->
nsegs
=
0
;
os
->
segp
=
0
;
os
->
segp
=
0
;
os
->
incomplete
=
0
;
os
->
incomplete
=
0
;
}
}
...
@@ -147,7 +147,7 @@ static const struct ogg_codec *ogg_find_codec(uint8_t *buf, int size)
...
@@ -147,7 +147,7 @@ static const struct ogg_codec *ogg_find_codec(uint8_t *buf, int size)
for
(
i
=
0
;
ogg_codecs
[
i
];
i
++
)
for
(
i
=
0
;
ogg_codecs
[
i
];
i
++
)
if
(
size
>=
ogg_codecs
[
i
]
->
magicsize
&&
if
(
size
>=
ogg_codecs
[
i
]
->
magicsize
&&
!
memcmp
(
buf
,
ogg_codecs
[
i
]
->
magic
,
ogg_codecs
[
i
]
->
magicsize
))
!
memcmp
(
buf
,
ogg_codecs
[
i
]
->
magic
,
ogg_codecs
[
i
]
->
magicsize
))
return
ogg_codecs
[
i
];
return
ogg_codecs
[
i
];
return
NULL
;
return
NULL
;
...
@@ -155,20 +155,20 @@ static const struct ogg_codec *ogg_find_codec(uint8_t *buf, int size)
...
@@ -155,20 +155,20 @@ static const struct ogg_codec *ogg_find_codec(uint8_t *buf, int size)
static
int
ogg_new_stream
(
AVFormatContext
*
s
,
uint32_t
serial
,
int
new_avstream
)
static
int
ogg_new_stream
(
AVFormatContext
*
s
,
uint32_t
serial
,
int
new_avstream
)
{
{
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
int
idx
=
ogg
->
nstreams
++
;
int
idx
=
ogg
->
nstreams
++
;
AVStream
*
st
;
AVStream
*
st
;
struct
ogg_stream
*
os
;
struct
ogg_stream
*
os
;
ogg
->
streams
=
av_realloc
(
ogg
->
streams
,
ogg
->
streams
=
av_realloc
(
ogg
->
streams
,
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
ogg
->
nstreams
*
sizeof
(
*
ogg
->
streams
));
memset
(
ogg
->
streams
+
idx
,
0
,
sizeof
(
*
ogg
->
streams
));
memset
(
ogg
->
streams
+
idx
,
0
,
sizeof
(
*
ogg
->
streams
));
os
=
ogg
->
streams
+
idx
;
os
->
serial
=
serial
;
os
=
ogg
->
streams
+
idx
;
os
->
bufsize
=
DECODER_BUFFER_SIZE
;
os
->
serial
=
serial
;
os
->
buf
=
av_malloc
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
os
->
bufsize
=
DECODER_BUFFER_SIZE
;
os
->
header
=
-
1
;
os
->
buf
=
av_malloc
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
os
->
header
=
-
1
;
os
->
start_granule
=
OGG_NOGRANULE_VALUE
;
os
->
start_granule
=
OGG_NOGRANULE_VALUE
;
if
(
new_avstream
)
{
if
(
new_avstream
)
{
...
@@ -188,11 +188,13 @@ static int ogg_new_buf(struct ogg *ogg, int idx)
...
@@ -188,11 +188,13 @@ static int ogg_new_buf(struct ogg *ogg, int idx)
struct
ogg_stream
*
os
=
ogg
->
streams
+
idx
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
idx
;
uint8_t
*
nb
=
av_malloc
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
uint8_t
*
nb
=
av_malloc
(
os
->
bufsize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
int
size
=
os
->
bufpos
-
os
->
pstart
;
int
size
=
os
->
bufpos
-
os
->
pstart
;
if
(
os
->
buf
){
if
(
os
->
buf
)
{
memcpy
(
nb
,
os
->
buf
+
os
->
pstart
,
size
);
memcpy
(
nb
,
os
->
buf
+
os
->
pstart
,
size
);
av_free
(
os
->
buf
);
av_free
(
os
->
buf
);
}
}
os
->
buf
=
nb
;
os
->
buf
=
nb
;
os
->
bufpos
=
size
;
os
->
bufpos
=
size
;
os
->
pstart
=
0
;
os
->
pstart
=
0
;
...
@@ -216,7 +218,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -216,7 +218,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
if
(
ret
<
4
)
if
(
ret
<
4
)
return
ret
<
0
?
ret
:
AVERROR_EOF
;
return
ret
<
0
?
ret
:
AVERROR_EOF
;
do
{
do
{
int
c
;
int
c
;
if
(
sync
[
sp
&
3
]
==
'O'
&&
if
(
sync
[
sp
&
3
]
==
'O'
&&
...
@@ -225,37 +227,42 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -225,37 +227,42 @@ static int ogg_read_page(AVFormatContext *s, int *str)
break
;
break
;
c
=
avio_r8
(
bc
);
c
=
avio_r8
(
bc
);
if
(
bc
->
eof_reached
)
if
(
bc
->
eof_reached
)
return
AVERROR_EOF
;
return
AVERROR_EOF
;
sync
[
sp
++
&
3
]
=
c
;
sync
[
sp
++
&
3
]
=
c
;
}
while
(
i
++
<
MAX_PAGE_SIZE
);
}
while
(
i
++
<
MAX_PAGE_SIZE
);
if
(
i
>=
MAX_PAGE_SIZE
){
if
(
i
>=
MAX_PAGE_SIZE
)
{
av_log
(
s
,
AV_LOG_INFO
,
"ogg, can'
t find sync word
\n
"
);
av_log
(
s
,
AV_LOG_INFO
,
"canno
t find sync word
\n
"
);
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
}
}
if
(
avio_r8
(
bc
)
!=
0
)
/* version */
if
(
avio_r8
(
bc
)
!=
0
)
/* version */
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
flags
=
avio_r8
(
bc
);
flags
=
avio_r8
(
bc
);
gp
=
avio_rl64
(
bc
);
gp
=
avio_rl64
(
bc
);
serial
=
avio_rl32
(
bc
);
serial
=
avio_rl32
(
bc
);
avio_skip
(
bc
,
8
);
/* seq, crc */
avio_skip
(
bc
,
8
);
/* seq, crc */
nsegs
=
avio_r8
(
bc
);
nsegs
=
avio_r8
(
bc
);
idx
=
ogg_find_stream
(
ogg
,
serial
);
idx
=
ogg_find_stream
(
ogg
,
serial
);
if
(
idx
<
0
){
if
(
idx
<
0
)
{
if
(
ogg
->
headers
)
{
if
(
ogg
->
headers
)
{
int
n
;
int
n
;
for
(
n
=
0
;
n
<
ogg
->
nstreams
;
n
++
)
{
for
(
n
=
0
;
n
<
ogg
->
nstreams
;
n
++
)
{
av_freep
(
&
ogg
->
streams
[
n
].
buf
);
av_freep
(
&
ogg
->
streams
[
n
].
buf
);
if
(
!
ogg
->
state
||
ogg
->
state
->
streams
[
n
].
private
!=
ogg
->
streams
[
n
].
private
)
if
(
!
ogg
->
state
||
ogg
->
state
->
streams
[
n
].
private
!=
ogg
->
streams
[
n
].
private
)
av_freep
(
&
ogg
->
streams
[
n
].
private
);
av_freep
(
&
ogg
->
streams
[
n
].
private
);
}
}
ogg
->
curidx
=
-
1
;
ogg
->
curidx
=
-
1
;
ogg
->
nstreams
=
0
;
ogg
->
nstreams
=
0
;
idx
=
ogg_new_stream
(
s
,
serial
,
0
);
idx
=
ogg_new_stream
(
s
,
serial
,
0
);
}
else
{
}
else
{
idx
=
ogg_new_stream
(
s
,
serial
,
1
);
idx
=
ogg_new_stream
(
s
,
serial
,
1
);
...
@@ -267,7 +274,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -267,7 +274,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
os
=
ogg
->
streams
+
idx
;
os
=
ogg
->
streams
+
idx
;
os
->
page_pos
=
avio_tell
(
bc
)
-
27
;
os
->
page_pos
=
avio_tell
(
bc
)
-
27
;
if
(
os
->
psize
>
0
)
if
(
os
->
psize
>
0
)
ogg_new_buf
(
ogg
,
idx
);
ogg_new_buf
(
ogg
,
idx
);
ret
=
avio_read
(
bc
,
os
->
segments
,
nsegs
);
ret
=
avio_read
(
bc
,
os
->
segments
,
nsegs
);
...
@@ -275,15 +282,15 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -275,15 +282,15 @@ static int ogg_read_page(AVFormatContext *s, int *str)
return
ret
<
0
?
ret
:
AVERROR_EOF
;
return
ret
<
0
?
ret
:
AVERROR_EOF
;
os
->
nsegs
=
nsegs
;
os
->
nsegs
=
nsegs
;
os
->
segp
=
0
;
os
->
segp
=
0
;
size
=
0
;
size
=
0
;
for
(
i
=
0
;
i
<
nsegs
;
i
++
)
for
(
i
=
0
;
i
<
nsegs
;
i
++
)
size
+=
os
->
segments
[
i
];
size
+=
os
->
segments
[
i
];
if
(
flags
&
OGG_FLAG_CONT
||
os
->
incomplete
){
if
(
flags
&
OGG_FLAG_CONT
||
os
->
incomplete
)
{
if
(
!
os
->
psize
){
if
(
!
os
->
psize
)
{
while
(
os
->
segp
<
os
->
nsegs
){
while
(
os
->
segp
<
os
->
nsegs
)
{
int
seg
=
os
->
segments
[
os
->
segp
++
];
int
seg
=
os
->
segments
[
os
->
segp
++
];
os
->
pstart
+=
seg
;
os
->
pstart
+=
seg
;
if
(
seg
<
255
)
if
(
seg
<
255
)
...
@@ -291,15 +298,15 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -291,15 +298,15 @@ static int ogg_read_page(AVFormatContext *s, int *str)
}
}
os
->
sync_pos
=
os
->
page_pos
;
os
->
sync_pos
=
os
->
page_pos
;
}
}
}
else
{
}
else
{
os
->
psize
=
0
;
os
->
psize
=
0
;
os
->
sync_pos
=
os
->
page_pos
;
os
->
sync_pos
=
os
->
page_pos
;
}
}
if
(
os
->
bufsize
-
os
->
bufpos
<
size
){
if
(
os
->
bufsize
-
os
->
bufpos
<
size
)
{
uint8_t
*
nb
=
av_malloc
((
os
->
bufsize
*=
2
)
+
FF_INPUT_BUFFER_PADDING_SIZE
);
uint8_t
*
nb
=
av_malloc
((
os
->
bufsize
*=
2
)
+
FF_INPUT_BUFFER_PADDING_SIZE
);
memcpy
(
nb
,
os
->
buf
,
os
->
bufpos
);
memcpy
(
nb
,
os
->
buf
,
os
->
bufpos
);
av_free
(
os
->
buf
);
av_free
(
os
->
buf
);
os
->
buf
=
nb
;
os
->
buf
=
nb
;
}
}
...
@@ -309,7 +316,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
...
@@ -309,7 +316,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
os
->
bufpos
+=
size
;
os
->
bufpos
+=
size
;
os
->
granule
=
gp
;
os
->
granule
=
gp
;
os
->
flags
=
flags
;
os
->
flags
=
flags
;
memset
(
os
->
buf
+
os
->
bufpos
,
0
,
FF_INPUT_BUFFER_PADDING_SIZE
);
memset
(
os
->
buf
+
os
->
bufpos
,
0
,
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
str
)
if
(
str
)
...
@@ -325,14 +332,14 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
...
@@ -325,14 +332,14 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
int
idx
,
i
,
ret
;
int
idx
,
i
,
ret
;
struct
ogg_stream
*
os
;
struct
ogg_stream
*
os
;
int
complete
=
0
;
int
complete
=
0
;
int
segp
=
0
,
psize
=
0
;
int
segp
=
0
,
psize
=
0
;
av_dlog
(
s
,
"ogg_packet: curidx=%i
\n
"
,
ogg
->
curidx
);
av_dlog
(
s
,
"ogg_packet: curidx=%i
\n
"
,
ogg
->
curidx
);
do
{
do
{
idx
=
ogg
->
curidx
;
idx
=
ogg
->
curidx
;
while
(
idx
<
0
){
while
(
idx
<
0
)
{
ret
=
ogg_read_page
(
s
,
&
idx
);
ret
=
ogg_read_page
(
s
,
&
idx
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
...
@@ -343,50 +350,52 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
...
@@ -343,50 +350,52 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
av_dlog
(
s
,
"ogg_packet: idx=%d pstart=%d psize=%d segp=%d nsegs=%d
\n
"
,
av_dlog
(
s
,
"ogg_packet: idx=%d pstart=%d psize=%d segp=%d nsegs=%d
\n
"
,
idx
,
os
->
pstart
,
os
->
psize
,
os
->
segp
,
os
->
nsegs
);
idx
,
os
->
pstart
,
os
->
psize
,
os
->
segp
,
os
->
nsegs
);
if
(
!
os
->
codec
){
if
(
!
os
->
codec
)
{
if
(
os
->
header
<
0
){
if
(
os
->
header
<
0
)
{
os
->
codec
=
ogg_find_codec
(
os
->
buf
,
os
->
bufpos
);
os
->
codec
=
ogg_find_codec
(
os
->
buf
,
os
->
bufpos
);
if
(
!
os
->
codec
){
if
(
!
os
->
codec
)
{
av_log
(
s
,
AV_LOG_WARNING
,
"Codec not found
\n
"
);
av_log
(
s
,
AV_LOG_WARNING
,
"Codec not found
\n
"
);
os
->
header
=
0
;
os
->
header
=
0
;
return
0
;
return
0
;
}
}
}
else
{
}
else
{
return
0
;
return
0
;
}
}
}
}
segp
=
os
->
segp
;
segp
=
os
->
segp
;
psize
=
os
->
psize
;
psize
=
os
->
psize
;
while
(
os
->
segp
<
os
->
nsegs
){
while
(
os
->
segp
<
os
->
nsegs
)
{
int
ss
=
os
->
segments
[
os
->
segp
++
];
int
ss
=
os
->
segments
[
os
->
segp
++
];
os
->
psize
+=
ss
;
os
->
psize
+=
ss
;
if
(
ss
<
255
){
if
(
ss
<
255
)
{
complete
=
1
;
complete
=
1
;
break
;
break
;
}
}
}
}
if
(
!
complete
&&
os
->
segp
==
os
->
nsegs
){
if
(
!
complete
&&
os
->
segp
==
os
->
nsegs
)
{
ogg
->
curidx
=
-
1
;
ogg
->
curidx
=
-
1
;
os
->
incomplete
=
1
;
os
->
incomplete
=
1
;
}
}
}
while
(
!
complete
);
}
while
(
!
complete
);
av_dlog
(
s
,
"ogg_packet: idx %i, frame size %i, start %i
\n
"
,
av_dlog
(
s
,
"ogg_packet: idx %i, frame size %i, start %i
\n
"
,
idx
,
os
->
psize
,
os
->
pstart
);
idx
,
os
->
psize
,
os
->
pstart
);
if
(
os
->
granule
==
-
1
)
if
(
os
->
granule
==
-
1
)
av_log
(
s
,
AV_LOG_WARNING
,
"Page at %"
PRId64
" is missing granule
\n
"
,
os
->
page_pos
);
av_log
(
s
,
AV_LOG_WARNING
,
"Page at %"
PRId64
" is missing granule
\n
"
,
os
->
page_pos
);
ogg
->
curidx
=
idx
;
ogg
->
curidx
=
idx
;
os
->
incomplete
=
0
;
os
->
incomplete
=
0
;
if
(
os
->
header
)
{
if
(
os
->
header
)
{
os
->
header
=
os
->
codec
->
header
(
s
,
idx
);
os
->
header
=
os
->
codec
->
header
(
s
,
idx
);
if
(
!
os
->
header
){
if
(
!
os
->
header
)
{
os
->
segp
=
segp
;
os
->
segp
=
segp
;
os
->
psize
=
psize
;
os
->
psize
=
psize
;
// We have reached the first non-header packet in this stream.
// We have reached the first non-header packet in this stream.
...
@@ -398,6 +407,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
...
@@ -398,6 +407,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
// compute the data_offset.
// compute the data_offset.
if
(
!
s
->
data_offset
)
if
(
!
s
->
data_offset
)
s
->
data_offset
=
os
->
sync_pos
;
s
->
data_offset
=
os
->
sync_pos
;
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
struct
ogg_stream
*
cur_os
=
ogg
->
streams
+
i
;
struct
ogg_stream
*
cur_os
=
ogg
->
streams
+
i
;
...
@@ -406,16 +416,16 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
...
@@ -406,16 +416,16 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
if
(
cur_os
->
incomplete
)
if
(
cur_os
->
incomplete
)
s
->
data_offset
=
FFMIN
(
s
->
data_offset
,
cur_os
->
sync_pos
);
s
->
data_offset
=
FFMIN
(
s
->
data_offset
,
cur_os
->
sync_pos
);
}
}
}
else
{
}
else
{
os
->
nb_header
++
;
os
->
nb_header
++
;
os
->
pstart
+=
os
->
psize
;
os
->
pstart
+=
os
->
psize
;
os
->
psize
=
0
;
os
->
psize
=
0
;
}
}
}
else
{
}
else
{
os
->
pflags
=
0
;
os
->
pflags
=
0
;
os
->
pduration
=
0
;
os
->
pduration
=
0
;
if
(
os
->
codec
&&
os
->
codec
->
packet
)
if
(
os
->
codec
&&
os
->
codec
->
packet
)
os
->
codec
->
packet
(
s
,
idx
);
os
->
codec
->
packet
(
s
,
idx
);
if
(
str
)
if
(
str
)
*
str
=
idx
;
*
str
=
idx
;
if
(
dstart
)
if
(
dstart
)
...
@@ -424,8 +434,8 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
...
@@ -424,8 +434,8 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
*
dsize
=
os
->
psize
;
*
dsize
=
os
->
psize
;
if
(
fpos
)
if
(
fpos
)
*
fpos
=
os
->
sync_pos
;
*
fpos
=
os
->
sync_pos
;
os
->
pstart
+=
os
->
psize
;
os
->
pstart
+=
os
->
psize
;
os
->
psize
=
0
;
os
->
psize
=
0
;
os
->
sync_pos
=
os
->
page_pos
;
os
->
sync_pos
=
os
->
page_pos
;
}
}
...
@@ -449,11 +459,11 @@ static int ogg_get_headers(AVFormatContext *s)
...
@@ -449,11 +459,11 @@ static int ogg_get_headers(AVFormatContext *s)
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
int
ret
,
i
;
int
ret
,
i
;
do
{
do
{
ret
=
ogg_packet
(
s
,
NULL
,
NULL
,
NULL
,
NULL
);
ret
=
ogg_packet
(
s
,
NULL
,
NULL
,
NULL
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
}
while
(
!
ogg
->
headers
);
}
while
(
!
ogg
->
headers
);
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
i
;
...
@@ -479,7 +489,7 @@ static int ogg_get_length(AVFormatContext *s)
...
@@ -479,7 +489,7 @@ static int ogg_get_length(AVFormatContext *s)
int
i
;
int
i
;
int64_t
size
,
end
;
int64_t
size
,
end
;
if
(
!
s
->
pb
->
seekable
)
if
(
!
s
->
pb
->
seekable
)
return
0
;
return
0
;
// already set
// already set
...
@@ -487,24 +497,24 @@ static int ogg_get_length(AVFormatContext *s)
...
@@ -487,24 +497,24 @@ static int ogg_get_length(AVFormatContext *s)
return
0
;
return
0
;
size
=
avio_size
(
s
->
pb
);
size
=
avio_size
(
s
->
pb
);
if
(
size
<
0
)
if
(
size
<
0
)
return
0
;
return
0
;
end
=
size
>
MAX_PAGE_SIZE
?
size
-
MAX_PAGE_SIZE
:
0
;
end
=
size
>
MAX_PAGE_SIZE
?
size
-
MAX_PAGE_SIZE
:
0
;
ogg_save
(
s
);
ogg_save
(
s
);
avio_seek
(
s
->
pb
,
end
,
SEEK_SET
);
avio_seek
(
s
->
pb
,
end
,
SEEK_SET
);
while
(
!
ogg_read_page
(
s
,
&
i
))
{
while
(
!
ogg_read_page
(
s
,
&
i
))
{
if
(
ogg
->
streams
[
i
].
granule
!=
-
1
&&
ogg
->
streams
[
i
].
granule
!=
0
&&
if
(
ogg
->
streams
[
i
].
granule
!=
-
1
&&
ogg
->
streams
[
i
].
granule
!=
0
&&
ogg
->
streams
[
i
].
codec
)
{
ogg
->
streams
[
i
].
codec
)
{
s
->
streams
[
i
]
->
duration
=
s
->
streams
[
i
]
->
duration
=
ogg_gptopts
(
s
,
i
,
ogg
->
streams
[
i
].
granule
,
NULL
);
ogg_gptopts
(
s
,
i
,
ogg
->
streams
[
i
].
granule
,
NULL
);
if
(
s
->
streams
[
i
]
->
start_time
!=
AV_NOPTS_VALUE
)
if
(
s
->
streams
[
i
]
->
start_time
!=
AV_NOPTS_VALUE
)
s
->
streams
[
i
]
->
duration
-=
s
->
streams
[
i
]
->
start_time
;
s
->
streams
[
i
]
->
duration
-=
s
->
streams
[
i
]
->
start_time
;
}
}
}
}
ogg_restore
(
s
,
0
);
ogg_restore
(
s
,
0
);
return
0
;
return
0
;
}
}
...
@@ -524,7 +534,7 @@ static int ogg_read_header(AVFormatContext *s)
...
@@ -524,7 +534,7 @@ static int ogg_read_header(AVFormatContext *s)
ogg
->
streams
[
i
].
codec
=
NULL
;
ogg
->
streams
[
i
].
codec
=
NULL
;
//linear granulepos seek from end
//linear granulepos seek from end
ogg_get_length
(
s
);
ogg_get_length
(
s
);
//fill the extradata in the per codec callbacks
//fill the extradata in the per codec callbacks
return
0
;
return
0
;
...
@@ -532,15 +542,15 @@ static int ogg_read_header(AVFormatContext *s)
...
@@ -532,15 +542,15 @@ static int ogg_read_header(AVFormatContext *s)
static
int64_t
ogg_calc_pts
(
AVFormatContext
*
s
,
int
idx
,
int64_t
*
dts
)
static
int64_t
ogg_calc_pts
(
AVFormatContext
*
s
,
int
idx
,
int64_t
*
dts
)
{
{
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
idx
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
idx
;
int64_t
pts
=
AV_NOPTS_VALUE
;
int64_t
pts
=
AV_NOPTS_VALUE
;
if
(
dts
)
if
(
dts
)
*
dts
=
AV_NOPTS_VALUE
;
*
dts
=
AV_NOPTS_VALUE
;
if
(
os
->
lastpts
!=
AV_NOPTS_VALUE
)
{
if
(
os
->
lastpts
!=
AV_NOPTS_VALUE
)
{
pts
=
os
->
lastpts
;
pts
=
os
->
lastpts
;
os
->
lastpts
=
AV_NOPTS_VALUE
;
os
->
lastpts
=
AV_NOPTS_VALUE
;
}
}
if
(
os
->
lastdts
!=
AV_NOPTS_VALUE
)
{
if
(
os
->
lastdts
!=
AV_NOPTS_VALUE
)
{
...
@@ -570,14 +580,14 @@ static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt)
...
@@ -570,14 +580,14 @@ static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt)
//Get an ogg packet
//Get an ogg packet
retry:
retry:
do
{
do
{
ret
=
ogg_packet
(
s
,
&
idx
,
&
pstart
,
&
psize
,
&
fpos
);
ret
=
ogg_packet
(
s
,
&
idx
,
&
pstart
,
&
psize
,
&
fpos
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
}
while
(
idx
<
0
||
!
s
->
streams
[
idx
]);
}
while
(
idx
<
0
||
!
s
->
streams
[
idx
]);
ogg
=
s
->
priv_data
;
ogg
=
s
->
priv_data
;
os
=
ogg
->
streams
+
idx
;
os
=
ogg
->
streams
+
idx
;
// pflags might not be set until after this
// pflags might not be set until after this
pts
=
ogg_calc_pts
(
s
,
idx
,
&
dts
);
pts
=
ogg_calc_pts
(
s
,
idx
,
&
dts
);
...
@@ -591,13 +601,13 @@ retry:
...
@@ -591,13 +601,13 @@ retry:
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
pkt
->
stream_index
=
idx
;
pkt
->
stream_index
=
idx
;
memcpy
(
pkt
->
data
,
os
->
buf
+
pstart
,
psize
);
memcpy
(
pkt
->
data
,
os
->
buf
+
pstart
,
psize
);
pkt
->
pts
=
pts
;
pkt
->
pts
=
pts
;
pkt
->
dts
=
dts
;
pkt
->
dts
=
dts
;
pkt
->
flags
=
os
->
pflags
;
pkt
->
flags
=
os
->
pflags
;
pkt
->
duration
=
os
->
pduration
;
pkt
->
duration
=
os
->
pduration
;
pkt
->
pos
=
fpos
;
pkt
->
pos
=
fpos
;
return
psize
;
return
psize
;
}
}
...
@@ -607,11 +617,11 @@ static int ogg_read_close(AVFormatContext *s)
...
@@ -607,11 +617,11 @@ static int ogg_read_close(AVFormatContext *s)
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
int
i
;
int
i
;
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
){
for
(
i
=
0
;
i
<
ogg
->
nstreams
;
i
++
)
{
av_free
(
ogg
->
streams
[
i
].
buf
);
av_free
(
ogg
->
streams
[
i
].
buf
);
av_free
(
ogg
->
streams
[
i
].
private
);
av_free
(
ogg
->
streams
[
i
].
private
);
}
}
av_free
(
ogg
->
streams
);
av_free
(
ogg
->
streams
);
return
0
;
return
0
;
}
}
...
@@ -620,12 +630,13 @@ static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index,
...
@@ -620,12 +630,13 @@ static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index,
{
{
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
AVIOContext
*
bc
=
s
->
pb
;
AVIOContext
*
bc
=
s
->
pb
;
int64_t
pts
=
AV_NOPTS_VALUE
;
int64_t
pts
=
AV_NOPTS_VALUE
;
int
i
=
-
1
;
int
i
=
-
1
;
avio_seek
(
bc
,
*
pos_arg
,
SEEK_SET
);
avio_seek
(
bc
,
*
pos_arg
,
SEEK_SET
);
ogg_reset
(
ogg
);
ogg_reset
(
ogg
);
while
(
avio_tell
(
bc
)
<
pos_limit
&&
!
ogg_packet
(
s
,
&
i
,
NULL
,
NULL
,
pos_arg
))
{
while
(
avio_tell
(
bc
)
<
pos_limit
&&
!
ogg_packet
(
s
,
&
i
,
NULL
,
NULL
,
pos_arg
))
{
if
(
i
==
stream_index
)
{
if
(
i
==
stream_index
)
{
struct
ogg_stream
*
os
=
ogg
->
streams
+
stream_index
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
stream_index
;
pts
=
ogg_calc_pts
(
s
,
i
,
NULL
);
pts
=
ogg_calc_pts
(
s
,
i
,
NULL
);
...
@@ -642,7 +653,7 @@ static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index,
...
@@ -642,7 +653,7 @@ static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index,
static
int
ogg_read_seek
(
AVFormatContext
*
s
,
int
stream_index
,
static
int
ogg_read_seek
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
timestamp
,
int
flags
)
int64_t
timestamp
,
int
flags
)
{
{
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
stream_index
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
stream_index
;
int
ret
;
int
ret
;
...
@@ -653,7 +664,7 @@ static int ogg_read_seek(AVFormatContext *s, int stream_index,
...
@@ -653,7 +664,7 @@ static int ogg_read_seek(AVFormatContext *s, int stream_index,
os
->
keyframe_seek
=
1
;
os
->
keyframe_seek
=
1
;
ret
=
ff_seek_frame_binary
(
s
,
stream_index
,
timestamp
,
flags
);
ret
=
ff_seek_frame_binary
(
s
,
stream_index
,
timestamp
,
flags
);
os
=
ogg
->
streams
+
stream_index
;
os
=
ogg
->
streams
+
stream_index
;
if
(
ret
<
0
)
if
(
ret
<
0
)
os
->
keyframe_seek
=
0
;
os
->
keyframe_seek
=
0
;
return
ret
;
return
ret
;
...
...
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