开始计算解码速度的时候,认为4*4的块,只要像协议一样走完流程就可以算是解完一个宏块,但是后来发现,对于一个YUV=4:2:0的图像来说,要先解码亮度分量,再解码2个色度分量。观察JM的trace文件,也确实发现了这个问题。
*********** POC: 0 (I/P) MB: 0 Slice: 0 Type 2 **********
@107 mb_type 1 ( 0)
@108 intra4x4_pred_mode 1 ( -1)
@109 intra4x4_pred_mode 0001 ( 1)
@113 intra4x4_pred_mode 1 ( -1)
@114 intra4x4_pred_mode 0110 ( 6)
@118 intra4x4_pred_mode 0001 ( 1)
@122 intra4x4_pred_mode 0111 ( 7)
@126 intra4x4_pred_mode 1 ( -1)
@127 intra4x4_pred_mode 1 ( -1)
@128 intra4x4_pred_mode 0000 ( 0)
@132 intra4x4_pred_mode 0000 ( 0)
@136 intra4x4_pred_mode 0000 ( 0)
@140 intra4x4_pred_mode 0111 ( 7)
@144 intra4x4_pred_mode 0101 ( 5)
@148 intra4x4_pred_mode 1 ( -1)
@149 intra4x4_pred_mode 0111 ( 7)
@153 intra4x4_pred_mode 0111 ( 7)
@157 intra_chroma_pred_mode 1 ( 0)
@158 coded_block_pattern 1 ( 47)
@159 mb_qp_delta 1 ( 0)
@160 Luma # c & tr.1s vlc=0 #c=11 #t1=1 000000000001110 ( 14)
@175 Luma trailing ones sign (0,0) 0 ( 0)
@176 Luma lev (0,0) k=9 vlc=1 11 ( 3)
@178 Luma lev (0,0) k=8 vlc=1 11 ( 3)
@180 Luma lev (0,0) k=7 vlc=1 10 ( 2)
@182 Luma lev (0,0) k=6 vlc=1 000011 ( 3)
@188 Luma lev (0,0) k=5 vlc=2 00000101 ( 5)
@196 Luma lev (0,0) k=4 vlc=3 1101 ( 13)
@200 Luma lev (0,0) k=3 vlc=3 1100 ( 12)
@204 Luma lev (0,0) k=2 vlc=3 1100 ( 12)
@208 Luma lev (0,0) k=1 vlc=3 001111 ( 15)
@214 Luma lev (0,0) k=0 vlc=3 001000 ( 8)
@220 Luma totalrun (0,0) vlc=10 010 ( 2)
@223 Luma run (10,0) k=10 vlc=2 10 ( 2)
@225 Luma run (9,0) k=9 vlc=1 00 ( 0)
@227 Luma # c & tr.1s vlc=3 #c=8 #t1=1 011101 ( 29)
@233 Luma trailing ones sign (1,0) 1 ( 1)
@234 Luma lev (1,0) k=6 vlc=0 01 ( 1)
@236 Luma lev (1,0) k=5 vlc=1 10 ( 2)
@238 Luma lev (1,0) k=4 vlc=1 010 ( 2)
@241 Luma lev (1,0) k=3 vlc=1 11 ( 3)
@243 Luma lev (1,0) k=2 vlc=1 010 ( 2)
@246 Luma lev (1,0) k=1 vlc=1 010 ( 2)
@249 Luma lev (1,0) k=0 vlc=1 0010 ( 2)
@253 Luma totalrun (1,0) vlc=7 010 ( 2)
@256 Luma run (7,0) k=7 vlc=5 010 ( 2)
@259 Luma run (6,0) k=6 vlc=1 1 ( 1)
@260 Luma run (5,0) k=5 vlc=1 1 ( 1)
@261 Luma run (4,0) k=4 vlc=1 1 ( 1)
@262 Luma run (3,0) k=3 vlc=1 01 ( 1)
@264 Luma run (2,0) k=2 vlc=0 0 ( 0)
@265 Luma # c & tr.1s vlc=3 #c=10 #t1=3 100111 ( 39)
@271 Luma trailing ones sign (0,1) 110 ( 6)
@274 Luma lev (0,1) k=6 vlc=0 0001 ( 1)
@278 Luma lev (0,1) k=5 vlc=1 011 ( 3)
@281 Luma lev (0,1) k=4 vlc=1 00000011 ( 3)
@289 Luma lev (0,1) k=3 vlc=2 0100 ( 4)
@293 Luma lev (0,1) k=2 vlc=2 110 ( 6)
@296 Luma lev (0,1) k=1 vlc=2 0000000111 ( 7)
@306 Luma lev (0,1) k=0 vlc=3 1111 ( 15)
@310 Luma totalrun (0,1) vlc=9 11 ( 3)
@312 Luma run (9,1) k=9 vlc=2 11 ( 3)
@314 Luma run (8,1) k=8 vlc=2 10 ( 2)
@316 Luma run (7,1) k=7 vlc=1 01 ( 1)
@318 Luma run (6,1) k=6 vlc=0 1 ( 1)
@319 Luma run (5,1) k=5 vlc=0 1 ( 1)
@320 Luma run (4,1) k=4 vlc=0 1 ( 1)
@321 Luma run (3,1) k=3 vlc=0 1 ( 1)
@322 Luma run (2,1) k=2 vlc=0 0 ( 0)
@323 Luma # c & tr.1s vlc=3 #c=6 #t1=3 010111 ( 23)
@329 Luma trailing ones sign (1,1) 110 ( 6)
@332 Luma lev (1,1) k=2 vlc=0 01 ( 1)
@334 Luma lev (1,1) k=1 vlc=1 011 ( 3)
@337 Luma lev (1,1) k=0 vlc=1 00000000010 ( 2)
@348 Luma totalrun (1,1) vlc=5 101 ( 5)
@351 Luma run (5,1) k=5 vlc=3 001 ( 1)
@354 Luma run (4,1) k=4 vlc=0 1 ( 1)
@355 Luma run (3,1) k=3 vlc=0 0 ( 0)
@356 Luma # c & tr.1s vlc=3 #c=11 #t1=1 101001 ( 41)
@362 Luma trailing ones sign (2,0) 0 ( 0)
@363 Luma lev (2,0) k=9 vlc=1 11 ( 3)
@365 Luma lev (2,0) k=8 vlc=1 10 ( 2)
@367 Luma lev (2,0) k=7 vlc=1 10 ( 2)
@369 Luma lev (2,0) k=6 vlc=1 011 ( 3)
@372 Luma lev (2,0) k=5 vlc=1 10 ( 2)
@374 Luma lev (2,0) k=4 vlc=1 011 ( 3)
@377 Luma lev (2,0) k=3 vlc=1 0011 ( 3)
@381 Luma lev (2,0) k=2 vlc=1 011 ( 3)
@384 Luma lev (2,0) k=1 vlc=1 10 ( 2)
@386 Luma lev (2,0) k=0 vlc=1 000010 ( 2)
@392 Luma totalrun (2,0) vlc=10 010 ( 2)
@395 Luma run (10,0) k=10 vlc=2 10 ( 2)
@397 Luma run (9,0) k=9 vlc=1 1 ( 1)
@398 Luma run (8,0) k=8 vlc=1 01 ( 1)
@400 Luma run (7,0) k=7 vlc=0 0 ( 0)
@401 Luma # c & tr.1s vlc=3 #c=9 #t1=3 100011 ( 35)
@407 Luma trailing ones sign (3,0) 010 ( 2)
@410 Luma lev (3,0) k=5 vlc=0 000001 ( 1)
@416 Luma lev (3,0) k=4 vlc=1 011 ( 3)
@419 Luma lev (3,0) k=3 vlc=1 0010 ( 2)
@423 Luma lev (3,0) k=2 vlc=1 0010 ( 2)
@427 Luma lev (3,0) k=1 vlc=1 11 ( 3)
@429 Luma lev (3,0) k=0 vlc=1 0010 ( 2)
@433 Luma totalrun (3,0) vlc=8 11 ( 3)
@435 Luma run (8,0) k=8 vlc=2 10 ( 2)
@437 Luma run (7,0) k=7 vlc=1 01 ( 1)
@439 Luma run (6,0) k=6 vlc=0 0 ( 0)
@440 Luma # c & tr.1s vlc=3 #c=2 #t1=0 000100 ( 4)
@446 Luma lev (2,1) k=1 vlc=0 1 ( 1)
@447 Luma lev (2,1) k=0 vlc=1 010 ( 2)
@450 Luma totalrun (2,1) vlc=1 110 ( 6)
@453 Luma run (1,1) k=1 vlc=0 0 ( 0)
@454 Luma # c & tr.1s vlc=2 #c=1 #t1=1 1110 ( 14)
@458 Luma trailing ones sign (3,1) 0 ( 0)
@459 Luma totalrun (3,1) vlc=0 010 ( 2)
@462 Luma # c & tr.1s vlc=3 #c=1 #t1=1 000001 ( 1)
@468 Luma trailing ones sign (0,2) 0 ( 0)
@469 Luma totalrun (0,2) vlc=0 011 ( 3)
@472 Luma # c & tr.1s vlc=2 #c=0 #t1=0 1111 ( 15)
@476 Luma # c & tr.1s vlc=0 #c=8 #t1=3 0000000100 ( 4)
@486 Luma trailing ones sign (0,3) 001 ( 1)
@489 Luma lev (0,3) k=4 vlc=0 000001 ( 1)
@495 Luma lev (0,3) k=3 vlc=1 011 ( 3)
@498 Luma lev (0,3) k=2 vlc=1 0010 ( 2)
@502 Luma lev (0,3) k=1 vlc=1 010 ( 2)
@505 Luma lev (0,3) k=0 vlc=1 011 ( 3)
@508 Luma totalrun (0,3) vlc=7 0001 ( 1)
@512 Luma run (7,3) k=7 vlc=0 1 ( 1)
@513 Luma run (6,3) k=6 vlc=0 0 ( 0)
@514 Luma # c & tr.1s vlc=2 #c=5 #t1=3 1010 ( 10)
@518 Luma trailing ones sign (1,3) 110 ( 6)
@521 Luma lev (1,3) k=1 vlc=0 0001 ( 1)
@525 Luma lev (1,3) k=0 vlc=1 0010 ( 2)
@529 Luma totalrun (1,3) vlc=4 011 ( 3)
@532 Luma run (4,3) k=4 vlc=6 110 ( 6)
@535 Luma run (3,3) k=3 vlc=5 000 ( 0)
@538 Luma run (2,3) k=2 vlc=4 011 ( 3)
@541 Luma run (1,3) k=1 vlc=2 10 ( 2)
@543 Luma # c & tr.1s vlc=0 #c=8 #t1=3 0000000100 ( 4)
@553 Luma trailing ones sign (2,2) 100 ( 4)
@556 Luma lev (2,2) k=4 vlc=0 0001 ( 1)
@560 Luma lev (2,2) k=3 vlc=1 11 ( 3)
@562 Luma lev (2,2) k=2 vlc=1 010 ( 2)
@565 Luma lev (2,2) k=1 vlc=1 010 ( 2)
@568 Luma lev (2,2) k=0 vlc=1 0011 ( 3)
@572 Luma totalrun (2,2) vlc=7 011 ( 3)
@575 Luma run (7,2) k=7 vlc=2 11 ( 3)
@577 Luma run (6,2) k=6 vlc=2 11 ( 3)
@579 Luma run (5,2) k=5 vlc=2 00 ( 0)
@581 Luma # c & tr.1s vlc=2 #c=7 #t1=3 1000 ( 8)
@585 Luma trailing ones sign (3,2) 100 ( 4)
@588 Luma lev (3,2) k=3 vlc=0 01 ( 1)
@590 Luma lev (3,2) k=2 vlc=1 11 ( 3)
@592 Luma lev (3,2) k=1 vlc=1 011 ( 3)
@595 Luma lev (3,2) k=0 vlc=1 010 ( 2)
@598 Luma totalrun (3,2) vlc=6 100 ( 4)
@601 Luma run (6,2) k=6 vlc=2 11 ( 3)
@603 Luma run (5,2) k=5 vlc=2 11 ( 3)
@605 Luma run (4,2) k=4 vlc=2 10 ( 2)
@607 Luma run (3,2) k=3 vlc=1 1 ( 1)
@608 Luma run (2,2) k=2 vlc=1 01 ( 1)
@610 Luma run (1,2) k=1 vlc=0 0 ( 0)
@611 Luma # c & tr.1s vlc=2 #c=9 #t1=2 0001010 ( 10)
@618 Luma trailing ones sign (2,3) 01 ( 1)
@620 Luma lev (2,3) k=6 vlc=0 1 ( 1)
@621 Luma lev (2,3) k=5 vlc=1 011 ( 3)
@624 Luma lev (2,3) k=4 vlc=1 11 ( 3)
@626 Luma lev (2,3) k=3 vlc=1 010 ( 2)
@629 Luma lev (2,3) k=2 vlc=1 00011 ( 3)
@634 Luma lev (2,3) k=1 vlc=2 101 ( 5)
@637 Luma lev (2,3) k=0 vlc=2 0110 ( 6)
@641 Luma totalrun (2,3) vlc=8 10 ( 2)
@643 Luma run (8,3) k=8 vlc=3 11 ( 3)
@645 Luma run (7,3) k=7 vlc=3 11 ( 3)
@647 Luma run (6,3) k=6 vlc=3 11 ( 3)
@649 Luma run (5,3) k=5 vlc=3 001 ( 1)
@652 Luma run (4,3) k=4 vlc=0 1 ( 1)
@653 Luma run (3,3) k=3 vlc=0 0 ( 0)
@654 Luma # c & tr.1s vlc=3 #c=6 #t1=0 010100 ( 20)
@660 Luma lev (3,3) k=5 vlc=0 1 ( 1)
@661 Luma lev (3,3) k=4 vlc=1 10 ( 2)
@663 Luma lev (3,3) k=3 vlc=1 010 ( 2)
@666 Luma lev (3,3) k=2 vlc=1 011 ( 3)
@669 Luma lev (3,3) k=1 vlc=1 11 ( 3)
@671 Luma lev (3,3) k=0 vlc=1 00010 ( 2)
@676 Luma totalrun (3,3) vlc=5 110 ( 6)
@679 Luma run (5,3) k=5 vlc=2 00 ( 0)
@681 ChrDC # c & tr.1s #c=1 #t1=0 000111 ( 7)
@687 ChrDC lev (0,0) k=0 vlc=0 001 ( 1)
@690 ChrDC totalrun (0,0) vlc=0 001 ( 1)
@693 ChrDC # c & tr.1s #c=3 #t1=1 0000011 ( 3)
@700 ChrDC trailing ones sign (0,0) 0 ( 0)
@701 ChrDC lev (0,0) k=1 vlc=0 00000001 ( 1)
@709 ChrDC lev (0,0) k=0 vlc=2 0111 ( 7)
@713 ChrDC totalrun (0,0) vlc=2 0 ( 0)
@714 ChrDC run (2,0) k=2 vlc=0 1 ( 1)
@715 ChrDC run (1,0) k=1 vlc=0 0 ( 0)
@716 ChrAC # c & tr.1s vlc=0 #c=2 #t1=2 001 ( 1)
@719 ChrAC trailing ones sign (0,4) 10 ( 2)
@721 ChrAC totalrun (0,4) vlc=1 110 ( 6)
@724 ChrAC run (1,4) k=1 vlc=0 1 ( 1)
@725 ChrAC # c & tr.1s vlc=1 #c=3 #t1=2 001001 ( 9)
@731 ChrAC trailing ones sign (1,4) 11 ( 3)
@733 ChrAC lev (1,4) k=0 vlc=0 1 ( 1)
@734 ChrAC totalrun (1,4) vlc=2 100 ( 4)
@737 ChrAC run (2,4) k=2 vlc=5 101 ( 5)
@740 ChrAC run (1,4) k=1 vlc=0 1 ( 1)
@741 ChrAC # c & tr.1s vlc=1 #c=1 #t1=1 10 ( 2)
@743 ChrAC trailing ones sign (0,5) 0 ( 0)
@744 ChrAC totalrun (0,5) vlc=0 1 ( 1)
@745 ChrAC # c & tr.1s vlc=1 #c=0 #t1=0 11 ( 3)
@747 ChrAC # c & tr.1s vlc=0 #c=7 #t1=3 000000100 ( 4)
@756 ChrAC trailing ones sign (2,4) 000 ( 0)
@759 ChrAC lev (2,4) k=3 vlc=0 1 ( 1)
@760 ChrAC lev (2,4) k=2 vlc=1 010 ( 2)
@763 ChrAC lev (2,4) k=1 vlc=1 0011 ( 3)
@767 ChrAC lev (2,4) k=0 vlc=1 10 ( 2)
@769 ChrAC totalrun (2,4) vlc=6 101 ( 5)
@772 ChrAC run (6,4) k=6 vlc=1 00 ( 0)
@774 ChrAC # c & tr.1s vlc=2 #c=3 #t1=0 001000 ( 8)
@780 ChrAC lev (3,4) k=2 vlc=0 1 ( 1)
@781 ChrAC lev (3,4) k=1 vlc=1 010 ( 2)
@784 ChrAC lev (3,4) k=0 vlc=1 0011 ( 3)
@788 ChrAC totalrun (3,4) vlc=2 100 ( 4)
@791 ChrAC run (2,4) k=2 vlc=5 101 ( 5)
@794 ChrAC run (1,4) k=1 vlc=0 1 ( 1)
@795 ChrAC # c & tr.1s vlc=2 #c=0 #t1=0 1111 ( 15)
@799 ChrAC # c & tr.1s vlc=1 #c=0 #t1=0 11 ( 3)
也可以发现确实是先解码luma再解码chromaDC,最后解码chromaAC,于是整个宏块才算解码完成。