Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit06b8b45

Browse files
author
Valentin NOEL
committed
FilterGraph: renames FrameBuffer to AudioFrameBuffer
Since video frames cannot be split, this filter graph bufferswill be specialized to audio frames.
1 parentcbd4700 commit06b8b45

File tree

2 files changed

+38
-30
lines changed

2 files changed

+38
-30
lines changed

‎src/AvTranscoder/filter/FilterGraph.cpp

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,25 @@ namespace avtranscoder
1818

1919
/******************
2020
21-
FrameBuffer
21+
AudioFramebuffer
2222
2323
******************/
2424

25-
FrameBuffer::FrameBuffer(const AudioFrameDesc& audioFrameDesc)
25+
AudioFramebuffer::AudioFramebuffer(const AudioFrameDesc& audioFrameDesc)
2626
: _audioFrameDesc(audioFrameDesc)
2727
, _frameQueue()
2828
, _totalDataSize(0)
2929
, _positionInFrontFrame(0)
3030
{
3131
}
3232

33-
FrameBuffer::~FrameBuffer()
33+
AudioFramebuffer::~AudioFramebuffer()
3434
{
3535
for(size_t i =0; i < _frameQueue.size(); ++i)
3636
popFrame();
3737
}
3838

39-
voidFrameBuffer::addFrame(IFrame* frame)
39+
voidAudioFramebuffer::addFrame(IFrame* frame)
4040
{
4141
LOG_DEBUG("Add a new" << frame->getDataSize() <<" bytes frame to frame buffer. New buffer size:" << _frameQueue.size() +1);
4242
// Copy the input frame to store it into the queue
@@ -50,13 +50,13 @@ void FrameBuffer::addFrame(IFrame* frame)
5050
_frameQueue.push(newAudioFrame);
5151
}
5252

53-
voidFrameBuffer::popFrame()
53+
voidAudioFramebuffer::popFrame()
5454
{
5555
_frameQueue.pop();
5656
LOG_DEBUG("Pop frame from buffer. Remaining frames in buffer:" << _frameQueue.size());
5757
}
5858

