Download presentation
Presentation is loading. Please wait.
1
Introduction to Multimedia Coding
Project 2 – JMVC Code Tracing Speaker: Chung-Lun Lu (逯仲倫) (Group 1, Block1) Date: May 18, 2011 Location: NTHU Chung-Lun Lu Graduate Student Artificial Intelligence Lab Dept. of Computer Science National Tsing Hua University, Taiwan, R.O.C.
2
Group 1 2
3
Group 1 逯仲倫 資工系碩士班 1 邱檉文 資工系碩士班 2 張雅婷 資工系碩士班 3 林柏辰 資工系碩士班 4 吳佩穎 資工系碩士班 5 紀新鴻 資工系四年級梅班 6 3
4
Group 1 1 2 main H264AVC EncoderTest::go CreaterH264AVC
逯仲倫 資工系碩士班 邱檉文 main H264AVC EncoderTest::go CreaterH264AVC Encoder::process MbEncoder ::encodeMacroblock EbCoder ::encode PicEncoder ::process PicEncoder ::xEncodePicture SliceEncoder ::encodeSlice 4
5
Block 1 5
6
Functions Functions 1 2 3 4 5 6 7 8 main (H264AVCEncoderLibTest.cpp)
H264AVCEncoderTest::init 3 EncoderCodingParameter::init (重點放在-vf) 4 EncoderCodingParameter::xReadFromFile (重點放在MVC相關參數) 5 H264AVCEncoderTest::xWrite (ExtBinDataAccessorList&, UInt&) 6 H264AVCEncoderTest::xWrite (PicBufferList&, UInt) 7 WriteYuvToFile::writeFrame 8 WriteYuvToFile::xwriteFrame 6
7
(H264AVCEncoderLibTest.cpp)
Functions main (H264AVCEncoderLibTest.cpp) H264AVCEncoderTest ::init EncoderCodingParameter ::init EncoderCodingParameter ::xReadFromFile H264AVCEncoderTest ::go H264AVCEncoder::xWrite (ExtBinDataAccessorList&, UInt&) H264AVCEncoder::xWrite (PicBufferList&, UInt) WriteYuvToFile ::writeFrame WriteYuvToFile ::xWriteFrame 7
8
main (H264AVCEncoderLibTest.cpp)
Function 1 main (H264AVCEncoderLibTest.cpp) 主導 Encoder 內其他函式的流程 create 初始化 執行 encoder destroy 8
9
main (H264AVCEncoderLibTest.cpp)
Function 1 main (H264AVCEncoderLibTest.cpp) 主導 Encoder 內其他函式的流程 create 初始化 執行 encoder destroy Start timer Print JMVC encoder version 宣告一個 H264AVCEncoderTest的變數 Start Create H264AVCEncoderTest Initial H264AVCEncoderTest Function 2 H264AVCEncoderTest::init Execute encoder Destroy H264AVCEncoderTest Stop timer Compute the time difference Print the time difference End 9
10
H264AVCEncoderTest::init
Function 2 H264AVCEncoderTest::init Function 3 EncoderCodingParameter::init 配置空間與初始化相關參數 呼叫其他函式來讀取 command line 與 parameter file 的參數 呼叫EncoderCodingParameter::init來讀入encoder參數 配置空間給encoder參數 Start 輸入的參數 格式是否正確? 呼叫printHelpMVC( )印出訊息提醒user正確的輸入格式 No 配置空間給之後要 寫入輸出檔的yuv data Yes 配置空間給要讀入 程式編碼的yuv data 初始化 read yuv data 的相關參數 初始化bitstream writer 配置空間給encoder 設定NAL unit的start code 設定entended NAL unit的priority End (Err::m_nOK) 函式正確結束 10
11
H264AVCEncoderTest::init
Function 2 H264AVCEncoderTest::init 配置空間與初始化相關參數 呼叫其他函式來讀取 command line 與 parameter file 的參數 11
12
EncoderCodingParameter::init (重點放在-vf)
Function 3 EncoderCodingParameter::init (重點放在-vf) 讀入 user 在 command line 給定的參數資料 根據 user 輸入的 command 去執行相對應的函式或設定相對應的參數 設定一個指標指到輸入 的參數字串第一個字元 Start 比對讀入的參數 是否有match到相關的 參數設定? 比對讀入的 參數是否有-h這個 參數設定? No update指標 End (Err::m_nErr) 函式不正常結束 No Yes executes/sets their corresponding functions/parameters Yes 印出訊息提示user 相關的參數如何設定 Yes End (Err::m_nOK) 函式正確結束 是否還有尚未比對 的參數設定? No 是否在MVC mode 下並採用PDS? 配置空間給 PDS相關變數 並給定初始值 Yes 呼叫check()檢查 user輸入的參數 是否符合該參數的值域 No 12
13
EncoderCodingParameter::init (重點放在-vf)
Function 3 EncoderCodingParameter::init (重點放在-vf) 讀入 user 在 command line 給定的參數資料 根據 user 輸入的 command 去執行相對應的函式或設定相對應的參數 13
14
EncoderCodingParameter::init (重點放在-vf)
Function 3 EncoderCodingParameter::init (重點放在-vf) 比對到參數有 -vf 這個參數設定 將 parameter file 名稱和 view id 讀入 command 輸入格式如下:%s -vf <encoder.cfg> <view_id> 比對讀入的參數是否 有-vf這個參數設定? -vf後面讀到的第一個參數寫入 儲存parameter filename的變數 Yes update指標 update指標後面讀到的第一個 參數寫入儲存view id的變數 從parameter file 讀入參數設定 Function 4 EncoderCodingParameter::xReadFromFile 14
15
EncoderCodingParameter::xReadFromFile (重點放在MVC相關參數)
Function 4 EncoderCodingParameter::xReadFromFile (重點放在MVC相關參數) 讀入 user 在參數設定檔給定的參數資料 根據參數設定檔的設定去執行相對應的函式或設定相對應的參數 是否讀到參數 設定檔案結尾? Yes Start 開啟參數設定檔案 讀取參數設定檔案一行 給定大部分參數default值 給定default值的參數 中是否有在參數設定檔案中給定設定值? No 將設定值取代default值 Yes 比對讀入的參數 是否有match到其他相關的參數設定? No No Yes 根據參數設定檔的 設定值設定相關參數 15
16
EncoderCodingParameter::xReadFromFile (重點放在MVC相關參數)
Function 4 EncoderCodingParameter::xReadFromFile (重點放在MVC相關參數) 讀入 user 在參數設定檔給定的參數資料 根據參數設定檔的設定去執行相對應的函式或設定相對應的參數 如果有使用multiview acquisition information SEI message,讀入multiview acquisition information的設定檔 檢查每個要編碼的view是否都有在參數設定檔中設定相關的參數 如果在參數設定檔中沒有設定level參數,給定相關的level參數default值 如果使用MVC mode,使用函式xAppendStringWithNO()將程式input和output的yuv檔案名稱及264檔案名稱組合出來,並設定input和output的yuv檔案名稱及frame的長寬 釋放在函式一開始給定大部分參數default值時所用的陣列的空間 印出list 0與list 1的references 相關設定值 關閉參數 設定檔案 End (Err::m_nOK) 函式正確結束 16
17
H264AVCEncoderTest::xWrite (ExtBinDataAccessorList&, UInt&)
Function 5 H264AVCEncoderTest::xWrite (ExtBinDataAccessorList&, UInt&) 將 NAL unit 加上 start code 區隔後寫入輸出檔中 Start code of the NAL unit is 0x0001 Start 存放 NAL unit 的 list 還有資訊在內? End (Err::m_nOK) 函式正確結束 No ruiBytesInFrame += list中第一個NAL unit 的size加上4 Yes 將start code 寫到輸出檔中 將NAL unit寫 到輸出檔中 把list中第一筆的 NAL unit資料清掉 17
18
H264AVCEncoderTest::xWrite (PicBufferList&, UInt)
Function 6 H264AVCEncoderTest::xWrite (PicBufferList&, UInt) 將 reconstructed 的 picture 寫入輸出檔中 呼叫 WriteYuvToFile::writeFrame 和 xwriteFrame Start 存放picture資訊的 list還有資訊在內? End (Err::m_nOK) 函式正確結束 No 把list中第一筆資料 pop出來並存放在buffer中 Yes 將buffer的起始位置存放在指標Pel 藉由加上luminance、Cb、Cr的offset 把指標指向相對應的資料存放位置 將luminance、Cb、Cr的資料存放位置 和影像長寬等資訊寫到輸出檔中 Function 7 WriteYuvToFile::writeFrame 18
19
WriteYuvToFile::writeFrame
Function 7 Image Padding image width stride WriteYuvToFile::writeFrame 考慮 Padding 問題 stride = image width + padding bytes Function 8 WriteYuvToFile::xWriteFrame 考慮padding問題後,把pLum、pCb、pCr指標移到padding後的位置 考慮padding問題後, 更新luminance的長寬 Start 呼叫xWriteFrame將luminance、 Cb、Cr資訊寫入輸出檔案 End (Err::m_nOK) 函式正確結束 19
20
WriteYuvToFile::xwriteFrame
Function 8 WriteYuvToFile::xwriteFrame 把 luminance 和 Cb、Cr 資訊寫到輸出檔案中 Start 設定一個指標pucSrc 將luminance的stride、長寬除以2 將pucSrc指到 Cr資訊的位置 No No 將pucSrc指到luminance資訊的位置 將pucSrc指到 Cb資訊的位置 寫入Cr資訊 到輸出檔案 寫入luminance 資訊到輸出檔案 寫入Cb資訊 到輸出檔案 還有Cr資訊 尚未寫入? No 還有luminance資訊尚未寫入? 還有Cb資訊 尚未寫入? Yes 移動pucSrc到下一個Cr資訊的位置 Yes 移動pucSrc到下一個luminance資訊的位置 移動pucSrc到下一個Cb資訊的位置 Yes End (Err::m_nOK) 函式正確結束 20
21
Thank you for your attention!
21
22
Block 6 22
23
Functions Functions 1 CreaterH264AVCEncoder::writeParameterSets 2 CreaterH264AVCEncoder::writePDSSEIMessage 3 CreaterH264AVCEncoder::writeMultiviewSceneInfoSEIMessage 4 CreaterH264AVCEncoder::writeMultiviewAcquisitionInfoSEIMessage 5 CreaterH264AVCEncoder::writeNestingSEIMessage 23
Similar presentations