Mercurial > libavcodec.hg
comparison mpegvideo.c @ 1685:cb09cf265a87 libavcodec
mb type & qp vissualization
| author | michael |
|---|---|
| date | Sat, 13 Dec 2003 01:33:52 +0000 |
| parents | 19e781619e3f |
| children | 68abbec33289 |
comparison
equal
deleted
inserted
replaced
| 1684:19e781619e3f | 1685:cb09cf265a87 |
|---|---|
| 1411 } | 1411 } |
| 1412 av_log(s->avctx, AV_LOG_DEBUG, "\n"); | 1412 av_log(s->avctx, AV_LOG_DEBUG, "\n"); |
| 1413 } | 1413 } |
| 1414 } | 1414 } |
| 1415 | 1415 |
| 1416 if((s->avctx->debug&FF_DEBUG_VIS_MV) && pict->motion_val){ | 1416 if(s->avctx->debug&(FF_DEBUG_VIS_MV|FF_DEBUG_VIS_QP|FF_DEBUG_VIS_MB_TYPE)){ |
| 1417 const int shift= 1 + s->quarter_sample; | 1417 const int shift= 1 + s->quarter_sample; |
| 1418 int mb_y; | 1418 int mb_y; |
| 1419 uint8_t *ptr= pict->data[0]; | 1419 uint8_t *ptr= pict->data[0]; |
| 1420 s->low_delay=0; //needed to see the vectors without trashing the buffers | 1420 s->low_delay=0; //needed to see the vectors without trashing the buffers |
| 1421 | 1421 |
| 1422 for(mb_y=0; mb_y<s->mb_height; mb_y++){ | 1422 for(mb_y=0; mb_y<s->mb_height; mb_y++){ |
| 1423 int mb_x; | 1423 int mb_x; |
| 1424 for(mb_x=0; mb_x<s->mb_width; mb_x++){ | 1424 for(mb_x=0; mb_x<s->mb_width; mb_x++){ |
| 1425 const int mb_index= mb_x + mb_y*s->mb_stride; | 1425 const int mb_index= mb_x + mb_y*s->mb_stride; |
| 1426 if(IS_8X8(pict->mb_type[mb_index])){ | 1426 if((s->avctx->debug&FF_DEBUG_VIS_MV) && pict->motion_val){ |
| 1427 if(IS_8X8(pict->mb_type[mb_index])){ | |
| 1427 int i; | 1428 int i; |
| 1428 for(i=0; i<4; i++){ | 1429 for(i=0; i<4; i++){ |
| 1429 int sx= mb_x*16 + 4 + 8*(i&1); | 1430 int sx= mb_x*16 + 4 + 8*(i&1); |
| 1430 int sy= mb_y*16 + 4 + 8*(i>>1); | 1431 int sy= mb_y*16 + 4 + 8*(i>>1); |
| 1431 int xy= 1 + mb_x*2 + (i&1) + (mb_y*2 + 1 + (i>>1))*(s->mb_width*2 + 2); | 1432 int xy= 1 + mb_x*2 + (i&1) + (mb_y*2 + 1 + (i>>1))*(s->mb_width*2 + 2); |
| 1432 int mx= (pict->motion_val[0][xy][0]>>shift) + sx; | 1433 int mx= (pict->motion_val[0][xy][0]>>shift) + sx; |
| 1433 int my= (pict->motion_val[0][xy][1]>>shift) + sy; | 1434 int my= (pict->motion_val[0][xy][1]>>shift) + sy; |
| 1434 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); | 1435 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); |
| 1435 } | 1436 } |
| 1436 }else if(IS_16X8(pict->mb_type[mb_index])){ | 1437 }else if(IS_16X8(pict->mb_type[mb_index])){ |
| 1437 int i; | 1438 int i; |
| 1438 for(i=0; i<2; i++){ | 1439 for(i=0; i<2; i++){ |
| 1439 int sx=mb_x*16 + 8; | 1440 int sx=mb_x*16 + 8; |
| 1440 int sy=mb_y*16 + 4 + 8*i; | 1441 int sy=mb_y*16 + 4 + 8*i; |
| 1441 int xy=1 + mb_x*2 + (mb_y*2 + 1 + i)*(s->mb_width*2 + 2); | 1442 int xy=1 + mb_x*2 + (mb_y*2 + 1 + i)*(s->mb_width*2 + 2); |
| 1442 int mx=(pict->motion_val[0][xy][0]>>shift) + sx; | 1443 int mx=(pict->motion_val[0][xy][0]>>shift) + sx; |
| 1443 int my=(pict->motion_val[0][xy][1]>>shift) + sy; | 1444 int my=(pict->motion_val[0][xy][1]>>shift) + sy; |
| 1444 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); | 1445 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); |
| 1445 } | 1446 } |
| 1446 }else{ | 1447 }else{ |
| 1447 int sx= mb_x*16 + 8; | 1448 int sx= mb_x*16 + 8; |
| 1448 int sy= mb_y*16 + 8; | 1449 int sy= mb_y*16 + 8; |
| 1449 int xy= 1 + mb_x*2 + (mb_y*2 + 1)*(s->mb_width*2 + 2); | 1450 int xy= 1 + mb_x*2 + (mb_y*2 + 1)*(s->mb_width*2 + 2); |
| 1450 int mx= (pict->motion_val[0][xy][0]>>shift) + sx; | 1451 int mx= (pict->motion_val[0][xy][0]>>shift) + sx; |
| 1451 int my= (pict->motion_val[0][xy][1]>>shift) + sy; | 1452 int my= (pict->motion_val[0][xy][1]>>shift) + sy; |
| 1452 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); | 1453 draw_arrow(ptr, sx, sy, mx, my, s->width, s->height, s->linesize, 100); |
| 1454 } | |
| 1455 } | |
| 1456 if((s->avctx->debug&FF_DEBUG_VIS_QP) && pict->motion_val){ | |
| 1457 uint64_t c= (pict->qscale_table[mb_index]*128/31) * 0x0101010101010101ULL; | |
| 1458 int y; | |
| 1459 for(y=0; y<8; y++){ | |
| 1460 *(uint64_t*)(pict->data[1] + 8*mb_x + (8*mb_y + y)*pict->linesize[1])= c; | |
| 1461 *(uint64_t*)(pict->data[2] + 8*mb_x + (8*mb_y + y)*pict->linesize[2])= c; | |
| 1462 } | |
| 1463 } | |
| 1464 if((s->avctx->debug&FF_DEBUG_VIS_MB_TYPE) && pict->motion_val){ | |
| 1465 int mb_type= pict->mb_type[mb_index]; | |
| 1466 uint64_t u,v; | |
| 1467 int y; | |
| 1468 #define COLOR(theta, r)\ | |
| 1469 u= (int)(128 + r*cos(theta*3.141592/180));\ | |
| 1470 v= (int)(128 + r*sin(theta*3.141592/180)); | |
| 1471 | |
| 1472 | |
| 1473 u=v=128; | |
| 1474 if(IS_PCM(mb_type)){ | |
| 1475 COLOR(120,48) | |
| 1476 }else if((IS_INTRA(mb_type) && IS_ACPRED(mb_type)) || IS_INTRA16x16(mb_type)){ | |
| 1477 COLOR(30,48) | |
| 1478 }else if(IS_INTRA4x4(mb_type)){ | |
| 1479 COLOR(90,48) | |
| 1480 }else if(IS_DIRECT(mb_type) && IS_SKIP(mb_type)){ | |
| 1481 // COLOR(120,48) | |
| 1482 }else if(IS_DIRECT(mb_type)){ | |
| 1483 COLOR(150,48) | |
| 1484 }else if(IS_GMC(mb_type) && IS_SKIP(mb_type)){ | |
| 1485 COLOR(170,48) | |
| 1486 }else if(IS_GMC(mb_type)){ | |
| 1487 COLOR(190,48) | |
| 1488 }else if(IS_SKIP(mb_type)){ | |
| 1489 // COLOR(180,48) | |
| 1490 }else if(!USES_LIST(mb_type, 1)){ | |
| 1491 COLOR(240,48) | |
| 1492 }else if(!USES_LIST(mb_type, 0)){ | |
| 1493 COLOR(0,48) | |
| 1494 }else{ | |
| 1495 assert(USES_LIST(mb_type, 0) && USES_LIST(mb_type, 1)); | |
| 1496 COLOR(300,48) | |
| 1497 } | |
| 1498 | |
| 1499 u*= 0x0101010101010101ULL; | |
| 1500 v*= 0x0101010101010101ULL; | |
| 1501 for(y=0; y<8; y++){ | |
| 1502 *(uint64_t*)(pict->data[1] + 8*mb_x + (8*mb_y + y)*pict->linesize[1])= u; | |
| 1503 *(uint64_t*)(pict->data[2] + 8*mb_x + (8*mb_y + y)*pict->linesize[2])= v; | |
| 1504 } | |
| 1505 | |
| 1506 //segmentation | |
| 1507 if(IS_8X8(mb_type) || IS_16X8(mb_type)){ | |
| 1508 *(uint64_t*)(pict->data[0] + 16*mb_x + 0 + (16*mb_y + 8)*pict->linesize[0])^= 0x8080808080808080ULL; | |
| 1509 *(uint64_t*)(pict->data[0] + 16*mb_x + 8 + (16*mb_y + 8)*pict->linesize[0])^= 0x8080808080808080ULL; | |
| 1510 } | |
| 1511 if(IS_8X8(mb_type) || IS_8X16(mb_type)){ | |
| 1512 for(y=0; y<16; y++) | |
| 1513 pict->data[0][16*mb_x + 8 + (16*mb_y + y)*pict->linesize[0]]^= 0x80; | |
| 1514 } | |
| 1515 | |
| 1516 if(IS_INTERLACED(mb_type) && s->codec_id == CODEC_ID_H264){ | |
| 1517 // hmm | |
| 1518 } | |
| 1453 } | 1519 } |
| 1454 s->mbskip_table[mb_index]=0; | 1520 s->mbskip_table[mb_index]=0; |
| 1455 } | 1521 } |
| 1456 } | 1522 } |
| 1457 } | 1523 } |
