diff --git a/src/AvTranscoder/EssenceStream/DummyVideo.cpp b/src/AvTranscoder/EssenceStream/DummyVideo.cpp index 37e66c6e..bb2d9723 100644 --- a/src/AvTranscoder/EssenceStream/DummyVideo.cpp +++ b/src/AvTranscoder/EssenceStream/DummyVideo.cpp @@ -8,6 +8,7 @@ namespace avtranscoder DummyVideo::DummyVideo( ) : InputEssence( ) + , _inputFrame( NULL ) , _numberOfView( 1 ) { } @@ -27,13 +28,25 @@ VideoDesc DummyVideo::getVideoDesc() const return _videoDesc; } +void DummyVideo::setFrame( Frame& inputFrame ) +{ + _inputFrame = &inputFrame; +} + bool DummyVideo::readNextFrame( Frame& frameBuffer ) { frameBuffer.getBuffer().resize( _imageDesc.getDataSize() ); - int fillChar = 0; // fill images with black - memset( frameBuffer.getPtr(), fillChar, frameBuffer.getSize() ); - + if( ! _inputFrame ) + { + int fillChar = 0; // fill images with black + memset( frameBuffer.getPtr(), fillChar, frameBuffer.getSize() ); + return true; + } + + if( frameBuffer.getSize() != _inputFrame->getSize() ) + frameBuffer.getBuffer().resize( _inputFrame->getSize() ); + std::memcpy( frameBuffer.getPtr(), _inputFrame->getPtr(), _inputFrame->getSize() ); return true; } diff --git a/src/AvTranscoder/EssenceStream/DummyVideo.hpp b/src/AvTranscoder/EssenceStream/DummyVideo.hpp index 40897fda..46acb596 100644 --- a/src/AvTranscoder/EssenceStream/DummyVideo.hpp +++ b/src/AvTranscoder/EssenceStream/DummyVideo.hpp @@ -23,10 +23,13 @@ class AvExport DummyVideo : public InputEssence void setup() {} + void setFrame( Frame& inputFrame ); + bool readNextFrame( Frame& frameBuffer ); bool readNextFrame( Frame& frameBuffer, const size_t subStreamIndex ); private: + Frame* _inputFrame; VideoDesc _videoDesc; ImageDesc _imageDesc; diff --git a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp index 4e73deac..8b035455 100644 --- a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp +++ b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp @@ -170,8 +170,8 @@ StreamTranscoder::StreamTranscoder( OutputVideo* outputVideo = new OutputVideo(); _outputEssence = outputVideo; - ImageDesc srcImageDesc; // @todo better solution ? - outputVideo->setProfile( profile, srcImageDesc ); + ImageDesc inputImageDesc = static_cast( _inputEssence )->getVideoDesc().getImageDesc(); + outputVideo->setProfile( profile, inputImageDesc ); _outputStream = &outputFile.addVideoStream( outputVideo->getVideoDesc() ); _sourceBuffer = new Image( outputVideo->getVideoDesc().getImageDesc() ); diff --git a/src/AvTranscoder/Transcoder/Transcoder.cpp b/src/AvTranscoder/Transcoder/Transcoder.cpp index e97304fe..51269f21 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.cpp +++ b/src/AvTranscoder/Transcoder/Transcoder.cpp @@ -107,6 +107,11 @@ void Transcoder::add( const std::string& filename, const size_t streamIndex, con addTranscodeStream( filename, streamIndex, subStreamIndex, profileDesc ); } +void Transcoder::add( StreamTranscoder& stream ) +{ + _streamTranscoders.push_back( &stream ); +} + bool Transcoder::processFrame() { if( _streamTranscoders.size() == 0 ) diff --git a/src/AvTranscoder/Transcoder/Transcoder.hpp b/src/AvTranscoder/Transcoder/Transcoder.hpp index ee4d350b..4aa790bc 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.hpp +++ b/src/AvTranscoder/Transcoder/Transcoder.hpp @@ -51,6 +51,8 @@ class Transcoder */ void add( const std::string& filename, const size_t streamIndex, const int subStreamIndex, Profile::ProfileDesc& profileDesc ); + void add( StreamTranscoder& stream ); + bool processFrame(); void process( ProgressListener& progress ); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy