Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
ee8af2dd
Commit
ee8af2dd
authored
Nov 26, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpeg4videodec: move MpegEncContext.shape to Mpeg4DecContext
parent
35e0833d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
39 additions
and
30 deletions
+39
-30
h263dec.c
libavcodec/h263dec.c
+2
-2
ituh263dec.c
libavcodec/ituh263dec.c
+2
-2
mpeg4video.h
libavcodec/mpeg4video.h
+4
-2
mpeg4video_parser.c
libavcodec/mpeg4video_parser.c
+2
-2
mpeg4videodec.c
libavcodec/mpeg4videodec.c
+27
-20
mpegvideo.c
libavcodec/mpegvideo.c
+2
-1
mpegvideo.h
libavcodec/mpegvideo.h
+0
-1
No files found.
libavcodec/h263dec.c
View file @
ee8af2dd
...
...
@@ -442,9 +442,9 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
s
->
avctx
->
extradata_size
);
if
(
ret
<
0
)
return
ret
;
ff_mpeg4_decode_picture_header
(
s
,
&
gb
);
ff_mpeg4_decode_picture_header
(
avctx
->
priv_data
,
&
gb
);
}
ret
=
ff_mpeg4_decode_picture_header
(
s
,
&
s
->
gb
);
ret
=
ff_mpeg4_decode_picture_header
(
avctx
->
priv_data
,
&
s
->
gb
);
}
else
if
(
CONFIG_H263I_DECODER
&&
s
->
codec_id
==
AV_CODEC_ID_H263I
)
{
ret
=
ff_intel_h263_decode_picture_header
(
s
);
}
else
if
(
CONFIG_FLV_DECODER
&&
s
->
h263_flv
)
{
...
...
libavcodec/ituh263dec.c
View file @
ee8af2dd
...
...
@@ -235,7 +235,7 @@ int ff_h263_resync(MpegEncContext *s){
if
(
show_bits
(
&
s
->
gb
,
16
)
==
0
){
pos
=
get_bits_count
(
&
s
->
gb
);
if
(
CONFIG_MPEG4_DECODER
&&
s
->
codec_id
==
AV_CODEC_ID_MPEG4
)
ret
=
ff_mpeg4_decode_video_packet_header
(
s
);
ret
=
ff_mpeg4_decode_video_packet_header
(
s
->
avctx
->
priv_data
);
else
ret
=
h263_decode_gob_header
(
s
);
if
(
ret
>=
0
)
...
...
@@ -252,7 +252,7 @@ int ff_h263_resync(MpegEncContext *s){
pos
=
get_bits_count
(
&
s
->
gb
);
if
(
CONFIG_MPEG4_DECODER
&&
s
->
codec_id
==
AV_CODEC_ID_MPEG4
)
ret
=
ff_mpeg4_decode_video_packet_header
(
s
);
ret
=
ff_mpeg4_decode_video_packet_header
(
s
->
avctx
->
priv_data
);
else
ret
=
h263_decode_gob_header
(
s
);
if
(
ret
>=
0
)
...
...
libavcodec/mpeg4video.h
View file @
ee8af2dd
...
...
@@ -61,6 +61,8 @@
typedef
struct
Mpeg4DecContext
{
MpegEncContext
m
;
int
shape
;
}
Mpeg4DecContext
;
/* dc encoding for mpeg4 */
...
...
@@ -98,7 +100,7 @@ void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n,
void
ff_set_mpeg4_time
(
MpegEncContext
*
s
);
void
ff_mpeg4_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number
);
int
ff_mpeg4_decode_picture_header
(
Mpeg
EncContext
*
s
,
GetBitContext
*
gb
);
int
ff_mpeg4_decode_picture_header
(
Mpeg
4DecContext
*
ctx
,
GetBitContext
*
gb
);
void
ff_mpeg4_encode_video_packet_header
(
MpegEncContext
*
s
);
void
ff_mpeg4_clean_buffers
(
MpegEncContext
*
s
);
void
ff_mpeg4_stuffing
(
PutBitContext
*
pbc
);
...
...
@@ -107,7 +109,7 @@ void ff_mpeg4_merge_partitions(MpegEncContext *s);
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*
s
);
int
ff_mpeg4_decode_partitions
(
MpegEncContext
*
s
);
int
ff_mpeg4_get_video_packet_prefix_length
(
MpegEncContext
*
s
);
int
ff_mpeg4_decode_video_packet_header
(
Mpeg
EncContext
*
s
);
int
ff_mpeg4_decode_video_packet_header
(
Mpeg
4DecContext
*
ctx
);
void
ff_mpeg4_init_direct_mv
(
MpegEncContext
*
s
);
/**
...
...
libavcodec/mpeg4video_parser.c
View file @
ee8af2dd
...
...
@@ -86,11 +86,11 @@ static int av_mpeg4_decode_header(AVCodecParserContext *s1,
if
(
avctx
->
extradata_size
&&
pc
->
first_picture
)
{
init_get_bits
(
gb
,
avctx
->
extradata
,
avctx
->
extradata_size
*
8
);
ret
=
ff_mpeg4_decode_picture_header
(
s
,
gb
);
ret
=
ff_mpeg4_decode_picture_header
(
dec_ctx
,
gb
);
}
init_get_bits
(
gb
,
buf
,
8
*
buf_size
);
ret
=
ff_mpeg4_decode_picture_header
(
s
,
gb
);
ret
=
ff_mpeg4_decode_picture_header
(
dec_ctx
,
gb
);
if
(
s
->
width
&&
(
!
avctx
->
width
||
!
avctx
->
height
||
!
avctx
->
coded_width
||
!
avctx
->
coded_height
))
{
ret
=
ff_set_dimensions
(
avctx
,
s
->
width
,
s
->
height
);
...
...
libavcodec/mpeg4videodec.c
View file @
ee8af2dd
...
...
@@ -368,8 +368,10 @@ static int mpeg4_decode_sprite_trajectory(MpegEncContext *s, GetBitContext *gb)
* Decode the next video packet.
* @return <0 if something went wrong
*/
int
ff_mpeg4_decode_video_packet_header
(
Mpeg
EncContext
*
s
)
int
ff_mpeg4_decode_video_packet_header
(
Mpeg
4DecContext
*
ctx
)
{
MpegEncContext
*
s
=
&
ctx
->
m
;
int
mb_num_bits
=
av_log2
(
s
->
mb_num
-
1
)
+
1
;
int
header_extension
=
0
,
mb_num
,
len
;
...
...
@@ -386,7 +388,7 @@ int ff_mpeg4_decode_video_packet_header(MpegEncContext *s)
return
-
1
;
}
if
(
s
->
shape
!=
RECT_SHAPE
)
{
if
(
ctx
->
shape
!=
RECT_SHAPE
)
{
header_extension
=
get_bits1
(
&
s
->
gb
);
// FIXME more stuff here
}
...
...
@@ -414,13 +416,13 @@ int ff_mpeg4_decode_video_packet_header(MpegEncContext *s)
s
->
mb_x
=
mb_num
%
s
->
mb_width
;
s
->
mb_y
=
mb_num
/
s
->
mb_width
;
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
)
{
int
qscale
=
get_bits
(
&
s
->
gb
,
s
->
quant_precision
);
if
(
qscale
)
s
->
chroma_qscale
=
s
->
qscale
=
qscale
;
}
if
(
s
->
shape
==
RECT_SHAPE
)
if
(
ctx
->
shape
==
RECT_SHAPE
)
header_extension
=
get_bits1
(
&
s
->
gb
);
if
(
header_extension
)
{
...
...
@@ -436,7 +438,7 @@ int ff_mpeg4_decode_video_packet_header(MpegEncContext *s)
skip_bits
(
&
s
->
gb
,
2
);
/* vop coding type */
// FIXME not rect stuff here
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
)
{
skip_bits
(
&
s
->
gb
,
3
);
/* intra dc vlc threshold */
// FIXME don't just ignore everything
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_S
&&
...
...
@@ -1652,8 +1654,9 @@ static int mpeg4_decode_profile_level(MpegEncContext *s, GetBitContext *gb)
return
0
;
}
static
int
decode_vol_header
(
Mpeg
EncContext
*
s
,
GetBitContext
*
gb
)
static
int
decode_vol_header
(
Mpeg
4DecContext
*
ctx
,
GetBitContext
*
gb
)
{
MpegEncContext
*
s
=
&
ctx
->
m
;
int
width
,
height
,
vo_ver_id
;
/* vol header */
...
...
@@ -1699,10 +1702,10 @@ static int decode_vol_header(MpegEncContext *s, GetBitContext *gb)
s
->
low_delay
=
0
;
}
s
->
shape
=
get_bits
(
gb
,
2
);
/* vol shape */
if
(
s
->
shape
!=
RECT_SHAPE
)
ctx
->
shape
=
get_bits
(
gb
,
2
);
/* vol shape */
if
(
ctx
->
shape
!=
RECT_SHAPE
)
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"only rectangular vol supported
\n
"
);
if
(
s
->
shape
==
GRAY_SHAPE
&&
vo_ver_id
!=
1
)
{
if
(
ctx
->
shape
==
GRAY_SHAPE
&&
vo_ver_id
!=
1
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"Gray shape not supported
\n
"
);
skip_bits
(
gb
,
4
);
/* video_object_layer_shape_extension */
}
...
...
@@ -1729,8 +1732,8 @@ static int decode_vol_header(MpegEncContext *s, GetBitContext *gb)
s
->
t_frame
=
0
;
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
s
->
shape
==
RECT_SHAPE
)
{
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
ctx
->
shape
==
RECT_SHAPE
)
{
skip_bits1
(
gb
);
/* marker */
width
=
get_bits
(
gb
,
13
);
skip_bits1
(
gb
);
/* marker */
...
...
@@ -2038,8 +2041,9 @@ static int decode_user_data(MpegEncContext *s, GetBitContext *gb)
return
0
;
}
static
int
decode_vop_header
(
Mpeg
EncContext
*
s
,
GetBitContext
*
gb
)
static
int
decode_vop_header
(
Mpeg
4DecContext
*
ctx
,
GetBitContext
*
gb
)
{
MpegEncContext
*
s
=
&
ctx
->
m
;
int
time_incr
,
time_increment
;
s
->
pict_type
=
get_bits
(
gb
,
2
)
+
AV_PICTURE_TYPE_I
;
/* pict type: I = 0 , P = 1 */
...
...
@@ -2134,7 +2138,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"vop not coded
\n
"
);
return
FRAME_SKIPPED
;
}
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
&&
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
&&
(
s
->
pict_type
==
AV_PICTURE_TYPE_P
||
(
s
->
pict_type
==
AV_PICTURE_TYPE_S
&&
s
->
vol_sprite_usage
==
GMC_SPRITE
)))
{
...
...
@@ -2145,7 +2149,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
}
// FIXME reduced res stuff
if
(
s
->
shape
!=
RECT_SHAPE
)
{
if
(
ctx
->
shape
!=
RECT_SHAPE
)
{
if
(
s
->
vol_sprite_usage
!=
1
||
s
->
pict_type
!=
AV_PICTURE_TYPE_I
)
{
skip_bits
(
gb
,
13
);
/* width */
skip_bits1
(
gb
);
/* marker */
...
...
@@ -2163,7 +2167,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
// FIXME complexity estimation stuff
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
)
{
skip_bits_long
(
gb
,
s
->
cplx_estimation_trash_i
);
if
(
s
->
pict_type
!=
AV_PICTURE_TYPE_I
)
skip_bits_long
(
gb
,
s
->
cplx_estimation_trash_p
);
...
...
@@ -2202,7 +2206,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"static sprite not supported
\n
"
);
}
if
(
s
->
shape
!=
BIN_ONLY_SHAPE
)
{
if
(
ctx
->
shape
!=
BIN_ONLY_SHAPE
)
{
s
->
chroma_qscale
=
s
->
qscale
=
get_bits
(
gb
,
s
->
quant_precision
);
if
(
s
->
qscale
==
0
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
...
...
@@ -2241,7 +2245,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
}
if
(
!
s
->
scalability
)
{
if
(
s
->
shape
!=
RECT_SHAPE
&&
s
->
pict_type
!=
AV_PICTURE_TYPE_I
)
if
(
ctx
->
shape
!=
RECT_SHAPE
&&
s
->
pict_type
!=
AV_PICTURE_TYPE_I
)
skip_bits1
(
gb
);
// vop shape coding type
}
else
{
if
(
s
->
enhancement_type
)
{
...
...
@@ -2282,8 +2286,9 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb)
* FRAME_SKIPPED if a not coded VOP is found
* 0 if a VOP is found
*/
int
ff_mpeg4_decode_picture_header
(
Mpeg
EncContext
*
s
,
GetBitContext
*
gb
)
int
ff_mpeg4_decode_picture_header
(
Mpeg
4DecContext
*
ctx
,
GetBitContext
*
gb
)
{
MpegEncContext
*
s
=
&
ctx
->
m
;
unsigned
startcode
,
v
;
/* search next start code */
...
...
@@ -2373,7 +2378,7 @@ int ff_mpeg4_decode_picture_header(MpegEncContext *s, GetBitContext *gb)
}
if
(
startcode
>=
0x120
&&
startcode
<=
0x12F
)
{
if
(
decode_vol_header
(
s
,
gb
)
<
0
)
if
(
decode_vol_header
(
ctx
,
gb
)
<
0
)
return
-
1
;
}
else
if
(
startcode
==
USER_DATA_STARTCODE
)
{
decode_user_data
(
s
,
gb
);
...
...
@@ -2394,7 +2399,7 @@ end:
s
->
low_delay
=
1
;
s
->
avctx
->
has_b_frames
=
!
s
->
low_delay
;
return
decode_vop_header
(
s
,
gb
);
return
decode_vop_header
(
ctx
,
gb
);
}
static
int
mpeg4_update_thread_context
(
AVCodecContext
*
dst
,
...
...
@@ -2408,6 +2413,8 @@ static int mpeg4_update_thread_context(AVCodecContext *dst,
if
(
ret
<
0
)
return
ret
;
s
->
shape
=
s1
->
shape
;
return
0
;
}
...
...
libavcodec/mpegvideo.c
View file @
ee8af2dd
...
...
@@ -717,7 +717,8 @@ do {\
// MPEG4 timing info
memcpy
(
&
s
->
time_increment_bits
,
&
s1
->
time_increment_bits
,
(
char
*
)
&
s1
->
shape
-
(
char
*
)
&
s1
->
time_increment_bits
);
(
char
*
)
&
s1
->
pb_field_time
+
sizeof
(
s1
->
pb_field_time
)
-
(
char
*
)
&
s1
->
time_increment_bits
);
// B-frame info
s
->
max_b_frames
=
s1
->
max_b_frames
;
...
...
libavcodec/mpegvideo.h
View file @
ee8af2dd
...
...
@@ -578,7 +578,6 @@ typedef struct MpegEncContext {
uint16_t
pb_time
;
///< time distance between the last b and p,s,i frame
uint16_t
pp_field_time
;
uint16_t
pb_field_time
;
///< like above, just for interlaced
int
shape
;
int
vol_sprite_usage
;
int
sprite_width
;
int
sprite_height
;
...
...
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