59-
IFrame*FrameBuffer::getFrame(constsize_t size)
59+
IFrame*AudioFramebuffer::getFrame(constsize_t size)
6060
{
6161
LOG_DEBUG("Get a" << size <<" bytes frame from a" << _totalDataSize <<" bytes frame buffer");
6262
IFrame* next = _frameQueue.front();
@@ -133,7 +133,7 @@ FilterGraph::FilterGraph(const ICodec& codec)
133133

134134
FilterGraph::~FilterGraph()
135135
{
136-
_inputFramesBuffer.clear();
136+
_inputAudioFramesBuffer.clear();
137137
for(std::vector<Filter*>::iterator it = _filters.begin(); it < _filters.end(); ++it)
138138
{
139139
delete(*it);
@@ -145,7 +145,7 @@ size_t FilterGraph::getAvailableFrameSize(const std::vector<IFrame*>& inputs, co
145145
{
146146
size_t frameSize = inputs.at(index)->getDataSize();
147147
if(frameSize ==0)
148-
frameSize =_inputFramesBuffer.at(index).getDataSize();
148+
frameSize =_inputAudioFramesBuffer.at(index).getDataSize();
149149
return frameSize;
150150
}
151151

@@ -166,10 +166,10 @@ size_t FilterGraph::getMinInputFrameSize(const std::vector<IFrame*>& inputs)
166166

167167
boolFilterGraph::hasBufferedFrames()
168168
{
169-
if(!_inputFramesBuffer.size())
169+
if(!_inputAudioFramesBuffer.size())
170170
returnfalse;
171171

172-
for(std::vector<FrameBuffer>::iterator it =_inputFramesBuffer.begin(); it !=_inputFramesBuffer.end(); ++it)
172+
for(std::vector<AudioFramebuffer>::iterator it =_inputAudioFramesBuffer.begin(); it !=_inputAudioFramesBuffer.end(); ++it)
173173
{
174174
if(it->isEmpty())
175175
returnfalse;
@@ -179,13 +179,20 @@ bool FilterGraph::hasBufferedFrames()
179179

180180
boolFilterGraph::hasBufferedFrames(constsize_t index)
181181
{
182-
if(index >=_inputFramesBuffer.size())
182+
if(index >=_inputAudioFramesBuffer.size())
183183
returnfalse;
184184

185-
return !_inputFramesBuffer.at(index).isEmpty();
185+
return !_inputAudioFramesBuffer.at(index).isEmpty();
186186
}
187187

188-
boolFilterGraph::areInputFrameSizeEqual(const std::vector<IFrame*>& inputs)
188+
boolFilterGraph::areInputAudioFrames(const std::vector<IFrame*>& inputs)
189+
{
190+
if(!inputs.size())
191+
returnfalse;
192+
returntypeid(*(inputs.at(0))) ==typeid(AudioFrame);
193+
}
194+
195+
boolFilterGraph::areInputFrameSizesEqual(const std::vector<IFrame*>& inputs)
189196
{
190197
if(!inputs.size() || inputs.size() ==1)
191198
returntrue;
@@ -201,10 +208,10 @@ bool FilterGraph::areInputFrameSizeEqual(const std::vector<IFrame*>& inputs)
201208

202209
boolFilterGraph::areFrameBuffersEmpty()
203210
{
204-
if(!_inputFramesBuffer.size())
211+
if(!_inputAudioFramesBuffer.size())
205212
returntrue;
206213

207-
for(std::vector<FrameBuffer>::iterator it =_inputFramesBuffer.begin(); it !=_inputFramesBuffer.end(); ++it)
214+
for(std::vector<AudioFramebuffer>::iterator it =_inputAudioFramesBuffer.begin(); it !=_inputAudioFramesBuffer.end(); ++it)
208215
{
209216
if(!it->isEmpty())
210217
returnfalse;
@@ -218,8 +225,8 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
218225
if(!_isInit)
219226
init(inputs, output);
220227

221-
// Check whether we can bypass the input buffers
222-
constbool bypassBuffers =areInputFrameSizeEqual(inputs) &&areFrameBuffersEmpty();
228+
// Check whether we can bypass the inputaudiobuffers
229+
constbool bypassBuffers =!areInputAudioFrames(inputs)|| (areInputFrameSizesEqual(inputs)&&areFrameBuffersEmpty());
223230
size_t minInputFrameSize =0;
224231

225232
if(!bypassBuffers)
@@ -229,10 +236,10 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
229236
{
230237
if(!inputs.at(index)->getDataSize())
231238
{
232-
LOG_DEBUG("Empty frame from filter graph input" << index <<". Remaining frames in buffer:" <<_inputFramesBuffer.at(index).getBufferSize());
239+
LOG_DEBUG("Empty frame from filter graph input" << index <<". Remainingaudioframes in buffer:" <<_inputAudioFramesBuffer.at(index).getBufferSize());
233240
continue;
234241
}
235-
_inputFramesBuffer.at(index).addFrame(inputs.at(index));
242+
_inputAudioFramesBuffer.at(index).addFrame(inputs.at(index));
236243
}
237244

238245
// Get the minimum input frames size
@@ -244,7 +251,7 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
244251
for(size_t index =0; index < inputs.size(); ++index)
245252
{
246253
// Retrieve frame from buffer or directly from input
247-
IFrame* inputFrame = (bypassBuffers)? inputs.at(index) :_inputFramesBuffer.at(index).getFrame(minInputFrameSize);
254+
IFrame* inputFrame = (bypassBuffers)? inputs.at(index) :_inputAudioFramesBuffer.at(index).getFrame(minInputFrameSize);
248255
constint ret =av_buffersrc_add_frame_flags(_filters.at(index)->getAVFilterContext(), &inputFrame->getAVFrame(), AV_BUFFERSRC_FLAG_PUSH);
249256

250257
if(ret <0)
@@ -356,7 +363,7 @@ void FilterGraph::addInBuffer(const std::vector<IFrame*>& inputs)
356363
const AudioFrameDescaudioFrameDesc(audioFrame->getSampleRate(),
357364
audioFrame->getNbChannels(),
358365
getSampleFormatName(audioFrame->getSampleFormat()));
359-
_inputFramesBuffer.push_back(FrameBuffer(audioFrameDesc));
366+
_inputAudioFramesBuffer.push_back(AudioFramebuffer(audioFrameDesc));
360367
}
361368
// video frame
362369
elseif((*it)->isVideoFrame())

‎src/AvTranscoder/filter/FilterGraph.hpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ namespace avtranscoder
1616
{
1717

1818
/**
19-
* @brief Filter graph input frame buffer.
20-
* This FIFO buffer contains IFrame pointers and can deliver specific size frames.
21-
*
22-
*@todo Only for audio frame, for the moment. Make it usable with video frames.
19+
* @brief Filter graph inputaudioframe buffer.
20+
* This FIFO buffer contains IFrame pointers and can deliver specific sizeaudioframes.
21+
* It makes no sense to use such buffers for video, since video frames are spatially consistent,
22+
*so can not be divided nor concatenated.
2323
**/
24-
classFrameBuffer
24+
classAudioFramebuffer
2525
{
2626
public:
27-
FrameBuffer(const AudioFrameDesc& audioFrameDesc);
28-
~FrameBuffer();
27+
AudioFramebuffer(const AudioFrameDesc& audioFrameDesc);
28+
~AudioFramebuffer();
2929

3030
/**
3131
* @brief Return whether the buffer is empty or not.
@@ -143,15 +143,16 @@ class AvExport FilterGraph
143143
*/
144144
size_tgetMinInputFrameSize(const std::vector<IFrame*>& inputs);
145145

146-
boolareInputFrameSizeEqual(const std::vector<IFrame*>& inputs);
146+
boolareInputAudioFrames(const std::vector<IFrame*>& inputs);
147+
boolareInputFrameSizesEqual(const std::vector<IFrame*>& inputs);
147148
boolareFrameBuffersEmpty();
148149

149150
private:
150151
AVFilterGraph* _graph;///< The graph which holds the filters.
151152
std::vector<Filter*> _filters;///< List of filters to process.
152153
const ICodec& _codec;///< Codec of the stream on which the filters will be applied.
153154

154-
std::vector<FrameBuffer> _inputFramesBuffer;
155+
std::vector<AudioFramebuffer> _inputAudioFramesBuffer;
155156

156157
/**
157158
* @brief Is the FilterGraph initialized.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp