43 for (j = 0; j < 2; j++) {
76 for (j = 0; j < 2; j++) {
93 for (j = 0; j < 2; j++) {
109 for (j = 0; j < 2; j++) {
120 for (j = 0; j < 2; j++) {
210 block_cbp = mb_cbp >> (block_num * 4), bottom_cbp,
212 block_is_intra = mb_is_intra >> block_num, bottom_is_intra;
217 dst = s->
dest[block_num - 3];
219 dst = s->
dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 8) * linesize;
226 bottom_cbp = v->
cbp[s->
mb_x] >> (block_num * 4);
231 bottom_cbp = (block_num < 2) ? (mb_cbp >> ((block_num + 2) * 4))
232 : (v->
cbp[s->
mb_x] >> ((block_num - 2) * 4));
233 bottom_is_intra = (block_num < 2) ? (mb_is_intra >> (block_num + 2))
239 if (bottom_is_intra & 1 || block_is_intra & 1 ||
240 mv[0][0] !=
mv[mv_stride][0] ||
mv[0][1] !=
mv[mv_stride][1]) {
243 idx = ((bottom_cbp >> 2) | block_cbp) & 3;
258 idx = (block_cbp | (block_cbp >> 2)) & 3;
274 block_cbp = mb_cbp >> (block_num * 4), right_cbp,
276 block_is_intra = mb_is_intra >> block_num, right_is_intra;
281 dst = s->
dest[block_num - 3] - 8 * linesize;
283 dst = s->
dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 16) * linesize - 8;
294 right_cbp = (block_num & 1) ? (v->
cbp[s->
mb_x - s->
mb_stride] >> ((block_num - 1) * 4))
295 : (mb_cbp >> ((block_num + 1) * 4));
297 : (mb_is_intra >> (block_num + 1));
300 if (block_is_intra & 1 || right_is_intra & 1 ||
mv[0][0] !=
mv[1][0] ||
mv[0][1] !=
mv[1][1]) {
303 idx = ((right_cbp >> 1) | block_cbp) & 5;
318 idx = (block_cbp | (block_cbp >> 1)) & 5;
335 for (i = 0; i < 6; i++) {
342 for (i = 0; i < 6; i++) {
348 for (i = 0; i < 6; 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.
static void ff_update_block_index(MpegEncContext *s)
static av_always_inline void vc1_apply_p_h_loop_filter(VC1Context *v, int block_num)
void(* vc1_v_loop_filter16)(uint8_t *src, int stride, int pq)
Libavcodec external API header.
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)
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
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
#define CODEC_FLAG_GRAY
Only decode/encode grayscale.
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)
int flags
AVCodecContext.flags (HQ, MV4, ...)
void(* vc1_h_s_overlap)(int16_t *left, int16_t *right)
void(* vc1_h_loop_filter16)(uint8_t *src, int stride, int pq)