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
2d722195
Commit
2d722195
authored
Apr 10, 2016
by
Alexandra Hájková
Committed by
Diego Biurrun
Jan 31, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h261dec: Convert to the new bitstream reader
parent
2b94ed12
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
56 additions
and
50 deletions
+56
-50
h261dec.c
libavcodec/h261dec.c
+47
-45
mpegvideo.h
libavcodec/mpegvideo.h
+3
-0
h261dec.c
libavformat/h261dec.c
+6
-5
No files found.
libavcodec/h261dec.c
View file @
2d722195
...
@@ -26,12 +26,14 @@
...
@@ -26,12 +26,14 @@
*/
*/
#include "avcodec.h"
#include "avcodec.h"
#include "bitstream.h"
#include "mpeg_er.h"
#include "mpeg_er.h"
#include "mpegutils.h"
#include "mpegutils.h"
#include "mpegvideo.h"
#include "mpegvideo.h"
#include "h263.h"
#include "h263.h"
#include "h261.h"
#include "h261.h"
#include "internal.h"
#include "internal.h"
#include "vlc.h"
#define H261_MBA_VLC_BITS 9
#define H261_MBA_VLC_BITS 9
#define H261_MTYPE_VLC_BITS 6
#define H261_MTYPE_VLC_BITS 6
...
@@ -103,18 +105,18 @@ static int h261_decode_gob_header(H261Context *h)
...
@@ -103,18 +105,18 @@ static int h261_decode_gob_header(H261Context *h)
if
(
!
h
->
gob_start_code_skipped
)
{
if
(
!
h
->
gob_start_code_skipped
)
{
/* Check for GOB Start Code */
/* Check for GOB Start Code */
val
=
show_bits
(
&
s
->
gb
,
15
);
val
=
bitstream_peek
(
&
s
->
bc
,
15
);
if
(
val
)
if
(
val
)
return
-
1
;
return
-
1
;
/* We have a GBSC */
/* We have a GBSC */
skip_bits
(
&
s
->
gb
,
16
);
bitstream_skip
(
&
s
->
bc
,
16
);
}
}
h
->
gob_start_code_skipped
=
0
;
h
->
gob_start_code_skipped
=
0
;
h
->
gob_number
=
get_bits
(
&
s
->
gb
,
4
);
/* GN */
h
->
gob_number
=
bitstream_read
(
&
s
->
bc
,
4
);
/* GN */
s
->
qscale
=
get_bits
(
&
s
->
gb
,
5
);
/* GQUANT */
s
->
qscale
=
bitstream_read
(
&
s
->
bc
,
5
);
/* GQUANT */
/* Check if gob_number is valid */
/* Check if gob_number is valid */
if
(
s
->
mb_height
==
18
)
{
// CIF
if
(
s
->
mb_height
==
18
)
{
// CIF
...
@@ -127,8 +129,8 @@ static int h261_decode_gob_header(H261Context *h)
...
@@ -127,8 +129,8 @@ static int h261_decode_gob_header(H261Context *h)
}
}
/* GEI */
/* GEI */
while
(
get_bits1
(
&
s
->
gb
)
!=
0
)
while
(
bitstream_read_bit
(
&
s
->
bc
)
!=
0
)
skip_bits
(
&
s
->
gb
,
8
);
bitstream_skip
(
&
s
->
bc
,
8
);
if
(
s
->
qscale
==
0
)
{
if
(
s
->
qscale
==
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"qscale has forbidden 0 value
\n
"
);
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"qscale has forbidden 0 value
\n
"
);
...
@@ -160,27 +162,27 @@ static int h261_resync(H261Context *h)
...
@@ -160,27 +162,27 @@ static int h261_resync(H261Context *h)
if
(
ret
>=
0
)
if
(
ret
>=
0
)
return
0
;
return
0
;
}
else
{
}
else
{
if
(
show_bits
(
&
s
->
gb
,
15
)
==
0
)
{
if
(
bitstream_peek
(
&
s
->
bc
,
15
)
==
0
)
{
ret
=
h261_decode_gob_header
(
h
);
ret
=
h261_decode_gob_header
(
h
);
if
(
ret
>=
0
)
if
(
ret
>=
0
)
return
0
;
return
0
;
}
}
// OK, it is not where it is supposed to be ...
// OK, it is not where it is supposed to be ...
s
->
gb
=
s
->
last_resync_gb
;
s
->
bc
=
s
->
last_resync_bc
;
align_get_bits
(
&
s
->
gb
);
bitstream_align
(
&
s
->
bc
);
left
=
get_bits_left
(
&
s
->
gb
);
left
=
bitstream_bits_left
(
&
s
->
bc
);
for
(;
left
>
15
+
1
+
4
+
5
;
left
-=
8
)
{
for
(;
left
>
15
+
1
+
4
+
5
;
left
-=
8
)
{
if
(
show_bits
(
&
s
->
gb
,
15
)
==
0
)
{
if
(
bitstream_peek
(
&
s
->
bc
,
15
)
==
0
)
{
GetBitContext
bak
=
s
->
gb
;
BitstreamContext
bak
=
s
->
bc
;
ret
=
h261_decode_gob_header
(
h
);
ret
=
h261_decode_gob_header
(
h
);
if
(
ret
>=
0
)
if
(
ret
>=
0
)
return
0
;
return
0
;
s
->
gb
=
bak
;
s
->
bc
=
bak
;
}
}
skip_bits
(
&
s
->
gb
,
8
);
bitstream_skip
(
&
s
->
bc
,
8
);
}
}
}
}
...
@@ -228,9 +230,9 @@ static const int mvmap[17] = {
...
@@ -228,9 +230,9 @@ static const int mvmap[17] = {
0
,
-
1
,
-
2
,
-
3
,
-
4
,
-
5
,
-
6
,
-
7
,
-
8
,
-
9
,
-
10
,
-
11
,
-
12
,
-
13
,
-
14
,
-
15
,
-
16
0
,
-
1
,
-
2
,
-
3
,
-
4
,
-
5
,
-
6
,
-
7
,
-
8
,
-
9
,
-
10
,
-
11
,
-
12
,
-
13
,
-
14
,
-
15
,
-
16
};
};
static
int
decode_mv_component
(
GetBitContext
*
gb
,
int
v
)
static
int
decode_mv_component
(
BitstreamContext
*
bc
,
int
v
)
{
{
int
mv_diff
=
get_vlc2
(
gb
,
h261_mv_vlc
.
table
,
H261_MV_VLC_BITS
,
2
);
int
mv_diff
=
bitstream_read_vlc
(
bc
,
h261_mv_vlc
.
table
,
H261_MV_VLC_BITS
,
2
);
/* check if mv_diff is valid */
/* check if mv_diff is valid */
if
(
mv_diff
<
0
)
if
(
mv_diff
<
0
)
...
@@ -238,7 +240,7 @@ static int decode_mv_component(GetBitContext *gb, int v)
...
@@ -238,7 +240,7 @@ static int decode_mv_component(GetBitContext *gb, int v)
mv_diff
=
mvmap
[
mv_diff
];
mv_diff
=
mvmap
[
mv_diff
];
if
(
mv_diff
&&
!
get_bits1
(
gb
))
if
(
mv_diff
&&
!
bitstream_read_bit
(
bc
))
mv_diff
=
-
mv_diff
;
mv_diff
=
-
mv_diff
;
v
+=
mv_diff
;
v
+=
mv_diff
;
...
@@ -270,7 +272,7 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
...
@@ -270,7 +272,7 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
scan_table
=
s
->
intra_scantable
.
permutated
;
scan_table
=
s
->
intra_scantable
.
permutated
;
if
(
s
->
mb_intra
)
{
if
(
s
->
mb_intra
)
{
/* DC coef */
/* DC coef */
level
=
get_bits
(
&
s
->
gb
,
8
);
level
=
bitstream_read
(
&
s
->
bc
,
8
);
// 0 (00000000b) and -128 (10000000b) are FORBIDDEN
// 0 (00000000b) and -128 (10000000b) are FORBIDDEN
if
((
level
&
0x7F
)
==
0
)
{
if
((
level
&
0x7F
)
==
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal dc %d at %d %d
\n
"
,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal dc %d at %d %d
\n
"
,
...
@@ -288,10 +290,10 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
...
@@ -288,10 +290,10 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
// EOB Not possible for first level when cbp is available (that's why the table is different)
// EOB Not possible for first level when cbp is available (that's why the table is different)
// 0 1 1s
// 0 1 1s
// * * 0*
// * * 0*
int
check
=
show_bits
(
&
s
->
gb
,
2
);
int
check
=
bitstream_peek
(
&
s
->
bc
,
2
);
i
=
0
;
i
=
0
;
if
(
check
&
0x2
)
{
if
(
check
&
0x2
)
{
skip_bits
(
&
s
->
gb
,
2
);
bitstream_skip
(
&
s
->
bc
,
2
);
block
[
0
]
=
(
check
&
0x1
)
?
-
1
:
1
;
block
[
0
]
=
(
check
&
0x1
)
?
-
1
:
1
;
i
=
1
;
i
=
1
;
}
}
...
@@ -303,7 +305,7 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
...
@@ -303,7 +305,7 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
return
0
;
return
0
;
}
}
for
(;;)
{
for
(;;)
{
code
=
get_vlc2
(
&
s
->
gb
,
rl
->
vlc
.
table
,
TCOEFF_VLC_BITS
,
2
);
code
=
bitstream_read_vlc
(
&
s
->
bc
,
rl
->
vlc
.
table
,
TCOEFF_VLC_BITS
,
2
);
if
(
code
<
0
)
{
if
(
code
<
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal ac vlc code at %dx%d
\n
"
,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal ac vlc code at %dx%d
\n
"
,
s
->
mb_x
,
s
->
mb_y
);
s
->
mb_x
,
s
->
mb_y
);
...
@@ -314,14 +316,14 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
...
@@ -314,14 +316,14 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded)
/* The remaining combinations of (run, level) are encoded with a
/* The remaining combinations of (run, level) are encoded with a
* 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits
* 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits
* level. */
* level. */
run
=
get_bits
(
&
s
->
gb
,
6
);
run
=
bitstream_read
(
&
s
->
bc
,
6
);
level
=
get_sbits
(
&
s
->
gb
,
8
);
level
=
bitstream_read_signed
(
&
s
->
bc
,
8
);
}
else
if
(
code
==
0
)
{
}
else
if
(
code
==
0
)
{
break
;
break
;
}
else
{
}
else
{
run
=
rl
->
table_run
[
code
];
run
=
rl
->
table_run
[
code
];
level
=
rl
->
table_level
[
code
];
level
=
rl
->
table_level
[
code
];
if
(
get_bits1
(
&
s
->
gb
))
if
(
bitstream_read_bit
(
&
s
->
bc
))
level
=
-
level
;
level
=
-
level
;
}
}
i
+=
run
;
i
+=
run
;
...
@@ -346,8 +348,8 @@ static int h261_decode_mb(H261Context *h)
...
@@ -346,8 +348,8 @@ static int h261_decode_mb(H261Context *h)
cbp
=
63
;
cbp
=
63
;
// Read mba
// Read mba
do
{
do
{
h
->
mba_diff
=
get_vlc2
(
&
s
->
gb
,
h261_mba_vlc
.
table
,
h
->
mba_diff
=
bitstream_read_vlc
(
&
s
->
bc
,
h261_mba_vlc
.
table
,
H261_MBA_VLC_BITS
,
2
);
H261_MBA_VLC_BITS
,
2
);
/* Check for slice end */
/* Check for slice end */
/* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing */
/* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing */
...
@@ -358,7 +360,7 @@ static int h261_decode_mb(H261Context *h)
...
@@ -358,7 +360,7 @@ static int h261_decode_mb(H261Context *h)
}
while
(
h
->
mba_diff
==
MBA_STUFFING
);
// stuffing
}
while
(
h
->
mba_diff
==
MBA_STUFFING
);
// stuffing
if
(
h
->
mba_diff
<
0
)
{
if
(
h
->
mba_diff
<
0
)
{
if
(
get_bits_left
(
&
s
->
gb
)
<=
7
)
if
(
bitstream_bits_left
(
&
s
->
bc
)
<=
7
)
return
SLICE_END
;
return
SLICE_END
;
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal mba at %d %d
\n
"
,
s
->
mb_x
,
s
->
mb_y
);
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"illegal mba at %d %d
\n
"
,
s
->
mb_x
,
s
->
mb_y
);
...
@@ -378,7 +380,7 @@ static int h261_decode_mb(H261Context *h)
...
@@ -378,7 +380,7 @@ static int h261_decode_mb(H261Context *h)
ff_update_block_index
(
s
);
ff_update_block_index
(
s
);
// Read mtype
// Read mtype
h
->
mtype
=
get_vlc2
(
&
s
->
gb
,
h261_mtype_vlc
.
table
,
H261_MTYPE_VLC_BITS
,
2
);
h
->
mtype
=
bitstream_read_vlc
(
&
s
->
bc
,
h261_mtype_vlc
.
table
,
H261_MTYPE_VLC_BITS
,
2
);
if
(
h
->
mtype
<
0
||
h
->
mtype
>=
FF_ARRAY_ELEMS
(
ff_h261_mtype_map
))
{
if
(
h
->
mtype
<
0
||
h
->
mtype
>=
FF_ARRAY_ELEMS
(
ff_h261_mtype_map
))
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Invalid mtype index %d
\n
"
,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Invalid mtype index %d
\n
"
,
h
->
mtype
);
h
->
mtype
);
...
@@ -388,7 +390,7 @@ static int h261_decode_mb(H261Context *h)
...
@@ -388,7 +390,7 @@ static int h261_decode_mb(H261Context *h)
// Read mquant
// Read mquant
if
(
IS_QUANT
(
h
->
mtype
))
if
(
IS_QUANT
(
h
->
mtype
))
ff_set_qscale
(
s
,
get_bits
(
&
s
->
gb
,
5
));
ff_set_qscale
(
s
,
bitstream_read
(
&
s
->
bc
,
5
));
s
->
mb_intra
=
IS_INTRA4x4
(
h
->
mtype
);
s
->
mb_intra
=
IS_INTRA4x4
(
h
->
mtype
);
...
@@ -408,8 +410,8 @@ static int h261_decode_mb(H261Context *h)
...
@@ -408,8 +410,8 @@ static int h261_decode_mb(H261Context *h)
h
->
current_mv_y
=
0
;
h
->
current_mv_y
=
0
;
}
}
h
->
current_mv_x
=
decode_mv_component
(
&
s
->
gb
,
h
->
current_mv_x
);
h
->
current_mv_x
=
decode_mv_component
(
&
s
->
bc
,
h
->
current_mv_x
);
h
->
current_mv_y
=
decode_mv_component
(
&
s
->
gb
,
h
->
current_mv_y
);
h
->
current_mv_y
=
decode_mv_component
(
&
s
->
bc
,
h
->
current_mv_y
);
}
else
{
}
else
{
h
->
current_mv_x
=
0
;
h
->
current_mv_x
=
0
;
h
->
current_mv_y
=
0
;
h
->
current_mv_y
=
0
;
...
@@ -417,7 +419,7 @@ static int h261_decode_mb(H261Context *h)
...
@@ -417,7 +419,7 @@ static int h261_decode_mb(H261Context *h)
// Read cbp
// Read cbp
if
(
HAS_CBP
(
h
->
mtype
))
if
(
HAS_CBP
(
h
->
mtype
))
cbp
=
get_vlc2
(
&
s
->
gb
,
h261_cbp_vlc
.
table
,
H261_CBP_VLC_BITS
,
2
)
+
1
;
cbp
=
bitstream_read_vlc
(
&
s
->
bc
,
h261_cbp_vlc
.
table
,
H261_CBP_VLC_BITS
,
2
)
+
1
;
if
(
s
->
mb_intra
)
{
if
(
s
->
mb_intra
)
{
s
->
current_picture
.
mb_type
[
xy
]
=
MB_TYPE_INTRA
;
s
->
current_picture
.
mb_type
[
xy
]
=
MB_TYPE_INTRA
;
...
@@ -460,8 +462,8 @@ static int h261_decode_picture_header(H261Context *h)
...
@@ -460,8 +462,8 @@ static int h261_decode_picture_header(H261Context *h)
int
format
,
i
;
int
format
,
i
;
uint32_t
startcode
=
0
;
uint32_t
startcode
=
0
;
for
(
i
=
get_bits_left
(
&
s
->
gb
);
i
>
24
;
i
-=
1
)
{
for
(
i
=
bitstream_bits_left
(
&
s
->
bc
);
i
>
24
;
i
-=
1
)
{
startcode
=
((
startcode
<<
1
)
|
get_bits
(
&
s
->
gb
,
1
))
&
0x000FFFFF
;
startcode
=
((
startcode
<<
1
)
|
bitstream_read
(
&
s
->
bc
,
1
))
&
0x000FFFFF
;
if
(
startcode
==
0x10
)
if
(
startcode
==
0x10
)
break
;
break
;
...
@@ -473,7 +475,7 @@ static int h261_decode_picture_header(H261Context *h)
...
@@ -473,7 +475,7 @@ static int h261_decode_picture_header(H261Context *h)
}
}
/* temporal reference */
/* temporal reference */
i
=
get_bits
(
&
s
->
gb
,
5
);
/* picture timestamp */
i
=
bitstream_read
(
&
s
->
bc
,
5
);
/* picture timestamp */
if
(
i
<
(
s
->
picture_number
&
31
))
if
(
i
<
(
s
->
picture_number
&
31
))
i
+=
32
;
i
+=
32
;
s
->
picture_number
=
(
s
->
picture_number
&
~
31
)
+
i
;
s
->
picture_number
=
(
s
->
picture_number
&
~
31
)
+
i
;
...
@@ -481,11 +483,11 @@ static int h261_decode_picture_header(H261Context *h)
...
@@ -481,11 +483,11 @@ static int h261_decode_picture_header(H261Context *h)
s
->
avctx
->
framerate
=
(
AVRational
)
{
30000
,
1001
};
s
->
avctx
->
framerate
=
(
AVRational
)
{
30000
,
1001
};
/* PTYPE starts here */
/* PTYPE starts here */
skip_bits1
(
&
s
->
gb
);
/* split screen off */
bitstream_skip
(
&
s
->
bc
,
1
);
/* split screen off */
skip_bits1
(
&
s
->
gb
);
/* camera off */
bitstream_skip
(
&
s
->
bc
,
1
);
/* camera off */
skip_bits1
(
&
s
->
gb
);
/* freeze picture release off */
bitstream_skip
(
&
s
->
bc
,
1
);
/* freeze picture release off */
format
=
get_bits1
(
&
s
->
gb
);
format
=
bitstream_read_bit
(
&
s
->
bc
);
// only 2 formats possible
// only 2 formats possible
if
(
format
==
0
)
{
// QCIF
if
(
format
==
0
)
{
// QCIF
...
@@ -502,12 +504,12 @@ static int h261_decode_picture_header(H261Context *h)
...
@@ -502,12 +504,12 @@ static int h261_decode_picture_header(H261Context *h)
s
->
mb_num
=
s
->
mb_width
*
s
->
mb_height
;
s
->
mb_num
=
s
->
mb_width
*
s
->
mb_height
;
skip_bits1
(
&
s
->
gb
);
/* still image mode off */
bitstream_skip
(
&
s
->
bc
,
1
);
/* still image mode off */
skip_bits1
(
&
s
->
gb
);
/* Reserved */
bitstream_skip
(
&
s
->
bc
,
1
);
/* Reserved */
/* PEI */
/* PEI */
while
(
get_bits1
(
&
s
->
gb
)
!=
0
)
while
(
bitstream_read_bit
(
&
s
->
bc
)
!=
0
)
skip_bits
(
&
s
->
gb
,
8
);
bitstream_skip
(
&
s
->
bc
,
8
);
/* H.261 has no I-frames, but if we pass AV_PICTURE_TYPE_I for the first
/* H.261 has no I-frames, but if we pass AV_PICTURE_TYPE_I for the first
* frame, the codec crashes if it does not contain all I-blocks
* frame, the codec crashes if it does not contain all I-blocks
...
@@ -552,7 +554,7 @@ static int h261_decode_gob(H261Context *h)
...
@@ -552,7 +554,7 @@ static int h261_decode_gob(H261Context *h)
*/
*/
static
int
get_consumed_bytes
(
MpegEncContext
*
s
,
int
buf_size
)
static
int
get_consumed_bytes
(
MpegEncContext
*
s
,
int
buf_size
)
{
{
int
pos
=
get_bits_count
(
&
s
->
gb
)
>>
3
;
int
pos
=
bitstream_tell
(
&
s
->
bc
)
>>
3
;
if
(
pos
==
0
)
if
(
pos
==
0
)
pos
=
1
;
// avoid infinite loops (i doubt that is needed but ...)
pos
=
1
;
// avoid infinite loops (i doubt that is needed but ...)
if
(
pos
+
10
>
buf_size
)
if
(
pos
+
10
>
buf_size
)
...
@@ -577,7 +579,7 @@ static int h261_decode_frame(AVCodecContext *avctx, void *data,
...
@@ -577,7 +579,7 @@ static int h261_decode_frame(AVCodecContext *avctx, void *data,
h
->
gob_start_code_skipped
=
0
;
h
->
gob_start_code_skipped
=
0
;
retry:
retry:
init_get_bits
(
&
s
->
gb
,
buf
,
buf_size
*
8
);
bitstream_init8
(
&
s
->
bc
,
buf
,
buf_size
);
if
(
!
s
->
context_initialized
)
if
(
!
s
->
context_initialized
)
// we need the IDCT permutation for reading a custom matrix
// we need the IDCT permutation for reading a custom matrix
...
...
libavcodec/mpegvideo.h
View file @
2d722195
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#include <float.h>
#include <float.h>
#include "avcodec.h"
#include "avcodec.h"
#include "bitstream.h"
#include "blockdsp.h"
#include "blockdsp.h"
#include "error_resilience.h"
#include "error_resilience.h"
#include "fdctdsp.h"
#include "fdctdsp.h"
...
@@ -344,6 +345,7 @@ typedef struct MpegEncContext {
...
@@ -344,6 +345,7 @@ typedef struct MpegEncContext {
int
resync_mb_x
;
///< x position of last resync marker
int
resync_mb_x
;
///< x position of last resync marker
int
resync_mb_y
;
///< y position of last resync marker
int
resync_mb_y
;
///< y position of last resync marker
GetBitContext
last_resync_gb
;
///< used to search for the next resync marker
GetBitContext
last_resync_gb
;
///< used to search for the next resync marker
BitstreamContext
last_resync_bc
;
///< used to search for the next resync marker
int
mb_num_left
;
///< number of MBs left in this video packet (for partitioned Slices only)
int
mb_num_left
;
///< number of MBs left in this video packet (for partitioned Slices only)
int
next_p_frame_damaged
;
///< set if the next p frame is damaged, to avoid showing trashed B-frames
int
next_p_frame_damaged
;
///< set if the next p frame is damaged, to avoid showing trashed B-frames
...
@@ -428,6 +430,7 @@ typedef struct MpegEncContext {
...
@@ -428,6 +430,7 @@ typedef struct MpegEncContext {
/* decompression specific */
/* decompression specific */
GetBitContext
gb
;
GetBitContext
gb
;
BitstreamContext
bc
;
/* MPEG-1 specific */
/* MPEG-1 specific */
int
gop_picture_number
;
///< index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific
int
gop_picture_number
;
///< index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific
...
...
libavformat/h261dec.c
View file @
2d722195
...
@@ -19,7 +19,8 @@
...
@@ -19,7 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
#include "libavcodec/get_bits.h"
#include "libavcodec/bitstream.h"
#include "avformat.h"
#include "avformat.h"
#include "rawdec.h"
#include "rawdec.h"
...
@@ -31,16 +32,16 @@ static int h261_probe(AVProbeData *p)
...
@@ -31,16 +32,16 @@ static int h261_probe(AVProbeData *p)
int
invalid_psc
=
0
;
int
invalid_psc
=
0
;
int
next_gn
=
0
;
int
next_gn
=
0
;
int
src_fmt
=
0
;
int
src_fmt
=
0
;
GetBitContext
gb
;
BitstreamContext
bc
;
init_get_bits
(
&
gb
,
p
->
buf
,
p
->
buf_size
*
8
);
bitstream_init
(
&
bc
,
p
->
buf
,
p
->
buf_size
*
8
);
for
(
i
=
0
;
i
<
p
->
buf_size
*
8
;
i
++
){
for
(
i
=
0
;
i
<
p
->
buf_size
*
8
;
i
++
){
if
((
code
&
0x01ff0000
)
||
!
(
code
&
0xff00
))
{
if
((
code
&
0x01ff0000
)
||
!
(
code
&
0xff00
))
{
code
=
(
code
<<
8
)
+
get_bits
(
&
gb
,
8
);
code
=
(
code
<<
8
)
+
bitstream_read
(
&
bc
,
8
);
i
+=
7
;
i
+=
7
;
}
else
}
else
code
=
(
code
<<
1
)
+
get_bits1
(
&
gb
);
code
=
(
code
<<
1
)
+
bitstream_read_bit
(
&
bc
);
if
((
code
&
0xffff0000
)
==
0x10000
)
{
if
((
code
&
0xffff0000
)
==
0x10000
)
{
int
gn
=
(
code
>>
12
)
&
0xf
;
int
gn
=
(
code
>>
12
)
&
0xf
;
if
(
!
gn
)
if
(
!
gn
)
...
...
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