Mercurial > libavcodec.hg
comparison vc1.c @ 4680:71c1e1171e83 libavcodec
Proper handling of motion vectors for adv. profile
author | kostya |
---|---|
date | Sun, 18 Mar 2007 07:51:40 +0000 |
parents | d4feec96fd64 |
children | b82cff2e2e83 |
comparison
equal
deleted
inserted
replaced
4679:acdd4b24f5c5 | 4680:71c1e1171e83 |
---|---|
819 src_x = s->mb_x * 16 + (mx >> 2); | 819 src_x = s->mb_x * 16 + (mx >> 2); |
820 src_y = s->mb_y * 16 + (my >> 2); | 820 src_y = s->mb_y * 16 + (my >> 2); |
821 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); | 821 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); |
822 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); | 822 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); |
823 | 823 |
824 if(v->profile != PROFILE_ADVANCED){ | |
824 src_x = av_clip( src_x, -16, s->mb_width * 16); | 825 src_x = av_clip( src_x, -16, s->mb_width * 16); |
825 src_y = av_clip( src_y, -16, s->mb_height * 16); | 826 src_y = av_clip( src_y, -16, s->mb_height * 16); |
826 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); | 827 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); |
827 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); | 828 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); |
829 }else{ | |
830 src_x = av_clip( src_x, -17, s->avctx->coded_width); | |
831 src_y = av_clip( src_y, -18, s->avctx->coded_height + 1); | |
832 uvsrc_x = av_clip(uvsrc_x, -8, s->avctx->coded_width >> 1); | |
833 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1); | |
834 } | |
828 | 835 |
829 srcY += src_y * s->linesize + src_x; | 836 srcY += src_y * s->linesize + src_x; |
830 srcU += uvsrc_y * s->uvlinesize + uvsrc_x; | 837 srcU += uvsrc_y * s->uvlinesize + uvsrc_x; |
831 srcV += uvsrc_y * s->uvlinesize + uvsrc_x; | 838 srcV += uvsrc_y * s->uvlinesize + uvsrc_x; |
832 | 839 |
942 off = s->linesize * 4 * (n&2) + (n&1) * 8; | 949 off = s->linesize * 4 * (n&2) + (n&1) * 8; |
943 | 950 |
944 src_x = s->mb_x * 16 + (n&1) * 8 + (mx >> 2); | 951 src_x = s->mb_x * 16 + (n&1) * 8 + (mx >> 2); |
945 src_y = s->mb_y * 16 + (n&2) * 4 + (my >> 2); | 952 src_y = s->mb_y * 16 + (n&2) * 4 + (my >> 2); |
946 | 953 |
954 if(v->profile != PROFILE_ADVANCED){ | |
947 src_x = av_clip( src_x, -16, s->mb_width * 16); | 955 src_x = av_clip( src_x, -16, s->mb_width * 16); |
948 src_y = av_clip( src_y, -16, s->mb_height * 16); | 956 src_y = av_clip( src_y, -16, s->mb_height * 16); |
957 }else{ | |
958 src_x = av_clip( src_x, -17, s->avctx->coded_width); | |
959 src_y = av_clip( src_y, -18, s->avctx->coded_height + 1); | |
960 } | |
949 | 961 |
950 srcY += src_y * s->linesize + src_x; | 962 srcY += src_y * s->linesize + src_x; |
951 | 963 |
952 if(v->rangeredfrm || (v->mv_mode == MV_PMODE_INTENSITY_COMP) | 964 if(v->rangeredfrm || (v->mv_mode == MV_PMODE_INTENSITY_COMP) |
953 || (unsigned)(src_x - s->mspel) > s->h_edge_pos - (mx&3) - 8 - s->mspel*2 | 965 || (unsigned)(src_x - s->mspel) > s->h_edge_pos - (mx&3) - 8 - s->mspel*2 |
1069 } | 1081 } |
1070 | 1082 |
1071 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); | 1083 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); |
1072 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); | 1084 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); |
1073 | 1085 |
1086 if(v->profile != PROFILE_ADVANCED){ | |
1074 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); | 1087 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); |
1075 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); | 1088 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); |
1089 }else{ | |
1090 uvsrc_x = av_clip(uvsrc_x, -8, s->avctx->coded_width >> 1); | |
1091 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1); | |
1092 } | |
1093 | |
1076 srcU = s->last_picture.data[1] + uvsrc_y * s->uvlinesize + uvsrc_x; | 1094 srcU = s->last_picture.data[1] + uvsrc_y * s->uvlinesize + uvsrc_x; |
1077 srcV = s->last_picture.data[2] + uvsrc_y * s->uvlinesize + uvsrc_x; | 1095 srcV = s->last_picture.data[2] + uvsrc_y * s->uvlinesize + uvsrc_x; |
1078 if(v->rangeredfrm || (v->mv_mode == MV_PMODE_INTENSITY_COMP) | 1096 if(v->rangeredfrm || (v->mv_mode == MV_PMODE_INTENSITY_COMP) |
1079 || (unsigned)uvsrc_x > (s->h_edge_pos >> 1) - 9 | 1097 || (unsigned)uvsrc_x > (s->h_edge_pos >> 1) - 9 |
1080 || (unsigned)uvsrc_y > (s->v_edge_pos >> 1) - 9){ | 1098 || (unsigned)uvsrc_y > (s->v_edge_pos >> 1) - 9){ |
1282 v->broadcast = get_bits1(gb); | 1300 v->broadcast = get_bits1(gb); |
1283 v->interlace = get_bits1(gb); | 1301 v->interlace = get_bits1(gb); |
1284 v->tfcntrflag = get_bits1(gb); | 1302 v->tfcntrflag = get_bits1(gb); |
1285 v->finterpflag = get_bits1(gb); | 1303 v->finterpflag = get_bits1(gb); |
1286 get_bits1(gb); // reserved | 1304 get_bits1(gb); // reserved |
1305 | |
1306 v->s.h_edge_pos = v->s.avctx->coded_width; | |
1307 v->s.v_edge_pos = v->s.avctx->coded_height; | |
1287 | 1308 |
1288 av_log(v->s.avctx, AV_LOG_DEBUG, | 1309 av_log(v->s.avctx, AV_LOG_DEBUG, |
1289 "Advanced Profile level %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n" | 1310 "Advanced Profile level %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n" |
1290 "LoopFilter=%i, ChromaFormat=%i, Pulldown=%i, Interlace: %i\n" | 1311 "LoopFilter=%i, ChromaFormat=%i, Pulldown=%i, Interlace: %i\n" |
1291 "TFCTRflag=%i, FINTERPflag=%i\n", | 1312 "TFCTRflag=%i, FINTERPflag=%i\n", |
2116 src_x = s->mb_x * 16 + (mx >> 2); | 2137 src_x = s->mb_x * 16 + (mx >> 2); |
2117 src_y = s->mb_y * 16 + (my >> 2); | 2138 src_y = s->mb_y * 16 + (my >> 2); |
2118 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); | 2139 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); |
2119 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); | 2140 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); |
2120 | 2141 |
2142 if(v->profile != PROFILE_ADVANCED){ | |
2121 src_x = av_clip( src_x, -16, s->mb_width * 16); | 2143 src_x = av_clip( src_x, -16, s->mb_width * 16); |
2122 src_y = av_clip( src_y, -16, s->mb_height * 16); | 2144 src_y = av_clip( src_y, -16, s->mb_height * 16); |
2123 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); | 2145 uvsrc_x = av_clip(uvsrc_x, -8, s->mb_width * 8); |
2124 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); | 2146 uvsrc_y = av_clip(uvsrc_y, -8, s->mb_height * 8); |
2147 }else{ | |
2148 src_x = av_clip( src_x, -17, s->avctx->coded_width); | |
2149 src_y = av_clip( src_y, -18, s->avctx->coded_height + 1); | |
2150 uvsrc_x = av_clip(uvsrc_x, -8, s->avctx->coded_width >> 1); | |
2151 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1); | |
2152 } | |
2125 | 2153 |
2126 srcY += src_y * s->linesize + src_x; | 2154 srcY += src_y * s->linesize + src_x; |
2127 srcU += uvsrc_y * s->uvlinesize + uvsrc_x; | 2155 srcU += uvsrc_y * s->uvlinesize + uvsrc_x; |
2128 srcV += uvsrc_y * s->uvlinesize + uvsrc_x; | 2156 srcV += uvsrc_y * s->uvlinesize + uvsrc_x; |
2129 | 2157 |