Skip to content

Commit 935ed64

Browse files
author
Clement Champetier
committed
VideoGenerator: removed VideoFrameDesc parameter in constructor
The VideoFrameDesc could be found from the given frame when decoding.
1 parent 737a3d1 commit 935ed64

File tree

4 files changed

+24
-35
lines changed

4 files changed

+24
-35
lines changed

src/AvTranscoder/decoder/VideoGenerator.cpp

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
#include "VideoGenerator.hpp"
22

33
#include <AvTranscoder/util.hpp>
4-
#include <AvTranscoder/transform/VideoTransform.hpp>
54

65
#include <sstream>
6+
#include <stdexcept>
77

88
namespace avtranscoder
99
{
1010

11-
VideoGenerator::VideoGenerator(const VideoFrameDesc& frameDesc)
11+
VideoGenerator::VideoGenerator()
1212
: _inputFrame(NULL)
1313
, _blackImage(NULL)
14-
, _frameDesc(frameDesc)
14+
, _videoTransform()
1515
{
1616
}
1717

@@ -23,12 +23,8 @@ VideoGenerator::~VideoGenerator()
2323
bool VideoGenerator::decodeNextFrame(Frame& frameBuffer)
2424
{
2525
// check the given frame
26-
if(!frameBuffer.isVideoFrame())
27-
{
28-
LOG_WARN("The given frame is not a valid video frame: allocate a new AVPicture to put generated data into it.");
29-
frameBuffer.clear();
30-
static_cast<VideoFrame&>(frameBuffer).allocateAVPicture(_frameDesc);
31-
}
26+
if(! frameBuffer.isVideoFrame())
27+
throw std::runtime_error("The given frame is not a valid video frame: allocate a new AVPicture to put generated data into it.");
3228

3329
// Generate black image
3430
if(!_inputFrame)
@@ -38,30 +34,19 @@ bool VideoGenerator::decodeNextFrame(Frame& frameBuffer)
3834
{
3935
std::stringstream msg;
4036
msg << "Generate a black image with the following features:" << std::endl;
41-
msg << "width = " << _frameDesc._width << std::endl;
42-
msg << "height = " << _frameDesc._height << std::endl;
37+
msg << "width = " << frameBuffer.getAVFrame().width << std::endl;
38+
msg << "height = " << frameBuffer.getAVFrame().height << std::endl;
4339
msg << "pixel format = rgb24" << std::endl;
4440
LOG_INFO(msg.str())
4541

46-
VideoFrame& imageBuffer = static_cast<VideoFrame&>(frameBuffer);
47-
48-
// Input of convert
49-
// @todo support PAL (0 to 255) and NTFS (16 to 235)
50-
VideoFrameDesc desc(_frameDesc);
51-
desc._pixelFormat = getAVPixelFormat("rgb24");
52-
VideoFrame intermediateBuffer(desc);
42+
// Create the black RGB image
43+
_blackImage = new VideoFrame(VideoFrameDesc(frameBuffer.getAVFrame().width, frameBuffer.getAVFrame().height, "rgb24"));
5344
const unsigned char fillChar = 0;
54-
intermediateBuffer.assign(fillChar);
55-
56-
// Output of convert
57-
_blackImage = new VideoFrame(imageBuffer.desc());
58-
59-
// Convert and store the black image
60-
VideoTransform videoTransform;
61-
videoTransform.convert(intermediateBuffer, *_blackImage);
45+
_blackImage->assign(fillChar);
6246
}
6347
LOG_DEBUG("Copy data of the black image when decode next frame")
64-
frameBuffer.copyData(*_blackImage);
48+
// Convert the black image to the configuration of the given frame
49+
_videoTransform.convert(*_blackImage, frameBuffer);
6550
}
6651
// Take image from _inputFrame
6752
else

src/AvTranscoder/decoder/VideoGenerator.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "IDecoder.hpp"
55
#include <AvTranscoder/codec/VideoCodec.hpp>
6+
#include <AvTranscoder/transform/VideoTransform.hpp>
67

78
namespace avtranscoder
89
{
@@ -14,19 +15,22 @@ class AvExport VideoGenerator : public IDecoder
1415
VideoGenerator& operator=(const VideoGenerator& videoGenerator);
1516

1617
public:
17-
VideoGenerator(const VideoFrameDesc& frameDesc);
18-
18+
VideoGenerator();
1919
~VideoGenerator();
2020

2121
bool decodeNextFrame(Frame& frameBuffer);
2222
bool decodeNextFrame(Frame& frameBuffer, const std::vector<size_t> channelIndexArray);
2323

24+
/**
25+
* @brief Force to return this frame when calling the decoding methods.
26+
* @param inputFrame: should have the same properties as the given frames when decoding.
27+
*/
2428
void setNextFrame(Frame& inputFrame) { _inputFrame = &inputFrame; }
2529

2630
private:
2731
Frame* _inputFrame; ///< A frame given from outside (has link, no ownership)
28-
VideoFrame* _blackImage; ///< The generated black image (has ownership)
29-
const VideoFrameDesc _frameDesc; ///< The description of the black image (width, height...)
32+
VideoFrame* _blackImage; ///< The generated RGB black image (has ownership)
33+
VideoTransform _videoTransform; ///< To transform data of the back image to the given Frame when decoding.
3034
};
3135
}
3236

src/AvTranscoder/reader/VideoReader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void VideoReader::init()
4444
_currentDecoder = _decoder;
4545

4646
// generator
47-
_generator = new VideoGenerator(_inputFile->getStream(_streamIndex).getVideoCodec().getVideoFrameDesc());
47+
_generator = new VideoGenerator();
4848

4949
// create transform
5050
_transform = new VideoTransform();

src/AvTranscoder/transcoder/StreamTranscoder.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ StreamTranscoder::StreamTranscoder(IInputStream& inputStream, IOutputFile& outpu
5353
VideoFrameDesc inputFrameDesc(inputStream.getVideoCodec().getVideoFrameDesc());
5454

5555
// generator decoder
56-
_generators.push_back(new VideoGenerator(inputFrameDesc));
56+
_generators.push_back(new VideoGenerator());
5757

5858
// buffers to process
5959
_decodedData.push_back(VideoFrame(inputFrameDesc));
@@ -179,7 +179,7 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
179179
_transform = new VideoTransform();
180180

181181
// generator decoder
182-
_generators.push_back(new VideoGenerator(outputVideo->getVideoCodec().getVideoFrameDesc()));
182+
_generators.push_back(new VideoGenerator());
183183

184184
break;
185185
}
@@ -257,7 +257,7 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
257257
inputVideoCodec.setImageParameters(inputFrameDesc);
258258

259259
// generator decoder
260-
VideoGenerator* generator = new VideoGenerator(inputVideoCodec.getVideoFrameDesc());
260+
VideoGenerator* generator = new VideoGenerator();
261261
_generators.push_back(generator);
262262
_currentDecoder = generator;
263263

0 commit comments

Comments
 (0)