JSVM代码阅读笔记Word文档下载推荐.docx
- 文档编号:20910725
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:54
- 大小:46.81KB
JSVM代码阅读笔记Word文档下载推荐.docx
《JSVM代码阅读笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JSVM代码阅读笔记Word文档下载推荐.docx(54页珍藏版)》请在冰豆网上搜索。
//读取每一层的配置文件读到如下类中
//EncoderCodingParameter:
LayerParametersm_acLayerParameters[n]
xReadLayerFromFile(acLayerConfigName[ui],getLayerParameters(ui))
//打开配置文件layerX.cfg
//分配空间并初始化参数m_pLayerLines[],也是CodingParameter成员
//读取配置文件每行,并更新对应m_pLayerLines的值
//初始化ScalingList
xReadScalMat()
//设置输入输出文件路径
rcLayer.setInputFilename((Char*)cInputFilename.c_str());
rcLayer.setOutputFilename((Char*)cOutputFilename.c_str());
//初始化每个LayerParameters:
ResizeParametersm_cResizeParameters
//读取SliceGroup的配置文件
xReadSliceGroupCfg(rcLayer)
//读取ROI配置文件
xReadROICfg(rcLayer)
//关闭配置文件
//设置CGS/MGS的Dependency_Id和Quality_id
//由BaseLayer更新当前Layer的ResizeParameter----------ESS
//对每一层rcLayer=m_pcEncoderCodingParameter->
getLayerParameters(uiLayer);
//创建并打开重建输出文件
WriteYuvToFile:
create(m_apcWriteYuv[uiLayer])
m_apcWriteYuv[uiLayer]->
init(rcLayer.getOutputFilename())
//创建并打开读入的视频文件
ReadYuvFile:
create(m_apcReadYuv[uiLayer])
m_apcReadYuv[uiLayer]->
//创建并打开码流文件
WriteBitstreamToFile:
create(m_pcWriteBitstreamToFile)
m_pcWriteBitstreamToFile->
init(m_cEncoderIoParameter.cBitstreamFilename)
注意:
以上三个文件都是H264AVCEncoderTest类的成员
WriteBitstreamToFile*m_pcWriteBitstreamToFile;
WriteYuvToFile*m_apcWriteYuv[MAX_LAYERS];
ReadYuvFile*m_apcReadYuv[MAX_LAYERS];
也用到了辅助IO的成员
EncoderIoParameterm_cEncoderIoParameter;
//给编码器分配空间:
它是H264AVCEncoderTest*pcH264AVCEncoderTest的成员
h264:
CreaterH264AVCEncoder:
create(m_pcH264AVCEncoder)
ParameterSetMng:
create(m_pcParameterSetMng)
BitWriteBuffer:
create(m_pcBitWriteBuffer)
BitCounter:
create(m_pcBitCounter)
NalUnitEncoder:
create(m_pcNalUnitEncoder)
SliceEncoder:
create(m_pcSliceEncoder)
UvlcWriter:
create(m_pcUvlcWriter)
create(m_pcUvlcTester,false)
CabacWriter:
create(m_pcCabacWriter)
MbCoder:
create(m_pcMbCoder)
MbEncoder:
create(m_pcMbEncoder)
LoopFilter:
create(m_pcLoopFilter)
IntraPredictionSearch:
create(m_pcIntraPrediction)
MotionEstimationQuarterPel:
create(m_pcMotionEstimation)
H264AVCEncoder:
create(m_pcH264AVCEncoder)
ControlMngH264AVCEncoder:
create(m_pcControlMng)
ReconstructionBypass:
create(m_pcReconstructionBypass)
QuarterPelFilter:
create(m_pcQuarterPelFilter)
Transform:
create(m_pcTransform)
SampleWeighting:
create(m_pcSampleWeighting)
XDistortion:
create(m_pcXDistortion)
PicEncoder:
create(m_pcPicEncoder)
//每一层的编码器
for(UIntuiLayer=0;
uiLayer<
MAX_LAYERS;
uiLayer++)
{
LayerEncoder:
create(m_apcLayerEncoder[uiLayer])
PocCalculator:
create(m_apcPocCalculator[uiLayer])
YuvBufferCtrl:
create(m_apcYuvFullPelBufferCtrl[uiLayer])
create(m_apcYuvHalfPelBufferCtrl[uiLayer])
}
//设置NALUNIT起始码m_aucStartCodeBuffer[],绑定到H264AVCEncoderTest:
BinDatam_cBinDataStartCode;
//进行编码
pcH264AVCEncoderTest->
go()
//初始化编码器参数h264:
CreaterH264AVCEncoder*m_pcH264AVCEncoder;
H264AVCEncoderTest成员
m_pcH264AVCEncoder->
init(m_pcEncoderCodingParameter)
/*
几个参数关系
1.H264AVCEncoderTest的成员CreaterH264AVCEncoder*m_pcH264AVCEncoder调用init
2.初始化H264AVCEncoderTest的成员EncoderCodingParameter*m_pcEncoderCodingParameter
3.而CreaterH264AVCEncoder的成员CodingParameter*m_pcCodingParameter
被赋值传入的参数m_pcEncoderCodingParameter
*/
RateDistortion:
create(m_pcRateDistortion)//给率失真计算类分配空间RateDistortion
m_pcBitWriteBuffer->
init()//初始化写Packet/比特流的类BitWriteBuffer
m_pcBitCounter->
init()//初始化计算比特数类BitCounter
m_pcXDistortion->
init()//初始化计算失真所需的参数(块行数/列数/Dist计算函数指针)XDistortion
m_pcSampleWeighting->
init()//初始化加权函数SampleWeighting
//初始化写NalUnit的类NalUnitEncoder
m_pcNalUnitEncoder->
init(m_pcBitWriteBuffer,m_pcUvlcWriter,m_pcUvlcTester)
m_pcUvlcWriter->
init(m_pcBitWriteBuffer)//关联比特流缓存和写Uvlc的类UvlcWriter
m_pcUvlcTester->
init(m_pcBitCounter)//关联比特计数和写Uvlc的类UvlcWriter
m_pcCabacWriter->
init(m_pcBitWriteBuffer)//初始化Cabac的缓存CabacWriterCabacEncoder
m_pcParameterSetMng->
init()//空函数
m_pcSliceEncoder->
init()//关联MbEncoder、MbCoder、ControlMngH264AVCEncoder、CodingParameter、
PocCalculator和Transform给Slice编码器SliceEncoder
m_pcReconstructionBypass->
init()//空函数
m_pcLoopFilter->
init(m_pcControlMng,m_pcReconstructionBypass,true)//关联ControlMngH264AVCEncoder和
ReconstructionBypass给去块滤波器LoopFilter
m_pcQuarterPelFilter->
init()//分配1/4像素插值滤波器QuarterPelFilter
m_pcMbEncoder->
init()//关联Transform、IntraPredictionSearch、MotionEstimation、CodingParameter、
RateDistortion和XDistortion给宏块编码器MbEncoder
m_pcMotionEstimation->
init()MotionEstimation
MotionCompensation:
init()//初始化MC相关—1/4插值滤波、变换、加权
//设置计算失真、MV搜索参数
MotionEstimationCost:
xInit()//设置RD相关
//设置跟搜索范围搜索深度有关参数
//spiralsearch参数
m_pcControlMng->
init()//分配上面所有的编码过程类到ControlMngH264AVCEncoder类中,集中管理
//包括每层的LayerEncoder、PocCalculator和YuvBufferCtrl
m_pcPicEncoder->
init()//初始化AVC编码器
m_pcH264AVCEncoder->
init()//初始化SVC编码器分配LayerEncoder、ParameterSetMng、PocCalculator、
//NalUnitEncoder、ControlMngIf和CodingParameter
//初始化LayerEncoder*m_apcLayerEncoder[MAX_LAYERS]
和AccessUnitDataListm_cAccessUnitDataList;
H264AVCEncoder
//对每层
m_apcLayerEncoder[uiLayer]->
init()//初始化每层编码所需的参数
//把配置文件读入的参数LayerParameter复制过来
xInitCodingOrder()//初始化编码顺序和分层的对应关系
//初始化如ESS、LARDO等参数
//计算每层采用LARDO的情况
//RateControl相关初始化,与GOP有关
//写SPS和PPS
参数:
UCharaucParameterSetBuffer[1000]作为缓存
BinDatacBinData绑定上面的缓存
ExtBinDataAccessorcExtBinDataAccessor操纵上面的cBinData
writeParameterSets(&
cExtBinDataAccessor,pcAVCSPS,bMoreSets)CreaterH264AVCEncoder
m_pcH264AVCEncoder->
writeParameterSets(pcExtBinDataAccessor,rpcAVCSPS,rbMoreSets)H264AVCEncoder
//如果是第一次调用
xInitParameterSets()
//对每一层
//设置基本参数
SequenceParameterSet:
create(pcSPS)//分配SPS空间
PictureParameterSet:
create(pcPPS)//分配PPS空间
//设置SPS和PPS的ID和NalUnitType
ParameterSetMng*m_pcParameterSetMng有成员
StatBuf<
SequenceParameterSet*,2*NUM_SPS_IDS>
m_cSPSBuf;
当前对应SPS_ID的SPS
PictureParameterSet*,256>
m_cPPSBuf;
当前对应PPS_ID的PPS
std:
list<
SequenceParameterSet*>
m_cSPSList;
历史上的SPS存在此(和当前SPS_ID重合的)
PictureParameterSet*>
m_cPPSList;
历史上的PPS存在此和当前PPS_ID重合的)
调用store()函数将(按ID)
PPS=>
m_cPPSBuf而从m_cPPSBuf取出的PPS=>
m_cPPSList
SPS=>
m_cSPSBuf而从m_cSPSBuf取出的SPS=>
m_cSPSList
m_pcParameterSetMng->
store(pcPPS)
m_pcParameterSetMng->
store(pcSPS)
设置m_auiActiveSPSId[uiDQId]=SPS_ID
每个QualityLayer都有一个m_auiActiveSPSId[uiDQId]
setActiveSPS(pcSPS->
getSeqParameterSetId(),uiDQId+ui);
//设置SPS的内容
//设置subsetSPS的内容
//设置PPS内容
//初始化每层与帧分辨率有关的参数
initParameterSets(*pcSPS,*pcPPS)ControlMngH264AVCEncoder
m_apcYuvFullPelBufferCtrl[uiLayer]->
initSPS(uiAllocY,uiAllocX,YUV_Y_MARGIN,YUV_X_MARGIN)
m_apcYuvHalfPelBufferCtrl[uiLayer]->
initSPS(uiAllocY,uiAllocX,YUV_Y_MARGIN,YUV_X_MARGIN,1)
m_apcLayerEncoder[uiLayer]->
initParameterSets(rcSPS,rcPPS)
//从ParameterSetMng类中的SPS和PPS缓存m_cSPSBuf和m_cPPSBuf读取并保存到
//std:
m_cUnWrittenSPS和std:
m_cUnWrittenPPS;
setParamterSetList(m_cUnWrittenSPS,m_cUnWrittenPPS)
//写SEI相关信息
//m_cUnWrittenSPS和m_cUnWrittenPPS非空,则
m_pcNalUnitEncoder->
initNalUnit(pcExtBinDataAccessor)//初始化写Nalunit的类
m_pcBitWriteBuffer->
initPacket((UInt*)(m_pucTempBuffer),m_uiPacketLength-1)//初始化写比特流的类
//读取SPS/PPS
write(rcSPS)
rcSPS.write(m_pcHeaderSymbolWriteIf)//由m_pcHeaderSymbolWriteIf写NalUnit
closeNalUnit(uiBits)
xWriteTrailingBits()//写1000…补齐
flushBuffer()//把拖尾等最后的数据写入并计算bit
convertRBSPToPayload(…)//加上0x03
m_pcWriteBitstreamToFile->
writePacket(&
m_cBinDataStartCode)//先写starcode0x00000001区分NALUNIT
cExtBinDataAccessor)//再写实际NAL内容
//计算每层图像宽高、Crop信息和luma与chroma的Offset等
//对每个Frame==============================START===============================
//对每一层XXXXXXXXXXXXXXXSTART
本函数的重要参数:
在H264AVCEndoderTest:
go()函数里
PicBuffer*apcOriginalPicBuffer[MAX_LAYERS];
//原始图像list
PicBuffer*apcReconstructPicBuffer[MAX_LAYERS];
//重建图像list
PicBufferListacPicBufferOutputList[MAX_LAYERS];
//输出图像list
PicBufferListacPicBufferUnusedList[MAX_LAYERS];
ExtBinDataAccessorListcOutExtBinDataAccessorList;
//输出NalUnit的list
//从PicBufferListm_acUnusedPicBufferList[MAX_LAYERS]中弹出一个PicBuffer
//并存入PicBufferListm_acActivePicBufferList[MAX_LAYERS];
xGetNewPicBuffer(apcReconstructPicBuffer[uiLayer],uiLayer,auiPicSize[uiLayer])//重建帧
xGetNewPicBuffer(apcOriginalPicBuffer[uiLayer],uiLayer,auiPicSize[uiLayer])//原始帧
readFrame(…)//读取一帧到apcOriginalPicBuffer[uiLayer]
XXXXXXXXXXXXXXXEND
//处理一帧,所有Layer都处理,数据写入cOutExtBinDataAccessorListCreaterH264AVCEncoder调用
process(cOutExtBinDataAccessorList,apcOriginalPicBuffer,
apcReconstructPicBuffer,acPicBufferOutputList,acPicBufferUnusedList)
m_pcH264AVCEncoder->
process(rcExtBinDataAccessorList,H264AV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSVM 代码 阅读 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)