Mercurial > libavcodec.hg
comparison mpegvideo.c @ 763:339db642859d libavcodec
fixing interlaced MC & edge-emu
author | michaelni |
---|---|
date | Wed, 23 Oct 2002 08:14:12 +0000 |
parents | e858fe220ce0 |
children | d4726182dfd2 |
comparison
equal
deleted
inserted
replaced
762:5da504c8c90e | 763:339db642859d |
---|---|
1281 dest_y += dest_offset; | 1281 dest_y += dest_offset; |
1282 | 1282 |
1283 if(s->flags&CODEC_FLAG_EMU_EDGE){ | 1283 if(s->flags&CODEC_FLAG_EMU_EDGE){ |
1284 if(src_x<0 || src_y<0 || src_x + (motion_x&1) + 16 > s->h_edge_pos | 1284 if(src_x<0 || src_y<0 || src_x + (motion_x&1) + 16 > s->h_edge_pos |
1285 || src_y + (motion_y&1) + h > v_edge_pos){ | 1285 || src_y + (motion_y&1) + h > v_edge_pos){ |
1286 emulated_edge_mc(s, ptr, linesize, 17, h+1, src_x, src_y, s->h_edge_pos, v_edge_pos); | 1286 emulated_edge_mc(s, ptr - src_offset, s->linesize, 17, 17+field_based, |
1287 ptr= s->edge_emu_buffer; | 1287 src_x, src_y<<field_based, s->h_edge_pos, s->v_edge_pos); |
1288 ptr= s->edge_emu_buffer + src_offset; | |
1288 emu=1; | 1289 emu=1; |
1289 } | 1290 } |
1290 } | 1291 } |
1291 pix_op[0][dxy](dest_y, ptr, linesize, h); | 1292 pix_op[0][dxy](dest_y, ptr, linesize, h); |
1292 | 1293 |
1317 if (src_y == (height >> 1)) | 1318 if (src_y == (height >> 1)) |
1318 dxy &= ~2; | 1319 dxy &= ~2; |
1319 offset = (src_y * uvlinesize) + src_x + (src_offset >> 1); | 1320 offset = (src_y * uvlinesize) + src_x + (src_offset >> 1); |
1320 ptr = ref_picture[1] + offset; | 1321 ptr = ref_picture[1] + offset; |
1321 if(emu){ | 1322 if(emu){ |
1322 emulated_edge_mc(s, ptr, uvlinesize, 9, (h>>1)+1, src_x, src_y, s->h_edge_pos>>1, v_edge_pos>>1); | 1323 emulated_edge_mc(s, ptr - (src_offset >> 1), s->uvlinesize, 9, 9+field_based, |
1323 ptr= s->edge_emu_buffer; | 1324 src_x, src_y<<field_based, s->h_edge_pos>>1, s->v_edge_pos>>1); |
1325 ptr= s->edge_emu_buffer + (src_offset >> 1); | |
1324 } | 1326 } |
1325 pix_op[1][dxy](dest_cb + (dest_offset >> 1), ptr, uvlinesize, h >> 1); | 1327 pix_op[1][dxy](dest_cb + (dest_offset >> 1), ptr, uvlinesize, h >> 1); |
1326 | 1328 |
1327 ptr = ref_picture[2] + offset; | 1329 ptr = ref_picture[2] + offset; |
1328 if(emu){ | 1330 if(emu){ |
1329 emulated_edge_mc(s, ptr, uvlinesize, 9, (h>>1)+1, src_x, src_y, s->h_edge_pos>>1, v_edge_pos>>1); | 1331 emulated_edge_mc(s, ptr - (src_offset >> 1), s->uvlinesize, 9, 9+field_based, |
1330 ptr= s->edge_emu_buffer; | 1332 src_x, src_y<<field_based, s->h_edge_pos>>1, s->v_edge_pos>>1); |
1333 ptr= s->edge_emu_buffer + (src_offset >> 1); | |
1331 } | 1334 } |
1332 pix_op[1][dxy](dest_cr + (dest_offset >> 1), ptr, uvlinesize, h >> 1); | 1335 pix_op[1][dxy](dest_cr + (dest_offset >> 1), ptr, uvlinesize, h >> 1); |
1333 } | 1336 } |
1334 | 1337 |
1335 static inline void qpel_motion(MpegEncContext *s, | 1338 static inline void qpel_motion(MpegEncContext *s, |
1363 //printf("%d %d %d\n", src_x, src_y, dxy); | 1366 //printf("%d %d %d\n", src_x, src_y, dxy); |
1364 | 1367 |
1365 if(s->flags&CODEC_FLAG_EMU_EDGE){ | 1368 if(s->flags&CODEC_FLAG_EMU_EDGE){ |
1366 if(src_x<0 || src_y<0 || src_x + (motion_x&3) + 16 > s->h_edge_pos | 1369 if(src_x<0 || src_y<0 || src_x + (motion_x&3) + 16 > s->h_edge_pos |
1367 || src_y + (motion_y&3) + h > v_edge_pos){ | 1370 || src_y + (motion_y&3) + h > v_edge_pos){ |
1368 emulated_edge_mc(s, ptr, linesize, 17, h+1, src_x, src_y, s->h_edge_pos, v_edge_pos); | 1371 emulated_edge_mc(s, ptr - src_offset, s->linesize, 17, 17+field_based, |
1369 ptr= s->edge_emu_buffer; | 1372 src_x, src_y<<field_based, s->h_edge_pos, s->v_edge_pos); |
1373 ptr= s->edge_emu_buffer + src_offset; | |
1370 emu=1; | 1374 emu=1; |
1371 } | 1375 } |
1372 } | 1376 } |
1373 if(!field_based) | 1377 if(!field_based) |
1374 qpix_op[0][dxy](dest_y, ptr, linesize); | 1378 qpix_op[0][dxy](dest_y, ptr, linesize); |
1407 dxy &= ~2; | 1411 dxy &= ~2; |
1408 | 1412 |
1409 offset = (src_y * uvlinesize) + src_x + (src_offset >> 1); | 1413 offset = (src_y * uvlinesize) + src_x + (src_offset >> 1); |
1410 ptr = ref_picture[1] + offset; | 1414 ptr = ref_picture[1] + offset; |
1411 if(emu){ | 1415 if(emu){ |
1412 emulated_edge_mc(s, ptr, uvlinesize, 9, (h>>1)+1, src_x, src_y, s->h_edge_pos>>1, v_edge_pos>>1); | 1416 emulated_edge_mc(s, ptr - (src_offset >> 1), s->uvlinesize, 9, 9 + field_based, |
1413 ptr= s->edge_emu_buffer; | 1417 src_x, src_y<<field_based, s->h_edge_pos>>1, s->v_edge_pos>>1); |
1418 ptr= s->edge_emu_buffer + (src_offset >> 1); | |
1414 } | 1419 } |
1415 pix_op[1][dxy](dest_cb + (dest_offset >> 1), ptr, uvlinesize, h >> 1); | 1420 pix_op[1][dxy](dest_cb + (dest_offset >> 1), ptr, uvlinesize, h >> 1); |
1416 | 1421 |
1417 ptr = ref_picture[2] + offset; | 1422 ptr = ref_picture[2] + offset; |
1418 if(emu){ | 1423 if(emu){ |
1419 emulated_edge_mc(s, ptr, uvlinesize, 9, (h>>1)+1, src_x, src_y, s->h_edge_pos>>1, v_edge_pos>>1); | 1424 emulated_edge_mc(s, ptr - (src_offset >> 1), s->uvlinesize, 9, 9 + field_based, |
1420 ptr= s->edge_emu_buffer; | 1425 src_x, src_y<<field_based, s->h_edge_pos>>1, s->v_edge_pos>>1); |
1426 ptr= s->edge_emu_buffer + (src_offset >> 1); | |
1421 } | 1427 } |
1422 pix_op[1][dxy](dest_cr + (dest_offset >> 1), ptr, uvlinesize, h >> 1); | 1428 pix_op[1][dxy](dest_cr + (dest_offset >> 1), ptr, uvlinesize, h >> 1); |
1423 } | 1429 } |
1424 | 1430 |
1425 | 1431 |