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
14ddbb47
Commit
14ddbb47
authored
Oct 13, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cavs: K&R formatting cosmetics
parent
71549a85
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
225 additions
and
191 deletions
+225
-191
cavs.c
libavcodec/cavs.c
+225
-191
No files found.
libavcodec/cavs.c
View file @
14ddbb47
...
...
@@ -376,84 +376,102 @@ void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv)
*
****************************************************************************/
static
inline
void
mc_dir_part
(
AVSContext
*
h
,
AVFrame
*
pic
,
int
chroma_height
,
int
delta
,
int
list
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
int
src_x_offset
,
int
src_y_offset
,
qpel_mc_func
*
qpix_op
,
h264_chroma_mc_func
chroma_op
,
cavs_vector
*
mv
)
static
inline
void
mc_dir_part
(
AVSContext
*
h
,
AVFrame
*
pic
,
int
chroma_height
,
int
delta
,
int
list
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
int
src_x_offset
,
int
src_y_offset
,
qpel_mc_func
*
qpix_op
,
h264_chroma_mc_func
chroma_op
,
cavs_vector
*
mv
)
{
const
int
mx
=
mv
->
x
+
src_x_offset
*
8
;
const
int
my
=
mv
->
y
+
src_y_offset
*
8
;
const
int
luma_xy
=
(
mx
&
3
)
+
((
my
&
3
)
<<
2
);
uint8_t
*
src_y
=
pic
->
data
[
0
]
+
(
mx
>>
2
)
+
(
my
>>
2
)
*
h
->
l_stride
;
uint8_t
*
src_cb
=
pic
->
data
[
1
]
+
(
mx
>>
3
)
+
(
my
>>
3
)
*
h
->
c_stride
;
uint8_t
*
src_cr
=
pic
->
data
[
2
]
+
(
mx
>>
3
)
+
(
my
>>
3
)
*
h
->
c_stride
;
const
int
mx
=
mv
->
x
+
src_x_offset
*
8
;
const
int
my
=
mv
->
y
+
src_y_offset
*
8
;
const
int
luma_xy
=
(
mx
&
3
)
+
((
my
&
3
)
<<
2
);
uint8_t
*
src_y
=
pic
->
data
[
0
]
+
(
mx
>>
2
)
+
(
my
>>
2
)
*
h
->
l_stride
;
uint8_t
*
src_cb
=
pic
->
data
[
1
]
+
(
mx
>>
3
)
+
(
my
>>
3
)
*
h
->
c_stride
;
uint8_t
*
src_cr
=
pic
->
data
[
2
]
+
(
mx
>>
3
)
+
(
my
>>
3
)
*
h
->
c_stride
;
int
extra_width
=
0
;
int
extra_height
=
extra_width
;
int
emu
=
0
;
const
int
full_m
x
=
mx
>>
2
;
const
int
full_my
=
my
>>
2
;
const
int
pic_
width
=
16
*
h
->
mb_width
;
const
int
pic_height
=
16
*
h
->
mb_height
;
int
extra_height
=
extra_width
;
const
int
full_mx
=
mx
>>
2
;
const
int
full_m
y
=
my
>>
2
;
const
int
pic_width
=
16
*
h
->
mb_width
;
const
int
pic_
height
=
16
*
h
->
mb_height
;
int
emu
=
0
;
if
(
!
pic
->
data
[
0
])
return
;
if
(
mx
&
7
)
extra_width
-=
3
;
if
(
my
&
7
)
extra_height
-=
3
;
if
(
full_mx
<
0
-
extra_width
||
full_my
<
0
-
extra_height
||
full_mx
+
16
/*FIXME*/
>
pic_width
+
extra_width
||
full_my
+
16
/*FIXME*/
>
pic_height
+
extra_height
){
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_y
-
2
-
2
*
h
->
l_stride
,
h
->
l_stride
,
16
+
5
,
16
+
5
/*FIXME*/
,
full_mx
-
2
,
full_my
-
2
,
pic_width
,
pic_height
);
src_y
=
h
->
edge_emu_buffer
+
2
+
2
*
h
->
l_stride
;
emu
=
1
;
}
qpix_op
[
luma_xy
](
dest_y
,
src_y
,
h
->
l_stride
);
//FIXME try variable height perhaps?
if
(
emu
){
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_cb
,
h
->
c_stride
,
9
,
9
/*FIXME*/
,
(
mx
>>
3
),
(
my
>>
3
),
pic_width
>>
1
,
pic_height
>>
1
);
src_cb
=
h
->
edge_emu_buffer
;
}
chroma_op
(
dest_cb
,
src_cb
,
h
->
c_stride
,
chroma_height
,
mx
&
7
,
my
&
7
);
if
(
emu
){
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_cr
,
h
->
c_stride
,
9
,
9
/*FIXME*/
,
(
mx
>>
3
),
(
my
>>
3
),
pic_width
>>
1
,
pic_height
>>
1
);
src_cr
=
h
->
edge_emu_buffer
;
}
chroma_op
(
dest_cr
,
src_cr
,
h
->
c_stride
,
chroma_height
,
mx
&
7
,
my
&
7
);
if
(
mx
&
7
)
extra_width
-=
3
;
if
(
my
&
7
)
extra_height
-=
3
;
if
(
full_mx
<
0
-
extra_width
||
full_my
<
0
-
extra_height
||
full_mx
+
16
/* FIXME */
>
pic_width
+
extra_width
||
full_my
+
16
/* FIXME */
>
pic_height
+
extra_height
)
{
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_y
-
2
-
2
*
h
->
l_stride
,
h
->
l_stride
,
16
+
5
,
16
+
5
/* FIXME */
,
full_mx
-
2
,
full_my
-
2
,
pic_width
,
pic_height
);
src_y
=
h
->
edge_emu_buffer
+
2
+
2
*
h
->
l_stride
;
emu
=
1
;
}
// FIXME try variable height perhaps?
qpix_op
[
luma_xy
](
dest_y
,
src_y
,
h
->
l_stride
);
if
(
emu
)
{
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_cb
,
h
->
c_stride
,
9
,
9
/* FIXME */
,
mx
>>
3
,
my
>>
3
,
pic_width
>>
1
,
pic_height
>>
1
);
src_cb
=
h
->
edge_emu_buffer
;
}
chroma_op
(
dest_cb
,
src_cb
,
h
->
c_stride
,
chroma_height
,
mx
&
7
,
my
&
7
);
if
(
emu
)
{
h
->
vdsp
.
emulated_edge_mc
(
h
->
edge_emu_buffer
,
src_cr
,
h
->
c_stride
,
9
,
9
/* FIXME */
,
mx
>>
3
,
my
>>
3
,
pic_width
>>
1
,
pic_height
>>
1
);
src_cr
=
h
->
edge_emu_buffer
;
}
chroma_op
(
dest_cr
,
src_cr
,
h
->
c_stride
,
chroma_height
,
mx
&
7
,
my
&
7
);
}
static
inline
void
mc_part_std
(
AVSContext
*
h
,
int
chroma_height
,
int
delta
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
int
x_offset
,
int
y_offset
,
qpel_mc_func
*
qpix_put
,
h264_chroma_mc_func
chroma_put
,
qpel_mc_func
*
qpix_avg
,
h264_chroma_mc_func
chroma_avg
,
cavs_vector
*
mv
)
static
inline
void
mc_part_std
(
AVSContext
*
h
,
int
chroma_height
,
int
delta
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
int
x_offset
,
int
y_offset
,
qpel_mc_func
*
qpix_put
,
h264_chroma_mc_func
chroma_put
,
qpel_mc_func
*
qpix_avg
,
h264_chroma_mc_func
chroma_avg
,
cavs_vector
*
mv
)
{
qpel_mc_func
*
qpix_op
=
qpix_put
;
h264_chroma_mc_func
chroma_op
=
chroma_put
;
qpel_mc_func
*
qpix_op
=
qpix_put
;
h264_chroma_mc_func
chroma_op
=
chroma_put
;
dest_y
+=
2
*
x_offset
+
2
*
y_offset
*
h
->
l_stride
;
dest_y
+=
2
*
x_offset
+
2
*
y_offset
*
h
->
l_stride
;
dest_cb
+=
x_offset
+
y_offset
*
h
->
c_stride
;
dest_cr
+=
x_offset
+
y_offset
*
h
->
c_stride
;
x_offset
+=
8
*
h
->
mbx
;
y_offset
+=
8
*
h
->
mby
;
x_offset
+=
8
*
h
->
mbx
;
y_offset
+=
8
*
h
->
mby
;
if
(
mv
->
ref
>=
0
)
{
if
(
mv
->
ref
>=
0
)
{
AVFrame
*
ref
=
h
->
DPB
[
mv
->
ref
].
f
;
mc_dir_part
(
h
,
ref
,
chroma_height
,
delta
,
0
,
dest_y
,
dest_cb
,
dest_cr
,
x_offset
,
y_offset
,
qpix_op
,
chroma_op
,
mv
);
qpix_op
=
qpix_avg
;
chroma_op
=
chroma_avg
;
qpix_op
=
qpix_avg
;
chroma_op
=
chroma_avg
;
}
if
((
mv
+
MV_BWD_OFFS
)
->
ref
>=
0
)
{
if
((
mv
+
MV_BWD_OFFS
)
->
ref
>=
0
)
{
AVFrame
*
ref
=
h
->
DPB
[
0
].
f
;
mc_dir_part
(
h
,
ref
,
chroma_height
,
delta
,
1
,
dest_y
,
dest_cb
,
dest_cr
,
x_offset
,
y_offset
,
...
...
@@ -461,15 +479,16 @@ static inline void mc_part_std(AVSContext *h,int chroma_height,int delta,
}
}
void
ff_cavs_inter
(
AVSContext
*
h
,
enum
cavs_mb
mb_type
)
{
if
(
ff_cavs_partition_flags
[
mb_type
]
==
0
){
// 16x16
void
ff_cavs_inter
(
AVSContext
*
h
,
enum
cavs_mb
mb_type
)
{
if
(
ff_cavs_partition_flags
[
mb_type
]
==
0
)
{
// 16x16
mc_part_std
(
h
,
8
,
0
,
h
->
cy
,
h
->
cu
,
h
->
cv
,
0
,
0
,
h
->
cdsp
.
put_cavs_qpel_pixels_tab
[
0
],
h
->
h264chroma
.
put_h264_chroma_pixels_tab
[
0
],
h
->
cdsp
.
avg_cavs_qpel_pixels_tab
[
0
],
h
->
h264chroma
.
avg_h264_chroma_pixels_tab
[
0
],
&
h
->
mv
[
MV_FWD_X0
]);
}
else
{
}
else
{
mc_part_std
(
h
,
4
,
0
,
h
->
cy
,
h
->
cu
,
h
->
cv
,
0
,
0
,
h
->
cdsp
.
put_cavs_qpel_pixels_tab
[
1
],
h
->
h264chroma
.
put_h264_chroma_pixels_tab
[
1
],
...
...
@@ -503,15 +522,21 @@ void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type) {
*
****************************************************************************/
static
inline
void
scale_mv
(
AVSContext
*
h
,
int
*
d_x
,
int
*
d_y
,
cavs_vector
*
src
,
int
distp
)
{
static
inline
void
scale_mv
(
AVSContext
*
h
,
int
*
d_x
,
int
*
d_y
,
cavs_vector
*
src
,
int
distp
)
{
int
den
=
h
->
scale_den
[
src
->
ref
];
*
d_x
=
(
src
->
x
*
distp
*
den
+
256
+
(
src
->
x
>>
31
))
>>
9
;
*
d_y
=
(
src
->
y
*
distp
*
den
+
256
+
(
src
->
y
>>
31
))
>>
9
;
*
d_x
=
(
src
->
x
*
distp
*
den
+
256
+
(
src
->
x
>>
31
))
>>
9
;
*
d_y
=
(
src
->
y
*
distp
*
den
+
256
+
(
src
->
y
>>
31
))
>>
9
;
}
static
inline
void
mv_pred_median
(
AVSContext
*
h
,
cavs_vector
*
mvP
,
cavs_vector
*
mvA
,
cavs_vector
*
mvB
,
cavs_vector
*
mvC
)
{
static
inline
void
mv_pred_median
(
AVSContext
*
h
,
cavs_vector
*
mvP
,
cavs_vector
*
mvA
,
cavs_vector
*
mvB
,
cavs_vector
*
mvC
)
{
int
ax
,
ay
,
bx
,
by
,
cx
,
cy
;
int
len_ab
,
len_bc
,
len_ca
,
len_mid
;
...
...
@@ -524,10 +549,10 @@ static inline void mv_pred_median(AVSContext *h, cavs_vector *mvP,
len_bc
=
abs
(
bx
-
cx
)
+
abs
(
by
-
cy
);
len_ca
=
abs
(
cx
-
ax
)
+
abs
(
cy
-
ay
);
len_mid
=
mid_pred
(
len_ab
,
len_bc
,
len_ca
);
if
(
len_mid
==
len_ab
)
{
if
(
len_mid
==
len_ab
)
{
mvP
->
x
=
cx
;
mvP
->
y
=
cy
;
}
else
if
(
len_mid
==
len_bc
)
{
}
else
if
(
len_mid
==
len_bc
)
{
mvP
->
x
=
ax
;
mvP
->
y
=
ay
;
}
else
{
...
...
@@ -537,7 +562,8 @@ static inline void mv_pred_median(AVSContext *h, cavs_vector *mvP,
}
void
ff_cavs_mv
(
AVSContext
*
h
,
enum
cavs_mv_loc
nP
,
enum
cavs_mv_loc
nC
,
enum
cavs_mv_pred
mode
,
enum
cavs_block
size
,
int
ref
)
{
enum
cavs_mv_pred
mode
,
enum
cavs_block
size
,
int
ref
)
{
cavs_vector
*
mvP
=
&
h
->
mv
[
nP
];
cavs_vector
*
mvA
=
&
h
->
mv
[
nP
-
1
];
cavs_vector
*
mvB
=
&
h
->
mv
[
nP
-
4
];
...
...
@@ -546,34 +572,35 @@ void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC,
mvP
->
ref
=
ref
;
mvP
->
dist
=
h
->
dist
[
mvP
->
ref
];
if
(
mvC
->
ref
==
NOT_AVAIL
)
if
(
mvC
->
ref
==
NOT_AVAIL
)
mvC
=
&
h
->
mv
[
nP
-
5
];
// set to top-left (mvD)
if
((
mode
==
MV_PRED_PSKIP
)
&&
((
mvA
->
ref
==
NOT_AVAIL
)
||
(
mvB
->
ref
==
NOT_AVAIL
)
||
((
mvA
->
x
|
mvA
->
y
|
mvA
->
ref
)
==
0
)
||
((
mvB
->
x
|
mvB
->
y
|
mvB
->
ref
)
==
0
)
))
{
if
(
mode
==
MV_PRED_PSKIP
&&
(
mvA
->
ref
==
NOT_AVAIL
||
mvB
->
ref
==
NOT_AVAIL
||
(
mvA
->
x
|
mvA
->
y
|
mvA
->
ref
)
==
0
||
(
mvB
->
x
|
mvB
->
y
|
mvB
->
ref
)
==
0
))
{
mvP2
=
&
un_mv
;
/* if there is only one suitable candidate, take it */
}
else
if
((
mvA
->
ref
>=
0
)
&&
(
mvB
->
ref
<
0
)
&&
(
mvC
->
ref
<
0
)
)
{
mvP2
=
mvA
;
}
else
if
((
mvA
->
ref
<
0
)
&&
(
mvB
->
ref
>=
0
)
&&
(
mvC
->
ref
<
0
)
)
{
mvP2
=
mvB
;
}
else
if
((
mvA
->
ref
<
0
)
&&
(
mvB
->
ref
<
0
)
&&
(
mvC
->
ref
>=
0
)
)
{
mvP2
=
mvC
;
}
else
if
(
mode
==
MV_PRED_LEFT
&&
mvA
->
ref
==
ref
)
{
mvP2
=
mvA
;
}
else
if
(
mode
==
MV_PRED_TOP
&&
mvB
->
ref
==
ref
)
{
mvP2
=
mvB
;
}
else
if
(
mode
==
MV_PRED_TOPRIGHT
&&
mvC
->
ref
==
ref
)
{
mvP2
=
mvC
;
}
if
(
mvP2
)
{
}
else
if
(
mvA
->
ref
>=
0
&&
mvB
->
ref
<
0
&&
mvC
->
ref
<
0
)
{
mvP2
=
mvA
;
}
else
if
(
mvA
->
ref
<
0
&&
mvB
->
ref
>=
0
&&
mvC
->
ref
<
0
)
{
mvP2
=
mvB
;
}
else
if
(
mvA
->
ref
<
0
&&
mvB
->
ref
<
0
&&
mvC
->
ref
>=
0
)
{
mvP2
=
mvC
;
}
else
if
(
mode
==
MV_PRED_LEFT
&&
mvA
->
ref
==
ref
)
{
mvP2
=
mvA
;
}
else
if
(
mode
==
MV_PRED_TOP
&&
mvB
->
ref
==
ref
)
{
mvP2
=
mvB
;
}
else
if
(
mode
==
MV_PRED_TOPRIGHT
&&
mvC
->
ref
==
ref
)
{
mvP2
=
mvC
;
}
if
(
mvP2
)
{
mvP
->
x
=
mvP2
->
x
;
mvP
->
y
=
mvP2
->
y
;
}
else
}
else
mv_pred_median
(
h
,
mvP
,
mvA
,
mvB
,
mvC
);
if
(
mode
<
MV_PRED_PSKIP
)
{
if
(
mode
<
MV_PRED_PSKIP
)
{
mvP
->
x
+=
get_se_golomb
(
&
h
->
gb
);
mvP
->
y
+=
get_se_golomb
(
&
h
->
gb
);
}
...
...
@@ -589,36 +616,37 @@ void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC,
/**
* initialise predictors for motion vectors and intra prediction
*/
void
ff_cavs_init_mb
(
AVSContext
*
h
)
{
void
ff_cavs_init_mb
(
AVSContext
*
h
)
{
int
i
;
/* copy predictors from top line (MB B and C) into cache */
for
(
i
=
0
;
i
<
3
;
i
++
)
{
h
->
mv
[
MV_FWD_B2
+
i
]
=
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
i
];
h
->
mv
[
MV_BWD_B2
+
i
]
=
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
i
];
for
(
i
=
0
;
i
<
3
;
i
++
)
{
h
->
mv
[
MV_FWD_B2
+
i
]
=
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
i
];
h
->
mv
[
MV_BWD_B2
+
i
]
=
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
i
];
}
h
->
pred_mode_Y
[
1
]
=
h
->
top_pred_Y
[
h
->
mbx
*
2
+
0
];
h
->
pred_mode_Y
[
2
]
=
h
->
top_pred_Y
[
h
->
mbx
*
2
+
1
];
h
->
pred_mode_Y
[
1
]
=
h
->
top_pred_Y
[
h
->
mbx
*
2
+
0
];
h
->
pred_mode_Y
[
2
]
=
h
->
top_pred_Y
[
h
->
mbx
*
2
+
1
];
/* clear top predictors if MB B is not available */
if
(
!
(
h
->
flags
&
B_AVAIL
))
{
if
(
!
(
h
->
flags
&
B_AVAIL
))
{
h
->
mv
[
MV_FWD_B2
]
=
un_mv
;
h
->
mv
[
MV_FWD_B3
]
=
un_mv
;
h
->
mv
[
MV_BWD_B2
]
=
un_mv
;
h
->
mv
[
MV_BWD_B3
]
=
un_mv
;
h
->
pred_mode_Y
[
1
]
=
h
->
pred_mode_Y
[
2
]
=
NOT_AVAIL
;
h
->
flags
&=
~
(
C_AVAIL
|
D_AVAIL
);
}
else
if
(
h
->
mbx
)
{
h
->
flags
&=
~
(
C_AVAIL
|
D_AVAIL
);
}
else
if
(
h
->
mbx
)
{
h
->
flags
|=
D_AVAIL
;
}
if
(
h
->
mbx
==
h
->
mb_width
-
1
)
//
MB C not available
if
(
h
->
mbx
==
h
->
mb_width
-
1
)
//
MB C not available
h
->
flags
&=
~
C_AVAIL
;
/* clear top-right predictors if MB C is not available */
if
(
!
(
h
->
flags
&
C_AVAIL
))
{
if
(
!
(
h
->
flags
&
C_AVAIL
))
{
h
->
mv
[
MV_FWD_C2
]
=
un_mv
;
h
->
mv
[
MV_BWD_C2
]
=
un_mv
;
}
/* clear top-left predictors if MB D is not available */
if
(
!
(
h
->
flags
&
D_AVAIL
))
{
if
(
!
(
h
->
flags
&
D_AVAIL
))
{
h
->
mv
[
MV_FWD_D3
]
=
un_mv
;
h
->
mv
[
MV_BWD_D3
]
=
un_mv
;
}
...
...
@@ -629,7 +657,8 @@ void ff_cavs_init_mb(AVSContext *h) {
* macroblock address
* @return 0 if end of frame is reached, 1 otherwise
*/
int
ff_cavs_next_mb
(
AVSContext
*
h
)
{
int
ff_cavs_next_mb
(
AVSContext
*
h
)
{
int
i
;
h
->
flags
|=
A_AVAIL
;
...
...
@@ -637,22 +666,22 @@ int ff_cavs_next_mb(AVSContext *h) {
h
->
cu
+=
8
;
h
->
cv
+=
8
;
/* copy mvs as predictors to the left */
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
h
->
mv
[
i
]
=
h
->
mv
[
i
+
2
];
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
h
->
mv
[
i
]
=
h
->
mv
[
i
+
2
];
/* copy bottom mvs from cache to top line */
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
0
]
=
h
->
mv
[
MV_FWD_X2
];
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
1
]
=
h
->
mv
[
MV_FWD_X3
];
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
0
]
=
h
->
mv
[
MV_BWD_X2
];
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
1
]
=
h
->
mv
[
MV_BWD_X3
];
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
0
]
=
h
->
mv
[
MV_FWD_X2
];
h
->
top_mv
[
0
][
h
->
mbx
*
2
+
1
]
=
h
->
mv
[
MV_FWD_X3
];
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
0
]
=
h
->
mv
[
MV_BWD_X2
];
h
->
top_mv
[
1
][
h
->
mbx
*
2
+
1
]
=
h
->
mv
[
MV_BWD_X3
];
/* next MB address */
h
->
mbidx
++
;
h
->
mbx
++
;
if
(
h
->
mbx
==
h
->
mb_width
)
{
//n
ew mb line
h
->
flags
=
B_AVAIL
|
C_AVAIL
;
if
(
h
->
mbx
==
h
->
mb_width
)
{
// N
ew mb line
h
->
flags
=
B_AVAIL
|
C_AVAIL
;
/* clear left pred_modes */
h
->
pred_mode_Y
[
3
]
=
h
->
pred_mode_Y
[
6
]
=
NOT_AVAIL
;
/* clear left mv predictors */
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
h
->
mv
[
i
]
=
un_mv
;
h
->
mbx
=
0
;
h
->
mby
++
;
...
...
@@ -660,7 +689,7 @@ int ff_cavs_next_mb(AVSContext *h) {
h
->
cy
=
h
->
cur
.
f
->
data
[
0
]
+
h
->
mby
*
16
*
h
->
l_stride
;
h
->
cu
=
h
->
cur
.
f
->
data
[
1
]
+
h
->
mby
*
8
*
h
->
c_stride
;
h
->
cv
=
h
->
cur
.
f
->
data
[
2
]
+
h
->
mby
*
8
*
h
->
c_stride
;
if
(
h
->
mby
==
h
->
mb_height
)
{
//f
rame end
if
(
h
->
mby
==
h
->
mb_height
)
{
// F
rame end
return
0
;
}
}
...
...
@@ -673,11 +702,12 @@ int ff_cavs_next_mb(AVSContext *h) {
*
****************************************************************************/
void
ff_cavs_init_pic
(
AVSContext
*
h
)
{
void
ff_cavs_init_pic
(
AVSContext
*
h
)
{
int
i
;
/* clear some predictors */
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
for
(
i
=
0
;
i
<=
20
;
i
+=
4
)
h
->
mv
[
i
]
=
un_mv
;
h
->
mv
[
MV_BWD_X0
]
=
ff_cavs_dir_mv
;
set_mvs
(
&
h
->
mv
[
MV_BWD_X0
],
BLK_16X16
);
...
...
@@ -689,8 +719,8 @@ void ff_cavs_init_pic(AVSContext *h) {
h
->
cv
=
h
->
cur
.
f
->
data
[
2
];
h
->
l_stride
=
h
->
cur
.
f
->
linesize
[
0
];
h
->
c_stride
=
h
->
cur
.
f
->
linesize
[
1
];
h
->
luma_scan
[
2
]
=
8
*
h
->
l_stride
;
h
->
luma_scan
[
3
]
=
8
*
h
->
l_stride
+
8
;
h
->
luma_scan
[
2
]
=
8
*
h
->
l_stride
;
h
->
luma_scan
[
3
]
=
8
*
h
->
l_stride
+
8
;
h
->
mbx
=
h
->
mby
=
h
->
mbidx
=
0
;
h
->
flags
=
0
;
}
...
...
@@ -706,23 +736,26 @@ void ff_cavs_init_pic(AVSContext *h) {
* this data has to be stored for one complete row of macroblocks
* and this storage space is allocated here
*/
void
ff_cavs_init_top_lines
(
AVSContext
*
h
)
{
void
ff_cavs_init_top_lines
(
AVSContext
*
h
)
{
/* alloc top line of predictors */
h
->
top_qp
=
av_mallocz
(
h
->
mb_width
);
h
->
top_mv
[
0
]
=
av_mallocz
((
h
->
mb_width
*
2
+
1
)
*
sizeof
(
cavs_vector
));
h
->
top_mv
[
1
]
=
av_mallocz
((
h
->
mb_width
*
2
+
1
)
*
sizeof
(
cavs_vector
));
h
->
top_pred_Y
=
av_mallocz
(
h
->
mb_width
*
2
*
sizeof
(
*
h
->
top_pred_Y
));
h
->
top_border_y
=
av_mallocz
((
h
->
mb_width
+
1
)
*
16
);
h
->
top_border_u
=
av_mallocz
(
h
->
mb_width
*
10
);
h
->
top_border_v
=
av_mallocz
(
h
->
mb_width
*
10
);
h
->
top_qp
=
av_mallocz
(
h
->
mb_width
);
h
->
top_mv
[
0
]
=
av_mallocz
((
h
->
mb_width
*
2
+
1
)
*
sizeof
(
cavs_vector
));
h
->
top_mv
[
1
]
=
av_mallocz
((
h
->
mb_width
*
2
+
1
)
*
sizeof
(
cavs_vector
));
h
->
top_pred_Y
=
av_mallocz
(
h
->
mb_width
*
2
*
sizeof
(
*
h
->
top_pred_Y
));
h
->
top_border_y
=
av_mallocz
((
h
->
mb_width
+
1
)
*
16
);
h
->
top_border_u
=
av_mallocz
(
h
->
mb_width
*
10
);
h
->
top_border_v
=
av_mallocz
(
h
->
mb_width
*
10
);
/* alloc space for co-located MVs and types */
h
->
col_mv
=
av_mallocz
(
h
->
mb_width
*
h
->
mb_height
*
4
*
sizeof
(
cavs_vector
));
h
->
col_type_base
=
av_mallocz
(
h
->
mb_width
*
h
->
mb_height
);
h
->
block
=
av_mallocz
(
64
*
sizeof
(
int16_t
));
h
->
col_mv
=
av_mallocz
(
h
->
mb_width
*
h
->
mb_height
*
4
*
sizeof
(
cavs_vector
));
h
->
col_type_base
=
av_mallocz
(
h
->
mb_width
*
h
->
mb_height
);
h
->
block
=
av_mallocz
(
64
*
sizeof
(
int16_t
));
}
av_cold
int
ff_cavs_init
(
AVCodecContext
*
avctx
)
{
av_cold
int
ff_cavs_init
(
AVCodecContext
*
avctx
)
{
AVSContext
*
h
=
avctx
->
priv_data
;
ff_dsputil_init
(
&
h
->
dsp
,
avctx
);
...
...
@@ -734,7 +767,7 @@ av_cold int ff_cavs_init(AVCodecContext *avctx) {
ff_init_scantable
(
h
->
dsp
.
idct_permutation
,
&
h
->
scantable
,
ff_zigzag_direct
);
h
->
avctx
=
avctx
;
avctx
->
pix_fmt
=
AV_PIX_FMT_YUV420P
;
avctx
->
pix_fmt
=
AV_PIX_FMT_YUV420P
;
h
->
cur
.
f
=
av_frame_alloc
();
h
->
DPB
[
0
].
f
=
av_frame_alloc
();
...
...
@@ -746,27 +779,28 @@ av_cold int ff_cavs_init(AVCodecContext *avctx) {
h
->
luma_scan
[
0
]
=
0
;
h
->
luma_scan
[
1
]
=
8
;
h
->
intra_pred_l
[
INTRA_L_VERT
]
=
intra_pred_vert
;
h
->
intra_pred_l
[
INTRA_L_HORIZ
]
=
intra_pred_horiz
;
h
->
intra_pred_l
[
INTRA_L_LP
]
=
intra_pred_lp
;
h
->
intra_pred_l
[
INTRA_L_DOWN_LEFT
]
=
intra_pred_down_left
;
h
->
intra_pred_l
[
INTRA_L_VERT
]
=
intra_pred_vert
;
h
->
intra_pred_l
[
INTRA_L_HORIZ
]
=
intra_pred_horiz
;
h
->
intra_pred_l
[
INTRA_L_LP
]
=
intra_pred_lp
;
h
->
intra_pred_l
[
INTRA_L_DOWN_LEFT
]
=
intra_pred_down_left
;
h
->
intra_pred_l
[
INTRA_L_DOWN_RIGHT
]
=
intra_pred_down_right
;
h
->
intra_pred_l
[
INTRA_L_LP_LEFT
]
=
intra_pred_lp_left
;
h
->
intra_pred_l
[
INTRA_L_LP_TOP
]
=
intra_pred_lp_top
;
h
->
intra_pred_l
[
INTRA_L_DC_128
]
=
intra_pred_dc_128
;
h
->
intra_pred_c
[
INTRA_C_LP
]
=
intra_pred_lp
;
h
->
intra_pred_c
[
INTRA_C_HORIZ
]
=
intra_pred_horiz
;
h
->
intra_pred_c
[
INTRA_C_VERT
]
=
intra_pred_vert
;
h
->
intra_pred_c
[
INTRA_C_PLANE
]
=
intra_pred_plane
;
h
->
intra_pred_c
[
INTRA_C_LP_LEFT
]
=
intra_pred_lp_left
;
h
->
intra_pred_c
[
INTRA_C_LP_TOP
]
=
intra_pred_lp_top
;
h
->
intra_pred_c
[
INTRA_C_DC_128
]
=
intra_pred_dc_128
;
h
->
mv
[
7
]
=
un_mv
;
h
->
intra_pred_l
[
INTRA_L_LP_LEFT
]
=
intra_pred_lp_left
;
h
->
intra_pred_l
[
INTRA_L_LP_TOP
]
=
intra_pred_lp_top
;
h
->
intra_pred_l
[
INTRA_L_DC_128
]
=
intra_pred_dc_128
;
h
->
intra_pred_c
[
INTRA_C_LP
]
=
intra_pred_lp
;
h
->
intra_pred_c
[
INTRA_C_HORIZ
]
=
intra_pred_horiz
;
h
->
intra_pred_c
[
INTRA_C_VERT
]
=
intra_pred_vert
;
h
->
intra_pred_c
[
INTRA_C_PLANE
]
=
intra_pred_plane
;
h
->
intra_pred_c
[
INTRA_C_LP_LEFT
]
=
intra_pred_lp_left
;
h
->
intra_pred_c
[
INTRA_C_LP_TOP
]
=
intra_pred_lp_top
;
h
->
intra_pred_c
[
INTRA_C_DC_128
]
=
intra_pred_dc_128
;
h
->
mv
[
7
]
=
un_mv
;
h
->
mv
[
19
]
=
un_mv
;
return
0
;
}
av_cold
int
ff_cavs_end
(
AVCodecContext
*
avctx
)
{
av_cold
int
ff_cavs_end
(
AVCodecContext
*
avctx
)
{
AVSContext
*
h
=
avctx
->
priv_data
;
av_frame_free
(
&
h
->
cur
.
f
);
...
...
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