Skip to content

Commit 8dbe2d6

Browse files
author
Clement Champetier
committed
StreamTranscoder: no need to handle vector of filtered and transformed data
Need to define 'Frame::operator='.
1 parent ecd3ddd commit 8dbe2d6

File tree

4 files changed

+31
-23
lines changed

4 files changed

+31
-23
lines changed

src/AvTranscoder/data/decoded/Frame.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ Frame::Frame(const Frame& otherFrame)
2323
refFrame(otherFrame);
2424
}
2525

26+
void Frame::operator=(const Frame& otherFrame)
27+
{
28+
// check if the frame could be a valid video/audio frame
29+
if(otherFrame.getAVFrame().format == -1)
30+
return;
31+
// reference the other frame
32+
refFrame(otherFrame);
33+
}
34+
2635
Frame::~Frame()
2736
{
2837
if(_frame != NULL)

src/AvTranscoder/data/decoded/Frame.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ class AvExport Frame
2222
*/
2323
Frame();
2424

25-
/**
26-
* @brief Copy properties and reference data of the other frame
27-
*/
25+
//@{
26+
// @brief Copy properties and reference data of the other frame.
2827
Frame(const Frame& otherFrame);
28+
void operator=(const Frame& otherFrame);
29+
//@}
2930

3031
virtual ~Frame();
3132

src/AvTranscoder/transcoder/StreamTranscoder.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ StreamTranscoder::StreamTranscoder(IInputStream& inputStream, IOutputFile& outpu
5858

5959
// buffers to process
6060
_decodedData.push_back(VideoFrame(inputFrameDesc));
61-
_filteredData.push_back(VideoFrame(inputFrameDesc));
62-
_transformedData.push_back(VideoFrame(inputFrameDesc));
61+
_filteredData = VideoFrame(inputFrameDesc);
62+
_transformedData = VideoFrame(inputFrameDesc);
6363

6464
// transform
6565
_transform = new VideoTransform();
@@ -94,8 +94,8 @@ StreamTranscoder::StreamTranscoder(IInputStream& inputStream, IOutputFile& outpu
9494

9595
// buffers to process
9696
_decodedData.push_back(AudioFrame(inputFrameDesc));
97-
_filteredData.push_back(AudioFrame(inputFrameDesc));
98-
_transformedData.push_back(AudioFrame(inputFrameDesc));
97+
_filteredData = AudioFrame(inputFrameDesc);
98+
_transformedData = AudioFrame(inputFrameDesc);
9999

100100
// transform
101101
_transform = new AudioTransform();
@@ -174,8 +174,8 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
174174

175175
// buffers to process
176176
_decodedData.push_back(VideoFrame(_currentInputStream->getVideoCodec().getVideoFrameDesc()));
177-
_filteredData.push_back(VideoFrame(_currentInputStream->getVideoCodec().getVideoFrameDesc()));
178-
_transformedData.push_back(VideoFrame(outputVideo->getVideoCodec().getVideoFrameDesc()));
177+
_filteredData = VideoFrame(_currentInputStream->getVideoCodec().getVideoFrameDesc());
178+
_transformedData = VideoFrame(outputVideo->getVideoCodec().getVideoFrameDesc());
179179

180180
// transform
181181
_transform = new VideoTransform();
@@ -215,8 +215,8 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
215215
inputFrameDesc._nbChannels = inputStreamDesc._channelIndexArray.size();
216216

217217
_decodedData.push_back(AudioFrame(inputFrameDesc));
218-
_filteredData.push_back(AudioFrame(inputFrameDesc));
219-
_transformedData.push_back(AudioFrame(outputAudio->getAudioCodec().getAudioFrameDesc()));
218+
_filteredData = AudioFrame(inputFrameDesc);
219+
_transformedData = AudioFrame(outputAudio->getAudioCodec().getAudioFrameDesc());
220220

221221
// transform
222222
_transform = new AudioTransform();
@@ -271,8 +271,8 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
271271
VideoFrameDesc outputFrameDesc = inputFrameDesc;
272272
outputFrameDesc.setParameters(profile);
273273
_decodedData.push_back(VideoFrame(inputFrameDesc));
274-
_filteredData.push_back(VideoFrame(inputFrameDesc));
275-
_transformedData.push_back(VideoFrame(outputFrameDesc));
274+
_filteredData = VideoFrame(inputFrameDesc);
275+
_transformedData = VideoFrame(outputFrameDesc);
276276

277277
// transform
278278
_transform = new VideoTransform();
@@ -304,8 +304,8 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
304304
AudioFrameDesc outputFrameDesc = inputFrameDesc;
305305
outputFrameDesc.setParameters(profile);
306306
_decodedData.push_back(AudioFrame(inputFrameDesc));
307-
_filteredData.push_back(AudioFrame(inputFrameDesc));
308-
_transformedData.push_back(AudioFrame(outputFrameDesc));
307+
_filteredData = AudioFrame(inputFrameDesc);
308+
_transformedData = AudioFrame(outputFrameDesc);
309309

310310
// transform
311311
_transform = new AudioTransform();
@@ -475,8 +475,6 @@ bool StreamTranscoder::processTranscode()
475475
assert(_currentDecoder != NULL);
476476
assert(_outputEncoder != NULL);
477477
assert(! _decodedData.empty());
478-
assert(! _filteredData.empty());
479-
assert(! _transformedData.empty());
480478
assert(_transform != NULL);
481479

482480
LOG_DEBUG("StreamTranscoder::processTranscode")
@@ -492,13 +490,13 @@ bool StreamTranscoder::processTranscode()
492490
if(decodingStatus)
493491
{
494492
LOG_DEBUG("Filtering")
495-
_filterGraph->process(_decodedData, _filteredData.at(0));
493+
_filterGraph->process(_decodedData, _filteredData);
496494

497495
LOG_DEBUG("Convert")
498-
_transform->convert(_filteredData.at(0), _transformedData.at(0));
496+
_transform->convert(_filteredData, _transformedData);
499497

500498
LOG_DEBUG("Encode")
501-
_outputEncoder->encodeFrame(_transformedData.at(0), data);
499+
_outputEncoder->encodeFrame(_transformedData, data);
502500
}
503501
else
504502
{
@@ -567,7 +565,7 @@ float StreamTranscoder::getDuration() const
567565

568566
bool StreamTranscoder::canSwitchToGenerator()
569567
{
570-
if(! _decodedData.empty() && ! _transformedData.empty() && ! _generators.empty() && _outputEncoder && _transform)
568+
if(! _decodedData.empty() && ! _generators.empty() && _outputEncoder && _transform)
571569
return true;
572570
return false;
573571
}

src/AvTranscoder/transcoder/StreamTranscoder.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ class AvExport StreamTranscoder
128128
IOutputStream* _outputStream; ///< Output stream to wrap next packet (has link, no ownership)
129129

130130
std::vector<Frame> _decodedData; ///< List of buffers of decoded data.
131-
std::vector<Frame> _filteredData; ///< Buffer of filtered data.
132-
std::vector<Frame> _transformedData; ///< Buffer of transformed data.
131+
Frame _filteredData; ///< Buffer of filtered data.
132+
Frame _transformedData; ///< Buffer of transformed data.
133133

134134
std::vector<IDecoder*> _inputDecoders; ///< Decoders of packets read from _inputStream (has ownership)
135135
std::vector<IDecoder*> _generators; ///< Generators of audio or video packets (has ownership)

0 commit comments

Comments
 (0)