Skip to content

Commit ecd3ddd

Browse files
author
Clement Champetier
committed
StreamTranscoder: updated buffer attributes
* No pointers are needed here. * Updated FilterGraph parameters to launch a process.
1 parent ecfed3f commit ecd3ddd

File tree

4 files changed

+44
-57
lines changed

4 files changed

+44
-57
lines changed

src/AvTranscoder/filter/FilterGraph.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ FilterGraph::~FilterGraph()
3535
avfilter_graph_free(&_graph);
3636
}
3737

38-
void FilterGraph::process(const std::vector<Frame*>& inputs, Frame& output)
38+
void FilterGraph::process(const std::vector<Frame>& inputs, Frame& output)
3939
{
4040
if(!hasFilters())
4141
{
4242
LOG_DEBUG("No filter to process: reference first input frame to the given output.")
43-
output.refFrame(*inputs.at(0));
43+
output.refFrame(inputs.at(0));
4444
return;
4545
}
4646

@@ -51,7 +51,7 @@ void FilterGraph::process(const std::vector<Frame*>& inputs, Frame& output)
5151
// setup input frames
5252
for(size_t index = 0; index < inputs.size(); ++index)
5353
{
54-
const int ret = av_buffersrc_write_frame(_filters.at(index)->getAVFilterContext(), &inputs.at(index)->getAVFrame());
54+
const int ret = av_buffersrc_write_frame(_filters.at(index)->getAVFilterContext(), &inputs.at(index).getAVFrame());
5555
if(ret < 0)
5656
{
5757
throw std::runtime_error("Error when adding a frame to the source buffer used to start to process filters: " +
@@ -81,7 +81,7 @@ Filter& FilterGraph::addFilter(const std::string& filterName, const std::string&
8181
return *_filters.back();
8282
}
8383

84-
void FilterGraph::init(const std::vector<Frame*>& inputs, Frame& output)
84+
void FilterGraph::init(const std::vector<Frame>& inputs, Frame& output)
8585
{
8686
// push filters to the graph
8787
pushInBuffer(inputs);
@@ -137,30 +137,30 @@ void FilterGraph::pushFilter(Filter& filter)
137137
}
138138
}
139139

140-
void FilterGraph::pushInBuffer(const std::vector<Frame*>& inputs)
140+
void FilterGraph::pushInBuffer(const std::vector<Frame>& inputs)
141141
{
142-
for(std::vector<Frame*>::const_iterator it = inputs.begin(); it != inputs.end(); ++it)
142+
for(std::vector<Frame>::const_iterator it = inputs.begin(); it != inputs.end(); ++it)
143143
{
144144
std::string filterName;
145145
std::stringstream filterOptions;
146146
// audio frame
147-
if((*it)->isAudioFrame())
147+
if(it->isAudioFrame())
148148
{
149149
filterName = "abuffer";
150-
const AudioFrame* audioFrame = dynamic_cast<const AudioFrame*>(*it);
150+
const AudioFrame& audioFrame = dynamic_cast<const AudioFrame&>(*it);
151151
filterOptions << "time_base=" << _codec.getAVCodecContext().time_base.num << "/"
152152
<< _codec.getAVCodecContext().time_base.den << ":";
153-
filterOptions << "sample_rate=" << audioFrame->getSampleRate() << ":";
154-
filterOptions << "sample_fmt=" << getSampleFormatName(audioFrame->getSampleFormat()) << ":";
155-
filterOptions << "channel_layout=0x" << std::hex << audioFrame->getChannelLayout();
153+
filterOptions << "sample_rate=" << audioFrame.getSampleRate() << ":";
154+
filterOptions << "sample_fmt=" << getSampleFormatName(audioFrame.getSampleFormat()) << ":";
155+
filterOptions << "channel_layout=0x" << std::hex << audioFrame.getChannelLayout();
156156
}
157157
// video frame
158-
else if((*it)->isVideoFrame())
158+
else if(it->isVideoFrame())
159159
{
160160
filterName = "buffer";
161-
const VideoFrame* videoFrame = dynamic_cast<const VideoFrame*>(*it);
162-
filterOptions << "video_size=" << videoFrame->getWidth() << "x" << videoFrame->getHeight() << ":";
163-
filterOptions << "pix_fmt=" << getPixelFormatName(videoFrame->getPixelFormat()) << ":";
161+
const VideoFrame& videoFrame = dynamic_cast<const VideoFrame&>(*it);
162+
filterOptions << "video_size=" << videoFrame.getWidth() << "x" << videoFrame.getHeight() << ":";
163+
filterOptions << "pix_fmt=" << getPixelFormatName(videoFrame.getPixelFormat()) << ":";
164164
filterOptions << "time_base=" << _codec.getAVCodecContext().time_base.num << "/"
165165
<< _codec.getAVCodecContext().time_base.den << ":";
166166
filterOptions << "pixel_aspect=" << _codec.getAVCodecContext().sample_aspect_ratio.num << "/"

src/AvTranscoder/filter/FilterGraph.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class AvExport FilterGraph
5353
* |
5454
* input 2 ---|
5555
*/
56-
void process(const std::vector<Frame*>& inputs, Frame& output);
56+
void process(const std::vector<Frame>& inputs, Frame& output);
5757

5858
private:
5959
/**
@@ -67,7 +67,7 @@ class AvExport FilterGraph
6767
* @see pushInBuffer
6868
* @see pushOutBuffer
6969
*/
70-
void init(const std::vector<Frame*>& inputs, Frame& output);
70+
void init(const std::vector<Frame>& inputs, Frame& output);
7171

7272
/**
7373
* @brief Push the given Filter to the graph.
@@ -76,7 +76,7 @@ class AvExport FilterGraph
7676

7777
///@{
7878
/// @brief Push the input and output buffer at the beginning and the end of the graph.
79-
void pushInBuffer(const std::vector<Frame*>& inputs);
79+
void pushInBuffer(const std::vector<Frame>& inputs);
8080
void pushOutBuffer(const Frame& output);
8181
//@}
8282

src/AvTranscoder/transcoder/StreamTranscoder.cpp

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ StreamTranscoder::StreamTranscoder(IInputStream& inputStream, IOutputFile& outpu
5757
_generators.push_back(new VideoGenerator(inputFrameDesc));
5858

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

6464
// transform
6565
_transform = new VideoTransform();
@@ -93,9 +93,9 @@ StreamTranscoder::StreamTranscoder(IInputStream& inputStream, IOutputFile& outpu
9393
_generators.push_back(new AudioGenerator(inputFrameDesc));
9494

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

100100
// transform
101101
_transform = new AudioTransform();
@@ -173,9 +173,9 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
173173
_outputStream = &outputFile.addVideoStream(outputVideo->getVideoCodec());
174174

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

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

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

221221
// transform
222222
_transform = new AudioTransform();
@@ -270,9 +270,9 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
270270
// buffers to process
271271
VideoFrameDesc outputFrameDesc = inputFrameDesc;
272272
outputFrameDesc.setParameters(profile);
273-
_decodedData.push_back(new VideoFrame(inputFrameDesc));
274-
_filteredData.push_back(new VideoFrame(inputFrameDesc));
275-
_transformedData.push_back(new VideoFrame(outputFrameDesc));
273+
_decodedData.push_back(VideoFrame(inputFrameDesc));
274+
_filteredData.push_back(VideoFrame(inputFrameDesc));
275+
_transformedData.push_back(VideoFrame(outputFrameDesc));
276276

277277
// transform
278278
_transform = new VideoTransform();
@@ -303,9 +303,9 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
303303
// buffers to process
304304
AudioFrameDesc outputFrameDesc = inputFrameDesc;
305305
outputFrameDesc.setParameters(profile);
306-
_decodedData.push_back(new AudioFrame(inputFrameDesc));
307-
_filteredData.push_back(new AudioFrame(inputFrameDesc));
308-
_transformedData.push_back(new AudioFrame(outputFrameDesc));
306+
_decodedData.push_back(AudioFrame(inputFrameDesc));
307+
_filteredData.push_back(AudioFrame(inputFrameDesc));
308+
_transformedData.push_back(AudioFrame(outputFrameDesc));
309309

310310
// transform
311311
_transform = new AudioTransform();
@@ -326,19 +326,6 @@ StreamTranscoder::StreamTranscoder(IOutputFile& outputFile, const ProfileLoader:
326326

327327
StreamTranscoder::~StreamTranscoder()
328328
{
329-
for(std::vector<Frame*>::iterator it = _decodedData.begin(); it != _decodedData.end(); ++it)
330-
{
331-
delete(*it);
332-
}
333-
for(std::vector<Frame*>::iterator it = _filteredData.begin(); it != _filteredData.end(); ++it)
334-
{
335-
delete(*it);
336-
}
337-
for(std::vector<Frame*>::iterator it = _transformedData.begin(); it != _transformedData.end(); ++it)
338-
{
339-
delete(*it);
340-
}
341-
342329
for(std::vector<IDecoder*>::iterator it = _inputDecoders.begin(); it != _inputDecoders.end(); ++it)
343330
{
344331
delete(*it);
@@ -497,21 +484,21 @@ bool StreamTranscoder::processTranscode()
497484
LOG_DEBUG("Decode next frame")
498485
bool decodingStatus = false;
499486
if(! _inputStreamDesc.empty() && _inputStreamDesc.at(0).demultiplexing())
500-
decodingStatus = _currentDecoder->decodeNextFrame(*_decodedData.at(0), _inputStreamDesc.at(0)._channelIndexArray);
487+
decodingStatus = _currentDecoder->decodeNextFrame(_decodedData.at(0), _inputStreamDesc.at(0)._channelIndexArray);
501488
else
502-
decodingStatus = _currentDecoder->decodeNextFrame(*_decodedData.at(0));
489+
decodingStatus = _currentDecoder->decodeNextFrame(_decodedData.at(0));
503490

504491
CodedData data;
505492
if(decodingStatus)
506493
{
507494
LOG_DEBUG("Filtering")
508-
_filterGraph->process(_decodedData, *_filteredData.at(0));
495+
_filterGraph->process(_decodedData, _filteredData.at(0));
509496

510497
LOG_DEBUG("Convert")
511-
_transform->convert(*_filteredData.at(0), *_transformedData.at(0));
498+
_transform->convert(_filteredData.at(0), _transformedData.at(0));
512499

513500
LOG_DEBUG("Encode")
514-
_outputEncoder->encodeFrame(*_transformedData.at(0), data);
501+
_outputEncoder->encodeFrame(_transformedData.at(0), data);
515502
}
516503
else
517504
{

src/AvTranscoder/transcoder/StreamTranscoder.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ class AvExport StreamTranscoder
127127
IInputStream* _currentInputStream; ///< Current input stream (has link, no ownership)
128128
IOutputStream* _outputStream; ///< Output stream to wrap next packet (has link, no ownership)
129129

130-
std::vector<Frame*> _decodedData; ///< Buffer of decoded data (has ownership).
131-
std::vector<Frame*> _filteredData; ///< Buffer of filtered data (has ownership).
132-
std::vector<Frame*> _transformedData; ///< Buffer of transformed data (has ownership).
130+
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.
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)