void VideoClipWorkflow::initializeInternals() { initFilters(); m_renderer->setName( qPrintable( QString("VideoClipWorkflow " % m_clipHelper->uuid().toString() ) ) ); m_renderer->enableVideoOutputToMemory( this, &lock, &unlock, m_fullSpeedRender ); m_renderer->setOutputWidth( m_width ); m_renderer->setOutputHeight( m_height ); m_renderer->setOutputFps( (float)VLMC_PROJECT_GET_DOUBLE( "video/VLMCOutputFPS" ) ); m_renderer->setOutputVideoCodec( "RV32" ); }
void MetaDataWorker::metaDataAvailable() { m_mediaIsPlaying = false; m_lengthHasChanged = false; //In order to wait for the VOUT to be ready: //Until we have a way of knowing when it is, both getWidth and getHeight method //will trigger exception... so we shut it up. if ( m_media->fileType() != Media::Audio ) { m_timer.restart(); while ( m_mediaPlayer->hasVout() == false && m_timer.elapsed() < 3000 ) { SleepMS( 10 ); //Ugly isn't it :) } if ( m_mediaPlayer->hasVout() == false ) { emit failed( m_media ); return ; } quint32 width, height; m_mediaPlayer->getSize( &width, &height ); m_media->setWidth( width ); m_media->setHeight( height ); m_media->setFps( m_mediaPlayer->getFps() ); if ( m_media->fps() == .0f ) { qWarning() << "Invalid FPS for media:" << m_media->fileInfo()->absoluteFilePath(); m_media->setFps( Clip::DefaultFPS ); } } else { double fps = VLMC_PROJECT_GET_DOUBLE( "video/VLMCOutputFPS" ); m_media->setFps( fps ); } m_media->setLength( m_mediaPlayer->getLength() ); m_media->setNbAudioTrack( m_mediaPlayer->getNbAudioTrack() ); m_media->setNbVideoTrack( m_mediaPlayer->getNbVideoTrack() ); m_media->setNbFrames( (m_media->lengthMS() / 1000) * m_media->fps() ); m_media->emitMetaDataComputed(); //Setting time for snapshot : if ( m_media->fileType() == Media::Video || m_media->fileType() == Media::Image ) { connect( m_mediaPlayer, SIGNAL( positionChanged( float ) ), this, SLOT( renderSnapshot() ) ); m_mediaPlayer->setTime( m_mediaPlayer->getLength() / 3 ); }
TracksRuler::TracksRuler( TracksView* tracksView, QWidget* parent ) : QWidget( parent ), m_tracksView( tracksView ), m_duration ( 0 ), m_offset( 0 ) { //TODO We should really get that from the // workflow and not directly from the settings. m_fps = qRound( VLMC_PROJECT_GET_DOUBLE( "video/VLMCOutputFPS" ) ); m_factor = 1; m_scale = 3; m_littleMarkDistance = FRAME_SIZE; m_mediumMarkDistance = FRAME_SIZE * m_fps; m_bigMarkDistance = FRAME_SIZE * m_fps * 60; setMinimumHeight( 30 ); setPixelPerMark( 5 ); // Redraw the ruler when the cursor position change connect( tracksView->tracksCursor(), SIGNAL( cursorPositionChanged(qint64) ), this, SLOT( update() ) ); }
QString VideoClipWorkflow::createSoutChain() const { QString chain = ":sout=#transcode{vcodec=RV32,fps="; chain += QString::number( VLMC_PROJECT_GET_DOUBLE( "video/VLMCOutputFPS" ) ) % ",width=" % QString::number( m_width ) % ",height=" % QString::number( m_height ) % "}:smem{"; if ( m_fullSpeedRender == false ) chain += "time-sync"; else chain += "no-time-sync"; chain += ",video-data=" % QString::number( reinterpret_cast<intptr_t>( this ) ) % ",video-prerender-callback=" % QString::number( reinterpret_cast<intptr_t>( getLockCallback() ) ) % ",video-postrender-callback=" % QString::number( reinterpret_cast<intptr_t>( getUnlockCallback() ) ) % '}'; return chain; }
float WorkflowRenderer::outputFps() const { return VLMC_PROJECT_GET_DOUBLE( "video/VLMCOutputFPS" ); }