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
eda7571e
Commit
eda7571e
authored
Sep 02, 2014
by
Gabriel Dume
Committed by
Diego Biurrun
Sep 02, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wmv2: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
7a1d6ddd
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
382 additions
and
362 deletions
+382
-362
wmv2.c
libavcodec/wmv2.c
+68
-63
wmv2.h
libavcodec/wmv2.h
+4
-4
wmv2dec.c
libavcodec/wmv2dec.c
+235
-224
wmv2enc.c
libavcodec/wmv2enc.c
+75
-71
No files found.
libavcodec/wmv2.c
View file @
eda7571e
...
...
@@ -26,8 +26,9 @@
#include "wmv2.h"
av_cold
void
ff_wmv2_common_init
(
Wmv2Context
*
w
){
MpegEncContext
*
const
s
=
&
w
->
s
;
av_cold
void
ff_wmv2_common_init
(
Wmv2Context
*
w
)
{
MpegEncContext
*
const
s
=
&
w
->
s
;
ff_blockdsp_init
(
&
s
->
bdsp
,
s
->
avctx
);
ff_wmv2dsp_init
(
&
w
->
wdsp
);
...
...
@@ -51,84 +52,87 @@ av_cold void ff_wmv2_common_init(Wmv2Context * w){
s
->
idsp
.
idct
=
NULL
;
}
static
void
wmv2_add_block
(
Wmv2Context
*
w
,
int16_t
*
block1
,
uint8_t
*
dst
,
int
stride
,
int
n
){
MpegEncContext
*
const
s
=
&
w
->
s
;
if
(
s
->
block_last_index
[
n
]
>=
0
)
{
switch
(
w
->
abt_type_table
[
n
]){
case
0
:
w
->
wdsp
.
idct_add
(
dst
,
stride
,
block1
);
break
;
case
1
:
ff_simple_idct84_add
(
dst
,
stride
,
block1
);
ff_simple_idct84_add
(
dst
+
4
*
stride
,
stride
,
w
->
abt_block2
[
n
]);
s
->
bdsp
.
clear_block
(
w
->
abt_block2
[
n
]);
break
;
case
2
:
ff_simple_idct48_add
(
dst
,
stride
,
block1
);
ff_simple_idct48_add
(
dst
+
4
,
stride
,
w
->
abt_block2
[
n
]);
s
->
bdsp
.
clear_block
(
w
->
abt_block2
[
n
]);
break
;
default
:
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"internal error in WMV2 abt
\n
"
);
static
void
wmv2_add_block
(
Wmv2Context
*
w
,
int16_t
*
block1
,
uint8_t
*
dst
,
int
stride
,
int
n
)
{
MpegEncContext
*
const
s
=
&
w
->
s
;
if
(
s
->
block_last_index
[
n
]
>=
0
)
{
switch
(
w
->
abt_type_table
[
n
])
{
case
0
:
w
->
wdsp
.
idct_add
(
dst
,
stride
,
block1
);
break
;
case
1
:
ff_simple_idct84_add
(
dst
,
stride
,
block1
);
ff_simple_idct84_add
(
dst
+
4
*
stride
,
stride
,
w
->
abt_block2
[
n
]);
s
->
bdsp
.
clear_block
(
w
->
abt_block2
[
n
]);
break
;
case
2
:
ff_simple_idct48_add
(
dst
,
stride
,
block1
);
ff_simple_idct48_add
(
dst
+
4
,
stride
,
w
->
abt_block2
[
n
]);
s
->
bdsp
.
clear_block
(
w
->
abt_block2
[
n
]);
break
;
default:
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"internal error in WMV2 abt
\n
"
);
}
}
}
}
void
ff_wmv2_add_mb
(
MpegEncContext
*
s
,
int16_t
block1
[
6
][
64
],
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
){
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
void
ff_wmv2_add_mb
(
MpegEncContext
*
s
,
int16_t
block1
[
6
][
64
],
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
)
{
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
wmv2_add_block
(
w
,
block1
[
0
],
dest_y
,
s
->
linesize
,
0
);
wmv2_add_block
(
w
,
block1
[
1
],
dest_y
+
8
,
s
->
linesize
,
1
);
wmv2_add_block
(
w
,
block1
[
2
],
dest_y
+
8
*
s
->
linesize
,
s
->
linesize
,
2
);
wmv2_add_block
(
w
,
block1
[
3
],
dest_y
+
8
+
8
*
s
->
linesize
,
s
->
linesize
,
3
);
wmv2_add_block
(
w
,
block1
[
0
],
dest_y
,
s
->
linesize
,
0
);
wmv2_add_block
(
w
,
block1
[
1
],
dest_y
+
8
,
s
->
linesize
,
1
);
wmv2_add_block
(
w
,
block1
[
2
],
dest_y
+
8
*
s
->
linesize
,
s
->
linesize
,
2
);
wmv2_add_block
(
w
,
block1
[
3
],
dest_y
+
8
+
8
*
s
->
linesize
,
s
->
linesize
,
3
);
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
wmv2_add_block
(
w
,
block1
[
4
],
dest_cb
,
s
->
uvlinesize
,
4
);
wmv2_add_block
(
w
,
block1
[
5
],
dest_cr
,
s
->
uvlinesize
,
5
);
wmv2_add_block
(
w
,
block1
[
4
],
dest_cb
,
s
->
uvlinesize
,
4
);
wmv2_add_block
(
w
,
block1
[
5
],
dest_cr
,
s
->
uvlinesize
,
5
);
}
void
ff_mspel_motion
(
MpegEncContext
*
s
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
uint8_t
**
ref_picture
,
op_pixels_func
(
*
pix_op
)[
4
],
int
motion_x
,
int
motion_y
,
int
h
)
void
ff_mspel_motion
(
MpegEncContext
*
s
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
uint8_t
**
ref_picture
,
op_pixels_func
(
*
pix_op
)[
4
],
int
motion_x
,
int
motion_y
,
int
h
)
{
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
uint8_t
*
ptr
;
int
dxy
,
offset
,
mx
,
my
,
src_x
,
src_y
,
v_edge_pos
;
ptrdiff_t
linesize
,
uvlinesize
;
int
emu
=
0
;
int
emu
=
0
;
dxy
=
((
motion_y
&
1
)
<<
1
)
|
(
motion_x
&
1
);
dxy
=
2
*
dxy
+
w
->
hshift
;
dxy
=
((
motion_y
&
1
)
<<
1
)
|
(
motion_x
&
1
);
dxy
=
2
*
dxy
+
w
->
hshift
;
src_x
=
s
->
mb_x
*
16
+
(
motion_x
>>
1
);
src_y
=
s
->
mb_y
*
16
+
(
motion_y
>>
1
);
/* WARNING: do no forget half pels */
v_edge_pos
=
s
->
v_edge_pos
;
src_x
=
av_clip
(
src_x
,
-
16
,
s
->
width
);
src_y
=
av_clip
(
src_y
,
-
16
,
s
->
height
);
src_x
=
av_clip
(
src_x
,
-
16
,
s
->
width
);
src_y
=
av_clip
(
src_y
,
-
16
,
s
->
height
);
if
(
src_x
<=
-
16
||
src_x
>=
s
->
width
)
if
(
src_x
<=
-
16
||
src_x
>=
s
->
width
)
dxy
&=
~
3
;
if
(
src_y
<=
-
16
||
src_y
>=
s
->
height
)
if
(
src_y
<=
-
16
||
src_y
>=
s
->
height
)
dxy
&=
~
4
;
linesize
=
s
->
linesize
;
uvlinesize
=
s
->
uvlinesize
;
ptr
=
ref_picture
[
0
]
+
(
src_y
*
linesize
)
+
src_x
;
if
(
src_x
<
1
||
src_y
<
1
||
src_x
+
17
>=
s
->
h_edge_pos
||
src_y
+
h
+
1
>=
v_edge_pos
){
s
->
vdsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
ptr
-
1
-
s
->
linesize
,
s
->
linesize
,
s
->
linesize
,
19
,
19
,
ptr
=
ref_picture
[
0
]
+
(
src_y
*
linesize
)
+
src_x
;
if
(
src_x
<
1
||
src_y
<
1
||
src_x
+
17
>=
s
->
h_edge_pos
||
src_y
+
h
+
1
>=
v_edge_pos
)
{
s
->
vdsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
ptr
-
1
-
s
->
linesize
,
s
->
linesize
,
s
->
linesize
,
19
,
19
,
src_x
-
1
,
src_y
-
1
,
s
->
h_edge_pos
,
s
->
v_edge_pos
);
ptr
=
s
->
edge_emu_buffer
+
1
+
s
->
linesize
;
emu
=
1
;
ptr
=
s
->
edge_emu_buffer
+
1
+
s
->
linesize
;
emu
=
1
;
}
w
->
wdsp
.
put_mspel_pixels_tab
[
dxy
](
dest_y
,
ptr
,
linesize
);
...
...
@@ -136,7 +140,8 @@ void ff_mspel_motion(MpegEncContext *s,
w
->
wdsp
.
put_mspel_pixels_tab
[
dxy
](
dest_y
+
8
*
linesize
,
ptr
+
8
*
linesize
,
linesize
);
w
->
wdsp
.
put_mspel_pixels_tab
[
dxy
](
dest_y
+
8
+
8
*
linesize
,
ptr
+
8
+
8
*
linesize
,
linesize
);
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
if
(
s
->
out_format
==
FMT_H263
)
{
dxy
=
0
;
...
...
@@ -147,9 +152,9 @@ void ff_mspel_motion(MpegEncContext *s,
mx
=
motion_x
>>
2
;
my
=
motion_y
>>
2
;
}
else
{
mx
=
motion_x
/
2
;
my
=
motion_y
/
2
;
dxy
=
((
my
&
1
)
<<
1
)
|
(
mx
&
1
);
mx
=
motion_x
/
2
;
my
=
motion_y
/
2
;
dxy
=
((
my
&
1
)
<<
1
)
|
(
mx
&
1
);
mx
>>=
1
;
my
>>=
1
;
}
...
...
@@ -163,25 +168,25 @@ void ff_mspel_motion(MpegEncContext *s,
if
(
src_y
==
(
s
->
height
>>
1
))
dxy
&=
~
2
;
offset
=
(
src_y
*
uvlinesize
)
+
src_x
;
ptr
=
ref_picture
[
1
]
+
offset
;
if
(
emu
)
{
ptr
=
ref_picture
[
1
]
+
offset
;
if
(
emu
)
{
s
->
vdsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
ptr
,
s
->
uvlinesize
,
s
->
uvlinesize
,
9
,
9
,
src_x
,
src_y
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
);
ptr
=
s
->
edge_emu_buffer
;
ptr
=
s
->
edge_emu_buffer
;
}
pix_op
[
1
][
dxy
](
dest_cb
,
ptr
,
uvlinesize
,
h
>>
1
);
ptr
=
ref_picture
[
2
]
+
offset
;
if
(
emu
)
{
if
(
emu
)
{
s
->
vdsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
ptr
,
s
->
uvlinesize
,
s
->
uvlinesize
,
9
,
9
,
src_x
,
src_y
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
);
ptr
=
s
->
edge_emu_buffer
;
ptr
=
s
->
edge_emu_buffer
;
}
pix_op
[
1
][
dxy
](
dest_cr
,
ptr
,
uvlinesize
,
h
>>
1
);
}
libavcodec/wmv2.h
View file @
eda7571e
...
...
@@ -22,8 +22,8 @@
#define AVCODEC_WMV2_H
#include "avcodec.h"
#include "mpegvideo.h"
#include "intrax8.h"
#include "mpegvideo.h"
#include "wmv2dsp.h"
#define SKIP_TYPE_NONE 0
...
...
@@ -32,7 +32,7 @@
#define SKIP_TYPE_COL 3
typedef
struct
Wmv2Context
{
typedef
struct
Wmv2Context
{
MpegEncContext
s
;
IntraX8Context
x8
;
WMV2DSPContext
wdsp
;
...
...
@@ -52,8 +52,8 @@ typedef struct Wmv2Context{
ScanTable
abt_scantable
[
2
];
DECLARE_ALIGNED
(
16
,
int16_t
,
abt_block2
)[
6
][
64
];
}
Wmv2Context
;
}
Wmv2Context
;
void
ff_wmv2_common_init
(
Wmv2Context
*
w
);
void
ff_wmv2_common_init
(
Wmv2Context
*
w
);
#endif
/* AVCODEC_WMV2_H */
libavcodec/wmv2dec.c
View file @
eda7571e
This diff is collapsed.
Click to expand it.
libavcodec/wmv2enc.c
View file @
eda7571e
...
...
@@ -19,30 +19,31 @@
*/
#include "avcodec.h"
#include "h263.h"
#include "mpegvideo.h"
#include "msmpeg4.h"
#include "msmpeg4data.h"
#include "h263.h"
#include "wmv2.h"
static
int
encode_ext_header
(
Wmv2Context
*
w
){
MpegEncContext
*
const
s
=
&
w
->
s
;
static
int
encode_ext_header
(
Wmv2Context
*
w
)
{
MpegEncContext
*
const
s
=
&
w
->
s
;
PutBitContext
pb
;
int
code
;
init_put_bits
(
&
pb
,
s
->
avctx
->
extradata
,
s
->
avctx
->
extradata_size
);
put_bits
(
&
pb
,
5
,
s
->
avctx
->
time_base
.
den
/
s
->
avctx
->
time_base
.
num
);
//yes 29.97 -> 29
put_bits
(
&
pb
,
11
,
FFMIN
(
s
->
bit_rate
/
1024
,
2047
));
put_bits
(
&
pb
,
5
,
s
->
avctx
->
time_base
.
den
/
s
->
avctx
->
time_base
.
num
);
//
yes 29.97 -> 29
put_bits
(
&
pb
,
11
,
FFMIN
(
s
->
bit_rate
/
1024
,
2047
));
put_bits
(
&
pb
,
1
,
w
->
mspel_bit
=
1
);
put_bits
(
&
pb
,
1
,
w
->
mspel_bit
=
1
);
put_bits
(
&
pb
,
1
,
s
->
loop_filter
);
put_bits
(
&
pb
,
1
,
w
->
abt_flag
=
1
);
put_bits
(
&
pb
,
1
,
w
->
j_type_bit
=
1
);
put_bits
(
&
pb
,
1
,
w
->
top_left_mv_flag
=
0
);
put_bits
(
&
pb
,
1
,
w
->
per_mb_rl_bit
=
1
);
put_bits
(
&
pb
,
3
,
code
=
1
);
put_bits
(
&
pb
,
1
,
w
->
abt_flag
=
1
);
put_bits
(
&
pb
,
1
,
w
->
j_type_bit
=
1
);
put_bits
(
&
pb
,
1
,
w
->
top_left_mv_flag
=
0
);
put_bits
(
&
pb
,
1
,
w
->
per_mb_rl_bit
=
1
);
put_bits
(
&
pb
,
3
,
code
=
1
);
flush_put_bits
(
&
pb
);
...
...
@@ -51,94 +52,97 @@ static int encode_ext_header(Wmv2Context *w){
return
0
;
}
static
av_cold
int
wmv2_encode_init
(
AVCodecContext
*
avctx
){
Wmv2Context
*
const
w
=
avctx
->
priv_data
;
static
av_cold
int
wmv2_encode_init
(
AVCodecContext
*
avctx
)
{
Wmv2Context
*
const
w
=
avctx
->
priv_data
;
if
(
ff_mpv_encode_init
(
avctx
)
<
0
)
return
-
1
;
ff_wmv2_common_init
(
w
);
avctx
->
extradata_size
=
4
;
avctx
->
extradata
=
av_mallocz
(
avctx
->
extradata_size
+
10
);
avctx
->
extradata_size
=
4
;
avctx
->
extradata
=
av_mallocz
(
avctx
->
extradata_size
+
10
);
encode_ext_header
(
w
);
return
0
;
}
int
ff_wmv2_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number
)
int
ff_wmv2_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number
)
{
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
put_bits
(
&
s
->
pb
,
1
,
s
->
pict_type
-
1
);
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_I
){
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_I
)
put_bits
(
&
s
->
pb
,
7
,
0
);
}
put_bits
(
&
s
->
pb
,
5
,
s
->
qscale
);
s
->
dc_table_index
=
1
;
s
->
mv_table_index
=
1
;
/* only if P frame */
s
->
dc_table_index
=
1
;
s
->
mv_table_index
=
1
;
/* only if P frame */
s
->
per_mb_rl_table
=
0
;
s
->
mspel
=
0
;
w
->
per_mb_abt
=
0
;
w
->
abt_type
=
0
;
w
->
j_type
=
0
;
s
->
mspel
=
0
;
w
->
per_mb_abt
=
0
;
w
->
abt_type
=
0
;
w
->
j_type
=
0
;
assert
(
s
->
flipflop_rounding
);
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_I
)
{
assert
(
s
->
no_rounding
==
1
);
if
(
w
->
j_type_bit
)
put_bits
(
&
s
->
pb
,
1
,
w
->
j_type
);
assert
(
s
->
no_rounding
==
1
);
if
(
w
->
j_type_bit
)
put_bits
(
&
s
->
pb
,
1
,
w
->
j_type
);
if
(
w
->
per_mb_rl_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
per_mb_rl_table
);
if
(
w
->
per_mb_rl_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
per_mb_rl_table
);
if
(
!
s
->
per_mb_rl_table
)
{
if
(
!
s
->
per_mb_rl_table
)
{
ff_msmpeg4_code012
(
&
s
->
pb
,
s
->
rl_chroma_table_index
);
ff_msmpeg4_code012
(
&
s
->
pb
,
s
->
rl_table_index
);
}
put_bits
(
&
s
->
pb
,
1
,
s
->
dc_table_index
);
s
->
inter_intra_pred
=
0
;
}
else
{
s
->
inter_intra_pred
=
0
;
}
else
{
int
cbp_index
;
put_bits
(
&
s
->
pb
,
2
,
SKIP_TYPE_NONE
);
ff_msmpeg4_code012
(
&
s
->
pb
,
cbp_index
=
0
);
if
(
s
->
qscale
<=
10
)
{
int
map
[
3
]
=
{
0
,
2
,
1
};
w
->
cbp_table_index
=
map
[
cbp_index
];
}
else
if
(
s
->
qscale
<=
20
)
{
int
map
[
3
]
=
{
1
,
0
,
2
};
w
->
cbp_table_index
=
map
[
cbp_index
];
}
else
{
int
map
[
3
]
=
{
2
,
1
,
0
};
w
->
cbp_table_index
=
map
[
cbp_index
];
ff_msmpeg4_code012
(
&
s
->
pb
,
cbp_index
=
0
);
if
(
s
->
qscale
<=
10
)
{
int
map
[
3
]
=
{
0
,
2
,
1
};
w
->
cbp_table_index
=
map
[
cbp_index
];
}
else
if
(
s
->
qscale
<=
20
)
{
int
map
[
3
]
=
{
1
,
0
,
2
};
w
->
cbp_table_index
=
map
[
cbp_index
];
}
else
{
int
map
[
3
]
=
{
2
,
1
,
0
};
w
->
cbp_table_index
=
map
[
cbp_index
];
}
if
(
w
->
mspel_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
mspel
);
if
(
w
->
mspel_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
mspel
);
if
(
w
->
abt_flag
)
{
put_bits
(
&
s
->
pb
,
1
,
w
->
per_mb_abt
^
1
);
if
(
!
w
->
per_mb_abt
){
if
(
w
->
abt_flag
)
{
put_bits
(
&
s
->
pb
,
1
,
w
->
per_mb_abt
^
1
);
if
(
!
w
->
per_mb_abt
)
ff_msmpeg4_code012
(
&
s
->
pb
,
w
->
abt_type
);
}
}
if
(
w
->
per_mb_rl_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
per_mb_rl_table
);
if
(
w
->
per_mb_rl_bit
)
put_bits
(
&
s
->
pb
,
1
,
s
->
per_mb_rl_table
);
if
(
!
s
->
per_mb_rl_table
)
{
if
(
!
s
->
per_mb_rl_table
)
{
ff_msmpeg4_code012
(
&
s
->
pb
,
s
->
rl_table_index
);
s
->
rl_chroma_table_index
=
s
->
rl_table_index
;
}
put_bits
(
&
s
->
pb
,
1
,
s
->
dc_table_index
);
put_bits
(
&
s
->
pb
,
1
,
s
->
mv_table_index
);
s
->
inter_intra_pred
=
0
;
//(s->width*s->height < 320*240 && s->bit_rate<=
II_BITRATE);
s
->
inter_intra_pred
=
0
;
// (s->width * s->height < 320 * 240 && s->bit_rate <=
II_BITRATE);
}
s
->
esc3_level_length
=
0
;
s
->
esc3_run_length
=
0
;
s
->
esc3_level_length
=
0
;
s
->
esc3_run_length
=
0
;
return
0
;
}
...
...
@@ -146,11 +150,10 @@ int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number)
/* Nearly identical to wmv1 but that is just because we do not use the
* useless M$ crap features. It is duplicated here in case someone wants
* to add support for these crap features. */
void
ff_wmv2_encode_mb
(
MpegEncContext
*
s
,
int16_t
block
[
6
][
64
],
void
ff_wmv2_encode_mb
(
MpegEncContext
*
s
,
int16_t
block
[
6
][
64
],
int
motion_x
,
int
motion_y
)
{
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
Wmv2Context
*
const
w
=
(
Wmv2Context
*
)
s
;
int
cbp
,
coded_cbp
,
i
;
int
pred_x
,
pred_y
;
uint8_t
*
coded_block
;
...
...
@@ -160,10 +163,9 @@ void ff_wmv2_encode_mb(MpegEncContext * s,
if
(
!
s
->
mb_intra
)
{
/* compute cbp */
cbp
=
0
;
for
(
i
=
0
;
i
<
6
;
i
++
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
if
(
s
->
block_last_index
[
i
]
>=
0
)
cbp
|=
1
<<
(
5
-
i
);
}
put_bits
(
&
s
->
pb
,
ff_wmv2_inter_table
[
w
->
cbp_table_index
][
cbp
+
64
][
1
],
...
...
@@ -172,42 +174,43 @@ void ff_wmv2_encode_mb(MpegEncContext * s,
/* motion vector */
ff_h263_pred_motion
(
s
,
0
,
0
,
&
pred_x
,
&
pred_y
);
ff_msmpeg4_encode_motion
(
s
,
motion_x
-
pred_x
,
motion_y
-
pred_y
);
motion_y
-
pred_y
);
}
else
{
/* compute cbp */
cbp
=
0
;
cbp
=
0
;
coded_cbp
=
0
;
for
(
i
=
0
;
i
<
6
;
i
++
)
{
int
val
,
pred
;
val
=
(
s
->
block_last_index
[
i
]
>=
1
);
val
=
(
s
->
block_last_index
[
i
]
>=
1
);
cbp
|=
val
<<
(
5
-
i
);
if
(
i
<
4
)
{
/* predict value for close blocks only for luma */
pred
=
ff_msmpeg4_coded_block_pred
(
s
,
i
,
&
coded_block
);
pred
=
ff_msmpeg4_coded_block_pred
(
s
,
i
,
&
coded_block
);
*
coded_block
=
val
;
val
=
val
^
pred
;
val
=
val
^
pred
;
}
coded_cbp
|=
val
<<
(
5
-
i
);
}
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_I
)
{
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_I
)
put_bits
(
&
s
->
pb
,
ff_msmp4_mb_i_table
[
coded_cbp
][
1
],
ff_msmp4_mb_i_table
[
coded_cbp
][
0
]);
}
else
{
ff_msmp4_mb_i_table
[
coded_cbp
][
1
],
ff_msmp4_mb_i_table
[
coded_cbp
][
0
]);
else
put_bits
(
&
s
->
pb
,
ff_wmv2_inter_table
[
w
->
cbp_table_index
][
cbp
][
1
],
ff_wmv2_inter_table
[
w
->
cbp_table_index
][
cbp
][
0
]);
}
put_bits
(
&
s
->
pb
,
1
,
0
);
/* no AC prediction yet */
if
(
s
->
inter_intra_pred
){
s
->
h263_aic_dir
=
0
;
put_bits
(
&
s
->
pb
,
ff_table_inter_intra
[
s
->
h263_aic_dir
][
1
],
ff_table_inter_intra
[
s
->
h263_aic_dir
][
0
]);
if
(
s
->
inter_intra_pred
)
{
s
->
h263_aic_dir
=
0
;
put_bits
(
&
s
->
pb
,
ff_table_inter_intra
[
s
->
h263_aic_dir
][
1
],
ff_table_inter_intra
[
s
->
h263_aic_dir
][
0
]);
}
}
for
(
i
=
0
;
i
<
6
;
i
++
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
ff_msmpeg4_encode_block
(
s
,
block
[
i
],
i
);
}
}
AVCodec
ff_wmv2_encoder
=
{
...
...
@@ -219,5 +222,6 @@ AVCodec ff_wmv2_encoder = {
.
init
=
wmv2_encode_init
,
.
encode2
=
ff_mpv_encode_picture
,
.
close
=
ff_mpv_encode_end
,
.
pix_fmts
=
(
const
enum
AVPixelFormat
[]){
AV_PIX_FMT_YUV420P
,
AV_PIX_FMT_NONE
},
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_YUV420P
,
AV_PIX_FMT_NONE
},
};
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