sps及pps在解码器内传递过程
首先解碼器中有一個全局變量seq_parameter_set_rbsp_t SeqParSet[MAXSPS];
//++ MAXSPS=32,它是一個指向序列參數(shù)集的數(shù)組。
還有一個全局變量seq_parameter_set_rbsp_t *active_sps;主要為后續(xù)解碼所用。
解碼器先將碼流中的數(shù)據(jù)讀入臨時指針sps,之后存入全局變量數(shù)組SeqParSet,最后需要使用這些參數(shù)時,將SeqParSet中的數(shù)據(jù)讀入active_sps,同理pps。
整個過程如下:
case NALU_TYPE_SPS:
//NALU_TYPE_SPS=7,對應(yīng)C=0,第一個解碼
ProcessSPS(nalu);
void ProcessSPS (NALU_t *nalu)
{
…………
seq_parameter_set_rbsp_t *sps = AllocSPS(); //++ 返回值為指向序列參數(shù)集的指針
…………
dummy = InterpretSPS (dp, sps); //在此函數(shù)里將碼流中的句法元素讀入sps
…………
MakeSPSavailable (sps->seq_parameter_set_id, sps);
}
void MakeSPSavailable (int id, seq_parameter_set_rbsp_t *sps)
{
assert (sps->Valid == TRUE);
memcpy (&SeqParSet[id], sps, sizeof (seq_parameter_set_rbsp_t));
//hainei_10_3_15_將讀入的sps存入全局變量數(shù)組SeqParSet,以備后用
}
UseParameterSet (currSlice->pic_parameter_set_id);
{
…………
sps =
&SeqParSet[PicParSet[PicParsetId].seq_parameter_set_id];
…………
activate_sps(sps);
…………
}//此函數(shù)在解碼IDR內(nèi)有調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的sps及pps在解码器内传递过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中“指针”和“指针变量”的区别是什
- 下一篇: 虚拟内存解疑