日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scan8[16+2*4]的内容

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scan8[16+2*4]的内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

scan8確實不好理解,解答如下:

static const int x264_scan8[16+2*4] =
{

? ? /* Luma */
? ? 4+1*8, 5+1*8, 4+2*8, 5+2*8,
? ? 6+1*8, 7+1*8, 6+2*8, 7+2*8,
? ? 4+3*8, 5+3*8, 4+4*8, 5+4*8,
? ? 6+3*8, 7+3*8, 6+4*8, 7+4*8,

? ? /* Cb */
? ? 1+1*8, 2+1*8,
? ? 1+2*8, 2+2*8,

? ? /* Cr */
? ? 1+4*8, 2+4*8,
? ? 1+5*8, 2+5*8,
};


/*
? ?0 1 2 3 4 5 6 7
0
1? ? B B? ?L L L L
2? ? B B? ?L L L L
3? ?? ?? ?? ? L L L L
4? ? R R? ?L L L L
5? ? R R
*/
上面這兩個對應起來看就可以了。

?

scan8是為了便于訪問 諸如mv_cache, ref_cache, non_zero_count_cache以及mvd_cache等內存,而填充好的一個數組,里面放置的都是上述內存中特定的索引序號
比如scan8[0]=12,這個12就是上述內存中,一般針對macroblock而言的左上角數值,無論是mv,還是non_zero_count,所以只有充分搞懂上述內存結構,那么所有問題就迎刃而解了

?

?

?

attachment中是以前針對某個問題,分析后的筆記
ffmepg中,幾個比較重要的cache,大致都是按照此思路進行設置的
希望對于cache理解有幫助!

?

?

1.請問色度為什么和Luma度是同一矩陣值?
2.h->block_offset是求什么的值?
  • for(i=0; i<16; i++){??
  • ? ?? ???h->block_offset[i]= 4*((scan8[i] - scan8[0])&7) + 4*s->linesize*((scan8[i] - scan8[0])>>3);
  • ? ?? ???h->block_offset[24+i]= 4*((scan8[i] - scan8[0])&7) + 8*s->linesize*((scan8[i] - scan8[0])>>3);
  • ? ? }
  • ? ? for(i=0; i<4; i++){
  • ? ?? ???h->block_offset[16+i]=
  • ? ?? ???h->block_offset[20+i]= 4*((scan8[i] - scan8[0])&7) + 4*s->uvlinesize*((scan8[i] - scan8[0])>>3);
  • ? ?? ???h->block_offset[24+16+i]=
  • ? ?? ???h->block_offset[24+20+i]= 4*((scan8[i] - scan8[0])&7) + 8*s->uvlinesize*((scan8[i] - scan8[0])>>3);
  • ? ? }
  • 復制代碼
    1、應該是為了節約內存,同時方便在一個數組中索引同一個MB的亮色度的預測模式。不知這樣解釋是否正確,希望高人指正
    2、block_offset,看名字就知道是block的偏移量啊? ? 16+8,就更加明顯啦,16個亮度,兩個(8,各為4)色度
    ? ? 如果沒記錯的話,這個偏移應該是用在yuv像素存儲索引的

    感謝Juanny 的文檔,對于理解x264_scan8中的元素值很有幫組,這主要是一個中間的尋址矩陣,通過它可以很方便的找到MB的色度、亮度4x4塊在對應的cache,zero_count中的位置

    ?

    ?

    ?

    ?

    ?

    ?

    scan8[]實際上是4x4塊的掃描順序及存儲的位置,把scan8放在8x8的矩陣中就能看出其作用了,其中T表示當前塊的上面的塊,L表示當前塊左邊的塊,它們是用來預測當前塊的幀內預測模式(Intra prediction mode)和運動向量之類的,起到一個緩存的作用??梢钥吹竭@種設計比JM節約內存,而且非常巧妙。程序中的其他緩存設計都與此類似。

    ?

    ?

    ?

    ?

    ?

    T

    ?

    ?

    T

    ?

    ?

    ?

    ?

    ?

    T

    ?

    ?

    T

    ?

    ?

    T

    ?

    ?

    T

    ?

    ?

    L

    ?

    ?

    16

    ?

    ?

    17

    ?

    ?

    L

    ?

    ?

    0

    ?

    ?

    1

    ?

    ?

    4

    ?

    ?

    5

    ?

    ?

    L

    ?

    ?

    18

    ?

    ?

    19

    ?

    ?

    L

    ?

    ?

    2

    ?

    ?

    3

    ?

    ?

    6

    ?

    ?

    7

    ?

    ?

    ?

    ?

    ?

    T

    ?

    ?

    T

    ?

    ?

    L

    ?

    ?

    8

    ?

    ?

    9

    ?

    ?

    12

    ?

    ?

    13

    ?

    ?

    L

    ?

    ?

    20

    ?

    ?

    21

    ?

    ?

    L

    ?

    ?

    10

    ?

    ?

    11

    ?

    ?

    14

    ?

    ?

    15

    ?

    ?

    L

    ?

    ?

    22

    ?

    ?

    23

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的scan8[16+2*4]的内容的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。