@@ -18,25 +18,25 @@ namespace avtranscoder
18
18
19
19
/* *****************
20
20
21
- FrameBuffer
21
+ AudioFramebuffer
22
22
23
23
******************/
24
24
25
- FrameBuffer::FrameBuffer (const AudioFrameDesc& audioFrameDesc)
25
+ AudioFramebuffer::AudioFramebuffer (const AudioFrameDesc& audioFrameDesc)
26
26
: _audioFrameDesc(audioFrameDesc)
27
27
, _frameQueue()
28
28
, _totalDataSize(0 )
29
29
, _positionInFrontFrame(0 )
30
30
{
31
31
}
32
32
33
- FrameBuffer ::~FrameBuffer ()
33
+ AudioFramebuffer ::~AudioFramebuffer ()
34
34
{
35
35
for (size_t i =0 ; i < _frameQueue.size (); ++i)
36
36
popFrame ();
37
37
}
38
38
39
- void FrameBuffer ::addFrame (IFrame* frame)
39
+ void AudioFramebuffer ::addFrame (IFrame* frame)
40
40
{
41
41
LOG_DEBUG (" Add a new" << frame->getDataSize () <<" bytes frame to frame buffer. New buffer size:" << _frameQueue.size () +1 );
42
42
// Copy the input frame to store it into the queue
@@ -50,13 +50,13 @@ void FrameBuffer::addFrame(IFrame* frame)
50
50
_frameQueue.push (newAudioFrame);
51
51
}
52
52
53
- void FrameBuffer ::popFrame ()
53
+ void AudioFramebuffer ::popFrame ()
54
54
{
55
55
_frameQueue.pop ();
56
56
LOG_DEBUG (" Pop frame from buffer. Remaining frames in buffer:" << _frameQueue.size ());
57
57
}
58
58
59
- IFrame*FrameBuffer ::getFrame (const size_t size)
59
+ IFrame*AudioFramebuffer ::getFrame (const size_t size)
60
60
{
61
61
LOG_DEBUG (" Get a" << size <<" bytes frame from a" << _totalDataSize <<" bytes frame buffer" );
62
62
IFrame* next = _frameQueue.front ();
@@ -133,7 +133,7 @@ FilterGraph::FilterGraph(const ICodec& codec)
133
133
134
134
FilterGraph::~FilterGraph ()
135
135
{
136
- _inputFramesBuffer .clear ();
136
+ _inputAudioFramesBuffer .clear ();
137
137
for (std::vector<Filter*>::iterator it = _filters.begin (); it < _filters.end (); ++it)
138
138
{
139
139
delete (*it);
@@ -145,7 +145,7 @@ size_t FilterGraph::getAvailableFrameSize(const std::vector<IFrame*>& inputs, co
145
145
{
146
146
size_t frameSize = inputs.at (index)->getDataSize ();
147
147
if (frameSize ==0 )
148
- frameSize =_inputFramesBuffer .at (index).getDataSize ();
148
+ frameSize =_inputAudioFramesBuffer .at (index).getDataSize ();
149
149
return frameSize;
150
150
}
151
151
@@ -166,10 +166,10 @@ size_t FilterGraph::getMinInputFrameSize(const std::vector<IFrame*>& inputs)
166
166
167
167
bool FilterGraph::hasBufferedFrames ()
168
168
{
169
- if (!_inputFramesBuffer .size ())
169
+ if (!_inputAudioFramesBuffer .size ())
170
170
return false ;
171
171
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)
173
173
{
174
174
if (it->isEmpty ())
175
175
return false ;
@@ -179,13 +179,20 @@ bool FilterGraph::hasBufferedFrames()
179
179
180
180
bool FilterGraph::hasBufferedFrames (const size_t index)
181
181
{
182
- if (index >=_inputFramesBuffer .size ())
182
+ if (index >=_inputAudioFramesBuffer .size ())
183
183
return false ;
184
184
185
- return !_inputFramesBuffer .at (index).isEmpty ();
185
+ return !_inputAudioFramesBuffer .at (index).isEmpty ();
186
186
}
187
187
188
- bool FilterGraph::areInputFrameSizeEqual (const std::vector<IFrame*>& inputs)
188
+ bool FilterGraph::areInputAudioFrames (const std::vector<IFrame*>& inputs)
189
+ {
190
+ if (!inputs.size ())
191
+ return false ;
192
+ return typeid (*(inputs.at (0 ))) ==typeid (AudioFrame);
193
+ }
194
+
195
+ bool FilterGraph::areInputFrameSizesEqual (const std::vector<IFrame*>& inputs)
189
196
{
190
197
if (!inputs.size () || inputs.size () ==1 )
191
198
return true ;
@@ -201,10 +208,10 @@ bool FilterGraph::areInputFrameSizeEqual(const std::vector<IFrame*>& inputs)
201
208
202
209
bool FilterGraph::areFrameBuffersEmpty ()
203
210
{
204
- if (!_inputFramesBuffer .size ())
211
+ if (!_inputAudioFramesBuffer .size ())
205
212
return true ;
206
213
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)
208
215
{
209
216
if (!it->isEmpty ())
210
217
return false ;
@@ -218,8 +225,8 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
218
225
if (!_isInit)
219
226
init (inputs, output);
220
227
221
- // Check whether we can bypass the input buffers
222
- const bool bypassBuffers =areInputFrameSizeEqual (inputs) &&areFrameBuffersEmpty ();
228
+ // Check whether we can bypass the inputaudio buffers
229
+ const bool bypassBuffers =! areInputAudioFrames (inputs)|| ( areInputFrameSizesEqual (inputs) &&areFrameBuffersEmpty () );
223
230
size_t minInputFrameSize =0 ;
224
231
225
232
if (!bypassBuffers)
@@ -229,10 +236,10 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
229
236
{
230
237
if (!inputs.at (index)->getDataSize ())
231
238
{
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 <<" . Remainingaudio frames in buffer:" <<_inputAudioFramesBuffer .at (index).getBufferSize ());
233
240
continue ;
234
241
}
235
- _inputFramesBuffer .at (index).addFrame (inputs.at (index));
242
+ _inputAudioFramesBuffer .at (index).addFrame (inputs.at (index));
236
243
}
237
244
238
245
// Get the minimum input frames size
@@ -244,7 +251,7 @@ void FilterGraph::process(const std::vector<IFrame*>& inputs, IFrame& output)
244
251
for (size_t index =0 ; index < inputs.size (); ++index)
245
252
{
246
253
// 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);
248
255
const int ret =av_buffersrc_add_frame_flags (_filters.at (index)->getAVFilterContext (), &inputFrame->getAVFrame (), AV_BUFFERSRC_FLAG_PUSH);
249
256
250
257
if (ret <0 )
@@ -356,7 +363,7 @@ void FilterGraph::addInBuffer(const std::vector<IFrame*>& inputs)
356
363
const AudioFrameDescaudioFrameDesc (audioFrame->getSampleRate (),
357
364
audioFrame->getNbChannels (),
358
365
getSampleFormatName (audioFrame->getSampleFormat ()));
359
- _inputFramesBuffer .push_back (FrameBuffer (audioFrameDesc));
366
+ _inputAudioFramesBuffer .push_back (AudioFramebuffer (audioFrameDesc));
360
367
}
361
368
// video frame
362
369
else if ((*it)->isVideoFrame ())