2009年9月20日 星期日

h264 in ffmpeg deblocking filter survey

之前我已經確定說ffmpeg是以一個一個macroblock的形式去作inverse transform,prediction及deblocking filter
雖然說這跟standard寫得順序似乎有點出入
standard中寫是順序是要decode完一個完整frame的時候  才會一口氣做完deblocking filter
這裡就浮現了一個問題 就是每個macroblock都有可能會作intra prediction的動作(好 standard中寫只有I跟SI picture)
那在decode現在的macroblock會需要附近已經decode出來的macroblcok
那這些macroblock究竟是已經做完deblock filter還是還沒有做的勒
我看了standard發現這些時還沒有進行deblocking filter的macroblock 
這時候就會發現ffmpeg的h.264的code一定有在這個地方動手腳  可能是將還沒deblocking的macroblock不知道存在哪裡
不然要怎麼reference 不過這裡我之後再看

接下來我在看standrad中luma在boundary filtering strength小於4的時候的function
基本上做的事是跟h264_loop_filter_luma_c一樣 但是裡面的判斷式 跟standard中寫得並沒有完全一樣
我想一定是因為ffmpeg為了加速改寫了一大堆的東西  不過還好的是ffmpeg中的變數名稱還認得出來
不過看的話可能要在花點時間
還有就是小記一下h264_loop_filter_luma_c是一次處理16條6個byte的內容

另外我有沿者filter_mb來開始看code
發現其實要看的code其實沒有很多 有很多部份是跟mbaff 就查一下這是什麼吧
這好像是有field的時候才會需要的東西 去除掉這些東西的話
其實要看的code就沒這麼多了

沒有留言:

張貼留言