ErrVal H264AVCEncoderTest::xRelease( ExtBinDataAccessorList& rcList ) { while( rcList.size() ) { delete[] rcList.front()->data(); delete rcList.front(); rcList.pop_front(); } return Err::m_nOK; }
ErrVal H264AVCEncoderTest::xSend( ExtBinDataAccessorList& rcList) //xSend per enviar la NAL de la view 0 junt amb les seves dades { //Agafem un Frame d'una vista i l'empaquetem en RTP. if(isVerbose) printf("Tamany de la llista: %d\n",rcList.size()); UChar nal_unit[4]; if(rcList.size()) { nal_unit[0]=rcList.front()->data()[0]; nal_unit[1]=rcList.front()->data()[1]; nal_unit[2]=rcList.front()->data()[2]; nal_unit[3]=rcList.front()->data()[3]; } else{ if(isVerbose) printf("Enviem el final de Tansmissio\n"); //Si la llista està buida, és que hem arribat al final o hi ha hagut un error i ho buidem tot. m_apcRtpPacker->endTransmission(); } while( rcList.size() ) { if(isVerbose) printf("Enviem un paquet\n"); m_apcRtpPacker->pack(nal_unit,rcList.front()->data(),rcList.front()->size()); // El SSN Augmenta en 1 per cada vista. Independent de l'ordre en que es codifiquin // El Timestamp és el mateix per numero de Frame //En cas de fragmentació: - MAteix timestamp, mateix SSN. Duplicare NAL + NAL especifica delete[] rcList.front()->data(); delete rcList.front(); //delete[] rcViewList.front()->data(); //delete rcViewList.front(); rcList.pop_front(); //rcViewList.pop_front(); } //system("pause"); return Err::m_nOK; }
ErrVal H264AVCEncoderTest::xWrite( ExtBinDataAccessorList& rcList, UInt& ruiBytesInFrame ) { while( rcList.size() ) { ruiBytesInFrame += rcList.front()->size() + 4; RNOK( m_pcWriteBitstreamToFile->writePacket( &m_cBinDataStartCode ) ); RNOK( m_pcWriteBitstreamToFile->writePacket( rcList.front() ) ); delete[] rcList.front()->data(); delete rcList.front(); rcList.pop_front(); } return Err::m_nOK; }