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
2cef81a8
Commit
2cef81a8
authored
Apr 16, 2016
by
Alexandra Hájková
Committed by
Diego Biurrun
Nov 24, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ogg: Convert to the new bitstream reader
parent
8d1997ad
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
28 deletions
+33
-28
oggparseflac.c
libavformat/oggparseflac.c
+12
-10
oggparsetheora.c
libavformat/oggparsetheora.c
+21
-18
No files found.
libavformat/oggparseflac.c
View file @
2cef81a8
...
...
@@ -19,8 +19,10 @@
*/
#include <stdlib.h>
#include "libavcodec/get_bits.h"
#include "libavcodec/bitstream.h"
#include "libavcodec/flac.h"
#include "avformat.h"
#include "internal.h"
#include "oggdec.h"
...
...
@@ -33,28 +35,28 @@ flac_header (AVFormatContext * s, int idx)
struct
ogg
*
ogg
=
s
->
priv_data
;
struct
ogg_stream
*
os
=
ogg
->
streams
+
idx
;
AVStream
*
st
=
s
->
streams
[
idx
];
GetBitContext
gb
;
BitstreamContext
bc
;
int
mdt
;
if
(
os
->
buf
[
os
->
pstart
]
==
0xff
)
return
0
;
init_get_bits
(
&
gb
,
os
->
buf
+
os
->
pstart
,
os
->
psize
*
8
);
skip_bits1
(
&
gb
);
/* metadata_last */
mdt
=
get_bits
(
&
gb
,
7
);
bitstream_init
(
&
bc
,
os
->
buf
+
os
->
pstart
,
os
->
psize
*
8
);
bitstream_skip
(
&
bc
,
1
);
/* metadata_last */
mdt
=
bitstream_read
(
&
bc
,
7
);
if
(
mdt
==
OGG_FLAC_METADATA_TYPE_STREAMINFO
)
{
uint8_t
*
streaminfo_start
=
os
->
buf
+
os
->
pstart
+
5
+
4
+
4
+
4
;
uint32_t
samplerate
;
skip_bits_long
(
&
gb
,
4
*
8
);
/* "FLAC" */
if
(
get_bits
(
&
gb
,
8
)
!=
1
)
/* unsupported major version */
bitstream_skip
(
&
bc
,
4
*
8
);
/* "FLAC" */
if
(
bitstream_read
(
&
bc
,
8
)
!=
1
)
/* unsupported major version */
return
-
1
;
skip_bits_long
(
&
gb
,
8
+
16
);
/* minor version + header count */
skip_bits_long
(
&
gb
,
4
*
8
);
/* "fLaC" */
bitstream_skip
(
&
bc
,
8
+
16
);
/* minor version + header count */
bitstream_skip
(
&
bc
,
4
*
8
);
/* "fLaC" */
/* METADATA_BLOCK_HEADER */
if
(
get_bits_long
(
&
gb
,
32
)
!=
FLAC_STREAMINFO_SIZE
)
if
(
bitstream_read
(
&
bc
,
32
)
!=
FLAC_STREAMINFO_SIZE
)
return
-
1
;
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
...
...
libavformat/oggparsetheora.c
View file @
2cef81a8
...
...
@@ -23,8 +23,11 @@
**/
#include <stdlib.h>
#include "libavutil/bswap.h"
#include "libavcodec/get_bits.h"
#include "libavcodec/bitstream.h"
#include "avformat.h"
#include "internal.h"
#include "oggdec.h"
...
...
@@ -57,41 +60,41 @@ static int theora_header(AVFormatContext *s, int idx)
switch
(
os
->
buf
[
os
->
pstart
])
{
case
0x80
:
{
GetBitContext
gb
;
BitstreamContext
bc
;
AVRational
timebase
;
init_get_bits
(
&
gb
,
os
->
buf
+
os
->
pstart
,
os
->
psize
*
8
);
bitstream_init
(
&
bc
,
os
->
buf
+
os
->
pstart
,
os
->
psize
*
8
);
/* 0x80"theora" */
skip_bits_long
(
&
gb
,
7
*
8
);
bitstream_skip
(
&
bc
,
7
*
8
);
thp
->
version
=
get_bits_long
(
&
gb
,
24
);
thp
->
version
=
bitstream_read
(
&
bc
,
24
);
if
(
thp
->
version
<
0x030100
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Too old or unsupported Theora (%x)
\n
"
,
thp
->
version
);
return
AVERROR
(
ENOSYS
);
}
st
->
codecpar
->
width
=
get_bits
(
&
gb
,
16
)
<<
4
;
st
->
codecpar
->
height
=
get_bits
(
&
gb
,
16
)
<<
4
;
st
->
codecpar
->
width
=
bitstream_read
(
&
bc
,
16
)
<<
4
;
st
->
codecpar
->
height
=
bitstream_read
(
&
bc
,
16
)
<<
4
;
if
(
thp
->
version
>=
0x030400
)
skip_bits
(
&
gb
,
100
);
bitstream_skip
(
&
bc
,
100
);
if
(
thp
->
version
>=
0x030200
)
{
int
width
=
get_bits_long
(
&
gb
,
24
);
int
height
=
get_bits_long
(
&
gb
,
24
);
int
width
=
bitstream_read
(
&
bc
,
24
);
int
height
=
bitstream_read
(
&
bc
,
24
);
if
(
width
<=
st
->
codecpar
->
width
&&
width
>
st
->
codecpar
->
width
-
16
&&
height
<=
st
->
codecpar
->
height
&&
height
>
st
->
codecpar
->
height
-
16
)
{
st
->
codecpar
->
width
=
width
;
st
->
codecpar
->
height
=
height
;
}
skip_bits
(
&
gb
,
16
);
bitstream_skip
(
&
bc
,
16
);
}
timebase
.
den
=
get_bits_long
(
&
gb
,
32
);
timebase
.
num
=
get_bits_long
(
&
gb
,
32
);
timebase
.
den
=
bitstream_read
(
&
bc
,
32
);
timebase
.
num
=
bitstream_read
(
&
bc
,
32
);
if
(
!
(
timebase
.
num
>
0
&&
timebase
.
den
>
0
))
{
av_log
(
s
,
AV_LOG_WARNING
,
"Invalid time base in theora stream, assuming 25 FPS
\n
"
);
timebase
.
num
=
1
;
...
...
@@ -99,15 +102,15 @@ static int theora_header(AVFormatContext *s, int idx)
}
avpriv_set_pts_info
(
st
,
64
,
timebase
.
num
,
timebase
.
den
);
st
->
sample_aspect_ratio
.
num
=
get_bits_long
(
&
gb
,
24
);
st
->
sample_aspect_ratio
.
den
=
get_bits_long
(
&
gb
,
24
);
st
->
sample_aspect_ratio
.
num
=
bitstream_read
(
&
bc
,
24
);
st
->
sample_aspect_ratio
.
den
=
bitstream_read
(
&
bc
,
24
);
if
(
thp
->
version
>=
0x030200
)
skip_bits_long
(
&
gb
,
38
);
bitstream_skip
(
&
bc
,
38
);
if
(
thp
->
version
>=
0x304000
)
skip_bits
(
&
gb
,
2
);
bitstream_skip
(
&
bc
,
2
);
thp
->
gpshift
=
get_bits
(
&
gb
,
5
);
thp
->
gpshift
=
bitstream_read
(
&
bc
,
5
);
thp
->
gpmask
=
(
1
<<
thp
->
gpshift
)
-
1
;
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
...
...
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