Skip to content

Commit 9767b0f

Browse files
author
Clement Champetier
committed
VideoGenerator: generate the black image only once
1 parent bde8526 commit 9767b0f

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

src/AvTranscoder/decoder/VideoGenerator.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace avtranscoder
77

88
VideoGenerator::VideoGenerator()
99
: _inputFrame( NULL )
10+
, _blackImage( NULL )
1011
, _frameDesc()
1112
{
1213
}
@@ -26,18 +27,27 @@ bool VideoGenerator::decodeNextFrame( Frame& frameBuffer )
2627
// Generate black image
2728
if( ! _inputFrame )
2829
{
29-
// @todo support PAL (0 to 255) and NTFS (16 to 235)
30-
char fillChar = 0;
30+
// Generate the black image only once
31+
if( ! _blackImage )
32+
{
33+
// @todo support PAL (0 to 255) and NTFS (16 to 235)
34+
char fillChar = 0;
3135

32-
VideoFrameDesc desc( _frameDesc );
33-
desc.setPixelFormat( "rgb24" );
36+
VideoFrameDesc desc( _frameDesc );
37+
desc.setPixelFormat( "rgb24" );
3438

35-
VideoFrame intermediateBuffer( desc );
36-
intermediateBuffer.getBuffer().resize( _frameDesc.getDataSize() );
37-
memset( intermediateBuffer.getPtr(), fillChar, _frameDesc.getDataSize() );
39+
VideoFrame intermediateBuffer( desc );
40+
intermediateBuffer.getBuffer().resize( _frameDesc.getDataSize() );
41+
memset( intermediateBuffer.getPtr(), fillChar, _frameDesc.getDataSize() );
3842

39-
VideoTransform videoEssenceTransform;
40-
videoEssenceTransform.convert( intermediateBuffer, frameBuffer );
43+
VideoTransform videoTransform;
44+
videoTransform.convert( intermediateBuffer, frameBuffer );
45+
46+
VideoFrame& imageBuffer = static_cast<VideoFrame&>( frameBuffer );
47+
_blackImage = new VideoFrame( imageBuffer.desc() );
48+
_blackImage->copyData( imageBuffer.getPtr(), imageBuffer.getSize() );
49+
}
50+
frameBuffer = *_blackImage;
4151
}
4252
// Take image from _inputFrame
4353
else

src/AvTranscoder/decoder/VideoGenerator.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ class AvExport VideoGenerator : public IDecoder
2323
bool decodeNextFrame( Frame& frameBuffer, const size_t subStreamIndex );
2424

2525
private:
26-
Frame* _inputFrame; ///< Has link (no ownership)
27-
VideoFrameDesc _frameDesc;
26+
Frame* _inputFrame; ///< A frame given from outside (has link, no ownership)
27+
VideoFrame* _blackImage; ///< The generated black image (has ownership)
28+
VideoFrameDesc _frameDesc; ///< The description of the black image (width, height...)
2829
};
2930

3031
}

0 commit comments

Comments
 (0)