Presentation is loading. Please wait.

Presentation is loading. Please wait.

Group 2 Block 6 9962629 胡貴蓉 Project 2 JMVC code tracing.

Similar presentations


Presentation on theme: "Group 2 Block 6 9962629 胡貴蓉 Project 2 JMVC code tracing."— Presentation transcript:

1 Group 2 Block 6 9962629 胡貴蓉 Project 2 JMVC code tracing

2 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

3 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

4 RecPicBuffer::xClearOutputAll(1) Input: PicBufferList& rcOutputList, PicBufferList& rcUnusedList Output: Err::m_nOK; 程式碼說明 1. create output list 建立一個 PicBufUnitList:cOutputList 逐一檢查 m_cUsedRecPicBufNuitList 裡的 picture 是否 (1) 已被 output (2) 正存在著 其中一個不成立的話,將此 picture push back 到 cOutputList 此 picture 的 POC( 小 / 大 ) 於目前最 ( 小 / 大 ) 的 POC 的話,更新 (iMinPoc/iMaxPoc) 的值

5 RecPicBuffer::xClearOutputAll(2) 2. real output for( Int iPoc = iMinPoc; iPoc <= iMaxPoc; iPoc++ ) { for( ; iter != end; iter++ ) { if( (*iter)->getPoc() == iPoc ) { 從 cOutputList 中移除目前的 frame Output: 將此 frame push back 到 rcOutputList 和 rcUnusedList Break; // 每個 POC 只有一個 picture } cOutputList 中最 ( 小 / 大 ) 的 POC 逐一檢查 cOutputList 的 POC ,若 目前檢查到的 frame 的 POC 值一 樣,運行 if 條件式裡面的事情 清空 cOutputList

6 RecPicBuffer::xClearOutputAll(3) 3. uninit all elements and move to free list 當 m_cUsedRecPicBufUnitList 不為空, pop front 端的 frame 將其 push back 到 m_cFreeRecPicBufUnitList Return Err::m_nOK;

7 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

8 RecPicBuffer:: xUpdateMemory Input: SliceHeader* pcSliceHeader Output: Err::m_nOK 程式碼說明 ROTRS( pcSliceHeader && pcSliceHeader-> getNalRefIdc() == NAL_REF_IDC_PRIORITY_LOWEST, Err::m_nOK ); if( pcSliceHeader && pcSliceHeader->getAdaptiveRefPicBufferingFlag() ) { RNOK( xMMCO( pcSliceHeader ) ); } else { RNOK( xSlidingWindow() ); } xClearBuffer() → remove non-output / non-ref pictures Return Err::m_nOK 如果 ((pcSliceHeader 不等 於 0) AND (pcSliceHeader 所 參考的 NAL 之優先權是最 低的, 為 0)) 的話,終止此 function 如果 ((pcSliceHeader 不等於 0) AND (pcSliceHeader 是 Adaptive Reference Picture Buffer Mode) ) , True: 執行 MMCO(Memory Management and Control Operations); False: 執行 SlidingWindow look for last ref frame that shall be removed

9 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

10 RecPicBuffer::xOutput Input: PicBufferList& rcOutputList, PicBufferList& rcUnusedList Output: Err::m_nOK 程式碼說明 1. m_cFreeRecPicBufUnitList 一開始要是空的,要不然程序終 止 2. 找出 m_cUsedRecPicBufUnitList 中 smallest non-ref/output poc value 3. copy 所有 output element 到暫時的 list cOutputList 4. real output 5. clear buffer : xClearBuffer() m_cUsedRecPicBufUnitList 的 frame 被 pusk back 到 m_cFreeRecPicBufUnitList 6. check m_cFreeRecPicBufUnitList 不應該是 empty

11 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

12 程式碼說明 印出 RECONSTRUCTED PICTURE BUFFER 。 印出每個 picture 的 POS 、 FN 、 ViewId 及 Poc ,並判斷此 frame 是否為 outputted 或 not existing 。

13 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

14 RecPicBuffer:: xStorePicture Input: RecPicBufUnit* pcRecPicBufUnit, PicBufferList& rcOutputList, PicBufferList& rcUnusedList, SliceHeader* pcSliceHeader, Bool bTreatAsIdr Output: Err::m_nOK 程式碼說明 判斷 UsedRecPicBufUnitList 是否滿了 ? Yes: (1) xClearOutputAll( rcOutputList, rcUnusedList ) (2) 將 pcRecPicBufUnit push back 到 m_cUsedRecPicBufUnitList No: (1) 將 pcRecPicBufUnit push back 到 m_cUsedRecPicBufUnitList (2) 如果 m_bInterViewRef 為 true ,呼叫 xUpdateMemory( pcSliceHeader ) (3) xOutput( rcOutputList, rcUnusedList ) xDumpRecPicBuffer()

15 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

16 RecPicBuffer:: store Input: RecPicBufUnit* pcRecPicBufUnit, SliceHeader* pcSliceHeader, PicBufferList& rcOutputList, PicBufferList& rcUnusedList, MultiviewReferenceDirection refDirection Output Err::m_nOK 程式碼說明 xStorePicture( pcRecPicBufUnit, rcOutputList, rcUnusedList, pcSliceHeader, pcSliceHeader- >isIdrNalUnit() ) 如果 ((NAL 的優先權不是最低 ) AND (refDirection == NOT_MULTIVIEW) ) => m_uiLastRefFrameNum = pcRecPicBufUnit->getFrameNum(); return Err::m_nOK; Do not update this for multiview references because multiview references will be pulled out immediately after encoding. Also, the frame numbers for multiview references are not very meaningful and errors will result if you put them. 將 pcRecPicBufUnit 的 picture 之 Frame Number 值回傳給 m_uiLastRefFrameNum

17 Function 架構圖 PicEncoder:: process RecPicBuffer:: store PicEncoder :: xGetNextFrameSpec RecPicBuffer:: xStorePicture RecPicBuffer:: xClearOutputAll RecPicBuffer:: xUpdateMemory PicEncoder :: xUpdateFrameSepNextGOP PicEncoder:: xUpdateFrameSepNextGOPFinish RecPicBuffer:: xOutput RecPicBuffer:: xDumpRecPicBuffer

18 PicEncoder :: xGetNextFrameSpec 程式碼說明 : 取得 GOP 下一個 frame 的規格 (new configuration file) 1.key pic (I frame) is coded ,如果 m_uiProcessingPocInGOP 等於 0 ,分以下不同 case 的 GOP 來取得下一個 frame 的 spec 當 GOP 是 complete 且 GOP 的 size 等於 12 或 15 GOP 的 size 是 2 n 或為 uncompleted GOP 2. at the end of a complete GOP for hoerarchical B if( m_uiProcessingPocInGOP == (1<<m_uiMaxTL) -1 && m_uiProcessingPocInGOP!=m_uiGOPSize) { xUpdateFrameSepNextGOP(); m_uiProcessingPocInGOP=0; return xGetNextFrameSpec(); } if( m_uiGOPSize == 1) { xUpdateFrameSepNextGOP(); m_uiProcessingPocInGOP=0; return xGetNextFrameSpec(); }

19 PicEncoder :: xGetNextFrameSpec 3. at the end of a complete special GOP if(m_bSpecialGOP && m_acFrameSpecification [m_uiProcessingPocInGOP].getTemporalLayer()==m_uiMaxTL && m_uiProcessingPocInGOP + 2 >=m_uiGOPSizeReal ) { xUpdateFrameSepNextGOP(); m_uiProcessingPocInGOP=0; return xGetNextFrameSpec(); } 4. other case: for hierarchical B and the uncompleted GOP if(!m_bSpecialGOP || m_uiGOPSizeReal > m_uiGOPSize ) {…} 5. for the complete special GOP Else {...}

20 Thank you !


Download ppt "Group 2 Block 6 9962629 胡貴蓉 Project 2 JMVC code tracing."

Similar presentations


Ads by Google