Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@users.sourceforge.net>2010-07-23 10:36:42 +0400
committerXhmikosR <xhmikosr@users.sourceforge.net>2010-07-23 10:36:42 +0400
commit7c67a6e4045516f0fa222e29b03aed8fe8189b7f (patch)
tree7ec71cbb4ae095ba401b67c5fd302ff1d66cc845 /src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c
parent335f95c6e1384b3c873b0c924f09e3c6d449d013 (diff)
Updated ffmpeg
(Thanks to Aleksoid for fixing the unresolved externals when linking) git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2143 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c')
-rw-r--r--src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c59
1 files changed, 41 insertions, 18 deletions
diff --git a/src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c b/src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c
index 17a08e155..47cd5e811 100644
--- a/src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c
+++ b/src/filters/transform/MPCVideoDec/ffmpeg/libavcodec/vc1dec.c
@@ -161,17 +161,27 @@ enum Imode {
static void vc1_loop_filter_iblk(MpegEncContext *s, int pq)
{
- int i, j;
- if(!s->first_slice_line)
+ int j;
+ if (!s->first_slice_line) {
s->dsp.vc1_v_loop_filter16(s->dest[0], s->linesize, pq);
- s->dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq);
- for(i = !s->mb_x*8; i < 16; i += 8)
- s->dsp.vc1_h_loop_filter16(s->dest[0] + i, s->linesize, pq);
- for(j = 0; j < 2; j++){
- if(!s->first_slice_line)
+ if (s->mb_x)
+ s->dsp.vc1_h_loop_filter16(s->dest[0] - 16*s->linesize, s->linesize, pq);
+ s->dsp.vc1_h_loop_filter16(s->dest[0] - 16*s->linesize+8, s->linesize, pq);
+ for(j = 0; j < 2; j++){
s->dsp.vc1_v_loop_filter8(s->dest[j+1], s->uvlinesize, pq);
- if(s->mb_x)
- s->dsp.vc1_h_loop_filter8(s->dest[j+1], s->uvlinesize, pq);
+ if (s->mb_x)
+ s->dsp.vc1_h_loop_filter8(s->dest[j+1]-8*s->uvlinesize, s->uvlinesize, pq);
+ }
+ }
+ s->dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq);
+
+ if (s->mb_y == s->mb_height-1) {
+ if (s->mb_x) {
+ s->dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq);
+ s->dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq);
+ s->dsp.vc1_h_loop_filter8(s->dest[2], s->uvlinesize, pq);
+ }
+ s->dsp.vc1_h_loop_filter16(s->dest[0] + 8, s->linesize, pq);
}
}
@@ -1995,7 +2005,9 @@ static int vc1_decode_p_block(VC1Context *v, DCTELEM block[64], int n, int mquan
if(ttblk == TT_4X4) {
subblkpat = ~(get_vlc2(gb, ff_vc1_subblkpat_vlc[v->tt_index].table, VC1_SUBBLKPAT_VLC_BITS, 1) + 1);
}
- if((ttblk != TT_8X8 && ttblk != TT_4X4) && (v->ttmbf || (ttmb != -1 && (ttmb & 8) && !first_block))) {
+ if((ttblk != TT_8X8 && ttblk != TT_4X4)
+ && ((v->ttmbf || (ttmb != -1 && (ttmb & 8) && !first_block))
+ || (!v->res_rtm_flag && !first_block))) {
subblkpat = decode012(gb);
if(subblkpat) subblkpat ^= 3; //swap decoded pattern bits
if(ttblk == TT_8X4_TOP || ttblk == TT_8X4_BOTTOM) ttblk = TT_8X4;
@@ -2677,9 +2689,15 @@ static void vc1_decode_i_blocks(VC1Context *v)
return;
}
}
- ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ if (!v->s.loop_filter)
+ ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ else if (s->mb_y)
+ ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
+
s->first_slice_line = 0;
}
+ if (v->s.loop_filter)
+ ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
}
@@ -2809,9 +2827,14 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
return;
}
}
- ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ if (!v->s.loop_filter)
+ ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ else if (s->mb_y)
+ ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
s->first_slice_line = 0;
}
+ if (v->s.loop_filter)
+ ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
}
@@ -2910,9 +2933,14 @@ static void vc1_decode_b_blocks(VC1Context *v)
}
if(v->s.loop_filter) vc1_loop_filter_iblk(s, v->pq);
}
- ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ if (!v->s.loop_filter)
+ ff_draw_horiz_band(s, s->mb_y * 16, 16);
+ else if (s->mb_y)
+ ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
s->first_slice_line = 0;
}
+ if (v->s.loop_filter)
+ ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
}
@@ -3197,11 +3225,6 @@ static int vc1_decode_frame(AVCodecContext *avctx,
}
}
- if(s->pict_type != FF_I_TYPE && !v->res_rtm_flag){
- av_free(buf2);
- return -1;
- }
-
// for hurry_up==5
s->current_picture.pict_type= s->pict_type;
s->current_picture.key_frame= s->pict_type == FF_I_TYPE;