單個NAL單元的處理

  下面貼出安卓N版本AAVCAssembler::addSingleNALUnit函數對單個NAL單元的處理:
  

void AAVCAssembler::addSingleNALUnit(const sp<ABuffer> &buffer) {
    ALOGV("addSingleNALUnit of size %zu", buffer->size());
#if !LOG_NDEBUG
    hexdump(buffer->data(), buffer->size());
#endif
   //該buffer是單個NAL單元
   //獲取該單個NAL單元標識的時間戳
    uint32_t rtpTime;
    CHECK(buffer->meta()->findInt32("rtp-time", (int32_t *)&rtpTime));
   
   //mAccessUnitRTPTime變量是標識具有相同時間戳的單個NAL單元是屬於同一幀數據
   //如果正在被處理的這個單個NAL單元被標識的時間戳和當前的mAccessUnitRTPTime變量值不相同
   //說明該單個NAL單元是不和mNALUnits裏的NAL單元屬於同一幀的數據的,調用submitAccessUnit()
   //對mNALUnits裏的NAL單元進行處理,大致的處理過程就是將mNALUnits組裝成一個完整的一幀數據
   //然後發送出去
    if (!mNALUnits.empty() && rtpTime != mAccessUnitRTPTime) {
        submitAccessUnit();
    }

   //替換mAccessUnitRTPTime的值,收集下一幀數據的NAL單元
    mAccessUnitRTPTime = rtpTime;

    //將該NAL單元收集到mNALUnits容器裏
    mNALUnits.push_back(buffer);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章