do { if (_MuxData.GetDataSize() < 4) { do { status = _Splitter.GetNextData(&_MuxData,audioTrack); if (status == UMC::UMC_ERR_NOT_ENOUGH_DATA) vm_time_sleep(5); } while(status==UMC::UMC_ERR_NOT_ENOUGH_DATA && !endOfAudio); if (((status != UMC::UMC_OK) && (status != UMC::UMC_ERR_END_OF_STREAM))|| (status == UMC::UMC_ERR_END_OF_STREAM)&& (_MuxData.GetDataSize() < 4)) exit_flag = 1; if (!endOfAudio) { tmpData.Reset(); tmpData.SetBufferPointer((Ipp8u*)_MuxData.GetBufferPointer(), _MuxData.GetDataSize()); memcpy(tmpData.GetDataPointer(), _MuxData.GetDataPointer(), _MuxData.GetDataSize()); tmpData.SetDataSize(_MuxData.GetDataSize()); tmpData.SetTime(_MuxData.GetTime()); status = _Muxer.PutAudioData(&tmpData); } if (status != UMC::UMC_OK) { _Muxer.PutEndOfStream(0); endOfAudio = true; } // reset input buffer memset(_MuxData.GetBufferPointer(),0,_MuxData.GetDataSize()); _MuxData.SetDataSize(0); } } while(!exit_flag && (status == UMC::UMC_ERR_NOT_ENOUGH_DATA || status == UMC::UMC_ERR_SYNC));
The code for Video muxing is similar to this one. My video track is 0, and audio track is 1.
Please give me some hints if you have any. Maybe I am missing something. For the end, here's how I initialize Muxer:
_muxerParams.m_lpDataWriter = &_Writer; _muxerParams.m_SystemType = UMC::MP4_ATOM_STREAM; _muxerParams.m_nNumberOfTracks = 1; _muxerParams.pTrackParams = new UMC::TrackParams[_muxerParams.m_nNumberOfTracks]; // videoInfo = (UMC::VideoStreamInfo*)(streamInfo->m_ppTrackInfo[videoTrack]->m_pStreamInfo); audioInfo = (UMC::AudioStreamInfo*)(streamInfo->m_ppTrackInfo[audioTrack]->m_pStreamInfo); //_muxerParams.pTrackParams[0].type = UMC::VIDEO_TRACK; //_muxerParams.pTrackParams[0].info.video = videoInfo; //_muxerParams.pTrackParams[0].bufferParams.m_prefInputBufferSize = 2000000; //_muxerParams.pTrackParams[0].bufferParams.m_prefOutputBufferSize = 2000000; _muxerParams.pTrackParams[0].type = UMC::AUDIO_TRACK; _muxerParams.pTrackParams[0].info.audio = audioInfo; _muxerParams.pTrackParams[0].bufferParams.m_prefInputBufferSize = 1000; _muxerParams.pTrackParams[0].bufferParams.m_prefOutputBufferSize = 1000;
Link Copied
For more complete information about compiler optimizations, see our Optimization Notice.