Originally committed as revision 3609 to svn://svn.ffmpeg.org/ffmpeg/trunk
Michael Niedermayer authored on 2004/10/19 08:07:18... | ... |
@@ -1882,7 +1882,7 @@ int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) |
1882 | 1882 |
{ |
1883 | 1883 |
if(s->me_method>=ME_EPZS){ |
1884 | 1884 |
int score[8]; |
1885 |
- int i, y; |
|
1885 |
+ int i, y, range= s->avctx->me_range; |
|
1886 | 1886 |
uint8_t * fcode_tab= s->fcode_tab; |
1887 | 1887 |
int best_fcode=-1; |
1888 | 1888 |
int best_score=-10000000; |
... | ... |
@@ -1894,10 +1894,18 @@ int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) |
1894 | 1894 |
int xy= y*s->mb_stride; |
1895 | 1895 |
for(x=0; x<s->mb_width; x++){ |
1896 | 1896 |
if(s->mb_type[xy] & type){ |
1897 |
- int fcode= FFMAX(fcode_tab[mv_table[xy][0] + MAX_MV], |
|
1898 |
- fcode_tab[mv_table[xy][1] + MAX_MV]); |
|
1897 |
+ int mx= mv_table[xy][0]; |
|
1898 |
+ int my= mv_table[xy][1]; |
|
1899 |
+ int fcode= FFMAX(fcode_tab[mx + MAX_MV], |
|
1900 |
+ fcode_tab[my + MAX_MV]); |
|
1899 | 1901 |
int j; |
1900 | 1902 |
|
1903 |
+ if(range){ |
|
1904 |
+ if(mx >= range || mx < -range || |
|
1905 |
+ my >= range || my < -range) |
|
1906 |
+ continue; |
|
1907 |
+ } |
|
1908 |
+ |
|
1901 | 1909 |
for(j=0; j<fcode && j<8; j++){ |
1902 | 1910 |
if(s->pict_type==B_TYPE || s->current_picture.mc_mb_var[xy] < s->current_picture.mb_var[xy]) |
1903 | 1911 |
score[j]-= 170; |
... | ... |
@@ -303,6 +303,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) |
303 | 303 |
s->mb_width * s->mb_height <= 396 && |
304 | 304 |
s->mb_width * s->mb_height * framerate.num <= framerate.den*396*25 && |
305 | 305 |
framerate.num <= framerate.den*30 && |
306 |
+ s->avctx->me_range && s->avctx->me_range < 128 && |
|
306 | 307 |
vbv_buffer_size <= 20 && |
307 | 308 |
v <= 1856000/400 && |
308 | 309 |
s->codec_id == CODEC_ID_MPEG1VIDEO; |