本文整理汇总了C++中XRef::Process方法的典型用法代码示例。如果您正苦于以下问题:C++ XRef::Process方法的具体用法?C++ XRef::Process怎么用?C++ XRef::Process使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XRef
的用法示例。
在下文中一共展示了XRef::Process方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Create
//.........这里部分代码省略.........
_bufSize = 2 * stats.averageBitRate;
if( _frameRate == 0.0 )
_frameRate = stats.frameRate;
// Fix for ffmpeg's inability to make files with fps < 6.0. Don't believe me? Try these 2 commands and play
// output in vlc:
//
// # generate a test movie of the game of life in life.mp4
// ffmpeg -f lavfi -i life -frames:v 1000 life.mp4
// # transcode and drop framerate of life.mp4 to 1 fps. output.mp4 won't play in vlc and will have a weird
// # pause at the beginning for other players.
// ffmpeg -i life.mp4 -vf fps=fps=1/1 -vcodec h264 output.mp4
//
if( _frameRate < 6.0 )
_frameRate = 6.0;
int outputTimeBaseNum = 0;
int outputTimeBaseDen = 0;
int inputTimeBaseNum = 0;
int inputTimeBaseDen = 0;
AVKit::DToQ( (1/stats.frameRate), inputTimeBaseNum, inputTimeBaseDen );
AVKit::DToQ( (1/_frameRate), outputTimeBaseNum, outputTimeBaseDen );
if( transcoder.IsEmpty() )
{
transcoder = new H264Transcoder( inputTimeBaseNum, inputTimeBaseDen,
outputTimeBaseNum, outputTimeBaseDen,
_speed,
// if our input is key only, enable decode skipping...
_recorderURLS.KeyFrameOnly() );
}
double secondsPer = AVKit::QToD(inputTimeBaseNum, inputTimeBaseDen) / (AVKit::QToD(inputTimeBaseNum, inputTimeBaseDen) / (AVKit::QToD(outputTimeBaseNum, outputTimeBaseDen) * _speed));
int traversalNum = 0;
int traversalDen = 0;
AVKit::DToQ( secondsPer, traversalNum, traversalDen );
while( !resultParser.EndOfFile() )
{
try
{
if( transcoder->Decode( resultParser, decoder ) )
{
if( encoder.IsEmpty() )
_FinishInit( encoder, muxer, decoder, tempFileName, outputToFile, traversalNum, traversalDen );
if( ov.IsEmpty() )
ov = new ExportOverlay( _msg,
_withTime,
_hAlign,
_vAlign,
decoder.GetOutputWidth(),
decoder.GetOutputHeight(),
traversalNum,
traversalDen );
yuvToARGB->Transform( decoder.Get(), decoder.GetOutputWidth(), decoder.GetOutputHeight() );
XIRef<Packet> rgb = yuvToARGB->Get();
XIRef<Packet> withOverlay = ov->Process( rgb, resultParser.GetFrameTS() );
argbToYUV->Transform( withOverlay, decoder.GetOutputWidth(), decoder.GetOutputHeight() );
transcoder->EncodeYUV420PAndMux( *encoder, *muxer, argbToYUV->Get() );
wroteToContainer = true;
}
}
catch(XException& ex)
{
X_LOG_NOTICE("Coding exception: %s",ex.what());
++codingExceptions;
// If we have had a LOT of decoding or encoding exceptions, just give up.
if( codingExceptions > 100000 )
throw ex;
}
}
}
catch( XException& ex )
{
X_LOG_NOTICE("Exception thrown while processing export. Continuing: %s",ex.what());
}
}
if( wroteToContainer )
_progress( 1.0 );
else X_STHROW( HTTP404Exception, ("No video was found during entire export."));
if( outputToFile )
{
muxer->FinalizeFile();
rename( tempFileName.c_str(), _fileName.c_str() );
}
else muxer->FinalizeBuffer( output );
}