44 for (j = 0; j < 2; j++) {
80 for (j = 0; j < 2; j++) {
98 for (j = 0; j < 2; j++) {
114 for (j = 0; j < 2; j++) {
125 for (j = 0; j < 2; j++) {
215 block_cbp = mb_cbp >> (block_num * 4), bottom_cbp,
217 block_is_intra = mb_is_intra >> block_num, bottom_is_intra;
222 dst = s->
dest[block_num - 3];
224 dst = s->
dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 8) * linesize;
231 bottom_cbp = v->
cbp[s->
mb_x] >> (block_num * 4);
236 bottom_cbp = (block_num < 2) ? (mb_cbp >> ((block_num + 2) * 4))
237 : (v->
cbp[s->
mb_x] >> ((block_num - 2) * 4));
238 bottom_is_intra = (block_num < 2) ? (mb_is_intra >> (block_num + 2))
244 if (bottom_is_intra & 1 || block_is_intra & 1 ||
245 mv[0][0] !=
mv[mv_stride][0] ||
mv[0][1] !=
mv[mv_stride][1]) {
248 idx = ((bottom_cbp >> 2) | block_cbp) & 3;
263 idx = (block_cbp | (block_cbp >> 2)) & 3;
279 block_cbp = mb_cbp >> (block_num * 4), right_cbp,
281 block_is_intra = mb_is_intra >> block_num, right_is_intra;
286 dst = s->
dest[block_num - 3] - 8 * linesize;
288 dst = s->
dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 16) * linesize - 8;
299 right_cbp = (block_num & 1) ? (v->
cbp[s->
mb_x - s->
mb_stride] >> ((block_num - 1) * 4))
300 : (mb_cbp >> ((block_num + 1) * 4));
302 : (mb_is_intra >> (block_num + 1));
305 if (block_is_intra & 1 || right_is_intra & 1 ||
mv[0][0] !=
mv[1][0] ||
mv[0][1] !=
mv[1][1]) {
308 idx = ((right_cbp >> 1) | block_cbp) & 5;
323 idx = (block_cbp | (block_cbp >> 1)) & 5;
341 for (i = 0; i < block_count; i++) {
348 for (i = 0; i < block_count; i++) {
354 for (i = 0; i < block_count; i++) {
void ff_vc1_apply_p_loop_filter(VC1Context *v)
int start_mb_y
start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
int end_mb_y
end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
void ff_vc1_loop_filter_iblk(VC1Context *v, int pq)
void(* vc1_v_loop_filter8)(uint8_t *src, int stride, int pq)
void(* vc1_v_loop_filter4)(uint8_t *src, int stride, int pq)
Picture current_picture
copy of the current picture structure.
void(* vc1_h_loop_filter8)(uint8_t *src, int stride, int pq)
uint8_t * over_flags_plane
Overflags bitplane.
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
static void ff_update_block_index(MpegEncContext *s)
static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_num)
int flags
AV_CODEC_FLAG_*.
void(* vc1_v_loop_filter16)(uint8_t *src, int stride, int pq)
int16_t(*[2] motion_val)[2]
int block_index[6]
index to current MB in block based arrays with edges
static const int8_t mv[256][2]
int first_slice_line
used in mpeg4 too to handle resync markers
void(* vc1_h_loop_filter4)(uint8_t *src, int stride, int pq)
Libavcodec external API header.
ptrdiff_t linesize
line size, in bytes, may be different from width
static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_num)
ptrdiff_t uvlinesize
line size, for chroma in bytes, may be different from width
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
struct AVCodecContext * avctx
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
void ff_vc1_smooth_overlap_filter_iblk(VC1Context *v)
int * ttblk
Transform type at the block level.
void(* vc1_v_s_overlap)(int16_t *top, int16_t *bottom)
void ff_vc1_loop_filter_iblk_delayed(VC1Context *v, int pq)
void(* vc1_h_s_overlap)(int16_t *left, int16_t *right)
void(* vc1_h_loop_filter16)(uint8_t *src, int stride, int pq)